diff options
72 files changed, 11569 insertions, 2 deletions
diff --git a/doc/src/examples/sensors.qdoc b/doc/src/examples/sensors.qdoc new file mode 100644 index 0000000..3363642 --- /dev/null +++ b/doc/src/examples/sensors.qdoc @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example sensors/grueplugin + \title Grue Plugin + + The Grue plugin example demonstrates the creation of a new sensor type, + a sensor backend and plugin for the sensors library. Related to this example + is the \l{sensors/grueapp}{Grue Application} example. + + \tableofcontents + + \section1 Grue Sensor Type + + The files for this are: + + \list + \o gruesensor.h + \o gruesensor_p.h + \o gruesensor.cpp + \endlist + + First up is the sensor type. This is the interface for sensors that report + on your likelihood of being eaten by a Grue. Such sensors are very important + to adventurers, particularly if they are going into dark places as this is + where Grues live. + + The interface is a simple one. It provides only 1 piece of information, your + chance of being eaten. For the details on how this is property should be + interpreted please see the documentation in gruesensor.cpp. + + This example was created using the make_sensor.pl script which can be found in + src/sensors. As such, it contains some generated code that defines the convenience + classes GrueFilter and GrueSensor. + + \section1 Grue Sensor Backend + + The files for this are: + + \list + \o gruesensorimpl.h + \o gruesensorimpl.cpp + \endlist + + The Grue sensor needs a backend before it can be used. The backend provided + is rather basic and it relies on some kind of light sensor to work but it + gets the job done. If new hardware that can detect the actual presence of Grues + becomes available a backend could be created that supports this hardware and + applications using the Grue sensor would be able to use it without any changes. + + There are a few mandatory parts to a backend. They are the start and stop methods + and the setReading call. The start and stop methods are used to start and stop + any underlying hardware. In the case of this backend they start and stop a + light sensor. In the start method, the backend should be sure to call the + sensorStopped() or sensorBusy() methods if it cannot start. + + \snippet ../../examples/sensors/grueplugin/gruesensorimpl.cpp start + + The setReading method is needed so that the sensors library knows where the + readings are coming from. This backend has a local copy of the reading so + it passes a pointer to the function. + + \snippet ../../examples/sensors/grueplugin/gruesensorimpl.cpp setReading + + However it is also possible to pass null to the setReading method in which + case the sensors library will create an instance and return a pointer. + + \code + // Create a reading instance for us to use + m_reading = setReading<GrueSensorReading>(0); + \endcode + + The Grue sensor backend also supplies some metadata. + + The backend checks 2 things, how dark it is and how long you have been in the dark. + It uses the readingChanged() signal to know when to check the light sensor's + value. Once it is dark, it uses a timer to increase your chance of being eaten. + + \section1 Grue Sensor Plugin + + The files for this are: + + \list + \o main.cpp + \endlist + + The Grue sensor backend is delivered as a plugin. The plugin has a factory object + that registers the types available and does the actual instantiation of the backend. + + \sa {sensors/grueapp}{Grue Application} +*/ + + +/*! + \example sensors/grueapp + \title Grue Application + + The Grue application example demonstrates the use of the Grue sensor which + was defined and implemented by the \l{sensors/grueplugin}{Grue Plugin} example. + The Grue application is a commandline application. It is significant to note that + there is no link-time dependency on the Grue plugin. The Grue application uses + the generic access feature of the Sensors API. + + \sa {sensors/grueplugin}{Grue Plugin} +*/ + + +/*! + \example sensors/cubehouse + \title Cube House + + \image cubehouse.png + + The Cube House example demonstrates the use of the accelerometer to drive a camera + to create a pseudo-3D effect. It also demonstrates the use of a filter to smooth + out the accelerometer values. + + The accelerometer is created and the filter is added. + + \snippet ../../examples/sensors/cubehouse/view.cpp accelerometer + + When new values are available, the view is recalculated. + + \snippet ../../examples/sensors/cubehouse/view.cpp accelerometer2 + + The filter is defined like this. + + \snippet ../../examples/sensors/cubehouse/view.cpp smoothed +*/ + + +/*! + \example sensors/sensor_explorer + \title Sensor Explorer + + \image sensor_explorer.png + + The Sensor Explorer example demonstrates how to read the meta-data of available sensors. + It was designed as a debugging aid. +*/ + diff --git a/doc/src/images/sensor_explorer.png b/doc/src/images/sensor_explorer.png Binary files differnew file mode 100644 index 0000000..91d255e --- /dev/null +++ b/doc/src/images/sensor_explorer.png diff --git a/doc/src/images/sensors-coordinates.jpg b/doc/src/images/sensors-coordinates.jpg Binary files differnew file mode 100644 index 0000000..e2e9890 --- /dev/null +++ b/doc/src/images/sensors-coordinates.jpg diff --git a/doc/src/images/sensors-coordinates2.jpg b/doc/src/images/sensors-coordinates2.jpg Binary files differnew file mode 100644 index 0000000..8dd43a2 --- /dev/null +++ b/doc/src/images/sensors-coordinates2.jpg diff --git a/doc/src/images/sensors-coordinates3.jpg b/doc/src/images/sensors-coordinates3.jpg Binary files differnew file mode 100644 index 0000000..0263400 --- /dev/null +++ b/doc/src/images/sensors-coordinates3.jpg diff --git a/doc/src/images/sensors-dynamic.png b/doc/src/images/sensors-dynamic.png Binary files differnew file mode 100644 index 0000000..d2ba937 --- /dev/null +++ b/doc/src/images/sensors-dynamic.png diff --git a/doc/src/images/sensors-geo-vs-raw-magnetism.jpg b/doc/src/images/sensors-geo-vs-raw-magnetism.jpg Binary files differnew file mode 100644 index 0000000..272fa31 --- /dev/null +++ b/doc/src/images/sensors-geo-vs-raw-magnetism.jpg diff --git a/doc/src/images/sensors-orientation.jpg b/doc/src/images/sensors-orientation.jpg Binary files differnew file mode 100644 index 0000000..245533d --- /dev/null +++ b/doc/src/images/sensors-orientation.jpg diff --git a/doc/src/images/sensors-overview.png b/doc/src/images/sensors-overview.png Binary files differnew file mode 100644 index 0000000..29e9ebd --- /dev/null +++ b/doc/src/images/sensors-overview.png diff --git a/doc/src/images/sensors-rotation-anim.gif b/doc/src/images/sensors-rotation-anim.gif Binary files differnew file mode 100644 index 0000000..22c678d --- /dev/null +++ b/doc/src/images/sensors-rotation-anim.gif diff --git a/doc/src/images/sensors-rotation.jpg b/doc/src/images/sensors-rotation.jpg Binary files differnew file mode 100644 index 0000000..1bd1b14 --- /dev/null +++ b/doc/src/images/sensors-rotation.jpg diff --git a/doc/src/images/sensors-rotation2.jpg b/doc/src/images/sensors-rotation2.jpg Binary files differnew file mode 100644 index 0000000..1bf34fe --- /dev/null +++ b/doc/src/images/sensors-rotation2.jpg diff --git a/doc/src/images/sensors-rotation3.jpg b/doc/src/images/sensors-rotation3.jpg Binary files differnew file mode 100644 index 0000000..d69a3e1 --- /dev/null +++ b/doc/src/images/sensors-rotation3.jpg diff --git a/doc/src/images/sensors-sides.jpg b/doc/src/images/sensors-sides.jpg Binary files differnew file mode 100644 index 0000000..8e84224 --- /dev/null +++ b/doc/src/images/sensors-sides.jpg diff --git a/doc/src/images/sensors-sides2.jpg b/doc/src/images/sensors-sides2.jpg Binary files differnew file mode 100644 index 0000000..db66a9b --- /dev/null +++ b/doc/src/images/sensors-sides2.jpg diff --git a/doc/src/images/sensors-static.png b/doc/src/images/sensors-static.png Binary files differnew file mode 100644 index 0000000..657aaad --- /dev/null +++ b/doc/src/images/sensors-static.png diff --git a/doc/src/plugins/qml-sensors.qdoc b/doc/src/plugins/qml-sensors.qdoc new file mode 100644 index 0000000..15f4c99 --- /dev/null +++ b/doc/src/plugins/qml-sensors.qdoc @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** 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$ +** +****************************************************************************/ + +/*! + \group qml-sensors + \title QML Sensors API Plugin + QML Support for the QtMobility Project Sensors API. +*/ + +/*! + \page qml-sensors.html + + \title Sensors QML Plugin + + \brief A QML plugin for the QtMobility Project Sensors API. + + \section1 Overview + + The QML Sensors Plugin provides an easy to use interface to the Sensors API. + It enables us to receive sensor events and to read current values from + sensors. + + The plugin contains many sensor types and access functions to read values + from them. As an example consider the orientation sensor. The orientation + example simply displays text on-screen to show the current orientation. + + The QML code that reads the value is quite simple. Here we see a QML component + \e orientation declared which is an \l OrientationSensor element. First + the sensor is started by setting the \l {Sensor::active}{active} property + to \e true. The element receives a signal when the reading changes and it + is picked up by the \e onReadingChanged slot. Now the + \l {OrientationSensor::reading}{reading} property of this element can be + used to extract the current orientation so that it can be compared against + the defined values of various orientations in the \l OrientationReading + element. + + \qml + OrientationSensor { + id: orientation + active: true + + onReadingChanged: { + + if (reading.orientation == OrientationReading.FaceUp) + content.state = "FaceUp"; + + // ... more tests for different orientations ... + } + } + + \endqml + + Other sensors can be treated in a similar manner. For example, the \l Compass + sensor could have almost identical coding + + \qml + Compass { + id: compass + active: true + + onReadingChanged: { + compassHeading.text = reading.azimuth; + + // ... + } + } + \endqml + + \section1 QML Elements + \annotatedlist qml-sensors_type + \annotatedlist qml-sensors_reading + +*/ + + diff --git a/doc/src/sensors-dynamic.dia b/doc/src/sensors-dynamic.dia Binary files differnew file mode 100644 index 0000000..d5cb8ac --- /dev/null +++ b/doc/src/sensors-dynamic.dia diff --git a/doc/src/sensors-overview.dia b/doc/src/sensors-overview.dia Binary files differnew file mode 100644 index 0000000..fb3dc66 --- /dev/null +++ b/doc/src/sensors-overview.dia diff --git a/doc/src/sensors-static.dia b/doc/src/sensors-static.dia Binary files differnew file mode 100644 index 0000000..cd5d3d3 --- /dev/null +++ b/doc/src/sensors-static.dia diff --git a/doc/src/sensors.qdoc b/doc/src/sensors.qdoc new file mode 100644 index 0000000..6dc1efb --- /dev/null +++ b/doc/src/sensors.qdoc @@ -0,0 +1,524 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! +\page sensors-api.html +\title Sensors +\brief The Sensors API provides access to sensors. +\ingroup mobility +\ingroup technology-apis + + +The Sensors API is primarily concerned with low-level, real-time sensors such as +the accelerometer although there are higher-level, event-driven sensors represented too. + +\tableofcontents + +\section1 Sensor Types + +On a device there can be many types of sensors. Not all of the types that the Sensors API +supports may be available. There may also be types available that are not defined in the +Sensors API. You can find the sensor types available on a device using the +\l QSensor::sensorTypes() function. + +For a list of built-in sensor types, see the \l{Sensor Classes} section below. + +\section1 Common Conventions + +Unless otherwise specified, sensors shall use the +\l{http://en.wikipedia.org/wiki/Cartesian_coordinate_system}{Right Hand Cartesian coordinate system}. + +\image sensors-coordinates.jpg + +To allow for measurements in all 6 directions, negative values are used. + +\image sensors-coordinates2.jpg + +Where rotation around an axis is used, the rotation shall be expressed as a Right Hand rotation. + +\image sensors-coordinates3.jpg + +In general, sensor data is oriented to the top of the device. If values are to be displayed on +the screen the values may need to be transformed so that they match the user interface orientation. A sensor +may define its data as being oriented to the UI. This will be noted in the documentation for the +sensor. + +\image sensors-sides2.jpg + +\section1 Using a Sensor + +The life cycle of a sensor is typically: + +\list +\o Create an instance of QSensor or one of its sub-classes on the stack or heap. +\o Setup as required by the application. +\o Start receiving values. +\o Sensor data is used by the application. +\o Stop receiving values. +\endlist + +Here is an example of creating a sensor on the heap and on the stack. + +\snippet snippets/sensors/creating.cpp Creating a sensor + +\section1 Accessing sensor data in a generic fashion + +The preferred way to deal with sensor data is via the \l{Reading Classes}. +However, sometimes this may not be possible. For example, you may be deploying +an application to a device that has a new sensor type but no C++ header +describing the reading class is available. + +Thanks to Qt's property system you can still access the sensor data. You need to know +3 pieces of information in order to do this: + +\list +\o The sensor type. +\o The property name or index. +\o The property type or a comparable type. +\endlist + +For example, here is an example of how you can access a property of the accelerometer. +This code does not require any compile-time links to \l QAccelerometer or +\l QAccelerometerReading. + +\snippet snippets/sensors/start.cpp Starting a sensor + +You can discover all of this information at runtime too. The sensor_explorer example +shows you information about available sensors. + +\section1 Platform notes + +\section2 S60 3rd Edition + +Note that support for sensors in S60 3.1 device is extremely limited due to the native API. +Only the accelerometer is supported and only a few devices. + +Some devices running S60 3.2 support a newer native API and therefore support more sensors. + +More information about these platforms can be found \l{http://wiki.forum.nokia.com/index.php/Nokia_Sensor_APIs}{here}. + +Note that timestamps on this platform come from the system clock. +Applications need to handle shifts in time caused by the user manually setting the clock or +from the automatic time synchronization feature setting the clock. + +\section2 Symbian + +Most Symbian devices have their sensor data read via the Sensor Framework API. Some limitations +appear in the Sensors API as a result. + +Only specific data rates can be selected. Setting an invalid data rate has no effect so applications +that need to influence the used data rate should connect to the sensor, check the available data rates +and select one as appropriate. + +Readings are delivered to the application via a queue. If the application blocks the event loop or otherwise +interferes with the ability of the system to deliver readings (eg. by using up too much CPU time), they can +get blocked in this queue. Since delayed readings are not useful, the system will drop readings as needed +so that the application is always dealing with the most recent reading available. The application can tweak +the policy by setting properties on the sensor. + +The default policy is to accept up to 100 readings from the system at once and to discard all but the last one. + +\code +QAccelerometer sensor; +sensor.setProperty("maximumReadingCount", 100); +sensor.setProperty("processAllReadings", false); +\endcode + +Applications that desire the original behaviour can set the maximumReadingCount to 1. Note that this does not +guarantee that readings will not be dropped by the system. If the queue fills up, readings will be dropped. + +\code +QAccelerometer sensor; +sensor.setProperty("maximumReadingCount", 1); +\endcode + +Larger maximumReadingCount values reduce the need for the lower-priority sensor daemon to get CPU timeslices. +If the application is using lots of CPU but is still able to process readings quickly, it can request that +all the fetched readings are processed. + +\code +QAccelerometer sensor; +sensor.setProperty("maximumReadingCount", 10); +sensor.setProperty("processAllReadings", true); +\endcode + +More information about the native API can be found \l{http://wiki.forum.nokia.com/index.php/Nokia_Sensor_APIs}{here}. + +Note that timestamps on this platform come from the system clock. +Applications need to handle shifts in time caused by the user manually setting the clock or +from the automatic time synchronization feature setting the clock. + +The ambient light sensor can only detect changes. Unlike all other sensors, it cannot report the "current value" +so it is not possible to determine the current ambient light level. + +\section2 Maemo 5 + +The N900 represents a unique device for the Sensors API. Unlike the Symbian and MeeGo platforms, sensor data is +retrieved directly from the kernel and this has implications on the API. + +Axes are rotated when compared to Symbian or MeeGo devices. While Symbian and MeeGo devices orient their +hardware sensors towards a portrait orientation, the N900 does not do this. Instead, it orients the hardware sensors +towards its default landscape orientation. This has portability implications for applications that want to force the +use of a particular screen orientation and use sensors. The following code shows how accelerometer values can be +interpreted to ensure consistent results on the N900 as well as Symbian and MeeGo devices. + +\code +#ifdef Q_WS_MAEMO_5 + qreal x = reading->y(); + qreal y = -reading->x(); +#else + qreal x = reading->x(); + qreal y = reading->y(); +#endif + qreal z = reading->z(); +\endcode + +Alternatively, applications can set the environment variable \c N900_PORTRAIT_SENSORS to 1. This must be done +before any Sensors API calls are made so the beginning of the main function is a good place to do it. + +\code +int main(int argc, char **argv) +{ + qputenv("N900_PORTRAIT_SENSORS", "1"); + ... +\endcode + +Despite hardware that allows for multiple data rates and output ranges, the Sensors API does not allow access to +these due to permissions issues. + +Readings are polled using a timer. If the application blocks the event loop or otherwise interferes with the +ability of the timer to fire, readings will be missed. There are no queues so applications must ensure that +they process the readings promptly (possibly saving them into a buffer for later processing if required). + +\section2 MeeGo + +The data rates offered by MeeGo are not tied to how fast the hardware runs. + +The default data rate for a sensor is likely to be low when compared to Symbian or Maemo 5. Applications should +request a suitable data rate, taking care to avoid selecting invalid rates on other devices. + +Sensors may be suspended by the system in order to save power. Applications can avoid this by setting a property +on the sensor object. + +\code +QAccelerometer *accelerometer = new QAccelerometer(this); +accelerometer->setProperty("alwaysOn", true); +accelerometer->start(); +\endcode + +Unlike Symbian and N900, MeeGo does not currently provide initial readings. Thus, certain sensors must detect +a change in value before a value can be reported. Examples include the orientation sensor and ambient light +sensor. + +\section1 Front end, back end + +The Sensors API has a front end, for application developers to use and a back end, +where device implementors write code to access their hardware. As an application +developer you do not need to access the back end though it may be useful to understand +how it works. + +Commands from the application are delivered through QSensor and then down to the +device plugin. Data comes back through the QSensorReading class. + +\image sensors-overview.png + +More information about the back end can be found in \l{Sensors Backend}. + +\section1 Main Classes + +The primary classes that make up the Sensors API. + +\annotatedlist sensors_main + +\section1 Reading Classes + +The best way to access sensor data is via one of these classes. + +\annotatedlist sensors_reading + +\section1 Sensor Classes + +These classes provide convenience wrappers that reduce the need for casting. +Each of these classes represents a sensor type that the Sensors API knows +about. Note that additional types may be made available at run-time. See +\l{Sensor Types} for more information. + +\annotatedlist sensors_type + +\section1 Filter Classes + +As with the sensor classes, these provide convenience wrappers that reduce +the need for casting. + +\annotatedlist sensors_filter + +*/ + +/*! +\page sensors-backend.html +\title Sensors Backend +\brief The Sensors Backend connects the Sensors API to the platform services or hardware sensors. + +The Sensors Backend connects the Sensors API to the platform services or hardware sensors. + +\tableofcontents + +\section1 Overview + +\section1 Backend API + +QSensor instances talk to a backend object. Backends are usually supplied +with the QtSensors library for a specific device although third party +backends may be used as well. A backend may talk +directly to hardware or it may talk to a system service. In some instances +it may even talk to another sensor. +An example of this is the orientation sensor backend that talks to an +accelerometer to determine the orientation. + +There are also some \l{Sensors Backend Topics}{topics} specific to backend +implementors. + +\section1 Backend Classes +If you are making sensors available through the Sensors API, these are the +classes to use. +\annotatedlist sensors_backend + +\sa {Sensors Backend Topics} + +*/ + +/*! +\group sensors_backend_topics +\title Sensors Backend Topics +\generatelist related +*/ + +/*! +\page creating-a-sensor-plugin.html +\title Creating a sensor plugin +\ingroup sensors_backend_topics + +\section1 How a sensor plugin is loaded + +Since sensor backends are created on demand, the sensor plugin is loaded and asked +to register the sensor backends it handles. The plugin should implement +QSensorPluginInterface::registerSensors() and call QSensorManager::registerBackend() +to register available backends. Typically the plugin will also inherit from +QSensorBackendFactory and implement +QSensorBackendFactory::createBackend() in order to instantiate backends it has registered. + +The simplest plugin will have just once sensor backend although there is no reason +that multiple sensor backends cannot be in a plugin. + +An example follows. + +\snippet snippets/sensors/plugin.cpp Plugin + +If you would like to build a backend into a library or application you can use the +REGISTER_STATIC_PLUGIN() macro although it may not work in all situations as it +uses static initialization. + +*/ + +/*! +\page determining-the-default-sensor-for-a-type.html +\title Determining the default sensor for a type +\ingroup sensors_backend_topics + +\section1 Multiple sensors can exist for a type + +Sensors was designed so that multiple sensors could exist for a given type. Why? +Consider this example. + +The N900 has an accelerometer built-in. It also features bluetooth and can pair +with a gaming controller that features an accelerometer. To a developer writing +a game these two devices are conceptually the same type. + +\section1 Default sensor for a type + +To avoid the need to know (or check) what the default sensor for a type is, the system will +use the default sensor for a type. Most of the time this is what the app developer wants to +do. In cases where the app developer wants to select a specific sensor they must call the +QSensor::setIdentifier() method before they start the sensor so that the appropriate backend +is used. + +From a system perspective though, selecting which sensor should be the default gets tricky. +The sensors library uses the first registered identifier as the default. This means that the +order in which sensor backends are registered is important so the system will allow a config +file to determine the default instead. + +\section1 Sensors.conf + +The config file that determines the default sensor for a type is called Sensors.conf. If present, +it is located in /etc/xdg/Nokia. It is read using QSettings so it has the standard formatting +of a QSettings .conf file. + +The settings live in the Default group and the general format is: +\code +type = identifier +\endcode + +An example Sensors.conf that ensures the N900 accelerometer is used as the default no matter the +order in which backends were registered is presented here. + +\code +[Default] +QAccelerometer = n900.accelerometer +\endcode + +If Sensors.conf specifies an identifier that is not registered then the system will fall back to +the first registered identifier as the default. + +Note that there is special case logic to prevent the generic plugin's backends from becoming the +default when another backend is registered for the same type. This logic means that a backend +identifier starting with \c{generic.} will only be the default if no other backends have been +registered for that type or if it is specified in \c{Sensors.conf}. + +*/ + +/*! +\page dynamic-sensor-backend-registration.html +\title Dynamic Sensor Backend Registration +\ingroup sensors_backend_topics + +\section1 Static Backend Registration + +Sensor backends are generally registered statically. The registration happens when the sensors +library is first used and the registration remains in effect while the program runs. + +\image sensors-static.png + +Statically registered backends may still exhibit some dynamic behaviour as the +QSensorBackendFactory is free to return 0 to indicate that a backend cannot be created. + +\section1 Dynamic Backend Registration + +While static registration is fine for most backends there are some situations where this is +problematic. + +The clearest example is backends that represent non-fixed hardware. As an example, lets consider +a game controller that is connected via Bluetooth. As there may be more than one game controller +in range of the phone, the program wants to record that a specific game controller should be used. +If the backend had been registered statically there would have been no unique information about +the controller. Instead, the registration is delayed until the controller is seen. + +\image sensors-dynamic.png + +\section1 Suggested Registration Policy + +A backend for fixed hardware should be registered immediately. Applications can see that the +sensor can be used. + +A backend for remote hardware should not be registered immediately. Applications can see that +the sensor cannot be used. When the remote hardware becomes available the backend should be +registered. Applications can see that the sensor is now available. + +If it is necessary to return 0 from a factory for a backend that was registered, the backend +should be unregistered. Applications can see that the sensor is no longer available. If the +factory can create the backend again it should be registered. Applications can see that the +sensor is available again. + +When the underlying hardware is no longer available, the backend should be deregistered. +Existing instances of the backend should report error states to the application but should +handle the situation gracefully. + +*/ + +/*! +\page qml-sensors.html +\title Sensors QML Plugin +\brief A QML plugin for the QtMobility Project Sensors API. + +\section1 Overview + +The identifying string for this component is \e {"QtMobility.sensors"}. +Use this in the QML \e {import} statement. + +The Sensors QML Plugin registers the C++ Sensors classes directly to the QML environment. +This causes some limitations due to the use of types that do not work in the QML environment. +See \l{Sensors QML Limitations}{below} for a list of the known limitations. + +See \l Sensors for more information about the Sensors API. + +\section1 Sensors QML Limitations + +The following limitations affect the Sensors QML bindings for Qt Mobility 1.1 and 1.2. + +\list 1 +\o The QSensor::sensorid property cannot be set because QML does not support QByteArray. + This means that it is not possible to specify a particular sensor when two or more have + been registered with the same type. +\o The QSensor::availableDataRates property cannot be used because QML does not support \l qrangelist. +\o The QSensor::outputRanges property cannot be used because QML does not support \l qoutputrangelist. +\o The QLightSensor::fieldOfView property cannot be used because QML cannot access dynamic properties. +\o The QMagnetometer::returnGeoValues property cannot be used because QML cannot access dynamic properties. +\o The QRotationSensor::hasZ property cannot be used because QML cannot access dynamic properties. +\o The QTapSensor::returnDoubleTapEvents property cannot be used because QML cannot access dynamic properties. +\endlist + +\section1 QML Sensor Elements + +These elements represent specific types of sensors. + +\annotatedlist qml-sensors_type + +\section1 QML Reading Elements + +The data from a sensor comes through a reading class. + +\annotatedlist qml-sensors_reading + +*/ + +/*! +\page meego-integration-notes.html +\title MeeGo Integration Notes +\ingroup sensors_backend_topics + +\section1 MeeGo Integration Notes + +The implementation of the API builds on top of the MeeGo Sensor Framework +that provides all the sensors specified in 1.2 API version. + +\section2 Available sensors + +If HW sensor is missing, the configuration file "Sensors.conf" +must be updated and sensor removed. The file +has the following format: + +\code +[Default] +QAccelerometer=meego.accelerometer +QAmbientLightSensor=meego.als +\endcode + +It lists sensor types and type's default implementation by giving the sensor id. +If the type is omitted then the backend does not support it in this device; this +gives a way of controlling and differentiating the supported sensor set. + +*/ + diff --git a/doc/src/snippets/sensors/creating.cpp b/doc/src/snippets/sensors/creating.cpp new file mode 100644 index 0000000..98e7d5d --- /dev/null +++ b/doc/src/snippets/sensors/creating.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $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$ +** +****************************************************************************/ + +#include <QWidget> +#include <qaccelerometer.h> +#include <qorientationsensor.h> + +class MyWidget : public QWidget +{ + void create(); +}; + +void MyWidget::create() +{ +//! [Creating a sensor] +// On the heap (deleted when this object is deleted) +QAccelerometer *sensor = new QAccelerometer(this); + +// On the stack (deleted when the current scope ends) +QOrientationSensor orient_sensor; +//! [Creating a sensor] + + Q_UNUSED(sensor) + Q_UNUSED(orient_sensor); +} + diff --git a/doc/src/snippets/sensors/main.cpp b/doc/src/snippets/sensors/main.cpp new file mode 100644 index 0000000..81e526c --- /dev/null +++ b/doc/src/snippets/sensors/main.cpp @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $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$ +** +****************************************************************************/ + +int main(int /*argc*/, char ** /*argv*/) +{ + return 0; +} + diff --git a/doc/src/snippets/sensors/mybackend.h b/doc/src/snippets/sensors/mybackend.h new file mode 100644 index 0000000..7a99caa --- /dev/null +++ b/doc/src/snippets/sensors/mybackend.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $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$ +** +****************************************************************************/ + +#ifndef MYBACKEND_H +#define MYBACKEND_H + +#include <qaccelerometer.h> +#include <qsensorbackend.h> + +class MyBackend : public QSensorBackend +{ +public: + MyBackend(QSensor *sensor) : QSensorBackend(sensor) {} + void stop() {} + void start() {} + void poll() {} + + static const char *id; +}; + +#endif diff --git a/doc/src/snippets/sensors/plugin.cpp b/doc/src/snippets/sensors/plugin.cpp new file mode 100644 index 0000000..7d548b7 --- /dev/null +++ b/doc/src/snippets/sensors/plugin.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $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$ +** +****************************************************************************/ + +#include "mybackend.h" +#include <qsensorplugin.h> +#include <qsensormanager.h> + +const char *MyBackend::id = "mybackend"; + +//! [Plugin] +class MyPluginClass : public QObject, QSensorPluginInterface, public QSensorBackendFactory +{ + Q_OBJECT + Q_INTERFACES(QSensorPluginInterface) +public: + void registerSensors() + { + QSensorManager::registerBackend(QAccelerometer::type, MyBackend::id, this); + } + + QSensorBackend *createBackend(QSensor *sensor) + { + if (sensor->identifier() == MyBackend::id) + return new MyBackend(sensor); + return 0; + } +}; +//! [Plugin] + +//Q_EXPORT_PLUGIN2(libmy_plugin_file_name, MyPluginClass); +#include "plugin.moc" diff --git a/doc/src/snippets/sensors/sensors.pro b/doc/src/snippets/sensors/sensors.pro new file mode 100644 index 0000000..61a0095 --- /dev/null +++ b/doc/src/snippets/sensors/sensors.pro @@ -0,0 +1,9 @@ +TEMPLATE=app +TARGET=sensorsdocsnippet +QT += sensors +SOURCES+=main.cpp\ + creating.cpp\ + start.cpp\ + plugin.cpp +HEADERS+=mybackend.h +LIBS+=-rdynamic diff --git a/doc/src/snippets/sensors/start.cpp b/doc/src/snippets/sensors/start.cpp new file mode 100644 index 0000000..85fe1ed --- /dev/null +++ b/doc/src/snippets/sensors/start.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $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$ +** +****************************************************************************/ + +#include <qsensor.h> + +void start() +{ +//! [Starting a sensor] +// start the sensor +QSensor sensor("QAccelerometer"); +sensor.start(); + +// later +QSensorReading *reading = sensor.reading(); +qreal x = reading->property("x").value<qreal>(); +qreal y = reading->value(1).value<qreal>(); +//! [Starting a sensor] + + Q_UNUSED(x) + Q_UNUSED(y) +} diff --git a/doc/src/snippets/snippets.pro b/doc/src/snippets/snippets.pro new file mode 100644 index 0000000..0685c62 --- /dev/null +++ b/doc/src/snippets/snippets.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs + +SUBDIRS += sensors diff --git a/examples/examples.pro b/examples/examples.pro index 7267837..0685c62 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -1,4 +1,3 @@ TEMPLATE = subdirs -SUBDIRS += accel - +SUBDIRS += sensors diff --git a/examples/accel/accel.pro b/examples/sensors/accel/accel.pro index 86303ec..86303ec 100644 --- a/examples/accel/accel.pro +++ b/examples/sensors/accel/accel.pro diff --git a/examples/accel/main.cpp b/examples/sensors/accel/main.cpp index 1fed675..1fed675 100644 --- a/examples/accel/main.cpp +++ b/examples/sensors/accel/main.cpp diff --git a/examples/sensors/cubehouse/camera.cpp b/examples/sensors/cubehouse/camera.cpp new file mode 100644 index 0000000..2e7b6af --- /dev/null +++ b/examples/sensors/cubehouse/camera.cpp @@ -0,0 +1,1051 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "camera.h" +#include <QtGui/qquaternion.h> +#include <QtCore/qmath.h> + +/*! + \class Camera + \brief The Camera class defines the projection to apply to simulate a camera's position, orientation, and optics. + \since 4.7 + \ingroup qt3d + \ingroup qt3d::viewing + + \section1 Modelview and projection transformations + + A Camera instance is applied to the scene in two phases: + modelview transformation and projection transformation. + + During the modelview transformation, the eye(), center(), and + upVector() are used to generate a 4x4 transformation matrix that + reflects the viewer's current position and orientation. + + During the projection transformation, the projectionType(), + nearPlane(), farPlane(), fieldOfView(), and viewSize() are used + to define a viewing volume as a 4x4 transformation matrix. + + The modelview transformation matrix is returned by modelViewMatrix(). + The projection transformation matrix is returned by projectionMatrix(). + + \section1 Positioning and orienting the view + + The viewer position and orientation are defined by eye(), center(), + and upVector(). The location of the viewer in world co-ordinates is + given by eye(), the viewer is looking at the object of interest located + at center(), and the upVector() specifies the direction that should + be considered "up" with respect to the viewer. + + The vector from the eye() to the center() is called the "view vector", + and the cross-product of the view vector and upVector() is called + the "side vector". The view vector specifies the direction the + viewer is looking, and the side vector points off to the right of + the viewer. + + It is recommended that the view vector and upVector() be at right angles + to each other, but this is not required as long as the angle between + them is close to 90 degrees. + + The most common use of view and up vectors that are not at right angles + is to simulate a human eye at a specific height above the ground looking + down at a lower object or up at a higher object. In this case, the + the view vector will not be true horizontal, but the upVector() indicating + the human's upright stance will be true vertical. + + \section1 Zooming the camera image + + There are two ways to zoom the image seen through the camera: either + the camera eye() position can be moved closer to the object of interest, + or the field of view of the camera lens can be changed to make it appear + as though the object is moving closer. + + Changing the eye() position changes the lighting calculation in the + scene because the viewer is in a different position, changing the + angle of light reflection on the object's surface. + + The setFieldOfView() function can be used to simulate the effect of a + camera lens. The smaller the fieldOfView(), the closer the object + will appear. The lighting calculation will be the same as for the + unzoomed scene. + + If fieldOfView() is zero, then a standard perspective frustum of + viewSize() is used to define the viewing volume. The viewSize() + can be adjusted with setViewSize() to zoom the view. A smaller + viewSize() will make the the object appear closer. + + The fieldOfView() or viewSize() is applied as part of the + projectionMatrix(). + +\section1 Rotating the viewer or object of interest + +Rotating a viewer in 3D space is a very delicate process. It is very +easy to construct the rotation incorrectly and end up in a "gimbal lock" +state where further rotations are impossible in certain directions. + +To help alleviate this problem, Camera uses a quaternion-based +approach to generate rotations. A quaternion is a compact representation +of a rotation in 3D space. Rotations can be combined through quaternion +multiplication. More information on quaternions can be found in the +documentation for QQuaternion. + +Before rotating the view, you should first decide the type +of rotation you want to perform: + +\list +\i Tilting or panning a fixed eye to reveal the scene in different +directions and orientations. This is equivalent to mounting a camera +on a fixed tripod and then adjusting the direction of view and +orientation with the tripod controls. +\i Rotating a moving viewer about the object of interest. This is +equivalent to moving the viewer around the object at a fixed distance, + but with the viewer always pointing at the object. + \endlist + + In the Camera class, the first type of rotation is performed with + rotateEye() and the second with rotateCenter(). Each of these functions + take a quaternion argument that defines the type of rotation to perform. + + The tilt(), pan(), and roll() functions return values that can help with + constructing the rotation quaternions to pass to rotateEye() and + rotateCenter(). Tilt and pan are also known as "pitch" and "yaw" in + flight dynamics. + +Three axes of rotation are used to compute the quaternions. The tilt() +quaternion is computed with respect to the side vector, the pan() +quaterion is computed with respect to the upVector(), and the roll() +quaternion is computed with respect to the view vector. + +The following example tilts the direction the eye() is pointing +by 5 degrees, and then pans by 45 degrees: + +\code +camera.rotateEye(camera.tilt(5)); +camera.rotateEye(camera.pan(45)); +\endcode + +The next example performs the two rotations in a single fluid step +(note that the rotation to be performed first is multiplied last): + + \code + camera.rotateEye(camera.pan(45) * camera.tilt(5)); + \endcode + + These two examples will not produce the same visual result, even though +it looks like they might. In the first example, the upVector() is tilted +before the pan() quaternion is computed. In the second example, the pan() +quaternion is computed using the original upVector(). + +This difference in behavior is useful in different situations. Some +applications may wish to perform all rotations relative to the original +viewer orientation, and other applications may wish to perform rotations +relative to the current viewer orientation. These application types +correspond to the second and first examples above. + +\section1 Moving the viewer or object of interest + +The simplest way to move the viewer or object of interest is to call +setEye() or setCenter() respectively and supply a new position in +world co-ordinates. However, this can lead to non-intuitive movements +if the viewer orientation is not aligned with the world co-ordinate axes. + +For example, subtracting 3 from the eye() x co-ordinate will appear to +move the eye left 3 units if the viewer orientation is aligned with the +world co-ordinate axes. But it will not appear to move the eye left 3 +units in any other orientation. + +The translation() function can be used to construct a translation +vector that is aligned with the viewer's current orientation. +Movement in the x direction will move along the side vector, movement in +the y direction will move along upVector(), and movement in the z +direction will move along the view vector. + +The translation() function is useful when implementing operations such +as "step left", "jump up", and so on where the movement should be +interpreted relative to the viewer's current orientation, not the +world co-ordinate axes, + + In other words, the following two lines of code are not equivalent + unless the view is oriented with the world co-ordinate axes: + + \code + camera.translateEye(camera.translation(x, y, z)); + + camera.translateEye(QVector3D(x, y, z)); + \endcode + + The following example translates the eye() position while + keeping the object of interest at the original center(): + + \code + camera.translateEye(camera.translation(x, y, z)); + \endcode + + The following example translates the object of interest at + center() while keeping the eye() position fixed: + + \code + camera.translateCenter(camera.translation(x, y, z)); + \endcode + +The following example translates both the eye() and the center() +by the same amount, which will maintain the original view vector. + +\code +QVector3D vector = camera.translation(x, y, z); +camera.translateEye(vector); +camera.translateCenter(vector); +\endcode + +It is important that the translation vector for center() be computed +before eye() is translated if both eye() and center() must move by the +same amount. The following code translates center() in the viewer +orientation after the eye() is translated: + +\code +camera.translateEye(camera.translation(x, y, z)); +camera.translateCenter(camera.translation(x, y, z)); +\endcode + +Translating both eye() and center() by the same amount can be used +to simulate sliding a viewer past a scene while always looking in the +same direction (for example, filming a scene from a moving vehicle). +An alternative is to fix the viewer and move the scene itself: +the negation of the translation() vector can be applied to the +scene's modelview transformation. + +\section1 Motion tracking + +Viewing of 3D scenes can be enhanced if there is some way to track +the motion of the viewer or the orientation of the display device. + +Applications can use setMotionAdjustment() to alter the position +of the camera to account for the viewer's motion. This indicates +the viewer's position relative to the center of the screen. +The motionAdjustment() vector is used to determine by how much +the camera position should be adjusted. The distance of the viewer +from the screen is ignored. + +On handheld devices that use accelerometers to determine the +orientation of the device, the down vector due to gravity +can be adjusted to serve as a motion tracking vector. + +The output of motion tracking hardware can be very noisy, + with minor fluctuations due to viewer twitch movements or + environmental factors. The application is responsible for + cleaning up the signal and removing these fluctuations before + setMotionAdjustment() is called. + */ + + class CameraPrivate +{ +public: + CameraPrivate(); + + Camera::ProjectionType projectionType; + qreal fieldOfView; + qreal nearPlane; + qreal farPlane; + QSizeF viewSize; + QSizeF minViewSize; + int screenRotation; + QVector3D eye; + QVector3D upVector; + QVector3D center; + QVector3D viewVector; + qreal eyeSeparation; + QVector3D motionAdjustment; + QQuaternion motionQuaternion; + bool adjustForAspectRatio; +}; + +CameraPrivate::CameraPrivate() +: projectionType(Camera::Perspective), + fieldOfView(0.0f), + nearPlane(5.0f), + farPlane(1000.0f), + viewSize(2.0f, 2.0f), + minViewSize(0.0001f, 0.0001f), + screenRotation(0), + eye(0.0f, 0.0f, 10.0f), + upVector(0.0f, 1.0f, 0.0f), + center(0.0f, 0.0f, 0.0f), + viewVector(0.0f, 0.0f, -10.0f), + eyeSeparation(0.0f), + motionAdjustment(0.0f, 0.0f, 1.0f), + adjustForAspectRatio(true) +{ +} + +/*! + Constructs a Camera with the default properties and + attaches it to \a parent. +*/ +Camera::Camera(QObject *parent) +: QObject(parent), d_ptr(new CameraPrivate) +{ +} + +/*! + Destroys this Camera object. +*/ +Camera::~Camera() +{ + delete d_ptr; +} + +/*! + \enum Camera::ProjectionType + This enum defines the type of view projection to use for a Camera. + + \value Perspective Use a perspective view. + \value Orthographic Use an ortographic view. +*/ + +/*! + \property Camera::projectionType + \brief the projection type for this camera. The default is Perspective. +*/ +Camera::ProjectionType Camera::projectionType() const +{ + Q_D(const Camera); + return d->projectionType; +} + +void Camera::setProjectionType(Camera::ProjectionType value) +{ + Q_D(Camera); + if (d->projectionType != value) { + d->projectionType = value; + emit projectionChanged(); + } +} + +/*! + \property Camera::fieldOfView + \brief the field of view in degrees for a perspective projection. + + The default value is zero, which indicates a standard perspective + frustum view volume of viewSize() in size. If the value is not + zero, then viewSize() is ignored. + + This value is ignored if projectionType() is Orthographic. + + \sa viewSize() +*/ +qreal Camera::fieldOfView() const +{ + Q_D(const Camera); + return d->fieldOfView; +} + +void Camera::setFieldOfView(qreal angle) +{ + Q_D(Camera); + if (d->fieldOfView != angle) { + d->fieldOfView = angle; + emit projectionChanged(); + } +} + +/*! + \property Camera::nearPlane + \brief the distance from the eye to the near clipping plane. + The default value is 5. + + \sa farPlane() +*/ +qreal Camera::nearPlane() const +{ + Q_D(const Camera); + return d->nearPlane; +} + +void Camera::setNearPlane(qreal value) +{ + Q_D(Camera); + if (d->nearPlane != value) { + d->nearPlane = value; + emit projectionChanged(); + } +} + +/*! + \property Camera::farPlane + \brief the distance from the eye to the far clipping plane. + The default value is 1000. + + \sa nearPlane() +*/ +qreal Camera::farPlane() const +{ + Q_D(const Camera); + return d->farPlane; +} + +void Camera::setFarPlane(qreal value) +{ + Q_D(Camera); + if (d->farPlane != value) { + d->farPlane = value; + emit projectionChanged(); + } +} + +/*! + \property Camera::viewSize + \brief the size of the front of the projection viewing volume. + The viewing volume is assumed to be centered on the origin. + + The default value is (2, 2), which indicates a viewing volume front + from (-1, -1) to (1, 1). + + If the width or height of the viewing volume is negative, then the + co-ordinates will be swapped. For example, a size of (2, -2) will + flip the vertical axis upside down for a viewing volume from + (-1, 1) to (1, -1). + + The view size will be further adjusted by the window's aspect ratio + when projectionMatrix() is called. For best results, the width and + height of the view size should be the same to define an ideal square + viewing volume, which is then extended to the final viewing volume + width and height based on the window's aspect ratio. + + \sa projectionMatrix(), minViewSize() +*/ +QSizeF Camera::viewSize() const +{ + Q_D(const Camera); + return d->viewSize; +} + +void Camera::setViewSize(const QSizeF& size) +{ + Q_D(Camera); + QSizeF sz(size); + if (sz.width() < d->minViewSize.width()) + sz.setWidth(d->minViewSize.width()); + if (sz.height() < d->minViewSize.height()) + sz.setHeight(d->minViewSize.height()); + if (d->viewSize != sz) { + d->viewSize = sz; + emit projectionChanged(); + } +} + +/*! + \property Camera::minViewSize + \brief the minimum size of the front of the projection viewing volume. + + The minimum view size is used to clamp viewSize() when zooming + the camera closer to an object to prevent it "passing through" + the object and causing the scale factor to become infinite. + + The default value is (0.0001, 0.0001). + + \sa projectionMatrix(), viewSize() +*/ +QSizeF Camera::minViewSize() const +{ + Q_D(const Camera); + return d->minViewSize; +} + +void Camera::setMinViewSize(const QSizeF& size) +{ + Q_D(Camera); + if (d->viewSize != size) { + d->viewSize = size; + emit projectionChanged(); + } +} + +/*! + \property Camera::screenRotation + \brief the screen rotation angle in degrees. The default + value is 0. If this value is 90 or 270, then the view + will be flipped width for height. The only supported values + are 0, 90, 180, and 270. The screen is rotated around the + positive z axis. + + This setting is intended for simple screen rotations on handheld + devices that can be held in either portrait or landscape orientations. + The entire screen image is rotated so that it can be viewed in a + different device orientation. + + Use rotateEye() or rotateCenter() for more complex rotations + that are not aligned with 0, 90, 180, or 270 degrees. +*/ +int Camera::screenRotation() const +{ + Q_D(const Camera); + return d->screenRotation; +} + +void Camera::setScreenRotation(int angle) +{ + Q_D(Camera); + if (d->screenRotation != angle) { + d->screenRotation = angle; + emit projectionChanged(); + } +} + +/*! + \property Camera::xEye + \brief the x position of the viewer's eye. The default value is 0. + + \sa eye(), translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +qreal Camera::xEye() const +{ + Q_D(Camera); + return d->eye.x(); +} + +void Camera::setXEye(qreal value) +{ + Q_D(Camera); + d->eye.setX(value); + emit viewChanged(); +} + +/*! + \property Camera::yEye + \brief the y position of the viewer's eye. The default value is 0. + + \sa eye(), translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +qreal Camera::yEye() const +{ + Q_D(Camera); + return d->eye.y(); +} + +void Camera::setYEye(qreal value) +{ + Q_D(Camera); + d->eye.setY(value); + emit viewChanged(); +} + +/*! + \property Camera::zEye + \brief the z position of the viewer's eye. The default value is 10. + + \sa eye(), translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +qreal Camera::zEye() const +{ + Q_D(Camera); + return d->eye.z(); +} + +void Camera::setZEye(qreal value) +{ + Q_D(Camera); + d->eye.setZ(value); + emit viewChanged(); +} + +/*! + \property Camera::eye + \brief the position of the viewer's eye. The default value is (0, 0, 10). + + \sa translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +QVector3D Camera::eye() const +{ + Q_D(const Camera); + return d->eye; +} + +void Camera::setEye(const QVector3D& vertex) +{ + Q_D(Camera); + if (d->eye != vertex) { + d->eye = vertex; + d->viewVector = d->center - d->eye; + emit viewChanged(); + } +} + +/*! + Adjusts the position of the viewer's eye by the components of \a vector. + The final position is eye() + \a vector. + + \sa eye(), setEye(), translateCenter() +*/ +void Camera::translateEye(const QVector3D& vector) +{ + Q_D(Camera); + d->eye += vector; + d->viewVector = d->center - d->eye; + emit viewChanged(); +} + +/*! + \property Camera::upVector + \brief the up vector for the viewer. The default value is (0, 1, 0). + + \sa eye(), center() +*/ +QVector3D Camera::upVector() const +{ + Q_D(const Camera); + return d->upVector; +} + +void Camera::setUpVector(const QVector3D& vector) +{ + Q_D(Camera); + if (d->upVector != vector) { + d->upVector = vector; + emit viewChanged(); + } +} + +/*! + \property Camera::xCentre + \brief the x position of the center of the view visible from the viewer's + position. The default value is 0. + + \sa eye(), translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +qreal Camera::xCentre() const +{ + Q_D(Camera); + return d->center.x(); +} + +void Camera::setXCentre(qreal value) +{ + Q_D(Camera); + d->center.setX(value); + emit viewChanged(); +} + +/*! + \property Camera::yCentre + \brief the y position of the center of the view visible from the + viewer's position. The default value is 0. + + \sa eye(), translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +qreal Camera::yCentre() const +{ + Q_D(Camera); + return d->center.y(); +} + +void Camera::setYCentre(qreal value) +{ + Q_D(Camera); + d->center.setY(value); + emit viewChanged(); +} + +/*! + \property Camera::zCentre + \brief the z position of the center of the view visible from the + viewer's position. The default value is 0. + + \sa eye(), translateEye(), upVector(), center(), eyeSeparation() + \sa motionAdjustment() +*/ +qreal Camera::zCentre() const +{ + Q_D(Camera); + return d->center.z(); +} + +void Camera::setZCentre(qreal value) +{ + Q_D(Camera); + d->center.setZ(value); + emit viewChanged(); +} + +/*! + \property Camera::center + \brief the center of the view visible from the viewer's position. + The default value is (0, 0, 0). + + \sa translateCenter(), eye(), upVector() +*/ +QVector3D Camera::center() const +{ + Q_D(const Camera); + return d->center; +} + +void Camera::setCenter(const QVector3D& vertex) +{ + Q_D(Camera); + if (d->center != vertex) { + d->center = vertex; + d->viewVector = d->center - d->eye; + emit viewChanged(); + } +} + +/*! + Adjusts the center of the view by the components of \a vector. + The final position is center() + \a vector. + + \sa center(), setCenter(), translateEye() +*/ +void Camera::translateCenter(const QVector3D& vector) +{ + Q_D(Camera); + d->center += vector; + d->viewVector = d->center - d->eye; + emit viewChanged(); +} + +/*! + \property Camera::eyeSeparation + \brief the separation between the eyes when stereo viewing is in use, + with eye() specifying the mid-point between the eyes. The default + value is 0. + + \sa eye() +*/ +qreal Camera::eyeSeparation() const +{ + Q_D(const Camera); + return d->eyeSeparation; +} + +void Camera::setEyeSeparation(qreal value) +{ + Q_D(Camera); + if (d->eyeSeparation != value) { + d->eyeSeparation = value; + emit viewChanged(); + } +} + +/*! + \property Camera::motionAdjustment + \brief the adjustment vector to apply to the eye() for user motion. + + This property is typically used to implement motion tracking. + It is interpreted as a vector from the center of the screen to the + current position of the viewer. The angle between the motion + adjustment vector and the screen center is used to adjust the + position of the eye() when apply() is called. + + The default value is (0, 0, 1), which indicates a viewer + directly in front of the center of the screen. + + The units for the vector are unspecified. They could be + meters, centimeters, or the force due to gravity in various + directions from an accelerometer. The angle defined + by the vector is used to perform the adjustment, not its + magnitude. + + The output of motion tracking hardware can be very noisy, + with minor fluctuations due to viewer twitch movements or + environmental factors. The application is responsible for + cleaning up the signal and removing these fluctuations before + altering this property. + + \sa eye(), apply() +*/ + +QVector3D Camera::motionAdjustment() const +{ + Q_D(const Camera); + return d->motionAdjustment; +} + +void Camera::setMotionAdjustment(const QVector3D& vector) +{ + Q_D(Camera); + if (d->motionAdjustment != vector) { + d->motionAdjustment = vector; + if (vector.x() == 0.0f && vector.y() == 0.0f) { + // If the vector is centered, then don't perform any rotations. + d->motionQuaternion = QQuaternion(); + } else { + // Determine the pan and tilt angles from the vector. + QVector3D view = -vector.normalized(); + if (view.z() < 0.0f) + view = -view; + qreal xangle = asin(view.x()) * 180.0f / M_PI; + qreal yangle = asin(-view.y()) * 180.0f / M_PI; + + // Construct the pan and tilt quaternions. + if (qFuzzyIsNull(xangle)) + d->motionQuaternion = tilt(yangle); + else if (qFuzzyIsNull(yangle)) + d->motionQuaternion = pan(xangle); + else + d->motionQuaternion = tilt(yangle) * pan(xangle); + } + emit viewChanged(); + } +} + +/*! + \property Camera::adjustForAspectRatio + \brief the adjustment state of the aspect ratio in the viewing volume. + + By default, Camera adjusts the viewing volume for the aspect + ratio of the window so that pixels appear square without the + application needing to adjust viewSize() manually. + + If this property is false, then the aspect ratio adjustment is + not performed. +*/ + +bool Camera::adjustForAspectRatio() const +{ + Q_D(const Camera); + return d->adjustForAspectRatio; +} + +void Camera::setAdjustForAspectRatio(bool value) +{ + Q_D(Camera); + if (d->adjustForAspectRatio != value) { + d->adjustForAspectRatio = value; + emit viewChanged(); + } +} + +/*! + Returns the quaternion corresponding to tilting the view up or + down by \a angle degrees. The returned quaternion can be applied to + the eye() position with rotateEye() or to the center() position with + rotateCenter(). + + \sa pan(), roll(), rotateEye(), rotateCenter() +*/ +QQuaternion Camera::tilt(qreal angle) const +{ + Q_D(const Camera); + QVector3D side = QVector3D::crossProduct(d->viewVector, d->upVector); + return QQuaternion::fromAxisAndAngle(side, angle); +} + +/*! + Returns the quaternion corresponding to panning the view left or + right by \a angle degrees. The returned quaternion can be applied to + the eye() position with rotateEye() or to the center() position with + rotateCenter(). + + \sa tilt(), roll(), rotateEye(), rotateCenter() +*/ +QQuaternion Camera::pan(qreal angle) const +{ + Q_D(const Camera); + return QQuaternion::fromAxisAndAngle(d->upVector, angle); +} + +/*! + Returns the quaternion corresponding to rolling the view left or + right by \a angle degrees. The returned quaternion can be applied to + the eye() position with rotateEye() or to the center() position with + rotateCenter(). + + \sa tilt(), pan(), rotateEye(), rotateCenter() +*/ +QQuaternion Camera::roll(qreal angle) const +{ + Q_D(const Camera); + return QQuaternion::fromAxisAndAngle(d->viewVector, angle); +} + +/*! + Rotates the orientation of the eye() according to the quaternion \a q. + The eye() will remain in the same position, but the upVector() and + center() may be altered by the rotation. + + \sa rotateCenter(), tilt(), pan(), roll() +*/ +void Camera::rotateEye(const QQuaternion& q) +{ + Q_D(Camera); + d->upVector = q.rotatedVector(d->upVector); + d->viewVector = q.rotatedVector(d->viewVector); + d->center = d->eye + d->viewVector; + emit viewChanged(); +} + +/*! + Rotates the position and orientation of the eye() around center() + according to the quaternion \a q. The center() will remain in the + same position, but the upVector() and eye() may be altered by + the rotation. + + \sa rotateEye(), tilt(), pan(), roll() +*/ +void Camera::rotateCenter(const QQuaternion& q) +{ + Q_D(Camera); + d->upVector = q.rotatedVector(d->upVector); + d->viewVector = q.rotatedVector(d->viewVector); + d->eye = d->center - d->viewVector; + emit viewChanged(); +} + +/*! + Returns a translation vector that can be used to adjust the eye() + or center() by \a x units side-ways, \a y units up, + and \a z units forwards. + + This function is useful when implementing operations such as + "step left", "jump up", and so on where the movement should be + interpreted relative to the viewer's current orientation, not the + world co-ordinate axes, + + The translation vector can be applied to eye() or center() by + calling translateEye() or translateCenter() respectively. + + \sa translateEye(), translateCenter() +*/ +QVector3D Camera::translation(qreal x, qreal y, qreal z) const +{ + Q_D(const Camera); + QVector3D vector(0.0f, 0.0f, 0.0f); + if (x != 0.0f) + vector += QVector3D::normal(d->viewVector, d->upVector) * x; + if (y != 0.0f) + vector += d->upVector.normalized() * y; + if (z != 0.0f) + vector += d->viewVector.normalized() * z; + return vector; +} + +/*! + Returns the transformation matrix to apply to the projection matrix + to present the scene as viewed from the camera position. + + The \a aspectRatio specifies the aspect ratio of the window the + camera view is being displayed in. An \a aspectRatio of 1 indicates that + the window is square. An \a aspectRatio greater than 1 indicates that + the window is wider than it is high. An \a aspectRatio less than 1 + indicates that the window is higher than it is wide. + + \sa apply(), modelViewMatrix() +*/ +QMatrix4x4 Camera::projectionMatrix(qreal aspectRatio) const +{ + Q_D(const Camera); + QMatrix4x4 m; + if (!d->adjustForAspectRatio) + aspectRatio = 1.0f; + if (d->screenRotation != 0) { + m.rotate((qreal)(d->screenRotation), 0.0f, 0.0f, 1.0f); + if (d->screenRotation == 90 || d->screenRotation == 270) { + if (aspectRatio != 0.0f) + aspectRatio = 1.0f / aspectRatio; + } + } + if (d->projectionType == Perspective && d->fieldOfView != 0.0f) { + m.perspective(d->fieldOfView, aspectRatio, + d->nearPlane, d->farPlane); + } else { + qreal halfWidth = d->viewSize.width() / 2.0f; + qreal halfHeight = d->viewSize.height() / 2.0f; + if (aspectRatio > 1.0f) { + halfWidth *= aspectRatio; + } else if (aspectRatio > 0.0f && aspectRatio < 1.0f) { + halfHeight /= aspectRatio; + } + if (d->projectionType == Perspective) { + m.frustum(-halfWidth, halfWidth, -halfHeight, halfHeight, + d->nearPlane, d->farPlane); + } else { + m.ortho(-halfWidth, halfWidth, -halfHeight, halfHeight, + d->nearPlane, d->farPlane); + } + } + return m; +} + +/*! + Returns the transformation to apply to the modelview matrix + to present the scene as viewed from the eye() position. + + \sa apply(), projectionMatrix() +*/ +QMatrix4x4 Camera::modelViewMatrix() const +{ + Q_D(const Camera); + QMatrix4x4 m; + if (d->motionQuaternion.isIdentity()) { + m.lookAt(d->eye, d->center, d->upVector); + } else { + QVector3D up = d->motionQuaternion.rotatedVector(d->upVector); + QVector3D view = d->motionQuaternion.rotatedVector(d->viewVector); + QVector3D eye = d->center - view; + m.lookAt(eye, d->center, up); + } + return m; +} + +/*! + \fn void Camera::projectionChanged() + + This signal is emitted when one of projectionType(), fieldOfView(), + nearPlane(), farPlane(), viewSize(), or screenRotation() changes, + indicating a modification to the optical properties of the camera + looking at the scene. + + \sa viewChanged() +*/ + +/*! + \fn void Camera::viewChanged() + + This signal is emitted when one of eye(), upVector(), or center() + changes, indicating a modification to the viewer's position or + orientation. + + \sa projectionChanged() +*/ diff --git a/examples/sensors/cubehouse/camera.h b/examples/sensors/cubehouse/camera.h new file mode 100644 index 0000000..0607d4c --- /dev/null +++ b/examples/sensors/cubehouse/camera.h @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef CAMERA_H +#define CAMERA_H + +#include <QtCore/qobject.h> +#include <QtCore/qsize.h> +#include <QtGui/qvector3d.h> +#include <QtGui/qmatrix4x4.h> +#include <QtGui/qquaternion.h> + +class CameraPrivate; +class QGLPainter; + +class Camera : public QObject +{ + Q_OBJECT + Q_ENUMS(ProjectionType) + Q_PROPERTY(ProjectionType projectionType READ projectionType WRITE setProjectionType NOTIFY projectionChanged) + Q_PROPERTY(qreal fieldOfView READ fieldOfView WRITE setFieldOfView NOTIFY projectionChanged) + Q_PROPERTY(qreal nearPlane READ nearPlane WRITE setNearPlane NOTIFY projectionChanged) + Q_PROPERTY(qreal farPlane READ farPlane WRITE setFarPlane NOTIFY projectionChanged) + Q_PROPERTY(QSizeF viewSize READ viewSize WRITE setViewSize NOTIFY projectionChanged) + Q_PROPERTY(QSizeF minViewSize READ minViewSize WRITE setMinViewSize NOTIFY projectionChanged) + Q_PROPERTY(int screenRotation READ screenRotation WRITE setScreenRotation NOTIFY projectionChanged) + Q_PROPERTY(qreal xEye READ xEye WRITE setXEye NOTIFY viewChanged) + Q_PROPERTY(qreal yEye READ yEye WRITE setYEye NOTIFY viewChanged) + Q_PROPERTY(qreal zEye READ zEye WRITE setZEye NOTIFY viewChanged) + Q_PROPERTY(QVector3D eye READ eye WRITE setEye NOTIFY viewChanged) + Q_PROPERTY(QVector3D upVector READ upVector WRITE setUpVector NOTIFY viewChanged) + Q_PROPERTY(qreal xCentre READ xCentre WRITE setXCentre NOTIFY viewChanged) + Q_PROPERTY(qreal yCentre READ yCentre WRITE setYCentre NOTIFY viewChanged) + Q_PROPERTY(qreal zCentre READ zCentre WRITE setZCentre NOTIFY viewChanged) + Q_PROPERTY(QVector3D center READ center WRITE setCenter NOTIFY viewChanged) + Q_PROPERTY(qreal eyeSeparation READ eyeSeparation WRITE setEyeSeparation NOTIFY viewChanged) + Q_PROPERTY(QVector3D motionAdjustment READ motionAdjustment WRITE setMotionAdjustment DESIGNABLE false NOTIFY viewChanged) + Q_PROPERTY(bool adjustForAspectRatio READ adjustForAspectRatio WRITE setAdjustForAspectRatio NOTIFY viewChanged) +public: + explicit Camera(QObject *parent = 0); + ~Camera(); + + enum ProjectionType + { + Perspective, + Orthographic + }; + + Camera::ProjectionType projectionType() const; + void setProjectionType(Camera::ProjectionType value); + + qreal fieldOfView() const; + void setFieldOfView(qreal angle); + + qreal nearPlane() const; + void setNearPlane(qreal value); + + qreal farPlane() const; + void setFarPlane(qreal value); + + QSizeF viewSize() const; + void setViewSize(const QSizeF& size); + + QSizeF minViewSize() const; + void setMinViewSize(const QSizeF& size); + + int screenRotation() const; + void setScreenRotation(int angle); + + qreal xEye() const; + void setXEye(qreal value); + qreal yEye() const; + void setYEye(qreal value); + qreal zEye() const; + void setZEye(qreal value); + + QVector3D eye() const; + void setEye(const QVector3D& vertex); + + QVector3D upVector() const; + void setUpVector(const QVector3D& vector); + + qreal xCentre() const; + void setXCentre(qreal value); + qreal yCentre() const; + void setYCentre(qreal value); + qreal zCentre() const; + void setZCentre(qreal value); + + QVector3D center() const; + void setCenter(const QVector3D& vertex); + + qreal eyeSeparation() const; + void setEyeSeparation(qreal value); + + QVector3D motionAdjustment() const; + void setMotionAdjustment(const QVector3D& vector); + + bool adjustForAspectRatio() const; + void setAdjustForAspectRatio(bool value); + + QQuaternion tilt(qreal angle) const; + QQuaternion pan(qreal angle) const; + QQuaternion roll(qreal angle) const; + + void rotateEye(const QQuaternion& q); + void rotateCenter(const QQuaternion& q); + + QVector3D translation(qreal x, qreal y, qreal z) const; + + void translateEye(const QVector3D& vector); + void translateCenter(const QVector3D& vector); + + QMatrix4x4 projectionMatrix(qreal aspectRatio) const; + QMatrix4x4 modelViewMatrix() const; + +Q_SIGNALS: + void projectionChanged(); + void viewChanged(); + +private: + CameraPrivate *d_ptr; + + CameraPrivate *d_func() const { return d_ptr; } + + Q_DISABLE_COPY(Camera) +}; + +#endif diff --git a/examples/sensors/cubehouse/cube.h b/examples/sensors/cubehouse/cube.h new file mode 100644 index 0000000..fe5bea3 --- /dev/null +++ b/examples/sensors/cubehouse/cube.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef CUBE_H +#define CUBE_H + +#define CUBE_SIZE (6 * 6 * (3 + 3 + 2)) +static float const cubeVertices[CUBE_SIZE] = { + -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, + -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, + 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, + + 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + + 0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, + -0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, + + 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, + + 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, + 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f +}; + +#endif diff --git a/examples/sensors/cubehouse/cubehouse.pro b/examples/sensors/cubehouse/cubehouse.pro new file mode 100644 index 0000000..b760ad7 --- /dev/null +++ b/examples/sensors/cubehouse/cubehouse.pro @@ -0,0 +1,31 @@ +TEMPLATE = app +TARGET = cubehouse +CONFIG += qt debug warn_on +requires(contains(QT_CONFIG,opengl)) +QT += opengl sensors +SOURCES = \ + view.cpp \ + main.cpp \ + camera.cpp \ + light.cpp \ + lightmodel.cpp \ + material.cpp \ + painter.cpp +HEADERS = \ + view.h \ + teapot.h \ + cube.h \ + camera.h light.h \ + lightmodel.h \ + material.h \ + painter.h +contains(QT_CONFIG,opengles2) { + SOURCES += painter_shader.cpp +} else { + SOURCES += painter_fixed.cpp +} +RESOURCES = cubehouse.qrc + +symbian { + TARGET.CAPABILITY = ReadUserData +} diff --git a/examples/sensors/cubehouse/cubehouse.qrc b/examples/sensors/cubehouse/cubehouse.qrc new file mode 100644 index 0000000..94b5ae6 --- /dev/null +++ b/examples/sensors/cubehouse/cubehouse.qrc @@ -0,0 +1,8 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>qtlogo.png</file> + <file>lighting.vsh</file> + <file>material.fsh</file> + <file>texture.fsh</file> +</qresource> +</RCC> diff --git a/examples/sensors/cubehouse/light.cpp b/examples/sensors/cubehouse/light.cpp new file mode 100644 index 0000000..2d98b86 --- /dev/null +++ b/examples/sensors/cubehouse/light.cpp @@ -0,0 +1,675 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "light.h" +#include <QtCore/qmath.h> +#include <QtGui/qmatrix4x4.h> + +/*! + \class Light + \brief The Light class represents the parameters of a light in a 3D scene. + \since 4.7 + \ingroup qt3d + \ingroup qt3d::painting + + The functions in this class are a convenience wrapper for the OpenGL enumerations + which control each light source in a 3D scene. For the general ambient light in a + scene, not from a source refer to QGLLightModel. + + The ambient, diffuse and specular components of the light can be controlled for by + colour, and are set by the following functions: + \list + \o setAmbientColor() + \o setDiffuseColor() + \o setSpecularColor() + \endlist + Other than changing intensity by using darker color values, see below for how to + change the intensity of the light with distance from the lit object. + + Light sources are of two types, directional and positional, described by the + enumeration Light::LightType. By default a light source is directional. + + A directional light source is infinitely distant, such that its rays are all + parallel, to a direction \bold vector. This vector is set by the setDirection() + function. If the light source is not directional when setDirection() is called, its + type is changed to Directional. Directional light sources model real world light + sources like the sun. Such light sources are not located at any particular point + and affect the scene evenly. + + In the OpenGL model-view, a directional light is represented by a 4d vector, with + the 4th value, \c w, set to 0.0f. This means that the spatial data of the light + is not changed during certain transformations, for example translation. + See \l {3D Math Basis} for a fuller explanation of this. + + Calling the setPosition() function defines the light source to be located at a given + \bold point, a finite distance from the lit object. If the light source is not + positional when this function is called its type is changed to Positional. + + A positional light source models a real world lamp, such as a light-bulb or + car headlight. Since it is a finite distance from the lit object the rays diverge + and lighting calculations are thus more complex. + + In OpenGL the light has its spatial data \c w value set to 1.0f, resulting in the + lights position being changed along with other objects in the scene by transformations + such as translation. See \l {3D Math Basis} for more. + + Positional lights are by default point sources, like the light-bulb where light + radiates in all directions. Calling the spotAngle() function sets an angle to + restrict the light from a positional source to a cone like the car headlight. This + makes the light behave like a spotlight, where objects outside of the cone of the + light do not receive any light from that source. + + The spotlight may be further specified by its spotExponent() which dictates the + behaviour of the cutoff at the lighting cone; and by the attenuation functions + which are the terms in the following equation: + \image attenuation.png + here \c d is the distance of the light from the lit object, and A is the attenuation + factor which is a multiplier of the light source, determining its intensity at the + lit object. The terms in the denominator are: + \list + \o constantAttenuation() - default 1.0 + \raw HTML + k<sub>c</sub> + \endraw + \o linearAttenuation() - default 0.0 + \raw HTML + k<sub>l</sub> + \endraw + \o quadraticAttenuation() - default 0.0 + \raw HTML + k<sub>q</sub> + \endraw + \endlist + When these terms are large the light contributed by the source becomes much weaker + with distance from the object. +*/ + +class LightPrivate +{ +public: + LightPrivate() : + type(Light::Directional), + position(0.0f, 0.0f, 1.0f), + ambientColor(0, 0, 0, 255), + diffuseColor(255, 255, 255, 255), + specularColor(255, 255, 255, 255), + spotDirection(0.0f, 0.0f, -1.0f), + spotExponent(0.0f), + spotAngle(180.0f), + spotCosAngle(-1.0f), + constantAttenuation(1.0f), + linearAttenuation(0.0f), + quadraticAttenuation(0.0f) + { + } + + Light::LightType type; + QVector3D position; + QColor ambientColor; + QColor diffuseColor; + QColor specularColor; + QVector3D spotDirection; + qreal spotExponent; + qreal spotAngle; + qreal spotCosAngle; + qreal constantAttenuation; + qreal linearAttenuation; + qreal quadraticAttenuation; +}; + + +/*! + \enum Light::LightType + This enum defines the possible types of light. + + \value Directional The default. Directional lights are infinitely + distant from the lit object, and its rays are parallel to a + direction vector. Use setDirection() to make a light Directional. + \value Positional Positional lights are a finite distance from the + lit object. Complex lighting with spot-lights, and attenuation + are enabled with Positional lighting. Use setPosition() to + make a light Positional. +*/ + +/*! + Constructs a new light parameters object with default values + and attaches it to \a parent. +*/ +Light::Light(QObject *parent) + : QObject(parent), d_ptr(new LightPrivate) +{ +} + +/*! + Destroys this light parameters object. +*/ +Light::~Light() +{ +} + +/*! + \property Light::type + \brief the type of this light; Positional or Directional. + + \sa position(), direction() +*/ +Light::LightType Light::type() const +{ + Q_D(const Light); + return d->type; +} + +/*! + \property Light::position + \brief the position of this light if it is Positional; or a null + QVector3D if it is Directional. By default, the light is Directional. + + For a Positional light, the return value is the location in model space + of the light, at some finite distance from the origin. The value is + transformed by the model-view transformation when the light + parameters are applied. + + When the light is Positional OpenGL will obey other parameters relating + to the light's position, such as attenuation and spot angle. + + Setting the position converts the light from Directional to Positional. + + \sa direction(), type(), positionChanged() +*/ +QVector3D Light::position() const +{ + Q_D(const Light); + if (d->type == Positional) + return d->position; + else + return QVector3D(); +} + +void Light::setPosition(const QVector3D& point) +{ + Q_D(Light); + if (d->type == Positional) { + if (d->position != point) { + // Only the position() has changed. + d->position = point; + emit positionChanged(); + emit lightChanged(); + } + } else { + // Both the position() and direction() are changed. + d->type = Positional; + d->position = point; + emit positionChanged(); + emit directionChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::direction + \brief the direction of this light if it is Directional; or a null + QVector3D if it is Positional. By default, the light is Directional. + + For a Directional light, the return value is the direction vector of + an infinitely distant directional light, like the sun. + + The default value is (0, 0, 1), for a directional light pointing along + the positive z-axis. + + OpenGL will ignore other parameters such as attenuation and spot angle + when this value is set, since a directional light has no location. + In order to set the direction of a spot light, use the setSpotDirection() + function. + + Setting the direction converts the light from Positional to Directional. + + \sa position(), type(), directionChanged() +*/ +QVector3D Light::direction() const +{ + Q_D(const Light); + if (d->type == Directional) + return d->position; + else + return QVector3D(); +} + +void Light::setDirection(const QVector3D& value) +{ + Q_D(Light); + if (d->type == Directional) { + if (d->position != value) { + // Only the direction() has changed. + d->position = value; + emit directionChanged(); + emit lightChanged(); + } + } else { + // Both the position() and direction() are changed. + d->type = Directional; + d->position = value; + emit positionChanged(); + emit directionChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::ambientColor + \brief the ambient color of this light. The default value is black. + + \sa diffuseColor(), specularColor(), ambientColorChanged() +*/ +QColor Light::ambientColor() const +{ + Q_D(const Light); + return d->ambientColor; +} + +void Light::setAmbientColor(const QColor& value) +{ + Q_D(Light); + if (d->ambientColor != value) { + d->ambientColor = value; + emit ambientColorChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::diffuseColor + \brief the diffuse color of this light. The default value is white. + + \sa ambientColor(), specularColor(), diffuseColorChanged() +*/ +QColor Light::diffuseColor() const +{ + Q_D(const Light); + return d->diffuseColor; +} + +void Light::setDiffuseColor(const QColor& value) +{ + Q_D(Light); + if (d->diffuseColor != value) { + d->diffuseColor = value; + emit diffuseColorChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::specularColor + \brief the specular color of this light. The default value is white. + + \sa ambientColor(), diffuseColor(), specularColorChanged() +*/ +QColor Light::specularColor() const +{ + Q_D(const Light); + return d->specularColor; +} + +void Light::setSpecularColor(const QColor& value) +{ + Q_D(Light); + if (d->specularColor != value) { + d->specularColor = value; + emit specularColorChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::spotDirection + \brief the direction that a spot-light is shining in. + + A spotlight is a positional light that has a value other than the default + for spot angle. The default value is (0, 0, -1). + + This parameter has no effect on a Directional light. + + \sa spotExponent(), spotDirectionChanged() +*/ +QVector3D Light::spotDirection() const +{ + Q_D(const Light); + return d->spotDirection; +} + +void Light::setSpotDirection(const QVector3D& vector) +{ + Q_D(Light); + if (d->spotDirection != vector) { + d->spotDirection = vector; + emit spotDirectionChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::spotExponent + \brief the exponent value between 0 and 128 that indicates the + intensity distribution of a spot-light. The default value is 0, + indicating uniform light distribution. + + This parameter has no effect on a Directional light. + + \sa spotAngle(), setPosition(), spotExponentChanged() +*/ +qreal Light::spotExponent() const +{ + Q_D(const Light); + return d->spotExponent; +} + +void Light::setSpotExponent(qreal value) +{ + Q_D(Light); + if (d->spotExponent != value) { + d->spotExponent = value; + emit spotExponentChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::spotAngle + \brief the angle over which light is spread from this light. + It should be between 0 and 90 for spot lights, and 180 for + uniform light distribution from a remote light source. + The default value is 180. + + This parameter has no effect on a Directional light. + + \sa spotCosAngle(), spotAngleChanged() +*/ +qreal Light::spotAngle() const +{ + Q_D(const Light); + return d->spotAngle; +} + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +void Light::setSpotAngle(qreal value) +{ + Q_D(Light); + if (d->spotAngle != value) { + d->spotAngle = value; + if (value != 180.0f) + d->spotCosAngle = qCos(value * M_PI / 180.0f); + else + d->spotCosAngle = -1.0f; + emit spotAngleChanged(); + emit lightChanged(); + } +} + +/*! + Returns the cosine of spotAngle(), or -1 if spotAngle() is 180. + + The cosine of spotAngle() is useful in lighting algorithms. + This function returns a cached copy of the cosine so that it + does not need to be computed every time the lighting parameters + are read. + + \sa spotAngle() +*/ +qreal Light::spotCosAngle() const +{ + Q_D(const Light); + return d->spotCosAngle; +} + +/*! + \property Light::constantAttenuation + \brief the constant light attenuation factor. The default value is 1. + + This parameter has no effect on a Directional light. + + \sa linearAttenuation(), quadraticAttenuation() + \sa constantAttenuationChanged() +*/ +qreal Light::constantAttenuation() const +{ + Q_D(const Light); + return d->constantAttenuation; +} + +void Light::setConstantAttenuation(qreal value) +{ + Q_D(Light); + if (d->constantAttenuation != value) { + d->constantAttenuation = value; + emit constantAttenuationChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::linearAttenuation + \brief the linear light attenuation factor. The default value is 0. + + This parameter has no effect on a Directional light. + + \sa constantAttenuation(), quadraticAttenuation() + \sa linearAttenuationChanged() +*/ +qreal Light::linearAttenuation() const +{ + Q_D(const Light); + return d->linearAttenuation; +} + +void Light::setLinearAttenuation(qreal value) +{ + Q_D(Light); + if (d->linearAttenuation != value) { + d->linearAttenuation = value; + emit linearAttenuationChanged(); + emit lightChanged(); + } +} + +/*! + \property Light::quadraticAttenuation + \brief the quadratic light attenuation factor. The default value is 0. + + This parameter has no effect on a Directional light. + + \sa constantAttenuation(), linearAttenuation() + \sa quadraticAttenuationChanged() +*/ +qreal Light::quadraticAttenuation() const +{ + Q_D(const Light); + return d->quadraticAttenuation; +} + +void Light::setQuadraticAttenuation(qreal value) +{ + Q_D(Light); + if (d->quadraticAttenuation != value) { + d->quadraticAttenuation = value; + emit quadraticAttenuationChanged(); + emit lightChanged(); + } +} + +/*! + Returns the position of this light after transforming it from + world co-ordinates to eye co-ordinates using \a transform. + + If the light is Directional, then direction() will be transformed, + after setting the w co-ordinate to 0. If the light is Positional, + then position() will be transformed after setting the w co-ordinate + to 1. + + The returned result is suitable to be applied to the GL_POSITION + property of \c{glLight()}, assuming that the modelview transformation + in the GL context is set to the identity. + + \sa eyeSpotDirection() +*/ +QVector4D Light::eyePosition(const QMatrix4x4& transform) const +{ + Q_D(const Light); + if (d->type == Directional) + return transform * QVector4D(d->position, 0.0f); + else + return transform * QVector4D(d->position, 1.0f); +} + +/*! + Returns the spotDirection() for this light after transforming it + from world co-ordinates to eye co-ordinates using the top-left + 3x3 submatrix within \a transform. + + The returned result is suitable to be applied to the GL_SPOT_DIRECTION + property of \c{glLight()}, assuming that the modelview transformation + in the GL context is set to the identity. + + \sa eyePosition() +*/ +QVector3D Light::eyeSpotDirection + (const QMatrix4x4& transform) const +{ + Q_D(const Light); + return transform.mapVector(d->spotDirection); +} + +/*! + \fn void Light::positionChanged() + + This signal is emitted when position() changes, or when the type() + changes between Directional and Positional. + + \sa position(), lightChanged() +*/ + +/*! + \fn void Light::directionChanged() + + This signal is emitted when direction() changes, or when the type() + changes between Directional and Positional. + + \sa direction(), lightChanged() +*/ + +/*! + \fn void Light::ambientColorChanged() + + This signal is emitted when ambientColor() changes. + + \sa ambientColor(), lightChanged() +*/ + +/*! + \fn void Light::diffuseColorChanged() + + This signal is emitted when diffuseColor() changes. + + \sa diffuseColor(), lightChanged() +*/ + +/*! + \fn void Light::specularColorChanged() + + This signal is emitted when specularColor() changes. + + \sa specularColor(), lightChanged() +*/ + +/*! + \fn void Light::spotDirectionChanged() + + This signal is emitted when spotDirection() changes. + + \sa spotDirection(), lightChanged() +*/ + +/*! + \fn void Light::spotExponentChanged() + + This signal is emitted when spotExponent() changes. + + \sa spotExponent(), lightChanged() +*/ + +/*! + \fn void Light::spotAngleChanged() + + This signal is emitted when spotAngle() changes. + + \sa spotAngle(), lightChanged() +*/ + +/*! + \fn void Light::constantAttenuationChanged() + + This signal is emitted when constantAttenuation() changes. + + \sa constantAttenuation(), lightChanged() +*/ + +/*! + \fn void Light::linearAttenuationChanged() + + This signal is emitted when linearAttenuation() changes. + + \sa linearAttenuation(), lightChanged() +*/ + +/*! + \fn void Light::quadraticAttenuationChanged() + + This signal is emitted when quadraticAttenuation() changes. + + \sa quadraticAttenuation(), lightChanged() +*/ + +/*! + \fn void Light::lightChanged() + + This signal is emitted when any of the properties on the light changes. +*/ diff --git a/examples/sensors/cubehouse/light.h b/examples/sensors/cubehouse/light.h new file mode 100644 index 0000000..753e57a --- /dev/null +++ b/examples/sensors/cubehouse/light.h @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef LIGHT_H +#define LIGHT_H + +#include <QtCore/qobject.h> +#include <QtCore/qscopedpointer.h> +#include <QtGui/qcolor.h> +#include <QtGui/qvector3d.h> +#include <QtGui/qvector4d.h> + +class LightPrivate; +QT_BEGIN_NAMESPACE +class QMatrix4x4; +QT_END_NAMESPACE + +class Light : public QObject +{ + Q_OBJECT + Q_ENUMS(LightType) + Q_PROPERTY(LightType type READ type) + Q_PROPERTY(QVector3D position READ position WRITE setPosition NOTIFY positionChanged) + Q_PROPERTY(QVector3D direction READ direction WRITE setDirection NOTIFY directionChanged) + Q_PROPERTY(QColor ambientColor READ ambientColor WRITE setAmbientColor NOTIFY ambientColorChanged) + Q_PROPERTY(QColor diffuseColor READ diffuseColor WRITE setDiffuseColor NOTIFY diffuseColorChanged) + Q_PROPERTY(QColor specularColor READ specularColor WRITE setSpecularColor NOTIFY specularColorChanged) + Q_PROPERTY(QVector3D spotDirection READ spotDirection WRITE setSpotDirection NOTIFY spotDirectionChanged) + Q_PROPERTY(qreal spotExponent READ spotExponent WRITE setSpotExponent NOTIFY spotExponentChanged) + Q_PROPERTY(qreal spotAngle READ spotAngle WRITE setSpotAngle NOTIFY spotAngleChanged) + Q_PROPERTY(qreal constantAttenuation READ constantAttenuation WRITE setConstantAttenuation NOTIFY constantAttenuationChanged) + Q_PROPERTY(qreal linearAttenuation READ linearAttenuation WRITE setLinearAttenuation NOTIFY linearAttenuationChanged) + Q_PROPERTY(qreal quadraticAttenuation READ quadraticAttenuation WRITE setQuadraticAttenuation NOTIFY quadraticAttenuationChanged) +public: + enum LightType { + Directional, + Positional + }; + + Light(QObject *parent = 0); + ~Light(); + + Light::LightType type() const; + + QVector3D position() const; + void setPosition(const QVector3D& value); + + QVector3D direction() const; + void setDirection(const QVector3D& value); + + QColor ambientColor() const; + void setAmbientColor(const QColor& value); + + QColor diffuseColor() const; + void setDiffuseColor(const QColor& value); + + QColor specularColor() const; + void setSpecularColor(const QColor& value); + + QVector3D spotDirection() const; + void setSpotDirection(const QVector3D& value); + + qreal spotExponent() const; + void setSpotExponent(qreal value); + + qreal spotAngle() const; + void setSpotAngle(qreal value); + + qreal spotCosAngle() const; + + qreal constantAttenuation() const; + void setConstantAttenuation(qreal value); + + qreal linearAttenuation() const; + void setLinearAttenuation(qreal value); + + qreal quadraticAttenuation() const; + void setQuadraticAttenuation(qreal value); + + QVector4D eyePosition(const QMatrix4x4& transform) const; + QVector3D eyeSpotDirection(const QMatrix4x4& transform) const; + +Q_SIGNALS: + void positionChanged(); + void directionChanged(); + void ambientColorChanged(); + void diffuseColorChanged(); + void specularColorChanged(); + void spotDirectionChanged(); + void spotExponentChanged(); + void spotAngleChanged(); + void constantAttenuationChanged(); + void linearAttenuationChanged(); + void quadraticAttenuationChanged(); + void lightChanged(); + +private: + QScopedPointer<LightPrivate> d_ptr; + + Q_DECLARE_PRIVATE(Light) + Q_DISABLE_COPY(Light) +}; + +#endif diff --git a/examples/sensors/cubehouse/lighting.vsh b/examples/sensors/cubehouse/lighting.vsh new file mode 100644 index 0000000..22bd004 --- /dev/null +++ b/examples/sensors/cubehouse/lighting.vsh @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +// Algorithm from section 2.14.1 of OpenGL 2.1 specification. + +attribute highp vec4 vertex; +attribute highp vec3 normal; +attribute highp vec4 texcoord; +uniform mediump mat4 matrix; +uniform mediump mat4 modelView; +uniform mediump mat3 normalMatrix; +varying highp vec4 qTexCoord; + +uniform mediump vec4 scli; // Specular intensity of the light +uniform mediump vec3 pli; // Position of the light +uniform mediump float pliw; // 0 for directional, 1 for positional. +uniform mediump vec4 acm; // Ambient color of the material +uniform mediump vec4 dcm; // Diffuse color of the material +uniform mediump vec4 scm; // Specular color of the material +uniform mediump float srm; // Specular exponent of the material +uniform mediump vec4 acs; // Light model's ambient color of the scene +uniform bool viewerAtInfinity; // Light model indicates viewer at infinity + +varying mediump vec4 qColor; +varying mediump vec4 qSecondaryColor; + +void qLightVertex(vec4 vertex, vec3 normal) +{ + int i, material; + vec3 toEye, toLight, h; + float angle, spot, attenuation; + vec4 color, scolor; + vec4 adcomponent, scomponent; + + // Start with the material's emissive color and the ambient scene color. + // ecm is assumed to be black. + color = acm * acs; + scolor = vec4(0, 0, 0, 0); + + // Vector from the vertex to the eye position (i.e. the origin). + if (viewerAtInfinity) + toEye = vec3(0, 0, 1); + else + toEye = normalize(-vertex.xyz); + + // Determine the cosine of the angle between the normal and the + // vector from the vertex to the light. + if (pliw == 0.0) + toLight = normalize(pli); + else + toLight = normalize(pli - vertex.xyz); + angle = max(dot(normal, toLight), 0.0); + + // Calculate the ambient and diffuse light components. + // Assumptions: acli = (0, 0, 0, 1), dcli = (1, 1, 1, 1). + adcomponent = acm * vec4(0, 0, 0, 1) + angle * dcm; + + // Calculate the specular light components. + if (angle != 0.0) { + h = normalize(toLight + toEye); + angle = max(dot(normal, h), 0.0); + scomponent = pow(angle, srm) * scm; // scli = (1, 1, 1, 1). + } else { + scomponent = vec4(0, 0, 0, 0); + } + + // Add up the color components we computed. + color += adcomponent; + scolor += scomponent; + + // Generate the final output colors. + float alpha = dcm.a; + qColor = vec4(clamp(color.rgb, 0.0, 1.0), alpha); + qSecondaryColor = clamp(scolor, 0.0, 1.0); +} + +void main(void) +{ + gl_Position = matrix * vertex; + highp vec4 vertex = modelView * vertex; + highp vec3 norm = normalize(normalMatrix * normal); + qLightVertex(vertex, norm); + qTexCoord = texcoord; +} diff --git a/examples/sensors/cubehouse/lightmodel.cpp b/examples/sensors/cubehouse/lightmodel.cpp new file mode 100644 index 0000000..dfed838 --- /dev/null +++ b/examples/sensors/cubehouse/lightmodel.cpp @@ -0,0 +1,243 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "lightmodel.h" + +/*! + \class LightModel + \brief The LightModel class defines the lighting model to use for the scene. + \since 4.7 + \ingroup qt3d + \ingroup qt3d::painting +*/ + +/*! + \enum LightModel::Model + This enum defines the type of lighting model to use: one-sided or two-sided. + + \value OneSided One-sided lighting, with the front face material used for both front and back faces. + \value TwoSided Two-sided lighting, with separate front and back face materials. +*/ + +/*! + \enum LightModel::ColorControl + This enum controls the number of colors to be generated by the lighting computation. + + \value SingleColor A single color is generated by the lighting computation. + \value SeparateSpecularColor A separate specular color computation is + performed and then summed into the pixel color after texture mapping. +*/ + +/*! + \enum LightModel::ViewerPosition + This enum defines the position of the viewer for the purposes of lighting calculations. + + \value ViewerAtInfinity The viewer is at infinity along the -z axis. + \value LocalViewer The viewer is at the local origin in eye coordinates. +*/ + +class LightModelPrivate +{ +public: + LightModelPrivate() + : model(LightModel::OneSided), + colorControl(LightModel::SingleColor), + viewerPosition(LightModel::ViewerAtInfinity) + { + ambientSceneColor.setRgbF(0.2, 0.2, 0.2, 1.0); + } + + LightModel::Model model; + LightModel::ColorControl colorControl; + LightModel::ViewerPosition viewerPosition; + QColor ambientSceneColor; +}; + +/*! + Constructs a light model object with default values and attach + it to \a parent. +*/ +LightModel::LightModel(QObject *parent) + : QObject(parent), d_ptr(new LightModelPrivate) +{ +} + +/*! + Destroys this light model. +*/ +LightModel::~LightModel() +{ +} + +/*! + \property LightModel::model + \brief the lighting model to use, either OneSided or TwoSided. + The default is OneSided. + + \sa modelChanged() +*/ +LightModel::Model LightModel::model() const +{ + Q_D(const LightModel); + return d->model; +} + +void LightModel::setModel(LightModel::Model value) +{ + Q_D(LightModel); + if (d->model != value) { + d->model = value; + emit modelChanged(); + emit lightModelChanged(); + } +} + +/*! + \property LightModel::colorControl + \brief the color control mode, either SingleColor or + SeparateSpecularColor. The default value is SingleColor. + + If SingleColor is specified, then a single color is calculated + by the lighting computation for a vertex. If SeparateSpecularColor + is specified, then a separate specular color computation is + performed and then summed into the pixel color after texture mapping. + + \sa colorControlChanged() +*/ +LightModel::ColorControl LightModel::colorControl() const +{ + Q_D(const LightModel); + return d->colorControl; +} + +void LightModel::setColorControl(LightModel::ColorControl value) +{ + Q_D(LightModel); + if (d->colorControl != value) { + d->colorControl = value; + emit colorControlChanged(); + emit lightModelChanged(); + } +} + +/*! + \property LightModel::viewerPosition + \brief the viewer position, either ViewerAtInfinity or LocalViewer. + The default value is ViewerAtInfinity. + + \sa viewerPositionChanged() +*/ +LightModel::ViewerPosition LightModel::viewerPosition() const +{ + Q_D(const LightModel); + return d->viewerPosition; +} + +void LightModel::setViewerPosition(LightModel::ViewerPosition value) +{ + Q_D(LightModel); + if (d->viewerPosition != value) { + d->viewerPosition = value; + emit viewerPositionChanged(); + emit lightModelChanged(); + } +} + +/*! + \property LightModel::ambientSceneColor + \brief the ambient color of the entire scene. The default value + is (0.2, 0.2, 0.2, 1.0). + + \sa ambientSceneColorChanged() +*/ +QColor LightModel::ambientSceneColor() const +{ + Q_D(const LightModel); + return d->ambientSceneColor; +} + +void LightModel::setAmbientSceneColor(const QColor& value) +{ + Q_D(LightModel); + if (d->ambientSceneColor != value) { + d->ambientSceneColor = value; + emit ambientSceneColorChanged(); + emit lightModelChanged(); + } +} + +/*! + \fn void LightModel::modelChanged() + + This signal is emitted when model() changes. + + \sa model(), lightModelChanged() +*/ + +/*! + \fn void LightModel::colorControlChanged() + + This signal is emitted when colorControl() changes. + + \sa colorControl(), lightModelChanged() +*/ + +/*! + \fn void LightModel::viewerPositionChanged() + + This signal is emitted when viewerPosition() changes. + + \sa viewerPosition(), lightModelChanged() +*/ + +/*! + \fn void LightModel::ambientSceneColorChanged() + + This signal is emitted when ambientSceneColor() changes. + + \sa ambientSceneColor(), lightModelChanged() +*/ + +/*! + \fn void LightModel::lightModelChanged() + + This signal is emitted when one of model(), colorControl(), + viewerPosition(), or ambientSceneColor() changes. +*/ diff --git a/examples/sensors/cubehouse/lightmodel.h b/examples/sensors/cubehouse/lightmodel.h new file mode 100644 index 0000000..374d524 --- /dev/null +++ b/examples/sensors/cubehouse/lightmodel.h @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef LIGHTMODEL_H +#define LIGHTMODEL_H + +#include <QtCore/qobject.h> +#include <QtCore/qscopedpointer.h> +#include <QtGui/qcolor.h> + +class LightModelPrivate; + +class LightModel : public QObject +{ + Q_OBJECT + Q_ENUMS(Model) + Q_ENUMS(ColorControl) + Q_ENUMS(ViewerPosition) + Q_PROPERTY(Model model READ model WRITE setModel NOTIFY modelChanged) + Q_PROPERTY(ColorControl colorControl READ colorControl WRITE setColorControl NOTIFY colorControlChanged) + Q_PROPERTY(ViewerPosition viewerPosition READ viewerPosition WRITE setViewerPosition NOTIFY viewerPositionChanged) + Q_PROPERTY(QColor ambientSceneColor READ ambientSceneColor WRITE setAmbientSceneColor NOTIFY ambientSceneColorChanged) +public: + explicit LightModel(QObject *parent = 0); + ~LightModel(); + + enum Model + { + OneSided, + TwoSided + }; + + enum ColorControl + { + SingleColor, + SeparateSpecularColor + }; + + enum ViewerPosition + { + ViewerAtInfinity, + LocalViewer + }; + + LightModel::Model model() const; + void setModel(LightModel::Model value); + + LightModel::ColorControl colorControl() const; + void setColorControl(LightModel::ColorControl value); + + LightModel::ViewerPosition viewerPosition() const; + void setViewerPosition(LightModel::ViewerPosition value); + + QColor ambientSceneColor() const; + void setAmbientSceneColor(const QColor& value); + +Q_SIGNALS: + void modelChanged(); + void colorControlChanged(); + void viewerPositionChanged(); + void ambientSceneColorChanged(); + void lightModelChanged(); + +private: + QScopedPointer<LightModelPrivate> d_ptr; + + Q_DECLARE_PRIVATE(LightModel) + Q_DISABLE_COPY(LightModel) +}; + +#endif diff --git a/examples/sensors/cubehouse/main.cpp b/examples/sensors/cubehouse/main.cpp new file mode 100644 index 0000000..6425e14 --- /dev/null +++ b/examples/sensors/cubehouse/main.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include <QApplication> +#include "view.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + View view; + if (QApplication::arguments().contains("-framerate")) + view.setShowFrameRate(true); + if (QApplication::arguments().contains("-maximize")) + view.showMaximized(); + else if (QApplication::arguments().contains("-fullscreen")) + view.showFullScreen(); + else + view.show(); + return app.exec(); +} diff --git a/examples/sensors/cubehouse/material.cpp b/examples/sensors/cubehouse/material.cpp new file mode 100644 index 0000000..e3f66e2 --- /dev/null +++ b/examples/sensors/cubehouse/material.cpp @@ -0,0 +1,331 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "material.h" + +/*! + \class Material + \brief The Material class describes material properties for OpenGL drawing. + \since 4.7 + \ingroup qt3d + \ingroup qt3d::painting +*/ + +class MaterialPrivate +{ +public: + explicit MaterialPrivate(); + + QColor basicColor; + QColor ambientColor; + QColor diffuseColor; + QColor specularColor; + QColor emittedLight; + qreal shininess; +}; + +MaterialPrivate::MaterialPrivate() + : basicColor(255, 255, 255, 255), + specularColor(0, 0, 0, 255), + emittedLight(0, 0, 0, 255), + shininess(0) +{ + ambientColor.setRgbF(0.2f, 0.2f, 0.2f, 1.0f); + diffuseColor.setRgbF(0.8f, 0.8f, 0.8f, 1.0f); +} + +/*! + Constructs a Material object with its default values, + and attaches it to \a parent. +*/ +Material::Material(QObject *parent) + : QObject(parent), d_ptr(new MaterialPrivate) +{ +} + +/*! + Destroys this Material object. +*/ +Material::~Material() +{ +} + +/*! + \property Material::basicColor + \brief the basic color of the material. The default value + is (1.0, 1.0, 1.0, 1.0). + + The basic color is used by effects that don't implement + material-based lighting. It is ignored by material-based + lighting effects. + + \sa ambientColor(), diffuseColor(), basicColorChanged(), setColor() +*/ +QColor Material::basicColor() const +{ + Q_D(const Material); + return d->basicColor; +} + +void Material::setBasicColor(const QColor& value) +{ + Q_D(Material); + if (d->basicColor != value) { + d->basicColor = value; + emit basicColorChanged(); + emit materialChanged(); + } +} + +/*! + \property Material::ambientColor + \brief the ambient color of the material. The default value + is (0.2, 0.2, 0.2, 1.0). + + \sa diffuseColor(), specularColor(), ambientColorChanged() +*/ +QColor Material::ambientColor() const +{ + Q_D(const Material); + return d->ambientColor; +} + +void Material::setAmbientColor(const QColor& value) +{ + Q_D(Material); + if (d->ambientColor != value) { + d->ambientColor = value; + emit ambientColorChanged(); + emit materialChanged(); + } +} + +/*! + \property Material::diffuseColor + \brief the diffuse color of the material. The default value + is (0.8, 0.8, 0.8, 1.0). + + \sa ambientColor(), specularColor(), diffuseColorChanged() +*/ +QColor Material::diffuseColor() const +{ + Q_D(const Material); + return d->diffuseColor; +} + +void Material::setDiffuseColor(const QColor& value) +{ + Q_D(Material); + if (d->diffuseColor != value) { + d->diffuseColor = value; + emit diffuseColorChanged(); + emit materialChanged(); + } +} + +/*! + \property Material::specularColor + \brief the specular color of the material. The default value + is (0, 0, 0, 1). + + \sa ambientColor(), diffuseColor(), specularColorChanged() +*/ +QColor Material::specularColor() const +{ + Q_D(const Material); + return d->specularColor; +} + +void Material::setSpecularColor(const QColor& value) +{ + Q_D(Material); + if (d->specularColor != value) { + d->specularColor = value; + emit specularColorChanged(); + emit materialChanged(); + } +} + +/*! + \property Material::emittedLight + \brief the emitted light intensity of the material. + The default value is (0.0, 0.0, 0.0, 1.0), which indicates + that the material does not emit any light. + + \sa emittedLightChanged() +*/ +QColor Material::emittedLight() const +{ + Q_D(const Material); + return d->emittedLight; +} + +void Material::setEmittedLight(const QColor& value) +{ + Q_D(Material); + if (d->emittedLight != value) { + d->emittedLight = value; + emit emittedLightChanged(); + emit materialChanged(); + } +} + +/*! + \property Material::color + \brief the overall color of the material. The default value + is (1.0, 1.0, 1.0, 1.0). + + This is a convenience property. When read it returns basicColor(). + When written, it sets basicColor() to the value, ambientColor() + to 20% of the value, and diffuseColor() to 80% of the value. + The result is that regardless of whether lighting is used or not, + the material will appear to have a similar color. + + \sa basicColor(), ambientColor(), diffuseColor() +*/ +QColor Material::color() const +{ + Q_D(const Material); + return d->basicColor; +} + +void Material::setColor(const QColor& value) +{ + Q_D(Material); + d->basicColor = value; + d->ambientColor.setRgbF + (value.redF() * 0.2f, value.greenF() * 0.2f, + value.blueF() * 0.2f, value.alphaF()); + d->diffuseColor.setRgbF + (value.redF() * 0.8f, value.greenF() * 0.8f, + value.blueF() * 0.8f, value.alphaF()); + emit basicColorChanged(); + emit ambientColorChanged(); + emit diffuseColorChanged(); + emit materialChanged(); +} + +/*! + \property Material::shininess + \brief the specular exponent of the material, or how shiny it is. + Must be between 0 and 128. The default value is 0. A value outside + this range will be clamped to the range when the property is set. + + \sa shininessChanged() +*/ +qreal Material::shininess() const +{ + Q_D(const Material); + return d->shininess; +} + +void Material::setShininess(qreal value) +{ + Q_D(Material); + if (value < 0) + value = 0; + else if (value > 128) + value = 128; + if (d->shininess != value) { + d->shininess = value; + emit shininessChanged(); + emit materialChanged(); + } +} + +/*! + \fn void Material::basicColorChanged() + + This signal is emitted when basicColor() changes. + + \sa basicColor(), setBasicColor(), materialChanged() +*/ + +/*! + \fn void Material::ambientColorChanged() + + This signal is emitted when ambientColor() changes. + + \sa ambientColor(), setAmbientColor(), materialChanged() +*/ + +/*! + \fn void Material::diffuseColorChanged() + + This signal is emitted when diffuseColor() changes. + + \sa diffuseColor(), setDiffuseColor(), materialChanged() +*/ + +/*! + \fn void Material::specularColorChanged() + + This signal is emitted when specularColor() changes. + + \sa specularColor(), setSpecularColor(), materialChanged() +*/ + +/*! + \fn void Material::emittedLightChanged() + + This signal is emitted when emittedLight() changes. + + \sa emittedLight(), setEmittedLight(), materialChanged() +*/ + +/*! + \fn void Material::shininessChanged() + + This signal is emitted when shininess() changes. + + \sa shininess(), setShininess(), materialChanged() +*/ + +/*! + \fn void Material::materialChanged() + + This signal is emitted when one of basicColor(), ambientColor(), + diffuseColor(), specularColor(), emittedLight(), shiniess(), + or texture() changes. + + \sa basicColorChanged(), ambientColorChanged(), diffuseColorChanged() + \sa specularColorChanged(), emittedLightChanged(), shininessChanged() + \sa texturesChanged() +*/ diff --git a/examples/sensors/cubehouse/material.fsh b/examples/sensors/cubehouse/material.fsh new file mode 100644 index 0000000..cce0293 --- /dev/null +++ b/examples/sensors/cubehouse/material.fsh @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +varying mediump vec4 qColor; +varying mediump vec4 qSecondaryColor; + +void main(void) +{ + gl_FragColor = clamp(qColor + vec4(qSecondaryColor.xyz, 0.0), 0.0, 1.0); +} diff --git a/examples/sensors/cubehouse/material.h b/examples/sensors/cubehouse/material.h new file mode 100644 index 0000000..3ed9527 --- /dev/null +++ b/examples/sensors/cubehouse/material.h @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef MATERIAL_H +#define MATERIAL_H + +#include <QtCore/qobject.h> +#include <QtCore/qscopedpointer.h> +#include <QtGui/qcolor.h> + +class MaterialPrivate; + +class Material : public QObject +{ + Q_OBJECT + Q_PROPERTY(QColor basicColor READ basicColor WRITE setBasicColor NOTIFY basicColorChanged) + Q_PROPERTY(QColor ambientColor READ ambientColor WRITE setAmbientColor NOTIFY ambientColorChanged) + Q_PROPERTY(QColor diffuseColor READ diffuseColor WRITE setDiffuseColor NOTIFY diffuseColorChanged) + Q_PROPERTY(QColor specularColor READ specularColor WRITE setSpecularColor NOTIFY specularColorChanged) + Q_PROPERTY(QColor emittedLight READ emittedLight WRITE setEmittedLight NOTIFY emittedLightChanged) + Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY basicColorChanged) + Q_PROPERTY(qreal shininess READ shininess WRITE setShininess NOTIFY shininessChanged) +public: + explicit Material(QObject *parent = 0); + ~Material(); + + QColor basicColor() const; + void setBasicColor(const QColor& value); + + QColor ambientColor() const; + void setAmbientColor(const QColor& value); + + QColor diffuseColor() const; + void setDiffuseColor(const QColor& value); + + QColor specularColor() const; + void setSpecularColor(const QColor& value); + + QColor emittedLight() const; + void setEmittedLight(const QColor& value); + + QColor color() const; + void setColor(const QColor& value); + + qreal shininess() const; + void setShininess(qreal value); + +Q_SIGNALS: + void basicColorChanged(); + void ambientColorChanged(); + void diffuseColorChanged(); + void specularColorChanged(); + void emittedLightChanged(); + void shininessChanged(); + void materialChanged(); + +private: + QScopedPointer<MaterialPrivate> d_ptr; + + Q_DECLARE_PRIVATE(Material) + Q_DISABLE_COPY(Material) +}; + +#endif diff --git a/examples/sensors/cubehouse/painter.cpp b/examples/sensors/cubehouse/painter.cpp new file mode 100644 index 0000000..2ec1237 --- /dev/null +++ b/examples/sensors/cubehouse/painter.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "painter.h" +#include <QtCore/qvarlengtharray.h> + +void Painter::drawQuad(const QVector3D &c1, const QVector3D &c2, + const QVector3D &c3, const QVector3D &c4, + const QVector3D &normal) +{ + QVarLengthArray<float> vertices; + QVarLengthArray<float> normals; + + vertices.append(c1.x()); + vertices.append(c1.y()); + vertices.append(c1.z()); + normals.append(normal.x()); + normals.append(normal.y()); + normals.append(normal.z()); + + vertices.append(c2.x()); + vertices.append(c2.y()); + vertices.append(c2.z()); + normals.append(normal.x()); + normals.append(normal.y()); + normals.append(normal.z()); + + vertices.append(c3.x()); + vertices.append(c3.y()); + vertices.append(c3.z()); + normals.append(normal.x()); + normals.append(normal.y()); + normals.append(normal.z()); + + vertices.append(c4.x()); + vertices.append(c4.y()); + vertices.append(c4.z()); + normals.append(normal.x()); + normals.append(normal.y()); + normals.append(normal.z()); + + setVertices(vertices.constData(), 3); + setNormals(normals.constData(), 3); + + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); +} diff --git a/examples/sensors/cubehouse/painter.h b/examples/sensors/cubehouse/painter.h new file mode 100644 index 0000000..883043d --- /dev/null +++ b/examples/sensors/cubehouse/painter.h @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef PAINTER_H +#define PAINTER_H + +#include <QtOpenGL/qgl.h> +#include <QtGui/qmatrix4x4.h> + +class Light; +class LightModel; +class Material; +class QGLShaderProgram; + +class Painter +{ +public: + Painter() : light(0), lightModel(0) {} + virtual ~Painter() {} + + virtual void setMatrices(const QMatrix4x4 &mv, const QMatrix4x4 &proj) = 0; + virtual void selectMaterial(Material *material) = 0; + virtual void selectTexturedMaterial(Material *material) = 0; + virtual void setVertices(const float *array, int stride) = 0; + virtual void setTexCoords(const float *array, int stride) = 0; + virtual void setNormals(const float *array, int stride) = 0; + + void drawQuad(const QVector3D &c1, const QVector3D &c2, + const QVector3D &c3, const QVector3D &c4, + const QVector3D &normal); + + void setLight(Light *value) { light = value; } + void setLightModel(LightModel *value) { lightModel = value; } + +protected: + Light *light; + LightModel *lightModel; +}; + +class FixedFunctionPainter : public Painter +{ +public: + FixedFunctionPainter(); + + void setMatrices(const QMatrix4x4 &mv, const QMatrix4x4 &proj); + void selectMaterial(Material *material); + void selectTexturedMaterial(Material *material); + void setVertices(const float *array, int stride); + void setTexCoords(const float *array, int stride); + void setNormals(const float *array, int stride); +}; + +class ShaderPainter : public Painter +{ +public: + ShaderPainter(); + ~ShaderPainter(); + + void setMatrices(const QMatrix4x4 &mv, const QMatrix4x4 &proj); + void selectMaterial(Material *material); + void selectTexturedMaterial(Material *material); + void setVertices(const float *array, int stride); + void setTexCoords(const float *array, int stride); + void setNormals(const float *array, int stride); + +private: + QGLShaderProgram *materialProgram; + QGLShaderProgram *textureProgram; + QGLShaderProgram *currentProgram; + QMatrix4x4 combinedMatrix; + QMatrix4x4 modelViewMatrix; + QMatrix3x3 normalMatrix; + bool matricesChanged; + + void updateMaterials(QGLShaderProgram *program, Material *material); +}; + +#endif diff --git a/examples/sensors/cubehouse/painter_fixed.cpp b/examples/sensors/cubehouse/painter_fixed.cpp new file mode 100644 index 0000000..f2990ab --- /dev/null +++ b/examples/sensors/cubehouse/painter_fixed.cpp @@ -0,0 +1,242 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "painter.h" +#include "light.h" +#include "lightmodel.h" +#include "material.h" + +FixedFunctionPainter::FixedFunctionPainter() +{ + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glDisable(GL_CULL_FACE); +} + +static void setMatrix(GLenum type, const QMatrix4x4 &matrix) +{ + glMatrixMode(type); + if (sizeof(qreal) == sizeof(GLfloat)) { + glLoadMatrixf(reinterpret_cast<const GLfloat *>(matrix.constData())); + } else { + GLfloat mat[16]; + const qreal *m = matrix.constData(); + for (int index = 0; index < 16; ++index) + mat[index] = m[index]; + glLoadMatrixf(mat); + } +} + +void FixedFunctionPainter::setMatrices + (const QMatrix4x4 &mv, const QMatrix4x4 &proj) +{ + setMatrix(GL_PROJECTION, proj); + setMatrix(GL_MODELVIEW, mv); +} + +static void setLight(int light, const Light *parameters, + const QMatrix4x4& transform = QMatrix4x4()) +{ + GLfloat params[4]; + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + + QColor color = parameters->ambientColor(); + params[0] = color.redF(); + params[1] = color.greenF(); + params[2] = color.blueF(); + params[3] = color.alphaF(); + glLightfv(light, GL_AMBIENT, params); + + color = parameters->diffuseColor(); + params[0] = color.redF(); + params[1] = color.greenF(); + params[2] = color.blueF(); + params[3] = color.alphaF(); + glLightfv(light, GL_DIFFUSE, params); + + color = parameters->specularColor(); + params[0] = color.redF(); + params[1] = color.greenF(); + params[2] = color.blueF(); + params[3] = color.alphaF(); + glLightfv(light, GL_SPECULAR, params); + + QVector4D vector = parameters->eyePosition(transform); + params[0] = vector.x(); + params[1] = vector.y(); + params[2] = vector.z(); + params[3] = vector.w(); + glLightfv(light, GL_POSITION, params); + + QVector3D spotDirection = parameters->eyeSpotDirection(transform); + params[0] = spotDirection.x(); + params[1] = spotDirection.y(); + params[2] = spotDirection.z(); + glLightfv(light, GL_SPOT_DIRECTION, params); + + params[0] = parameters->spotExponent(); + glLightfv(light, GL_SPOT_EXPONENT, params); + + params[0] = parameters->spotAngle(); + glLightfv(light, GL_SPOT_CUTOFF, params); + + params[0] = parameters->constantAttenuation(); + glLightfv(light, GL_CONSTANT_ATTENUATION, params); + + params[0] = parameters->linearAttenuation(); + glLightfv(light, GL_LINEAR_ATTENUATION, params); + + params[0] = parameters->quadraticAttenuation(); + glLightfv(light, GL_QUADRATIC_ATTENUATION, params); + + glPopMatrix(); +} + +static void setLightModel(const LightModel *lightModel) +{ + GLfloat values[4]; +#ifdef GL_LIGHT_MODEL_TWO_SIDE + if (lightModel->model() == LightModel::TwoSided) + values[0] = 1.0f; + else + values[0] = 0.0f; + glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, values); +#endif +#ifdef GL_LIGHT_MODEL_COLOR_CONTROL + if (lightModel->colorControl() == LightModel::SeparateSpecularColor) + values[0] = GL_SEPARATE_SPECULAR_COLOR; + else + values[0] = GL_SINGLE_COLOR; + glLightModelfv(GL_LIGHT_MODEL_COLOR_CONTROL, values); +#endif +#ifdef GL_LIGHT_MODEL_LOCAL_VIEWER + if (lightModel->viewerPosition() == LightModel::LocalViewer) + values[0] = 1.0f; + else + values[0] = 0.0f; + glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, values); +#endif +#ifdef GL_LIGHT_MODEL_AMBIENT + QColor color = lightModel->ambientSceneColor(); + values[0] = color.redF(); + values[1] = color.blueF(); + values[2] = color.greenF(); + values[3] = color.alphaF(); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, values); +#endif +} + +static void setMaterial(int face, const Material *parameters) +{ + GLfloat params[17]; + + QColor mcolor = parameters->ambientColor(); + params[0] = mcolor.redF(); + params[1] = mcolor.greenF(); + params[2] = mcolor.blueF(); + params[3] = mcolor.alphaF(); + + mcolor = parameters->diffuseColor(); + params[4] = mcolor.redF(); + params[5] = mcolor.greenF(); + params[6] = mcolor.blueF(); + params[7] = mcolor.alphaF(); + + mcolor = parameters->specularColor(); + params[8] = mcolor.redF(); + params[9] = mcolor.greenF(); + params[10] = mcolor.blueF(); + params[11] = mcolor.alphaF(); + + mcolor = parameters->emittedLight(); + params[12] = mcolor.redF(); + params[13] = mcolor.greenF(); + params[14] = mcolor.blueF(); + params[15] = mcolor.alphaF(); + + params[16] = parameters->shininess(); + + glMaterialfv(face, GL_AMBIENT, params); + glMaterialfv(face, GL_DIFFUSE, params + 4); + glMaterialfv(face, GL_SPECULAR, params + 8); + glMaterialfv(face, GL_EMISSION, params + 12); + glMaterialfv(face, GL_SHININESS, params + 16); +} + +void FixedFunctionPainter::selectMaterial(Material *material) +{ + ::setLight(GL_LIGHT0, light); + ::setLightModel(lightModel); + ::setMaterial(GL_FRONT_AND_BACK, material); + glDisable(GL_TEXTURE_2D); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); +} + +void FixedFunctionPainter::selectTexturedMaterial(Material *material) +{ + ::setLight(GL_LIGHT0, light); + ::setLightModel(lightModel); + ::setMaterial(GL_FRONT_AND_BACK, material); + glEnable(GL_TEXTURE_2D); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); +} + +void FixedFunctionPainter::setVertices(const float *array, int stride) +{ + glVertexPointer(3, GL_FLOAT, stride * sizeof(float), array); +} + +void FixedFunctionPainter::setTexCoords(const float *array, int stride) +{ + glTexCoordPointer(2, GL_FLOAT, stride * sizeof(float), array); +} + +void FixedFunctionPainter::setNormals(const float *array, int stride) +{ + glNormalPointer(GL_FLOAT, stride * sizeof(float), array); +} diff --git a/examples/sensors/cubehouse/painter_shader.cpp b/examples/sensors/cubehouse/painter_shader.cpp new file mode 100644 index 0000000..0e9f364 --- /dev/null +++ b/examples/sensors/cubehouse/painter_shader.cpp @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "painter.h" +#include "light.h" +#include "lightmodel.h" +#include "material.h" +#include <QtOpenGL/qglshaderprogram.h> + +ShaderPainter::ShaderPainter() +{ + materialProgram = new QGLShaderProgram(); + materialProgram->addShaderFromSourceFile + (QGLShader::Vertex, QLatin1String(":/lighting.vsh")); + materialProgram->addShaderFromSourceFile + (QGLShader::Fragment, QLatin1String(":/material.fsh")); + materialProgram->bindAttributeLocation("vertex", 0); + materialProgram->bindAttributeLocation("normal", 1); + materialProgram->bindAttributeLocation("texcoord", 2); + materialProgram->link(); + + textureProgram = new QGLShaderProgram(); + textureProgram->addShaderFromSourceFile + (QGLShader::Vertex, QLatin1String(":/lighting.vsh")); + textureProgram->addShaderFromSourceFile + (QGLShader::Fragment, QLatin1String(":/texture.fsh")); + textureProgram->bindAttributeLocation("vertex", 0); + textureProgram->bindAttributeLocation("normal", 1); + textureProgram->bindAttributeLocation("texcoord", 2); + textureProgram->link(); + + currentProgram = 0; + matricesChanged = false; +} + +ShaderPainter::~ShaderPainter() +{ + delete materialProgram; + delete textureProgram; +} + +void ShaderPainter::setMatrices(const QMatrix4x4 &mv, const QMatrix4x4 &proj) +{ + combinedMatrix = proj * mv; + modelViewMatrix = mv; + normalMatrix = mv.normalMatrix(); + matricesChanged = true; +} + +void ShaderPainter::selectMaterial(Material *material) +{ + if (currentProgram != materialProgram) { + materialProgram->bind(); + materialProgram->enableAttributeArray(0); + materialProgram->enableAttributeArray(1); + materialProgram->disableAttributeArray(2); + currentProgram = materialProgram; + matricesChanged = true; + } + if (matricesChanged) { + materialProgram->setUniformValue("matrix", combinedMatrix); + materialProgram->setUniformValue("modelView", modelViewMatrix); + materialProgram->setUniformValue("normalMatrix", normalMatrix); + matricesChanged = false; + } + updateMaterials(materialProgram, material); +} + +void ShaderPainter::selectTexturedMaterial(Material *material) +{ + if (currentProgram != textureProgram) { + textureProgram->bind(); + textureProgram->enableAttributeArray(0); + textureProgram->enableAttributeArray(1); + textureProgram->enableAttributeArray(2); + textureProgram->setUniformValue("tex", 0); + currentProgram = textureProgram; + matricesChanged = true; + } + if (matricesChanged) { + textureProgram->setUniformValue("matrix", combinedMatrix); + textureProgram->setUniformValue("modelView", modelViewMatrix); + textureProgram->setUniformValue("normalMatrix", normalMatrix); + matricesChanged = false; + } + updateMaterials(textureProgram, material); +} + +void ShaderPainter::setVertices(const float *array, int stride) +{ + // Doesn't matter which program we use - they have the same locations. + materialProgram->setAttributeArray(0, array, 3, stride * sizeof(float)); +} + +void ShaderPainter::setTexCoords(const float *array, int stride) +{ + materialProgram->setAttributeArray(2, array, 2, stride * sizeof(float)); +} + +void ShaderPainter::setNormals(const float *array, int stride) +{ + materialProgram->setAttributeArray(1, array, 3, stride * sizeof(float)); +} + +void ShaderPainter::updateMaterials + (QGLShaderProgram *program, Material *material) +{ + // Set the uniform variables for the light. + QVector4D pli = light->eyePosition(QMatrix4x4()); + program->setUniformValue("pli", QVector3D(pli.x(), pli.y(), pli.z())); + program->setUniformValue("pliw", GLfloat(pli.w())); + + // Set the uniform variables for the light model. + program->setUniformValue("viewerAtInfinity", (int)(lightModel->viewerPosition() == LightModel::ViewerAtInfinity)); + program->setUniformValue("acs", lightModel->ambientSceneColor()); + + // Set the uniform variables for the material. + program->setUniformValue("acm", material->ambientColor()); + program->setUniformValue("dcm", material->diffuseColor()); + program->setUniformValue("scm", material->specularColor()); + program->setUniformValue("srm", (float)(material->shininess())); +} diff --git a/examples/sensors/cubehouse/qtlogo.png b/examples/sensors/cubehouse/qtlogo.png Binary files differnew file mode 100644 index 0000000..7d3e97e --- /dev/null +++ b/examples/sensors/cubehouse/qtlogo.png diff --git a/examples/sensors/cubehouse/teapot.h b/examples/sensors/cubehouse/teapot.h new file mode 100644 index 0000000..71e31e7 --- /dev/null +++ b/examples/sensors/cubehouse/teapot.h @@ -0,0 +1,4550 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef TEAPOT_H +#define TEAPOT_H + +#define teapotVertexCount 3488 +#define teapotVertexStride 8 +#define teapotTriangleCount 4032 + +static float const teapotVertexData[] = { + 0.700000f, 0.450000f, -0.000000f, -0.902860f, -0.429934f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.450000f, 0.700000f, -0.000000f, -0.429934f, -0.902860f, 1.000000f, 0.000000f, + 0.750000f, 0.450000f, -0.000000f, 0.902860f, 0.429934f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, 0.450000f, 0.750000f, 0.000000f, 0.429934f, 0.902860f, 1.000000f, 1.000000f, + 0.497000f, 0.450000f, 0.497000f, -0.639602f, -0.426402f, -0.639602f, 0.500000f, 0.000000f, + 0.701563f, 0.499219f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.500000f, + 0.498109f, 0.499219f, 0.498109f, 0.000000f, 1.000000f, -0.000000f, 0.500000f, 0.500000f, + 0.000000f, 0.499219f, 0.701563f, 0.000000f, 1.000000f, -0.000000f, 1.000000f, 0.500000f, + 0.532500f, 0.450000f, 0.532500f, 0.639602f, 0.426402f, 0.639602f, 0.500000f, 1.000000f, + 0.645750f, 0.450000f, 0.274750f, -0.833528f, -0.429664f, -0.347303f, 0.250000f, 0.000000f, + 0.690234f, 0.486914f, -0.000000f, -0.995495f, 0.094810f, 0.000000f, 0.000000f, 0.250000f, + 0.636741f, 0.486914f, 0.270917f, -0.918925f, 0.094737f, -0.382885f, 0.250000f, 0.250000f, + 0.490066f, 0.486914f, 0.490066f, -0.703896f, 0.095194f, -0.703896f, 0.500000f, 0.250000f, + 0.647191f, 0.499219f, 0.275363f, 0.000000f, 1.000000f, -0.000000f, 0.250000f, 0.500000f, + 0.686000f, 0.450000f, 0.142625f, -0.885319f, -0.429953f, -0.177064f, 0.125000f, 0.000000f, + 0.691895f, 0.471533f, -0.000000f, -0.969231f, -0.246154f, 0.000000f, 0.000000f, 0.125000f, + 0.678057f, 0.471533f, 0.140974f, -0.950406f, -0.246166f, -0.190081f, 0.125000f, 0.125000f, + 0.638273f, 0.471533f, 0.271569f, -0.894539f, -0.246731f, -0.372725f, 0.250000f, 0.125000f, + 0.676430f, 0.486914f, 0.140635f, -0.976163f, 0.094813f, -0.195233f, 0.125000f, 0.250000f, + 0.581875f, 0.450000f, 0.393750f, -0.749476f, -0.430917f, -0.502590f, 0.375000f, 0.000000f, + 0.638273f, 0.471533f, 0.271569f, -0.894539f, -0.246731f, -0.372725f, 0.250000f, 0.125000f, + 0.575137f, 0.471533f, 0.389191f, -0.804852f, -0.246803f, -0.539724f, 0.375000f, 0.125000f, + 0.491245f, 0.471533f, 0.491245f, -0.685179f, -0.247099f, -0.685180f, 0.500000f, 0.125000f, + 0.573757f, 0.486914f, 0.388257f, -0.826782f, 0.095071f, -0.554430f, 0.375000f, 0.250000f, + 0.676430f, 0.486914f, 0.140635f, -0.976163f, 0.094813f, -0.195233f, 0.125000f, 0.250000f, + 0.693848f, 0.496143f, -0.000000f, -0.724137f, 0.689656f, 0.000000f, 0.000000f, 0.375000f, + 0.679971f, 0.496143f, 0.141371f, -0.710057f, 0.689675f, -0.142011f, 0.125000f, 0.375000f, + 0.640074f, 0.496143f, 0.272335f, -0.667641f, 0.690558f, -0.278184f, 0.250000f, 0.375000f, + 0.687531f, 0.499219f, 0.142943f, 0.000000f, 1.000000f, -0.000000f, 0.125000f, 0.500000f, + 0.573757f, 0.486914f, 0.388257f, -0.826782f, 0.095071f, -0.554430f, 0.375000f, 0.250000f, + 0.640074f, 0.496143f, 0.272335f, -0.667641f, 0.690558f, -0.278184f, 0.250000f, 0.375000f, + 0.576761f, 0.496143f, 0.390289f, -0.600626f, 0.690668f, -0.402773f, 0.375000f, 0.375000f, + 0.492632f, 0.496143f, 0.492632f, -0.511047f, 0.691132f, -0.511046f, 0.500000f, 0.375000f, + 0.583174f, 0.499219f, 0.394629f, 0.000000f, 1.000000f, -0.000000f, 0.375000f, 0.500000f, + 0.274750f, 0.450000f, 0.645750f, -0.347353f, -0.429394f, -0.833647f, 0.750000f, 0.000000f, + 0.490066f, 0.486914f, 0.490066f, -0.703896f, 0.095194f, -0.703896f, 0.500000f, 0.250000f, + 0.270917f, 0.486914f, 0.636741f, -0.382888f, 0.094664f, -0.918932f, 0.750000f, 0.250000f, + 0.000000f, 0.486914f, 0.690234f, 0.000000f, 0.094810f, -0.995495f, 1.000000f, 0.250000f, + 0.275363f, 0.499219f, 0.647191f, 0.000000f, 1.000000f, -0.000000f, 0.750000f, 0.500000f, + 0.393750f, 0.450000f, 0.581875f, -0.502594f, -0.430900f, -0.749483f, 0.625000f, 0.000000f, + 0.491245f, 0.471533f, 0.491245f, -0.685180f, -0.247099f, -0.685179f, 0.500000f, 0.125000f, + 0.389191f, 0.471533f, 0.575137f, -0.539726f, -0.246792f, -0.804854f, 0.625000f, 0.125000f, + 0.271569f, 0.471533f, 0.638273f, -0.372725f, -0.246731f, -0.894539f, 0.750000f, 0.125000f, + 0.388257f, 0.486914f, 0.573757f, -0.554431f, 0.095066f, -0.826782f, 0.625000f, 0.250000f, + 0.142625f, 0.450000f, 0.686000f, -0.177068f, -0.429904f, -0.885342f, 0.875000f, 0.000000f, + 0.271569f, 0.471533f, 0.638273f, -0.372725f, -0.246731f, -0.894539f, 0.750000f, 0.125000f, + 0.140974f, 0.471533f, 0.678057f, -0.190083f, -0.246134f, -0.950414f, 0.875000f, 0.125000f, + 0.000000f, 0.471533f, 0.691895f, -0.000000f, -0.246154f, -0.969231f, 1.000000f, 0.125000f, + 0.140635f, 0.486914f, 0.676430f, -0.195233f, 0.094801f, -0.976164f, 0.875000f, 0.250000f, + 0.388257f, 0.486914f, 0.573757f, -0.554431f, 0.095066f, -0.826782f, 0.625000f, 0.250000f, + 0.492632f, 0.496143f, 0.492632f, -0.511046f, 0.691132f, -0.511047f, 0.500000f, 0.375000f, + 0.390289f, 0.496143f, 0.576761f, -0.402782f, 0.690651f, -0.600640f, 0.625000f, 0.375000f, + 0.272335f, 0.496143f, 0.640074f, -0.278184f, 0.690558f, -0.667641f, 0.750000f, 0.375000f, + 0.394629f, 0.499219f, 0.583174f, 0.000000f, 1.000000f, -0.000000f, 0.625000f, 0.500000f, + 0.140635f, 0.486914f, 0.676430f, -0.195233f, 0.094801f, -0.976164f, 0.875000f, 0.250000f, + 0.272335f, 0.496143f, 0.640074f, -0.278184f, 0.690558f, -0.667641f, 0.750000f, 0.375000f, + 0.141371f, 0.496143f, 0.679971f, -0.142021f, 0.689625f, -0.710104f, 0.875000f, 0.375000f, + 0.000000f, 0.496143f, 0.693848f, 0.000000f, 0.689656f, -0.724137f, 1.000000f, 0.375000f, + 0.142943f, 0.499219f, 0.687531f, 0.000000f, 1.000000f, -0.000000f, 0.875000f, 0.500000f, + 0.647191f, 0.499219f, 0.275363f, 0.000000f, 1.000000f, -0.000000f, 0.250000f, 0.500000f, + 0.724609f, 0.486914f, -0.000000f, 0.690476f, 0.723356f, -0.000000f, 0.000000f, 0.750000f, + 0.668452f, 0.486914f, 0.284409f, 0.637619f, 0.723090f, 0.265674f, 0.250000f, 0.750000f, + 0.514473f, 0.486914f, 0.514473f, 0.487196f, 0.724762f, 0.487196f, 0.500000f, 0.750000f, + 0.691875f, 0.450000f, 0.294375f, 0.833528f, 0.429664f, 0.347303f, 0.250000f, 1.000000f, + 0.687531f, 0.499219f, 0.142943f, 0.000000f, 1.000000f, -0.000000f, 0.125000f, 0.500000f, + 0.712207f, 0.496143f, -0.000000f, 0.464835f, 0.885397f, -0.000000f, 0.000000f, 0.625000f, + 0.697963f, 0.496143f, 0.145112f, 0.455789f, 0.885407f, 0.091158f, 0.125000f, 0.625000f, + 0.657011f, 0.496143f, 0.279541f, 0.428239f, 0.885874f, 0.178433f, 0.250000f, 0.625000f, + 0.710117f, 0.486914f, 0.147639f, 0.677049f, 0.723373f, 0.135410f, 0.125000f, 0.750000f, + 0.583174f, 0.499219f, 0.394629f, 0.000000f, 1.000000f, -0.000000f, 0.375000f, 0.500000f, + 0.657011f, 0.496143f, 0.279541f, 0.428239f, 0.885874f, 0.178433f, 0.250000f, 0.625000f, + 0.592022f, 0.496143f, 0.400616f, 0.385216f, 0.885934f, 0.258322f, 0.375000f, 0.625000f, + 0.505667f, 0.496143f, 0.505667f, 0.327637f, 0.886176f, 0.327636f, 0.500000f, 0.625000f, + 0.602332f, 0.486914f, 0.407593f, 0.572629f, 0.724322f, 0.383998f, 0.375000f, 0.750000f, + 0.710117f, 0.486914f, 0.147639f, 0.677049f, 0.723373f, 0.135410f, 0.125000f, 0.750000f, + 0.737598f, 0.471533f, -0.000000f, 0.819842f, 0.572589f, -0.000000f, 0.000000f, 0.875000f, + 0.722846f, 0.471533f, 0.150286f, 0.803908f, 0.572609f, 0.160782f, 0.125000f, 0.875000f, + 0.680434f, 0.471533f, 0.289507f, 0.756157f, 0.573550f, 0.315066f, 0.250000f, 0.875000f, + 0.735000f, 0.450000f, 0.152812f, 0.885319f, 0.429952f, 0.177064f, 0.125000f, 1.000000f, + 0.602332f, 0.486914f, 0.407593f, 0.572628f, 0.724322f, 0.383998f, 0.375000f, 0.750000f, + 0.680434f, 0.471533f, 0.289507f, 0.756158f, 0.573550f, 0.315065f, 0.250000f, 0.875000f, + 0.613128f, 0.471533f, 0.414899f, 0.680288f, 0.573668f, 0.456193f, 0.375000f, 0.875000f, + 0.523694f, 0.471533f, 0.523694f, 0.578938f, 0.574162f, 0.578938f, 0.500000f, 0.875000f, + 0.623438f, 0.450000f, 0.421875f, 0.749476f, 0.430918f, 0.502589f, 0.375000f, 1.000000f, + 0.275363f, 0.499219f, 0.647191f, 0.000000f, 1.000000f, -0.000000f, 0.750000f, 0.500000f, + 0.514473f, 0.486914f, 0.514473f, 0.487196f, 0.724762f, 0.487196f, 0.500000f, 0.750000f, + 0.284409f, 0.486914f, 0.668452f, 0.265781f, 0.722825f, 0.637875f, 0.750000f, 0.750000f, + 0.000000f, 0.486914f, 0.724609f, 0.000000f, 0.723356f, 0.690476f, 1.000000f, 0.750000f, + 0.294375f, 0.450000f, 0.691875f, 0.347353f, 0.429394f, 0.833647f, 0.750000f, 1.000000f, + 0.394629f, 0.499219f, 0.583174f, 0.000000f, 1.000000f, -0.000000f, 0.625000f, 0.500000f, + 0.505667f, 0.496143f, 0.505667f, 0.327636f, 0.886176f, 0.327637f, 0.500000f, 0.625000f, + 0.400616f, 0.496143f, 0.592022f, 0.258332f, 0.885924f, 0.385231f, 0.625000f, 0.625000f, + 0.279541f, 0.496143f, 0.657011f, 0.178433f, 0.885874f, 0.428239f, 0.750000f, 0.625000f, + 0.407593f, 0.486914f, 0.602332f, 0.384008f, 0.724305f, 0.572644f, 0.625000f, 0.750000f, + 0.142943f, 0.499219f, 0.687531f, 0.000000f, 1.000000f, -0.000000f, 0.875000f, 0.500000f, + 0.279541f, 0.496143f, 0.657011f, 0.178433f, 0.885874f, 0.428239f, 0.750000f, 0.625000f, + 0.145112f, 0.496143f, 0.697963f, 0.091168f, 0.885381f, 0.455839f, 0.875000f, 0.625000f, + 0.000000f, 0.496143f, 0.712207f, 0.000000f, 0.885397f, 0.464835f, 1.000000f, 0.625000f, + 0.147639f, 0.486914f, 0.710117f, 0.135420f, 0.723325f, 0.677099f, 0.875000f, 0.750000f, + 0.407593f, 0.486914f, 0.602332f, 0.384008f, 0.724305f, 0.572643f, 0.625000f, 0.750000f, + 0.523694f, 0.471533f, 0.523694f, 0.578938f, 0.574162f, 0.578938f, 0.500000f, 0.875000f, + 0.414899f, 0.471533f, 0.613128f, 0.456201f, 0.573650f, 0.680299f, 0.625000f, 0.875000f, + 0.289507f, 0.471533f, 0.680434f, 0.315065f, 0.573550f, 0.756158f, 0.750000f, 0.875000f, + 0.421875f, 0.450000f, 0.623438f, 0.502594f, 0.430901f, 0.749482f, 0.625000f, 1.000000f, + 0.147639f, 0.486914f, 0.710117f, 0.135420f, 0.723325f, 0.677099f, 0.875000f, 0.750000f, + 0.289507f, 0.471533f, 0.680434f, 0.315066f, 0.573550f, 0.756157f, 0.750000f, 0.875000f, + 0.150286f, 0.471533f, 0.722846f, 0.160789f, 0.572555f, 0.803945f, 0.875000f, 0.875000f, + 0.000000f, 0.471533f, 0.737598f, 0.000000f, 0.572589f, 0.819842f, 1.000000f, 0.875000f, + 0.152812f, 0.450000f, 0.735000f, 0.177068f, 0.429904f, 0.885342f, 0.875000f, 1.000000f, + 0.000000f, 0.450000f, 0.700000f, -0.000000f, -0.429934f, -0.902860f, 0.000000f, 0.000000f, + -0.700000f, 0.450000f, -0.000000f, 0.902860f, -0.429934f, 0.000000f, 1.000000f, 0.000000f, + 0.000000f, 0.450000f, 0.750000f, 0.000000f, 0.429934f, 0.902860f, 0.000000f, 1.000000f, + -0.750000f, 0.450000f, -0.000000f, -0.902860f, 0.429934f, 0.000000f, 1.000000f, 1.000000f, + -0.497000f, 0.450000f, 0.497000f, 0.639602f, -0.426402f, -0.639602f, 0.500000f, 0.000000f, + 0.000000f, 0.499219f, 0.701563f, 0.000000f, 1.000000f, -0.000000f, 0.000000f, 0.500000f, + -0.498109f, 0.499219f, 0.498109f, 0.000000f, 1.000000f, 0.000000f, 0.500000f, 0.500000f, + -0.701563f, 0.499219f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.500000f, + -0.532500f, 0.450000f, 0.532500f, -0.639602f, 0.426402f, 0.639602f, 0.500000f, 1.000000f, + -0.274750f, 0.450000f, 0.645750f, 0.347303f, -0.429664f, -0.833528f, 0.250000f, 0.000000f, + 0.000000f, 0.486914f, 0.690234f, 0.000000f, 0.094810f, -0.995495f, 0.000000f, 0.250000f, + -0.270917f, 0.486914f, 0.636741f, 0.382885f, 0.094737f, -0.918925f, 0.250000f, 0.250000f, + -0.490066f, 0.486914f, 0.490066f, 0.703896f, 0.095194f, -0.703896f, 0.500000f, 0.250000f, + -0.275363f, 0.499219f, 0.647191f, 0.000000f, 1.000000f, 0.000000f, 0.250000f, 0.500000f, + -0.142625f, 0.450000f, 0.686000f, 0.177064f, -0.429953f, -0.885319f, 0.125000f, 0.000000f, + 0.000000f, 0.471533f, 0.691895f, -0.000000f, -0.246154f, -0.969231f, 0.000000f, 0.125000f, + -0.140974f, 0.471533f, 0.678057f, 0.190081f, -0.246166f, -0.950406f, 0.125000f, 0.125000f, + -0.271569f, 0.471533f, 0.638273f, 0.372725f, -0.246731f, -0.894539f, 0.250000f, 0.125000f, + -0.140635f, 0.486914f, 0.676430f, 0.195233f, 0.094813f, -0.976163f, 0.125000f, 0.250000f, + -0.393750f, 0.450000f, 0.581875f, 0.502590f, -0.430917f, -0.749476f, 0.375000f, 0.000000f, + -0.271569f, 0.471533f, 0.638273f, 0.372725f, -0.246731f, -0.894539f, 0.250000f, 0.125000f, + -0.389191f, 0.471533f, 0.575137f, 0.539724f, -0.246803f, -0.804852f, 0.375000f, 0.125000f, + -0.491245f, 0.471533f, 0.491245f, 0.685180f, -0.247099f, -0.685179f, 0.500000f, 0.125000f, + -0.388257f, 0.486914f, 0.573757f, 0.554430f, 0.095071f, -0.826782f, 0.375000f, 0.250000f, + -0.140635f, 0.486914f, 0.676430f, 0.195233f, 0.094813f, -0.976163f, 0.125000f, 0.250000f, + 0.000000f, 0.496143f, 0.693848f, 0.000000f, 0.689656f, -0.724137f, 0.000000f, 0.375000f, + -0.141371f, 0.496143f, 0.679971f, 0.142011f, 0.689675f, -0.710057f, 0.125000f, 0.375000f, + -0.272335f, 0.496143f, 0.640074f, 0.278184f, 0.690558f, -0.667641f, 0.250000f, 0.375000f, + -0.142943f, 0.499219f, 0.687531f, 0.000000f, 1.000000f, 0.000000f, 0.125000f, 0.500000f, + -0.388257f, 0.486914f, 0.573757f, 0.554430f, 0.095071f, -0.826782f, 0.375000f, 0.250000f, + -0.272335f, 0.496143f, 0.640074f, 0.278184f, 0.690558f, -0.667641f, 0.250000f, 0.375000f, + -0.390289f, 0.496143f, 0.576761f, 0.402773f, 0.690668f, -0.600626f, 0.375000f, 0.375000f, + -0.492632f, 0.496143f, 0.492632f, 0.511046f, 0.691132f, -0.511047f, 0.500000f, 0.375000f, + -0.394629f, 0.499219f, 0.583174f, 0.000000f, 1.000000f, 0.000000f, 0.375000f, 0.500000f, + -0.645750f, 0.450000f, 0.274750f, 0.833647f, -0.429394f, -0.347353f, 0.750000f, 0.000000f, + -0.490066f, 0.486914f, 0.490066f, 0.703896f, 0.095194f, -0.703896f, 0.500000f, 0.250000f, + -0.636741f, 0.486914f, 0.270917f, 0.918932f, 0.094664f, -0.382888f, 0.750000f, 0.250000f, + -0.690234f, 0.486914f, -0.000000f, 0.995495f, 0.094810f, 0.000000f, 1.000000f, 0.250000f, + -0.647191f, 0.499219f, 0.275363f, 0.000000f, 1.000000f, 0.000000f, 0.750000f, 0.500000f, + -0.581875f, 0.450000f, 0.393750f, 0.749483f, -0.430900f, -0.502594f, 0.625000f, 0.000000f, + -0.491245f, 0.471533f, 0.491245f, 0.685179f, -0.247099f, -0.685180f, 0.500000f, 0.125000f, + -0.575137f, 0.471533f, 0.389191f, 0.804854f, -0.246792f, -0.539726f, 0.625000f, 0.125000f, + -0.638273f, 0.471533f, 0.271569f, 0.894539f, -0.246731f, -0.372725f, 0.750000f, 0.125000f, + -0.573757f, 0.486914f, 0.388257f, 0.826782f, 0.095066f, -0.554431f, 0.625000f, 0.250000f, + -0.686000f, 0.450000f, 0.142625f, 0.885342f, -0.429904f, -0.177068f, 0.875000f, 0.000000f, + -0.638273f, 0.471533f, 0.271569f, 0.894539f, -0.246731f, -0.372725f, 0.750000f, 0.125000f, + -0.678057f, 0.471533f, 0.140974f, 0.950414f, -0.246134f, -0.190083f, 0.875000f, 0.125000f, + -0.691895f, 0.471533f, -0.000000f, 0.969231f, -0.246154f, 0.000000f, 1.000000f, 0.125000f, + -0.676430f, 0.486914f, 0.140635f, 0.976164f, 0.094801f, -0.195233f, 0.875000f, 0.250000f, + -0.573757f, 0.486914f, 0.388257f, 0.826782f, 0.095066f, -0.554431f, 0.625000f, 0.250000f, + -0.492632f, 0.496143f, 0.492632f, 0.511047f, 0.691132f, -0.511046f, 0.500000f, 0.375000f, + -0.576761f, 0.496143f, 0.390289f, 0.600640f, 0.690651f, -0.402782f, 0.625000f, 0.375000f, + -0.640074f, 0.496143f, 0.272335f, 0.667641f, 0.690558f, -0.278184f, 0.750000f, 0.375000f, + -0.583174f, 0.499219f, 0.394629f, 0.000000f, 1.000000f, 0.000000f, 0.625000f, 0.500000f, + -0.676430f, 0.486914f, 0.140635f, 0.976164f, 0.094801f, -0.195233f, 0.875000f, 0.250000f, + -0.640074f, 0.496143f, 0.272335f, 0.667641f, 0.690558f, -0.278184f, 0.750000f, 0.375000f, + -0.679971f, 0.496143f, 0.141371f, 0.710104f, 0.689625f, -0.142021f, 0.875000f, 0.375000f, + -0.693848f, 0.496143f, -0.000000f, 0.724137f, 0.689656f, 0.000000f, 1.000000f, 0.375000f, + -0.687531f, 0.499219f, 0.142943f, 0.000000f, 1.000000f, 0.000000f, 0.875000f, 0.500000f, + -0.275363f, 0.499219f, 0.647191f, 0.000000f, 1.000000f, 0.000000f, 0.250000f, 0.500000f, + 0.000000f, 0.486914f, 0.724609f, 0.000000f, 0.723356f, 0.690476f, 0.000000f, 0.750000f, + -0.284409f, 0.486914f, 0.668452f, -0.265674f, 0.723090f, 0.637619f, 0.250000f, 0.750000f, + -0.514473f, 0.486914f, 0.514473f, -0.487196f, 0.724762f, 0.487196f, 0.500000f, 0.750000f, + -0.294375f, 0.450000f, 0.691875f, -0.347303f, 0.429664f, 0.833528f, 0.250000f, 1.000000f, + -0.142943f, 0.499219f, 0.687531f, 0.000000f, 1.000000f, 0.000000f, 0.125000f, 0.500000f, + 0.000000f, 0.496143f, 0.712207f, 0.000000f, 0.885397f, 0.464835f, 0.000000f, 0.625000f, + -0.145112f, 0.496143f, 0.697963f, -0.091158f, 0.885407f, 0.455789f, 0.125000f, 0.625000f, + -0.279541f, 0.496143f, 0.657011f, -0.178433f, 0.885874f, 0.428239f, 0.250000f, 0.625000f, + -0.147639f, 0.486914f, 0.710117f, -0.135410f, 0.723373f, 0.677049f, 0.125000f, 0.750000f, + -0.394629f, 0.499219f, 0.583174f, 0.000000f, 1.000000f, 0.000000f, 0.375000f, 0.500000f, + -0.279541f, 0.496143f, 0.657011f, -0.178433f, 0.885874f, 0.428239f, 0.250000f, 0.625000f, + -0.400616f, 0.496143f, 0.592022f, -0.258322f, 0.885934f, 0.385216f, 0.375000f, 0.625000f, + -0.505667f, 0.496143f, 0.505667f, -0.327636f, 0.886176f, 0.327637f, 0.500000f, 0.625000f, + -0.407593f, 0.486914f, 0.602332f, -0.383998f, 0.724322f, 0.572629f, 0.375000f, 0.750000f, + -0.147639f, 0.486914f, 0.710117f, -0.135410f, 0.723373f, 0.677049f, 0.125000f, 0.750000f, + 0.000000f, 0.471533f, 0.737598f, 0.000000f, 0.572589f, 0.819842f, 0.000000f, 0.875000f, + -0.150286f, 0.471533f, 0.722846f, -0.160782f, 0.572609f, 0.803908f, 0.125000f, 0.875000f, + -0.289507f, 0.471533f, 0.680434f, -0.315066f, 0.573550f, 0.756157f, 0.250000f, 0.875000f, + -0.152812f, 0.450000f, 0.735000f, -0.177064f, 0.429952f, 0.885319f, 0.125000f, 1.000000f, + -0.407593f, 0.486914f, 0.602332f, -0.383998f, 0.724322f, 0.572628f, 0.375000f, 0.750000f, + -0.289507f, 0.471533f, 0.680434f, -0.315065f, 0.573550f, 0.756158f, 0.250000f, 0.875000f, + -0.414899f, 0.471533f, 0.613128f, -0.456193f, 0.573668f, 0.680288f, 0.375000f, 0.875000f, + -0.523694f, 0.471533f, 0.523694f, -0.578938f, 0.574162f, 0.578938f, 0.500000f, 0.875000f, + -0.421875f, 0.450000f, 0.623438f, -0.502589f, 0.430918f, 0.749476f, 0.375000f, 1.000000f, + -0.647191f, 0.499219f, 0.275363f, 0.000000f, 1.000000f, 0.000000f, 0.750000f, 0.500000f, + -0.514473f, 0.486914f, 0.514473f, -0.487196f, 0.724762f, 0.487196f, 0.500000f, 0.750000f, + -0.668452f, 0.486914f, 0.284409f, -0.637875f, 0.722825f, 0.265781f, 0.750000f, 0.750000f, + -0.724609f, 0.486914f, -0.000000f, -0.690476f, 0.723356f, 0.000000f, 1.000000f, 0.750000f, + -0.691875f, 0.450000f, 0.294375f, -0.833647f, 0.429394f, 0.347353f, 0.750000f, 1.000000f, + -0.583174f, 0.499219f, 0.394629f, 0.000000f, 1.000000f, 0.000000f, 0.625000f, 0.500000f, + -0.505667f, 0.496143f, 0.505667f, -0.327637f, 0.886176f, 0.327636f, 0.500000f, 0.625000f, + -0.592022f, 0.496143f, 0.400616f, -0.385231f, 0.885924f, 0.258332f, 0.625000f, 0.625000f, + -0.657011f, 0.496143f, 0.279541f, -0.428239f, 0.885874f, 0.178433f, 0.750000f, 0.625000f, + -0.602332f, 0.486914f, 0.407593f, -0.572644f, 0.724305f, 0.384008f, 0.625000f, 0.750000f, + -0.687531f, 0.499219f, 0.142943f, 0.000000f, 1.000000f, 0.000000f, 0.875000f, 0.500000f, + -0.657011f, 0.496143f, 0.279541f, -0.428239f, 0.885874f, 0.178433f, 0.750000f, 0.625000f, + -0.697963f, 0.496143f, 0.145112f, -0.455839f, 0.885381f, 0.091168f, 0.875000f, 0.625000f, + -0.712207f, 0.496143f, -0.000000f, -0.464835f, 0.885397f, 0.000000f, 1.000000f, 0.625000f, + -0.710117f, 0.486914f, 0.147639f, -0.677099f, 0.723325f, 0.135420f, 0.875000f, 0.750000f, + -0.602332f, 0.486914f, 0.407593f, -0.572643f, 0.724305f, 0.384008f, 0.625000f, 0.750000f, + -0.523694f, 0.471533f, 0.523694f, -0.578938f, 0.574162f, 0.578938f, 0.500000f, 0.875000f, + -0.613128f, 0.471533f, 0.414899f, -0.680299f, 0.573650f, 0.456201f, 0.625000f, 0.875000f, + -0.680434f, 0.471533f, 0.289507f, -0.756158f, 0.573550f, 0.315065f, 0.750000f, 0.875000f, + -0.623438f, 0.450000f, 0.421875f, -0.749482f, 0.430901f, 0.502594f, 0.625000f, 1.000000f, + -0.710117f, 0.486914f, 0.147639f, -0.677099f, 0.723325f, 0.135420f, 0.875000f, 0.750000f, + -0.680434f, 0.471533f, 0.289507f, -0.756157f, 0.573550f, 0.315066f, 0.750000f, 0.875000f, + -0.722846f, 0.471533f, 0.150286f, -0.803945f, 0.572555f, 0.160789f, 0.875000f, 0.875000f, + -0.737598f, 0.471533f, -0.000000f, -0.819842f, 0.572589f, 0.000000f, 1.000000f, 0.875000f, + -0.735000f, 0.450000f, 0.152812f, -0.885342f, 0.429904f, 0.177068f, 0.875000f, 1.000000f, + -0.700000f, 0.450000f, -0.000000f, 0.902860f, -0.429934f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.450000f, -0.700000f, 0.000000f, -0.429934f, 0.902860f, 1.000000f, 0.000000f, + -0.750000f, 0.450000f, -0.000000f, -0.902860f, 0.429934f, 0.000000f, 0.000000f, 1.000000f, + 0.000000f, 0.450000f, -0.750000f, 0.000000f, 0.429934f, -0.902860f, 1.000000f, 1.000000f, + -0.497000f, 0.450000f, -0.497000f, 0.639602f, -0.426402f, 0.639602f, 0.500000f, 0.000000f, + -0.701563f, 0.499219f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.500000f, + -0.498109f, 0.499219f, -0.498109f, 0.000000f, 1.000000f, 0.000000f, 0.500000f, 0.500000f, + 0.000000f, 0.499219f, -0.701563f, -0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.500000f, + -0.532500f, 0.450000f, -0.532500f, -0.639602f, 0.426402f, -0.639602f, 0.500000f, 1.000000f, + -0.645750f, 0.450000f, -0.274750f, 0.833528f, -0.429664f, 0.347303f, 0.250000f, 0.000000f, + -0.690234f, 0.486914f, -0.000000f, 0.995495f, 0.094810f, 0.000000f, 0.000000f, 0.250000f, + -0.636741f, 0.486914f, -0.270917f, 0.918925f, 0.094737f, 0.382885f, 0.250000f, 0.250000f, + -0.490066f, 0.486914f, -0.490066f, 0.703896f, 0.095194f, 0.703896f, 0.500000f, 0.250000f, + -0.647191f, 0.499219f, -0.275363f, 0.000000f, 1.000000f, 0.000000f, 0.250000f, 0.500000f, + -0.686000f, 0.450000f, -0.142625f, 0.885319f, -0.429953f, 0.177064f, 0.125000f, 0.000000f, + -0.691895f, 0.471533f, -0.000000f, 0.969231f, -0.246154f, 0.000000f, 0.000000f, 0.125000f, + -0.678057f, 0.471533f, -0.140974f, 0.950406f, -0.246166f, 0.190081f, 0.125000f, 0.125000f, + -0.638273f, 0.471533f, -0.271569f, 0.894539f, -0.246731f, 0.372725f, 0.250000f, 0.125000f, + -0.676430f, 0.486914f, -0.140635f, 0.976163f, 0.094813f, 0.195233f, 0.125000f, 0.250000f, + -0.581875f, 0.450000f, -0.393750f, 0.749476f, -0.430917f, 0.502590f, 0.375000f, 0.000000f, + -0.638273f, 0.471533f, -0.271569f, 0.894539f, -0.246731f, 0.372725f, 0.250000f, 0.125000f, + -0.575137f, 0.471533f, -0.389191f, 0.804852f, -0.246803f, 0.539724f, 0.375000f, 0.125000f, + -0.491245f, 0.471533f, -0.491245f, 0.685179f, -0.247099f, 0.685180f, 0.500000f, 0.125000f, + -0.573757f, 0.486914f, -0.388257f, 0.826782f, 0.095071f, 0.554430f, 0.375000f, 0.250000f, + -0.676430f, 0.486914f, -0.140635f, 0.976163f, 0.094813f, 0.195233f, 0.125000f, 0.250000f, + -0.693848f, 0.496143f, -0.000000f, 0.724137f, 0.689656f, 0.000000f, 0.000000f, 0.375000f, + -0.679971f, 0.496143f, -0.141371f, 0.710057f, 0.689675f, 0.142011f, 0.125000f, 0.375000f, + -0.640074f, 0.496143f, -0.272335f, 0.667641f, 0.690558f, 0.278184f, 0.250000f, 0.375000f, + -0.687531f, 0.499219f, -0.142943f, 0.000000f, 1.000000f, 0.000000f, 0.125000f, 0.500000f, + -0.573757f, 0.486914f, -0.388257f, 0.826782f, 0.095071f, 0.554430f, 0.375000f, 0.250000f, + -0.640074f, 0.496143f, -0.272335f, 0.667641f, 0.690558f, 0.278184f, 0.250000f, 0.375000f, + -0.576761f, 0.496143f, -0.390289f, 0.600626f, 0.690668f, 0.402773f, 0.375000f, 0.375000f, + -0.492632f, 0.496143f, -0.492632f, 0.511047f, 0.691132f, 0.511046f, 0.500000f, 0.375000f, + -0.583174f, 0.499219f, -0.394629f, 0.000000f, 1.000000f, 0.000000f, 0.375000f, 0.500000f, + -0.274750f, 0.450000f, -0.645750f, 0.347353f, -0.429394f, 0.833647f, 0.750000f, 0.000000f, + -0.490066f, 0.486914f, -0.490066f, 0.703896f, 0.095194f, 0.703896f, 0.500000f, 0.250000f, + -0.270917f, 0.486914f, -0.636741f, 0.382888f, 0.094664f, 0.918932f, 0.750000f, 0.250000f, + 0.000000f, 0.486914f, -0.690234f, -0.000000f, 0.094810f, 0.995495f, 1.000000f, 0.250000f, + -0.275363f, 0.499219f, -0.647191f, 0.000000f, 1.000000f, 0.000000f, 0.750000f, 0.500000f, + -0.393750f, 0.450000f, -0.581875f, 0.502594f, -0.430900f, 0.749483f, 0.625000f, 0.000000f, + -0.491245f, 0.471533f, -0.491245f, 0.685180f, -0.247099f, 0.685179f, 0.500000f, 0.125000f, + -0.389191f, 0.471533f, -0.575137f, 0.539726f, -0.246792f, 0.804854f, 0.625000f, 0.125000f, + -0.271569f, 0.471533f, -0.638273f, 0.372725f, -0.246731f, 0.894539f, 0.750000f, 0.125000f, + -0.388257f, 0.486914f, -0.573757f, 0.554431f, 0.095066f, 0.826782f, 0.625000f, 0.250000f, + -0.142625f, 0.450000f, -0.686000f, 0.177068f, -0.429904f, 0.885342f, 0.875000f, 0.000000f, + -0.271569f, 0.471533f, -0.638273f, 0.372725f, -0.246731f, 0.894539f, 0.750000f, 0.125000f, + -0.140974f, 0.471533f, -0.678057f, 0.190083f, -0.246134f, 0.950414f, 0.875000f, 0.125000f, + 0.000000f, 0.471533f, -0.691895f, 0.000000f, -0.246154f, 0.969231f, 1.000000f, 0.125000f, + -0.140635f, 0.486914f, -0.676430f, 0.195233f, 0.094801f, 0.976164f, 0.875000f, 0.250000f, + -0.388257f, 0.486914f, -0.573757f, 0.554431f, 0.095066f, 0.826782f, 0.625000f, 0.250000f, + -0.492632f, 0.496143f, -0.492632f, 0.511046f, 0.691132f, 0.511047f, 0.500000f, 0.375000f, + -0.390289f, 0.496143f, -0.576761f, 0.402782f, 0.690651f, 0.600640f, 0.625000f, 0.375000f, + -0.272335f, 0.496143f, -0.640074f, 0.278184f, 0.690558f, 0.667641f, 0.750000f, 0.375000f, + -0.394629f, 0.499219f, -0.583174f, 0.000000f, 1.000000f, 0.000000f, 0.625000f, 0.500000f, + -0.140635f, 0.486914f, -0.676430f, 0.195233f, 0.094801f, 0.976164f, 0.875000f, 0.250000f, + -0.272335f, 0.496143f, -0.640074f, 0.278184f, 0.690558f, 0.667641f, 0.750000f, 0.375000f, + -0.141371f, 0.496143f, -0.679971f, 0.142021f, 0.689625f, 0.710104f, 0.875000f, 0.375000f, + 0.000000f, 0.496143f, -0.693848f, -0.000000f, 0.689656f, 0.724137f, 1.000000f, 0.375000f, + -0.142943f, 0.499219f, -0.687531f, 0.000000f, 1.000000f, 0.000000f, 0.875000f, 0.500000f, + -0.647191f, 0.499219f, -0.275363f, 0.000000f, 1.000000f, 0.000000f, 0.250000f, 0.500000f, + -0.724609f, 0.486914f, -0.000000f, -0.690476f, 0.723356f, 0.000000f, 0.000000f, 0.750000f, + -0.668452f, 0.486914f, -0.284409f, -0.637619f, 0.723090f, -0.265674f, 0.250000f, 0.750000f, + -0.514473f, 0.486914f, -0.514473f, -0.487196f, 0.724762f, -0.487196f, 0.500000f, 0.750000f, + -0.691875f, 0.450000f, -0.294375f, -0.833528f, 0.429664f, -0.347303f, 0.250000f, 1.000000f, + -0.687531f, 0.499219f, -0.142943f, 0.000000f, 1.000000f, 0.000000f, 0.125000f, 0.500000f, + -0.712207f, 0.496143f, -0.000000f, -0.464835f, 0.885397f, 0.000000f, 0.000000f, 0.625000f, + -0.697963f, 0.496143f, -0.145112f, -0.455789f, 0.885407f, -0.091158f, 0.125000f, 0.625000f, + -0.657011f, 0.496143f, -0.279541f, -0.428239f, 0.885874f, -0.178433f, 0.250000f, 0.625000f, + -0.710117f, 0.486914f, -0.147639f, -0.677049f, 0.723373f, -0.135410f, 0.125000f, 0.750000f, + -0.583174f, 0.499219f, -0.394629f, 0.000000f, 1.000000f, 0.000000f, 0.375000f, 0.500000f, + -0.657011f, 0.496143f, -0.279541f, -0.428239f, 0.885874f, -0.178433f, 0.250000f, 0.625000f, + -0.592022f, 0.496143f, -0.400616f, -0.385216f, 0.885934f, -0.258322f, 0.375000f, 0.625000f, + -0.505667f, 0.496143f, -0.505667f, -0.327637f, 0.886176f, -0.327636f, 0.500000f, 0.625000f, + -0.602332f, 0.486914f, -0.407593f, -0.572629f, 0.724322f, -0.383998f, 0.375000f, 0.750000f, + -0.710117f, 0.486914f, -0.147639f, -0.677049f, 0.723373f, -0.135410f, 0.125000f, 0.750000f, + -0.737598f, 0.471533f, -0.000000f, -0.819842f, 0.572589f, 0.000000f, 0.000000f, 0.875000f, + -0.722846f, 0.471533f, -0.150286f, -0.803908f, 0.572609f, -0.160782f, 0.125000f, 0.875000f, + -0.680434f, 0.471533f, -0.289507f, -0.756157f, 0.573550f, -0.315066f, 0.250000f, 0.875000f, + -0.735000f, 0.450000f, -0.152812f, -0.885319f, 0.429952f, -0.177064f, 0.125000f, 1.000000f, + -0.602332f, 0.486914f, -0.407593f, -0.572628f, 0.724322f, -0.383998f, 0.375000f, 0.750000f, + -0.680434f, 0.471533f, -0.289507f, -0.756158f, 0.573550f, -0.315065f, 0.250000f, 0.875000f, + -0.613128f, 0.471533f, -0.414899f, -0.680288f, 0.573668f, -0.456193f, 0.375000f, 0.875000f, + -0.523694f, 0.471533f, -0.523694f, -0.578938f, 0.574162f, -0.578938f, 0.500000f, 0.875000f, + -0.623438f, 0.450000f, -0.421875f, -0.749476f, 0.430918f, -0.502589f, 0.375000f, 1.000000f, + -0.275363f, 0.499219f, -0.647191f, 0.000000f, 1.000000f, 0.000000f, 0.750000f, 0.500000f, + -0.514473f, 0.486914f, -0.514473f, -0.487196f, 0.724762f, -0.487196f, 0.500000f, 0.750000f, + -0.284409f, 0.486914f, -0.668452f, -0.265781f, 0.722825f, -0.637875f, 0.750000f, 0.750000f, + 0.000000f, 0.486914f, -0.724609f, 0.000000f, 0.723356f, -0.690476f, 1.000000f, 0.750000f, + -0.294375f, 0.450000f, -0.691875f, -0.347353f, 0.429394f, -0.833647f, 0.750000f, 1.000000f, + -0.394629f, 0.499219f, -0.583174f, 0.000000f, 1.000000f, 0.000000f, 0.625000f, 0.500000f, + -0.505667f, 0.496143f, -0.505667f, -0.327636f, 0.886176f, -0.327637f, 0.500000f, 0.625000f, + -0.400616f, 0.496143f, -0.592022f, -0.258332f, 0.885924f, -0.385231f, 0.625000f, 0.625000f, + -0.279541f, 0.496143f, -0.657011f, -0.178433f, 0.885874f, -0.428239f, 0.750000f, 0.625000f, + -0.407593f, 0.486914f, -0.602332f, -0.384008f, 0.724305f, -0.572644f, 0.625000f, 0.750000f, + -0.142943f, 0.499219f, -0.687531f, 0.000000f, 1.000000f, 0.000000f, 0.875000f, 0.500000f, + -0.279541f, 0.496143f, -0.657011f, -0.178433f, 0.885874f, -0.428239f, 0.750000f, 0.625000f, + -0.145112f, 0.496143f, -0.697963f, -0.091168f, 0.885381f, -0.455839f, 0.875000f, 0.625000f, + 0.000000f, 0.496143f, -0.712207f, 0.000000f, 0.885397f, -0.464835f, 1.000000f, 0.625000f, + -0.147639f, 0.486914f, -0.710117f, -0.135420f, 0.723325f, -0.677099f, 0.875000f, 0.750000f, + -0.407593f, 0.486914f, -0.602332f, -0.384008f, 0.724305f, -0.572643f, 0.625000f, 0.750000f, + -0.523694f, 0.471533f, -0.523694f, -0.578938f, 0.574162f, -0.578938f, 0.500000f, 0.875000f, + -0.414899f, 0.471533f, -0.613128f, -0.456201f, 0.573650f, -0.680299f, 0.625000f, 0.875000f, + -0.289507f, 0.471533f, -0.680434f, -0.315065f, 0.573550f, -0.756158f, 0.750000f, 0.875000f, + -0.421875f, 0.450000f, -0.623438f, -0.502594f, 0.430901f, -0.749482f, 0.625000f, 1.000000f, + -0.147639f, 0.486914f, -0.710117f, -0.135420f, 0.723325f, -0.677099f, 0.875000f, 0.750000f, + -0.289507f, 0.471533f, -0.680434f, -0.315066f, 0.573550f, -0.756157f, 0.750000f, 0.875000f, + -0.150286f, 0.471533f, -0.722846f, -0.160789f, 0.572555f, -0.803945f, 0.875000f, 0.875000f, + 0.000000f, 0.471533f, -0.737598f, 0.000000f, 0.572589f, -0.819842f, 1.000000f, 0.875000f, + -0.152812f, 0.450000f, -0.735000f, -0.177068f, 0.429904f, -0.885342f, 0.875000f, 1.000000f, + 0.000000f, 0.450000f, -0.700000f, 0.000000f, -0.429934f, 0.902860f, 0.000000f, 0.000000f, + 0.700000f, 0.450000f, -0.000000f, -0.902860f, -0.429934f, 0.000000f, 1.000000f, 0.000000f, + 0.000000f, 0.450000f, -0.750000f, 0.000000f, 0.429934f, -0.902860f, 0.000000f, 1.000000f, + 0.750000f, 0.450000f, -0.000000f, 0.902860f, 0.429934f, -0.000000f, 1.000000f, 1.000000f, + 0.497000f, 0.450000f, -0.497000f, -0.639602f, -0.426402f, 0.639602f, 0.500000f, 0.000000f, + 0.000000f, 0.499219f, -0.701563f, -0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.500000f, + 0.498109f, 0.499219f, -0.498109f, -0.000000f, 1.000000f, 0.000000f, 0.500000f, 0.500000f, + 0.701563f, 0.499219f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.500000f, + 0.532500f, 0.450000f, -0.532500f, 0.639602f, 0.426402f, -0.639602f, 0.500000f, 1.000000f, + 0.274750f, 0.450000f, -0.645750f, -0.347303f, -0.429664f, 0.833528f, 0.250000f, 0.000000f, + 0.000000f, 0.486914f, -0.690234f, -0.000000f, 0.094810f, 0.995495f, 0.000000f, 0.250000f, + 0.270917f, 0.486914f, -0.636741f, -0.382885f, 0.094737f, 0.918925f, 0.250000f, 0.250000f, + 0.490066f, 0.486914f, -0.490066f, -0.703896f, 0.095194f, 0.703896f, 0.500000f, 0.250000f, + 0.275363f, 0.499219f, -0.647191f, -0.000000f, 1.000000f, 0.000000f, 0.250000f, 0.500000f, + 0.142625f, 0.450000f, -0.686000f, -0.177064f, -0.429953f, 0.885319f, 0.125000f, 0.000000f, + 0.000000f, 0.471533f, -0.691895f, 0.000000f, -0.246154f, 0.969231f, 0.000000f, 0.125000f, + 0.140974f, 0.471533f, -0.678057f, -0.190081f, -0.246166f, 0.950406f, 0.125000f, 0.125000f, + 0.271569f, 0.471533f, -0.638273f, -0.372725f, -0.246731f, 0.894539f, 0.250000f, 0.125000f, + 0.140635f, 0.486914f, -0.676430f, -0.195233f, 0.094813f, 0.976163f, 0.125000f, 0.250000f, + 0.393750f, 0.450000f, -0.581875f, -0.502590f, -0.430917f, 0.749476f, 0.375000f, 0.000000f, + 0.271569f, 0.471533f, -0.638273f, -0.372725f, -0.246731f, 0.894539f, 0.250000f, 0.125000f, + 0.389191f, 0.471533f, -0.575137f, -0.539724f, -0.246803f, 0.804852f, 0.375000f, 0.125000f, + 0.491245f, 0.471533f, -0.491245f, -0.685180f, -0.247099f, 0.685179f, 0.500000f, 0.125000f, + 0.388257f, 0.486914f, -0.573757f, -0.554430f, 0.095071f, 0.826782f, 0.375000f, 0.250000f, + 0.140635f, 0.486914f, -0.676430f, -0.195233f, 0.094813f, 0.976163f, 0.125000f, 0.250000f, + 0.000000f, 0.496143f, -0.693848f, -0.000000f, 0.689656f, 0.724137f, 0.000000f, 0.375000f, + 0.141371f, 0.496143f, -0.679971f, -0.142011f, 0.689675f, 0.710057f, 0.125000f, 0.375000f, + 0.272335f, 0.496143f, -0.640074f, -0.278184f, 0.690558f, 0.667641f, 0.250000f, 0.375000f, + 0.142943f, 0.499219f, -0.687531f, -0.000000f, 1.000000f, 0.000000f, 0.125000f, 0.500000f, + 0.388257f, 0.486914f, -0.573757f, -0.554430f, 0.095071f, 0.826782f, 0.375000f, 0.250000f, + 0.272335f, 0.496143f, -0.640074f, -0.278184f, 0.690558f, 0.667641f, 0.250000f, 0.375000f, + 0.390289f, 0.496143f, -0.576761f, -0.402773f, 0.690668f, 0.600626f, 0.375000f, 0.375000f, + 0.492632f, 0.496143f, -0.492632f, -0.511046f, 0.691132f, 0.511047f, 0.500000f, 0.375000f, + 0.394629f, 0.499219f, -0.583174f, -0.000000f, 1.000000f, 0.000000f, 0.375000f, 0.500000f, + 0.645750f, 0.450000f, -0.274750f, -0.833647f, -0.429394f, 0.347353f, 0.750000f, 0.000000f, + 0.490066f, 0.486914f, -0.490066f, -0.703896f, 0.095194f, 0.703896f, 0.500000f, 0.250000f, + 0.636741f, 0.486914f, -0.270917f, -0.918932f, 0.094664f, 0.382888f, 0.750000f, 0.250000f, + 0.690234f, 0.486914f, -0.000000f, -0.995495f, 0.094810f, 0.000000f, 1.000000f, 0.250000f, + 0.647191f, 0.499219f, -0.275363f, -0.000000f, 1.000000f, 0.000000f, 0.750000f, 0.500000f, + 0.581875f, 0.450000f, -0.393750f, -0.749483f, -0.430900f, 0.502594f, 0.625000f, 0.000000f, + 0.491245f, 0.471533f, -0.491245f, -0.685179f, -0.247099f, 0.685180f, 0.500000f, 0.125000f, + 0.575137f, 0.471533f, -0.389191f, -0.804854f, -0.246792f, 0.539726f, 0.625000f, 0.125000f, + 0.638273f, 0.471533f, -0.271569f, -0.894539f, -0.246731f, 0.372725f, 0.750000f, 0.125000f, + 0.573757f, 0.486914f, -0.388257f, -0.826782f, 0.095066f, 0.554431f, 0.625000f, 0.250000f, + 0.686000f, 0.450000f, -0.142625f, -0.885342f, -0.429904f, 0.177068f, 0.875000f, 0.000000f, + 0.638273f, 0.471533f, -0.271569f, -0.894539f, -0.246731f, 0.372725f, 0.750000f, 0.125000f, + 0.678057f, 0.471533f, -0.140974f, -0.950414f, -0.246134f, 0.190083f, 0.875000f, 0.125000f, + 0.691895f, 0.471533f, -0.000000f, -0.969231f, -0.246154f, 0.000000f, 1.000000f, 0.125000f, + 0.676430f, 0.486914f, -0.140635f, -0.976164f, 0.094801f, 0.195233f, 0.875000f, 0.250000f, + 0.573757f, 0.486914f, -0.388257f, -0.826782f, 0.095066f, 0.554431f, 0.625000f, 0.250000f, + 0.492632f, 0.496143f, -0.492632f, -0.511047f, 0.691132f, 0.511046f, 0.500000f, 0.375000f, + 0.576761f, 0.496143f, -0.390289f, -0.600640f, 0.690651f, 0.402782f, 0.625000f, 0.375000f, + 0.640074f, 0.496143f, -0.272335f, -0.667641f, 0.690558f, 0.278184f, 0.750000f, 0.375000f, + 0.583174f, 0.499219f, -0.394629f, -0.000000f, 1.000000f, 0.000000f, 0.625000f, 0.500000f, + 0.676430f, 0.486914f, -0.140635f, -0.976164f, 0.094801f, 0.195233f, 0.875000f, 0.250000f, + 0.640074f, 0.496143f, -0.272335f, -0.667641f, 0.690558f, 0.278184f, 0.750000f, 0.375000f, + 0.679971f, 0.496143f, -0.141371f, -0.710104f, 0.689625f, 0.142021f, 0.875000f, 0.375000f, + 0.693848f, 0.496143f, -0.000000f, -0.724137f, 0.689656f, 0.000000f, 1.000000f, 0.375000f, + 0.687531f, 0.499219f, -0.142943f, -0.000000f, 1.000000f, 0.000000f, 0.875000f, 0.500000f, + 0.275363f, 0.499219f, -0.647191f, -0.000000f, 1.000000f, 0.000000f, 0.250000f, 0.500000f, + 0.000000f, 0.486914f, -0.724609f, 0.000000f, 0.723356f, -0.690476f, 0.000000f, 0.750000f, + 0.284409f, 0.486914f, -0.668452f, 0.265674f, 0.723090f, -0.637619f, 0.250000f, 0.750000f, + 0.514473f, 0.486914f, -0.514473f, 0.487196f, 0.724762f, -0.487196f, 0.500000f, 0.750000f, + 0.294375f, 0.450000f, -0.691875f, 0.347303f, 0.429664f, -0.833528f, 0.250000f, 1.000000f, + 0.142943f, 0.499219f, -0.687531f, -0.000000f, 1.000000f, 0.000000f, 0.125000f, 0.500000f, + 0.000000f, 0.496143f, -0.712207f, 0.000000f, 0.885397f, -0.464835f, 0.000000f, 0.625000f, + 0.145112f, 0.496143f, -0.697963f, 0.091158f, 0.885407f, -0.455789f, 0.125000f, 0.625000f, + 0.279541f, 0.496143f, -0.657011f, 0.178433f, 0.885874f, -0.428239f, 0.250000f, 0.625000f, + 0.147639f, 0.486914f, -0.710117f, 0.135410f, 0.723373f, -0.677049f, 0.125000f, 0.750000f, + 0.394629f, 0.499219f, -0.583174f, -0.000000f, 1.000000f, 0.000000f, 0.375000f, 0.500000f, + 0.279541f, 0.496143f, -0.657011f, 0.178433f, 0.885874f, -0.428239f, 0.250000f, 0.625000f, + 0.400616f, 0.496143f, -0.592022f, 0.258322f, 0.885934f, -0.385216f, 0.375000f, 0.625000f, + 0.505667f, 0.496143f, -0.505667f, 0.327636f, 0.886176f, -0.327637f, 0.500000f, 0.625000f, + 0.407593f, 0.486914f, -0.602332f, 0.383998f, 0.724322f, -0.572629f, 0.375000f, 0.750000f, + 0.147639f, 0.486914f, -0.710117f, 0.135410f, 0.723373f, -0.677049f, 0.125000f, 0.750000f, + 0.000000f, 0.471533f, -0.737598f, 0.000000f, 0.572589f, -0.819842f, 0.000000f, 0.875000f, + 0.150286f, 0.471533f, -0.722846f, 0.160782f, 0.572609f, -0.803908f, 0.125000f, 0.875000f, + 0.289507f, 0.471533f, -0.680434f, 0.315066f, 0.573550f, -0.756157f, 0.250000f, 0.875000f, + 0.152812f, 0.450000f, -0.735000f, 0.177064f, 0.429952f, -0.885319f, 0.125000f, 1.000000f, + 0.407593f, 0.486914f, -0.602332f, 0.383998f, 0.724322f, -0.572628f, 0.375000f, 0.750000f, + 0.289507f, 0.471533f, -0.680434f, 0.315065f, 0.573550f, -0.756158f, 0.250000f, 0.875000f, + 0.414899f, 0.471533f, -0.613128f, 0.456193f, 0.573668f, -0.680288f, 0.375000f, 0.875000f, + 0.523694f, 0.471533f, -0.523694f, 0.578938f, 0.574162f, -0.578938f, 0.500000f, 0.875000f, + 0.421875f, 0.450000f, -0.623438f, 0.502589f, 0.430918f, -0.749476f, 0.375000f, 1.000000f, + 0.647191f, 0.499219f, -0.275363f, -0.000000f, 1.000000f, 0.000000f, 0.750000f, 0.500000f, + 0.514473f, 0.486914f, -0.514473f, 0.487196f, 0.724762f, -0.487196f, 0.500000f, 0.750000f, + 0.668452f, 0.486914f, -0.284409f, 0.637875f, 0.722825f, -0.265781f, 0.750000f, 0.750000f, + 0.724609f, 0.486914f, -0.000000f, 0.690476f, 0.723356f, -0.000000f, 1.000000f, 0.750000f, + 0.691875f, 0.450000f, -0.294375f, 0.833647f, 0.429394f, -0.347353f, 0.750000f, 1.000000f, + 0.583174f, 0.499219f, -0.394629f, -0.000000f, 1.000000f, 0.000000f, 0.625000f, 0.500000f, + 0.505667f, 0.496143f, -0.505667f, 0.327637f, 0.886176f, -0.327636f, 0.500000f, 0.625000f, + 0.592022f, 0.496143f, -0.400616f, 0.385231f, 0.885924f, -0.258332f, 0.625000f, 0.625000f, + 0.657011f, 0.496143f, -0.279541f, 0.428239f, 0.885874f, -0.178433f, 0.750000f, 0.625000f, + 0.602332f, 0.486914f, -0.407593f, 0.572644f, 0.724305f, -0.384008f, 0.625000f, 0.750000f, + 0.687531f, 0.499219f, -0.142943f, -0.000000f, 1.000000f, 0.000000f, 0.875000f, 0.500000f, + 0.657011f, 0.496143f, -0.279541f, 0.428239f, 0.885874f, -0.178433f, 0.750000f, 0.625000f, + 0.697963f, 0.496143f, -0.145112f, 0.455839f, 0.885381f, -0.091168f, 0.875000f, 0.625000f, + 0.712207f, 0.496143f, -0.000000f, 0.464835f, 0.885397f, -0.000000f, 1.000000f, 0.625000f, + 0.710117f, 0.486914f, -0.147639f, 0.677099f, 0.723325f, -0.135420f, 0.875000f, 0.750000f, + 0.602332f, 0.486914f, -0.407593f, 0.572643f, 0.724305f, -0.384008f, 0.625000f, 0.750000f, + 0.523694f, 0.471533f, -0.523694f, 0.578938f, 0.574162f, -0.578938f, 0.500000f, 0.875000f, + 0.613128f, 0.471533f, -0.414899f, 0.680299f, 0.573650f, -0.456201f, 0.625000f, 0.875000f, + 0.680434f, 0.471533f, -0.289507f, 0.756158f, 0.573550f, -0.315065f, 0.750000f, 0.875000f, + 0.623438f, 0.450000f, -0.421875f, 0.749482f, 0.430901f, -0.502594f, 0.625000f, 1.000000f, + 0.710117f, 0.486914f, -0.147639f, 0.677099f, 0.723325f, -0.135420f, 0.875000f, 0.750000f, + 0.680434f, 0.471533f, -0.289507f, 0.756157f, 0.573550f, -0.315066f, 0.750000f, 0.875000f, + 0.722846f, 0.471533f, -0.150286f, 0.803945f, 0.572555f, -0.160789f, 0.875000f, 0.875000f, + 0.737598f, 0.471533f, -0.000000f, 0.819842f, 0.572589f, -0.000000f, 1.000000f, 0.875000f, + 0.735000f, 0.450000f, -0.152812f, 0.885342f, 0.429904f, -0.177068f, 0.875000f, 1.000000f, + 0.750000f, 0.450000f, -0.000000f, 0.902861f, 0.429934f, -0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.450000f, 0.750000f, 0.000000f, 0.429934f, 0.902861f, 1.000000f, 0.000000f, + 1.000000f, -0.300000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, -0.300000f, 1.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, + 0.532500f, 0.450000f, 0.532500f, 0.639602f, 0.426401f, 0.639602f, 0.500000f, 0.000000f, + 0.921875f, 0.060938f, -0.000000f, 0.937749f, 0.347314f, -0.000000f, 0.000000f, 0.500000f, + 0.654531f, 0.060938f, 0.654531f, 0.663890f, 0.344239f, 0.663890f, 0.500000f, 0.500000f, + 0.000000f, 0.060938f, 0.921875f, 0.000000f, 0.347314f, 0.937749f, 1.000000f, 0.500000f, + 0.710000f, -0.300000f, 0.710000f, 0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + 0.691875f, 0.450000f, 0.294375f, 0.833528f, 0.429664f, 0.347303f, 0.250000f, 0.000000f, + 0.841797f, 0.253711f, -0.000000f, 0.911768f, 0.410706f, -0.000000f, 0.000000f, 0.250000f, + 0.776558f, 0.253711f, 0.330405f, 0.841741f, 0.410444f, 0.350725f, 0.250000f, 0.250000f, + 0.597676f, 0.253711f, 0.597676f, 0.644272f, 0.412102f, 0.644272f, 0.500000f, 0.250000f, + 0.850430f, 0.060938f, 0.361836f, 0.865695f, 0.347079f, 0.360706f, 0.250000f, 0.500000f, + 0.735000f, 0.450000f, 0.152812f, 0.885319f, 0.429952f, 0.177064f, 0.125000f, 0.000000f, + 0.796631f, 0.351636f, -0.000000f, 0.905094f, 0.425212f, -0.000000f, 0.000000f, 0.125000f, + 0.780698f, 0.351636f, 0.162314f, 0.887509f, 0.425230f, 0.177502f, 0.125000f, 0.125000f, + 0.734892f, 0.351636f, 0.312678f, 0.835093f, 0.426082f, 0.347956f, 0.250000f, 0.125000f, + 0.824961f, 0.253711f, 0.171516f, 0.894054f, 0.410724f, 0.178811f, 0.125000f, 0.250000f, + 0.623438f, 0.450000f, 0.421875f, 0.749476f, 0.430917f, 0.502590f, 0.375000f, 0.000000f, + 0.734892f, 0.351636f, 0.312678f, 0.835093f, 0.426082f, 0.347956f, 0.250000f, 0.125000f, + 0.662199f, 0.351636f, 0.448105f, 0.751338f, 0.426189f, 0.503839f, 0.375000f, 0.125000f, + 0.565608f, 0.351636f, 0.565608f, 0.639524f, 0.426636f, 0.639524f, 0.500000f, 0.125000f, + 0.699744f, 0.253711f, 0.473511f, 0.756904f, 0.411664f, 0.507571f, 0.375000f, 0.250000f, + 0.824961f, 0.253711f, 0.171516f, 0.894054f, 0.410724f, 0.178811f, 0.125000f, 0.250000f, + 0.884033f, 0.156665f, -0.000000f, 0.922766f, 0.385361f, -0.000000f, 0.000000f, 0.375000f, + 0.866353f, 0.156665f, 0.180122f, 0.904839f, 0.385379f, 0.180968f, 0.125000f, 0.375000f, + 0.815521f, 0.156665f, 0.346983f, 0.851467f, 0.386182f, 0.354778f, 0.250000f, 0.375000f, + 0.903437f, 0.060938f, 0.187832f, 0.919533f, 0.347330f, 0.183906f, 0.125000f, 0.500000f, + 0.699744f, 0.253711f, 0.473511f, 0.756904f, 0.411665f, 0.507571f, 0.375000f, 0.250000f, + 0.815521f, 0.156665f, 0.346983f, 0.851467f, 0.386182f, 0.354778f, 0.250000f, 0.375000f, + 0.734853f, 0.156665f, 0.497269f, 0.766078f, 0.386283f, 0.513723f, 0.375000f, 0.375000f, + 0.627664f, 0.156665f, 0.627664f, 0.652097f, 0.386703f, 0.652097f, 0.500000f, 0.375000f, + 0.766309f, 0.060938f, 0.518555f, 0.778577f, 0.348172f, 0.522105f, 0.375000f, 0.500000f, + 0.294375f, 0.450000f, 0.691875f, 0.347353f, 0.429394f, 0.833647f, 0.750000f, 0.000000f, + 0.597676f, 0.253711f, 0.597676f, 0.644272f, 0.412102f, 0.644272f, 0.500000f, 0.250000f, + 0.330405f, 0.253711f, 0.776558f, 0.350771f, 0.410181f, 0.841850f, 0.750000f, 0.250000f, + 0.000000f, 0.253711f, 0.841797f, 0.000000f, 0.410706f, 0.911768f, 1.000000f, 0.250000f, + 0.361836f, 0.060938f, 0.850430f, 0.360739f, 0.346844f, 0.865775f, 0.750000f, 0.500000f, + 0.421875f, 0.450000f, 0.623438f, 0.502594f, 0.430900f, 0.749483f, 0.625000f, 0.000000f, + 0.565608f, 0.351636f, 0.565608f, 0.639524f, 0.426636f, 0.639524f, 0.500000f, 0.125000f, + 0.448105f, 0.351636f, 0.662199f, 0.503843f, 0.426172f, 0.751345f, 0.625000f, 0.125000f, + 0.312678f, 0.351636f, 0.734892f, 0.347956f, 0.426082f, 0.835093f, 0.750000f, 0.125000f, + 0.473511f, 0.253711f, 0.699744f, 0.507575f, 0.411648f, 0.756911f, 0.625000f, 0.250000f, + 0.152812f, 0.450000f, 0.735000f, 0.177068f, 0.429903f, 0.885342f, 0.875000f, 0.000000f, + 0.312678f, 0.351636f, 0.734892f, 0.347956f, 0.426082f, 0.835093f, 0.750000f, 0.125000f, + 0.162314f, 0.351636f, 0.780698f, 0.177506f, 0.425181f, 0.887532f, 0.875000f, 0.125000f, + 0.000000f, 0.351636f, 0.796631f, 0.000000f, 0.425212f, 0.905094f, 1.000000f, 0.125000f, + 0.171516f, 0.253711f, 0.824961f, 0.178815f, 0.410676f, 0.894075f, 0.875000f, 0.250000f, + 0.473511f, 0.253711f, 0.699744f, 0.507575f, 0.411648f, 0.756910f, 0.625000f, 0.250000f, + 0.627664f, 0.156665f, 0.627664f, 0.652097f, 0.386703f, 0.652097f, 0.500000f, 0.375000f, + 0.497269f, 0.156665f, 0.734853f, 0.513726f, 0.386267f, 0.766083f, 0.625000f, 0.375000f, + 0.346983f, 0.156665f, 0.815521f, 0.354778f, 0.386182f, 0.851467f, 0.750000f, 0.375000f, + 0.518555f, 0.060938f, 0.766309f, 0.522108f, 0.348157f, 0.778582f, 0.625000f, 0.500000f, + 0.171516f, 0.253711f, 0.824961f, 0.178815f, 0.410676f, 0.894075f, 0.875000f, 0.250000f, + 0.346983f, 0.156665f, 0.815521f, 0.354778f, 0.386182f, 0.851467f, 0.750000f, 0.375000f, + 0.180122f, 0.156665f, 0.866353f, 0.180972f, 0.385333f, 0.904858f, 0.875000f, 0.375000f, + 0.000000f, 0.156665f, 0.884033f, 0.000000f, 0.385361f, 0.922766f, 1.000000f, 0.375000f, + 0.187832f, 0.060938f, 0.903437f, 0.183909f, 0.347288f, 0.919548f, 0.875000f, 0.500000f, + 0.850430f, 0.060938f, 0.361836f, 0.865695f, 0.347079f, 0.360706f, 0.250000f, 0.500000f, + 0.978516f, -0.124805f, -0.000000f, 0.975288f, 0.220939f, -0.000000f, 0.000000f, 0.750000f, + 0.902681f, -0.124805f, 0.384067f, 0.900299f, 0.220777f, 0.375125f, 0.250000f, 0.750000f, + 0.694746f, -0.124805f, 0.694746f, 0.689494f, 0.221799f, 0.689495f, 0.500000f, 0.750000f, + 0.922500f, -0.300000f, 0.392500f, 0.923077f, 0.000000f, 0.384615f, 0.250000f, 1.000000f, + 0.903437f, 0.060938f, 0.187832f, 0.919533f, 0.347330f, 0.183906f, 0.125000f, 0.500000f, + 0.953857f, -0.033032f, -0.000000f, 0.955877f, 0.293768f, -0.000000f, 0.000000f, 0.625000f, + 0.934780f, -0.033032f, 0.194348f, 0.937310f, 0.293782f, 0.187462f, 0.125000f, 0.625000f, + 0.879933f, -0.033032f, 0.374389f, 0.882157f, 0.294439f, 0.367565f, 0.250000f, 0.625000f, + 0.958945f, -0.124805f, 0.199373f, 0.956346f, 0.220950f, 0.191269f, 0.125000f, 0.750000f, + 0.766309f, 0.060938f, 0.518555f, 0.778578f, 0.348172f, 0.522105f, 0.375000f, 0.500000f, + 0.879933f, -0.033032f, 0.374389f, 0.882157f, 0.294439f, 0.367565f, 0.250000f, 0.625000f, + 0.792894f, -0.033032f, 0.536545f, 0.793705f, 0.294522f, 0.532249f, 0.375000f, 0.625000f, + 0.677239f, -0.033032f, 0.677239f, 0.675668f, 0.294866f, 0.675668f, 0.500000f, 0.625000f, + 0.813391f, -0.124805f, 0.550415f, 0.809908f, 0.221529f, 0.543115f, 0.375000f, 0.750000f, + 0.958945f, -0.124805f, 0.199373f, 0.956346f, 0.220950f, 0.191269f, 0.125000f, 0.750000f, + 0.994385f, -0.213940f, -0.000000f, 0.992240f, 0.124341f, -0.000000f, 0.000000f, 0.875000f, + 0.974497f, -0.213940f, 0.202606f, 0.972970f, 0.124347f, 0.194594f, 0.125000f, 0.875000f, + 0.917320f, -0.213940f, 0.390296f, 0.915878f, 0.124647f, 0.381616f, 0.250000f, 0.875000f, + 0.980000f, -0.300000f, 0.203750f, 0.980581f, 0.000000f, 0.196116f, 0.125000f, 1.000000f, + 0.813391f, -0.124805f, 0.550415f, 0.809908f, 0.221529f, 0.543115f, 0.375000f, 0.750000f, + 0.917320f, -0.213940f, 0.390296f, 0.915878f, 0.124647f, 0.381616f, 0.250000f, 0.875000f, + 0.826582f, -0.213940f, 0.559341f, 0.824063f, 0.124685f, 0.552607f, 0.375000f, 0.875000f, + 0.706013f, -0.213940f, 0.706013f, 0.701575f, 0.124842f, 0.701575f, 0.500000f, 0.875000f, + 0.831250f, -0.300000f, 0.562500f, 0.830544f, 0.000000f, 0.556953f, 0.375000f, 1.000000f, + 0.361836f, 0.060938f, 0.850430f, 0.360740f, 0.346844f, 0.865775f, 0.750000f, 0.500000f, + 0.694746f, -0.124805f, 0.694746f, 0.689495f, 0.221799f, 0.689494f, 0.500000f, 0.750000f, + 0.384067f, -0.124805f, 0.902681f, 0.375139f, 0.220616f, 0.900333f, 0.750000f, 0.750000f, + 0.000000f, -0.124805f, 0.978516f, 0.000000f, 0.220939f, 0.975288f, 1.000000f, 0.750000f, + 0.392500f, -0.300000f, 0.922500f, 0.384615f, 0.000000f, 0.923077f, 0.750000f, 1.000000f, + 0.518555f, 0.060938f, 0.766309f, 0.522108f, 0.348157f, 0.778582f, 0.625000f, 0.500000f, + 0.677239f, -0.033032f, 0.677239f, 0.675668f, 0.294866f, 0.675668f, 0.500000f, 0.625000f, + 0.536545f, -0.033032f, 0.792894f, 0.532252f, 0.294509f, 0.793708f, 0.625000f, 0.625000f, + 0.374389f, -0.033032f, 0.879933f, 0.367565f, 0.294439f, 0.882157f, 0.750000f, 0.625000f, + 0.550415f, -0.124805f, 0.813391f, 0.543116f, 0.221518f, 0.809910f, 0.625000f, 0.750000f, + 0.187832f, 0.060938f, 0.903437f, 0.183910f, 0.347287f, 0.919548f, 0.875000f, 0.500000f, + 0.374389f, -0.033032f, 0.879933f, 0.367565f, 0.294439f, 0.882157f, 0.750000f, 0.625000f, + 0.194348f, -0.033032f, 0.934780f, 0.187464f, 0.293744f, 0.937321f, 0.875000f, 0.625000f, + 0.000000f, -0.033032f, 0.953857f, 0.000000f, 0.293768f, 0.955877f, 1.000000f, 0.625000f, + 0.199373f, -0.124805f, 0.958945f, 0.191271f, 0.220920f, 0.956352f, 0.875000f, 0.750000f, + 0.550415f, -0.124805f, 0.813391f, 0.543116f, 0.221518f, 0.809910f, 0.625000f, 0.750000f, + 0.706013f, -0.213940f, 0.706013f, 0.701575f, 0.124842f, 0.701575f, 0.500000f, 0.875000f, + 0.559341f, -0.213940f, 0.826582f, 0.552607f, 0.124679f, 0.824063f, 0.625000f, 0.875000f, + 0.390296f, -0.213940f, 0.917320f, 0.381616f, 0.124647f, 0.915878f, 0.750000f, 0.875000f, + 0.562500f, -0.300000f, 0.831250f, 0.556953f, 0.000000f, 0.830544f, 0.625000f, 1.000000f, + 0.199373f, -0.124805f, 0.958945f, 0.191271f, 0.220920f, 0.956352f, 0.875000f, 0.750000f, + 0.390296f, -0.213940f, 0.917320f, 0.381616f, 0.124647f, 0.915878f, 0.750000f, 0.875000f, + 0.202606f, -0.213940f, 0.974497f, 0.194595f, 0.124330f, 0.972972f, 0.875000f, 0.875000f, + 0.000000f, -0.213940f, 0.994385f, 0.000000f, 0.124341f, 0.992240f, 1.000000f, 0.875000f, + 0.203750f, -0.300000f, 0.980000f, 0.196116f, 0.000000f, 0.980581f, 0.875000f, 1.000000f, + 0.000000f, 0.450000f, 0.750000f, 0.000000f, 0.429934f, 0.902861f, 0.000000f, 0.000000f, + -0.750000f, 0.450000f, -0.000000f, -0.902861f, 0.429934f, 0.000000f, 1.000000f, 0.000000f, + 0.000000f, -0.300000f, 1.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, + -1.000000f, -0.300000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 1.000000f, 1.000000f, + -0.532500f, 0.450000f, 0.532500f, -0.639602f, 0.426401f, 0.639602f, 0.500000f, 0.000000f, + 0.000000f, 0.060938f, 0.921875f, 0.000000f, 0.347314f, 0.937749f, 0.000000f, 0.500000f, + -0.654531f, 0.060938f, 0.654531f, -0.663890f, 0.344239f, 0.663890f, 0.500000f, 0.500000f, + -0.921875f, 0.060938f, -0.000000f, -0.937749f, 0.347314f, 0.000000f, 1.000000f, 0.500000f, + -0.710000f, -0.300000f, 0.710000f, -0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + -0.294375f, 0.450000f, 0.691875f, -0.347303f, 0.429664f, 0.833528f, 0.250000f, 0.000000f, + 0.000000f, 0.253711f, 0.841797f, 0.000000f, 0.410706f, 0.911768f, 0.000000f, 0.250000f, + -0.330405f, 0.253711f, 0.776558f, -0.350725f, 0.410444f, 0.841741f, 0.250000f, 0.250000f, + -0.597676f, 0.253711f, 0.597676f, -0.644272f, 0.412102f, 0.644272f, 0.500000f, 0.250000f, + -0.361836f, 0.060938f, 0.850430f, -0.360706f, 0.347079f, 0.865695f, 0.250000f, 0.500000f, + -0.152812f, 0.450000f, 0.735000f, -0.177064f, 0.429952f, 0.885319f, 0.125000f, 0.000000f, + 0.000000f, 0.351636f, 0.796631f, 0.000000f, 0.425212f, 0.905094f, 0.000000f, 0.125000f, + -0.162314f, 0.351636f, 0.780698f, -0.177502f, 0.425230f, 0.887509f, 0.125000f, 0.125000f, + -0.312678f, 0.351636f, 0.734892f, -0.347956f, 0.426082f, 0.835093f, 0.250000f, 0.125000f, + -0.171516f, 0.253711f, 0.824961f, -0.178811f, 0.410724f, 0.894054f, 0.125000f, 0.250000f, + -0.421875f, 0.450000f, 0.623438f, -0.502590f, 0.430917f, 0.749476f, 0.375000f, 0.000000f, + -0.312678f, 0.351636f, 0.734892f, -0.347956f, 0.426082f, 0.835093f, 0.250000f, 0.125000f, + -0.448105f, 0.351636f, 0.662199f, -0.503839f, 0.426189f, 0.751338f, 0.375000f, 0.125000f, + -0.565608f, 0.351636f, 0.565608f, -0.639524f, 0.426636f, 0.639524f, 0.500000f, 0.125000f, + -0.473511f, 0.253711f, 0.699744f, -0.507571f, 0.411664f, 0.756904f, 0.375000f, 0.250000f, + -0.171516f, 0.253711f, 0.824961f, -0.178811f, 0.410724f, 0.894054f, 0.125000f, 0.250000f, + 0.000000f, 0.156665f, 0.884033f, 0.000000f, 0.385361f, 0.922766f, 0.000000f, 0.375000f, + -0.180122f, 0.156665f, 0.866353f, -0.180968f, 0.385379f, 0.904839f, 0.125000f, 0.375000f, + -0.346983f, 0.156665f, 0.815521f, -0.354778f, 0.386182f, 0.851467f, 0.250000f, 0.375000f, + -0.187832f, 0.060938f, 0.903437f, -0.183906f, 0.347330f, 0.919533f, 0.125000f, 0.500000f, + -0.473511f, 0.253711f, 0.699744f, -0.507571f, 0.411665f, 0.756904f, 0.375000f, 0.250000f, + -0.346983f, 0.156665f, 0.815521f, -0.354778f, 0.386182f, 0.851467f, 0.250000f, 0.375000f, + -0.497269f, 0.156665f, 0.734853f, -0.513723f, 0.386283f, 0.766078f, 0.375000f, 0.375000f, + -0.627664f, 0.156665f, 0.627664f, -0.652097f, 0.386703f, 0.652097f, 0.500000f, 0.375000f, + -0.518555f, 0.060938f, 0.766309f, -0.522105f, 0.348172f, 0.778577f, 0.375000f, 0.500000f, + -0.691875f, 0.450000f, 0.294375f, -0.833647f, 0.429394f, 0.347353f, 0.750000f, 0.000000f, + -0.597676f, 0.253711f, 0.597676f, -0.644272f, 0.412102f, 0.644272f, 0.500000f, 0.250000f, + -0.776558f, 0.253711f, 0.330405f, -0.841850f, 0.410181f, 0.350771f, 0.750000f, 0.250000f, + -0.841797f, 0.253711f, -0.000000f, -0.911768f, 0.410706f, 0.000000f, 1.000000f, 0.250000f, + -0.850430f, 0.060938f, 0.361836f, -0.865775f, 0.346844f, 0.360739f, 0.750000f, 0.500000f, + -0.623438f, 0.450000f, 0.421875f, -0.749483f, 0.430900f, 0.502594f, 0.625000f, 0.000000f, + -0.565608f, 0.351636f, 0.565608f, -0.639524f, 0.426636f, 0.639524f, 0.500000f, 0.125000f, + -0.662199f, 0.351636f, 0.448105f, -0.751345f, 0.426172f, 0.503843f, 0.625000f, 0.125000f, + -0.734892f, 0.351636f, 0.312678f, -0.835093f, 0.426082f, 0.347956f, 0.750000f, 0.125000f, + -0.699744f, 0.253711f, 0.473511f, -0.756911f, 0.411648f, 0.507575f, 0.625000f, 0.250000f, + -0.735000f, 0.450000f, 0.152812f, -0.885342f, 0.429903f, 0.177068f, 0.875000f, 0.000000f, + -0.734892f, 0.351636f, 0.312678f, -0.835093f, 0.426082f, 0.347956f, 0.750000f, 0.125000f, + -0.780698f, 0.351636f, 0.162314f, -0.887532f, 0.425181f, 0.177506f, 0.875000f, 0.125000f, + -0.796631f, 0.351636f, -0.000000f, -0.905094f, 0.425212f, 0.000000f, 1.000000f, 0.125000f, + -0.824961f, 0.253711f, 0.171516f, -0.894075f, 0.410676f, 0.178815f, 0.875000f, 0.250000f, + -0.699744f, 0.253711f, 0.473511f, -0.756910f, 0.411648f, 0.507575f, 0.625000f, 0.250000f, + -0.627664f, 0.156665f, 0.627664f, -0.652097f, 0.386703f, 0.652097f, 0.500000f, 0.375000f, + -0.734853f, 0.156665f, 0.497269f, -0.766083f, 0.386267f, 0.513726f, 0.625000f, 0.375000f, + -0.815521f, 0.156665f, 0.346983f, -0.851467f, 0.386182f, 0.354778f, 0.750000f, 0.375000f, + -0.766309f, 0.060938f, 0.518555f, -0.778582f, 0.348157f, 0.522108f, 0.625000f, 0.500000f, + -0.824961f, 0.253711f, 0.171516f, -0.894075f, 0.410676f, 0.178815f, 0.875000f, 0.250000f, + -0.815521f, 0.156665f, 0.346983f, -0.851467f, 0.386182f, 0.354778f, 0.750000f, 0.375000f, + -0.866353f, 0.156665f, 0.180122f, -0.904858f, 0.385333f, 0.180972f, 0.875000f, 0.375000f, + -0.884033f, 0.156665f, -0.000000f, -0.922766f, 0.385361f, 0.000000f, 1.000000f, 0.375000f, + -0.903437f, 0.060938f, 0.187832f, -0.919548f, 0.347288f, 0.183909f, 0.875000f, 0.500000f, + -0.361836f, 0.060938f, 0.850430f, -0.360706f, 0.347079f, 0.865695f, 0.250000f, 0.500000f, + 0.000000f, -0.124805f, 0.978516f, 0.000000f, 0.220939f, 0.975288f, 0.000000f, 0.750000f, + -0.384067f, -0.124805f, 0.902681f, -0.375125f, 0.220777f, 0.900299f, 0.250000f, 0.750000f, + -0.694746f, -0.124805f, 0.694746f, -0.689495f, 0.221799f, 0.689494f, 0.500000f, 0.750000f, + -0.392500f, -0.300000f, 0.922500f, -0.384615f, 0.000000f, 0.923077f, 0.250000f, 1.000000f, + -0.187832f, 0.060938f, 0.903437f, -0.183906f, 0.347330f, 0.919533f, 0.125000f, 0.500000f, + 0.000000f, -0.033032f, 0.953857f, 0.000000f, 0.293768f, 0.955877f, 0.000000f, 0.625000f, + -0.194348f, -0.033032f, 0.934780f, -0.187462f, 0.293782f, 0.937310f, 0.125000f, 0.625000f, + -0.374389f, -0.033032f, 0.879933f, -0.367565f, 0.294439f, 0.882157f, 0.250000f, 0.625000f, + -0.199373f, -0.124805f, 0.958945f, -0.191269f, 0.220950f, 0.956346f, 0.125000f, 0.750000f, + -0.518555f, 0.060938f, 0.766309f, -0.522105f, 0.348172f, 0.778578f, 0.375000f, 0.500000f, + -0.374389f, -0.033032f, 0.879933f, -0.367565f, 0.294439f, 0.882157f, 0.250000f, 0.625000f, + -0.536545f, -0.033032f, 0.792894f, -0.532249f, 0.294522f, 0.793705f, 0.375000f, 0.625000f, + -0.677239f, -0.033032f, 0.677239f, -0.675668f, 0.294866f, 0.675668f, 0.500000f, 0.625000f, + -0.550415f, -0.124805f, 0.813391f, -0.543115f, 0.221529f, 0.809908f, 0.375000f, 0.750000f, + -0.199373f, -0.124805f, 0.958945f, -0.191269f, 0.220950f, 0.956346f, 0.125000f, 0.750000f, + 0.000000f, -0.213940f, 0.994385f, 0.000000f, 0.124341f, 0.992240f, 0.000000f, 0.875000f, + -0.202606f, -0.213940f, 0.974497f, -0.194594f, 0.124347f, 0.972970f, 0.125000f, 0.875000f, + -0.390296f, -0.213940f, 0.917320f, -0.381616f, 0.124647f, 0.915878f, 0.250000f, 0.875000f, + -0.203750f, -0.300000f, 0.980000f, -0.196116f, 0.000000f, 0.980581f, 0.125000f, 1.000000f, + -0.550415f, -0.124805f, 0.813391f, -0.543115f, 0.221529f, 0.809908f, 0.375000f, 0.750000f, + -0.390296f, -0.213940f, 0.917320f, -0.381616f, 0.124647f, 0.915878f, 0.250000f, 0.875000f, + -0.559341f, -0.213940f, 0.826582f, -0.552607f, 0.124685f, 0.824063f, 0.375000f, 0.875000f, + -0.706013f, -0.213940f, 0.706013f, -0.701575f, 0.124842f, 0.701575f, 0.500000f, 0.875000f, + -0.562500f, -0.300000f, 0.831250f, -0.556953f, 0.000000f, 0.830544f, 0.375000f, 1.000000f, + -0.850430f, 0.060938f, 0.361836f, -0.865775f, 0.346844f, 0.360740f, 0.750000f, 0.500000f, + -0.694746f, -0.124805f, 0.694746f, -0.689494f, 0.221799f, 0.689495f, 0.500000f, 0.750000f, + -0.902681f, -0.124805f, 0.384067f, -0.900333f, 0.220616f, 0.375139f, 0.750000f, 0.750000f, + -0.978516f, -0.124805f, -0.000000f, -0.975288f, 0.220939f, 0.000000f, 1.000000f, 0.750000f, + -0.922500f, -0.300000f, 0.392500f, -0.923077f, 0.000000f, 0.384615f, 0.750000f, 1.000000f, + -0.766309f, 0.060938f, 0.518555f, -0.778582f, 0.348157f, 0.522108f, 0.625000f, 0.500000f, + -0.677239f, -0.033032f, 0.677239f, -0.675668f, 0.294866f, 0.675668f, 0.500000f, 0.625000f, + -0.792894f, -0.033032f, 0.536545f, -0.793708f, 0.294509f, 0.532252f, 0.625000f, 0.625000f, + -0.879933f, -0.033032f, 0.374389f, -0.882157f, 0.294439f, 0.367565f, 0.750000f, 0.625000f, + -0.813391f, -0.124805f, 0.550415f, -0.809910f, 0.221518f, 0.543116f, 0.625000f, 0.750000f, + -0.903437f, 0.060938f, 0.187832f, -0.919548f, 0.347287f, 0.183910f, 0.875000f, 0.500000f, + -0.879933f, -0.033032f, 0.374389f, -0.882157f, 0.294439f, 0.367565f, 0.750000f, 0.625000f, + -0.934780f, -0.033032f, 0.194348f, -0.937321f, 0.293744f, 0.187464f, 0.875000f, 0.625000f, + -0.953857f, -0.033032f, -0.000000f, -0.955877f, 0.293768f, 0.000000f, 1.000000f, 0.625000f, + -0.958945f, -0.124805f, 0.199373f, -0.956352f, 0.220920f, 0.191271f, 0.875000f, 0.750000f, + -0.813391f, -0.124805f, 0.550415f, -0.809910f, 0.221518f, 0.543116f, 0.625000f, 0.750000f, + -0.706013f, -0.213940f, 0.706013f, -0.701575f, 0.124842f, 0.701575f, 0.500000f, 0.875000f, + -0.826582f, -0.213940f, 0.559341f, -0.824063f, 0.124679f, 0.552607f, 0.625000f, 0.875000f, + -0.917320f, -0.213940f, 0.390296f, -0.915878f, 0.124647f, 0.381616f, 0.750000f, 0.875000f, + -0.831250f, -0.300000f, 0.562500f, -0.830544f, 0.000000f, 0.556953f, 0.625000f, 1.000000f, + -0.958945f, -0.124805f, 0.199373f, -0.956352f, 0.220920f, 0.191271f, 0.875000f, 0.750000f, + -0.917320f, -0.213940f, 0.390296f, -0.915878f, 0.124647f, 0.381616f, 0.750000f, 0.875000f, + -0.974497f, -0.213940f, 0.202606f, -0.972972f, 0.124330f, 0.194595f, 0.875000f, 0.875000f, + -0.994385f, -0.213940f, -0.000000f, -0.992240f, 0.124341f, 0.000000f, 1.000000f, 0.875000f, + -0.980000f, -0.300000f, 0.203750f, -0.980581f, 0.000000f, 0.196116f, 0.875000f, 1.000000f, + -0.750000f, 0.450000f, -0.000000f, -0.902861f, 0.429934f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.450000f, -0.750000f, 0.000000f, 0.429934f, -0.902861f, 1.000000f, 0.000000f, + -1.000000f, -0.300000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, -0.300000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 1.000000f, 1.000000f, + -0.532500f, 0.450000f, -0.532500f, -0.639602f, 0.426401f, -0.639602f, 0.500000f, 0.000000f, + -0.921875f, 0.060938f, -0.000000f, -0.937749f, 0.347314f, 0.000000f, 0.000000f, 0.500000f, + -0.654531f, 0.060938f, -0.654531f, -0.663890f, 0.344239f, -0.663890f, 0.500000f, 0.500000f, + 0.000000f, 0.060938f, -0.921875f, 0.000000f, 0.347314f, -0.937749f, 1.000000f, 0.500000f, + -0.710000f, -0.300000f, -0.710000f, -0.707107f, -0.000000f, -0.707107f, 0.500000f, 1.000000f, + -0.691875f, 0.450000f, -0.294375f, -0.833528f, 0.429664f, -0.347303f, 0.250000f, 0.000000f, + -0.841797f, 0.253711f, -0.000000f, -0.911768f, 0.410706f, 0.000000f, 0.000000f, 0.250000f, + -0.776558f, 0.253711f, -0.330405f, -0.841741f, 0.410444f, -0.350725f, 0.250000f, 0.250000f, + -0.597676f, 0.253711f, -0.597676f, -0.644272f, 0.412102f, -0.644272f, 0.500000f, 0.250000f, + -0.850430f, 0.060938f, -0.361836f, -0.865695f, 0.347079f, -0.360706f, 0.250000f, 0.500000f, + -0.735000f, 0.450000f, -0.152812f, -0.885319f, 0.429952f, -0.177064f, 0.125000f, 0.000000f, + -0.796631f, 0.351636f, -0.000000f, -0.905094f, 0.425212f, 0.000000f, 0.000000f, 0.125000f, + -0.780698f, 0.351636f, -0.162314f, -0.887509f, 0.425230f, -0.177502f, 0.125000f, 0.125000f, + -0.734892f, 0.351636f, -0.312678f, -0.835093f, 0.426082f, -0.347956f, 0.250000f, 0.125000f, + -0.824961f, 0.253711f, -0.171516f, -0.894054f, 0.410724f, -0.178811f, 0.125000f, 0.250000f, + -0.623438f, 0.450000f, -0.421875f, -0.749476f, 0.430917f, -0.502590f, 0.375000f, 0.000000f, + -0.734892f, 0.351636f, -0.312678f, -0.835093f, 0.426082f, -0.347956f, 0.250000f, 0.125000f, + -0.662199f, 0.351636f, -0.448105f, -0.751338f, 0.426189f, -0.503839f, 0.375000f, 0.125000f, + -0.565608f, 0.351636f, -0.565608f, -0.639524f, 0.426636f, -0.639524f, 0.500000f, 0.125000f, + -0.699744f, 0.253711f, -0.473511f, -0.756904f, 0.411664f, -0.507571f, 0.375000f, 0.250000f, + -0.824961f, 0.253711f, -0.171516f, -0.894054f, 0.410724f, -0.178811f, 0.125000f, 0.250000f, + -0.884033f, 0.156665f, -0.000000f, -0.922766f, 0.385361f, 0.000000f, 0.000000f, 0.375000f, + -0.866353f, 0.156665f, -0.180122f, -0.904839f, 0.385379f, -0.180968f, 0.125000f, 0.375000f, + -0.815521f, 0.156665f, -0.346983f, -0.851467f, 0.386182f, -0.354778f, 0.250000f, 0.375000f, + -0.903437f, 0.060938f, -0.187832f, -0.919533f, 0.347330f, -0.183906f, 0.125000f, 0.500000f, + -0.699744f, 0.253711f, -0.473511f, -0.756904f, 0.411665f, -0.507571f, 0.375000f, 0.250000f, + -0.815521f, 0.156665f, -0.346983f, -0.851467f, 0.386182f, -0.354778f, 0.250000f, 0.375000f, + -0.734853f, 0.156665f, -0.497269f, -0.766078f, 0.386283f, -0.513723f, 0.375000f, 0.375000f, + -0.627664f, 0.156665f, -0.627664f, -0.652097f, 0.386703f, -0.652097f, 0.500000f, 0.375000f, + -0.766309f, 0.060938f, -0.518555f, -0.778577f, 0.348172f, -0.522105f, 0.375000f, 0.500000f, + -0.294375f, 0.450000f, -0.691875f, -0.347353f, 0.429394f, -0.833647f, 0.750000f, 0.000000f, + -0.597676f, 0.253711f, -0.597676f, -0.644272f, 0.412102f, -0.644272f, 0.500000f, 0.250000f, + -0.330405f, 0.253711f, -0.776558f, -0.350771f, 0.410181f, -0.841850f, 0.750000f, 0.250000f, + 0.000000f, 0.253711f, -0.841797f, 0.000000f, 0.410706f, -0.911768f, 1.000000f, 0.250000f, + -0.361836f, 0.060938f, -0.850430f, -0.360739f, 0.346844f, -0.865775f, 0.750000f, 0.500000f, + -0.421875f, 0.450000f, -0.623438f, -0.502594f, 0.430900f, -0.749483f, 0.625000f, 0.000000f, + -0.565608f, 0.351636f, -0.565608f, -0.639524f, 0.426636f, -0.639524f, 0.500000f, 0.125000f, + -0.448105f, 0.351636f, -0.662199f, -0.503843f, 0.426172f, -0.751345f, 0.625000f, 0.125000f, + -0.312678f, 0.351636f, -0.734892f, -0.347956f, 0.426082f, -0.835093f, 0.750000f, 0.125000f, + -0.473511f, 0.253711f, -0.699744f, -0.507575f, 0.411648f, -0.756911f, 0.625000f, 0.250000f, + -0.152812f, 0.450000f, -0.735000f, -0.177068f, 0.429903f, -0.885342f, 0.875000f, 0.000000f, + -0.312678f, 0.351636f, -0.734892f, -0.347956f, 0.426082f, -0.835093f, 0.750000f, 0.125000f, + -0.162314f, 0.351636f, -0.780698f, -0.177506f, 0.425181f, -0.887532f, 0.875000f, 0.125000f, + 0.000000f, 0.351636f, -0.796631f, 0.000000f, 0.425212f, -0.905094f, 1.000000f, 0.125000f, + -0.171516f, 0.253711f, -0.824961f, -0.178815f, 0.410676f, -0.894075f, 0.875000f, 0.250000f, + -0.473511f, 0.253711f, -0.699744f, -0.507575f, 0.411648f, -0.756910f, 0.625000f, 0.250000f, + -0.627664f, 0.156665f, -0.627664f, -0.652097f, 0.386703f, -0.652097f, 0.500000f, 0.375000f, + -0.497269f, 0.156665f, -0.734853f, -0.513726f, 0.386267f, -0.766083f, 0.625000f, 0.375000f, + -0.346983f, 0.156665f, -0.815521f, -0.354778f, 0.386182f, -0.851467f, 0.750000f, 0.375000f, + -0.518555f, 0.060938f, -0.766309f, -0.522108f, 0.348157f, -0.778582f, 0.625000f, 0.500000f, + -0.171516f, 0.253711f, -0.824961f, -0.178815f, 0.410676f, -0.894075f, 0.875000f, 0.250000f, + -0.346983f, 0.156665f, -0.815521f, -0.354778f, 0.386182f, -0.851467f, 0.750000f, 0.375000f, + -0.180122f, 0.156665f, -0.866353f, -0.180972f, 0.385333f, -0.904858f, 0.875000f, 0.375000f, + 0.000000f, 0.156665f, -0.884033f, 0.000000f, 0.385361f, -0.922766f, 1.000000f, 0.375000f, + -0.187832f, 0.060938f, -0.903437f, -0.183909f, 0.347288f, -0.919548f, 0.875000f, 0.500000f, + -0.850430f, 0.060938f, -0.361836f, -0.865695f, 0.347079f, -0.360706f, 0.250000f, 0.500000f, + -0.978516f, -0.124805f, -0.000000f, -0.975288f, 0.220939f, 0.000000f, 0.000000f, 0.750000f, + -0.902681f, -0.124805f, -0.384067f, -0.900299f, 0.220777f, -0.375125f, 0.250000f, 0.750000f, + -0.694746f, -0.124805f, -0.694746f, -0.689494f, 0.221799f, -0.689495f, 0.500000f, 0.750000f, + -0.922500f, -0.300000f, -0.392500f, -0.923077f, -0.000000f, -0.384615f, 0.250000f, 1.000000f, + -0.903437f, 0.060938f, -0.187832f, -0.919533f, 0.347330f, -0.183906f, 0.125000f, 0.500000f, + -0.953857f, -0.033032f, -0.000000f, -0.955877f, 0.293768f, 0.000000f, 0.000000f, 0.625000f, + -0.934780f, -0.033032f, -0.194348f, -0.937310f, 0.293782f, -0.187462f, 0.125000f, 0.625000f, + -0.879933f, -0.033032f, -0.374389f, -0.882157f, 0.294439f, -0.367565f, 0.250000f, 0.625000f, + -0.958945f, -0.124805f, -0.199373f, -0.956346f, 0.220950f, -0.191269f, 0.125000f, 0.750000f, + -0.766309f, 0.060938f, -0.518555f, -0.778578f, 0.348172f, -0.522105f, 0.375000f, 0.500000f, + -0.879933f, -0.033032f, -0.374389f, -0.882157f, 0.294439f, -0.367565f, 0.250000f, 0.625000f, + -0.792894f, -0.033032f, -0.536545f, -0.793705f, 0.294522f, -0.532249f, 0.375000f, 0.625000f, + -0.677239f, -0.033032f, -0.677239f, -0.675668f, 0.294866f, -0.675668f, 0.500000f, 0.625000f, + -0.813391f, -0.124805f, -0.550415f, -0.809908f, 0.221529f, -0.543115f, 0.375000f, 0.750000f, + -0.958945f, -0.124805f, -0.199373f, -0.956346f, 0.220950f, -0.191269f, 0.125000f, 0.750000f, + -0.994385f, -0.213940f, -0.000000f, -0.992240f, 0.124341f, 0.000000f, 0.000000f, 0.875000f, + -0.974497f, -0.213940f, -0.202606f, -0.972970f, 0.124347f, -0.194594f, 0.125000f, 0.875000f, + -0.917320f, -0.213940f, -0.390296f, -0.915878f, 0.124647f, -0.381616f, 0.250000f, 0.875000f, + -0.980000f, -0.300000f, -0.203750f, -0.980581f, -0.000000f, -0.196116f, 0.125000f, 1.000000f, + -0.813391f, -0.124805f, -0.550415f, -0.809908f, 0.221529f, -0.543115f, 0.375000f, 0.750000f, + -0.917320f, -0.213940f, -0.390296f, -0.915878f, 0.124647f, -0.381616f, 0.250000f, 0.875000f, + -0.826582f, -0.213940f, -0.559341f, -0.824063f, 0.124685f, -0.552607f, 0.375000f, 0.875000f, + -0.706013f, -0.213940f, -0.706013f, -0.701575f, 0.124842f, -0.701575f, 0.500000f, 0.875000f, + -0.831250f, -0.300000f, -0.562500f, -0.830544f, -0.000000f, -0.556953f, 0.375000f, 1.000000f, + -0.361836f, 0.060938f, -0.850430f, -0.360740f, 0.346844f, -0.865775f, 0.750000f, 0.500000f, + -0.694746f, -0.124805f, -0.694746f, -0.689495f, 0.221799f, -0.689494f, 0.500000f, 0.750000f, + -0.384067f, -0.124805f, -0.902681f, -0.375139f, 0.220616f, -0.900333f, 0.750000f, 0.750000f, + 0.000000f, -0.124805f, -0.978516f, 0.000000f, 0.220939f, -0.975288f, 1.000000f, 0.750000f, + -0.392500f, -0.300000f, -0.922500f, -0.384615f, -0.000000f, -0.923077f, 0.750000f, 1.000000f, + -0.518555f, 0.060938f, -0.766309f, -0.522108f, 0.348157f, -0.778582f, 0.625000f, 0.500000f, + -0.677239f, -0.033032f, -0.677239f, -0.675668f, 0.294866f, -0.675668f, 0.500000f, 0.625000f, + -0.536545f, -0.033032f, -0.792894f, -0.532252f, 0.294509f, -0.793708f, 0.625000f, 0.625000f, + -0.374389f, -0.033032f, -0.879933f, -0.367565f, 0.294439f, -0.882157f, 0.750000f, 0.625000f, + -0.550415f, -0.124805f, -0.813391f, -0.543116f, 0.221518f, -0.809910f, 0.625000f, 0.750000f, + -0.187832f, 0.060938f, -0.903437f, -0.183910f, 0.347287f, -0.919548f, 0.875000f, 0.500000f, + -0.374389f, -0.033032f, -0.879933f, -0.367565f, 0.294439f, -0.882157f, 0.750000f, 0.625000f, + -0.194348f, -0.033032f, -0.934780f, -0.187464f, 0.293744f, -0.937321f, 0.875000f, 0.625000f, + 0.000000f, -0.033032f, -0.953857f, 0.000000f, 0.293768f, -0.955877f, 1.000000f, 0.625000f, + -0.199373f, -0.124805f, -0.958945f, -0.191271f, 0.220920f, -0.956352f, 0.875000f, 0.750000f, + -0.550415f, -0.124805f, -0.813391f, -0.543116f, 0.221518f, -0.809910f, 0.625000f, 0.750000f, + -0.706013f, -0.213940f, -0.706013f, -0.701575f, 0.124842f, -0.701575f, 0.500000f, 0.875000f, + -0.559341f, -0.213940f, -0.826582f, -0.552607f, 0.124679f, -0.824063f, 0.625000f, 0.875000f, + -0.390296f, -0.213940f, -0.917320f, -0.381616f, 0.124647f, -0.915878f, 0.750000f, 0.875000f, + -0.562500f, -0.300000f, -0.831250f, -0.556953f, -0.000000f, -0.830544f, 0.625000f, 1.000000f, + -0.199373f, -0.124805f, -0.958945f, -0.191271f, 0.220920f, -0.956352f, 0.875000f, 0.750000f, + -0.390296f, -0.213940f, -0.917320f, -0.381616f, 0.124647f, -0.915878f, 0.750000f, 0.875000f, + -0.202606f, -0.213940f, -0.974497f, -0.194595f, 0.124330f, -0.972972f, 0.875000f, 0.875000f, + 0.000000f, -0.213940f, -0.994385f, 0.000000f, 0.124341f, -0.992240f, 1.000000f, 0.875000f, + -0.203750f, -0.300000f, -0.980000f, -0.196116f, -0.000000f, -0.980581f, 0.875000f, 1.000000f, + 0.000000f, 0.450000f, -0.750000f, 0.000000f, 0.429934f, -0.902861f, 0.000000f, 0.000000f, + 0.750000f, 0.450000f, -0.000000f, 0.902861f, 0.429934f, -0.000000f, 1.000000f, 0.000000f, + 0.000000f, -0.300000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 1.000000f, + 1.000000f, -0.300000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 1.000000f, + 0.532500f, 0.450000f, -0.532500f, 0.639602f, 0.426401f, -0.639602f, 0.500000f, 0.000000f, + 0.000000f, 0.060938f, -0.921875f, 0.000000f, 0.347314f, -0.937749f, 0.000000f, 0.500000f, + 0.654531f, 0.060938f, -0.654531f, 0.663890f, 0.344239f, -0.663890f, 0.500000f, 0.500000f, + 0.921875f, 0.060938f, -0.000000f, 0.937749f, 0.347314f, -0.000000f, 1.000000f, 0.500000f, + 0.710000f, -0.300000f, -0.710000f, 0.707107f, 0.000000f, -0.707107f, 0.500000f, 1.000000f, + 0.294375f, 0.450000f, -0.691875f, 0.347303f, 0.429664f, -0.833528f, 0.250000f, 0.000000f, + 0.000000f, 0.253711f, -0.841797f, 0.000000f, 0.410706f, -0.911768f, 0.000000f, 0.250000f, + 0.330405f, 0.253711f, -0.776558f, 0.350725f, 0.410444f, -0.841741f, 0.250000f, 0.250000f, + 0.597676f, 0.253711f, -0.597676f, 0.644272f, 0.412102f, -0.644272f, 0.500000f, 0.250000f, + 0.361836f, 0.060938f, -0.850430f, 0.360706f, 0.347079f, -0.865695f, 0.250000f, 0.500000f, + 0.152812f, 0.450000f, -0.735000f, 0.177064f, 0.429952f, -0.885319f, 0.125000f, 0.000000f, + 0.000000f, 0.351636f, -0.796631f, 0.000000f, 0.425212f, -0.905094f, 0.000000f, 0.125000f, + 0.162314f, 0.351636f, -0.780698f, 0.177502f, 0.425230f, -0.887509f, 0.125000f, 0.125000f, + 0.312678f, 0.351636f, -0.734892f, 0.347956f, 0.426082f, -0.835093f, 0.250000f, 0.125000f, + 0.171516f, 0.253711f, -0.824961f, 0.178811f, 0.410724f, -0.894054f, 0.125000f, 0.250000f, + 0.421875f, 0.450000f, -0.623438f, 0.502590f, 0.430917f, -0.749476f, 0.375000f, 0.000000f, + 0.312678f, 0.351636f, -0.734892f, 0.347956f, 0.426082f, -0.835093f, 0.250000f, 0.125000f, + 0.448105f, 0.351636f, -0.662199f, 0.503839f, 0.426189f, -0.751338f, 0.375000f, 0.125000f, + 0.565608f, 0.351636f, -0.565608f, 0.639524f, 0.426636f, -0.639524f, 0.500000f, 0.125000f, + 0.473511f, 0.253711f, -0.699744f, 0.507571f, 0.411664f, -0.756904f, 0.375000f, 0.250000f, + 0.171516f, 0.253711f, -0.824961f, 0.178811f, 0.410724f, -0.894054f, 0.125000f, 0.250000f, + 0.000000f, 0.156665f, -0.884033f, 0.000000f, 0.385361f, -0.922766f, 0.000000f, 0.375000f, + 0.180122f, 0.156665f, -0.866353f, 0.180968f, 0.385379f, -0.904839f, 0.125000f, 0.375000f, + 0.346983f, 0.156665f, -0.815521f, 0.354778f, 0.386182f, -0.851467f, 0.250000f, 0.375000f, + 0.187832f, 0.060938f, -0.903437f, 0.183906f, 0.347330f, -0.919533f, 0.125000f, 0.500000f, + 0.473511f, 0.253711f, -0.699744f, 0.507571f, 0.411665f, -0.756904f, 0.375000f, 0.250000f, + 0.346983f, 0.156665f, -0.815521f, 0.354778f, 0.386182f, -0.851467f, 0.250000f, 0.375000f, + 0.497269f, 0.156665f, -0.734853f, 0.513723f, 0.386283f, -0.766078f, 0.375000f, 0.375000f, + 0.627664f, 0.156665f, -0.627664f, 0.652097f, 0.386703f, -0.652097f, 0.500000f, 0.375000f, + 0.518555f, 0.060938f, -0.766309f, 0.522105f, 0.348172f, -0.778577f, 0.375000f, 0.500000f, + 0.691875f, 0.450000f, -0.294375f, 0.833647f, 0.429394f, -0.347353f, 0.750000f, 0.000000f, + 0.597676f, 0.253711f, -0.597676f, 0.644272f, 0.412102f, -0.644272f, 0.500000f, 0.250000f, + 0.776558f, 0.253711f, -0.330405f, 0.841850f, 0.410181f, -0.350771f, 0.750000f, 0.250000f, + 0.841797f, 0.253711f, -0.000000f, 0.911768f, 0.410706f, -0.000000f, 1.000000f, 0.250000f, + 0.850430f, 0.060938f, -0.361836f, 0.865775f, 0.346844f, -0.360739f, 0.750000f, 0.500000f, + 0.623438f, 0.450000f, -0.421875f, 0.749483f, 0.430900f, -0.502594f, 0.625000f, 0.000000f, + 0.565608f, 0.351636f, -0.565608f, 0.639524f, 0.426636f, -0.639524f, 0.500000f, 0.125000f, + 0.662199f, 0.351636f, -0.448105f, 0.751345f, 0.426172f, -0.503843f, 0.625000f, 0.125000f, + 0.734892f, 0.351636f, -0.312678f, 0.835093f, 0.426082f, -0.347956f, 0.750000f, 0.125000f, + 0.699744f, 0.253711f, -0.473511f, 0.756911f, 0.411648f, -0.507575f, 0.625000f, 0.250000f, + 0.735000f, 0.450000f, -0.152812f, 0.885342f, 0.429903f, -0.177068f, 0.875000f, 0.000000f, + 0.734892f, 0.351636f, -0.312678f, 0.835093f, 0.426082f, -0.347956f, 0.750000f, 0.125000f, + 0.780698f, 0.351636f, -0.162314f, 0.887532f, 0.425181f, -0.177506f, 0.875000f, 0.125000f, + 0.796631f, 0.351636f, -0.000000f, 0.905094f, 0.425212f, -0.000000f, 1.000000f, 0.125000f, + 0.824961f, 0.253711f, -0.171516f, 0.894075f, 0.410676f, -0.178815f, 0.875000f, 0.250000f, + 0.699744f, 0.253711f, -0.473511f, 0.756910f, 0.411648f, -0.507575f, 0.625000f, 0.250000f, + 0.627664f, 0.156665f, -0.627664f, 0.652097f, 0.386703f, -0.652097f, 0.500000f, 0.375000f, + 0.734853f, 0.156665f, -0.497269f, 0.766083f, 0.386267f, -0.513726f, 0.625000f, 0.375000f, + 0.815521f, 0.156665f, -0.346983f, 0.851467f, 0.386182f, -0.354778f, 0.750000f, 0.375000f, + 0.766309f, 0.060938f, -0.518555f, 0.778582f, 0.348157f, -0.522108f, 0.625000f, 0.500000f, + 0.824961f, 0.253711f, -0.171516f, 0.894075f, 0.410676f, -0.178815f, 0.875000f, 0.250000f, + 0.815521f, 0.156665f, -0.346983f, 0.851467f, 0.386182f, -0.354778f, 0.750000f, 0.375000f, + 0.866353f, 0.156665f, -0.180122f, 0.904858f, 0.385333f, -0.180972f, 0.875000f, 0.375000f, + 0.884033f, 0.156665f, -0.000000f, 0.922766f, 0.385361f, -0.000000f, 1.000000f, 0.375000f, + 0.903437f, 0.060938f, -0.187832f, 0.919548f, 0.347288f, -0.183909f, 0.875000f, 0.500000f, + 0.361836f, 0.060938f, -0.850430f, 0.360706f, 0.347079f, -0.865695f, 0.250000f, 0.500000f, + 0.000000f, -0.124805f, -0.978516f, 0.000000f, 0.220939f, -0.975288f, 0.000000f, 0.750000f, + 0.384067f, -0.124805f, -0.902681f, 0.375125f, 0.220777f, -0.900299f, 0.250000f, 0.750000f, + 0.694746f, -0.124805f, -0.694746f, 0.689495f, 0.221799f, -0.689494f, 0.500000f, 0.750000f, + 0.392500f, -0.300000f, -0.922500f, 0.384615f, 0.000000f, -0.923077f, 0.250000f, 1.000000f, + 0.187832f, 0.060938f, -0.903437f, 0.183906f, 0.347330f, -0.919533f, 0.125000f, 0.500000f, + 0.000000f, -0.033032f, -0.953857f, 0.000000f, 0.293768f, -0.955877f, 0.000000f, 0.625000f, + 0.194348f, -0.033032f, -0.934780f, 0.187462f, 0.293782f, -0.937310f, 0.125000f, 0.625000f, + 0.374389f, -0.033032f, -0.879933f, 0.367565f, 0.294439f, -0.882157f, 0.250000f, 0.625000f, + 0.199373f, -0.124805f, -0.958945f, 0.191269f, 0.220950f, -0.956346f, 0.125000f, 0.750000f, + 0.518555f, 0.060938f, -0.766309f, 0.522105f, 0.348172f, -0.778578f, 0.375000f, 0.500000f, + 0.374389f, -0.033032f, -0.879933f, 0.367565f, 0.294439f, -0.882157f, 0.250000f, 0.625000f, + 0.536545f, -0.033032f, -0.792894f, 0.532249f, 0.294522f, -0.793705f, 0.375000f, 0.625000f, + 0.677239f, -0.033032f, -0.677239f, 0.675668f, 0.294866f, -0.675668f, 0.500000f, 0.625000f, + 0.550415f, -0.124805f, -0.813391f, 0.543115f, 0.221529f, -0.809908f, 0.375000f, 0.750000f, + 0.199373f, -0.124805f, -0.958945f, 0.191269f, 0.220950f, -0.956346f, 0.125000f, 0.750000f, + 0.000000f, -0.213940f, -0.994385f, 0.000000f, 0.124341f, -0.992240f, 0.000000f, 0.875000f, + 0.202606f, -0.213940f, -0.974497f, 0.194594f, 0.124347f, -0.972970f, 0.125000f, 0.875000f, + 0.390296f, -0.213940f, -0.917320f, 0.381616f, 0.124647f, -0.915878f, 0.250000f, 0.875000f, + 0.203750f, -0.300000f, -0.980000f, 0.196116f, 0.000000f, -0.980581f, 0.125000f, 1.000000f, + 0.550415f, -0.124805f, -0.813391f, 0.543115f, 0.221529f, -0.809908f, 0.375000f, 0.750000f, + 0.390296f, -0.213940f, -0.917320f, 0.381616f, 0.124647f, -0.915878f, 0.250000f, 0.875000f, + 0.559341f, -0.213940f, -0.826582f, 0.552607f, 0.124685f, -0.824063f, 0.375000f, 0.875000f, + 0.706013f, -0.213940f, -0.706013f, 0.701575f, 0.124842f, -0.701575f, 0.500000f, 0.875000f, + 0.562500f, -0.300000f, -0.831250f, 0.556953f, 0.000000f, -0.830544f, 0.375000f, 1.000000f, + 0.850430f, 0.060938f, -0.361836f, 0.865775f, 0.346844f, -0.360740f, 0.750000f, 0.500000f, + 0.694746f, -0.124805f, -0.694746f, 0.689494f, 0.221799f, -0.689495f, 0.500000f, 0.750000f, + 0.902681f, -0.124805f, -0.384067f, 0.900333f, 0.220616f, -0.375139f, 0.750000f, 0.750000f, + 0.978516f, -0.124805f, -0.000000f, 0.975288f, 0.220939f, -0.000000f, 1.000000f, 0.750000f, + 0.922500f, -0.300000f, -0.392500f, 0.923077f, 0.000000f, -0.384615f, 0.750000f, 1.000000f, + 0.766309f, 0.060938f, -0.518555f, 0.778582f, 0.348157f, -0.522108f, 0.625000f, 0.500000f, + 0.677239f, -0.033032f, -0.677239f, 0.675668f, 0.294866f, -0.675668f, 0.500000f, 0.625000f, + 0.792894f, -0.033032f, -0.536545f, 0.793708f, 0.294509f, -0.532252f, 0.625000f, 0.625000f, + 0.879933f, -0.033032f, -0.374389f, 0.882157f, 0.294439f, -0.367565f, 0.750000f, 0.625000f, + 0.813391f, -0.124805f, -0.550415f, 0.809910f, 0.221518f, -0.543116f, 0.625000f, 0.750000f, + 0.903437f, 0.060938f, -0.187832f, 0.919548f, 0.347287f, -0.183910f, 0.875000f, 0.500000f, + 0.879933f, -0.033032f, -0.374389f, 0.882157f, 0.294439f, -0.367565f, 0.750000f, 0.625000f, + 0.934780f, -0.033032f, -0.194348f, 0.937321f, 0.293744f, -0.187464f, 0.875000f, 0.625000f, + 0.953857f, -0.033032f, -0.000000f, 0.955877f, 0.293768f, -0.000000f, 1.000000f, 0.625000f, + 0.958945f, -0.124805f, -0.199373f, 0.956352f, 0.220920f, -0.191271f, 0.875000f, 0.750000f, + 0.813391f, -0.124805f, -0.550415f, 0.809910f, 0.221518f, -0.543116f, 0.625000f, 0.750000f, + 0.706013f, -0.213940f, -0.706013f, 0.701575f, 0.124842f, -0.701575f, 0.500000f, 0.875000f, + 0.826582f, -0.213940f, -0.559341f, 0.824063f, 0.124679f, -0.552607f, 0.625000f, 0.875000f, + 0.917320f, -0.213940f, -0.390296f, 0.915878f, 0.124647f, -0.381616f, 0.750000f, 0.875000f, + 0.831250f, -0.300000f, -0.562500f, 0.830544f, 0.000000f, -0.556953f, 0.625000f, 1.000000f, + 0.958945f, -0.124805f, -0.199373f, 0.956352f, 0.220920f, -0.191271f, 0.875000f, 0.750000f, + 0.917320f, -0.213940f, -0.390296f, 0.915878f, 0.124647f, -0.381616f, 0.750000f, 0.875000f, + 0.974497f, -0.213940f, -0.202606f, 0.972972f, 0.124330f, -0.194595f, 0.875000f, 0.875000f, + 0.994385f, -0.213940f, -0.000000f, 0.992240f, 0.124341f, -0.000000f, 1.000000f, 0.875000f, + 0.980000f, -0.300000f, -0.203750f, 0.980581f, 0.000000f, -0.196116f, 0.875000f, 1.000000f, + 1.000000f, -0.300000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f, + 0.000000f, -0.300000f, 1.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 0.000000f, + 0.750000f, -0.675000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, -0.675000f, 0.750000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, + 0.710000f, -0.300000f, 0.710000f, 0.707107f, 0.000000f, 0.707107f, 0.500000f, 0.000000f, + 0.875000f, -0.557812f, -0.000000f, 0.698100f, -0.716000f, 0.000000f, 0.000000f, 0.500000f, + 0.621250f, -0.557812f, 0.621250f, 0.496182f, -0.712466f, 0.496182f, 0.500000f, 0.500000f, + 0.000000f, -0.557812f, 0.875000f, 0.000000f, -0.716000f, 0.698100f, 1.000000f, 0.500000f, + 0.532500f, -0.675000f, 0.532500f, 0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + 0.922500f, -0.300000f, 0.392500f, 0.923077f, 0.000000f, 0.384615f, 0.250000f, 0.000000f, + 0.960938f, -0.448242f, -0.000000f, 0.876976f, -0.480535f, 0.000000f, 0.000000f, 0.250000f, + 0.886465f, -0.448242f, 0.377168f, 0.809660f, -0.480250f, 0.337358f, 0.250000f, 0.250000f, + 0.682266f, -0.448242f, 0.682266f, 0.619529f, -0.482045f, 0.619529f, 0.500000f, 0.250000f, + 0.807187f, -0.557812f, 0.343437f, 0.644654f, -0.715732f, 0.268606f, 0.250000f, 0.500000f, + 0.980000f, -0.300000f, 0.203750f, 0.980581f, 0.000000f, 0.196116f, 0.125000f, 0.000000f, + 0.989258f, -0.379175f, -0.000000f, 0.963722f, -0.266906f, 0.000000f, 0.000000f, 0.125000f, + 0.969473f, -0.379175f, 0.201561f, 0.945004f, -0.266919f, 0.189001f, 0.125000f, 0.125000f, + 0.912590f, -0.379175f, 0.388284f, 0.889432f, -0.267526f, 0.370596f, 0.250000f, 0.125000f, + 0.941719f, -0.448242f, 0.195791f, 0.859935f, -0.480554f, 0.171987f, 0.125000f, 0.250000f, + 0.831250f, -0.300000f, 0.562500f, 0.830544f, 0.000000f, 0.556953f, 0.375000f, 0.000000f, + 0.912590f, -0.379175f, 0.388284f, 0.889431f, -0.267526f, 0.370597f, 0.250000f, 0.125000f, + 0.822320f, -0.379175f, 0.556458f, 0.800254f, -0.267602f, 0.536641f, 0.375000f, 0.125000f, + 0.702373f, -0.379175f, 0.702373f, 0.681256f, -0.267921f, 0.681256f, 0.500000f, 0.125000f, + 0.798779f, -0.448242f, 0.540527f, 0.727894f, -0.481571f, 0.488118f, 0.375000f, 0.250000f, + 0.941719f, -0.448242f, 0.195791f, 0.859935f, -0.480554f, 0.171987f, 0.125000f, 0.250000f, + 0.920898f, -0.507642f, -0.000000f, 0.779645f, -0.626221f, 0.000000f, 0.000000f, 0.375000f, + 0.902480f, -0.507642f, 0.187633f, 0.764489f, -0.626241f, 0.152898f, 0.125000f, 0.375000f, + 0.849529f, -0.507642f, 0.361453f, 0.718967f, -0.627172f, 0.299570f, 0.250000f, 0.375000f, + 0.857500f, -0.557812f, 0.178281f, 0.684525f, -0.716019f, 0.136905f, 0.125000f, 0.500000f, + 0.798779f, -0.448242f, 0.540527f, 0.727894f, -0.481572f, 0.488118f, 0.375000f, 0.250000f, + 0.849529f, -0.507642f, 0.361453f, 0.718967f, -0.627172f, 0.299570f, 0.250000f, 0.375000f, + 0.765497f, -0.507642f, 0.518005f, 0.646817f, -0.627288f, 0.433748f, 0.375000f, 0.375000f, + 0.653838f, -0.507642f, 0.653838f, 0.550409f, -0.627775f, 0.550409f, 0.500000f, 0.375000f, + 0.727344f, -0.557812f, 0.492188f, 0.578969f, -0.716978f, 0.388249f, 0.375000f, 0.500000f, + 0.392500f, -0.300000f, 0.922500f, 0.384615f, 0.000000f, 0.923077f, 0.750000f, 0.000000f, + 0.682266f, -0.448242f, 0.682266f, 0.619529f, -0.482045f, 0.619529f, 0.500000f, 0.250000f, + 0.377168f, -0.448242f, 0.886465f, 0.337418f, -0.479966f, 0.809804f, 0.750000f, 0.250000f, + 0.000000f, -0.448242f, 0.960938f, 0.000000f, -0.480535f, 0.876976f, 1.000000f, 0.250000f, + 0.343437f, -0.557812f, 0.807187f, 0.268712f, -0.715463f, 0.644908f, 0.750000f, 0.500000f, + 0.562500f, -0.300000f, 0.831250f, 0.556953f, 0.000000f, 0.830544f, 0.625000f, 0.000000f, + 0.702373f, -0.379175f, 0.702373f, 0.681256f, -0.267921f, 0.681256f, 0.500000f, 0.125000f, + 0.556458f, -0.379175f, 0.822320f, 0.536643f, -0.267590f, 0.800256f, 0.625000f, 0.125000f, + 0.388284f, -0.379175f, 0.912590f, 0.370597f, -0.267526f, 0.889431f, 0.750000f, 0.125000f, + 0.540527f, -0.448242f, 0.798779f, 0.488123f, -0.481553f, 0.727903f, 0.625000f, 0.250000f, + 0.203750f, -0.300000f, 0.980000f, 0.196116f, 0.000000f, 0.980581f, 0.875000f, 0.000000f, + 0.388284f, -0.379175f, 0.912590f, 0.370596f, -0.267526f, 0.889432f, 0.750000f, 0.125000f, + 0.201561f, -0.379175f, 0.969473f, 0.189003f, -0.266885f, 0.945014f, 0.875000f, 0.125000f, + 0.000000f, -0.379175f, 0.989258f, 0.000000f, -0.266906f, 0.963722f, 1.000000f, 0.125000f, + 0.195791f, -0.448242f, 0.941719f, 0.171993f, -0.480502f, 0.859963f, 0.875000f, 0.250000f, + 0.540527f, -0.448242f, 0.798779f, 0.488123f, -0.481553f, 0.727903f, 0.625000f, 0.250000f, + 0.653838f, -0.507642f, 0.653838f, 0.550409f, -0.627775f, 0.550409f, 0.500000f, 0.375000f, + 0.518005f, -0.507642f, 0.765497f, 0.433756f, -0.627270f, 0.646829f, 0.625000f, 0.375000f, + 0.361453f, -0.507642f, 0.849529f, 0.299570f, -0.627172f, 0.718967f, 0.750000f, 0.375000f, + 0.492188f, -0.557812f, 0.727344f, 0.388259f, -0.716961f, 0.578983f, 0.625000f, 0.500000f, + 0.195791f, -0.448242f, 0.941719f, 0.171993f, -0.480502f, 0.859963f, 0.875000f, 0.250000f, + 0.361453f, -0.507642f, 0.849529f, 0.299570f, -0.627172f, 0.718967f, 0.750000f, 0.375000f, + 0.187633f, -0.507642f, 0.902480f, 0.152906f, -0.626188f, 0.764532f, 0.875000f, 0.375000f, + 0.000000f, -0.507642f, 0.920898f, 0.000000f, -0.626221f, 0.779645f, 1.000000f, 0.375000f, + 0.178281f, -0.557812f, 0.857500f, 0.136915f, -0.715970f, 0.684574f, 0.875000f, 0.500000f, + 0.807187f, -0.557812f, 0.343437f, 0.644654f, -0.715731f, 0.268606f, 0.250000f, 0.500000f, + 0.789062f, -0.632227f, -0.000000f, 0.636383f, -0.771373f, 0.000000f, 0.000000f, 0.750000f, + 0.727910f, -0.632227f, 0.309707f, 0.587700f, -0.771133f, 0.244875f, 0.250000f, 0.750000f, + 0.560234f, -0.632227f, 0.560234f, 0.448897f, -0.772647f, 0.448897f, 0.500000f, 0.750000f, + 0.691875f, -0.675000f, 0.294375f, 0.923077f, 0.000000f, 0.384615f, 0.250000f, 1.000000f, + 0.857500f, -0.557812f, 0.178281f, 0.684525f, -0.716018f, 0.136905f, 0.125000f, 0.500000f, + 0.829102f, -0.599194f, -0.000000f, 0.645429f, -0.763821f, 0.000000f, 0.000000f, 0.625000f, + 0.812519f, -0.599194f, 0.168929f, 0.632876f, -0.763837f, 0.126575f, 0.125000f, 0.625000f, + 0.764846f, -0.599194f, 0.325422f, 0.594912f, -0.764614f, 0.247880f, 0.250000f, 0.625000f, + 0.773281f, -0.632227f, 0.160771f, 0.624005f, -0.771390f, 0.124801f, 0.125000f, 0.750000f, + 0.727344f, -0.557812f, 0.492188f, 0.578969f, -0.716978f, 0.388249f, 0.375000f, 0.500000f, + 0.764846f, -0.599194f, 0.325422f, 0.594912f, -0.764614f, 0.247880f, 0.250000f, 0.625000f, + 0.689191f, -0.599194f, 0.466370f, 0.535179f, -0.764712f, 0.358885f, 0.375000f, 0.625000f, + 0.588662f, -0.599194f, 0.588662f, 0.455299f, -0.765118f, 0.455299f, 0.500000f, 0.625000f, + 0.655908f, -0.632227f, 0.443848f, 0.527662f, -0.772248f, 0.353844f, 0.375000f, 0.750000f, + 0.773281f, -0.632227f, 0.160771f, 0.624005f, -0.771390f, 0.124801f, 0.125000f, 0.750000f, + 0.760742f, -0.657349f, -0.000000f, 0.720596f, -0.693356f, 0.000000f, 0.000000f, 0.875000f, + 0.745527f, -0.657349f, 0.155001f, 0.706584f, -0.693375f, 0.141317f, 0.125000f, 0.875000f, + 0.701785f, -0.657349f, 0.298591f, 0.664366f, -0.694254f, 0.276819f, 0.250000f, 0.875000f, + 0.735000f, -0.675000f, 0.152812f, 0.980581f, 0.000000f, 0.196116f, 0.125000f, 1.000000f, + 0.655908f, -0.632227f, 0.443848f, 0.527662f, -0.772249f, 0.353844f, 0.375000f, 0.750000f, + 0.701785f, -0.657349f, 0.298591f, 0.664366f, -0.694254f, 0.276819f, 0.250000f, 0.875000f, + 0.632367f, -0.657349f, 0.427917f, 0.597679f, -0.694365f, 0.400796f, 0.375000f, 0.875000f, + 0.540127f, -0.657349f, 0.540127f, 0.508537f, -0.694825f, 0.508536f, 0.500000f, 0.875000f, + 0.623438f, -0.675000f, 0.421875f, 0.830544f, 0.000000f, 0.556953f, 0.375000f, 1.000000f, + 0.343437f, -0.557812f, 0.807187f, 0.268712f, -0.715463f, 0.644909f, 0.750000f, 0.500000f, + 0.560234f, -0.632227f, 0.560234f, 0.448897f, -0.772647f, 0.448897f, 0.500000f, 0.750000f, + 0.309707f, -0.632227f, 0.727910f, 0.244987f, -0.770892f, 0.587969f, 0.750000f, 0.750000f, + 0.000000f, -0.632227f, 0.789062f, 0.000000f, -0.771373f, 0.636383f, 1.000000f, 0.750000f, + 0.294375f, -0.675000f, 0.691875f, 0.384615f, 0.000000f, 0.923077f, 0.750000f, 1.000000f, + 0.492188f, -0.557812f, 0.727344f, 0.388259f, -0.716961f, 0.578983f, 0.625000f, 0.500000f, + 0.588662f, -0.599194f, 0.588662f, 0.455299f, -0.765118f, 0.455299f, 0.500000f, 0.625000f, + 0.466370f, -0.599194f, 0.689191f, 0.358895f, -0.764697f, 0.535195f, 0.625000f, 0.625000f, + 0.325422f, -0.599194f, 0.764846f, 0.247880f, -0.764614f, 0.594912f, 0.750000f, 0.625000f, + 0.443848f, -0.632227f, 0.655908f, 0.353854f, -0.772233f, 0.527677f, 0.625000f, 0.750000f, + 0.178281f, -0.557812f, 0.857500f, 0.136915f, -0.715969f, 0.684575f, 0.875000f, 0.500000f, + 0.325422f, -0.599194f, 0.764846f, 0.247880f, -0.764614f, 0.594912f, 0.750000f, 0.625000f, + 0.168929f, -0.599194f, 0.812519f, 0.126585f, -0.763793f, 0.632927f, 0.875000f, 0.625000f, + 0.000000f, -0.599194f, 0.829102f, 0.000000f, -0.763821f, 0.645429f, 1.000000f, 0.625000f, + 0.160771f, -0.632227f, 0.773281f, 0.124811f, -0.771346f, 0.624057f, 0.875000f, 0.750000f, + 0.443848f, -0.632227f, 0.655908f, 0.353854f, -0.772233f, 0.527677f, 0.625000f, 0.750000f, + 0.540127f, -0.657349f, 0.540127f, 0.508536f, -0.694825f, 0.508537f, 0.500000f, 0.875000f, + 0.427917f, -0.657349f, 0.632367f, 0.400806f, -0.694347f, 0.597693f, 0.625000f, 0.875000f, + 0.298591f, -0.657349f, 0.701785f, 0.276819f, -0.694254f, 0.664366f, 0.750000f, 0.875000f, + 0.421875f, -0.675000f, 0.623438f, 0.556953f, 0.000000f, 0.830544f, 0.625000f, 1.000000f, + 0.160771f, -0.632227f, 0.773281f, 0.124811f, -0.771346f, 0.624057f, 0.875000f, 0.750000f, + 0.298591f, -0.657349f, 0.701785f, 0.276819f, -0.694254f, 0.664366f, 0.750000f, 0.875000f, + 0.155001f, -0.657349f, 0.745527f, 0.141326f, -0.693324f, 0.706632f, 0.875000f, 0.875000f, + 0.000000f, -0.657349f, 0.760742f, 0.000000f, -0.693356f, 0.720596f, 1.000000f, 0.875000f, + 0.152812f, -0.675000f, 0.735000f, 0.196116f, 0.000000f, 0.980581f, 0.875000f, 1.000000f, + 0.000000f, -0.300000f, 1.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, + -1.000000f, -0.300000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 1.000000f, 0.000000f, + 0.000000f, -0.675000f, 0.750000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, + -0.750000f, -0.675000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 1.000000f, 1.000000f, + -0.710000f, -0.300000f, 0.710000f, -0.707107f, 0.000000f, 0.707107f, 0.500000f, 0.000000f, + 0.000000f, -0.557812f, 0.875000f, 0.000000f, -0.716000f, 0.698100f, 0.000000f, 0.500000f, + -0.621250f, -0.557812f, 0.621250f, -0.496182f, -0.712466f, 0.496182f, 0.500000f, 0.500000f, + -0.875000f, -0.557812f, -0.000000f, -0.698100f, -0.716000f, -0.000000f, 1.000000f, 0.500000f, + -0.532500f, -0.675000f, 0.532500f, -0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + -0.392500f, -0.300000f, 0.922500f, -0.384615f, 0.000000f, 0.923077f, 0.250000f, 0.000000f, + 0.000000f, -0.448242f, 0.960938f, 0.000000f, -0.480535f, 0.876976f, 0.000000f, 0.250000f, + -0.377168f, -0.448242f, 0.886465f, -0.337358f, -0.480250f, 0.809660f, 0.250000f, 0.250000f, + -0.682266f, -0.448242f, 0.682266f, -0.619529f, -0.482045f, 0.619529f, 0.500000f, 0.250000f, + -0.343437f, -0.557812f, 0.807187f, -0.268606f, -0.715732f, 0.644654f, 0.250000f, 0.500000f, + -0.203750f, -0.300000f, 0.980000f, -0.196116f, 0.000000f, 0.980581f, 0.125000f, 0.000000f, + 0.000000f, -0.379175f, 0.989258f, 0.000000f, -0.266906f, 0.963722f, 0.000000f, 0.125000f, + -0.201561f, -0.379175f, 0.969473f, -0.189001f, -0.266919f, 0.945004f, 0.125000f, 0.125000f, + -0.388284f, -0.379175f, 0.912590f, -0.370596f, -0.267526f, 0.889432f, 0.250000f, 0.125000f, + -0.195791f, -0.448242f, 0.941719f, -0.171987f, -0.480554f, 0.859935f, 0.125000f, 0.250000f, + -0.562500f, -0.300000f, 0.831250f, -0.556953f, 0.000000f, 0.830544f, 0.375000f, 0.000000f, + -0.388284f, -0.379175f, 0.912590f, -0.370597f, -0.267526f, 0.889431f, 0.250000f, 0.125000f, + -0.556458f, -0.379175f, 0.822320f, -0.536641f, -0.267602f, 0.800254f, 0.375000f, 0.125000f, + -0.702373f, -0.379175f, 0.702373f, -0.681256f, -0.267921f, 0.681256f, 0.500000f, 0.125000f, + -0.540527f, -0.448242f, 0.798779f, -0.488118f, -0.481571f, 0.727894f, 0.375000f, 0.250000f, + -0.195791f, -0.448242f, 0.941719f, -0.171987f, -0.480554f, 0.859935f, 0.125000f, 0.250000f, + 0.000000f, -0.507642f, 0.920898f, 0.000000f, -0.626221f, 0.779645f, 0.000000f, 0.375000f, + -0.187633f, -0.507642f, 0.902480f, -0.152898f, -0.626241f, 0.764489f, 0.125000f, 0.375000f, + -0.361453f, -0.507642f, 0.849529f, -0.299570f, -0.627172f, 0.718967f, 0.250000f, 0.375000f, + -0.178281f, -0.557812f, 0.857500f, -0.136905f, -0.716019f, 0.684525f, 0.125000f, 0.500000f, + -0.540527f, -0.448242f, 0.798779f, -0.488118f, -0.481572f, 0.727894f, 0.375000f, 0.250000f, + -0.361453f, -0.507642f, 0.849529f, -0.299570f, -0.627172f, 0.718967f, 0.250000f, 0.375000f, + -0.518005f, -0.507642f, 0.765497f, -0.433748f, -0.627288f, 0.646817f, 0.375000f, 0.375000f, + -0.653838f, -0.507642f, 0.653838f, -0.550409f, -0.627775f, 0.550409f, 0.500000f, 0.375000f, + -0.492188f, -0.557812f, 0.727344f, -0.388249f, -0.716978f, 0.578969f, 0.375000f, 0.500000f, + -0.922500f, -0.300000f, 0.392500f, -0.923077f, 0.000000f, 0.384615f, 0.750000f, 0.000000f, + -0.682266f, -0.448242f, 0.682266f, -0.619529f, -0.482045f, 0.619529f, 0.500000f, 0.250000f, + -0.886465f, -0.448242f, 0.377168f, -0.809804f, -0.479966f, 0.337418f, 0.750000f, 0.250000f, + -0.960938f, -0.448242f, -0.000000f, -0.876976f, -0.480535f, -0.000000f, 1.000000f, 0.250000f, + -0.807187f, -0.557812f, 0.343437f, -0.644908f, -0.715463f, 0.268712f, 0.750000f, 0.500000f, + -0.831250f, -0.300000f, 0.562500f, -0.830544f, 0.000000f, 0.556953f, 0.625000f, 0.000000f, + -0.702373f, -0.379175f, 0.702373f, -0.681256f, -0.267921f, 0.681256f, 0.500000f, 0.125000f, + -0.822320f, -0.379175f, 0.556458f, -0.800256f, -0.267590f, 0.536643f, 0.625000f, 0.125000f, + -0.912590f, -0.379175f, 0.388284f, -0.889431f, -0.267526f, 0.370597f, 0.750000f, 0.125000f, + -0.798779f, -0.448242f, 0.540527f, -0.727903f, -0.481553f, 0.488123f, 0.625000f, 0.250000f, + -0.980000f, -0.300000f, 0.203750f, -0.980581f, 0.000000f, 0.196116f, 0.875000f, 0.000000f, + -0.912590f, -0.379175f, 0.388284f, -0.889432f, -0.267526f, 0.370596f, 0.750000f, 0.125000f, + -0.969473f, -0.379175f, 0.201561f, -0.945014f, -0.266885f, 0.189003f, 0.875000f, 0.125000f, + -0.989258f, -0.379175f, -0.000000f, -0.963722f, -0.266906f, -0.000000f, 1.000000f, 0.125000f, + -0.941719f, -0.448242f, 0.195791f, -0.859963f, -0.480502f, 0.171993f, 0.875000f, 0.250000f, + -0.798779f, -0.448242f, 0.540527f, -0.727903f, -0.481553f, 0.488123f, 0.625000f, 0.250000f, + -0.653838f, -0.507642f, 0.653838f, -0.550409f, -0.627775f, 0.550409f, 0.500000f, 0.375000f, + -0.765497f, -0.507642f, 0.518005f, -0.646829f, -0.627270f, 0.433756f, 0.625000f, 0.375000f, + -0.849529f, -0.507642f, 0.361453f, -0.718967f, -0.627172f, 0.299570f, 0.750000f, 0.375000f, + -0.727344f, -0.557812f, 0.492188f, -0.578983f, -0.716961f, 0.388259f, 0.625000f, 0.500000f, + -0.941719f, -0.448242f, 0.195791f, -0.859963f, -0.480502f, 0.171993f, 0.875000f, 0.250000f, + -0.849529f, -0.507642f, 0.361453f, -0.718967f, -0.627172f, 0.299570f, 0.750000f, 0.375000f, + -0.902480f, -0.507642f, 0.187633f, -0.764532f, -0.626188f, 0.152906f, 0.875000f, 0.375000f, + -0.920898f, -0.507642f, -0.000000f, -0.779645f, -0.626221f, -0.000000f, 1.000000f, 0.375000f, + -0.857500f, -0.557812f, 0.178281f, -0.684574f, -0.715970f, 0.136915f, 0.875000f, 0.500000f, + -0.343437f, -0.557812f, 0.807187f, -0.268606f, -0.715731f, 0.644654f, 0.250000f, 0.500000f, + 0.000000f, -0.632227f, 0.789062f, 0.000000f, -0.771373f, 0.636383f, 0.000000f, 0.750000f, + -0.309707f, -0.632227f, 0.727910f, -0.244875f, -0.771133f, 0.587700f, 0.250000f, 0.750000f, + -0.560234f, -0.632227f, 0.560234f, -0.448897f, -0.772647f, 0.448897f, 0.500000f, 0.750000f, + -0.294375f, -0.675000f, 0.691875f, -0.384615f, 0.000000f, 0.923077f, 0.250000f, 1.000000f, + -0.178281f, -0.557812f, 0.857500f, -0.136905f, -0.716018f, 0.684525f, 0.125000f, 0.500000f, + 0.000000f, -0.599194f, 0.829102f, 0.000000f, -0.763821f, 0.645429f, 0.000000f, 0.625000f, + -0.168929f, -0.599194f, 0.812519f, -0.126575f, -0.763837f, 0.632876f, 0.125000f, 0.625000f, + -0.325422f, -0.599194f, 0.764846f, -0.247880f, -0.764614f, 0.594912f, 0.250000f, 0.625000f, + -0.160771f, -0.632227f, 0.773281f, -0.124801f, -0.771390f, 0.624005f, 0.125000f, 0.750000f, + -0.492188f, -0.557812f, 0.727344f, -0.388249f, -0.716978f, 0.578969f, 0.375000f, 0.500000f, + -0.325422f, -0.599194f, 0.764846f, -0.247880f, -0.764614f, 0.594912f, 0.250000f, 0.625000f, + -0.466370f, -0.599194f, 0.689191f, -0.358885f, -0.764712f, 0.535179f, 0.375000f, 0.625000f, + -0.588662f, -0.599194f, 0.588662f, -0.455299f, -0.765118f, 0.455299f, 0.500000f, 0.625000f, + -0.443848f, -0.632227f, 0.655908f, -0.353844f, -0.772248f, 0.527662f, 0.375000f, 0.750000f, + -0.160771f, -0.632227f, 0.773281f, -0.124801f, -0.771390f, 0.624005f, 0.125000f, 0.750000f, + 0.000000f, -0.657349f, 0.760742f, 0.000000f, -0.693356f, 0.720596f, 0.000000f, 0.875000f, + -0.155001f, -0.657349f, 0.745527f, -0.141317f, -0.693375f, 0.706584f, 0.125000f, 0.875000f, + -0.298591f, -0.657349f, 0.701785f, -0.276819f, -0.694254f, 0.664366f, 0.250000f, 0.875000f, + -0.152812f, -0.675000f, 0.735000f, -0.196116f, 0.000000f, 0.980581f, 0.125000f, 1.000000f, + -0.443848f, -0.632227f, 0.655908f, -0.353844f, -0.772249f, 0.527662f, 0.375000f, 0.750000f, + -0.298591f, -0.657349f, 0.701785f, -0.276819f, -0.694254f, 0.664366f, 0.250000f, 0.875000f, + -0.427917f, -0.657349f, 0.632367f, -0.400796f, -0.694365f, 0.597679f, 0.375000f, 0.875000f, + -0.540127f, -0.657349f, 0.540127f, -0.508536f, -0.694825f, 0.508537f, 0.500000f, 0.875000f, + -0.421875f, -0.675000f, 0.623438f, -0.556953f, 0.000000f, 0.830544f, 0.375000f, 1.000000f, + -0.807187f, -0.557812f, 0.343437f, -0.644909f, -0.715463f, 0.268712f, 0.750000f, 0.500000f, + -0.560234f, -0.632227f, 0.560234f, -0.448897f, -0.772647f, 0.448897f, 0.500000f, 0.750000f, + -0.727910f, -0.632227f, 0.309707f, -0.587969f, -0.770892f, 0.244987f, 0.750000f, 0.750000f, + -0.789062f, -0.632227f, -0.000000f, -0.636383f, -0.771373f, -0.000000f, 1.000000f, 0.750000f, + -0.691875f, -0.675000f, 0.294375f, -0.923077f, 0.000000f, 0.384615f, 0.750000f, 1.000000f, + -0.727344f, -0.557812f, 0.492188f, -0.578983f, -0.716961f, 0.388259f, 0.625000f, 0.500000f, + -0.588662f, -0.599194f, 0.588662f, -0.455299f, -0.765118f, 0.455299f, 0.500000f, 0.625000f, + -0.689191f, -0.599194f, 0.466370f, -0.535195f, -0.764697f, 0.358895f, 0.625000f, 0.625000f, + -0.764846f, -0.599194f, 0.325422f, -0.594912f, -0.764614f, 0.247880f, 0.750000f, 0.625000f, + -0.655908f, -0.632227f, 0.443848f, -0.527677f, -0.772233f, 0.353854f, 0.625000f, 0.750000f, + -0.857500f, -0.557812f, 0.178281f, -0.684575f, -0.715969f, 0.136915f, 0.875000f, 0.500000f, + -0.764846f, -0.599194f, 0.325422f, -0.594912f, -0.764614f, 0.247880f, 0.750000f, 0.625000f, + -0.812519f, -0.599194f, 0.168929f, -0.632927f, -0.763793f, 0.126585f, 0.875000f, 0.625000f, + -0.829102f, -0.599194f, -0.000000f, -0.645429f, -0.763821f, -0.000000f, 1.000000f, 0.625000f, + -0.773281f, -0.632227f, 0.160771f, -0.624057f, -0.771346f, 0.124811f, 0.875000f, 0.750000f, + -0.655908f, -0.632227f, 0.443848f, -0.527677f, -0.772233f, 0.353854f, 0.625000f, 0.750000f, + -0.540127f, -0.657349f, 0.540127f, -0.508537f, -0.694825f, 0.508536f, 0.500000f, 0.875000f, + -0.632367f, -0.657349f, 0.427917f, -0.597693f, -0.694347f, 0.400806f, 0.625000f, 0.875000f, + -0.701785f, -0.657349f, 0.298591f, -0.664366f, -0.694254f, 0.276819f, 0.750000f, 0.875000f, + -0.623438f, -0.675000f, 0.421875f, -0.830544f, 0.000000f, 0.556953f, 0.625000f, 1.000000f, + -0.773281f, -0.632227f, 0.160771f, -0.624057f, -0.771346f, 0.124811f, 0.875000f, 0.750000f, + -0.701785f, -0.657349f, 0.298591f, -0.664366f, -0.694254f, 0.276819f, 0.750000f, 0.875000f, + -0.745527f, -0.657349f, 0.155001f, -0.706632f, -0.693324f, 0.141326f, 0.875000f, 0.875000f, + -0.760742f, -0.657349f, -0.000000f, -0.720596f, -0.693356f, -0.000000f, 1.000000f, 0.875000f, + -0.735000f, -0.675000f, 0.152812f, -0.980581f, 0.000000f, 0.196116f, 0.875000f, 1.000000f, + -1.000000f, -0.300000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 0.000000f, 0.000000f, + 0.000000f, -0.300000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 1.000000f, 0.000000f, + -0.750000f, -0.675000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, -0.675000f, -0.750000f, 0.000000f, 0.000000f, -1.000000f, 1.000000f, 1.000000f, + -0.710000f, -0.300000f, -0.710000f, -0.707107f, -0.000000f, -0.707107f, 0.500000f, 0.000000f, + -0.875000f, -0.557812f, -0.000000f, -0.698100f, -0.716000f, -0.000000f, 0.000000f, 0.500000f, + -0.621250f, -0.557812f, -0.621250f, -0.496182f, -0.712466f, -0.496182f, 0.500000f, 0.500000f, + 0.000000f, -0.557812f, -0.875000f, 0.000000f, -0.716000f, -0.698100f, 1.000000f, 0.500000f, + -0.532500f, -0.675000f, -0.532500f, -0.707107f, -0.000000f, -0.707107f, 0.500000f, 1.000000f, + -0.922500f, -0.300000f, -0.392500f, -0.923077f, -0.000000f, -0.384615f, 0.250000f, 0.000000f, + -0.960938f, -0.448242f, -0.000000f, -0.876976f, -0.480535f, -0.000000f, 0.000000f, 0.250000f, + -0.886465f, -0.448242f, -0.377168f, -0.809660f, -0.480250f, -0.337358f, 0.250000f, 0.250000f, + -0.682266f, -0.448242f, -0.682266f, -0.619529f, -0.482045f, -0.619529f, 0.500000f, 0.250000f, + -0.807187f, -0.557812f, -0.343437f, -0.644654f, -0.715732f, -0.268606f, 0.250000f, 0.500000f, + -0.980000f, -0.300000f, -0.203750f, -0.980581f, -0.000000f, -0.196116f, 0.125000f, 0.000000f, + -0.989258f, -0.379175f, -0.000000f, -0.963722f, -0.266906f, -0.000000f, 0.000000f, 0.125000f, + -0.969473f, -0.379175f, -0.201561f, -0.945004f, -0.266919f, -0.189001f, 0.125000f, 0.125000f, + -0.912590f, -0.379175f, -0.388284f, -0.889432f, -0.267526f, -0.370596f, 0.250000f, 0.125000f, + -0.941719f, -0.448242f, -0.195791f, -0.859935f, -0.480554f, -0.171987f, 0.125000f, 0.250000f, + -0.831250f, -0.300000f, -0.562500f, -0.830544f, -0.000000f, -0.556953f, 0.375000f, 0.000000f, + -0.912590f, -0.379175f, -0.388284f, -0.889431f, -0.267526f, -0.370597f, 0.250000f, 0.125000f, + -0.822320f, -0.379175f, -0.556458f, -0.800254f, -0.267602f, -0.536641f, 0.375000f, 0.125000f, + -0.702373f, -0.379175f, -0.702373f, -0.681256f, -0.267921f, -0.681256f, 0.500000f, 0.125000f, + -0.798779f, -0.448242f, -0.540527f, -0.727894f, -0.481571f, -0.488118f, 0.375000f, 0.250000f, + -0.941719f, -0.448242f, -0.195791f, -0.859935f, -0.480554f, -0.171987f, 0.125000f, 0.250000f, + -0.920898f, -0.507642f, -0.000000f, -0.779645f, -0.626221f, -0.000000f, 0.000000f, 0.375000f, + -0.902480f, -0.507642f, -0.187633f, -0.764489f, -0.626241f, -0.152898f, 0.125000f, 0.375000f, + -0.849529f, -0.507642f, -0.361453f, -0.718967f, -0.627172f, -0.299570f, 0.250000f, 0.375000f, + -0.857500f, -0.557812f, -0.178281f, -0.684525f, -0.716019f, -0.136905f, 0.125000f, 0.500000f, + -0.798779f, -0.448242f, -0.540527f, -0.727894f, -0.481572f, -0.488118f, 0.375000f, 0.250000f, + -0.849529f, -0.507642f, -0.361453f, -0.718967f, -0.627172f, -0.299570f, 0.250000f, 0.375000f, + -0.765497f, -0.507642f, -0.518005f, -0.646817f, -0.627288f, -0.433748f, 0.375000f, 0.375000f, + -0.653838f, -0.507642f, -0.653838f, -0.550409f, -0.627775f, -0.550409f, 0.500000f, 0.375000f, + -0.727344f, -0.557812f, -0.492188f, -0.578969f, -0.716978f, -0.388249f, 0.375000f, 0.500000f, + -0.392500f, -0.300000f, -0.922500f, -0.384615f, -0.000000f, -0.923077f, 0.750000f, 0.000000f, + -0.682266f, -0.448242f, -0.682266f, -0.619529f, -0.482045f, -0.619529f, 0.500000f, 0.250000f, + -0.377168f, -0.448242f, -0.886465f, -0.337418f, -0.479966f, -0.809804f, 0.750000f, 0.250000f, + 0.000000f, -0.448242f, -0.960938f, 0.000000f, -0.480535f, -0.876976f, 1.000000f, 0.250000f, + -0.343437f, -0.557812f, -0.807187f, -0.268712f, -0.715463f, -0.644908f, 0.750000f, 0.500000f, + -0.562500f, -0.300000f, -0.831250f, -0.556953f, -0.000000f, -0.830544f, 0.625000f, 0.000000f, + -0.702373f, -0.379175f, -0.702373f, -0.681256f, -0.267921f, -0.681256f, 0.500000f, 0.125000f, + -0.556458f, -0.379175f, -0.822320f, -0.536643f, -0.267590f, -0.800256f, 0.625000f, 0.125000f, + -0.388284f, -0.379175f, -0.912590f, -0.370597f, -0.267526f, -0.889431f, 0.750000f, 0.125000f, + -0.540527f, -0.448242f, -0.798779f, -0.488123f, -0.481553f, -0.727903f, 0.625000f, 0.250000f, + -0.203750f, -0.300000f, -0.980000f, -0.196116f, -0.000000f, -0.980581f, 0.875000f, 0.000000f, + -0.388284f, -0.379175f, -0.912590f, -0.370596f, -0.267526f, -0.889432f, 0.750000f, 0.125000f, + -0.201561f, -0.379175f, -0.969473f, -0.189003f, -0.266885f, -0.945014f, 0.875000f, 0.125000f, + 0.000000f, -0.379175f, -0.989258f, 0.000000f, -0.266906f, -0.963722f, 1.000000f, 0.125000f, + -0.195791f, -0.448242f, -0.941719f, -0.171993f, -0.480502f, -0.859963f, 0.875000f, 0.250000f, + -0.540527f, -0.448242f, -0.798779f, -0.488123f, -0.481553f, -0.727903f, 0.625000f, 0.250000f, + -0.653838f, -0.507642f, -0.653838f, -0.550409f, -0.627775f, -0.550409f, 0.500000f, 0.375000f, + -0.518005f, -0.507642f, -0.765497f, -0.433756f, -0.627270f, -0.646829f, 0.625000f, 0.375000f, + -0.361453f, -0.507642f, -0.849529f, -0.299570f, -0.627172f, -0.718967f, 0.750000f, 0.375000f, + -0.492188f, -0.557812f, -0.727344f, -0.388259f, -0.716961f, -0.578983f, 0.625000f, 0.500000f, + -0.195791f, -0.448242f, -0.941719f, -0.171993f, -0.480502f, -0.859963f, 0.875000f, 0.250000f, + -0.361453f, -0.507642f, -0.849529f, -0.299570f, -0.627172f, -0.718967f, 0.750000f, 0.375000f, + -0.187633f, -0.507642f, -0.902480f, -0.152906f, -0.626188f, -0.764532f, 0.875000f, 0.375000f, + 0.000000f, -0.507642f, -0.920898f, 0.000000f, -0.626221f, -0.779645f, 1.000000f, 0.375000f, + -0.178281f, -0.557812f, -0.857500f, -0.136915f, -0.715970f, -0.684574f, 0.875000f, 0.500000f, + -0.807187f, -0.557812f, -0.343437f, -0.644654f, -0.715731f, -0.268606f, 0.250000f, 0.500000f, + -0.789062f, -0.632227f, -0.000000f, -0.636383f, -0.771373f, -0.000000f, 0.000000f, 0.750000f, + -0.727910f, -0.632227f, -0.309707f, -0.587700f, -0.771133f, -0.244875f, 0.250000f, 0.750000f, + -0.560234f, -0.632227f, -0.560234f, -0.448897f, -0.772647f, -0.448897f, 0.500000f, 0.750000f, + -0.691875f, -0.675000f, -0.294375f, -0.923077f, -0.000000f, -0.384615f, 0.250000f, 1.000000f, + -0.857500f, -0.557812f, -0.178281f, -0.684525f, -0.716018f, -0.136905f, 0.125000f, 0.500000f, + -0.829102f, -0.599194f, -0.000000f, -0.645429f, -0.763821f, -0.000000f, 0.000000f, 0.625000f, + -0.812519f, -0.599194f, -0.168929f, -0.632876f, -0.763837f, -0.126575f, 0.125000f, 0.625000f, + -0.764846f, -0.599194f, -0.325422f, -0.594912f, -0.764614f, -0.247880f, 0.250000f, 0.625000f, + -0.773281f, -0.632227f, -0.160771f, -0.624005f, -0.771390f, -0.124801f, 0.125000f, 0.750000f, + -0.727344f, -0.557812f, -0.492188f, -0.578969f, -0.716978f, -0.388249f, 0.375000f, 0.500000f, + -0.764846f, -0.599194f, -0.325422f, -0.594912f, -0.764614f, -0.247880f, 0.250000f, 0.625000f, + -0.689191f, -0.599194f, -0.466370f, -0.535179f, -0.764712f, -0.358885f, 0.375000f, 0.625000f, + -0.588662f, -0.599194f, -0.588662f, -0.455299f, -0.765118f, -0.455299f, 0.500000f, 0.625000f, + -0.655908f, -0.632227f, -0.443848f, -0.527662f, -0.772248f, -0.353844f, 0.375000f, 0.750000f, + -0.773281f, -0.632227f, -0.160771f, -0.624005f, -0.771390f, -0.124801f, 0.125000f, 0.750000f, + -0.760742f, -0.657349f, -0.000000f, -0.720596f, -0.693356f, -0.000000f, 0.000000f, 0.875000f, + -0.745527f, -0.657349f, -0.155001f, -0.706584f, -0.693375f, -0.141317f, 0.125000f, 0.875000f, + -0.701785f, -0.657349f, -0.298591f, -0.664366f, -0.694254f, -0.276819f, 0.250000f, 0.875000f, + -0.735000f, -0.675000f, -0.152812f, -0.980581f, -0.000000f, -0.196116f, 0.125000f, 1.000000f, + -0.655908f, -0.632227f, -0.443848f, -0.527662f, -0.772249f, -0.353844f, 0.375000f, 0.750000f, + -0.701785f, -0.657349f, -0.298591f, -0.664366f, -0.694254f, -0.276819f, 0.250000f, 0.875000f, + -0.632367f, -0.657349f, -0.427917f, -0.597679f, -0.694365f, -0.400796f, 0.375000f, 0.875000f, + -0.540127f, -0.657349f, -0.540127f, -0.508537f, -0.694825f, -0.508536f, 0.500000f, 0.875000f, + -0.623438f, -0.675000f, -0.421875f, -0.830544f, -0.000000f, -0.556953f, 0.375000f, 1.000000f, + -0.343437f, -0.557812f, -0.807187f, -0.268712f, -0.715463f, -0.644909f, 0.750000f, 0.500000f, + -0.560234f, -0.632227f, -0.560234f, -0.448897f, -0.772647f, -0.448897f, 0.500000f, 0.750000f, + -0.309707f, -0.632227f, -0.727910f, -0.244987f, -0.770892f, -0.587969f, 0.750000f, 0.750000f, + 0.000000f, -0.632227f, -0.789062f, 0.000000f, -0.771373f, -0.636383f, 1.000000f, 0.750000f, + -0.294375f, -0.675000f, -0.691875f, -0.384615f, -0.000000f, -0.923077f, 0.750000f, 1.000000f, + -0.492188f, -0.557812f, -0.727344f, -0.388259f, -0.716961f, -0.578983f, 0.625000f, 0.500000f, + -0.588662f, -0.599194f, -0.588662f, -0.455299f, -0.765118f, -0.455299f, 0.500000f, 0.625000f, + -0.466370f, -0.599194f, -0.689191f, -0.358895f, -0.764697f, -0.535195f, 0.625000f, 0.625000f, + -0.325422f, -0.599194f, -0.764846f, -0.247880f, -0.764614f, -0.594912f, 0.750000f, 0.625000f, + -0.443848f, -0.632227f, -0.655908f, -0.353854f, -0.772233f, -0.527677f, 0.625000f, 0.750000f, + -0.178281f, -0.557812f, -0.857500f, -0.136915f, -0.715969f, -0.684575f, 0.875000f, 0.500000f, + -0.325422f, -0.599194f, -0.764846f, -0.247880f, -0.764614f, -0.594912f, 0.750000f, 0.625000f, + -0.168929f, -0.599194f, -0.812519f, -0.126585f, -0.763793f, -0.632927f, 0.875000f, 0.625000f, + 0.000000f, -0.599194f, -0.829102f, 0.000000f, -0.763821f, -0.645429f, 1.000000f, 0.625000f, + -0.160771f, -0.632227f, -0.773281f, -0.124811f, -0.771346f, -0.624057f, 0.875000f, 0.750000f, + -0.443848f, -0.632227f, -0.655908f, -0.353854f, -0.772233f, -0.527677f, 0.625000f, 0.750000f, + -0.540127f, -0.657349f, -0.540127f, -0.508536f, -0.694825f, -0.508537f, 0.500000f, 0.875000f, + -0.427917f, -0.657349f, -0.632367f, -0.400806f, -0.694347f, -0.597693f, 0.625000f, 0.875000f, + -0.298591f, -0.657349f, -0.701785f, -0.276819f, -0.694254f, -0.664366f, 0.750000f, 0.875000f, + -0.421875f, -0.675000f, -0.623438f, -0.556953f, -0.000000f, -0.830544f, 0.625000f, 1.000000f, + -0.160771f, -0.632227f, -0.773281f, -0.124811f, -0.771346f, -0.624057f, 0.875000f, 0.750000f, + -0.298591f, -0.657349f, -0.701785f, -0.276819f, -0.694254f, -0.664366f, 0.750000f, 0.875000f, + -0.155001f, -0.657349f, -0.745527f, -0.141326f, -0.693324f, -0.706632f, 0.875000f, 0.875000f, + 0.000000f, -0.657349f, -0.760742f, 0.000000f, -0.693356f, -0.720596f, 1.000000f, 0.875000f, + -0.152812f, -0.675000f, -0.735000f, -0.196116f, -0.000000f, -0.980581f, 0.875000f, 1.000000f, + 0.000000f, -0.300000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 0.000000f, + 1.000000f, -0.300000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 0.000000f, + 0.000000f, -0.675000f, -0.750000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 1.000000f, + 0.750000f, -0.675000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 1.000000f, + 0.710000f, -0.300000f, -0.710000f, 0.707107f, 0.000000f, -0.707107f, 0.500000f, 0.000000f, + 0.000000f, -0.557812f, -0.875000f, 0.000000f, -0.716000f, -0.698100f, 0.000000f, 0.500000f, + 0.621250f, -0.557812f, -0.621250f, 0.496182f, -0.712466f, -0.496182f, 0.500000f, 0.500000f, + 0.875000f, -0.557812f, -0.000000f, 0.698100f, -0.716000f, 0.000000f, 1.000000f, 0.500000f, + 0.532500f, -0.675000f, -0.532500f, 0.707107f, 0.000000f, -0.707107f, 0.500000f, 1.000000f, + 0.392500f, -0.300000f, -0.922500f, 0.384615f, 0.000000f, -0.923077f, 0.250000f, 0.000000f, + 0.000000f, -0.448242f, -0.960938f, 0.000000f, -0.480535f, -0.876976f, 0.000000f, 0.250000f, + 0.377168f, -0.448242f, -0.886465f, 0.337358f, -0.480250f, -0.809660f, 0.250000f, 0.250000f, + 0.682266f, -0.448242f, -0.682266f, 0.619529f, -0.482045f, -0.619529f, 0.500000f, 0.250000f, + 0.343437f, -0.557812f, -0.807187f, 0.268606f, -0.715732f, -0.644654f, 0.250000f, 0.500000f, + 0.203750f, -0.300000f, -0.980000f, 0.196116f, 0.000000f, -0.980581f, 0.125000f, 0.000000f, + 0.000000f, -0.379175f, -0.989258f, 0.000000f, -0.266906f, -0.963722f, 0.000000f, 0.125000f, + 0.201561f, -0.379175f, -0.969473f, 0.189001f, -0.266919f, -0.945004f, 0.125000f, 0.125000f, + 0.388284f, -0.379175f, -0.912590f, 0.370596f, -0.267526f, -0.889432f, 0.250000f, 0.125000f, + 0.195791f, -0.448242f, -0.941719f, 0.171987f, -0.480554f, -0.859935f, 0.125000f, 0.250000f, + 0.562500f, -0.300000f, -0.831250f, 0.556953f, 0.000000f, -0.830544f, 0.375000f, 0.000000f, + 0.388284f, -0.379175f, -0.912590f, 0.370597f, -0.267526f, -0.889431f, 0.250000f, 0.125000f, + 0.556458f, -0.379175f, -0.822320f, 0.536641f, -0.267602f, -0.800254f, 0.375000f, 0.125000f, + 0.702373f, -0.379175f, -0.702373f, 0.681256f, -0.267921f, -0.681256f, 0.500000f, 0.125000f, + 0.540527f, -0.448242f, -0.798779f, 0.488118f, -0.481571f, -0.727894f, 0.375000f, 0.250000f, + 0.195791f, -0.448242f, -0.941719f, 0.171987f, -0.480554f, -0.859935f, 0.125000f, 0.250000f, + 0.000000f, -0.507642f, -0.920898f, 0.000000f, -0.626221f, -0.779645f, 0.000000f, 0.375000f, + 0.187633f, -0.507642f, -0.902480f, 0.152898f, -0.626241f, -0.764489f, 0.125000f, 0.375000f, + 0.361453f, -0.507642f, -0.849529f, 0.299570f, -0.627172f, -0.718967f, 0.250000f, 0.375000f, + 0.178281f, -0.557812f, -0.857500f, 0.136905f, -0.716019f, -0.684525f, 0.125000f, 0.500000f, + 0.540527f, -0.448242f, -0.798779f, 0.488118f, -0.481572f, -0.727894f, 0.375000f, 0.250000f, + 0.361453f, -0.507642f, -0.849529f, 0.299570f, -0.627172f, -0.718967f, 0.250000f, 0.375000f, + 0.518005f, -0.507642f, -0.765497f, 0.433748f, -0.627288f, -0.646817f, 0.375000f, 0.375000f, + 0.653838f, -0.507642f, -0.653838f, 0.550409f, -0.627775f, -0.550409f, 0.500000f, 0.375000f, + 0.492188f, -0.557812f, -0.727344f, 0.388249f, -0.716978f, -0.578969f, 0.375000f, 0.500000f, + 0.922500f, -0.300000f, -0.392500f, 0.923077f, 0.000000f, -0.384615f, 0.750000f, 0.000000f, + 0.682266f, -0.448242f, -0.682266f, 0.619529f, -0.482045f, -0.619529f, 0.500000f, 0.250000f, + 0.886465f, -0.448242f, -0.377168f, 0.809804f, -0.479966f, -0.337418f, 0.750000f, 0.250000f, + 0.960938f, -0.448242f, -0.000000f, 0.876976f, -0.480535f, 0.000000f, 1.000000f, 0.250000f, + 0.807187f, -0.557812f, -0.343437f, 0.644908f, -0.715463f, -0.268712f, 0.750000f, 0.500000f, + 0.831250f, -0.300000f, -0.562500f, 0.830544f, 0.000000f, -0.556953f, 0.625000f, 0.000000f, + 0.702373f, -0.379175f, -0.702373f, 0.681256f, -0.267921f, -0.681256f, 0.500000f, 0.125000f, + 0.822320f, -0.379175f, -0.556458f, 0.800256f, -0.267590f, -0.536643f, 0.625000f, 0.125000f, + 0.912590f, -0.379175f, -0.388284f, 0.889431f, -0.267526f, -0.370597f, 0.750000f, 0.125000f, + 0.798779f, -0.448242f, -0.540527f, 0.727903f, -0.481553f, -0.488123f, 0.625000f, 0.250000f, + 0.980000f, -0.300000f, -0.203750f, 0.980581f, 0.000000f, -0.196116f, 0.875000f, 0.000000f, + 0.912590f, -0.379175f, -0.388284f, 0.889432f, -0.267526f, -0.370596f, 0.750000f, 0.125000f, + 0.969473f, -0.379175f, -0.201561f, 0.945014f, -0.266885f, -0.189003f, 0.875000f, 0.125000f, + 0.989258f, -0.379175f, -0.000000f, 0.963722f, -0.266906f, 0.000000f, 1.000000f, 0.125000f, + 0.941719f, -0.448242f, -0.195791f, 0.859963f, -0.480502f, -0.171993f, 0.875000f, 0.250000f, + 0.798779f, -0.448242f, -0.540527f, 0.727903f, -0.481553f, -0.488123f, 0.625000f, 0.250000f, + 0.653838f, -0.507642f, -0.653838f, 0.550409f, -0.627775f, -0.550409f, 0.500000f, 0.375000f, + 0.765497f, -0.507642f, -0.518005f, 0.646829f, -0.627270f, -0.433756f, 0.625000f, 0.375000f, + 0.849529f, -0.507642f, -0.361453f, 0.718967f, -0.627172f, -0.299570f, 0.750000f, 0.375000f, + 0.727344f, -0.557812f, -0.492188f, 0.578983f, -0.716961f, -0.388259f, 0.625000f, 0.500000f, + 0.941719f, -0.448242f, -0.195791f, 0.859963f, -0.480502f, -0.171993f, 0.875000f, 0.250000f, + 0.849529f, -0.507642f, -0.361453f, 0.718967f, -0.627172f, -0.299570f, 0.750000f, 0.375000f, + 0.902480f, -0.507642f, -0.187633f, 0.764532f, -0.626188f, -0.152906f, 0.875000f, 0.375000f, + 0.920898f, -0.507642f, -0.000000f, 0.779645f, -0.626221f, 0.000000f, 1.000000f, 0.375000f, + 0.857500f, -0.557812f, -0.178281f, 0.684574f, -0.715970f, -0.136915f, 0.875000f, 0.500000f, + 0.343437f, -0.557812f, -0.807187f, 0.268606f, -0.715731f, -0.644654f, 0.250000f, 0.500000f, + 0.000000f, -0.632227f, -0.789062f, 0.000000f, -0.771373f, -0.636383f, 0.000000f, 0.750000f, + 0.309707f, -0.632227f, -0.727910f, 0.244875f, -0.771133f, -0.587700f, 0.250000f, 0.750000f, + 0.560234f, -0.632227f, -0.560234f, 0.448897f, -0.772647f, -0.448897f, 0.500000f, 0.750000f, + 0.294375f, -0.675000f, -0.691875f, 0.384615f, 0.000000f, -0.923077f, 0.250000f, 1.000000f, + 0.178281f, -0.557812f, -0.857500f, 0.136905f, -0.716018f, -0.684525f, 0.125000f, 0.500000f, + 0.000000f, -0.599194f, -0.829102f, 0.000000f, -0.763821f, -0.645429f, 0.000000f, 0.625000f, + 0.168929f, -0.599194f, -0.812519f, 0.126575f, -0.763837f, -0.632876f, 0.125000f, 0.625000f, + 0.325422f, -0.599194f, -0.764846f, 0.247880f, -0.764614f, -0.594912f, 0.250000f, 0.625000f, + 0.160771f, -0.632227f, -0.773281f, 0.124801f, -0.771390f, -0.624005f, 0.125000f, 0.750000f, + 0.492188f, -0.557812f, -0.727344f, 0.388249f, -0.716978f, -0.578969f, 0.375000f, 0.500000f, + 0.325422f, -0.599194f, -0.764846f, 0.247880f, -0.764614f, -0.594912f, 0.250000f, 0.625000f, + 0.466370f, -0.599194f, -0.689191f, 0.358885f, -0.764712f, -0.535179f, 0.375000f, 0.625000f, + 0.588662f, -0.599194f, -0.588662f, 0.455299f, -0.765118f, -0.455299f, 0.500000f, 0.625000f, + 0.443848f, -0.632227f, -0.655908f, 0.353844f, -0.772248f, -0.527662f, 0.375000f, 0.750000f, + 0.160771f, -0.632227f, -0.773281f, 0.124801f, -0.771390f, -0.624005f, 0.125000f, 0.750000f, + 0.000000f, -0.657349f, -0.760742f, 0.000000f, -0.693356f, -0.720596f, 0.000000f, 0.875000f, + 0.155001f, -0.657349f, -0.745527f, 0.141317f, -0.693375f, -0.706584f, 0.125000f, 0.875000f, + 0.298591f, -0.657349f, -0.701785f, 0.276819f, -0.694254f, -0.664366f, 0.250000f, 0.875000f, + 0.152812f, -0.675000f, -0.735000f, 0.196116f, 0.000000f, -0.980581f, 0.125000f, 1.000000f, + 0.443848f, -0.632227f, -0.655908f, 0.353844f, -0.772249f, -0.527662f, 0.375000f, 0.750000f, + 0.298591f, -0.657349f, -0.701785f, 0.276819f, -0.694254f, -0.664366f, 0.250000f, 0.875000f, + 0.427917f, -0.657349f, -0.632367f, 0.400796f, -0.694365f, -0.597679f, 0.375000f, 0.875000f, + 0.540127f, -0.657349f, -0.540127f, 0.508536f, -0.694825f, -0.508537f, 0.500000f, 0.875000f, + 0.421875f, -0.675000f, -0.623438f, 0.556953f, 0.000000f, -0.830544f, 0.375000f, 1.000000f, + 0.807187f, -0.557812f, -0.343437f, 0.644909f, -0.715463f, -0.268712f, 0.750000f, 0.500000f, + 0.560234f, -0.632227f, -0.560234f, 0.448897f, -0.772647f, -0.448897f, 0.500000f, 0.750000f, + 0.727910f, -0.632227f, -0.309707f, 0.587969f, -0.770892f, -0.244987f, 0.750000f, 0.750000f, + 0.789062f, -0.632227f, -0.000000f, 0.636383f, -0.771373f, 0.000000f, 1.000000f, 0.750000f, + 0.691875f, -0.675000f, -0.294375f, 0.923077f, 0.000000f, -0.384615f, 0.750000f, 1.000000f, + 0.727344f, -0.557812f, -0.492188f, 0.578983f, -0.716961f, -0.388259f, 0.625000f, 0.500000f, + 0.588662f, -0.599194f, -0.588662f, 0.455299f, -0.765118f, -0.455299f, 0.500000f, 0.625000f, + 0.689191f, -0.599194f, -0.466370f, 0.535195f, -0.764697f, -0.358895f, 0.625000f, 0.625000f, + 0.764846f, -0.599194f, -0.325422f, 0.594912f, -0.764614f, -0.247880f, 0.750000f, 0.625000f, + 0.655908f, -0.632227f, -0.443848f, 0.527677f, -0.772233f, -0.353854f, 0.625000f, 0.750000f, + 0.857500f, -0.557812f, -0.178281f, 0.684575f, -0.715969f, -0.136915f, 0.875000f, 0.500000f, + 0.764846f, -0.599194f, -0.325422f, 0.594912f, -0.764614f, -0.247880f, 0.750000f, 0.625000f, + 0.812519f, -0.599194f, -0.168929f, 0.632927f, -0.763793f, -0.126585f, 0.875000f, 0.625000f, + 0.829102f, -0.599194f, -0.000000f, 0.645429f, -0.763821f, 0.000000f, 1.000000f, 0.625000f, + 0.773281f, -0.632227f, -0.160771f, 0.624057f, -0.771346f, -0.124811f, 0.875000f, 0.750000f, + 0.655908f, -0.632227f, -0.443848f, 0.527677f, -0.772233f, -0.353854f, 0.625000f, 0.750000f, + 0.540127f, -0.657349f, -0.540127f, 0.508537f, -0.694825f, -0.508536f, 0.500000f, 0.875000f, + 0.632367f, -0.657349f, -0.427917f, 0.597693f, -0.694347f, -0.400806f, 0.625000f, 0.875000f, + 0.701785f, -0.657349f, -0.298591f, 0.664366f, -0.694254f, -0.276819f, 0.750000f, 0.875000f, + 0.623438f, -0.675000f, -0.421875f, 0.830544f, 0.000000f, -0.556953f, 0.625000f, 1.000000f, + 0.773281f, -0.632227f, -0.160771f, 0.624057f, -0.771346f, -0.124811f, 0.875000f, 0.750000f, + 0.701785f, -0.657349f, -0.298591f, 0.664366f, -0.694254f, -0.276819f, 0.750000f, 0.875000f, + 0.745527f, -0.657349f, -0.155001f, 0.706632f, -0.693324f, -0.141326f, 0.875000f, 0.875000f, + 0.760742f, -0.657349f, -0.000000f, 0.720596f, -0.693356f, 0.000000f, 1.000000f, 0.875000f, + 0.735000f, -0.675000f, -0.152812f, 0.980581f, 0.000000f, -0.196116f, 0.875000f, 1.000000f, + -0.800000f, 0.262500f, -0.000000f, 0.000000f, -1.000000f, 0.000000f, 0.000000f, 0.000000f, + -0.750000f, 0.375000f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, + -1.350000f, 0.150000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 0.000000f, 1.000000f, + -1.500000f, 0.150000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 1.000000f, 1.000000f, + -0.775000f, 0.318750f, 0.112500f, 0.000000f, -0.000000f, 1.000000f, 0.500000f, 0.000000f, + -1.206250f, 0.248438f, -0.000000f, 0.148341f, -0.988936f, 0.000000f, 0.000000f, 0.500000f, + -1.259375f, 0.297656f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.500000f, + -1.312500f, 0.346875f, -0.000000f, -0.219512f, 0.975610f, 0.000000f, 1.000000f, 0.500000f, + -1.425000f, 0.150000f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 1.000000f, + -0.792188f, 0.280078f, 0.084375f, 0.000000f, -0.871576f, 0.490261f, 0.250000f, 0.000000f, + -1.033594f, 0.260742f, -0.000000f, 0.025853f, -0.999666f, 0.000000f, 0.000000f, 0.250000f, + -1.040552f, 0.278046f, 0.084375f, 0.024475f, -0.872955f, 0.487186f, 0.250000f, 0.250000f, + -1.055859f, 0.316113f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.250000f, + -1.222852f, 0.263818f, 0.084375f, 0.140206f, -0.856814f, 0.496198f, 0.250000f, 0.500000f, + -0.797852f, 0.267334f, 0.049219f, 0.000000f, -0.976900f, 0.213697f, 0.125000f, 0.000000f, + -0.924121f, 0.262280f, -0.000000f, 0.005639f, -0.999984f, 0.000000f, 0.000000f, 0.125000f, + -0.924192f, 0.267105f, 0.049219f, 0.005639f, -0.976986f, 0.213230f, 0.125000f, 0.125000f, + -0.924381f, 0.279824f, 0.084375f, 0.005349f, -0.872040f, 0.489406f, 0.250000f, 0.125000f, + -1.035507f, 0.265501f, 0.049219f, 0.025883f, -0.976801f, 0.212578f, 0.125000f, 0.250000f, + -0.784180f, 0.298096f, 0.105469f, 0.000000f, -0.579524f, 0.814955f, 0.375000f, 0.000000f, + -0.924381f, 0.279824f, 0.084375f, 0.005349f, -0.872040f, 0.489406f, 0.250000f, 0.125000f, + -0.924646f, 0.297807f, 0.105469f, 0.003808f, -0.580397f, 0.814324f, 0.375000f, 0.125000f, + -0.924951f, 0.318420f, 0.112500f, 0.000000f, -0.000000f, 1.000000f, 0.500000f, 0.125000f, + -1.047684f, 0.295782f, 0.105469f, 0.017593f, -0.580836f, 0.813830f, 0.375000f, 0.250000f, + -1.035507f, 0.265501f, 0.049219f, 0.025883f, -0.976801f, 0.212578f, 0.125000f, 0.250000f, + -1.127832f, 0.256567f, -0.000000f, 0.068483f, -0.997652f, 0.000000f, 0.000000f, 0.375000f, + -1.131235f, 0.261146f, 0.049219f, 0.068616f, -0.974722f, 0.212623f, 0.125000f, 0.375000f, + -1.140207f, 0.273219f, 0.084375f, 0.065384f, -0.869606f, 0.489398f, 0.250000f, 0.375000f, + -1.210815f, 0.252667f, 0.049219f, 0.148598f, -0.965146f, 0.215435f, 0.125000f, 0.500000f, + -1.047684f, 0.295782f, 0.105469f, 0.017593f, -0.580836f, 0.813830f, 0.375000f, 0.250000f, + -1.140207f, 0.273219f, 0.084375f, 0.065384f, -0.869606f, 0.489398f, 0.250000f, 0.375000f, + -1.152891f, 0.290286f, 0.105469f, 0.046704f, -0.577184f, 0.815278f, 0.375000f, 0.375000f, + -1.167432f, 0.309851f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.375000f, + -1.239868f, 0.279584f, 0.105469f, 0.099732f, -0.560496f, 0.822130f, 0.375000f, 0.500000f, + -0.757812f, 0.357422f, 0.084375f, 0.000000f, 0.871576f, 0.490261f, 0.750000f, 0.000000f, + -1.055859f, 0.316113f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.250000f, + -1.071167f, 0.354181f, 0.084375f, -0.031326f, 0.872200f, 0.488145f, 0.750000f, 0.250000f, + -1.078125f, 0.371484f, -0.000000f, -0.037474f, 0.999298f, 0.000000f, 1.000000f, 0.250000f, + -1.295898f, 0.331494f, 0.084375f, -0.180412f, 0.841138f, 0.509842f, 0.750000f, 0.500000f, + -0.765820f, 0.339404f, 0.105469f, 0.000000f, 0.579524f, 0.814955f, 0.625000f, 0.000000f, + -0.924951f, 0.318420f, 0.112500f, 0.000000f, -0.000000f, 1.000000f, 0.500000f, 0.125000f, + -0.925256f, 0.339034f, 0.105469f, -0.004308f, 0.580398f, 0.814321f, 0.625000f, 0.125000f, + -0.925522f, 0.357017f, 0.084375f, -0.006764f, 0.872035f, 0.489397f, 0.750000f, 0.125000f, + -1.064035f, 0.336445f, 0.105469f, -0.020004f, 0.580169f, 0.814250f, 0.625000f, 0.250000f, + -0.752148f, 0.370166f, 0.049219f, 0.000000f, 0.976900f, 0.213697f, 0.875000f, 0.000000f, + -0.925522f, 0.357017f, 0.084375f, -0.006764f, 0.872035f, 0.489398f, 0.750000f, 0.125000f, + -0.925710f, 0.369736f, 0.049219f, -0.007768f, 0.976972f, 0.213224f, 0.875000f, 0.125000f, + -0.925781f, 0.374561f, -0.000000f, -0.008035f, 0.999968f, 0.000000f, 1.000000f, 0.125000f, + -1.076211f, 0.366726f, 0.049219f, -0.036201f, 0.976302f, 0.213364f, 0.875000f, 0.250000f, + -1.064035f, 0.336445f, 0.105469f, -0.020004f, 0.580169f, 0.814250f, 0.625000f, 0.250000f, + -1.167432f, 0.309851f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.375000f, + -1.181972f, 0.329416f, 0.105469f, -0.053190f, 0.573905f, 0.817192f, 0.625000f, 0.375000f, + -1.194656f, 0.346484f, 0.084375f, -0.084210f, 0.865181f, 0.494338f, 0.750000f, 0.375000f, + -1.278882f, 0.315729f, 0.105469f, -0.112865f, 0.550447f, 0.827206f, 0.625000f, 0.500000f, + -1.076211f, 0.366726f, 0.049219f, -0.036201f, 0.976302f, 0.213364f, 0.875000f, 0.250000f, + -1.194656f, 0.346484f, 0.084375f, -0.084210f, 0.865181f, 0.494339f, 0.750000f, 0.375000f, + -1.203628f, 0.358556f, 0.049219f, -0.097201f, 0.971485f, 0.216262f, 0.875000f, 0.375000f, + -1.207031f, 0.363135f, -0.000000f, -0.100735f, 0.994913f, 0.000000f, 1.000000f, 0.375000f, + -1.307935f, 0.342645f, 0.049219f, -0.211316f, 0.951005f, 0.225686f, 0.875000f, 0.500000f, + -1.222852f, 0.263818f, 0.084375f, 0.140206f, -0.856814f, 0.496198f, 0.250000f, 0.500000f, + -1.313281f, 0.215039f, -0.000000f, 0.546885f, -0.837207f, 0.000000f, 0.000000f, 0.750000f, + -1.335132f, 0.225201f, 0.084375f, 0.483435f, -0.674422f, 0.558073f, 0.250000f, 0.750000f, + -1.383203f, 0.247559f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.750000f, + -1.373438f, 0.150000f, 0.084375f, 0.800000f, 0.000000f, 0.600000f, 0.250000f, 1.000000f, + -1.210815f, 0.252667f, 0.049219f, 0.148598f, -0.965146f, 0.215435f, 0.125000f, 0.500000f, + -1.268262f, 0.235034f, -0.000000f, 0.293811f, -0.955864f, 0.000000f, 0.000000f, 0.625000f, + -1.273687f, 0.238688f, 0.049219f, 0.293318f, -0.928882f, 0.226146f, 0.125000f, 0.625000f, + -1.287991f, 0.248321f, 0.084375f, 0.274428f, -0.809737f, 0.518667f, 0.250000f, 0.625000f, + -1.319290f, 0.217834f, 0.049219f, 0.540058f, -0.804093f, 0.248541f, 0.125000f, 0.750000f, + -1.239868f, 0.279584f, 0.105469f, 0.099732f, -0.560497f, 0.822130f, 0.375000f, 0.500000f, + -1.287991f, 0.248321f, 0.084375f, 0.274428f, -0.809736f, 0.518669f, 0.250000f, 0.625000f, + -1.308214f, 0.261940f, 0.105469f, 0.187187f, -0.510240f, 0.839414f, 0.375000f, 0.625000f, + -1.331396f, 0.277551f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.625000f, + -1.357529f, 0.235618f, 0.105469f, 0.310389f, -0.395752f, 0.864314f, 0.375000f, 0.750000f, + -1.319290f, 0.217834f, 0.049219f, 0.540058f, -0.804093f, 0.248541f, 0.125000f, 0.750000f, + -1.340723f, 0.187134f, -0.000000f, 0.868244f, -0.496138f, 0.000000f, 0.000000f, 0.875000f, + -1.347063f, 0.188729f, 0.049219f, 0.840433f, -0.466702f, 0.275432f, 0.125000f, 0.875000f, + -1.363779f, 0.192936f, 0.084375f, 0.713833f, -0.367656f, 0.596046f, 0.250000f, 0.875000f, + -1.356445f, 0.150000f, 0.049219f, 0.960000f, 0.000000f, 0.280000f, 0.125000f, 1.000000f, + -1.357529f, 0.235618f, 0.105469f, 0.310389f, -0.395752f, 0.864314f, 0.375000f, 0.750000f, + -1.363779f, 0.192936f, 0.084375f, 0.713834f, -0.367656f, 0.596045f, 0.250000f, 0.875000f, + -1.387411f, 0.198883f, 0.105469f, 0.426484f, -0.201800f, 0.881696f, 0.375000f, 0.875000f, + -1.414502f, 0.205701f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.875000f, + -1.397461f, 0.150000f, 0.105469f, 0.470589f, 0.000000f, 0.882353f, 0.375000f, 1.000000f, + -1.295898f, 0.331494f, 0.084375f, -0.180412f, 0.841138f, 0.509842f, 0.750000f, 0.500000f, + -1.383203f, 0.247559f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.750000f, + -1.431274f, 0.269916f, 0.084375f, -0.562646f, 0.585663f, 0.583462f, 0.750000f, 0.750000f, + -1.453125f, 0.280078f, -0.000000f, -0.711485f, 0.702701f, 0.000000f, 1.000000f, 0.750000f, + -1.476562f, 0.150000f, 0.084375f, -0.800000f, 0.000000f, 0.600000f, 0.750000f, 1.000000f, + -1.278882f, 0.315729f, 0.105469f, -0.112865f, 0.550447f, 0.827206f, 0.625000f, 0.500000f, + -1.331396f, 0.277551f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.625000f, + -1.354579f, 0.293163f, 0.105469f, -0.207595f, 0.488130f, 0.847722f, 0.625000f, 0.625000f, + -1.374802f, 0.306782f, 0.084375f, -0.343732f, 0.765920f, 0.543338f, 0.750000f, 0.625000f, + -1.408878f, 0.259499f, 0.105469f, -0.330606f, 0.361483f, 0.871797f, 0.625000f, 0.750000f, + -1.307935f, 0.342645f, 0.049219f, -0.211317f, 0.951005f, 0.225686f, 0.875000f, 0.500000f, + -1.374802f, 0.306782f, 0.084375f, -0.343732f, 0.765919f, 0.543338f, 0.750000f, 0.625000f, + -1.389106f, 0.316415f, 0.049219f, -0.407011f, 0.879764f, 0.245675f, 0.875000f, 0.625000f, + -1.394531f, 0.320068f, -0.000000f, -0.424434f, 0.905459f, 0.000000f, 1.000000f, 0.625000f, + -1.447116f, 0.277283f, 0.049219f, -0.680178f, 0.681081f, 0.271085f, 0.875000f, 0.750000f, + -1.408878f, 0.259499f, 0.105469f, -0.330606f, 0.361483f, 0.871797f, 0.625000f, 0.750000f, + -1.414502f, 0.205701f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.875000f, + -1.441593f, 0.212518f, 0.105469f, -0.434397f, 0.175246f, 0.883509f, 0.625000f, 0.875000f, + -1.465225f, 0.218465f, 0.084375f, -0.745462f, 0.283642f, 0.603187f, 0.750000f, 0.875000f, + -1.452539f, 0.150000f, 0.105469f, -0.470588f, 0.000000f, 0.882353f, 0.625000f, 1.000000f, + -1.447116f, 0.277283f, 0.049219f, -0.680178f, 0.681081f, 0.271085f, 0.875000f, 0.750000f, + -1.465225f, 0.218465f, 0.084375f, -0.745462f, 0.283642f, 0.603187f, 0.750000f, 0.875000f, + -1.481941f, 0.222672f, 0.049219f, -0.900243f, 0.331346f, 0.282440f, 0.875000f, 0.875000f, + -1.488281f, 0.224268f, -0.000000f, -0.940042f, 0.341058f, 0.000000f, 1.000000f, 0.875000f, + -1.493555f, 0.150000f, 0.049219f, -0.960000f, 0.000000f, 0.280000f, 0.875000f, 1.000000f, + -0.750000f, 0.375000f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, + -0.800000f, 0.262500f, -0.000000f, 0.000000f, -1.000000f, 0.000000f, 1.000000f, 0.000000f, + -1.500000f, 0.150000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 0.000000f, 1.000000f, + -1.350000f, 0.150000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 1.000000f, + -0.775000f, 0.318750f, -0.112500f, -0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.000000f, + -1.312500f, 0.346875f, -0.000000f, -0.219512f, 0.975610f, 0.000000f, 0.000000f, 0.500000f, + -1.259375f, 0.297656f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.500000f, + -1.206250f, 0.248438f, -0.000000f, 0.148341f, -0.988936f, 0.000000f, 1.000000f, 0.500000f, + -1.425000f, 0.150000f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 1.000000f, + -0.757812f, 0.357422f, -0.084375f, 0.000000f, 0.871576f, -0.490261f, 0.250000f, 0.000000f, + -1.078125f, 0.371484f, -0.000000f, -0.037474f, 0.999298f, 0.000000f, 0.000000f, 0.250000f, + -1.071167f, 0.354181f, -0.084375f, -0.031612f, 0.872168f, -0.488184f, 0.250000f, 0.250000f, + -1.055859f, 0.316113f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.250000f, + -1.295898f, 0.331494f, -0.084375f, -0.182095f, 0.840441f, -0.510393f, 0.250000f, 0.500000f, + -0.752148f, 0.370166f, -0.049219f, 0.000000f, 0.976900f, -0.213697f, 0.125000f, 0.000000f, + -0.925781f, 0.374561f, -0.000000f, -0.008035f, 0.999968f, 0.000000f, 0.000000f, 0.125000f, + -0.925710f, 0.369736f, -0.049219f, -0.007783f, 0.976972f, -0.213224f, 0.125000f, 0.125000f, + -0.925522f, 0.357017f, -0.084375f, -0.006764f, 0.872035f, -0.489398f, 0.250000f, 0.125000f, + -1.076211f, 0.366726f, -0.049219f, -0.036277f, 0.976298f, -0.213369f, 0.125000f, 0.250000f, + -0.765820f, 0.339404f, -0.105469f, 0.000000f, 0.579524f, -0.814955f, 0.375000f, 0.000000f, + -0.925522f, 0.357017f, -0.084375f, -0.006764f, 0.872035f, -0.489397f, 0.250000f, 0.125000f, + -0.925256f, 0.339034f, -0.105469f, -0.004329f, 0.580399f, -0.814321f, 0.375000f, 0.125000f, + -0.924951f, 0.318420f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.125000f, + -1.064035f, 0.336445f, -0.105469f, -0.020108f, 0.580140f, -0.814268f, 0.375000f, 0.250000f, + -1.076211f, 0.366726f, -0.049219f, -0.036277f, 0.976298f, -0.213369f, 0.125000f, 0.250000f, + -1.207031f, 0.363135f, -0.000000f, -0.100735f, 0.994913f, 0.000000f, 0.000000f, 0.375000f, + -1.203628f, 0.358556f, -0.049219f, -0.097411f, 0.971458f, -0.216288f, 0.125000f, 0.375000f, + -1.194656f, 0.346484f, -0.084375f, -0.084210f, 0.865181f, -0.494339f, 0.250000f, 0.375000f, + -1.307935f, 0.342645f, -0.049219f, -0.211778f, 0.950885f, -0.225758f, 0.125000f, 0.500000f, + -1.064035f, 0.336445f, -0.105469f, -0.020108f, 0.580141f, -0.814268f, 0.375000f, 0.250000f, + -1.194656f, 0.346484f, -0.084375f, -0.084210f, 0.865181f, -0.494338f, 0.250000f, 0.375000f, + -1.181972f, 0.329416f, -0.105469f, -0.053470f, 0.573763f, -0.817274f, 0.375000f, 0.375000f, + -1.167432f, 0.309851f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.375000f, + -1.278882f, 0.315729f, -0.105469f, -0.113428f, 0.550012f, -0.827418f, 0.375000f, 0.500000f, + -0.792188f, 0.280078f, -0.084375f, -0.000000f, -0.871576f, -0.490261f, 0.750000f, 0.000000f, + -1.055859f, 0.316113f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.250000f, + -1.040552f, 0.278046f, -0.084375f, 0.024919f, -0.872908f, -0.487248f, 0.750000f, 0.250000f, + -1.033594f, 0.260742f, -0.000000f, 0.025853f, -0.999666f, 0.000000f, 1.000000f, 0.250000f, + -1.222852f, 0.263818f, -0.084375f, 0.142803f, -0.855858f, -0.497107f, 0.750000f, 0.500000f, + -0.784180f, 0.298096f, -0.105469f, -0.000000f, -0.579524f, -0.814955f, 0.625000f, 0.000000f, + -0.924951f, 0.318420f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.125000f, + -0.924646f, 0.297807f, -0.105469f, 0.003835f, -0.580398f, -0.814324f, 0.625000f, 0.125000f, + -0.924381f, 0.279824f, -0.084375f, 0.005349f, -0.872040f, -0.489406f, 0.750000f, 0.125000f, + -1.047684f, 0.295782f, -0.105469f, 0.017725f, -0.580800f, -0.813853f, 0.625000f, 0.250000f, + -0.797852f, 0.267334f, -0.049219f, -0.000000f, -0.976900f, -0.213697f, 0.875000f, 0.000000f, + -0.924381f, 0.279824f, -0.084375f, 0.005349f, -0.872040f, -0.489406f, 0.750000f, 0.125000f, + -0.924192f, 0.267105f, -0.049219f, 0.005668f, -0.976986f, -0.213230f, 0.875000f, 0.125000f, + -0.924121f, 0.262280f, -0.000000f, 0.005639f, -0.999984f, 0.000000f, 1.000000f, 0.125000f, + -1.035507f, 0.265501f, -0.049219f, 0.026018f, -0.976795f, -0.212588f, 0.875000f, 0.250000f, + -1.047684f, 0.295782f, -0.105469f, 0.017725f, -0.580800f, -0.813853f, 0.625000f, 0.250000f, + -1.167432f, 0.309851f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.375000f, + -1.152891f, 0.290286f, -0.105469f, 0.047058f, -0.577006f, -0.815383f, 0.625000f, 0.375000f, + -1.140207f, 0.273219f, -0.084375f, 0.065384f, -0.869606f, -0.489398f, 0.750000f, 0.375000f, + -1.239868f, 0.279584f, -0.105469f, 0.100453f, -0.559950f, -0.822414f, 0.625000f, 0.500000f, + -1.035507f, 0.265501f, -0.049219f, 0.026018f, -0.976795f, -0.212588f, 0.875000f, 0.250000f, + -1.140207f, 0.273219f, -0.084375f, 0.065384f, -0.869606f, -0.489398f, 0.750000f, 0.375000f, + -1.131235f, 0.261146f, -0.049219f, 0.068986f, -0.974686f, -0.212671f, 0.875000f, 0.375000f, + -1.127832f, 0.256567f, -0.000000f, 0.068483f, -0.997652f, 0.000000f, 1.000000f, 0.375000f, + -1.210815f, 0.252667f, -0.049219f, 0.149411f, -0.964989f, -0.215573f, 0.875000f, 0.500000f, + -1.295898f, 0.331494f, -0.084375f, -0.182096f, 0.840441f, -0.510393f, 0.250000f, 0.500000f, + -1.453125f, 0.280078f, -0.000000f, -0.711485f, 0.702701f, 0.000000f, 0.000000f, 0.750000f, + -1.431274f, 0.269916f, -0.084375f, -0.565483f, 0.582130f, -0.584255f, 0.250000f, 0.750000f, + -1.383203f, 0.247559f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.750000f, + -1.476562f, 0.150000f, -0.084375f, -0.800000f, -0.000000f, -0.600000f, 0.250000f, 1.000000f, + -1.307935f, 0.342645f, -0.049219f, -0.211779f, 0.950885f, -0.225758f, 0.125000f, 0.500000f, + -1.394531f, 0.320068f, -0.000000f, -0.424434f, 0.905459f, 0.000000f, 0.000000f, 0.625000f, + -1.389106f, 0.316415f, -0.049219f, -0.407810f, 0.879359f, -0.245803f, 0.125000f, 0.625000f, + -1.374802f, 0.306782f, -0.084375f, -0.343732f, 0.765919f, -0.543338f, 0.250000f, 0.625000f, + -1.447116f, 0.277283f, -0.049219f, -0.681018f, 0.680194f, -0.271202f, 0.125000f, 0.750000f, + -1.278882f, 0.315729f, -0.105469f, -0.113428f, 0.550012f, -0.827418f, 0.375000f, 0.500000f, + -1.374802f, 0.306782f, -0.084375f, -0.343732f, 0.765920f, -0.543338f, 0.250000f, 0.625000f, + -1.354579f, 0.293163f, -0.105469f, -0.208448f, 0.487192f, -0.848053f, 0.375000f, 0.625000f, + -1.331396f, 0.277551f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.625000f, + -1.408878f, 0.259499f, -0.105469f, -0.331408f, 0.360091f, -0.872068f, 0.375000f, 0.750000f, + -1.447116f, 0.277283f, -0.049219f, -0.681018f, 0.680194f, -0.271202f, 0.125000f, 0.750000f, + -1.488281f, 0.224268f, -0.000000f, -0.940042f, 0.341058f, 0.000000f, 0.000000f, 0.875000f, + -1.481941f, 0.222672f, -0.049219f, -0.900521f, 0.330571f, -0.282462f, 0.125000f, 0.875000f, + -1.465225f, 0.218465f, -0.084375f, -0.745462f, 0.283642f, -0.603187f, 0.250000f, 0.875000f, + -1.493555f, 0.150000f, -0.049219f, -0.960000f, -0.000000f, -0.280000f, 0.125000f, 1.000000f, + -1.408878f, 0.259499f, -0.105469f, -0.331408f, 0.360091f, -0.872068f, 0.375000f, 0.750000f, + -1.465225f, 0.218465f, -0.084375f, -0.745462f, 0.283642f, -0.603187f, 0.250000f, 0.875000f, + -1.441593f, 0.212518f, -0.105469f, -0.434695f, 0.174222f, -0.883565f, 0.375000f, 0.875000f, + -1.414502f, 0.205701f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.875000f, + -1.452539f, 0.150000f, -0.105469f, -0.470588f, -0.000000f, -0.882353f, 0.375000f, 1.000000f, + -1.222852f, 0.263818f, -0.084375f, 0.142803f, -0.855858f, -0.497107f, 0.750000f, 0.500000f, + -1.383203f, 0.247559f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.750000f, + -1.335132f, 0.225201f, -0.084375f, 0.489273f, -0.668472f, -0.560140f, 0.750000f, 0.750000f, + -1.313281f, 0.215039f, -0.000000f, 0.546885f, -0.837207f, 0.000000f, 1.000000f, 0.750000f, + -1.373438f, 0.150000f, -0.084375f, 0.800000f, 0.000000f, -0.600000f, 0.750000f, 1.000000f, + -1.239868f, 0.279584f, -0.105469f, 0.100453f, -0.559950f, -0.822414f, 0.625000f, 0.500000f, + -1.331396f, 0.277551f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.625000f, + -1.308214f, 0.261940f, -0.105469f, 0.188332f, -0.509017f, -0.839900f, 0.625000f, 0.625000f, + -1.287991f, 0.248321f, -0.084375f, 0.274428f, -0.809736f, -0.518669f, 0.750000f, 0.625000f, + -1.357529f, 0.235618f, -0.105469f, 0.311577f, -0.393781f, -0.864787f, 0.625000f, 0.750000f, + -1.210815f, 0.252667f, -0.049219f, 0.149411f, -0.964989f, -0.215573f, 0.875000f, 0.500000f, + -1.287991f, 0.248321f, -0.084375f, 0.274428f, -0.809737f, -0.518667f, 0.750000f, 0.625000f, + -1.273687f, 0.238688f, -0.049219f, 0.294850f, -0.928329f, -0.226427f, 0.875000f, 0.625000f, + -1.268262f, 0.235034f, -0.000000f, 0.293811f, -0.955864f, 0.000000f, 1.000000f, 0.625000f, + -1.319290f, 0.217834f, -0.049219f, 0.542231f, -0.802508f, -0.248931f, 0.875000f, 0.750000f, + -1.357529f, 0.235618f, -0.105469f, 0.311577f, -0.393780f, -0.864787f, 0.625000f, 0.750000f, + -1.414502f, 0.205701f, -0.112500f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 0.875000f, + -1.387411f, 0.198883f, -0.105469f, 0.426972f, -0.200197f, -0.881825f, 0.625000f, 0.875000f, + -1.363779f, 0.192936f, -0.084375f, 0.713834f, -0.367656f, -0.596045f, 0.750000f, 0.875000f, + -1.397461f, 0.150000f, -0.105469f, 0.470589f, 0.000000f, -0.882353f, 0.625000f, 1.000000f, + -1.319290f, 0.217834f, -0.049219f, 0.542231f, -0.802508f, -0.248931f, 0.875000f, 0.750000f, + -1.363779f, 0.192936f, -0.084375f, 0.713833f, -0.367656f, -0.596046f, 0.750000f, 0.875000f, + -1.347063f, 0.188729f, -0.049219f, 0.841606f, -0.464481f, -0.275602f, 0.875000f, 0.875000f, + -1.340723f, 0.187134f, -0.000000f, 0.868244f, -0.496138f, 0.000000f, 1.000000f, 0.875000f, + -1.356445f, 0.150000f, -0.049219f, 0.960000f, 0.000000f, -0.280000f, 0.875000f, 1.000000f, + -1.350000f, 0.150000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f, + -1.500000f, 0.150000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 1.000000f, 0.000000f, + -1.000000f, -0.300000f, -0.000000f, 0.410365f, 0.911922f, -0.000000f, 0.000000f, 1.000000f, + -0.950000f, -0.450000f, -0.000000f, -0.410365f, -0.911922f, -0.000000f, 1.000000f, 1.000000f, + -1.425000f, 0.150000f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.000000f, + -1.268750f, -0.075000f, -0.000000f, 0.832050f, 0.554700f, -0.000000f, 0.000000f, 0.500000f, + -1.317188f, -0.123047f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.500000f, + -1.365625f, -0.171094f, -0.000000f, -0.743581f, -0.668646f, -0.000000f, 1.000000f, 0.500000f, + -0.975000f, -0.375000f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 1.000000f, + -1.373438f, 0.150000f, 0.084375f, 0.800000f, 0.000000f, 0.600000f, 0.250000f, 0.000000f, + -1.330469f, 0.048047f, -0.000000f, 0.945778f, 0.324813f, -0.000000f, 0.000000f, 0.250000f, + -1.351770f, 0.038205f, 0.084375f, 0.754441f, 0.269277f, 0.598589f, 0.250000f, 0.250000f, + -1.398633f, 0.016553f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.250000f, + -1.283887f, -0.090015f, 0.084375f, 0.678042f, 0.478207f, 0.558191f, 0.250000f, 0.500000f, + -1.356445f, 0.150000f, 0.049219f, 0.960000f, 0.000000f, 0.280000f, 0.125000f, 0.000000f, + -1.345215f, 0.102979f, -0.000000f, 0.982777f, 0.184796f, -0.000000f, 0.000000f, 0.125000f, + -1.351511f, 0.101413f, 0.049219f, 0.943027f, 0.178069f, 0.281055f, 0.125000f, 0.125000f, + -1.368111f, 0.097285f, 0.084375f, 0.784625f, 0.149799f, 0.601602f, 0.250000f, 0.125000f, + -1.336327f, 0.045340f, 0.049219f, 0.907104f, 0.315107f, 0.279051f, 0.125000f, 0.250000f, + -1.397461f, 0.150000f, 0.105469f, 0.470589f, 0.000000f, 0.882353f, 0.375000f, 0.000000f, + -1.368111f, 0.097285f, 0.084375f, 0.784624f, 0.149799f, 0.601603f, 0.250000f, 0.125000f, + -1.391579f, 0.091449f, 0.105469f, 0.460503f, 0.089006f, 0.883184f, 0.375000f, 0.125000f, + -1.418481f, 0.084760f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.125000f, + -1.373604f, 0.028117f, 0.105469f, 0.441858f, 0.163868f, 0.881991f, 0.375000f, 0.250000f, + -1.336327f, 0.045340f, 0.049219f, 0.907105f, 0.315106f, 0.279051f, 0.125000f, 0.250000f, + -1.305176f, -0.012158f, -0.000000f, 0.895694f, 0.444671f, -0.000000f, 0.000000f, 0.375000f, + -1.310318f, -0.015685f, 0.049219f, 0.859856f, 0.433367f, 0.269890f, 0.125000f, 0.375000f, + -1.323875f, -0.024981f, 0.084375f, 0.717810f, 0.376810f, 0.585460f, 0.250000f, 0.375000f, + -1.272913f, -0.079129f, 0.049219f, 0.801010f, 0.542879f, 0.252321f, 0.125000f, 0.500000f, + -1.373604f, 0.028117f, 0.105469f, 0.441858f, 0.163868f, 0.881991f, 0.375000f, 0.250000f, + -1.323875f, -0.024981f, 0.084375f, 0.717810f, 0.376810f, 0.585460f, 0.250000f, 0.375000f, + -1.343043f, -0.038125f, 0.105469f, 0.423804f, 0.233330f, 0.875184f, 0.375000f, 0.375000f, + -1.365015f, -0.053192f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.375000f, + -1.299402f, -0.105405f, 0.105469f, 0.408072f, 0.304992f, 0.860498f, 0.375000f, 0.500000f, + -1.476562f, 0.150000f, 0.084375f, -0.800000f, 0.000000f, 0.600000f, 0.750000f, 0.000000f, + -1.398633f, 0.016553f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.250000f, + -1.445496f, -0.005099f, 0.084375f, -0.741739f, -0.300819f, 0.599442f, 0.750000f, 0.250000f, + -1.466797f, -0.014941f, -0.000000f, -0.923524f, -0.383540f, -0.000000f, 1.000000f, 0.250000f, + -1.350488f, -0.156079f, 0.084375f, -0.625724f, -0.540260f, 0.562662f, 0.750000f, 0.500000f, + -1.452539f, 0.150000f, 0.105469f, -0.470588f, 0.000000f, 0.882353f, 0.625000f, 0.000000f, + -1.418481f, 0.084760f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.125000f, + -1.445384f, 0.078070f, 0.105469f, -0.460057f, -0.090956f, 0.883218f, 0.625000f, 0.125000f, + -1.468852f, 0.072234f, 0.084375f, -0.783295f, -0.156125f, 0.601726f, 0.750000f, 0.125000f, + -1.423662f, 0.004988f, 0.105469f, -0.437541f, -0.173581f, 0.882285f, 0.625000f, 0.250000f, + -1.493555f, 0.150000f, 0.049219f, -0.960000f, 0.000000f, 0.280000f, 0.875000f, 0.000000f, + -1.468852f, 0.072234f, 0.084375f, -0.783295f, -0.156125f, 0.601726f, 0.750000f, 0.125000f, + -1.485452f, 0.068106f, 0.049219f, -0.940981f, -0.188412f, 0.281170f, 0.875000f, 0.125000f, + -1.491748f, 0.066541f, -0.000000f, -0.980463f, -0.196702f, -0.000000f, 1.000000f, 0.125000f, + -1.460939f, -0.012235f, 0.049219f, -0.887370f, -0.366235f, 0.280082f, 0.875000f, 0.250000f, + -1.423662f, 0.004988f, 0.105469f, -0.437541f, -0.173581f, 0.882285f, 0.625000f, 0.250000f, + -1.365015f, -0.053192f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.375000f, + -1.386987f, -0.068259f, 0.105469f, -0.412980f, -0.249957f, 0.875768f, 0.625000f, 0.375000f, + -1.406154f, -0.081403f, 0.084375f, -0.685340f, -0.430186f, 0.587579f, 0.750000f, 0.375000f, + -1.334973f, -0.140689f, 0.105469f, -0.389863f, -0.324451f, 0.861822f, 0.625000f, 0.500000f, + -1.460939f, -0.012235f, 0.049219f, -0.887370f, -0.366235f, 0.280082f, 0.875000f, 0.250000f, + -1.406154f, -0.081403f, 0.084375f, -0.685340f, -0.430186f, 0.587580f, 0.750000f, 0.375000f, + -1.419711f, -0.090700f, 0.049219f, -0.810168f, -0.519360f, 0.271832f, 0.875000f, 0.375000f, + -1.424854f, -0.094226f, -0.000000f, -0.839602f, -0.543202f, -0.000000f, 1.000000f, 0.375000f, + -1.361462f, -0.166965f, 0.049219f, -0.722234f, -0.642490f, 0.256095f, 0.875000f, 0.500000f, + -1.283887f, -0.090015f, 0.084375f, 0.678042f, 0.478207f, 0.558191f, 0.250000f, 0.500000f, + -1.160156f, -0.198047f, -0.000000f, 0.655687f, 0.755033f, -0.000000f, 0.000000f, 0.750000f, + -1.165466f, -0.216586f, 0.084375f, 0.553444f, 0.668090f, 0.497350f, 0.250000f, 0.750000f, + -1.177148f, -0.257373f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.750000f, + -0.992188f, -0.323438f, 0.084375f, 0.354770f, 0.788378f, 0.502591f, 0.250000f, 1.000000f, + -1.272913f, -0.079129f, 0.049219f, 0.801011f, 0.542878f, 0.252321f, 0.125000f, 0.500000f, + -1.220605f, -0.137842f, -0.000000f, 0.752687f, 0.658378f, -0.000000f, 0.000000f, 0.625000f, + -1.223536f, -0.142460f, 0.049219f, 0.726886f, 0.646097f, 0.232800f, 0.125000f, 0.625000f, + -1.231264f, -0.154636f, 0.084375f, 0.623037f, 0.578584f, 0.526370f, 0.250000f, 0.625000f, + -1.161617f, -0.203145f, 0.049219f, 0.635572f, 0.742022f, 0.213194f, 0.125000f, 0.750000f, + -1.299402f, -0.105405f, 0.105469f, 0.408072f, 0.304992f, 0.860498f, 0.375000f, 0.500000f, + -1.231264f, -0.154636f, 0.084375f, 0.623037f, 0.578584f, 0.526370f, 0.250000f, 0.625000f, + -1.242188f, -0.171850f, 0.105469f, 0.386230f, 0.377876f, 0.841449f, 0.375000f, 0.625000f, + -1.254712f, -0.191583f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.625000f, + -1.170909f, -0.235589f, 0.105469f, 0.355340f, 0.450452f, 0.819040f, 0.375000f, 0.750000f, + -1.161617f, -0.203145f, 0.049219f, 0.635572f, 0.742022f, 0.213194f, 0.125000f, 0.750000f, + -1.086816f, -0.252979f, -0.000000f, 0.540758f, 0.841178f, -0.000000f, 0.000000f, 0.875000f, + -1.086579f, -0.258651f, 0.049219f, 0.525642f, 0.825088f, 0.207198f, 0.125000f, 0.875000f, + -1.085954f, -0.273607f, 0.084375f, 0.462854f, 0.744576f, 0.481012f, 0.250000f, 0.875000f, + -0.997852f, -0.306445f, 0.049219f, 0.400263f, 0.889473f, 0.220515f, 0.125000f, 1.000000f, + -1.170909f, -0.235589f, 0.105469f, 0.355340f, 0.450452f, 0.819040f, 0.375000f, 0.750000f, + -1.085954f, -0.273607f, 0.084375f, 0.462854f, 0.744576f, 0.481012f, 0.250000f, 0.875000f, + -1.085071f, -0.294750f, 0.105469f, 0.302868f, 0.501527f, 0.810396f, 0.375000f, 0.875000f, + -1.084058f, -0.318988f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.875000f, + -0.984180f, -0.347461f, 0.105469f, 0.232611f, 0.516912f, 0.823829f, 0.375000f, 1.000000f, + -1.350488f, -0.156079f, 0.084375f, -0.625724f, -0.540260f, 0.562662f, 0.750000f, 0.500000f, + -1.177148f, -0.257373f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.750000f, + -1.188831f, -0.298160f, 0.084375f, -0.492641f, -0.706153f, 0.508579f, 0.750000f, 0.750000f, + -1.194141f, -0.316699f, -0.000000f, -0.558748f, -0.829337f, -0.000000f, 1.000000f, 0.750000f, + -0.957812f, -0.426562f, 0.084375f, -0.354770f, -0.788378f, 0.502591f, 0.750000f, 1.000000f, + -1.334973f, -0.140689f, 0.105469f, -0.389864f, -0.324451f, 0.861822f, 0.625000f, 0.500000f, + -1.254712f, -0.191583f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.625000f, + -1.267236f, -0.211316f, 0.105469f, -0.362855f, -0.394979f, 0.843995f, 0.625000f, 0.625000f, + -1.278160f, -0.228531f, 0.084375f, -0.558837f, -0.634504f, 0.533952f, 0.750000f, 0.625000f, + -1.183388f, -0.279157f, 0.105469f, -0.331427f, -0.460343f, 0.823553f, 0.625000f, 0.750000f, + -1.361462f, -0.166965f, 0.049219f, -0.722234f, -0.642490f, 0.256095f, 0.875000f, 0.500000f, + -1.278160f, -0.228531f, 0.084375f, -0.558837f, -0.634504f, 0.533953f, 0.750000f, 0.625000f, + -1.285887f, -0.240706f, 0.049219f, -0.632854f, -0.736497f, 0.238887f, 0.875000f, 0.625000f, + -1.288818f, -0.245325f, -0.000000f, -0.647649f, -0.761939f, -0.000000f, 1.000000f, 0.625000f, + -1.192680f, -0.311601f, 0.049219f, -0.548245f, -0.806248f, 0.222240f, 0.875000f, 0.750000f, + -1.183388f, -0.279157f, 0.105469f, -0.331427f, -0.460343f, 0.823553f, 0.625000f, 0.750000f, + -1.084058f, -0.318988f, 0.112500f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.875000f, + -1.083045f, -0.343226f, 0.105469f, -0.286990f, -0.503756f, 0.814780f, 0.625000f, 0.875000f, + -1.082161f, -0.364370f, 0.084375f, -0.423555f, -0.760495f, 0.492187f, 0.750000f, 0.875000f, + -0.965820f, -0.402539f, 0.105469f, -0.232611f, -0.516913f, 0.823829f, 0.625000f, 1.000000f, + -1.192680f, -0.311601f, 0.049219f, -0.548245f, -0.806248f, 0.222240f, 0.875000f, 0.750000f, + -1.082161f, -0.364370f, 0.084375f, -0.423555f, -0.760495f, 0.492188f, 0.750000f, 0.875000f, + -1.081536f, -0.379325f, 0.049219f, -0.470388f, -0.855760f, 0.215428f, 0.875000f, 0.875000f, + -1.081299f, -0.384998f, -0.000000f, -0.479572f, -0.877503f, -0.000000f, 1.000000f, 0.875000f, + -0.952148f, -0.443555f, 0.049219f, -0.400263f, -0.889473f, 0.220515f, 0.875000f, 1.000000f, + -1.500000f, 0.150000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 0.000000f, 0.000000f, + -1.350000f, 0.150000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 0.000000f, + -0.950000f, -0.450000f, -0.000000f, -0.410365f, -0.911922f, -0.000000f, 0.000000f, 1.000000f, + -1.000000f, -0.300000f, -0.000000f, 0.410365f, 0.911922f, -0.000000f, 1.000000f, 1.000000f, + -1.425000f, 0.150000f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.000000f, + -1.365625f, -0.171094f, -0.000000f, -0.743581f, -0.668646f, -0.000000f, 0.000000f, 0.500000f, + -1.317188f, -0.123047f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.500000f, + -1.268750f, -0.075000f, -0.000000f, 0.832050f, 0.554700f, -0.000000f, 1.000000f, 0.500000f, + -0.975000f, -0.375000f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 1.000000f, + -1.476562f, 0.150000f, -0.084375f, -0.800000f, -0.000000f, -0.600000f, 0.250000f, 0.000000f, + -1.466797f, -0.014941f, -0.000000f, -0.923524f, -0.383540f, -0.000000f, 0.000000f, 0.250000f, + -1.445496f, -0.005099f, -0.084375f, -0.741200f, -0.302104f, -0.599462f, 0.250000f, 0.250000f, + -1.398633f, 0.016553f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.250000f, + -1.350488f, -0.156079f, -0.084375f, -0.623402f, -0.542826f, -0.562770f, 0.250000f, 0.500000f, + -1.493555f, 0.150000f, -0.049219f, -0.960000f, -0.000000f, -0.280000f, 0.125000f, 0.000000f, + -1.491748f, 0.066541f, -0.000000f, -0.980463f, -0.196702f, -0.000000f, 0.000000f, 0.125000f, + -1.485452f, 0.068106f, -0.049219f, -0.940967f, -0.188477f, -0.281171f, 0.125000f, 0.125000f, + -1.468852f, 0.072234f, -0.084375f, -0.783295f, -0.156125f, -0.601726f, 0.250000f, 0.125000f, + -1.460939f, -0.012235f, -0.049219f, -0.887220f, -0.366595f, -0.280086f, 0.125000f, 0.250000f, + -1.452539f, 0.150000f, -0.105469f, -0.470588f, -0.000000f, -0.882353f, 0.375000f, 0.000000f, + -1.468852f, 0.072234f, -0.084375f, -0.783295f, -0.156125f, -0.601726f, 0.250000f, 0.125000f, + -1.445384f, 0.078070f, -0.105469f, -0.460039f, -0.091036f, -0.883219f, 0.375000f, 0.125000f, + -1.418481f, 0.084760f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.125000f, + -1.423662f, 0.004988f, -0.105469f, -0.437356f, -0.173995f, -0.882296f, 0.375000f, 0.250000f, + -1.460939f, -0.012235f, -0.049219f, -0.887221f, -0.366595f, -0.280086f, 0.125000f, 0.250000f, + -1.424854f, -0.094226f, -0.000000f, -0.839602f, -0.543202f, -0.000000f, 0.000000f, 0.375000f, + -1.419711f, -0.090700f, -0.049219f, -0.809767f, -0.519983f, -0.271837f, 0.125000f, 0.375000f, + -1.406154f, -0.081403f, -0.084375f, -0.685340f, -0.430186f, -0.587580f, 0.250000f, 0.375000f, + -1.361462f, -0.166965f, -0.049219f, -0.721599f, -0.643198f, -0.256108f, 0.125000f, 0.500000f, + -1.423662f, 0.004988f, -0.105469f, -0.437356f, -0.173994f, -0.882296f, 0.375000f, 0.250000f, + -1.406154f, -0.081403f, -0.084375f, -0.685340f, -0.430186f, -0.587579f, 0.250000f, 0.375000f, + -1.386987f, -0.068259f, -0.105469f, -0.412506f, -0.250677f, -0.875785f, 0.375000f, 0.375000f, + -1.365015f, -0.053192f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.375000f, + -1.334973f, -0.140689f, -0.105469f, -0.389066f, -0.325292f, -0.861866f, 0.375000f, 0.500000f, + -1.373438f, 0.150000f, -0.084375f, 0.800000f, 0.000000f, -0.600000f, 0.750000f, 0.000000f, + -1.398633f, 0.016553f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.250000f, + -1.351770f, 0.038205f, -0.084375f, 0.753631f, 0.271366f, -0.598666f, 0.750000f, 0.250000f, + -1.330469f, 0.048047f, -0.000000f, 0.945778f, 0.324813f, -0.000000f, 1.000000f, 0.250000f, + -1.283887f, -0.090015f, -0.084375f, 0.674847f, 0.482249f, -0.558585f, 0.750000f, 0.500000f, + -1.397461f, 0.150000f, -0.105469f, 0.470589f, 0.000000f, -0.882353f, 0.625000f, 0.000000f, + -1.418481f, 0.084760f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.125000f, + -1.391579f, 0.091449f, -0.105469f, 0.460478f, 0.089118f, -0.883187f, 0.625000f, 0.125000f, + -1.368111f, 0.097285f, -0.084375f, 0.784624f, 0.149799f, -0.601603f, 0.750000f, 0.125000f, + -1.373604f, 0.028117f, -0.105469f, 0.441621f, 0.164404f, -0.882010f, 0.625000f, 0.250000f, + -1.356445f, 0.150000f, -0.049219f, 0.960000f, 0.000000f, -0.280000f, 0.875000f, 0.000000f, + -1.368111f, 0.097285f, -0.084375f, 0.784625f, 0.149799f, -0.601602f, 0.750000f, 0.125000f, + -1.351511f, 0.101413f, -0.049219f, 0.942997f, 0.178224f, -0.281057f, 0.875000f, 0.125000f, + -1.345215f, 0.102979f, -0.000000f, 0.982777f, 0.184796f, -0.000000f, 1.000000f, 0.125000f, + -1.336327f, 0.045340f, -0.049219f, 0.906857f, 0.315800f, -0.279070f, 0.875000f, 0.250000f, + -1.373604f, 0.028117f, -0.105469f, 0.441621f, 0.164404f, -0.882010f, 0.625000f, 0.250000f, + -1.365015f, -0.053192f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.375000f, + -1.343043f, -0.038125f, -0.105469f, 0.423222f, 0.234233f, -0.875224f, 0.625000f, 0.375000f, + -1.323875f, -0.024981f, -0.084375f, 0.717810f, 0.376810f, -0.585460f, 0.750000f, 0.375000f, + -1.299402f, -0.105405f, -0.105469f, 0.407093f, 0.306052f, -0.860586f, 0.625000f, 0.500000f, + -1.336327f, 0.045340f, -0.049219f, 0.906858f, 0.315799f, -0.279070f, 0.875000f, 0.250000f, + -1.323875f, -0.024981f, -0.084375f, 0.717810f, 0.376810f, -0.585460f, 0.750000f, 0.375000f, + -1.310318f, -0.015685f, -0.049219f, 0.859273f, 0.434496f, -0.269932f, 0.875000f, 0.375000f, + -1.305176f, -0.012158f, -0.000000f, 0.895694f, 0.444671f, -0.000000f, 1.000000f, 0.375000f, + -1.272913f, -0.079129f, -0.049219f, 0.800087f, 0.544204f, -0.252394f, 0.875000f, 0.500000f, + -1.350488f, -0.156079f, -0.084375f, -0.623402f, -0.542826f, -0.562770f, 0.250000f, 0.500000f, + -1.194141f, -0.316699f, -0.000000f, -0.558748f, -0.829337f, -0.000000f, 0.000000f, 0.750000f, + -1.188831f, -0.298160f, -0.084375f, -0.490104f, -0.707628f, -0.508980f, 0.250000f, 0.750000f, + -1.177148f, -0.257373f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.750000f, + -0.957812f, -0.426562f, -0.084375f, -0.354770f, -0.788378f, -0.502591f, 0.250000f, 1.000000f, + -1.361462f, -0.166965f, -0.049219f, -0.721599f, -0.643198f, -0.256108f, 0.125000f, 0.500000f, + -1.288818f, -0.245325f, -0.000000f, -0.647649f, -0.761939f, -0.000000f, 0.000000f, 0.625000f, + -1.285887f, -0.240706f, -0.049219f, -0.632123f, -0.737115f, -0.238917f, 0.125000f, 0.625000f, + -1.278160f, -0.228531f, -0.084375f, -0.558837f, -0.634504f, -0.533953f, 0.250000f, 0.625000f, + -1.192680f, -0.311601f, -0.049219f, -0.547600f, -0.806671f, -0.222295f, 0.125000f, 0.750000f, + -1.334973f, -0.140689f, -0.105469f, -0.389066f, -0.325292f, -0.861866f, 0.375000f, 0.500000f, + -1.278160f, -0.228531f, -0.084375f, -0.558837f, -0.634504f, -0.533952f, 0.250000f, 0.625000f, + -1.267236f, -0.211316f, -0.105469f, -0.361844f, -0.395706f, -0.844088f, 0.375000f, 0.625000f, + -1.254712f, -0.191583f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.625000f, + -1.183388f, -0.279157f, -0.105469f, -0.330412f, -0.460754f, -0.823731f, 0.375000f, 0.750000f, + -1.192680f, -0.311601f, -0.049219f, -0.547601f, -0.806671f, -0.222295f, 0.125000f, 0.750000f, + -1.081299f, -0.384998f, -0.000000f, -0.479572f, -0.877503f, -0.000000f, 0.000000f, 0.875000f, + -1.081536f, -0.379325f, -0.049219f, -0.470000f, -0.855960f, -0.215482f, 0.125000f, 0.875000f, + -1.082161f, -0.364370f, -0.084375f, -0.423555f, -0.760495f, -0.492188f, 0.250000f, 0.875000f, + -0.952148f, -0.443555f, -0.049219f, -0.400263f, -0.889473f, -0.220515f, 0.125000f, 1.000000f, + -1.183388f, -0.279157f, -0.105469f, -0.330412f, -0.460754f, -0.823731f, 0.375000f, 0.750000f, + -1.082161f, -0.364370f, -0.084375f, -0.423555f, -0.760495f, -0.492187f, 0.250000f, 0.875000f, + -1.083045f, -0.343226f, -0.105469f, -0.286325f, -0.503846f, -0.814958f, 0.375000f, 0.875000f, + -1.084058f, -0.318988f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.875000f, + -0.965820f, -0.402539f, -0.105469f, -0.232611f, -0.516913f, -0.823829f, 0.375000f, 1.000000f, + -1.283887f, -0.090015f, -0.084375f, 0.674847f, 0.482249f, -0.558585f, 0.750000f, 0.500000f, + -1.177148f, -0.257373f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.750000f, + -1.165466f, -0.216586f, -0.084375f, 0.549511f, 0.670716f, -0.498173f, 0.750000f, 0.750000f, + -1.160156f, -0.198047f, -0.000000f, 0.655687f, 0.755033f, -0.000000f, 1.000000f, 0.750000f, + -0.992188f, -0.323438f, -0.084375f, 0.354770f, 0.788378f, -0.502591f, 0.750000f, 1.000000f, + -1.299402f, -0.105405f, -0.105469f, 0.407093f, 0.306051f, -0.860586f, 0.625000f, 0.500000f, + -1.254712f, -0.191583f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.625000f, + -1.242188f, -0.171850f, -0.105469f, 0.384959f, 0.378821f, -0.841606f, 0.625000f, 0.625000f, + -1.231264f, -0.154636f, -0.084375f, 0.623037f, 0.578584f, -0.526370f, 0.750000f, 0.625000f, + -1.170909f, -0.235589f, -0.105469f, 0.354017f, 0.451010f, -0.819306f, 0.625000f, 0.750000f, + -1.272913f, -0.079129f, -0.049219f, 0.800088f, 0.544202f, -0.252394f, 0.875000f, 0.500000f, + -1.231264f, -0.154636f, -0.084375f, 0.623037f, 0.578584f, -0.526370f, 0.750000f, 0.625000f, + -1.223536f, -0.142460f, -0.049219f, 0.725742f, 0.647344f, -0.232905f, 0.875000f, 0.625000f, + -1.220605f, -0.137842f, -0.000000f, 0.752687f, 0.658378f, -0.000000f, 1.000000f, 0.625000f, + -1.161617f, -0.203145f, -0.049219f, 0.634450f, 0.742942f, -0.213332f, 0.875000f, 0.750000f, + -1.170909f, -0.235589f, -0.105469f, 0.354017f, 0.451010f, -0.819306f, 0.625000f, 0.750000f, + -1.084058f, -0.318988f, -0.112500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.875000f, + -1.085071f, -0.294750f, -0.105469f, 0.301978f, 0.501655f, -0.810649f, 0.625000f, 0.875000f, + -1.085954f, -0.273607f, -0.084375f, 0.462854f, 0.744576f, -0.481012f, 0.750000f, 0.875000f, + -0.984180f, -0.347461f, -0.105469f, 0.232611f, 0.516912f, -0.823829f, 0.625000f, 1.000000f, + -1.161617f, -0.203145f, -0.049219f, 0.634450f, 0.742942f, -0.213332f, 0.875000f, 0.750000f, + -1.085954f, -0.273607f, -0.084375f, 0.462854f, 0.744576f, -0.481012f, 0.750000f, 0.875000f, + -1.086579f, -0.258651f, -0.049219f, 0.524892f, 0.825535f, -0.207317f, 0.875000f, 0.875000f, + -1.086816f, -0.252979f, -0.000000f, 0.540758f, 0.841178f, -0.000000f, 1.000000f, 0.875000f, + -0.997852f, -0.306445f, -0.049219f, 0.400263f, 0.889473f, -0.220515f, 0.875000f, 1.000000f, + 0.850000f, -0.037500f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, + 0.850000f, -0.450000f, -0.000000f, 0.158678f, -0.987330f, 0.000000f, 1.000000f, 0.000000f, + 1.350000f, 0.450000f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 0.000000f, 1.000000f, + 1.650000f, 0.450000f, -0.000000f, 0.384615f, -0.923077f, 0.000000f, 1.000000f, 1.000000f, + 0.850000f, -0.243750f, 0.247500f, -0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.000000f, + 1.193750f, 0.150000f, -0.000000f, -0.920582f, 0.390550f, 0.000000f, 0.000000f, 0.500000f, + 1.268750f, 0.060938f, 0.170625f, 0.213724f, 0.177140f, 0.960699f, 0.500000f, 0.500000f, + 1.343750f, -0.028125f, -0.000000f, 0.957826f, -0.287348f, 0.000000f, 1.000000f, 0.500000f, + 1.500000f, 0.450000f, 0.093750f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 1.000000f, + 0.850000f, -0.101953f, 0.185625f, -0.024132f, 0.729325f, 0.683742f, 0.250000f, 0.000000f, + 1.089844f, 0.017578f, -0.000000f, -0.544548f, 0.838729f, 0.000000f, 0.000000f, 0.250000f, + 1.108154f, -0.030212f, 0.167607f, -0.371220f, 0.678515f, 0.633887f, 0.250000f, 0.250000f, + 1.148438f, -0.135352f, 0.223477f, 0.171854f, 0.062939f, 0.983110f, 0.500000f, 0.250000f, + 1.217188f, 0.122168f, 0.127969f, -0.695041f, 0.414771f, 0.587267f, 0.250000f, 0.500000f, + 0.850000f, -0.055225f, 0.108281f, -0.009231f, 0.939467f, 0.342514f, 0.125000f, 0.000000f, + 0.992480f, -0.022705f, -0.000000f, -0.235151f, 0.971959f, 0.000000f, 0.000000f, 0.125000f, + 0.995678f, -0.038346f, 0.105391f, -0.221262f, 0.921126f, 0.320265f, 0.125000f, 0.125000f, + 1.004108f, -0.079582f, 0.180670f, -0.165703f, 0.736103f, 0.656273f, 0.250000f, 0.125000f, + 1.094879f, 0.004436f, 0.097771f, -0.507507f, 0.807721f, 0.300039f, 0.125000f, 0.250000f, + 0.850000f, -0.168018f, 0.232031f, -0.025797f, 0.392308f, 0.919472f, 0.375000f, 0.000000f, + 1.004108f, -0.079582f, 0.180670f, -0.165703f, 0.736103f, 0.656273f, 0.250000f, 0.125000f, + 1.016026f, -0.137881f, 0.225838f, -0.059540f, 0.413822f, 0.908409f, 0.375000f, 0.125000f, + 1.029688f, -0.204712f, 0.240894f, 0.079921f, 0.015529f, 0.996680f, 0.500000f, 0.125000f, + 1.126923f, -0.079198f, 0.209509f, -0.127458f, 0.418405f, 0.899273f, 0.375000f, 0.250000f, + 1.094879f, 0.004436f, 0.097771f, -0.507507f, 0.807721f, 0.300039f, 0.125000f, 0.250000f, + 1.153223f, 0.077197f, -0.000000f, -0.801883f, 0.597481f, 0.000000f, 0.000000f, 0.375000f, + 1.159190f, 0.066780f, 0.086998f, -0.756895f, 0.593502f, 0.273617f, 0.125000f, 0.375000f, + 1.174921f, 0.039317f, 0.149139f, -0.577629f, 0.549531f, 0.603623f, 0.250000f, 0.375000f, + 1.200195f, 0.142346f, 0.074648f, -0.876990f, 0.403565f, 0.260813f, 0.125000f, 0.500000f, + 1.126923f, -0.079198f, 0.209509f, -0.127458f, 0.418405f, 0.899273f, 0.375000f, 0.250000f, + 1.174921f, 0.039317f, 0.149139f, -0.577629f, 0.549531f, 0.603623f, 0.250000f, 0.375000f, + 1.197161f, 0.000490f, 0.186424f, -0.218772f, 0.394191f, 0.892610f, 0.375000f, 0.375000f, + 1.222656f, -0.044019f, 0.198853f, 0.229848f, 0.129312f, 0.964597f, 0.500000f, 0.375000f, + 1.241211f, 0.093640f, 0.159961f, -0.296452f, 0.354445f, 0.886840f, 0.375000f, 0.500000f, + 0.850000f, -0.385547f, 0.185625f, 0.102331f, -0.725708f, 0.680351f, 0.750000f, 0.000000f, + 1.148438f, -0.135352f, 0.223477f, 0.171854f, 0.062939f, 0.983110f, 0.500000f, 0.250000f, + 1.188721f, -0.240491f, 0.167607f, 0.612561f, -0.529591f, 0.586772f, 0.750000f, 0.250000f, + 1.207031f, -0.288281f, -0.000000f, 0.718240f, -0.695795f, 0.000000f, 1.000000f, 0.250000f, + 1.320312f, -0.000293f, 0.127969f, 0.837979f, -0.174710f, 0.516979f, 0.750000f, 0.500000f, + 0.850000f, -0.319482f, 0.232031f, 0.048061f, -0.391985f, 0.918715f, 0.625000f, 0.000000f, + 1.029688f, -0.204712f, 0.240894f, 0.079921f, 0.015529f, 0.996680f, 0.500000f, 0.125000f, + 1.043350f, -0.271543f, 0.225838f, 0.224876f, -0.377046f, 0.898480f, 0.625000f, 0.125000f, + 1.055267f, -0.329842f, 0.180670f, 0.342821f, -0.685430f, 0.642386f, 0.750000f, 0.125000f, + 1.169952f, -0.191505f, 0.209509f, 0.435323f, -0.278094f, 0.856247f, 0.625000f, 0.250000f, + 0.850000f, -0.432275f, 0.108281f, 0.144604f, -0.929633f, 0.338929f, 0.875000f, 0.000000f, + 1.055267f, -0.329842f, 0.180670f, 0.342821f, -0.685430f, 0.642386f, 0.750000f, 0.125000f, + 1.063697f, -0.371078f, 0.105391f, 0.408872f, -0.857837f, 0.311351f, 0.875000f, 0.125000f, + 1.066895f, -0.386719f, -0.000000f, 0.427109f, -0.904200f, 0.000000f, 1.000000f, 0.125000f, + 1.201996f, -0.275139f, 0.097771f, 0.697781f, -0.660281f, 0.277723f, 0.875000f, 0.250000f, + 1.169952f, -0.191505f, 0.209509f, 0.435322f, -0.278094f, 0.856247f, 0.625000f, 0.250000f, + 1.222656f, -0.044019f, 0.198853f, 0.229848f, 0.129312f, 0.964597f, 0.500000f, 0.375000f, + 1.248151f, -0.088527f, 0.186424f, 0.585763f, -0.133695f, 0.799380f, 0.625000f, 0.375000f, + 1.270392f, -0.127354f, 0.149139f, 0.789294f, -0.317418f, 0.525605f, 0.750000f, 0.375000f, + 1.296289f, 0.028235f, 0.159961f, 0.613165f, -0.021542f, 0.789661f, 0.625000f, 0.500000f, + 1.201996f, -0.275139f, 0.097771f, 0.697781f, -0.660281f, 0.277723f, 0.875000f, 0.250000f, + 1.270392f, -0.127354f, 0.149139f, 0.789294f, -0.317418f, 0.525605f, 0.750000f, 0.375000f, + 1.286123f, -0.154817f, 0.086998f, 0.877362f, -0.413464f, 0.243482f, 0.875000f, 0.375000f, + 1.292090f, -0.165234f, -0.000000f, 0.897596f, -0.440819f, 0.000000f, 1.000000f, 0.375000f, + 1.337305f, -0.020471f, 0.074648f, 0.935156f, -0.261048f, 0.239452f, 0.875000f, 0.500000f, + 1.217188f, 0.122168f, 0.127969f, -0.695041f, 0.414772f, 0.587267f, 0.250000f, 0.500000f, + 1.250781f, 0.310547f, -0.000000f, -0.928477f, 0.371391f, 0.000000f, 0.000000f, 0.750000f, + 1.279346f, 0.300476f, 0.088330f, -0.634799f, 0.386374f, 0.669138f, 0.250000f, 0.750000f, + 1.342187f, 0.278320f, 0.117773f, 0.067770f, 0.175606f, 0.982125f, 0.500000f, 0.750000f, + 1.396875f, 0.450000f, 0.070312f, -0.390971f, 0.593197f, 0.703747f, 0.250000f, 1.000000f, + 1.200195f, 0.142346f, 0.074648f, -0.876990f, 0.403566f, 0.260813f, 0.125000f, 0.500000f, + 1.222558f, 0.229834f, -0.000000f, -0.950213f, 0.311602f, 0.000000f, 0.000000f, 0.625000f, + 1.229482f, 0.224792f, 0.062299f, -0.900661f, 0.331376f, 0.281068f, 0.125000f, 0.625000f, + 1.247736f, 0.211501f, 0.106798f, -0.702257f, 0.362674f, 0.612620f, 0.250000f, 0.625000f, + 1.258636f, 0.307777f, 0.051526f, -0.858527f, 0.385856f, 0.337708f, 0.125000f, 0.750000f, + 1.241211f, 0.093640f, 0.159961f, -0.296452f, 0.354445f, 0.886840f, 0.375000f, 0.500000f, + 1.247736f, 0.211501f, 0.106798f, -0.702256f, 0.362674f, 0.612621f, 0.250000f, 0.625000f, + 1.273542f, 0.192709f, 0.133498f, -0.321036f, 0.326352f, 0.889062f, 0.375000f, 0.625000f, + 1.303125f, 0.171167f, 0.142397f, 0.144754f, 0.193543f, 0.970354f, 0.500000f, 0.625000f, + 1.308624f, 0.290154f, 0.110413f, -0.297769f, 0.322801f, 0.898406f, 0.375000f, 0.750000f, + 1.258636f, 0.307777f, 0.051526f, -0.858527f, 0.385856f, 0.337708f, 0.125000f, 0.750000f, + 1.289551f, 0.385986f, -0.000000f, -0.828868f, 0.559444f, 0.000000f, 0.000000f, 0.875000f, + 1.299244f, 0.384960f, 0.043906f, -0.742962f, 0.544199f, 0.389686f, 0.125000f, 0.875000f, + 1.324799f, 0.382256f, 0.075267f, -0.517529f, 0.474866f, 0.711805f, 0.250000f, 0.875000f, + 1.362891f, 0.450000f, 0.041016f, -0.541369f, 0.750540f, 0.378959f, 0.125000f, 1.000000f, + 1.308624f, 0.290154f, 0.110413f, -0.297769f, 0.322801f, 0.898406f, 0.375000f, 0.750000f, + 1.324799f, 0.382256f, 0.075267f, -0.517529f, 0.474866f, 0.711805f, 0.250000f, 0.875000f, + 1.360928f, 0.378432f, 0.094084f, -0.253078f, 0.335498f, 0.907410f, 0.375000f, 0.875000f, + 1.402344f, 0.374048f, 0.100356f, 0.015086f, 0.130164f, 0.991378f, 0.500000f, 0.875000f, + 1.444922f, 0.450000f, 0.087891f, -0.203320f, 0.348629f, 0.914942f, 0.375000f, 1.000000f, + 1.320312f, -0.000293f, 0.127969f, 0.837979f, -0.174710f, 0.516979f, 0.750000f, 0.500000f, + 1.342187f, 0.278320f, 0.117773f, 0.067770f, 0.175606f, 0.982125f, 0.500000f, 0.750000f, + 1.405029f, 0.256165f, 0.088330f, 0.697661f, -0.240664f, 0.674796f, 0.750000f, 0.750000f, + 1.433594f, 0.246094f, -0.000000f, 0.897727f, -0.440551f, 0.000000f, 1.000000f, 0.750000f, + 1.603125f, 0.450000f, 0.070312f, 0.328506f, -0.736502f, 0.591311f, 0.750000f, 1.000000f, + 1.296289f, 0.028235f, 0.159961f, 0.613165f, -0.021543f, 0.789661f, 0.625000f, 0.500000f, + 1.303125f, 0.171167f, 0.142397f, 0.144754f, 0.193543f, 0.970354f, 0.500000f, 0.625000f, + 1.332708f, 0.149625f, 0.133498f, 0.543037f, 0.012500f, 0.839616f, 0.625000f, 0.625000f, + 1.358514f, 0.130833f, 0.106798f, 0.802971f, -0.151273f, 0.576501f, 0.750000f, 0.625000f, + 1.375751f, 0.266487f, 0.110413f, 0.409019f, -0.025151f, 0.912179f, 0.625000f, 0.750000f, + 1.337305f, -0.020471f, 0.074648f, 0.935156f, -0.261048f, 0.239452f, 0.875000f, 0.500000f, + 1.358514f, 0.130833f, 0.106798f, 0.802972f, -0.151273f, 0.576501f, 0.750000f, 0.625000f, + 1.376768f, 0.117542f, 0.062299f, 0.928216f, -0.252378f, 0.273351f, 0.875000f, 0.625000f, + 1.383691f, 0.112500f, -0.000000f, 0.958492f, -0.285121f, 0.000000f, 1.000000f, 0.625000f, + 1.425738f, 0.248863f, 0.051526f, 0.856186f, -0.391161f, 0.337548f, 0.875000f, 0.750000f, + 1.375751f, 0.266487f, 0.110413f, 0.409019f, -0.025151f, 0.912179f, 0.625000f, 0.750000f, + 1.402344f, 0.374048f, 0.100356f, 0.015086f, 0.130164f, 0.991378f, 0.500000f, 0.875000f, + 1.443760f, 0.369664f, 0.094084f, 0.287699f, -0.145568f, 0.946593f, 0.625000f, 0.875000f, + 1.479889f, 0.365840f, 0.075267f, 0.529482f, -0.444837f, 0.722336f, 0.750000f, 0.875000f, + 1.555078f, 0.450000f, 0.087891f, 0.197370f, -0.414974f, 0.888167f, 0.625000f, 1.000000f, + 1.425738f, 0.248863f, 0.051526f, 0.856187f, -0.391160f, 0.337548f, 0.875000f, 0.750000f, + 1.479889f, 0.365840f, 0.075267f, 0.529481f, -0.444836f, 0.722337f, 0.750000f, 0.875000f, + 1.505444f, 0.363135f, 0.043906f, 0.670506f, -0.648431f, 0.360497f, 0.875000f, 0.875000f, + 1.515137f, 0.362109f, -0.000000f, 0.704117f, -0.710084f, 0.000000f, 1.000000f, 0.875000f, + 1.637109f, 0.450000f, 0.041016f, 0.376658f, -0.888038f, 0.263661f, 0.875000f, 1.000000f, + 0.850000f, -0.450000f, -0.000000f, 0.158678f, -0.987330f, 0.000000f, 0.000000f, 0.000000f, + 0.850000f, -0.037500f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, + 1.650000f, 0.450000f, -0.000000f, 0.384615f, -0.923077f, 0.000000f, 0.000000f, 1.000000f, + 1.350000f, 0.450000f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 1.000000f, 1.000000f, + 0.850000f, -0.243750f, -0.247500f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.000000f, + 1.343750f, -0.028125f, -0.000000f, 0.957826f, -0.287348f, 0.000000f, 0.000000f, 0.500000f, + 1.268750f, 0.060938f, -0.170625f, 0.200450f, 0.166138f, -0.965514f, 0.500000f, 0.500000f, + 1.193750f, 0.150000f, -0.000000f, -0.920582f, 0.390550f, 0.000000f, 1.000000f, 0.500000f, + 1.500000f, 0.450000f, -0.093750f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 1.000000f, + 0.850000f, -0.385547f, -0.185625f, 0.105312f, -0.725480f, -0.680138f, 0.250000f, 0.000000f, + 1.207031f, -0.288281f, -0.000000f, 0.718240f, -0.695795f, 0.000000f, 0.000000f, 0.250000f, + 1.188721f, -0.240491f, -0.167607f, 0.612003f, -0.530032f, -0.586957f, 0.250000f, 0.250000f, + 1.148438f, -0.135352f, -0.223477f, 0.171854f, 0.062939f, -0.983110f, 0.500000f, 0.250000f, + 1.320312f, -0.000293f, -0.127969f, 0.836313f, -0.178498f, -0.518380f, 0.250000f, 0.500000f, + 0.850000f, -0.432275f, -0.108281f, 0.145471f, -0.929513f, -0.338885f, 0.125000f, 0.000000f, + 1.066895f, -0.386719f, -0.000000f, 0.427109f, -0.904200f, 0.000000f, 0.000000f, 0.125000f, + 1.063697f, -0.371078f, -0.105391f, 0.409189f, -0.857696f, -0.311324f, 0.125000f, 0.125000f, + 1.055267f, -0.329842f, -0.180670f, 0.342821f, -0.685430f, -0.642386f, 0.250000f, 0.125000f, + 1.201996f, -0.275139f, -0.097771f, 0.697590f, -0.660469f, -0.277758f, 0.125000f, 0.250000f, + 0.850000f, -0.319482f, -0.232031f, 0.048978f, -0.391968f, -0.918674f, 0.375000f, 0.000000f, + 1.055267f, -0.329842f, -0.180670f, 0.342821f, -0.685430f, -0.642386f, 0.250000f, 0.125000f, + 1.043350f, -0.271543f, -0.225838f, 0.224881f, -0.377045f, -0.898480f, 0.375000f, 0.125000f, + 1.029688f, -0.204712f, -0.240894f, 0.079921f, 0.015529f, -0.996680f, 0.500000f, 0.125000f, + 1.169952f, -0.191505f, -0.209509f, 0.434362f, -0.278625f, -0.856562f, 0.375000f, 0.250000f, + 1.201996f, -0.275139f, -0.097771f, 0.697590f, -0.660469f, -0.277758f, 0.125000f, 0.250000f, + 1.292090f, -0.165234f, -0.000000f, 0.897596f, -0.440819f, 0.000000f, 0.000000f, 0.375000f, + 1.286123f, -0.154817f, -0.086998f, 0.877008f, -0.414138f, -0.243610f, 0.125000f, 0.375000f, + 1.270392f, -0.127354f, -0.149139f, 0.789294f, -0.317418f, -0.525605f, 0.250000f, 0.375000f, + 1.337305f, -0.020471f, -0.074648f, 0.934784f, -0.262203f, -0.239644f, 0.125000f, 0.500000f, + 1.169952f, -0.191505f, -0.209509f, 0.434362f, -0.278625f, -0.856562f, 0.375000f, 0.250000f, + 1.270392f, -0.127354f, -0.149139f, 0.789294f, -0.317418f, -0.525605f, 0.250000f, 0.375000f, + 1.248151f, -0.088527f, -0.186424f, 0.584302f, -0.135007f, -0.800227f, 0.375000f, 0.375000f, + 1.222656f, -0.044019f, -0.198853f, 0.229848f, 0.129312f, -0.964597f, 0.500000f, 0.375000f, + 1.296289f, 0.028235f, -0.159961f, 0.611590f, -0.023659f, -0.790821f, 0.375000f, 0.500000f, + 0.850000f, -0.101953f, -0.185625f, -0.029616f, 0.729217f, -0.683641f, 0.750000f, 0.000000f, + 1.148438f, -0.135352f, -0.223477f, 0.171854f, 0.062939f, -0.983110f, 0.500000f, 0.250000f, + 1.108154f, -0.030212f, -0.167607f, -0.375101f, 0.676680f, -0.633564f, 0.750000f, 0.250000f, + 1.089844f, 0.017578f, -0.000000f, -0.544548f, 0.838729f, 0.000000f, 1.000000f, 0.250000f, + 1.217188f, 0.122168f, -0.127969f, -0.694334f, 0.415688f, -0.587455f, 0.750000f, 0.500000f, + 0.850000f, -0.168018f, -0.232031f, -0.027062f, 0.392295f, -0.919441f, 0.625000f, 0.000000f, + 1.029688f, -0.204712f, -0.240894f, 0.079921f, 0.015529f, -0.996680f, 0.500000f, 0.125000f, + 1.016026f, -0.137881f, -0.225838f, -0.060933f, 0.413563f, -0.908434f, 0.625000f, 0.125000f, + 1.004108f, -0.079582f, -0.180670f, -0.165703f, 0.736103f, -0.656273f, 0.750000f, 0.125000f, + 1.126923f, -0.079198f, -0.209509f, -0.128837f, 0.417897f, -0.899313f, 0.625000f, 0.250000f, + 0.850000f, -0.055225f, -0.108281f, -0.011227f, 0.939448f, -0.342507f, 0.875000f, 0.000000f, + 1.004108f, -0.079582f, -0.180670f, -0.165703f, 0.736103f, -0.656273f, 0.750000f, 0.125000f, + 0.995678f, -0.038346f, -0.105391f, -0.222729f, 0.920780f, -0.320245f, 0.875000f, 0.125000f, + 0.992480f, -0.022705f, -0.000000f, -0.235151f, 0.971959f, 0.000000f, 1.000000f, 0.125000f, + 1.094879f, 0.004436f, -0.097771f, -0.508167f, 0.807322f, -0.299996f, 0.875000f, 0.250000f, + 1.126923f, -0.079198f, -0.209509f, -0.128837f, 0.417897f, -0.899313f, 0.625000f, 0.250000f, + 1.222656f, -0.044019f, -0.198853f, 0.229848f, 0.129312f, -0.964597f, 0.500000f, 0.375000f, + 1.197161f, 0.000490f, -0.186424f, -0.219827f, 0.393598f, -0.892612f, 0.625000f, 0.375000f, + 1.174921f, 0.039317f, -0.149139f, -0.577629f, 0.549531f, -0.603623f, 0.750000f, 0.375000f, + 1.241211f, 0.093640f, -0.159961f, -0.296846f, 0.354114f, -0.886840f, 0.625000f, 0.500000f, + 1.094879f, 0.004436f, -0.097771f, -0.508167f, 0.807322f, -0.299996f, 0.875000f, 0.250000f, + 1.174921f, 0.039317f, -0.149139f, -0.577629f, 0.549531f, -0.603623f, 0.750000f, 0.375000f, + 1.159190f, 0.066780f, -0.086998f, -0.756738f, 0.593689f, -0.273644f, 0.875000f, 0.375000f, + 1.153223f, 0.077197f, -0.000000f, -0.801883f, 0.597481f, 0.000000f, 1.000000f, 0.375000f, + 1.200195f, 0.142346f, -0.074648f, -0.876392f, 0.404760f, -0.260971f, 0.875000f, 0.500000f, + 1.320312f, -0.000293f, -0.127969f, 0.836313f, -0.178498f, -0.518380f, 0.250000f, 0.500000f, + 1.433594f, 0.246094f, -0.000000f, 0.897727f, -0.440551f, 0.000000f, 0.000000f, 0.750000f, + 1.405029f, 0.256165f, -0.088330f, 0.694944f, -0.248071f, -0.674918f, 0.250000f, 0.750000f, + 1.342187f, 0.278320f, -0.117773f, 0.067770f, 0.175606f, -0.982125f, 0.500000f, 0.750000f, + 1.603125f, 0.450000f, -0.070312f, 0.325932f, -0.741335f, -0.586677f, 0.250000f, 1.000000f, + 1.337305f, -0.020471f, -0.074648f, 0.934784f, -0.262203f, -0.239644f, 0.125000f, 0.500000f, + 1.383691f, 0.112500f, -0.000000f, 0.958492f, -0.285121f, 0.000000f, 0.000000f, 0.625000f, + 1.376768f, 0.117542f, -0.062299f, 0.927697f, -0.254079f, -0.273535f, 0.125000f, 0.625000f, + 1.358514f, 0.130833f, -0.106798f, 0.802972f, -0.151273f, -0.576501f, 0.250000f, 0.625000f, + 1.425738f, 0.248863f, -0.051526f, 0.855222f, -0.393324f, -0.337479f, 0.125000f, 0.750000f, + 1.296289f, 0.028235f, -0.159961f, 0.611590f, -0.023659f, -0.790821f, 0.375000f, 0.500000f, + 1.358514f, 0.130833f, -0.106798f, 0.802971f, -0.151273f, -0.576501f, 0.250000f, 0.625000f, + 1.332708f, 0.149625f, -0.133498f, 0.541544f, 0.009652f, -0.840617f, 0.375000f, 0.625000f, + 1.303125f, 0.171167f, -0.142397f, 0.144754f, 0.193543f, -0.970354f, 0.500000f, 0.625000f, + 1.375751f, 0.266487f, -0.110413f, 0.408001f, -0.028503f, -0.912536f, 0.375000f, 0.750000f, + 1.425738f, 0.248863f, -0.051526f, 0.855222f, -0.393323f, -0.337479f, 0.125000f, 0.750000f, + 1.515137f, 0.362109f, -0.000000f, 0.704117f, -0.710084f, 0.000000f, 0.000000f, 0.875000f, + 1.505444f, 0.363135f, -0.043906f, 0.669146f, -0.650146f, -0.359936f, 0.125000f, 0.875000f, + 1.479889f, 0.365840f, -0.075267f, 0.529481f, -0.444836f, -0.722337f, 0.250000f, 0.875000f, + 1.637109f, 0.450000f, -0.041016f, 0.375683f, -0.888654f, -0.262978f, 0.125000f, 1.000000f, + 1.375751f, 0.266487f, -0.110413f, 0.408001f, -0.028503f, -0.912536f, 0.375000f, 0.750000f, + 1.479889f, 0.365840f, -0.075267f, 0.529482f, -0.444837f, -0.722336f, 0.250000f, 0.875000f, + 1.443760f, 0.369664f, -0.094084f, 0.287200f, -0.148873f, -0.946231f, 0.375000f, 0.875000f, + 1.402344f, 0.374048f, -0.100356f, 0.015086f, 0.130164f, -0.991378f, 0.500000f, 0.875000f, + 1.555078f, 0.450000f, -0.087891f, 0.197089f, -0.417806f, -0.886901f, 0.375000f, 1.000000f, + 1.217188f, 0.122168f, -0.127969f, -0.694334f, 0.415688f, -0.587455f, 0.750000f, 0.500000f, + 1.342187f, 0.278320f, -0.117773f, 0.067770f, 0.175606f, -0.982125f, 0.500000f, 0.750000f, + 1.279346f, 0.300476f, -0.088330f, -0.631401f, 0.393081f, -0.668446f, 0.750000f, 0.750000f, + 1.250781f, 0.310547f, -0.000000f, -0.928477f, 0.371391f, 0.000000f, 1.000000f, 0.750000f, + 1.396875f, 0.450000f, -0.070312f, -0.386984f, 0.604180f, -0.696571f, 0.750000f, 1.000000f, + 1.241211f, 0.093640f, -0.159961f, -0.296846f, 0.354114f, -0.886840f, 0.625000f, 0.500000f, + 1.303125f, 0.171167f, -0.142397f, 0.144754f, 0.193543f, -0.970354f, 0.500000f, 0.625000f, + 1.273542f, 0.192709f, -0.133498f, -0.320819f, 0.326623f, -0.889040f, 0.625000f, 0.625000f, + 1.247736f, 0.211501f, -0.106798f, -0.702256f, 0.362674f, -0.612621f, 0.750000f, 0.625000f, + 1.308624f, 0.290154f, -0.110413f, -0.297312f, 0.323820f, -0.898191f, 0.625000f, 0.750000f, + 1.200195f, 0.142346f, -0.074648f, -0.876392f, 0.404761f, -0.260971f, 0.875000f, 0.500000f, + 1.247736f, 0.211501f, -0.106798f, -0.702257f, 0.362674f, -0.612620f, 0.750000f, 0.625000f, + 1.229482f, 0.224792f, -0.062299f, -0.899738f, 0.333705f, -0.281268f, 0.875000f, 0.625000f, + 1.222558f, 0.229834f, -0.000000f, -0.950213f, 0.311602f, 0.000000f, 1.000000f, 0.625000f, + 1.258636f, 0.307777f, -0.051526f, -0.857015f, 0.389291f, -0.337605f, 0.875000f, 0.750000f, + 1.308624f, 0.290154f, -0.110413f, -0.297312f, 0.323820f, -0.898191f, 0.625000f, 0.750000f, + 1.402344f, 0.374048f, -0.100356f, 0.015086f, 0.130164f, -0.991378f, 0.500000f, 0.875000f, + 1.360928f, 0.378432f, -0.094084f, -0.252654f, 0.337465f, -0.906799f, 0.625000f, 0.875000f, + 1.324799f, 0.382256f, -0.075267f, -0.517529f, 0.474866f, -0.711805f, 0.750000f, 0.875000f, + 1.444922f, 0.450000f, -0.087891f, -0.203025f, 0.352273f, -0.913611f, 0.625000f, 1.000000f, + 1.258636f, 0.307777f, -0.051526f, -0.857015f, 0.389291f, -0.337606f, 0.875000f, 0.750000f, + 1.324799f, 0.382256f, -0.075267f, -0.517529f, 0.474866f, -0.711805f, 0.750000f, 0.875000f, + 1.299244f, 0.384960f, -0.043906f, -0.740671f, 0.547951f, -0.388789f, 0.875000f, 0.875000f, + 1.289551f, 0.385986f, -0.000000f, -0.828868f, 0.559444f, 0.000000f, 1.000000f, 0.875000f, + 1.362891f, 0.450000f, -0.041016f, -0.538815f, 0.753273f, -0.377171f, 0.875000f, 1.000000f, + 1.350000f, 0.450000f, -0.000000f, -0.599999f, 0.800000f, 0.000000f, 0.000000f, 0.000000f, + 1.650000f, 0.450000f, -0.000000f, 0.384615f, -0.923077f, 0.000000f, 1.000000f, 0.000000f, + 1.400000f, 0.450000f, -0.000000f, 0.599998f, -0.800001f, 0.000000f, 0.000000f, 1.000000f, + 1.600000f, 0.450000f, -0.000000f, -0.410365f, 0.911922f, 0.000000f, 1.000000f, 1.000000f, + 1.500000f, 0.450000f, 0.093750f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 0.000000f, + 1.412500f, 0.478125f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.500000f, + 1.563281f, 0.483398f, 0.075000f, -0.030653f, 0.998390f, 0.047730f, 0.500000f, 0.500000f, + 1.714062f, 0.488672f, -0.000000f, 0.106533f, 0.994309f, 0.000000f, 1.000000f, 0.500000f, + 1.500000f, 0.450000f, 0.056250f, 0.000000f, -0.000000f, -1.000000f, 0.500000f, 1.000000f, + 1.396875f, 0.450000f, 0.070312f, -0.390970f, 0.593197f, 0.703746f, 0.250000f, 0.000000f, + 1.385937f, 0.471094f, -0.000000f, -0.393919f, 0.919145f, 0.000000f, 0.000000f, 0.250000f, + 1.436139f, 0.472124f, 0.065918f, -0.261242f, 0.825249f, 0.500716f, 0.250000f, 0.250000f, + 1.546582f, 0.474390f, 0.087891f, -0.010489f, 0.543162f, 0.839563f, 0.500000f, 0.250000f, + 1.459619f, 0.479773f, 0.056250f, -0.028676f, 0.999488f, -0.014204f, 0.250000f, 0.500000f, + 1.362891f, 0.450000f, 0.041016f, -0.541370f, 0.750538f, 0.378960f, 0.125000f, 0.000000f, + 1.368555f, 0.462305f, -0.000000f, -0.502135f, 0.864789f, 0.000000f, 0.000000f, 0.125000f, + 1.382164f, 0.462453f, 0.040311f, -0.452660f, 0.827269f, 0.332754f, 0.125000f, 0.125000f, + 1.418043f, 0.462845f, 0.069104f, -0.328007f, 0.714730f, 0.617715f, 0.250000f, 0.125000f, + 1.399743f, 0.471377f, 0.038452f, -0.354757f, 0.895428f, 0.268992f, 0.125000f, 0.250000f, + 1.444922f, 0.450000f, 0.087891f, -0.203320f, 0.348630f, 0.914942f, 0.375000f, 0.000000f, + 1.418043f, 0.462845f, 0.069104f, -0.328007f, 0.714730f, 0.617715f, 0.250000f, 0.125000f, + 1.468768f, 0.463400f, 0.086380f, -0.177466f, 0.531475f, 0.828275f, 0.375000f, 0.125000f, + 1.526917f, 0.464035f, 0.092139f, -0.002586f, 0.248712f, 0.968574f, 0.500000f, 0.125000f, + 1.487595f, 0.473179f, 0.082397f, -0.146800f, 0.719542f, 0.678756f, 0.375000f, 0.250000f, + 1.399743f, 0.471377f, 0.038452f, -0.354755f, 0.895429f, 0.268990f, 0.125000f, 0.250000f, + 1.400977f, 0.476367f, -0.000000f, -0.252422f, 0.967617f, 0.000000f, 0.000000f, 0.375000f, + 1.414538f, 0.476757f, 0.035825f, -0.228367f, 0.958759f, 0.169205f, 0.125000f, 0.375000f, + 1.450289f, 0.477783f, 0.061414f, -0.171147f, 0.934241f, 0.312892f, 0.250000f, 0.375000f, + 1.425458f, 0.478578f, 0.032812f, -0.011150f, 0.999718f, -0.020946f, 0.125000f, 0.500000f, + 1.487595f, 0.473179f, 0.082397f, -0.146800f, 0.719545f, 0.678753f, 0.375000f, 0.250000f, + 1.450289f, 0.477783f, 0.061414f, -0.171148f, 0.934242f, 0.312891f, 0.250000f, 0.375000f, + 1.500835f, 0.479235f, 0.076767f, -0.104867f, 0.896864f, 0.429695f, 0.375000f, 0.375000f, + 1.558777f, 0.480899f, 0.081885f, -0.023691f, 0.837628f, 0.545728f, 0.500000f, 0.375000f, + 1.507916f, 0.481462f, 0.070312f, -0.038175f, 0.999104f, 0.018273f, 0.375000f, 0.500000f, + 1.603125f, 0.450000f, 0.070312f, 0.328506f, -0.736502f, 0.591311f, 0.750000f, 0.000000f, + 1.546582f, 0.474390f, 0.087891f, -0.010489f, 0.543162f, 0.839563f, 0.500000f, 0.250000f, + 1.657025f, 0.476656f, 0.065918f, 0.419012f, -0.340104f, 0.841878f, 0.750000f, 0.250000f, + 1.707227f, 0.477686f, -0.000000f, 0.537133f, -0.843498f, 0.000000f, 1.000000f, 0.250000f, + 1.666943f, 0.487024f, 0.056250f, 0.017233f, 0.992921f, 0.117519f, 0.750000f, 0.500000f, + 1.555078f, 0.450000f, 0.087891f, 0.197370f, -0.414975f, 0.888167f, 0.625000f, 0.000000f, + 1.526917f, 0.464035f, 0.092139f, -0.002586f, 0.248712f, 0.968574f, 0.500000f, 0.125000f, + 1.585065f, 0.464670f, 0.086380f, 0.201774f, -0.178320f, 0.963062f, 0.625000f, 0.125000f, + 1.635790f, 0.465225f, 0.069104f, 0.367189f, -0.618011f, 0.695150f, 0.750000f, 0.125000f, + 1.605569f, 0.475600f, 0.082397f, 0.182564f, 0.209574f, 0.960598f, 0.625000f, 0.250000f, + 1.637109f, 0.450000f, 0.041016f, 0.376658f, -0.888038f, 0.263661f, 0.875000f, 0.000000f, + 1.635790f, 0.465225f, 0.069104f, 0.367189f, -0.618009f, 0.695153f, 0.750000f, 0.125000f, + 1.671669f, 0.465617f, 0.040311f, 0.430592f, -0.845391f, 0.316077f, 0.875000f, 0.125000f, + 1.685278f, 0.465765f, -0.000000f, 0.438412f, -0.898774f, 0.000000f, 1.000000f, 0.125000f, + 1.693421f, 0.477402f, 0.038452f, 0.528248f, -0.743422f, 0.410218f, 0.875000f, 0.250000f, + 1.605569f, 0.475600f, 0.082397f, 0.182565f, 0.209570f, 0.960599f, 0.625000f, 0.250000f, + 1.558777f, 0.480899f, 0.081885f, -0.023691f, 0.837628f, 0.545728f, 0.500000f, 0.375000f, + 1.616719f, 0.482563f, 0.076767f, 0.105864f, 0.722978f, 0.682712f, 0.625000f, 0.375000f, + 1.667265f, 0.484015f, 0.061414f, 0.368189f, 0.433463f, 0.822524f, 0.750000f, 0.375000f, + 1.618646f, 0.485335f, 0.070312f, -0.017857f, 0.995236f, 0.095847f, 0.625000f, 0.500000f, + 1.693421f, 0.477402f, 0.038452f, 0.528244f, -0.743425f, 0.410215f, 0.875000f, 0.250000f, + 1.667265f, 0.484015f, 0.061414f, 0.368191f, 0.433462f, 0.822524f, 0.750000f, 0.375000f, + 1.703016f, 0.485041f, 0.035825f, 0.754900f, -0.180907f, 0.630395f, 0.875000f, 0.375000f, + 1.716577f, 0.485431f, -0.000000f, 0.859737f, -0.510736f, 0.000000f, 1.000000f, 0.375000f, + 1.701105f, 0.488219f, 0.032812f, 0.072271f, 0.992935f, 0.094111f, 0.875000f, 0.500000f, + 1.459619f, 0.479773f, 0.056250f, -0.028676f, 0.999488f, -0.014203f, 0.250000f, 0.500000f, + 1.420312f, 0.471094f, -0.000000f, 0.948684f, -0.316227f, 0.000000f, 0.000000f, 0.750000f, + 1.460321f, 0.472536f, 0.046582f, 0.388841f, 0.140631f, -0.910508f, 0.250000f, 0.750000f, + 1.548340f, 0.475708f, 0.062109f, -0.020139f, 0.565841f, -0.824268f, 0.500000f, 0.750000f, + 1.431250f, 0.450000f, 0.042188f, 0.370536f, -0.559922f, -0.741073f, 0.250000f, 1.000000f, + 1.425458f, 0.478578f, 0.032812f, -0.011151f, 0.999718f, -0.020945f, 0.125000f, 0.500000f, + 1.419336f, 0.476367f, -0.000000f, 0.650788f, 0.759260f, -0.000000f, 0.000000f, 0.625000f, + 1.431414f, 0.476827f, 0.029800f, 0.466018f, 0.764069f, -0.446123f, 0.125000f, 0.625000f, + 1.463255f, 0.478041f, 0.051086f, 0.212314f, 0.799230f, -0.562276f, 0.250000f, 0.625000f, + 1.431315f, 0.471490f, 0.027173f, 0.736672f, -0.149641f, -0.659487f, 0.125000f, 0.750000f, + 1.507916f, 0.481462f, 0.070312f, -0.038175f, 0.999104f, 0.018273f, 0.375000f, 0.500000f, + 1.463255f, 0.478041f, 0.051086f, 0.212315f, 0.799230f, -0.562276f, 0.250000f, 0.625000f, + 1.508271f, 0.479756f, 0.063858f, 0.061046f, 0.840539f, -0.538301f, 0.375000f, 0.625000f, + 1.559876f, 0.481723f, 0.068115f, -0.033383f, 0.880730f, -0.472440f, 0.500000f, 0.625000f, + 1.501330f, 0.474014f, 0.058228f, 0.143907f, 0.380043f, -0.913706f, 0.375000f, 0.750000f, + 1.431315f, 0.471490f, 0.027173f, 0.736673f, -0.149623f, -0.659489f, 0.125000f, 0.750000f, + 1.414258f, 0.462305f, -0.000000f, 0.727013f, -0.686624f, 0.000000f, 0.000000f, 0.875000f, + 1.424072f, 0.462553f, 0.025314f, 0.622016f, -0.580709f, -0.525236f, 0.125000f, 0.875000f, + 1.449944f, 0.463206f, 0.043396f, 0.394296f, -0.328022f, -0.858448f, 0.250000f, 0.875000f, + 1.408594f, 0.450000f, 0.024609f, 0.532585f, -0.738082f, -0.414232f, 0.125000f, 1.000000f, + 1.501330f, 0.474014f, 0.058228f, 0.143907f, 0.380043f, -0.913706f, 0.375000f, 0.750000f, + 1.449944f, 0.463206f, 0.043396f, 0.394294f, -0.328020f, -0.858449f, 0.250000f, 0.875000f, + 1.486523f, 0.464130f, 0.054245f, 0.177862f, -0.043211f, -0.983106f, 0.375000f, 0.875000f, + 1.528455f, 0.465189f, 0.057861f, -0.006299f, 0.244403f, -0.969653f, 0.500000f, 0.875000f, + 1.463281f, 0.450000f, 0.052734f, 0.186166f, -0.314478f, -0.930831f, 0.375000f, 1.000000f, + 1.666943f, 0.487024f, 0.056250f, 0.017234f, 0.992921f, 0.117521f, 0.750000f, 0.500000f, + 1.548340f, 0.475708f, 0.062109f, -0.020139f, 0.565841f, -0.824268f, 0.500000f, 0.750000f, + 1.636358f, 0.478880f, 0.046582f, -0.236122f, 0.847054f, -0.476179f, 0.750000f, 0.750000f, + 1.676367f, 0.480322f, -0.000000f, -0.309738f, 0.950822f, 0.000000f, 1.000000f, 0.750000f, + 1.568750f, 0.450000f, 0.042188f, -0.325285f, 0.686256f, -0.650571f, 0.750000f, 1.000000f, + 1.618646f, 0.485335f, 0.070312f, -0.017856f, 0.995235f, 0.095852f, 0.625000f, 0.500000f, + 1.559876f, 0.481723f, 0.068115f, -0.033384f, 0.880731f, -0.472439f, 0.500000f, 0.625000f, + 1.611480f, 0.483690f, 0.063858f, -0.102068f, 0.914951f, -0.390443f, 0.625000f, 0.625000f, + 1.656496f, 0.485405f, 0.051086f, -0.157379f, 0.946540f, -0.281590f, 0.750000f, 0.625000f, + 1.595350f, 0.477402f, 0.058228f, -0.142748f, 0.722340f, -0.676645f, 0.625000f, 0.750000f, + 1.701105f, 0.488219f, 0.032812f, 0.072275f, 0.992935f, 0.094114f, 0.875000f, 0.500000f, + 1.656496f, 0.485405f, 0.051086f, -0.157378f, 0.946540f, -0.281592f, 0.750000f, 0.625000f, + 1.688337f, 0.486619f, 0.029800f, -0.197992f, 0.969370f, -0.145333f, 0.875000f, 0.625000f, + 1.700415f, 0.487079f, -0.000000f, -0.212233f, 0.977219f, 0.000000f, 1.000000f, 0.625000f, + 1.665365f, 0.479926f, 0.027173f, -0.292302f, 0.927391f, -0.233464f, 0.875000f, 0.750000f, + 1.595350f, 0.477402f, 0.058228f, -0.142748f, 0.722338f, -0.676646f, 0.625000f, 0.750000f, + 1.528455f, 0.465189f, 0.057861f, -0.006299f, 0.244403f, -0.969653f, 0.500000f, 0.875000f, + 1.570386f, 0.466248f, 0.054245f, -0.163578f, 0.526337f, -0.834393f, 0.625000f, 0.875000f, + 1.606965f, 0.467171f, 0.043396f, -0.282838f, 0.759561f, -0.585721f, 0.750000f, 0.875000f, + 1.536719f, 0.450000f, 0.052734f, -0.182506f, 0.366028f, -0.912532f, 0.625000f, 1.000000f, + 1.665365f, 0.479926f, 0.027173f, -0.292302f, 0.927391f, -0.233463f, 0.875000f, 0.750000f, + 1.606965f, 0.467171f, 0.043396f, -0.282837f, 0.759559f, -0.585724f, 0.750000f, 0.875000f, + 1.632838f, 0.467825f, 0.025314f, -0.349511f, 0.893333f, -0.282485f, 0.875000f, 0.875000f, + 1.642651f, 0.468073f, -0.000000f, -0.366863f, 0.930275f, 0.000000f, 1.000000f, 0.875000f, + 1.591406f, 0.450000f, 0.024609f, -0.394896f, 0.865864f, -0.307141f, 0.875000f, 1.000000f, + 1.650000f, 0.450000f, -0.000000f, 0.384615f, -0.923077f, 0.000000f, 0.000000f, 0.000000f, + 1.350000f, 0.450000f, -0.000000f, -0.599999f, 0.800000f, 0.000000f, 1.000000f, 0.000000f, + 1.600000f, 0.450000f, -0.000000f, -0.410365f, 0.911922f, 0.000000f, 0.000000f, 1.000000f, + 1.400000f, 0.450000f, -0.000000f, 0.599998f, -0.800001f, 0.000000f, 1.000000f, 1.000000f, + 1.500000f, 0.450000f, -0.093750f, 0.000000f, 0.000000f, -1.000000f, 0.500000f, 0.000000f, + 1.714062f, 0.488672f, -0.000000f, 0.106533f, 0.994309f, 0.000000f, 0.000000f, 0.500000f, + 1.563281f, 0.483398f, -0.075000f, -0.030594f, 0.996500f, -0.077797f, 0.500000f, 0.500000f, + 1.412500f, 0.478125f, -0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.500000f, + 1.500000f, 0.450000f, -0.056250f, 0.000000f, 0.000000f, 1.000000f, 0.500000f, 1.000000f, + 1.603125f, 0.450000f, -0.070312f, 0.325932f, -0.741335f, -0.586677f, 0.250000f, 0.000000f, + 1.707227f, 0.477686f, -0.000000f, 0.537133f, -0.843498f, 0.000000f, 0.000000f, 0.250000f, + 1.657025f, 0.476656f, -0.065918f, 0.416712f, -0.355669f, -0.836570f, 0.250000f, 0.250000f, + 1.546582f, 0.474390f, -0.087891f, -0.010489f, 0.543162f, -0.839563f, 0.500000f, 0.250000f, + 1.666943f, 0.487024f, -0.056250f, 0.020713f, 0.991902f, -0.125308f, 0.250000f, 0.500000f, + 1.637109f, 0.450000f, -0.041016f, 0.375683f, -0.888653f, -0.262978f, 0.125000f, 0.000000f, + 1.685278f, 0.465765f, -0.000000f, 0.438412f, -0.898774f, 0.000000f, 0.000000f, 0.125000f, + 1.671669f, 0.465617f, -0.040311f, 0.429299f, -0.846413f, -0.315099f, 0.125000f, 0.125000f, + 1.635790f, 0.465225f, -0.069104f, 0.367189f, -0.618009f, -0.695153f, 0.250000f, 0.125000f, + 1.693421f, 0.477402f, -0.038452f, 0.526088f, -0.745922f, -0.408450f, 0.125000f, 0.250000f, + 1.555078f, 0.450000f, -0.087891f, 0.197089f, -0.417807f, -0.886901f, 0.375000f, 0.000000f, + 1.635790f, 0.465225f, -0.069104f, 0.367189f, -0.618011f, -0.695150f, 0.250000f, 0.125000f, + 1.585065f, 0.464670f, -0.086380f, 0.201644f, -0.183060f, -0.962200f, 0.375000f, 0.125000f, + 1.526917f, 0.464035f, -0.092139f, -0.002586f, 0.248712f, -0.968574f, 0.500000f, 0.125000f, + 1.605569f, 0.475600f, -0.082397f, 0.183016f, 0.202049f, -0.962123f, 0.375000f, 0.250000f, + 1.693421f, 0.477402f, -0.038452f, 0.526085f, -0.745926f, -0.408447f, 0.125000f, 0.250000f, + 1.716577f, 0.485431f, -0.000000f, 0.859737f, -0.510736f, 0.000000f, 0.000000f, 0.375000f, + 1.703016f, 0.485041f, -0.035825f, 0.753057f, -0.194596f, -0.628520f, 0.125000f, 0.375000f, + 1.667265f, 0.484015f, -0.061414f, 0.368191f, 0.433462f, -0.822524f, 0.250000f, 0.375000f, + 1.701105f, 0.488219f, -0.032812f, 0.074241f, 0.992625f, -0.095834f, 0.125000f, 0.500000f, + 1.605569f, 0.475600f, -0.082397f, 0.183016f, 0.202045f, -0.962124f, 0.375000f, 0.250000f, + 1.667265f, 0.484015f, -0.061414f, 0.368189f, 0.433463f, -0.822524f, 0.250000f, 0.375000f, + 1.616719f, 0.482563f, -0.076767f, 0.107208f, 0.716766f, -0.689024f, 0.375000f, 0.375000f, + 1.558777f, 0.480899f, -0.081885f, -0.023691f, 0.837628f, -0.545728f, 0.500000f, 0.375000f, + 1.618646f, 0.485335f, -0.070312f, -0.017113f, 0.994843f, -0.099972f, 0.375000f, 0.500000f, + 1.396875f, 0.450000f, -0.070312f, -0.386984f, 0.604180f, -0.696570f, 0.750000f, 0.000000f, + 1.546582f, 0.474390f, -0.087891f, -0.010489f, 0.543162f, -0.839563f, 0.500000f, 0.250000f, + 1.436139f, 0.472124f, -0.065918f, -0.260333f, 0.826693f, -0.498803f, 0.750000f, 0.250000f, + 1.385937f, 0.471094f, -0.000000f, -0.393919f, 0.919145f, 0.000000f, 1.000000f, 0.250000f, + 1.459619f, 0.479773f, -0.056250f, -0.031625f, 0.999471f, 0.007533f, 0.750000f, 0.500000f, + 1.444922f, 0.450000f, -0.087891f, -0.203025f, 0.352273f, -0.913611f, 0.625000f, 0.000000f, + 1.526917f, 0.464035f, -0.092139f, -0.002586f, 0.248712f, -0.968574f, 0.500000f, 0.125000f, + 1.468768f, 0.463400f, -0.086380f, -0.177235f, 0.533433f, -0.827065f, 0.625000f, 0.125000f, + 1.418043f, 0.462845f, -0.069104f, -0.328007f, 0.714730f, -0.617715f, 0.750000f, 0.125000f, + 1.487595f, 0.473179f, -0.082397f, -0.146760f, 0.719769f, -0.678524f, 0.625000f, 0.250000f, + 1.362891f, 0.450000f, -0.041016f, -0.538816f, 0.753272f, -0.377172f, 0.875000f, 0.000000f, + 1.418043f, 0.462845f, -0.069104f, -0.328007f, 0.714730f, -0.617715f, 0.750000f, 0.125000f, + 1.382164f, 0.462453f, -0.040311f, -0.450802f, 0.828846f, -0.331350f, 0.875000f, 0.125000f, + 1.368555f, 0.462305f, -0.000000f, -0.502135f, 0.864789f, 0.000000f, 1.000000f, 0.125000f, + 1.399743f, 0.471377f, -0.038452f, -0.353662f, 0.896127f, -0.268105f, 0.875000f, 0.250000f, + 1.487595f, 0.473179f, -0.082397f, -0.146759f, 0.719772f, -0.678521f, 0.625000f, 0.250000f, + 1.558777f, 0.480899f, -0.081885f, -0.023691f, 0.837628f, -0.545728f, 0.500000f, 0.375000f, + 1.500835f, 0.479235f, -0.076767f, -0.105172f, 0.895971f, -0.431480f, 0.625000f, 0.375000f, + 1.450289f, 0.477783f, -0.061414f, -0.171148f, 0.934242f, -0.312891f, 0.750000f, 0.375000f, + 1.507916f, 0.481462f, -0.070312f, -0.038808f, 0.999007f, -0.021872f, 0.625000f, 0.500000f, + 1.399743f, 0.471377f, -0.038452f, -0.353660f, 0.896128f, -0.268103f, 0.875000f, 0.250000f, + 1.450289f, 0.477783f, -0.061414f, -0.171147f, 0.934241f, -0.312892f, 0.750000f, 0.375000f, + 1.414538f, 0.476757f, -0.035825f, -0.228267f, 0.958797f, -0.169120f, 0.875000f, 0.375000f, + 1.400977f, 0.476367f, -0.000000f, -0.252422f, 0.967617f, 0.000000f, 1.000000f, 0.375000f, + 1.425458f, 0.478578f, -0.032812f, -0.012463f, 0.999726f, 0.019791f, 0.875000f, 0.500000f, + 1.666943f, 0.487024f, -0.056250f, 0.020714f, 0.991901f, -0.125310f, 0.250000f, 0.500000f, + 1.676367f, 0.480322f, -0.000000f, -0.309738f, 0.950822f, 0.000000f, 0.000000f, 0.750000f, + 1.636358f, 0.478880f, -0.046582f, -0.235472f, 0.848126f, 0.474589f, 0.250000f, 0.750000f, + 1.548340f, 0.475708f, -0.062109f, -0.020139f, 0.565841f, 0.824268f, 0.500000f, 0.750000f, + 1.568750f, 0.450000f, -0.042188f, -0.323573f, 0.690291f, 0.647147f, 0.250000f, 1.000000f, + 1.701105f, 0.488219f, -0.032812f, 0.074245f, 0.992624f, -0.095838f, 0.125000f, 0.500000f, + 1.700415f, 0.487079f, -0.000000f, -0.212233f, 0.977219f, 0.000000f, 0.000000f, 0.625000f, + 1.688337f, 0.486619f, -0.029800f, -0.197930f, 0.969391f, 0.145277f, 0.125000f, 0.625000f, + 1.656496f, 0.485405f, -0.051086f, -0.157378f, 0.946540f, 0.281592f, 0.250000f, 0.625000f, + 1.665365f, 0.479926f, -0.027173f, -0.292143f, 0.927478f, 0.233317f, 0.125000f, 0.750000f, + 1.618646f, 0.485335f, -0.070312f, -0.017112f, 0.994843f, -0.099978f, 0.375000f, 0.500000f, + 1.656496f, 0.485405f, -0.051086f, -0.157379f, 0.946540f, 0.281590f, 0.250000f, 0.625000f, + 1.611480f, 0.483690f, -0.063858f, -0.102043f, 0.915022f, 0.390285f, 0.375000f, 0.625000f, + 1.559876f, 0.481723f, -0.068115f, -0.033384f, 0.880731f, 0.472439f, 0.500000f, 0.625000f, + 1.595350f, 0.477402f, -0.058228f, -0.142797f, 0.721999f, 0.676998f, 0.375000f, 0.750000f, + 1.665365f, 0.479926f, -0.027173f, -0.292143f, 0.927478f, 0.233317f, 0.125000f, 0.750000f, + 1.642651f, 0.468073f, -0.000000f, -0.366863f, 0.930275f, 0.000000f, 0.000000f, 0.875000f, + 1.632838f, 0.467825f, -0.025314f, -0.349075f, 0.893625f, 0.282102f, 0.125000f, 0.875000f, + 1.606965f, 0.467171f, -0.043396f, -0.282837f, 0.759559f, 0.585724f, 0.250000f, 0.875000f, + 1.591406f, 0.450000f, -0.024609f, -0.394161f, 0.866402f, 0.306569f, 0.125000f, 1.000000f, + 1.595350f, 0.477402f, -0.058228f, -0.142797f, 0.721999f, 0.676998f, 0.375000f, 0.750000f, + 1.606965f, 0.467171f, -0.043396f, -0.282838f, 0.759561f, 0.585721f, 0.250000f, 0.875000f, + 1.570386f, 0.466248f, -0.054245f, -0.163533f, 0.526860f, 0.834072f, 0.375000f, 0.875000f, + 1.528455f, 0.465189f, -0.057861f, -0.006299f, 0.244403f, 0.969653f, 0.500000f, 0.875000f, + 1.536719f, 0.450000f, -0.052734f, -0.182345f, 0.368116f, 0.911724f, 0.375000f, 1.000000f, + 1.459619f, 0.479773f, -0.056250f, -0.031626f, 0.999471f, 0.007532f, 0.750000f, 0.500000f, + 1.548340f, 0.475708f, -0.062109f, -0.020139f, 0.565841f, 0.824268f, 0.500000f, 0.750000f, + 1.460321f, 0.472536f, -0.046582f, 0.390568f, 0.119605f, 0.912771f, 0.750000f, 0.750000f, + 1.420312f, 0.471094f, -0.000000f, 0.948684f, -0.316227f, 0.000000f, 1.000000f, 0.750000f, + 1.431250f, 0.450000f, -0.042188f, 0.367398f, -0.570170f, 0.734796f, 0.750000f, 1.000000f, + 1.507916f, 0.481462f, -0.070312f, -0.038808f, 0.999007f, -0.021872f, 0.625000f, 0.500000f, + 1.559876f, 0.481723f, -0.068115f, -0.033383f, 0.880730f, 0.472440f, 0.500000f, 0.625000f, + 1.508271f, 0.479756f, -0.063858f, 0.060846f, 0.841199f, 0.537292f, 0.625000f, 0.625000f, + 1.463255f, 0.478041f, -0.051086f, 0.212315f, 0.799230f, 0.562276f, 0.750000f, 0.625000f, + 1.501330f, 0.474014f, -0.058228f, 0.144240f, 0.376853f, 0.914974f, 0.625000f, 0.750000f, + 1.425458f, 0.478578f, -0.032812f, -0.012465f, 0.999726f, 0.019790f, 0.875000f, 0.500000f, + 1.463255f, 0.478041f, -0.051086f, 0.212314f, 0.799230f, 0.562276f, 0.750000f, 0.625000f, + 1.431414f, 0.476827f, -0.029800f, 0.465501f, 0.764644f, 0.445677f, 0.875000f, 0.625000f, + 1.419336f, 0.476367f, -0.000000f, 0.650788f, 0.759260f, -0.000000f, 1.000000f, 0.625000f, + 1.431315f, 0.471490f, -0.027173f, 0.736016f, -0.156276f, 0.658680f, 0.875000f, 0.750000f, + 1.501330f, 0.474014f, -0.058228f, 0.144240f, 0.376852f, 0.914974f, 0.625000f, 0.750000f, + 1.528455f, 0.465189f, -0.057861f, -0.006299f, 0.244403f, 0.969653f, 0.500000f, 0.875000f, + 1.486523f, 0.464130f, -0.054245f, 0.177936f, -0.047578f, 0.982891f, 0.625000f, 0.875000f, + 1.449944f, 0.463206f, -0.043396f, 0.394294f, -0.328020f, 0.858449f, 0.750000f, 0.875000f, + 1.463281f, 0.450000f, -0.052734f, 0.185972f, -0.317450f, 0.929860f, 0.625000f, 1.000000f, + 1.431315f, 0.471490f, -0.027173f, 0.736017f, -0.156259f, 0.658682f, 0.875000f, 0.750000f, + 1.449944f, 0.463206f, -0.043396f, 0.394296f, -0.328022f, 0.858448f, 0.750000f, 0.875000f, + 1.424072f, 0.462553f, -0.025314f, 0.619509f, -0.585423f, 0.522962f, 0.875000f, 0.875000f, + 1.414258f, 0.462305f, -0.000000f, 0.727013f, -0.686624f, 0.000000f, 1.000000f, 0.875000f, + 1.408594f, 0.450000f, -0.024609f, 0.530206f, -0.740826f, 0.412382f, 0.875000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.674579f, 0.299813f, 0.674579f, 0.000000f, 0.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.674579f, 0.299813f, 0.674579f, 1.000000f, 0.000000f, + 0.100000f, 0.600000f, -0.000000f, 0.600000f, 0.800000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, 0.600000f, 0.100000f, 0.000000f, 0.800000f, 0.600000f, 1.000000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.674579f, 0.299813f, 0.674579f, 0.500000f, 0.000000f, + 0.162500f, 0.740625f, -0.000000f, 0.780869f, -0.624695f, 0.000000f, 0.000000f, 0.500000f, + 0.115516f, 0.740625f, 0.115516f, 0.553962f, -0.621492f, 0.553962f, 0.500000f, 0.500000f, + 0.000000f, 0.740625f, 0.162500f, 0.000000f, -0.624695f, 0.780869f, 1.000000f, 0.500000f, + 0.071000f, 0.600000f, 0.071000f, 0.427005f, 0.797078f, 0.427005f, 0.500000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.452928f, 0.872306f, 0.184222f, 0.250000f, 0.000000f, + 0.170313f, 0.800391f, -0.000000f, 0.600000f, 0.800000f, -0.000000f, 0.000000f, 0.250000f, + 0.157173f, 0.800391f, 0.067026f, 0.554284f, 0.799965f, 0.229837f, 0.250000f, 0.250000f, + 0.121080f, 0.800391f, 0.121080f, 0.422824f, 0.801523f, 0.422824f, 0.500000f, 0.250000f, + 0.149959f, 0.740625f, 0.063939f, 0.721237f, -0.624756f, 0.299162f, 0.250000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, 0.142954f, 0.989332f, 0.028025f, 0.125000f, 0.000000f, + 0.115039f, 0.818408f, -0.000000f, 0.152452f, 0.988311f, -0.000000f, 0.000000f, 0.125000f, + 0.112750f, 0.818408f, 0.023522f, 0.149493f, 0.988317f, 0.029677f, 0.125000f, 0.125000f, + 0.106164f, 0.818408f, 0.045274f, 0.140386f, 0.988384f, 0.058210f, 0.250000f, 0.125000f, + 0.166924f, 0.800391f, 0.034822f, 0.588416f, 0.800075f, 0.116818f, 0.125000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, 0.120585f, 0.989432f, 0.080516f, 0.375000f, 0.000000f, + 0.106164f, 0.818408f, 0.045274f, 0.140386f, 0.988384f, 0.058209f, 0.250000f, 0.125000f, + 0.095702f, 0.818408f, 0.064836f, 0.126226f, 0.988401f, 0.084441f, 0.375000f, 0.125000f, + 0.081785f, 0.818408f, 0.081785f, 0.107233f, 0.988434f, 0.107233f, 0.500000f, 0.125000f, + 0.141684f, 0.800391f, 0.095986f, 0.497465f, 0.801110f, 0.332794f, 0.375000f, 0.250000f, + 0.166924f, 0.800391f, 0.034822f, 0.588416f, 0.800075f, 0.116818f, 0.125000f, 0.250000f, + 0.181055f, 0.773584f, -0.000000f, 0.978147f, -0.207916f, 0.000000f, 0.000000f, 0.375000f, + 0.177452f, 0.773584f, 0.037016f, 0.959398f, -0.208008f, 0.190496f, 0.125000f, 0.375000f, + 0.167085f, 0.773584f, 0.071249f, 0.903388f, -0.208673f, 0.374628f, 0.250000f, 0.375000f, + 0.159265f, 0.740625f, 0.033217f, 0.765799f, -0.624831f, 0.152111f, 0.125000f, 0.500000f, + 0.141684f, 0.800391f, 0.095986f, 0.497465f, 0.801110f, 0.332794f, 0.375000f, 0.250000f, + 0.167085f, 0.773584f, 0.071249f, 0.903388f, -0.208673f, 0.374627f, 0.250000f, 0.375000f, + 0.150618f, 0.773584f, 0.102036f, 0.812814f, -0.208889f, 0.543782f, 0.375000f, 0.375000f, + 0.128714f, 0.773584f, 0.128714f, 0.691459f, -0.209208f, 0.691459f, 0.500000f, 0.375000f, + 0.135177f, 0.740625f, 0.091571f, 0.647897f, -0.626344f, 0.433501f, 0.375000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, 0.184222f, 0.872306f, 0.452928f, 0.750000f, 0.000000f, + 0.121080f, 0.800391f, 0.121080f, 0.422824f, 0.801523f, 0.422824f, 0.500000f, 0.250000f, + 0.067026f, 0.800391f, 0.157173f, 0.229949f, 0.799746f, 0.554553f, 0.750000f, 0.250000f, + 0.000000f, 0.800391f, 0.170313f, 0.000000f, 0.800000f, 0.600000f, 1.000000f, 0.250000f, + 0.063939f, 0.740625f, 0.149959f, 0.299246f, -0.624481f, 0.721440f, 0.750000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, 0.080516f, 0.989432f, 0.120585f, 0.625000f, 0.000000f, + 0.081785f, 0.818408f, 0.081785f, 0.107233f, 0.988434f, 0.107233f, 0.500000f, 0.125000f, + 0.064836f, 0.818408f, 0.095702f, 0.084445f, 0.988400f, 0.126232f, 0.625000f, 0.125000f, + 0.045274f, 0.818408f, 0.106164f, 0.058209f, 0.988384f, 0.140386f, 0.750000f, 0.125000f, + 0.095986f, 0.800391f, 0.141684f, 0.332805f, 0.801096f, 0.497480f, 0.625000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, 0.028025f, 0.989332f, 0.142954f, 0.875000f, 0.000000f, + 0.045274f, 0.818408f, 0.106164f, 0.058210f, 0.988384f, 0.140386f, 0.750000f, 0.125000f, + 0.023522f, 0.818408f, 0.112750f, 0.029681f, 0.988314f, 0.149513f, 0.875000f, 0.125000f, + 0.000000f, 0.818408f, 0.115039f, 0.000000f, 0.988311f, 0.152452f, 1.000000f, 0.125000f, + 0.034822f, 0.800391f, 0.166924f, 0.116828f, 0.800035f, 0.588468f, 0.875000f, 0.250000f, + 0.095986f, 0.800391f, 0.141684f, 0.332805f, 0.801096f, 0.497480f, 0.625000f, 0.250000f, + 0.128714f, 0.773584f, 0.128714f, 0.691459f, -0.209208f, 0.691459f, 0.500000f, 0.375000f, + 0.102036f, 0.773584f, 0.150618f, 0.543783f, -0.208883f, 0.812815f, 0.625000f, 0.375000f, + 0.071249f, 0.773584f, 0.167085f, 0.374627f, -0.208673f, 0.903388f, 0.750000f, 0.375000f, + 0.091571f, 0.740625f, 0.135177f, 0.433508f, -0.626329f, 0.647907f, 0.625000f, 0.500000f, + 0.034822f, 0.800391f, 0.166924f, 0.116828f, 0.800035f, 0.588468f, 0.875000f, 0.250000f, + 0.071249f, 0.773584f, 0.167085f, 0.374628f, -0.208673f, 0.903388f, 0.750000f, 0.375000f, + 0.037016f, 0.773584f, 0.177452f, 0.190497f, -0.207986f, 0.959402f, 0.875000f, 0.375000f, + 0.000000f, 0.773584f, 0.181055f, 0.000000f, -0.207916f, 0.978147f, 1.000000f, 0.375000f, + 0.033217f, 0.740625f, 0.159265f, 0.152118f, -0.624784f, 0.765837f, 0.875000f, 0.500000f, + 0.149959f, 0.740625f, 0.063939f, 0.721237f, -0.624756f, 0.299162f, 0.250000f, 0.500000f, + 0.098437f, 0.666797f, -0.000000f, 0.819843f, -0.572589f, 0.000000f, 0.000000f, 0.750000f, + 0.090828f, 0.666797f, 0.038696f, 0.756991f, -0.572775f, 0.314474f, 0.250000f, 0.750000f, + 0.069943f, 0.666797f, 0.069943f, 0.578481f, -0.575083f, 0.578480f, 0.500000f, 0.750000f, + 0.092250f, 0.600000f, 0.039250f, 0.554119f, 0.799779f, 0.230883f, 0.250000f, 1.000000f, + 0.159265f, 0.740625f, 0.033217f, 0.765799f, -0.624831f, 0.152111f, 0.125000f, 0.500000f, + 0.129883f, 0.704150f, -0.000000f, 0.733920f, -0.679236f, 0.000000f, 0.000000f, 0.625000f, + 0.127296f, 0.704150f, 0.026539f, 0.719711f, -0.679374f, 0.143067f, 0.125000f, 0.625000f, + 0.119854f, 0.704150f, 0.051090f, 0.676763f, -0.680523f, 0.280858f, 0.250000f, 0.625000f, + 0.096475f, 0.666797f, 0.020097f, 0.803930f, -0.572768f, 0.160103f, 0.125000f, 0.750000f, + 0.135177f, 0.740625f, 0.091571f, 0.647897f, -0.626344f, 0.433501f, 0.375000f, 0.500000f, + 0.119854f, 0.704150f, 0.051090f, 0.676763f, -0.680523f, 0.280858f, 0.250000f, 0.625000f, + 0.108035f, 0.704150f, 0.073175f, 0.608679f, -0.680856f, 0.407364f, 0.375000f, 0.625000f, + 0.092316f, 0.704150f, 0.092316f, 0.517530f, -0.681414f, 0.517530f, 0.500000f, 0.625000f, + 0.081863f, 0.666797f, 0.055433f, 0.680115f, -0.574467f, 0.455446f, 0.375000f, 0.750000f, + 0.096475f, 0.666797f, 0.020097f, 0.803930f, -0.572768f, 0.160103f, 0.125000f, 0.750000f, + 0.083398f, 0.631201f, -0.000000f, 0.998653f, -0.051878f, 0.000000f, 0.000000f, 0.875000f, + 0.081732f, 0.631201f, 0.017004f, 0.979312f, -0.052085f, 0.195539f, 0.125000f, 0.875000f, + 0.076941f, 0.631201f, 0.032751f, 0.921944f, -0.052662f, 0.383727f, 0.250000f, 0.875000f, + 0.098000f, 0.600000f, 0.020375f, 0.588328f, 0.800016f, 0.117666f, 0.125000f, 1.000000f, + 0.081863f, 0.666797f, 0.055433f, 0.680115f, -0.574467f, 0.455446f, 0.375000f, 0.750000f, + 0.076941f, 0.631201f, 0.032751f, 0.921944f, -0.052662f, 0.383728f, 0.250000f, 0.875000f, + 0.069336f, 0.631201f, 0.046930f, 0.829512f, -0.053050f, 0.555963f, 0.375000f, 0.875000f, + 0.059228f, 0.631201f, 0.059228f, 0.706103f, -0.053279f, 0.706102f, 0.500000f, 0.875000f, + 0.083125f, 0.600000f, 0.056250f, 0.497431f, 0.800807f, 0.333571f, 0.375000f, 1.000000f, + 0.063939f, 0.740625f, 0.149959f, 0.299246f, -0.624480f, 0.721440f, 0.750000f, 0.500000f, + 0.069943f, 0.666797f, 0.069943f, 0.578480f, -0.575083f, 0.578481f, 0.500000f, 0.750000f, + 0.038696f, 0.666797f, 0.090828f, 0.314542f, -0.572521f, 0.757155f, 0.750000f, 0.750000f, + 0.000000f, 0.666797f, 0.098437f, 0.000000f, -0.572589f, 0.819843f, 1.000000f, 0.750000f, + 0.039250f, 0.600000f, 0.092250f, 0.230996f, 0.799557f, 0.554392f, 0.750000f, 1.000000f, + 0.091571f, 0.740625f, 0.135177f, 0.433508f, -0.626329f, 0.647907f, 0.625000f, 0.500000f, + 0.092316f, 0.704150f, 0.092316f, 0.517530f, -0.681414f, 0.517530f, 0.500000f, 0.625000f, + 0.073175f, 0.704150f, 0.108035f, 0.407370f, -0.680843f, 0.608689f, 0.625000f, 0.625000f, + 0.051090f, 0.704150f, 0.119854f, 0.280858f, -0.680523f, 0.676763f, 0.750000f, 0.625000f, + 0.055433f, 0.666797f, 0.081863f, 0.455449f, -0.574459f, 0.680120f, 0.625000f, 0.750000f, + 0.033217f, 0.740625f, 0.159265f, 0.152118f, -0.624783f, 0.765837f, 0.875000f, 0.500000f, + 0.051090f, 0.704150f, 0.119854f, 0.280858f, -0.680523f, 0.676763f, 0.750000f, 0.625000f, + 0.026539f, 0.704150f, 0.127296f, 0.143075f, -0.679330f, 0.719750f, 0.875000f, 0.625000f, + 0.000000f, 0.704150f, 0.129883f, 0.000000f, -0.679236f, 0.733920f, 1.000000f, 0.625000f, + 0.020097f, 0.666797f, 0.096475f, 0.160109f, -0.572729f, 0.803957f, 0.875000f, 0.750000f, + 0.055433f, 0.666797f, 0.081863f, 0.455449f, -0.574459f, 0.680120f, 0.625000f, 0.750000f, + 0.059228f, 0.631201f, 0.059228f, 0.706102f, -0.053279f, 0.706103f, 0.500000f, 0.875000f, + 0.046930f, 0.631201f, 0.069336f, 0.555963f, -0.053067f, 0.829512f, 0.625000f, 0.875000f, + 0.032751f, 0.631201f, 0.076941f, 0.383728f, -0.052662f, 0.921944f, 0.750000f, 0.875000f, + 0.056250f, 0.600000f, 0.083125f, 0.333582f, 0.800793f, 0.497447f, 0.625000f, 1.000000f, + 0.020097f, 0.666797f, 0.096475f, 0.160109f, -0.572729f, 0.803957f, 0.875000f, 0.750000f, + 0.032751f, 0.631201f, 0.076941f, 0.383727f, -0.052662f, 0.921944f, 0.750000f, 0.875000f, + 0.017004f, 0.631201f, 0.081732f, 0.195539f, -0.052105f, 0.979311f, 0.875000f, 0.875000f, + 0.000000f, 0.631201f, 0.083398f, 0.000000f, -0.051878f, 0.998653f, 1.000000f, 0.875000f, + 0.020375f, 0.600000f, 0.098000f, 0.117676f, 0.799975f, 0.588381f, 0.875000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.674579f, 0.299813f, 0.674579f, 0.000000f, 0.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.674579f, 0.299813f, 0.674579f, 1.000000f, 0.000000f, + 0.000000f, 0.600000f, 0.100000f, 0.000000f, 0.800000f, 0.600000f, 0.000000f, 1.000000f, + -0.100000f, 0.600000f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 1.000000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.674579f, 0.299813f, 0.674579f, 0.500000f, 0.000000f, + 0.000000f, 0.740625f, 0.162500f, 0.000000f, -0.624695f, 0.780869f, 0.000000f, 0.500000f, + -0.115516f, 0.740625f, 0.115516f, -0.553962f, -0.621492f, 0.553962f, 0.500000f, 0.500000f, + -0.162500f, 0.740625f, -0.000000f, -0.780869f, -0.624695f, -0.000000f, 1.000000f, 0.500000f, + -0.071000f, 0.600000f, 0.071000f, -0.427005f, 0.797078f, 0.427005f, 0.500000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.184222f, 0.872306f, 0.452928f, 0.250000f, 0.000000f, + 0.000000f, 0.800391f, 0.170313f, 0.000000f, 0.800000f, 0.600000f, 0.000000f, 0.250000f, + -0.067026f, 0.800391f, 0.157173f, -0.229837f, 0.799965f, 0.554284f, 0.250000f, 0.250000f, + -0.121080f, 0.800391f, 0.121080f, -0.422824f, 0.801523f, 0.422824f, 0.500000f, 0.250000f, + -0.063939f, 0.740625f, 0.149959f, -0.299162f, -0.624756f, 0.721237f, 0.250000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, -0.028025f, 0.989332f, 0.142954f, 0.125000f, 0.000000f, + 0.000000f, 0.818408f, 0.115039f, 0.000000f, 0.988311f, 0.152452f, 0.000000f, 0.125000f, + -0.023522f, 0.818408f, 0.112750f, -0.029677f, 0.988317f, 0.149493f, 0.125000f, 0.125000f, + -0.045274f, 0.818408f, 0.106164f, -0.058210f, 0.988384f, 0.140386f, 0.250000f, 0.125000f, + -0.034822f, 0.800391f, 0.166924f, -0.116818f, 0.800075f, 0.588416f, 0.125000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, -0.080516f, 0.989432f, 0.120585f, 0.375000f, 0.000000f, + -0.045274f, 0.818408f, 0.106164f, -0.058209f, 0.988384f, 0.140386f, 0.250000f, 0.125000f, + -0.064836f, 0.818408f, 0.095702f, -0.084441f, 0.988401f, 0.126226f, 0.375000f, 0.125000f, + -0.081785f, 0.818408f, 0.081785f, -0.107233f, 0.988434f, 0.107233f, 0.500000f, 0.125000f, + -0.095986f, 0.800391f, 0.141684f, -0.332794f, 0.801110f, 0.497465f, 0.375000f, 0.250000f, + -0.034822f, 0.800391f, 0.166924f, -0.116818f, 0.800075f, 0.588416f, 0.125000f, 0.250000f, + 0.000000f, 0.773584f, 0.181055f, 0.000000f, -0.207916f, 0.978147f, 0.000000f, 0.375000f, + -0.037016f, 0.773584f, 0.177452f, -0.190496f, -0.208008f, 0.959398f, 0.125000f, 0.375000f, + -0.071249f, 0.773584f, 0.167085f, -0.374628f, -0.208673f, 0.903388f, 0.250000f, 0.375000f, + -0.033217f, 0.740625f, 0.159265f, -0.152111f, -0.624831f, 0.765799f, 0.125000f, 0.500000f, + -0.095986f, 0.800391f, 0.141684f, -0.332794f, 0.801110f, 0.497465f, 0.375000f, 0.250000f, + -0.071249f, 0.773584f, 0.167085f, -0.374627f, -0.208673f, 0.903388f, 0.250000f, 0.375000f, + -0.102036f, 0.773584f, 0.150618f, -0.543782f, -0.208889f, 0.812814f, 0.375000f, 0.375000f, + -0.128714f, 0.773584f, 0.128714f, -0.691459f, -0.209208f, 0.691459f, 0.500000f, 0.375000f, + -0.091571f, 0.740625f, 0.135177f, -0.433501f, -0.626344f, 0.647897f, 0.375000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, -0.452928f, 0.872306f, 0.184222f, 0.750000f, 0.000000f, + -0.121080f, 0.800391f, 0.121080f, -0.422824f, 0.801523f, 0.422824f, 0.500000f, 0.250000f, + -0.157173f, 0.800391f, 0.067026f, -0.554553f, 0.799746f, 0.229949f, 0.750000f, 0.250000f, + -0.170313f, 0.800391f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 1.000000f, 0.250000f, + -0.149959f, 0.740625f, 0.063939f, -0.721440f, -0.624481f, 0.299246f, 0.750000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, -0.120585f, 0.989432f, 0.080516f, 0.625000f, 0.000000f, + -0.081785f, 0.818408f, 0.081785f, -0.107233f, 0.988434f, 0.107233f, 0.500000f, 0.125000f, + -0.095702f, 0.818408f, 0.064836f, -0.126232f, 0.988400f, 0.084445f, 0.625000f, 0.125000f, + -0.106164f, 0.818408f, 0.045274f, -0.140386f, 0.988384f, 0.058209f, 0.750000f, 0.125000f, + -0.141684f, 0.800391f, 0.095986f, -0.497480f, 0.801096f, 0.332805f, 0.625000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, -0.142954f, 0.989332f, 0.028025f, 0.875000f, 0.000000f, + -0.106164f, 0.818408f, 0.045274f, -0.140386f, 0.988384f, 0.058210f, 0.750000f, 0.125000f, + -0.112750f, 0.818408f, 0.023522f, -0.149513f, 0.988314f, 0.029681f, 0.875000f, 0.125000f, + -0.115039f, 0.818408f, -0.000000f, -0.152452f, 0.988311f, 0.000000f, 1.000000f, 0.125000f, + -0.166924f, 0.800391f, 0.034822f, -0.588468f, 0.800035f, 0.116828f, 0.875000f, 0.250000f, + -0.141684f, 0.800391f, 0.095986f, -0.497480f, 0.801096f, 0.332805f, 0.625000f, 0.250000f, + -0.128714f, 0.773584f, 0.128714f, -0.691459f, -0.209208f, 0.691459f, 0.500000f, 0.375000f, + -0.150618f, 0.773584f, 0.102036f, -0.812815f, -0.208883f, 0.543783f, 0.625000f, 0.375000f, + -0.167085f, 0.773584f, 0.071249f, -0.903388f, -0.208673f, 0.374627f, 0.750000f, 0.375000f, + -0.135177f, 0.740625f, 0.091571f, -0.647907f, -0.626329f, 0.433508f, 0.625000f, 0.500000f, + -0.166924f, 0.800391f, 0.034822f, -0.588468f, 0.800035f, 0.116828f, 0.875000f, 0.250000f, + -0.167085f, 0.773584f, 0.071249f, -0.903388f, -0.208673f, 0.374628f, 0.750000f, 0.375000f, + -0.177452f, 0.773584f, 0.037016f, -0.959402f, -0.207986f, 0.190497f, 0.875000f, 0.375000f, + -0.181055f, 0.773584f, -0.000000f, -0.978147f, -0.207916f, -0.000000f, 1.000000f, 0.375000f, + -0.159265f, 0.740625f, 0.033217f, -0.765837f, -0.624784f, 0.152118f, 0.875000f, 0.500000f, + -0.063939f, 0.740625f, 0.149959f, -0.299162f, -0.624756f, 0.721237f, 0.250000f, 0.500000f, + 0.000000f, 0.666797f, 0.098437f, 0.000000f, -0.572589f, 0.819843f, 0.000000f, 0.750000f, + -0.038696f, 0.666797f, 0.090828f, -0.314474f, -0.572775f, 0.756991f, 0.250000f, 0.750000f, + -0.069943f, 0.666797f, 0.069943f, -0.578480f, -0.575083f, 0.578481f, 0.500000f, 0.750000f, + -0.039250f, 0.600000f, 0.092250f, -0.230883f, 0.799779f, 0.554119f, 0.250000f, 1.000000f, + -0.033217f, 0.740625f, 0.159265f, -0.152111f, -0.624831f, 0.765799f, 0.125000f, 0.500000f, + 0.000000f, 0.704150f, 0.129883f, 0.000000f, -0.679236f, 0.733920f, 0.000000f, 0.625000f, + -0.026539f, 0.704150f, 0.127296f, -0.143067f, -0.679374f, 0.719711f, 0.125000f, 0.625000f, + -0.051090f, 0.704150f, 0.119854f, -0.280858f, -0.680523f, 0.676763f, 0.250000f, 0.625000f, + -0.020097f, 0.666797f, 0.096475f, -0.160103f, -0.572768f, 0.803930f, 0.125000f, 0.750000f, + -0.091571f, 0.740625f, 0.135177f, -0.433501f, -0.626344f, 0.647897f, 0.375000f, 0.500000f, + -0.051090f, 0.704150f, 0.119854f, -0.280858f, -0.680523f, 0.676763f, 0.250000f, 0.625000f, + -0.073175f, 0.704150f, 0.108035f, -0.407364f, -0.680856f, 0.608679f, 0.375000f, 0.625000f, + -0.092316f, 0.704150f, 0.092316f, -0.517530f, -0.681414f, 0.517530f, 0.500000f, 0.625000f, + -0.055433f, 0.666797f, 0.081863f, -0.455446f, -0.574467f, 0.680115f, 0.375000f, 0.750000f, + -0.020097f, 0.666797f, 0.096475f, -0.160103f, -0.572768f, 0.803930f, 0.125000f, 0.750000f, + 0.000000f, 0.631201f, 0.083398f, 0.000000f, -0.051878f, 0.998653f, 0.000000f, 0.875000f, + -0.017004f, 0.631201f, 0.081732f, -0.195539f, -0.052085f, 0.979312f, 0.125000f, 0.875000f, + -0.032751f, 0.631201f, 0.076941f, -0.383727f, -0.052662f, 0.921944f, 0.250000f, 0.875000f, + -0.020375f, 0.600000f, 0.098000f, -0.117666f, 0.800016f, 0.588328f, 0.125000f, 1.000000f, + -0.055433f, 0.666797f, 0.081863f, -0.455446f, -0.574467f, 0.680115f, 0.375000f, 0.750000f, + -0.032751f, 0.631201f, 0.076941f, -0.383728f, -0.052662f, 0.921944f, 0.250000f, 0.875000f, + -0.046930f, 0.631201f, 0.069336f, -0.555963f, -0.053050f, 0.829512f, 0.375000f, 0.875000f, + -0.059228f, 0.631201f, 0.059228f, -0.706102f, -0.053279f, 0.706103f, 0.500000f, 0.875000f, + -0.056250f, 0.600000f, 0.083125f, -0.333571f, 0.800807f, 0.497431f, 0.375000f, 1.000000f, + -0.149959f, 0.740625f, 0.063939f, -0.721440f, -0.624480f, 0.299246f, 0.750000f, 0.500000f, + -0.069943f, 0.666797f, 0.069943f, -0.578481f, -0.575083f, 0.578480f, 0.500000f, 0.750000f, + -0.090828f, 0.666797f, 0.038696f, -0.757155f, -0.572521f, 0.314542f, 0.750000f, 0.750000f, + -0.098437f, 0.666797f, -0.000000f, -0.819843f, -0.572589f, -0.000000f, 1.000000f, 0.750000f, + -0.092250f, 0.600000f, 0.039250f, -0.554392f, 0.799557f, 0.230996f, 0.750000f, 1.000000f, + -0.135177f, 0.740625f, 0.091571f, -0.647907f, -0.626329f, 0.433508f, 0.625000f, 0.500000f, + -0.092316f, 0.704150f, 0.092316f, -0.517530f, -0.681414f, 0.517530f, 0.500000f, 0.625000f, + -0.108035f, 0.704150f, 0.073175f, -0.608689f, -0.680843f, 0.407370f, 0.625000f, 0.625000f, + -0.119854f, 0.704150f, 0.051090f, -0.676763f, -0.680523f, 0.280858f, 0.750000f, 0.625000f, + -0.081863f, 0.666797f, 0.055433f, -0.680120f, -0.574459f, 0.455449f, 0.625000f, 0.750000f, + -0.159265f, 0.740625f, 0.033217f, -0.765837f, -0.624783f, 0.152118f, 0.875000f, 0.500000f, + -0.119854f, 0.704150f, 0.051090f, -0.676763f, -0.680523f, 0.280858f, 0.750000f, 0.625000f, + -0.127296f, 0.704150f, 0.026539f, -0.719750f, -0.679330f, 0.143075f, 0.875000f, 0.625000f, + -0.129883f, 0.704150f, -0.000000f, -0.733920f, -0.679236f, -0.000000f, 1.000000f, 0.625000f, + -0.096475f, 0.666797f, 0.020097f, -0.803957f, -0.572729f, 0.160109f, 0.875000f, 0.750000f, + -0.081863f, 0.666797f, 0.055433f, -0.680120f, -0.574459f, 0.455449f, 0.625000f, 0.750000f, + -0.059228f, 0.631201f, 0.059228f, -0.706103f, -0.053279f, 0.706102f, 0.500000f, 0.875000f, + -0.069336f, 0.631201f, 0.046930f, -0.829512f, -0.053067f, 0.555963f, 0.625000f, 0.875000f, + -0.076941f, 0.631201f, 0.032751f, -0.921944f, -0.052662f, 0.383728f, 0.750000f, 0.875000f, + -0.083125f, 0.600000f, 0.056250f, -0.497447f, 0.800793f, 0.333582f, 0.625000f, 1.000000f, + -0.096475f, 0.666797f, 0.020097f, -0.803957f, -0.572729f, 0.160109f, 0.875000f, 0.750000f, + -0.076941f, 0.631201f, 0.032751f, -0.921944f, -0.052662f, 0.383727f, 0.750000f, 0.875000f, + -0.081732f, 0.631201f, 0.017004f, -0.979311f, -0.052105f, 0.195539f, 0.875000f, 0.875000f, + -0.083398f, 0.631201f, -0.000000f, -0.998653f, -0.051878f, -0.000000f, 1.000000f, 0.875000f, + -0.098000f, 0.600000f, 0.020375f, -0.588381f, 0.799975f, 0.117676f, 0.875000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.674579f, 0.299813f, -0.674579f, 0.000000f, 0.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.674579f, 0.299813f, -0.674579f, 1.000000f, 0.000000f, + -0.100000f, 0.600000f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 0.000000f, 1.000000f, + 0.000000f, 0.600000f, -0.100000f, 0.000000f, 0.800000f, -0.600000f, 1.000000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.674579f, 0.299813f, -0.674579f, 0.500000f, 0.000000f, + -0.162500f, 0.740625f, -0.000000f, -0.780869f, -0.624695f, -0.000000f, 0.000000f, 0.500000f, + -0.115516f, 0.740625f, -0.115516f, -0.553962f, -0.621492f, -0.553962f, 0.500000f, 0.500000f, + 0.000000f, 0.740625f, -0.162500f, 0.000000f, -0.624695f, -0.780869f, 1.000000f, 0.500000f, + -0.071000f, 0.600000f, -0.071000f, -0.427005f, 0.797078f, -0.427005f, 0.500000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, -0.452928f, 0.872306f, -0.184222f, 0.250000f, 0.000000f, + -0.170313f, 0.800391f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 0.000000f, 0.250000f, + -0.157173f, 0.800391f, -0.067026f, -0.554284f, 0.799965f, -0.229837f, 0.250000f, 0.250000f, + -0.121080f, 0.800391f, -0.121080f, -0.422824f, 0.801523f, -0.422824f, 0.500000f, 0.250000f, + -0.149959f, 0.740625f, -0.063939f, -0.721237f, -0.624756f, -0.299162f, 0.250000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, -0.142954f, 0.989332f, -0.028025f, 0.125000f, 0.000000f, + -0.115039f, 0.818408f, -0.000000f, -0.152452f, 0.988311f, 0.000000f, 0.000000f, 0.125000f, + -0.112750f, 0.818408f, -0.023522f, -0.149493f, 0.988317f, -0.029677f, 0.125000f, 0.125000f, + -0.106164f, 0.818408f, -0.045274f, -0.140386f, 0.988384f, -0.058210f, 0.250000f, 0.125000f, + -0.166924f, 0.800391f, -0.034822f, -0.588416f, 0.800075f, -0.116818f, 0.125000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, -0.120585f, 0.989432f, -0.080516f, 0.375000f, 0.000000f, + -0.106164f, 0.818408f, -0.045274f, -0.140386f, 0.988384f, -0.058209f, 0.250000f, 0.125000f, + -0.095702f, 0.818408f, -0.064836f, -0.126226f, 0.988401f, -0.084441f, 0.375000f, 0.125000f, + -0.081785f, 0.818408f, -0.081785f, -0.107233f, 0.988434f, -0.107233f, 0.500000f, 0.125000f, + -0.141684f, 0.800391f, -0.095986f, -0.497465f, 0.801110f, -0.332794f, 0.375000f, 0.250000f, + -0.166924f, 0.800391f, -0.034822f, -0.588416f, 0.800075f, -0.116818f, 0.125000f, 0.250000f, + -0.181055f, 0.773584f, -0.000000f, -0.978147f, -0.207916f, -0.000000f, 0.000000f, 0.375000f, + -0.177452f, 0.773584f, -0.037016f, -0.959398f, -0.208008f, -0.190496f, 0.125000f, 0.375000f, + -0.167085f, 0.773584f, -0.071249f, -0.903388f, -0.208673f, -0.374628f, 0.250000f, 0.375000f, + -0.159265f, 0.740625f, -0.033217f, -0.765799f, -0.624831f, -0.152111f, 0.125000f, 0.500000f, + -0.141684f, 0.800391f, -0.095986f, -0.497465f, 0.801110f, -0.332794f, 0.375000f, 0.250000f, + -0.167085f, 0.773584f, -0.071249f, -0.903388f, -0.208673f, -0.374627f, 0.250000f, 0.375000f, + -0.150618f, 0.773584f, -0.102036f, -0.812814f, -0.208889f, -0.543782f, 0.375000f, 0.375000f, + -0.128714f, 0.773584f, -0.128714f, -0.691459f, -0.209208f, -0.691459f, 0.500000f, 0.375000f, + -0.135177f, 0.740625f, -0.091571f, -0.647897f, -0.626344f, -0.433501f, 0.375000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, -0.184222f, 0.872306f, -0.452928f, 0.750000f, 0.000000f, + -0.121080f, 0.800391f, -0.121080f, -0.422824f, 0.801523f, -0.422824f, 0.500000f, 0.250000f, + -0.067026f, 0.800391f, -0.157173f, -0.229949f, 0.799746f, -0.554553f, 0.750000f, 0.250000f, + 0.000000f, 0.800391f, -0.170313f, 0.000000f, 0.800000f, -0.600000f, 1.000000f, 0.250000f, + -0.063939f, 0.740625f, -0.149959f, -0.299246f, -0.624481f, -0.721440f, 0.750000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, -0.080516f, 0.989432f, -0.120585f, 0.625000f, 0.000000f, + -0.081785f, 0.818408f, -0.081785f, -0.107233f, 0.988434f, -0.107233f, 0.500000f, 0.125000f, + -0.064836f, 0.818408f, -0.095702f, -0.084445f, 0.988400f, -0.126232f, 0.625000f, 0.125000f, + -0.045274f, 0.818408f, -0.106164f, -0.058209f, 0.988384f, -0.140386f, 0.750000f, 0.125000f, + -0.095986f, 0.800391f, -0.141684f, -0.332805f, 0.801096f, -0.497480f, 0.625000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, -0.028025f, 0.989332f, -0.142954f, 0.875000f, 0.000000f, + -0.045274f, 0.818408f, -0.106164f, -0.058210f, 0.988384f, -0.140386f, 0.750000f, 0.125000f, + -0.023522f, 0.818408f, -0.112750f, -0.029681f, 0.988314f, -0.149513f, 0.875000f, 0.125000f, + 0.000000f, 0.818408f, -0.115039f, 0.000000f, 0.988311f, -0.152452f, 1.000000f, 0.125000f, + -0.034822f, 0.800391f, -0.166924f, -0.116828f, 0.800035f, -0.588468f, 0.875000f, 0.250000f, + -0.095986f, 0.800391f, -0.141684f, -0.332805f, 0.801096f, -0.497480f, 0.625000f, 0.250000f, + -0.128714f, 0.773584f, -0.128714f, -0.691459f, -0.209208f, -0.691459f, 0.500000f, 0.375000f, + -0.102036f, 0.773584f, -0.150618f, -0.543783f, -0.208883f, -0.812815f, 0.625000f, 0.375000f, + -0.071249f, 0.773584f, -0.167085f, -0.374627f, -0.208673f, -0.903388f, 0.750000f, 0.375000f, + -0.091571f, 0.740625f, -0.135177f, -0.433508f, -0.626329f, -0.647907f, 0.625000f, 0.500000f, + -0.034822f, 0.800391f, -0.166924f, -0.116828f, 0.800035f, -0.588468f, 0.875000f, 0.250000f, + -0.071249f, 0.773584f, -0.167085f, -0.374628f, -0.208673f, -0.903388f, 0.750000f, 0.375000f, + -0.037016f, 0.773584f, -0.177452f, -0.190497f, -0.207986f, -0.959402f, 0.875000f, 0.375000f, + 0.000000f, 0.773584f, -0.181055f, 0.000000f, -0.207916f, -0.978147f, 1.000000f, 0.375000f, + -0.033217f, 0.740625f, -0.159265f, -0.152118f, -0.624784f, -0.765837f, 0.875000f, 0.500000f, + -0.149959f, 0.740625f, -0.063939f, -0.721237f, -0.624756f, -0.299162f, 0.250000f, 0.500000f, + -0.098437f, 0.666797f, -0.000000f, -0.819843f, -0.572589f, -0.000000f, 0.000000f, 0.750000f, + -0.090828f, 0.666797f, -0.038696f, -0.756991f, -0.572775f, -0.314474f, 0.250000f, 0.750000f, + -0.069943f, 0.666797f, -0.069943f, -0.578481f, -0.575083f, -0.578480f, 0.500000f, 0.750000f, + -0.092250f, 0.600000f, -0.039250f, -0.554119f, 0.799779f, -0.230883f, 0.250000f, 1.000000f, + -0.159265f, 0.740625f, -0.033217f, -0.765799f, -0.624831f, -0.152111f, 0.125000f, 0.500000f, + -0.129883f, 0.704150f, -0.000000f, -0.733920f, -0.679236f, -0.000000f, 0.000000f, 0.625000f, + -0.127296f, 0.704150f, -0.026539f, -0.719711f, -0.679374f, -0.143067f, 0.125000f, 0.625000f, + -0.119854f, 0.704150f, -0.051090f, -0.676763f, -0.680523f, -0.280858f, 0.250000f, 0.625000f, + -0.096475f, 0.666797f, -0.020097f, -0.803930f, -0.572768f, -0.160103f, 0.125000f, 0.750000f, + -0.135177f, 0.740625f, -0.091571f, -0.647897f, -0.626344f, -0.433501f, 0.375000f, 0.500000f, + -0.119854f, 0.704150f, -0.051090f, -0.676763f, -0.680523f, -0.280858f, 0.250000f, 0.625000f, + -0.108035f, 0.704150f, -0.073175f, -0.608679f, -0.680856f, -0.407364f, 0.375000f, 0.625000f, + -0.092316f, 0.704150f, -0.092316f, -0.517530f, -0.681414f, -0.517530f, 0.500000f, 0.625000f, + -0.081863f, 0.666797f, -0.055433f, -0.680115f, -0.574467f, -0.455446f, 0.375000f, 0.750000f, + -0.096475f, 0.666797f, -0.020097f, -0.803930f, -0.572768f, -0.160103f, 0.125000f, 0.750000f, + -0.083398f, 0.631201f, -0.000000f, -0.998653f, -0.051878f, -0.000000f, 0.000000f, 0.875000f, + -0.081732f, 0.631201f, -0.017004f, -0.979312f, -0.052085f, -0.195539f, 0.125000f, 0.875000f, + -0.076941f, 0.631201f, -0.032751f, -0.921944f, -0.052662f, -0.383727f, 0.250000f, 0.875000f, + -0.098000f, 0.600000f, -0.020375f, -0.588328f, 0.800016f, -0.117666f, 0.125000f, 1.000000f, + -0.081863f, 0.666797f, -0.055433f, -0.680115f, -0.574467f, -0.455446f, 0.375000f, 0.750000f, + -0.076941f, 0.631201f, -0.032751f, -0.921944f, -0.052662f, -0.383728f, 0.250000f, 0.875000f, + -0.069336f, 0.631201f, -0.046930f, -0.829512f, -0.053050f, -0.555963f, 0.375000f, 0.875000f, + -0.059228f, 0.631201f, -0.059228f, -0.706103f, -0.053279f, -0.706102f, 0.500000f, 0.875000f, + -0.083125f, 0.600000f, -0.056250f, -0.497431f, 0.800807f, -0.333571f, 0.375000f, 1.000000f, + -0.063939f, 0.740625f, -0.149959f, -0.299246f, -0.624480f, -0.721440f, 0.750000f, 0.500000f, + -0.069943f, 0.666797f, -0.069943f, -0.578480f, -0.575083f, -0.578481f, 0.500000f, 0.750000f, + -0.038696f, 0.666797f, -0.090828f, -0.314542f, -0.572521f, -0.757155f, 0.750000f, 0.750000f, + 0.000000f, 0.666797f, -0.098437f, 0.000000f, -0.572589f, -0.819843f, 1.000000f, 0.750000f, + -0.039250f, 0.600000f, -0.092250f, -0.230996f, 0.799557f, -0.554392f, 0.750000f, 1.000000f, + -0.091571f, 0.740625f, -0.135177f, -0.433508f, -0.626329f, -0.647907f, 0.625000f, 0.500000f, + -0.092316f, 0.704150f, -0.092316f, -0.517530f, -0.681414f, -0.517530f, 0.500000f, 0.625000f, + -0.073175f, 0.704150f, -0.108035f, -0.407370f, -0.680843f, -0.608689f, 0.625000f, 0.625000f, + -0.051090f, 0.704150f, -0.119854f, -0.280858f, -0.680523f, -0.676763f, 0.750000f, 0.625000f, + -0.055433f, 0.666797f, -0.081863f, -0.455449f, -0.574459f, -0.680120f, 0.625000f, 0.750000f, + -0.033217f, 0.740625f, -0.159265f, -0.152118f, -0.624783f, -0.765837f, 0.875000f, 0.500000f, + -0.051090f, 0.704150f, -0.119854f, -0.280858f, -0.680523f, -0.676763f, 0.750000f, 0.625000f, + -0.026539f, 0.704150f, -0.127296f, -0.143075f, -0.679330f, -0.719750f, 0.875000f, 0.625000f, + 0.000000f, 0.704150f, -0.129883f, 0.000000f, -0.679236f, -0.733920f, 1.000000f, 0.625000f, + -0.020097f, 0.666797f, -0.096475f, -0.160109f, -0.572729f, -0.803957f, 0.875000f, 0.750000f, + -0.055433f, 0.666797f, -0.081863f, -0.455449f, -0.574459f, -0.680120f, 0.625000f, 0.750000f, + -0.059228f, 0.631201f, -0.059228f, -0.706102f, -0.053279f, -0.706103f, 0.500000f, 0.875000f, + -0.046930f, 0.631201f, -0.069336f, -0.555963f, -0.053067f, -0.829512f, 0.625000f, 0.875000f, + -0.032751f, 0.631201f, -0.076941f, -0.383728f, -0.052662f, -0.921944f, 0.750000f, 0.875000f, + -0.056250f, 0.600000f, -0.083125f, -0.333582f, 0.800793f, -0.497447f, 0.625000f, 1.000000f, + -0.020097f, 0.666797f, -0.096475f, -0.160109f, -0.572729f, -0.803957f, 0.875000f, 0.750000f, + -0.032751f, 0.631201f, -0.076941f, -0.383727f, -0.052662f, -0.921944f, 0.750000f, 0.875000f, + -0.017004f, 0.631201f, -0.081732f, -0.195539f, -0.052105f, -0.979311f, 0.875000f, 0.875000f, + 0.000000f, 0.631201f, -0.083398f, 0.000000f, -0.051878f, -0.998653f, 1.000000f, 0.875000f, + -0.020375f, 0.600000f, -0.098000f, -0.117676f, 0.799975f, -0.588381f, 0.875000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.674579f, 0.299813f, -0.674579f, 0.000000f, 0.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.674579f, 0.299813f, -0.674579f, 1.000000f, 0.000000f, + 0.000000f, 0.600000f, -0.100000f, 0.000000f, 0.800000f, -0.600000f, 0.000000f, 1.000000f, + 0.100000f, 0.600000f, -0.000000f, 0.600000f, 0.800000f, -0.000000f, 1.000000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.674579f, 0.299813f, -0.674579f, 0.500000f, 0.000000f, + 0.000000f, 0.740625f, -0.162500f, 0.000000f, -0.624695f, -0.780869f, 0.000000f, 0.500000f, + 0.115516f, 0.740625f, -0.115516f, 0.553962f, -0.621492f, -0.553962f, 0.500000f, 0.500000f, + 0.162500f, 0.740625f, -0.000000f, 0.780869f, -0.624695f, 0.000000f, 1.000000f, 0.500000f, + 0.071000f, 0.600000f, -0.071000f, 0.427005f, 0.797078f, -0.427005f, 0.500000f, 1.000000f, + 0.000000f, 0.825000f, -0.000000f, 0.184222f, 0.872306f, -0.452928f, 0.250000f, 0.000000f, + 0.000000f, 0.800391f, -0.170313f, 0.000000f, 0.800000f, -0.600000f, 0.000000f, 0.250000f, + 0.067026f, 0.800391f, -0.157173f, 0.229837f, 0.799965f, -0.554284f, 0.250000f, 0.250000f, + 0.121080f, 0.800391f, -0.121080f, 0.422824f, 0.801523f, -0.422824f, 0.500000f, 0.250000f, + 0.063939f, 0.740625f, -0.149959f, 0.299162f, -0.624756f, -0.721237f, 0.250000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, 0.028025f, 0.989332f, -0.142954f, 0.125000f, 0.000000f, + 0.000000f, 0.818408f, -0.115039f, 0.000000f, 0.988311f, -0.152452f, 0.000000f, 0.125000f, + 0.023522f, 0.818408f, -0.112750f, 0.029677f, 0.988317f, -0.149493f, 0.125000f, 0.125000f, + 0.045274f, 0.818408f, -0.106164f, 0.058210f, 0.988384f, -0.140386f, 0.250000f, 0.125000f, + 0.034822f, 0.800391f, -0.166924f, 0.116818f, 0.800075f, -0.588416f, 0.125000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, 0.080516f, 0.989432f, -0.120585f, 0.375000f, 0.000000f, + 0.045274f, 0.818408f, -0.106164f, 0.058209f, 0.988384f, -0.140386f, 0.250000f, 0.125000f, + 0.064836f, 0.818408f, -0.095702f, 0.084441f, 0.988401f, -0.126226f, 0.375000f, 0.125000f, + 0.081785f, 0.818408f, -0.081785f, 0.107233f, 0.988434f, -0.107233f, 0.500000f, 0.125000f, + 0.095986f, 0.800391f, -0.141684f, 0.332794f, 0.801110f, -0.497465f, 0.375000f, 0.250000f, + 0.034822f, 0.800391f, -0.166924f, 0.116818f, 0.800075f, -0.588416f, 0.125000f, 0.250000f, + 0.000000f, 0.773584f, -0.181055f, 0.000000f, -0.207916f, -0.978147f, 0.000000f, 0.375000f, + 0.037016f, 0.773584f, -0.177452f, 0.190496f, -0.208008f, -0.959398f, 0.125000f, 0.375000f, + 0.071249f, 0.773584f, -0.167085f, 0.374628f, -0.208673f, -0.903388f, 0.250000f, 0.375000f, + 0.033217f, 0.740625f, -0.159265f, 0.152111f, -0.624831f, -0.765799f, 0.125000f, 0.500000f, + 0.095986f, 0.800391f, -0.141684f, 0.332794f, 0.801110f, -0.497465f, 0.375000f, 0.250000f, + 0.071249f, 0.773584f, -0.167085f, 0.374627f, -0.208673f, -0.903388f, 0.250000f, 0.375000f, + 0.102036f, 0.773584f, -0.150618f, 0.543782f, -0.208889f, -0.812814f, 0.375000f, 0.375000f, + 0.128714f, 0.773584f, -0.128714f, 0.691459f, -0.209208f, -0.691459f, 0.500000f, 0.375000f, + 0.091571f, 0.740625f, -0.135177f, 0.433501f, -0.626344f, -0.647897f, 0.375000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, 0.452928f, 0.872306f, -0.184222f, 0.750000f, 0.000000f, + 0.121080f, 0.800391f, -0.121080f, 0.422824f, 0.801523f, -0.422824f, 0.500000f, 0.250000f, + 0.157173f, 0.800391f, -0.067026f, 0.554553f, 0.799746f, -0.229949f, 0.750000f, 0.250000f, + 0.170313f, 0.800391f, -0.000000f, 0.600000f, 0.800000f, -0.000000f, 1.000000f, 0.250000f, + 0.149959f, 0.740625f, -0.063939f, 0.721440f, -0.624481f, -0.299246f, 0.750000f, 0.500000f, + 0.000000f, 0.825000f, -0.000000f, 0.120585f, 0.989432f, -0.080516f, 0.625000f, 0.000000f, + 0.081785f, 0.818408f, -0.081785f, 0.107233f, 0.988434f, -0.107233f, 0.500000f, 0.125000f, + 0.095702f, 0.818408f, -0.064836f, 0.126232f, 0.988400f, -0.084445f, 0.625000f, 0.125000f, + 0.106164f, 0.818408f, -0.045274f, 0.140386f, 0.988384f, -0.058209f, 0.750000f, 0.125000f, + 0.141684f, 0.800391f, -0.095986f, 0.497480f, 0.801096f, -0.332805f, 0.625000f, 0.250000f, + 0.000000f, 0.825000f, -0.000000f, 0.142954f, 0.989332f, -0.028025f, 0.875000f, 0.000000f, + 0.106164f, 0.818408f, -0.045274f, 0.140386f, 0.988384f, -0.058210f, 0.750000f, 0.125000f, + 0.112750f, 0.818408f, -0.023522f, 0.149513f, 0.988314f, -0.029681f, 0.875000f, 0.125000f, + 0.115039f, 0.818408f, -0.000000f, 0.152452f, 0.988311f, -0.000000f, 1.000000f, 0.125000f, + 0.166924f, 0.800391f, -0.034822f, 0.588468f, 0.800035f, -0.116828f, 0.875000f, 0.250000f, + 0.141684f, 0.800391f, -0.095986f, 0.497480f, 0.801096f, -0.332805f, 0.625000f, 0.250000f, + 0.128714f, 0.773584f, -0.128714f, 0.691459f, -0.209208f, -0.691459f, 0.500000f, 0.375000f, + 0.150618f, 0.773584f, -0.102036f, 0.812815f, -0.208883f, -0.543783f, 0.625000f, 0.375000f, + 0.167085f, 0.773584f, -0.071249f, 0.903388f, -0.208673f, -0.374627f, 0.750000f, 0.375000f, + 0.135177f, 0.740625f, -0.091571f, 0.647907f, -0.626329f, -0.433508f, 0.625000f, 0.500000f, + 0.166924f, 0.800391f, -0.034822f, 0.588468f, 0.800035f, -0.116828f, 0.875000f, 0.250000f, + 0.167085f, 0.773584f, -0.071249f, 0.903388f, -0.208673f, -0.374628f, 0.750000f, 0.375000f, + 0.177452f, 0.773584f, -0.037016f, 0.959402f, -0.207986f, -0.190497f, 0.875000f, 0.375000f, + 0.181055f, 0.773584f, -0.000000f, 0.978147f, -0.207916f, 0.000000f, 1.000000f, 0.375000f, + 0.159265f, 0.740625f, -0.033217f, 0.765837f, -0.624784f, -0.152118f, 0.875000f, 0.500000f, + 0.063939f, 0.740625f, -0.149959f, 0.299162f, -0.624756f, -0.721237f, 0.250000f, 0.500000f, + 0.000000f, 0.666797f, -0.098437f, 0.000000f, -0.572589f, -0.819843f, 0.000000f, 0.750000f, + 0.038696f, 0.666797f, -0.090828f, 0.314474f, -0.572775f, -0.756991f, 0.250000f, 0.750000f, + 0.069943f, 0.666797f, -0.069943f, 0.578480f, -0.575083f, -0.578481f, 0.500000f, 0.750000f, + 0.039250f, 0.600000f, -0.092250f, 0.230883f, 0.799779f, -0.554119f, 0.250000f, 1.000000f, + 0.033217f, 0.740625f, -0.159265f, 0.152111f, -0.624831f, -0.765799f, 0.125000f, 0.500000f, + 0.000000f, 0.704150f, -0.129883f, 0.000000f, -0.679236f, -0.733920f, 0.000000f, 0.625000f, + 0.026539f, 0.704150f, -0.127296f, 0.143067f, -0.679374f, -0.719711f, 0.125000f, 0.625000f, + 0.051090f, 0.704150f, -0.119854f, 0.280858f, -0.680523f, -0.676763f, 0.250000f, 0.625000f, + 0.020097f, 0.666797f, -0.096475f, 0.160103f, -0.572768f, -0.803930f, 0.125000f, 0.750000f, + 0.091571f, 0.740625f, -0.135177f, 0.433501f, -0.626344f, -0.647897f, 0.375000f, 0.500000f, + 0.051090f, 0.704150f, -0.119854f, 0.280858f, -0.680523f, -0.676763f, 0.250000f, 0.625000f, + 0.073175f, 0.704150f, -0.108035f, 0.407364f, -0.680856f, -0.608679f, 0.375000f, 0.625000f, + 0.092316f, 0.704150f, -0.092316f, 0.517530f, -0.681414f, -0.517530f, 0.500000f, 0.625000f, + 0.055433f, 0.666797f, -0.081863f, 0.455446f, -0.574467f, -0.680115f, 0.375000f, 0.750000f, + 0.020097f, 0.666797f, -0.096475f, 0.160103f, -0.572768f, -0.803930f, 0.125000f, 0.750000f, + 0.000000f, 0.631201f, -0.083398f, 0.000000f, -0.051878f, -0.998653f, 0.000000f, 0.875000f, + 0.017004f, 0.631201f, -0.081732f, 0.195539f, -0.052085f, -0.979312f, 0.125000f, 0.875000f, + 0.032751f, 0.631201f, -0.076941f, 0.383727f, -0.052662f, -0.921944f, 0.250000f, 0.875000f, + 0.020375f, 0.600000f, -0.098000f, 0.117666f, 0.800016f, -0.588328f, 0.125000f, 1.000000f, + 0.055433f, 0.666797f, -0.081863f, 0.455446f, -0.574467f, -0.680115f, 0.375000f, 0.750000f, + 0.032751f, 0.631201f, -0.076941f, 0.383728f, -0.052662f, -0.921944f, 0.250000f, 0.875000f, + 0.046930f, 0.631201f, -0.069336f, 0.555963f, -0.053050f, -0.829512f, 0.375000f, 0.875000f, + 0.059228f, 0.631201f, -0.059228f, 0.706102f, -0.053279f, -0.706103f, 0.500000f, 0.875000f, + 0.056250f, 0.600000f, -0.083125f, 0.333571f, 0.800807f, -0.497431f, 0.375000f, 1.000000f, + 0.149959f, 0.740625f, -0.063939f, 0.721440f, -0.624480f, -0.299246f, 0.750000f, 0.500000f, + 0.069943f, 0.666797f, -0.069943f, 0.578481f, -0.575083f, -0.578480f, 0.500000f, 0.750000f, + 0.090828f, 0.666797f, -0.038696f, 0.757155f, -0.572521f, -0.314542f, 0.750000f, 0.750000f, + 0.098437f, 0.666797f, -0.000000f, 0.819843f, -0.572589f, 0.000000f, 1.000000f, 0.750000f, + 0.092250f, 0.600000f, -0.039250f, 0.554392f, 0.799557f, -0.230996f, 0.750000f, 1.000000f, + 0.135177f, 0.740625f, -0.091571f, 0.647907f, -0.626329f, -0.433508f, 0.625000f, 0.500000f, + 0.092316f, 0.704150f, -0.092316f, 0.517530f, -0.681414f, -0.517530f, 0.500000f, 0.625000f, + 0.108035f, 0.704150f, -0.073175f, 0.608689f, -0.680843f, -0.407370f, 0.625000f, 0.625000f, + 0.119854f, 0.704150f, -0.051090f, 0.676763f, -0.680523f, -0.280858f, 0.750000f, 0.625000f, + 0.081863f, 0.666797f, -0.055433f, 0.680120f, -0.574459f, -0.455449f, 0.625000f, 0.750000f, + 0.159265f, 0.740625f, -0.033217f, 0.765837f, -0.624783f, -0.152118f, 0.875000f, 0.500000f, + 0.119854f, 0.704150f, -0.051090f, 0.676763f, -0.680523f, -0.280858f, 0.750000f, 0.625000f, + 0.127296f, 0.704150f, -0.026539f, 0.719750f, -0.679330f, -0.143075f, 0.875000f, 0.625000f, + 0.129883f, 0.704150f, -0.000000f, 0.733920f, -0.679236f, 0.000000f, 1.000000f, 0.625000f, + 0.096475f, 0.666797f, -0.020097f, 0.803957f, -0.572729f, -0.160109f, 0.875000f, 0.750000f, + 0.081863f, 0.666797f, -0.055433f, 0.680120f, -0.574459f, -0.455449f, 0.625000f, 0.750000f, + 0.059228f, 0.631201f, -0.059228f, 0.706103f, -0.053279f, -0.706102f, 0.500000f, 0.875000f, + 0.069336f, 0.631201f, -0.046930f, 0.829512f, -0.053067f, -0.555963f, 0.625000f, 0.875000f, + 0.076941f, 0.631201f, -0.032751f, 0.921944f, -0.052662f, -0.383728f, 0.750000f, 0.875000f, + 0.083125f, 0.600000f, -0.056250f, 0.497447f, 0.800793f, -0.333582f, 0.625000f, 1.000000f, + 0.096475f, 0.666797f, -0.020097f, 0.803957f, -0.572729f, -0.160109f, 0.875000f, 0.750000f, + 0.076941f, 0.631201f, -0.032751f, 0.921944f, -0.052662f, -0.383727f, 0.750000f, 0.875000f, + 0.081732f, 0.631201f, -0.017004f, 0.979311f, -0.052105f, -0.195539f, 0.875000f, 0.875000f, + 0.083398f, 0.631201f, -0.000000f, 0.998653f, -0.051878f, 0.000000f, 1.000000f, 0.875000f, + 0.098000f, 0.600000f, -0.020375f, 0.588381f, 0.799975f, -0.117676f, 0.875000f, 1.000000f, + 0.100000f, 0.600000f, -0.000000f, 0.600000f, 0.800000f, -0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.600000f, 0.100000f, 0.000000f, 0.800000f, 0.600000f, 1.000000f, 0.000000f, + 0.650000f, 0.450000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, 0.450000f, 0.650000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, + 0.071000f, 0.600000f, 0.071000f, 0.427006f, 0.797077f, 0.427006f, 0.500000f, 0.000000f, + 0.412500f, 0.525000f, -0.000000f, 0.148340f, 0.988936f, -0.000000f, 0.000000f, 0.500000f, + 0.292875f, 0.525000f, 0.292875f, 0.105934f, 0.988714f, 0.105934f, 0.500000f, 0.500000f, + 0.000000f, 0.525000f, 0.412500f, 0.000000f, 0.988936f, 0.148340f, 1.000000f, 0.500000f, + 0.461500f, 0.450000f, 0.461500f, 0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + 0.092250f, 0.600000f, 0.039250f, 0.554119f, 0.799778f, 0.230883f, 0.250000f, 0.000000f, + 0.228125f, 0.555469f, -0.000000f, 0.203954f, 0.978980f, -0.000000f, 0.000000f, 0.250000f, + 0.210445f, 0.555469f, 0.089539f, 0.188404f, 0.978949f, 0.078502f, 0.250000f, 0.250000f, + 0.161969f, 0.555469f, 0.161969f, 0.143654f, 0.979146f, 0.143654f, 0.500000f, 0.250000f, + 0.380531f, 0.525000f, 0.161906f, 0.137033f, 0.988920f, 0.057097f, 0.250000f, 0.500000f, + 0.098000f, 0.600000f, 0.020375f, 0.588329f, 0.800015f, 0.117666f, 0.125000f, 0.000000f, + 0.152344f, 0.575098f, -0.000000f, 0.317497f, 0.948259f, -0.000000f, 0.000000f, 0.125000f, + 0.149297f, 0.575098f, 0.031040f, 0.311317f, 0.948264f, 0.062263f, 0.125000f, 0.125000f, + 0.140537f, 0.575098f, 0.059795f, 0.292417f, 0.948497f, 0.121840f, 0.250000f, 0.125000f, + 0.223562f, 0.555469f, 0.046480f, 0.199984f, 0.978983f, 0.039997f, 0.125000f, 0.250000f, + 0.083125f, 0.600000f, 0.056250f, 0.497432f, 0.800807f, 0.333572f, 0.375000f, 0.000000f, + 0.140537f, 0.575098f, 0.059795f, 0.292417f, 0.948497f, 0.121840f, 0.250000f, 0.125000f, + 0.126636f, 0.575098f, 0.085693f, 0.263031f, 0.948527f, 0.176386f, 0.375000f, 0.125000f, + 0.108164f, 0.575098f, 0.108164f, 0.223681f, 0.948648f, 0.223681f, 0.500000f, 0.125000f, + 0.189629f, 0.555469f, 0.128320f, 0.168938f, 0.979094f, 0.113288f, 0.375000f, 0.250000f, + 0.223562f, 0.555469f, 0.046480f, 0.199985f, 0.978982f, 0.039997f, 0.125000f, 0.250000f, + 0.317969f, 0.539355f, -0.000000f, 0.157389f, 0.987537f, -0.000000f, 0.000000f, 0.375000f, + 0.311609f, 0.539355f, 0.064786f, 0.154325f, 0.987538f, 0.030865f, 0.125000f, 0.375000f, + 0.293326f, 0.539355f, 0.124803f, 0.144929f, 0.987598f, 0.060387f, 0.250000f, 0.375000f, + 0.404250f, 0.525000f, 0.084047f, 0.145452f, 0.988938f, 0.029090f, 0.125000f, 0.500000f, + 0.189629f, 0.555469f, 0.128320f, 0.168939f, 0.979094f, 0.113289f, 0.375000f, 0.250000f, + 0.293326f, 0.539355f, 0.124803f, 0.144929f, 0.987598f, 0.060387f, 0.250000f, 0.375000f, + 0.264312f, 0.539355f, 0.178857f, 0.130361f, 0.987605f, 0.087419f, 0.375000f, 0.375000f, + 0.225758f, 0.539355f, 0.225758f, 0.110849f, 0.987636f, 0.110849f, 0.500000f, 0.375000f, + 0.342891f, 0.525000f, 0.232031f, 0.122865f, 0.988997f, 0.082392f, 0.375000f, 0.500000f, + 0.039250f, 0.600000f, 0.092250f, 0.230997f, 0.799556f, 0.554392f, 0.750000f, 0.000000f, + 0.161969f, 0.555469f, 0.161969f, 0.143654f, 0.979146f, 0.143654f, 0.500000f, 0.250000f, + 0.089539f, 0.555469f, 0.210445f, 0.078560f, 0.978918f, 0.188544f, 0.750000f, 0.250000f, + 0.000000f, 0.555469f, 0.228125f, 0.000000f, 0.978980f, 0.203954f, 1.000000f, 0.250000f, + 0.161906f, 0.525000f, 0.380531f, 0.057140f, 0.988903f, 0.137136f, 0.750000f, 0.500000f, + 0.056250f, 0.600000f, 0.083125f, 0.333583f, 0.800793f, 0.497447f, 0.625000f, 0.000000f, + 0.108164f, 0.575098f, 0.108164f, 0.223681f, 0.948648f, 0.223681f, 0.500000f, 0.125000f, + 0.085693f, 0.575098f, 0.126636f, 0.176393f, 0.948522f, 0.263043f, 0.625000f, 0.125000f, + 0.059795f, 0.575098f, 0.140537f, 0.121840f, 0.948497f, 0.292417f, 0.750000f, 0.125000f, + 0.128320f, 0.555469f, 0.189629f, 0.113293f, 0.979092f, 0.168946f, 0.625000f, 0.250000f, + 0.020375f, 0.600000f, 0.098000f, 0.117676f, 0.799975f, 0.588382f, 0.875000f, 0.000000f, + 0.059795f, 0.575098f, 0.140537f, 0.121840f, 0.948497f, 0.292417f, 0.750000f, 0.125000f, + 0.031040f, 0.575098f, 0.149297f, 0.062271f, 0.948251f, 0.311356f, 0.875000f, 0.125000f, + 0.000000f, 0.575098f, 0.152344f, 0.000000f, 0.948259f, 0.317497f, 1.000000f, 0.125000f, + 0.046480f, 0.555469f, 0.223562f, 0.040002f, 0.978977f, 0.200010f, 0.875000f, 0.250000f, + 0.128320f, 0.555469f, 0.189629f, 0.113294f, 0.979092f, 0.168947f, 0.625000f, 0.250000f, + 0.225758f, 0.539355f, 0.225758f, 0.110849f, 0.987636f, 0.110849f, 0.500000f, 0.375000f, + 0.178857f, 0.539355f, 0.264312f, 0.087423f, 0.987604f, 0.130368f, 0.625000f, 0.375000f, + 0.124803f, 0.539355f, 0.293326f, 0.060387f, 0.987598f, 0.144929f, 0.750000f, 0.375000f, + 0.232031f, 0.525000f, 0.342891f, 0.082396f, 0.988996f, 0.122871f, 0.625000f, 0.500000f, + 0.046480f, 0.555469f, 0.223562f, 0.040002f, 0.978977f, 0.200011f, 0.875000f, 0.250000f, + 0.124803f, 0.539355f, 0.293326f, 0.060387f, 0.987598f, 0.144929f, 0.750000f, 0.375000f, + 0.064786f, 0.539355f, 0.311609f, 0.030869f, 0.987535f, 0.154346f, 0.875000f, 0.375000f, + 0.000000f, 0.539355f, 0.317969f, 0.000000f, 0.987537f, 0.157389f, 1.000000f, 0.375000f, + 0.084047f, 0.525000f, 0.404250f, 0.029094f, 0.988935f, 0.145472f, 0.875000f, 0.500000f, + 0.380531f, 0.525000f, 0.161906f, 0.137032f, 0.988920f, 0.057097f, 0.250000f, 0.500000f, + 0.578125f, 0.494531f, -0.000000f, 0.258736f, 0.965948f, -0.000000f, 0.000000f, 0.750000f, + 0.533320f, 0.494531f, 0.226914f, 0.239005f, 0.965898f, 0.099585f, 0.250000f, 0.750000f, + 0.410469f, 0.494531f, 0.410469f, 0.182258f, 0.966211f, 0.182258f, 0.500000f, 0.750000f, + 0.599625f, 0.450000f, 0.255125f, 0.923077f, 0.000000f, 0.384615f, 0.250000f, 1.000000f, + 0.404250f, 0.525000f, 0.084047f, 0.145452f, 0.988938f, 0.029090f, 0.125000f, 0.500000f, + 0.502344f, 0.510645f, -0.000000f, 0.174370f, 0.984680f, -0.000000f, 0.000000f, 0.625000f, + 0.492297f, 0.510645f, 0.102353f, 0.170975f, 0.984682f, 0.034195f, 0.125000f, 0.625000f, + 0.463412f, 0.510645f, 0.197170f, 0.160568f, 0.984755f, 0.066903f, 0.250000f, 0.625000f, + 0.566563f, 0.494531f, 0.117793f, 0.253699f, 0.965951f, 0.050740f, 0.125000f, 0.750000f, + 0.342891f, 0.525000f, 0.232031f, 0.122865f, 0.988997f, 0.082392f, 0.375000f, 0.500000f, + 0.463412f, 0.510645f, 0.197170f, 0.160568f, 0.984755f, 0.066903f, 0.250000f, 0.625000f, + 0.417573f, 0.510645f, 0.282568f, 0.144429f, 0.984764f, 0.096852f, 0.375000f, 0.625000f, + 0.356664f, 0.510645f, 0.356664f, 0.122811f, 0.984802f, 0.122811f, 0.500000f, 0.625000f, + 0.480566f, 0.494531f, 0.325195f, 0.214330f, 0.966129f, 0.143727f, 0.375000f, 0.750000f, + 0.566563f, 0.494531f, 0.117793f, 0.253699f, 0.965951f, 0.050740f, 0.125000f, 0.750000f, + 0.630469f, 0.474902f, -0.000000f, 0.505546f, 0.862799f, -0.000000f, 0.000000f, 0.875000f, + 0.617859f, 0.474902f, 0.128458f, 0.495710f, 0.862811f, 0.099142f, 0.125000f, 0.875000f, + 0.581607f, 0.474902f, 0.247459f, 0.465791f, 0.863349f, 0.194079f, 0.250000f, 0.875000f, + 0.637000f, 0.450000f, 0.132437f, 0.980581f, 0.000000f, 0.196116f, 0.125000f, 1.000000f, + 0.480566f, 0.494531f, 0.325195f, 0.214330f, 0.966129f, 0.143727f, 0.375000f, 0.750000f, + 0.581607f, 0.474902f, 0.247459f, 0.465791f, 0.863349f, 0.194080f, 0.250000f, 0.875000f, + 0.524077f, 0.474902f, 0.354639f, 0.419002f, 0.863417f, 0.280978f, 0.375000f, 0.875000f, + 0.447633f, 0.474902f, 0.447633f, 0.356389f, 0.863698f, 0.356389f, 0.500000f, 0.875000f, + 0.540312f, 0.450000f, 0.365625f, 0.830544f, 0.000000f, 0.556953f, 0.375000f, 1.000000f, + 0.161906f, 0.525000f, 0.380531f, 0.057140f, 0.988903f, 0.137136f, 0.750000f, 0.500000f, + 0.410469f, 0.494531f, 0.410469f, 0.182258f, 0.966211f, 0.182258f, 0.500000f, 0.750000f, + 0.226914f, 0.494531f, 0.533320f, 0.099657f, 0.965848f, 0.239176f, 0.750000f, 0.750000f, + 0.000000f, 0.494531f, 0.578125f, 0.000000f, 0.965948f, 0.258736f, 1.000000f, 0.750000f, + 0.255125f, 0.450000f, 0.599625f, 0.384615f, 0.000000f, 0.923077f, 0.750000f, 1.000000f, + 0.232031f, 0.525000f, 0.342891f, 0.082396f, 0.988996f, 0.122871f, 0.625000f, 0.500000f, + 0.356664f, 0.510645f, 0.356664f, 0.122811f, 0.984802f, 0.122811f, 0.500000f, 0.625000f, + 0.282568f, 0.510645f, 0.417573f, 0.096857f, 0.984762f, 0.144436f, 0.625000f, 0.625000f, + 0.197170f, 0.510645f, 0.463412f, 0.066903f, 0.984755f, 0.160568f, 0.750000f, 0.625000f, + 0.325195f, 0.494531f, 0.480566f, 0.143734f, 0.966126f, 0.214340f, 0.625000f, 0.750000f, + 0.084047f, 0.525000f, 0.404250f, 0.029094f, 0.988935f, 0.145472f, 0.875000f, 0.500000f, + 0.197170f, 0.510645f, 0.463412f, 0.066903f, 0.984755f, 0.160568f, 0.750000f, 0.625000f, + 0.102353f, 0.510645f, 0.492297f, 0.034200f, 0.984678f, 0.170999f, 0.875000f, 0.625000f, + 0.000000f, 0.510645f, 0.502344f, 0.000000f, 0.984680f, 0.174370f, 1.000000f, 0.625000f, + 0.117793f, 0.494531f, 0.566563f, 0.050746f, 0.965942f, 0.253732f, 0.875000f, 0.750000f, + 0.325195f, 0.494531f, 0.480566f, 0.143734f, 0.966126f, 0.214340f, 0.625000f, 0.750000f, + 0.447633f, 0.474902f, 0.447633f, 0.356389f, 0.863698f, 0.356389f, 0.500000f, 0.875000f, + 0.354639f, 0.474902f, 0.524077f, 0.280988f, 0.863406f, 0.419017f, 0.625000f, 0.875000f, + 0.247459f, 0.474902f, 0.581607f, 0.194080f, 0.863349f, 0.465791f, 0.750000f, 0.875000f, + 0.365625f, 0.450000f, 0.540312f, 0.556953f, 0.000000f, 0.830544f, 0.625000f, 1.000000f, + 0.117793f, 0.494531f, 0.566563f, 0.050747f, 0.965942f, 0.253732f, 0.875000f, 0.750000f, + 0.247459f, 0.474902f, 0.581607f, 0.194079f, 0.863349f, 0.465791f, 0.750000f, 0.875000f, + 0.128458f, 0.474902f, 0.617859f, 0.099152f, 0.862780f, 0.495761f, 0.875000f, 0.875000f, + 0.000000f, 0.474902f, 0.630469f, 0.000000f, 0.862799f, 0.505546f, 1.000000f, 0.875000f, + 0.132437f, 0.450000f, 0.637000f, 0.196116f, 0.000000f, 0.980581f, 0.875000f, 1.000000f, + 0.000000f, 0.600000f, 0.100000f, 0.000000f, 0.800000f, 0.600000f, 0.000000f, 0.000000f, + -0.100000f, 0.600000f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 1.000000f, 0.000000f, + 0.000000f, 0.450000f, 0.650000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, + -0.650000f, 0.450000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 1.000000f, 1.000000f, + -0.071000f, 0.600000f, 0.071000f, -0.427006f, 0.797077f, 0.427006f, 0.500000f, 0.000000f, + 0.000000f, 0.525000f, 0.412500f, 0.000000f, 0.988936f, 0.148340f, 0.000000f, 0.500000f, + -0.292875f, 0.525000f, 0.292875f, -0.105934f, 0.988714f, 0.105934f, 0.500000f, 0.500000f, + -0.412500f, 0.525000f, -0.000000f, -0.148340f, 0.988936f, 0.000000f, 1.000000f, 0.500000f, + -0.461500f, 0.450000f, 0.461500f, -0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + -0.039250f, 0.600000f, 0.092250f, -0.230883f, 0.799778f, 0.554119f, 0.250000f, 0.000000f, + 0.000000f, 0.555469f, 0.228125f, 0.000000f, 0.978980f, 0.203954f, 0.000000f, 0.250000f, + -0.089539f, 0.555469f, 0.210445f, -0.078502f, 0.978949f, 0.188404f, 0.250000f, 0.250000f, + -0.161969f, 0.555469f, 0.161969f, -0.143654f, 0.979146f, 0.143654f, 0.500000f, 0.250000f, + -0.161906f, 0.525000f, 0.380531f, -0.057097f, 0.988920f, 0.137033f, 0.250000f, 0.500000f, + -0.020375f, 0.600000f, 0.098000f, -0.117666f, 0.800015f, 0.588329f, 0.125000f, 0.000000f, + 0.000000f, 0.575098f, 0.152344f, 0.000000f, 0.948259f, 0.317497f, 0.000000f, 0.125000f, + -0.031040f, 0.575098f, 0.149297f, -0.062263f, 0.948264f, 0.311317f, 0.125000f, 0.125000f, + -0.059795f, 0.575098f, 0.140537f, -0.121840f, 0.948497f, 0.292417f, 0.250000f, 0.125000f, + -0.046480f, 0.555469f, 0.223562f, -0.039997f, 0.978983f, 0.199984f, 0.125000f, 0.250000f, + -0.056250f, 0.600000f, 0.083125f, -0.333572f, 0.800807f, 0.497432f, 0.375000f, 0.000000f, + -0.059795f, 0.575098f, 0.140537f, -0.121840f, 0.948497f, 0.292417f, 0.250000f, 0.125000f, + -0.085693f, 0.575098f, 0.126636f, -0.176386f, 0.948527f, 0.263031f, 0.375000f, 0.125000f, + -0.108164f, 0.575098f, 0.108164f, -0.223681f, 0.948648f, 0.223681f, 0.500000f, 0.125000f, + -0.128320f, 0.555469f, 0.189629f, -0.113288f, 0.979094f, 0.168938f, 0.375000f, 0.250000f, + -0.046480f, 0.555469f, 0.223562f, -0.039997f, 0.978982f, 0.199985f, 0.125000f, 0.250000f, + 0.000000f, 0.539355f, 0.317969f, 0.000000f, 0.987537f, 0.157389f, 0.000000f, 0.375000f, + -0.064786f, 0.539355f, 0.311609f, -0.030865f, 0.987538f, 0.154325f, 0.125000f, 0.375000f, + -0.124803f, 0.539355f, 0.293326f, -0.060387f, 0.987598f, 0.144929f, 0.250000f, 0.375000f, + -0.084047f, 0.525000f, 0.404250f, -0.029090f, 0.988938f, 0.145452f, 0.125000f, 0.500000f, + -0.128320f, 0.555469f, 0.189629f, -0.113289f, 0.979094f, 0.168939f, 0.375000f, 0.250000f, + -0.124803f, 0.539355f, 0.293326f, -0.060387f, 0.987598f, 0.144929f, 0.250000f, 0.375000f, + -0.178857f, 0.539355f, 0.264312f, -0.087419f, 0.987605f, 0.130361f, 0.375000f, 0.375000f, + -0.225758f, 0.539355f, 0.225758f, -0.110849f, 0.987636f, 0.110849f, 0.500000f, 0.375000f, + -0.232031f, 0.525000f, 0.342891f, -0.082392f, 0.988997f, 0.122865f, 0.375000f, 0.500000f, + -0.092250f, 0.600000f, 0.039250f, -0.554392f, 0.799556f, 0.230997f, 0.750000f, 0.000000f, + -0.161969f, 0.555469f, 0.161969f, -0.143654f, 0.979146f, 0.143654f, 0.500000f, 0.250000f, + -0.210445f, 0.555469f, 0.089539f, -0.188544f, 0.978918f, 0.078560f, 0.750000f, 0.250000f, + -0.228125f, 0.555469f, -0.000000f, -0.203954f, 0.978980f, 0.000000f, 1.000000f, 0.250000f, + -0.380531f, 0.525000f, 0.161906f, -0.137136f, 0.988903f, 0.057140f, 0.750000f, 0.500000f, + -0.083125f, 0.600000f, 0.056250f, -0.497447f, 0.800793f, 0.333583f, 0.625000f, 0.000000f, + -0.108164f, 0.575098f, 0.108164f, -0.223681f, 0.948648f, 0.223681f, 0.500000f, 0.125000f, + -0.126636f, 0.575098f, 0.085693f, -0.263043f, 0.948522f, 0.176393f, 0.625000f, 0.125000f, + -0.140537f, 0.575098f, 0.059795f, -0.292417f, 0.948497f, 0.121840f, 0.750000f, 0.125000f, + -0.189629f, 0.555469f, 0.128320f, -0.168946f, 0.979092f, 0.113293f, 0.625000f, 0.250000f, + -0.098000f, 0.600000f, 0.020375f, -0.588382f, 0.799975f, 0.117676f, 0.875000f, 0.000000f, + -0.140537f, 0.575098f, 0.059795f, -0.292417f, 0.948497f, 0.121840f, 0.750000f, 0.125000f, + -0.149297f, 0.575098f, 0.031040f, -0.311356f, 0.948251f, 0.062271f, 0.875000f, 0.125000f, + -0.152344f, 0.575098f, -0.000000f, -0.317497f, 0.948259f, 0.000000f, 1.000000f, 0.125000f, + -0.223562f, 0.555469f, 0.046480f, -0.200010f, 0.978977f, 0.040002f, 0.875000f, 0.250000f, + -0.189629f, 0.555469f, 0.128320f, -0.168947f, 0.979092f, 0.113294f, 0.625000f, 0.250000f, + -0.225758f, 0.539355f, 0.225758f, -0.110849f, 0.987636f, 0.110849f, 0.500000f, 0.375000f, + -0.264312f, 0.539355f, 0.178857f, -0.130368f, 0.987604f, 0.087423f, 0.625000f, 0.375000f, + -0.293326f, 0.539355f, 0.124803f, -0.144929f, 0.987598f, 0.060387f, 0.750000f, 0.375000f, + -0.342891f, 0.525000f, 0.232031f, -0.122871f, 0.988996f, 0.082396f, 0.625000f, 0.500000f, + -0.223562f, 0.555469f, 0.046480f, -0.200011f, 0.978977f, 0.040002f, 0.875000f, 0.250000f, + -0.293326f, 0.539355f, 0.124803f, -0.144929f, 0.987598f, 0.060387f, 0.750000f, 0.375000f, + -0.311609f, 0.539355f, 0.064786f, -0.154346f, 0.987535f, 0.030869f, 0.875000f, 0.375000f, + -0.317969f, 0.539355f, -0.000000f, -0.157389f, 0.987537f, 0.000000f, 1.000000f, 0.375000f, + -0.404250f, 0.525000f, 0.084047f, -0.145472f, 0.988935f, 0.029094f, 0.875000f, 0.500000f, + -0.161906f, 0.525000f, 0.380531f, -0.057097f, 0.988920f, 0.137032f, 0.250000f, 0.500000f, + 0.000000f, 0.494531f, 0.578125f, 0.000000f, 0.965948f, 0.258736f, 0.000000f, 0.750000f, + -0.226914f, 0.494531f, 0.533320f, -0.099585f, 0.965898f, 0.239005f, 0.250000f, 0.750000f, + -0.410469f, 0.494531f, 0.410469f, -0.182258f, 0.966211f, 0.182258f, 0.500000f, 0.750000f, + -0.255125f, 0.450000f, 0.599625f, -0.384615f, 0.000000f, 0.923077f, 0.250000f, 1.000000f, + -0.084047f, 0.525000f, 0.404250f, -0.029090f, 0.988938f, 0.145452f, 0.125000f, 0.500000f, + 0.000000f, 0.510645f, 0.502344f, 0.000000f, 0.984680f, 0.174370f, 0.000000f, 0.625000f, + -0.102353f, 0.510645f, 0.492297f, -0.034195f, 0.984682f, 0.170975f, 0.125000f, 0.625000f, + -0.197170f, 0.510645f, 0.463412f, -0.066903f, 0.984755f, 0.160568f, 0.250000f, 0.625000f, + -0.117793f, 0.494531f, 0.566563f, -0.050740f, 0.965951f, 0.253699f, 0.125000f, 0.750000f, + -0.232031f, 0.525000f, 0.342891f, -0.082392f, 0.988997f, 0.122865f, 0.375000f, 0.500000f, + -0.197170f, 0.510645f, 0.463412f, -0.066903f, 0.984755f, 0.160568f, 0.250000f, 0.625000f, + -0.282568f, 0.510645f, 0.417573f, -0.096852f, 0.984764f, 0.144429f, 0.375000f, 0.625000f, + -0.356664f, 0.510645f, 0.356664f, -0.122811f, 0.984802f, 0.122811f, 0.500000f, 0.625000f, + -0.325195f, 0.494531f, 0.480566f, -0.143727f, 0.966129f, 0.214330f, 0.375000f, 0.750000f, + -0.117793f, 0.494531f, 0.566563f, -0.050740f, 0.965951f, 0.253699f, 0.125000f, 0.750000f, + 0.000000f, 0.474902f, 0.630469f, 0.000000f, 0.862799f, 0.505546f, 0.000000f, 0.875000f, + -0.128458f, 0.474902f, 0.617859f, -0.099142f, 0.862811f, 0.495710f, 0.125000f, 0.875000f, + -0.247459f, 0.474902f, 0.581607f, -0.194079f, 0.863349f, 0.465791f, 0.250000f, 0.875000f, + -0.132437f, 0.450000f, 0.637000f, -0.196116f, 0.000000f, 0.980581f, 0.125000f, 1.000000f, + -0.325195f, 0.494531f, 0.480566f, -0.143727f, 0.966129f, 0.214330f, 0.375000f, 0.750000f, + -0.247459f, 0.474902f, 0.581607f, -0.194080f, 0.863349f, 0.465791f, 0.250000f, 0.875000f, + -0.354639f, 0.474902f, 0.524077f, -0.280978f, 0.863417f, 0.419002f, 0.375000f, 0.875000f, + -0.447633f, 0.474902f, 0.447633f, -0.356389f, 0.863698f, 0.356389f, 0.500000f, 0.875000f, + -0.365625f, 0.450000f, 0.540312f, -0.556953f, 0.000000f, 0.830544f, 0.375000f, 1.000000f, + -0.380531f, 0.525000f, 0.161906f, -0.137136f, 0.988903f, 0.057140f, 0.750000f, 0.500000f, + -0.410469f, 0.494531f, 0.410469f, -0.182258f, 0.966211f, 0.182258f, 0.500000f, 0.750000f, + -0.533320f, 0.494531f, 0.226914f, -0.239176f, 0.965848f, 0.099657f, 0.750000f, 0.750000f, + -0.578125f, 0.494531f, -0.000000f, -0.258736f, 0.965948f, 0.000000f, 1.000000f, 0.750000f, + -0.599625f, 0.450000f, 0.255125f, -0.923077f, 0.000000f, 0.384615f, 0.750000f, 1.000000f, + -0.342891f, 0.525000f, 0.232031f, -0.122871f, 0.988996f, 0.082396f, 0.625000f, 0.500000f, + -0.356664f, 0.510645f, 0.356664f, -0.122811f, 0.984802f, 0.122811f, 0.500000f, 0.625000f, + -0.417573f, 0.510645f, 0.282568f, -0.144436f, 0.984762f, 0.096857f, 0.625000f, 0.625000f, + -0.463412f, 0.510645f, 0.197170f, -0.160568f, 0.984755f, 0.066903f, 0.750000f, 0.625000f, + -0.480566f, 0.494531f, 0.325195f, -0.214340f, 0.966126f, 0.143734f, 0.625000f, 0.750000f, + -0.404250f, 0.525000f, 0.084047f, -0.145472f, 0.988935f, 0.029094f, 0.875000f, 0.500000f, + -0.463412f, 0.510645f, 0.197170f, -0.160568f, 0.984755f, 0.066903f, 0.750000f, 0.625000f, + -0.492297f, 0.510645f, 0.102353f, -0.170999f, 0.984678f, 0.034200f, 0.875000f, 0.625000f, + -0.502344f, 0.510645f, -0.000000f, -0.174370f, 0.984680f, 0.000000f, 1.000000f, 0.625000f, + -0.566563f, 0.494531f, 0.117793f, -0.253732f, 0.965942f, 0.050746f, 0.875000f, 0.750000f, + -0.480566f, 0.494531f, 0.325195f, -0.214340f, 0.966126f, 0.143734f, 0.625000f, 0.750000f, + -0.447633f, 0.474902f, 0.447633f, -0.356389f, 0.863698f, 0.356389f, 0.500000f, 0.875000f, + -0.524077f, 0.474902f, 0.354639f, -0.419017f, 0.863406f, 0.280988f, 0.625000f, 0.875000f, + -0.581607f, 0.474902f, 0.247459f, -0.465791f, 0.863349f, 0.194080f, 0.750000f, 0.875000f, + -0.540312f, 0.450000f, 0.365625f, -0.830544f, 0.000000f, 0.556953f, 0.625000f, 1.000000f, + -0.566563f, 0.494531f, 0.117793f, -0.253732f, 0.965942f, 0.050747f, 0.875000f, 0.750000f, + -0.581607f, 0.474902f, 0.247459f, -0.465791f, 0.863349f, 0.194079f, 0.750000f, 0.875000f, + -0.617859f, 0.474902f, 0.128458f, -0.495761f, 0.862780f, 0.099152f, 0.875000f, 0.875000f, + -0.630469f, 0.474902f, -0.000000f, -0.505546f, 0.862799f, 0.000000f, 1.000000f, 0.875000f, + -0.637000f, 0.450000f, 0.132437f, -0.980581f, 0.000000f, 0.196116f, 0.875000f, 1.000000f, + -0.100000f, 0.600000f, -0.000000f, -0.600000f, 0.800000f, 0.000000f, 0.000000f, 0.000000f, + 0.000000f, 0.600000f, -0.100000f, 0.000000f, 0.800000f, -0.600000f, 1.000000f, 0.000000f, + -0.650000f, 0.450000f, -0.000000f, -1.000000f, -0.000000f, -0.000000f, 0.000000f, 1.000000f, + 0.000000f, 0.450000f, -0.650000f, 0.000000f, 0.000000f, -1.000000f, 1.000000f, 1.000000f, + -0.071000f, 0.600000f, -0.071000f, -0.427006f, 0.797077f, -0.427006f, 0.500000f, 0.000000f, + -0.412500f, 0.525000f, -0.000000f, -0.148340f, 0.988936f, 0.000000f, 0.000000f, 0.500000f, + -0.292875f, 0.525000f, -0.292875f, -0.105934f, 0.988714f, -0.105934f, 0.500000f, 0.500000f, + 0.000000f, 0.525000f, -0.412500f, 0.000000f, 0.988936f, -0.148340f, 1.000000f, 0.500000f, + -0.461500f, 0.450000f, -0.461500f, -0.707107f, -0.000000f, -0.707107f, 0.500000f, 1.000000f, + -0.092250f, 0.600000f, -0.039250f, -0.554119f, 0.799778f, -0.230883f, 0.250000f, 0.000000f, + -0.228125f, 0.555469f, -0.000000f, -0.203954f, 0.978980f, 0.000000f, 0.000000f, 0.250000f, + -0.210445f, 0.555469f, -0.089539f, -0.188404f, 0.978949f, -0.078502f, 0.250000f, 0.250000f, + -0.161969f, 0.555469f, -0.161969f, -0.143654f, 0.979146f, -0.143654f, 0.500000f, 0.250000f, + -0.380531f, 0.525000f, -0.161906f, -0.137033f, 0.988920f, -0.057097f, 0.250000f, 0.500000f, + -0.098000f, 0.600000f, -0.020375f, -0.588329f, 0.800015f, -0.117666f, 0.125000f, 0.000000f, + -0.152344f, 0.575098f, -0.000000f, -0.317497f, 0.948259f, 0.000000f, 0.000000f, 0.125000f, + -0.149297f, 0.575098f, -0.031040f, -0.311317f, 0.948264f, -0.062263f, 0.125000f, 0.125000f, + -0.140537f, 0.575098f, -0.059795f, -0.292417f, 0.948497f, -0.121840f, 0.250000f, 0.125000f, + -0.223562f, 0.555469f, -0.046480f, -0.199984f, 0.978983f, -0.039997f, 0.125000f, 0.250000f, + -0.083125f, 0.600000f, -0.056250f, -0.497432f, 0.800807f, -0.333572f, 0.375000f, 0.000000f, + -0.140537f, 0.575098f, -0.059795f, -0.292417f, 0.948497f, -0.121840f, 0.250000f, 0.125000f, + -0.126636f, 0.575098f, -0.085693f, -0.263031f, 0.948527f, -0.176386f, 0.375000f, 0.125000f, + -0.108164f, 0.575098f, -0.108164f, -0.223681f, 0.948648f, -0.223681f, 0.500000f, 0.125000f, + -0.189629f, 0.555469f, -0.128320f, -0.168938f, 0.979094f, -0.113288f, 0.375000f, 0.250000f, + -0.223562f, 0.555469f, -0.046480f, -0.199985f, 0.978982f, -0.039997f, 0.125000f, 0.250000f, + -0.317969f, 0.539355f, -0.000000f, -0.157389f, 0.987537f, 0.000000f, 0.000000f, 0.375000f, + -0.311609f, 0.539355f, -0.064786f, -0.154325f, 0.987538f, -0.030865f, 0.125000f, 0.375000f, + -0.293326f, 0.539355f, -0.124803f, -0.144929f, 0.987598f, -0.060387f, 0.250000f, 0.375000f, + -0.404250f, 0.525000f, -0.084047f, -0.145452f, 0.988938f, -0.029090f, 0.125000f, 0.500000f, + -0.189629f, 0.555469f, -0.128320f, -0.168939f, 0.979094f, -0.113289f, 0.375000f, 0.250000f, + -0.293326f, 0.539355f, -0.124803f, -0.144929f, 0.987598f, -0.060387f, 0.250000f, 0.375000f, + -0.264312f, 0.539355f, -0.178857f, -0.130361f, 0.987605f, -0.087419f, 0.375000f, 0.375000f, + -0.225758f, 0.539355f, -0.225758f, -0.110849f, 0.987636f, -0.110849f, 0.500000f, 0.375000f, + -0.342891f, 0.525000f, -0.232031f, -0.122865f, 0.988997f, -0.082392f, 0.375000f, 0.500000f, + -0.039250f, 0.600000f, -0.092250f, -0.230997f, 0.799556f, -0.554392f, 0.750000f, 0.000000f, + -0.161969f, 0.555469f, -0.161969f, -0.143654f, 0.979146f, -0.143654f, 0.500000f, 0.250000f, + -0.089539f, 0.555469f, -0.210445f, -0.078560f, 0.978918f, -0.188544f, 0.750000f, 0.250000f, + 0.000000f, 0.555469f, -0.228125f, 0.000000f, 0.978980f, -0.203954f, 1.000000f, 0.250000f, + -0.161906f, 0.525000f, -0.380531f, -0.057140f, 0.988903f, -0.137136f, 0.750000f, 0.500000f, + -0.056250f, 0.600000f, -0.083125f, -0.333583f, 0.800793f, -0.497447f, 0.625000f, 0.000000f, + -0.108164f, 0.575098f, -0.108164f, -0.223681f, 0.948648f, -0.223681f, 0.500000f, 0.125000f, + -0.085693f, 0.575098f, -0.126636f, -0.176393f, 0.948522f, -0.263043f, 0.625000f, 0.125000f, + -0.059795f, 0.575098f, -0.140537f, -0.121840f, 0.948497f, -0.292417f, 0.750000f, 0.125000f, + -0.128320f, 0.555469f, -0.189629f, -0.113293f, 0.979092f, -0.168946f, 0.625000f, 0.250000f, + -0.020375f, 0.600000f, -0.098000f, -0.117676f, 0.799975f, -0.588382f, 0.875000f, 0.000000f, + -0.059795f, 0.575098f, -0.140537f, -0.121840f, 0.948497f, -0.292417f, 0.750000f, 0.125000f, + -0.031040f, 0.575098f, -0.149297f, -0.062271f, 0.948251f, -0.311356f, 0.875000f, 0.125000f, + 0.000000f, 0.575098f, -0.152344f, 0.000000f, 0.948259f, -0.317497f, 1.000000f, 0.125000f, + -0.046480f, 0.555469f, -0.223562f, -0.040002f, 0.978977f, -0.200010f, 0.875000f, 0.250000f, + -0.128320f, 0.555469f, -0.189629f, -0.113294f, 0.979092f, -0.168947f, 0.625000f, 0.250000f, + -0.225758f, 0.539355f, -0.225758f, -0.110849f, 0.987636f, -0.110849f, 0.500000f, 0.375000f, + -0.178857f, 0.539355f, -0.264312f, -0.087423f, 0.987604f, -0.130368f, 0.625000f, 0.375000f, + -0.124803f, 0.539355f, -0.293326f, -0.060387f, 0.987598f, -0.144929f, 0.750000f, 0.375000f, + -0.232031f, 0.525000f, -0.342891f, -0.082396f, 0.988996f, -0.122871f, 0.625000f, 0.500000f, + -0.046480f, 0.555469f, -0.223562f, -0.040002f, 0.978977f, -0.200011f, 0.875000f, 0.250000f, + -0.124803f, 0.539355f, -0.293326f, -0.060387f, 0.987598f, -0.144929f, 0.750000f, 0.375000f, + -0.064786f, 0.539355f, -0.311609f, -0.030869f, 0.987535f, -0.154346f, 0.875000f, 0.375000f, + 0.000000f, 0.539355f, -0.317969f, 0.000000f, 0.987537f, -0.157389f, 1.000000f, 0.375000f, + -0.084047f, 0.525000f, -0.404250f, -0.029094f, 0.988935f, -0.145472f, 0.875000f, 0.500000f, + -0.380531f, 0.525000f, -0.161906f, -0.137032f, 0.988920f, -0.057097f, 0.250000f, 0.500000f, + -0.578125f, 0.494531f, -0.000000f, -0.258736f, 0.965948f, 0.000000f, 0.000000f, 0.750000f, + -0.533320f, 0.494531f, -0.226914f, -0.239005f, 0.965898f, -0.099585f, 0.250000f, 0.750000f, + -0.410469f, 0.494531f, -0.410469f, -0.182258f, 0.966211f, -0.182258f, 0.500000f, 0.750000f, + -0.599625f, 0.450000f, -0.255125f, -0.923077f, -0.000000f, -0.384615f, 0.250000f, 1.000000f, + -0.404250f, 0.525000f, -0.084047f, -0.145452f, 0.988938f, -0.029090f, 0.125000f, 0.500000f, + -0.502344f, 0.510645f, -0.000000f, -0.174370f, 0.984680f, 0.000000f, 0.000000f, 0.625000f, + -0.492297f, 0.510645f, -0.102353f, -0.170975f, 0.984682f, -0.034195f, 0.125000f, 0.625000f, + -0.463412f, 0.510645f, -0.197170f, -0.160568f, 0.984755f, -0.066903f, 0.250000f, 0.625000f, + -0.566563f, 0.494531f, -0.117793f, -0.253699f, 0.965951f, -0.050740f, 0.125000f, 0.750000f, + -0.342891f, 0.525000f, -0.232031f, -0.122865f, 0.988997f, -0.082392f, 0.375000f, 0.500000f, + -0.463412f, 0.510645f, -0.197170f, -0.160568f, 0.984755f, -0.066903f, 0.250000f, 0.625000f, + -0.417573f, 0.510645f, -0.282568f, -0.144429f, 0.984764f, -0.096852f, 0.375000f, 0.625000f, + -0.356664f, 0.510645f, -0.356664f, -0.122811f, 0.984802f, -0.122811f, 0.500000f, 0.625000f, + -0.480566f, 0.494531f, -0.325195f, -0.214330f, 0.966129f, -0.143727f, 0.375000f, 0.750000f, + -0.566563f, 0.494531f, -0.117793f, -0.253699f, 0.965951f, -0.050740f, 0.125000f, 0.750000f, + -0.630469f, 0.474902f, -0.000000f, -0.505546f, 0.862799f, 0.000000f, 0.000000f, 0.875000f, + -0.617859f, 0.474902f, -0.128458f, -0.495710f, 0.862811f, -0.099142f, 0.125000f, 0.875000f, + -0.581607f, 0.474902f, -0.247459f, -0.465791f, 0.863349f, -0.194079f, 0.250000f, 0.875000f, + -0.637000f, 0.450000f, -0.132437f, -0.980581f, -0.000000f, -0.196116f, 0.125000f, 1.000000f, + -0.480566f, 0.494531f, -0.325195f, -0.214330f, 0.966129f, -0.143727f, 0.375000f, 0.750000f, + -0.581607f, 0.474902f, -0.247459f, -0.465791f, 0.863349f, -0.194080f, 0.250000f, 0.875000f, + -0.524077f, 0.474902f, -0.354639f, -0.419002f, 0.863417f, -0.280978f, 0.375000f, 0.875000f, + -0.447633f, 0.474902f, -0.447633f, -0.356389f, 0.863698f, -0.356389f, 0.500000f, 0.875000f, + -0.540312f, 0.450000f, -0.365625f, -0.830544f, -0.000000f, -0.556953f, 0.375000f, 1.000000f, + -0.161906f, 0.525000f, -0.380531f, -0.057140f, 0.988903f, -0.137136f, 0.750000f, 0.500000f, + -0.410469f, 0.494531f, -0.410469f, -0.182258f, 0.966211f, -0.182258f, 0.500000f, 0.750000f, + -0.226914f, 0.494531f, -0.533320f, -0.099657f, 0.965848f, -0.239176f, 0.750000f, 0.750000f, + 0.000000f, 0.494531f, -0.578125f, 0.000000f, 0.965948f, -0.258736f, 1.000000f, 0.750000f, + -0.255125f, 0.450000f, -0.599625f, -0.384615f, -0.000000f, -0.923077f, 0.750000f, 1.000000f, + -0.232031f, 0.525000f, -0.342891f, -0.082396f, 0.988996f, -0.122871f, 0.625000f, 0.500000f, + -0.356664f, 0.510645f, -0.356664f, -0.122811f, 0.984802f, -0.122811f, 0.500000f, 0.625000f, + -0.282568f, 0.510645f, -0.417573f, -0.096857f, 0.984762f, -0.144436f, 0.625000f, 0.625000f, + -0.197170f, 0.510645f, -0.463412f, -0.066903f, 0.984755f, -0.160568f, 0.750000f, 0.625000f, + -0.325195f, 0.494531f, -0.480566f, -0.143734f, 0.966126f, -0.214340f, 0.625000f, 0.750000f, + -0.084047f, 0.525000f, -0.404250f, -0.029094f, 0.988935f, -0.145472f, 0.875000f, 0.500000f, + -0.197170f, 0.510645f, -0.463412f, -0.066903f, 0.984755f, -0.160568f, 0.750000f, 0.625000f, + -0.102353f, 0.510645f, -0.492297f, -0.034200f, 0.984678f, -0.170999f, 0.875000f, 0.625000f, + 0.000000f, 0.510645f, -0.502344f, 0.000000f, 0.984680f, -0.174370f, 1.000000f, 0.625000f, + -0.117793f, 0.494531f, -0.566563f, -0.050746f, 0.965942f, -0.253732f, 0.875000f, 0.750000f, + -0.325195f, 0.494531f, -0.480566f, -0.143734f, 0.966126f, -0.214340f, 0.625000f, 0.750000f, + -0.447633f, 0.474902f, -0.447633f, -0.356389f, 0.863698f, -0.356389f, 0.500000f, 0.875000f, + -0.354639f, 0.474902f, -0.524077f, -0.280988f, 0.863406f, -0.419017f, 0.625000f, 0.875000f, + -0.247459f, 0.474902f, -0.581607f, -0.194080f, 0.863349f, -0.465791f, 0.750000f, 0.875000f, + -0.365625f, 0.450000f, -0.540312f, -0.556953f, -0.000000f, -0.830544f, 0.625000f, 1.000000f, + -0.117793f, 0.494531f, -0.566563f, -0.050747f, 0.965942f, -0.253732f, 0.875000f, 0.750000f, + -0.247459f, 0.474902f, -0.581607f, -0.194079f, 0.863349f, -0.465791f, 0.750000f, 0.875000f, + -0.128458f, 0.474902f, -0.617859f, -0.099152f, 0.862780f, -0.495761f, 0.875000f, 0.875000f, + 0.000000f, 0.474902f, -0.630469f, 0.000000f, 0.862799f, -0.505546f, 1.000000f, 0.875000f, + -0.132437f, 0.450000f, -0.637000f, -0.196116f, -0.000000f, -0.980581f, 0.875000f, 1.000000f, + 0.000000f, 0.600000f, -0.100000f, 0.000000f, 0.800000f, -0.600000f, 0.000000f, 0.000000f, + 0.100000f, 0.600000f, -0.000000f, 0.600000f, 0.800000f, -0.000000f, 1.000000f, 0.000000f, + 0.000000f, 0.450000f, -0.650000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 1.000000f, + 0.650000f, 0.450000f, -0.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 1.000000f, + 0.071000f, 0.600000f, -0.071000f, 0.427006f, 0.797077f, -0.427006f, 0.500000f, 0.000000f, + 0.000000f, 0.525000f, -0.412500f, 0.000000f, 0.988936f, -0.148340f, 0.000000f, 0.500000f, + 0.292875f, 0.525000f, -0.292875f, 0.105934f, 0.988714f, -0.105934f, 0.500000f, 0.500000f, + 0.412500f, 0.525000f, -0.000000f, 0.148340f, 0.988936f, -0.000000f, 1.000000f, 0.500000f, + 0.461500f, 0.450000f, -0.461500f, 0.707107f, 0.000000f, -0.707107f, 0.500000f, 1.000000f, + 0.039250f, 0.600000f, -0.092250f, 0.230883f, 0.799778f, -0.554119f, 0.250000f, 0.000000f, + 0.000000f, 0.555469f, -0.228125f, 0.000000f, 0.978980f, -0.203954f, 0.000000f, 0.250000f, + 0.089539f, 0.555469f, -0.210445f, 0.078502f, 0.978949f, -0.188404f, 0.250000f, 0.250000f, + 0.161969f, 0.555469f, -0.161969f, 0.143654f, 0.979146f, -0.143654f, 0.500000f, 0.250000f, + 0.161906f, 0.525000f, -0.380531f, 0.057097f, 0.988920f, -0.137033f, 0.250000f, 0.500000f, + 0.020375f, 0.600000f, -0.098000f, 0.117666f, 0.800015f, -0.588329f, 0.125000f, 0.000000f, + 0.000000f, 0.575098f, -0.152344f, 0.000000f, 0.948259f, -0.317497f, 0.000000f, 0.125000f, + 0.031040f, 0.575098f, -0.149297f, 0.062263f, 0.948264f, -0.311317f, 0.125000f, 0.125000f, + 0.059795f, 0.575098f, -0.140537f, 0.121840f, 0.948497f, -0.292417f, 0.250000f, 0.125000f, + 0.046480f, 0.555469f, -0.223562f, 0.039997f, 0.978983f, -0.199984f, 0.125000f, 0.250000f, + 0.056250f, 0.600000f, -0.083125f, 0.333572f, 0.800807f, -0.497432f, 0.375000f, 0.000000f, + 0.059795f, 0.575098f, -0.140537f, 0.121840f, 0.948497f, -0.292417f, 0.250000f, 0.125000f, + 0.085693f, 0.575098f, -0.126636f, 0.176386f, 0.948527f, -0.263031f, 0.375000f, 0.125000f, + 0.108164f, 0.575098f, -0.108164f, 0.223681f, 0.948648f, -0.223681f, 0.500000f, 0.125000f, + 0.128320f, 0.555469f, -0.189629f, 0.113288f, 0.979094f, -0.168938f, 0.375000f, 0.250000f, + 0.046480f, 0.555469f, -0.223562f, 0.039997f, 0.978982f, -0.199985f, 0.125000f, 0.250000f, + 0.000000f, 0.539355f, -0.317969f, 0.000000f, 0.987537f, -0.157389f, 0.000000f, 0.375000f, + 0.064786f, 0.539355f, -0.311609f, 0.030865f, 0.987538f, -0.154325f, 0.125000f, 0.375000f, + 0.124803f, 0.539355f, -0.293326f, 0.060387f, 0.987598f, -0.144929f, 0.250000f, 0.375000f, + 0.084047f, 0.525000f, -0.404250f, 0.029090f, 0.988938f, -0.145452f, 0.125000f, 0.500000f, + 0.128320f, 0.555469f, -0.189629f, 0.113289f, 0.979094f, -0.168939f, 0.375000f, 0.250000f, + 0.124803f, 0.539355f, -0.293326f, 0.060387f, 0.987598f, -0.144929f, 0.250000f, 0.375000f, + 0.178857f, 0.539355f, -0.264312f, 0.087419f, 0.987605f, -0.130361f, 0.375000f, 0.375000f, + 0.225758f, 0.539355f, -0.225758f, 0.110849f, 0.987636f, -0.110849f, 0.500000f, 0.375000f, + 0.232031f, 0.525000f, -0.342891f, 0.082392f, 0.988997f, -0.122865f, 0.375000f, 0.500000f, + 0.092250f, 0.600000f, -0.039250f, 0.554392f, 0.799556f, -0.230997f, 0.750000f, 0.000000f, + 0.161969f, 0.555469f, -0.161969f, 0.143654f, 0.979146f, -0.143654f, 0.500000f, 0.250000f, + 0.210445f, 0.555469f, -0.089539f, 0.188544f, 0.978918f, -0.078560f, 0.750000f, 0.250000f, + 0.228125f, 0.555469f, -0.000000f, 0.203954f, 0.978980f, -0.000000f, 1.000000f, 0.250000f, + 0.380531f, 0.525000f, -0.161906f, 0.137136f, 0.988903f, -0.057140f, 0.750000f, 0.500000f, + 0.083125f, 0.600000f, -0.056250f, 0.497447f, 0.800793f, -0.333583f, 0.625000f, 0.000000f, + 0.108164f, 0.575098f, -0.108164f, 0.223681f, 0.948648f, -0.223681f, 0.500000f, 0.125000f, + 0.126636f, 0.575098f, -0.085693f, 0.263043f, 0.948522f, -0.176393f, 0.625000f, 0.125000f, + 0.140537f, 0.575098f, -0.059795f, 0.292417f, 0.948497f, -0.121840f, 0.750000f, 0.125000f, + 0.189629f, 0.555469f, -0.128320f, 0.168946f, 0.979092f, -0.113293f, 0.625000f, 0.250000f, + 0.098000f, 0.600000f, -0.020375f, 0.588382f, 0.799975f, -0.117676f, 0.875000f, 0.000000f, + 0.140537f, 0.575098f, -0.059795f, 0.292417f, 0.948497f, -0.121840f, 0.750000f, 0.125000f, + 0.149297f, 0.575098f, -0.031040f, 0.311356f, 0.948251f, -0.062271f, 0.875000f, 0.125000f, + 0.152344f, 0.575098f, -0.000000f, 0.317497f, 0.948259f, -0.000000f, 1.000000f, 0.125000f, + 0.223562f, 0.555469f, -0.046480f, 0.200010f, 0.978977f, -0.040002f, 0.875000f, 0.250000f, + 0.189629f, 0.555469f, -0.128320f, 0.168947f, 0.979092f, -0.113294f, 0.625000f, 0.250000f, + 0.225758f, 0.539355f, -0.225758f, 0.110849f, 0.987636f, -0.110849f, 0.500000f, 0.375000f, + 0.264312f, 0.539355f, -0.178857f, 0.130368f, 0.987604f, -0.087423f, 0.625000f, 0.375000f, + 0.293326f, 0.539355f, -0.124803f, 0.144929f, 0.987598f, -0.060387f, 0.750000f, 0.375000f, + 0.342891f, 0.525000f, -0.232031f, 0.122871f, 0.988996f, -0.082396f, 0.625000f, 0.500000f, + 0.223562f, 0.555469f, -0.046480f, 0.200011f, 0.978977f, -0.040002f, 0.875000f, 0.250000f, + 0.293326f, 0.539355f, -0.124803f, 0.144929f, 0.987598f, -0.060387f, 0.750000f, 0.375000f, + 0.311609f, 0.539355f, -0.064786f, 0.154346f, 0.987535f, -0.030869f, 0.875000f, 0.375000f, + 0.317969f, 0.539355f, -0.000000f, 0.157389f, 0.987537f, -0.000000f, 1.000000f, 0.375000f, + 0.404250f, 0.525000f, -0.084047f, 0.145472f, 0.988935f, -0.029094f, 0.875000f, 0.500000f, + 0.161906f, 0.525000f, -0.380531f, 0.057097f, 0.988920f, -0.137032f, 0.250000f, 0.500000f, + 0.000000f, 0.494531f, -0.578125f, 0.000000f, 0.965948f, -0.258736f, 0.000000f, 0.750000f, + 0.226914f, 0.494531f, -0.533320f, 0.099585f, 0.965898f, -0.239005f, 0.250000f, 0.750000f, + 0.410469f, 0.494531f, -0.410469f, 0.182258f, 0.966211f, -0.182258f, 0.500000f, 0.750000f, + 0.255125f, 0.450000f, -0.599625f, 0.384615f, 0.000000f, -0.923077f, 0.250000f, 1.000000f, + 0.084047f, 0.525000f, -0.404250f, 0.029090f, 0.988938f, -0.145452f, 0.125000f, 0.500000f, + 0.000000f, 0.510645f, -0.502344f, 0.000000f, 0.984680f, -0.174370f, 0.000000f, 0.625000f, + 0.102353f, 0.510645f, -0.492297f, 0.034195f, 0.984682f, -0.170975f, 0.125000f, 0.625000f, + 0.197170f, 0.510645f, -0.463412f, 0.066903f, 0.984755f, -0.160568f, 0.250000f, 0.625000f, + 0.117793f, 0.494531f, -0.566563f, 0.050740f, 0.965951f, -0.253699f, 0.125000f, 0.750000f, + 0.232031f, 0.525000f, -0.342891f, 0.082392f, 0.988997f, -0.122865f, 0.375000f, 0.500000f, + 0.197170f, 0.510645f, -0.463412f, 0.066903f, 0.984755f, -0.160568f, 0.250000f, 0.625000f, + 0.282568f, 0.510645f, -0.417573f, 0.096852f, 0.984764f, -0.144429f, 0.375000f, 0.625000f, + 0.356664f, 0.510645f, -0.356664f, 0.122811f, 0.984802f, -0.122811f, 0.500000f, 0.625000f, + 0.325195f, 0.494531f, -0.480566f, 0.143727f, 0.966129f, -0.214330f, 0.375000f, 0.750000f, + 0.117793f, 0.494531f, -0.566563f, 0.050740f, 0.965951f, -0.253699f, 0.125000f, 0.750000f, + 0.000000f, 0.474902f, -0.630469f, 0.000000f, 0.862799f, -0.505546f, 0.000000f, 0.875000f, + 0.128458f, 0.474902f, -0.617859f, 0.099142f, 0.862811f, -0.495710f, 0.125000f, 0.875000f, + 0.247459f, 0.474902f, -0.581607f, 0.194079f, 0.863349f, -0.465791f, 0.250000f, 0.875000f, + 0.132437f, 0.450000f, -0.637000f, 0.196116f, 0.000000f, -0.980581f, 0.125000f, 1.000000f, + 0.325195f, 0.494531f, -0.480566f, 0.143727f, 0.966129f, -0.214330f, 0.375000f, 0.750000f, + 0.247459f, 0.474902f, -0.581607f, 0.194080f, 0.863349f, -0.465791f, 0.250000f, 0.875000f, + 0.354639f, 0.474902f, -0.524077f, 0.280978f, 0.863417f, -0.419002f, 0.375000f, 0.875000f, + 0.447633f, 0.474902f, -0.447633f, 0.356389f, 0.863698f, -0.356389f, 0.500000f, 0.875000f, + 0.365625f, 0.450000f, -0.540312f, 0.556953f, 0.000000f, -0.830544f, 0.375000f, 1.000000f, + 0.380531f, 0.525000f, -0.161906f, 0.137136f, 0.988903f, -0.057140f, 0.750000f, 0.500000f, + 0.410469f, 0.494531f, -0.410469f, 0.182258f, 0.966211f, -0.182258f, 0.500000f, 0.750000f, + 0.533320f, 0.494531f, -0.226914f, 0.239176f, 0.965848f, -0.099657f, 0.750000f, 0.750000f, + 0.578125f, 0.494531f, -0.000000f, 0.258736f, 0.965948f, -0.000000f, 1.000000f, 0.750000f, + 0.599625f, 0.450000f, -0.255125f, 0.923077f, 0.000000f, -0.384615f, 0.750000f, 1.000000f, + 0.342891f, 0.525000f, -0.232031f, 0.122871f, 0.988996f, -0.082396f, 0.625000f, 0.500000f, + 0.356664f, 0.510645f, -0.356664f, 0.122811f, 0.984802f, -0.122811f, 0.500000f, 0.625000f, + 0.417573f, 0.510645f, -0.282568f, 0.144436f, 0.984762f, -0.096857f, 0.625000f, 0.625000f, + 0.463412f, 0.510645f, -0.197170f, 0.160568f, 0.984755f, -0.066903f, 0.750000f, 0.625000f, + 0.480566f, 0.494531f, -0.325195f, 0.214340f, 0.966126f, -0.143734f, 0.625000f, 0.750000f, + 0.404250f, 0.525000f, -0.084047f, 0.145472f, 0.988935f, -0.029094f, 0.875000f, 0.500000f, + 0.463412f, 0.510645f, -0.197170f, 0.160568f, 0.984755f, -0.066903f, 0.750000f, 0.625000f, + 0.492297f, 0.510645f, -0.102353f, 0.170999f, 0.984678f, -0.034200f, 0.875000f, 0.625000f, + 0.502344f, 0.510645f, -0.000000f, 0.174370f, 0.984680f, -0.000000f, 1.000000f, 0.625000f, + 0.566563f, 0.494531f, -0.117793f, 0.253732f, 0.965942f, -0.050746f, 0.875000f, 0.750000f, + 0.480566f, 0.494531f, -0.325195f, 0.214340f, 0.966126f, -0.143734f, 0.625000f, 0.750000f, + 0.447633f, 0.474902f, -0.447633f, 0.356389f, 0.863698f, -0.356389f, 0.500000f, 0.875000f, + 0.524077f, 0.474902f, -0.354639f, 0.419017f, 0.863406f, -0.280988f, 0.625000f, 0.875000f, + 0.581607f, 0.474902f, -0.247459f, 0.465791f, 0.863349f, -0.194080f, 0.750000f, 0.875000f, + 0.540312f, 0.450000f, -0.365625f, 0.830544f, 0.000000f, -0.556953f, 0.625000f, 1.000000f, + 0.566563f, 0.494531f, -0.117793f, 0.253732f, 0.965942f, -0.050747f, 0.875000f, 0.750000f, + 0.581607f, 0.474902f, -0.247459f, 0.465791f, 0.863349f, -0.194079f, 0.750000f, 0.875000f, + 0.617859f, 0.474902f, -0.128458f, 0.495761f, 0.862780f, -0.099152f, 0.875000f, 0.875000f, + 0.630469f, 0.474902f, -0.000000f, 0.505546f, 0.862799f, -0.000000f, 1.000000f, 0.875000f, + 0.637000f, 0.450000f, -0.132437f, 0.980581f, 0.000000f, -0.196116f, 0.875000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.099015f, -0.990148f, -0.099015f, 0.000000f, 0.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.099015f, -0.990148f, -0.099015f, 1.000000f, 0.000000f, + 0.750000f, -0.675000f, -0.000000f, 1.000000f, -0.000000f, 0.000000f, 0.000000f, 1.000000f, + 0.000000f, -0.675000f, -0.750000f, 0.000000f, 0.000000f, -1.000000f, 1.000000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.099015f, -0.990148f, -0.099015f, 0.500000f, 0.000000f, + 0.642187f, -0.726562f, -0.000000f, 0.141421f, -0.989949f, 0.000000f, 0.000000f, 0.500000f, + 0.455953f, -0.726562f, -0.455953f, 0.100995f, -0.989748f, -0.100995f, 0.500000f, 0.500000f, + 0.000000f, -0.726562f, -0.642187f, -0.000000f, -0.989949f, -0.141421f, 1.000000f, 0.500000f, + 0.532500f, -0.675000f, -0.532500f, 0.707107f, 0.000000f, -0.707107f, 0.500000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.036468f, -0.999224f, -0.014895f, 0.250000f, 0.000000f, + 0.417773f, -0.743555f, -0.000000f, 0.039517f, -0.999219f, 0.000000f, 0.000000f, 0.250000f, + 0.385396f, -0.743555f, -0.163976f, 0.036505f, -0.999218f, -0.015211f, 0.250000f, 0.250000f, + 0.296619f, -0.743555f, -0.296619f, 0.027829f, -0.999225f, -0.027829f, 0.500000f, 0.250000f, + 0.592418f, -0.726562f, -0.252059f, 0.130641f, -0.989934f, -0.054434f, 0.250000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, 0.015426f, -0.999876f, -0.003046f, 0.125000f, 0.000000f, + 0.236792f, -0.748315f, -0.000000f, 0.015871f, -0.999874f, 0.000000f, 0.000000f, 0.125000f, + 0.232056f, -0.748315f, -0.048246f, 0.015562f, -0.999874f, -0.003112f, 0.125000f, 0.125000f, + 0.218441f, -0.748315f, -0.092941f, 0.014614f, -0.999875f, -0.006089f, 0.250000f, 0.125000f, + 0.409418f, -0.743555f, -0.085121f, 0.038747f, -0.999219f, -0.007749f, 0.125000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, 0.013015f, -0.999877f, -0.008711f, 0.375000f, 0.000000f, + 0.218441f, -0.748315f, -0.092941f, 0.014614f, -0.999875f, -0.006089f, 0.250000f, 0.125000f, + 0.196833f, -0.748315f, -0.133195f, 0.013145f, -0.999875f, -0.008815f, 0.375000f, 0.125000f, + 0.168122f, -0.748315f, -0.168122f, 0.011177f, -0.999875f, -0.011177f, 0.500000f, 0.125000f, + 0.347274f, -0.743555f, -0.234998f, 0.032729f, -0.999223f, -0.021947f, 0.375000f, 0.250000f, + 0.409418f, -0.743555f, -0.085121f, 0.038748f, -0.999219f, -0.007750f, 0.125000f, 0.250000f, + 0.550415f, -0.736157f, -0.000000f, 0.076999f, -0.997031f, 0.000000f, 0.000000f, 0.375000f, + 0.539407f, -0.736157f, -0.112147f, 0.075499f, -0.997032f, -0.015100f, 0.125000f, 0.375000f, + 0.507758f, -0.736157f, -0.216038f, 0.070899f, -0.997046f, -0.029541f, 0.250000f, 0.375000f, + 0.629344f, -0.726562f, -0.130846f, 0.138668f, -0.989950f, -0.027734f, 0.125000f, 0.500000f, + 0.347274f, -0.743555f, -0.234998f, 0.032729f, -0.999223f, -0.021948f, 0.375000f, 0.250000f, + 0.507758f, -0.736157f, -0.216038f, 0.070899f, -0.997046f, -0.029541f, 0.250000f, 0.375000f, + 0.457533f, -0.736157f, -0.309608f, 0.063773f, -0.997048f, -0.042765f, 0.375000f, 0.375000f, + 0.390795f, -0.736157f, -0.390795f, 0.054226f, -0.997055f, -0.054226f, 0.500000f, 0.375000f, + 0.533818f, -0.726562f, -0.361230f, 0.117134f, -0.990005f, -0.078549f, 0.375000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, 0.014895f, -0.999224f, -0.036468f, 0.750000f, 0.000000f, + 0.296619f, -0.743555f, -0.296619f, 0.027829f, -0.999225f, -0.027829f, 0.500000f, 0.250000f, + 0.163976f, -0.743555f, -0.385396f, 0.015222f, -0.999216f, -0.036533f, 0.750000f, 0.250000f, + 0.000000f, -0.743555f, -0.417773f, -0.000000f, -0.999219f, -0.039517f, 1.000000f, 0.250000f, + 0.252059f, -0.726562f, -0.592418f, 0.054475f, -0.989919f, -0.130740f, 0.750000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, 0.008711f, -0.999877f, -0.013015f, 0.625000f, 0.000000f, + 0.168122f, -0.748315f, -0.168122f, 0.011177f, -0.999875f, -0.011177f, 0.500000f, 0.125000f, + 0.133195f, -0.748315f, -0.196833f, 0.008815f, -0.999875f, -0.013145f, 0.625000f, 0.125000f, + 0.092941f, -0.748315f, -0.218441f, 0.006089f, -0.999875f, -0.014614f, 0.750000f, 0.125000f, + 0.234998f, -0.743555f, -0.347274f, 0.021948f, -0.999223f, -0.032730f, 0.625000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, 0.003046f, -0.999876f, -0.015426f, 0.875000f, 0.000000f, + 0.092941f, -0.748315f, -0.218441f, 0.006089f, -0.999875f, -0.014614f, 0.750000f, 0.125000f, + 0.048246f, -0.748315f, -0.232056f, 0.003113f, -0.999874f, -0.015564f, 0.875000f, 0.125000f, + 0.000000f, -0.748315f, -0.236792f, -0.000000f, -0.999874f, -0.015871f, 1.000000f, 0.125000f, + 0.085121f, -0.743555f, -0.409418f, 0.007751f, -0.999219f, -0.038753f, 0.875000f, 0.250000f, + 0.234998f, -0.743555f, -0.347274f, 0.021949f, -0.999223f, -0.032731f, 0.625000f, 0.250000f, + 0.390795f, -0.736157f, -0.390795f, 0.054226f, -0.997055f, -0.054226f, 0.500000f, 0.375000f, + 0.309608f, -0.736157f, -0.457533f, 0.042767f, -0.997047f, -0.063776f, 0.625000f, 0.375000f, + 0.216038f, -0.736157f, -0.507758f, 0.029541f, -0.997046f, -0.070899f, 0.750000f, 0.375000f, + 0.361230f, -0.726562f, -0.533818f, 0.078553f, -0.990004f, -0.117140f, 0.625000f, 0.500000f, + 0.085121f, -0.743555f, -0.409418f, 0.007751f, -0.999219f, -0.038753f, 0.875000f, 0.250000f, + 0.216038f, -0.736157f, -0.507758f, 0.029541f, -0.997046f, -0.070899f, 0.750000f, 0.375000f, + 0.112147f, -0.736157f, -0.539407f, 0.015102f, -0.997031f, -0.075510f, 0.875000f, 0.375000f, + 0.000000f, -0.736157f, -0.550415f, -0.000000f, -0.997031f, -0.076999f, 1.000000f, 0.375000f, + 0.130846f, -0.726562f, -0.629344f, 0.027737f, -0.989948f, -0.138687f, 0.875000f, 0.500000f, + 0.592418f, -0.726562f, -0.252059f, 0.130641f, -0.989934f, -0.054434f, 0.250000f, 0.500000f, + 0.733008f, -0.702539f, -0.000000f, 0.514495f, -0.857493f, 0.000000f, 0.000000f, 0.750000f, + 0.676200f, -0.702539f, -0.287706f, 0.475188f, -0.857318f, -0.197995f, 0.250000f, 0.750000f, + 0.520436f, -0.702539f, -0.520436f, 0.362711f, -0.858418f, -0.362711f, 0.500000f, 0.750000f, + 0.691875f, -0.675000f, -0.294375f, 0.923077f, 0.000000f, -0.384615f, 0.250000f, 1.000000f, + 0.629344f, -0.726562f, -0.130846f, 0.138668f, -0.989950f, -0.027734f, 0.125000f, 0.500000f, + 0.700562f, -0.715210f, -0.000000f, 0.263929f, -0.964542f, 0.000000f, 0.000000f, 0.625000f, + 0.686550f, -0.715210f, -0.142739f, 0.258791f, -0.964546f, -0.051758f, 0.125000f, 0.625000f, + 0.646268f, -0.715210f, -0.274970f, 0.243061f, -0.964709f, -0.101276f, 0.250000f, 0.625000f, + 0.718348f, -0.702539f, -0.149350f, 0.504486f, -0.857505f, -0.100897f, 0.125000f, 0.750000f, + 0.533818f, -0.726562f, -0.361230f, 0.117134f, -0.990005f, -0.078549f, 0.375000f, 0.500000f, + 0.646268f, -0.715210f, -0.274970f, 0.243061f, -0.964709f, -0.101276f, 0.250000f, 0.625000f, + 0.582342f, -0.715210f, -0.394066f, 0.218633f, -0.964730f, -0.146613f, 0.375000f, 0.625000f, + 0.497399f, -0.715210f, -0.497399f, 0.185918f, -0.964815f, -0.185918f, 0.500000f, 0.625000f, + 0.609313f, -0.702539f, -0.412317f, 0.426431f, -0.858128f, -0.285959f, 0.375000f, 0.750000f, + 0.718348f, -0.702539f, -0.149350f, 0.504485f, -0.857505f, -0.100897f, 0.125000f, 0.750000f, + 0.746997f, -0.688989f, -0.000000f, 0.885831f, -0.464008f, 0.000000f, 0.000000f, 0.875000f, + 0.732057f, -0.688989f, -0.152201f, 0.868619f, -0.464027f, -0.173724f, 0.125000f, 0.875000f, + 0.689105f, -0.688989f, -0.293196f, 0.817250f, -0.464917f, -0.340521f, 0.250000f, 0.875000f, + 0.735000f, -0.675000f, -0.152812f, 0.980581f, 0.000000f, -0.196116f, 0.125000f, 1.000000f, + 0.609313f, -0.702539f, -0.412317f, 0.426430f, -0.858129f, -0.285959f, 0.375000f, 0.750000f, + 0.689105f, -0.688989f, -0.293196f, 0.817250f, -0.464917f, -0.340521f, 0.250000f, 0.875000f, + 0.620941f, -0.688989f, -0.420186f, 0.735277f, -0.465030f, -0.493068f, 0.375000f, 0.875000f, + 0.530368f, -0.688989f, -0.530368f, 0.625826f, -0.465494f, -0.625825f, 0.500000f, 0.875000f, + 0.623438f, -0.675000f, -0.421875f, 0.830544f, 0.000000f, -0.556953f, 0.375000f, 1.000000f, + 0.252059f, -0.726562f, -0.592418f, 0.054475f, -0.989919f, -0.130740f, 0.750000f, 0.500000f, + 0.520436f, -0.702539f, -0.520436f, 0.362711f, -0.858418f, -0.362711f, 0.500000f, 0.750000f, + 0.287706f, -0.702539f, -0.676200f, 0.198107f, -0.857143f, -0.475457f, 0.750000f, 0.750000f, + 0.000000f, -0.702539f, -0.733008f, -0.000000f, -0.857493f, -0.514495f, 1.000000f, 0.750000f, + 0.294375f, -0.675000f, -0.691875f, 0.384615f, 0.000000f, -0.923077f, 0.750000f, 1.000000f, + 0.361230f, -0.726562f, -0.533818f, 0.078553f, -0.990004f, -0.117140f, 0.625000f, 0.500000f, + 0.497399f, -0.715210f, -0.497399f, 0.185918f, -0.964815f, -0.185918f, 0.500000f, 0.625000f, + 0.394066f, -0.715210f, -0.582342f, 0.146620f, -0.964727f, -0.218643f, 0.625000f, 0.625000f, + 0.274970f, -0.715210f, -0.646268f, 0.101276f, -0.964709f, -0.243061f, 0.750000f, 0.625000f, + 0.412317f, -0.702539f, -0.609313f, 0.285969f, -0.858117f, -0.426446f, 0.625000f, 0.750000f, + 0.130846f, -0.726562f, -0.629344f, 0.027737f, -0.989948f, -0.138687f, 0.875000f, 0.500000f, + 0.274970f, -0.715210f, -0.646268f, 0.101276f, -0.964709f, -0.243061f, 0.750000f, 0.625000f, + 0.142739f, -0.715210f, -0.686550f, 0.051765f, -0.964536f, -0.258825f, 0.875000f, 0.625000f, + 0.000000f, -0.715210f, -0.700562f, -0.000000f, -0.964542f, -0.263929f, 1.000000f, 0.625000f, + 0.149350f, -0.702539f, -0.718348f, 0.100908f, -0.857473f, -0.504538f, 0.875000f, 0.750000f, + 0.412317f, -0.702539f, -0.609313f, 0.285969f, -0.858118f, -0.426445f, 0.625000f, 0.750000f, + 0.530368f, -0.688989f, -0.530368f, 0.625825f, -0.465494f, -0.625826f, 0.500000f, 0.875000f, + 0.420186f, -0.688989f, -0.620941f, 0.493073f, -0.465012f, -0.735284f, 0.625000f, 0.875000f, + 0.293196f, -0.688989f, -0.689105f, 0.340521f, -0.464917f, -0.817250f, 0.750000f, 0.875000f, + 0.421875f, -0.675000f, -0.623438f, 0.556953f, 0.000000f, -0.830544f, 0.625000f, 1.000000f, + 0.149350f, -0.702539f, -0.718348f, 0.100907f, -0.857473f, -0.504537f, 0.875000f, 0.750000f, + 0.293196f, -0.688989f, -0.689105f, 0.340521f, -0.464917f, -0.817250f, 0.750000f, 0.875000f, + 0.152201f, -0.688989f, -0.732057f, 0.173729f, -0.463975f, -0.868645f, 0.875000f, 0.875000f, + 0.000000f, -0.688989f, -0.746997f, -0.000000f, -0.464008f, -0.885831f, 1.000000f, 0.875000f, + 0.152812f, -0.675000f, -0.735000f, 0.196116f, 0.000000f, -0.980581f, 0.875000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.099015f, -0.990148f, -0.099015f, 0.000000f, 0.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.099015f, -0.990148f, -0.099015f, 1.000000f, 0.000000f, + 0.000000f, -0.675000f, -0.750000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 1.000000f, + -0.750000f, -0.675000f, -0.000000f, -1.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.099015f, -0.990148f, -0.099015f, 0.500000f, 0.000000f, + 0.000000f, -0.726562f, -0.642187f, -0.000000f, -0.989949f, -0.141421f, 0.000000f, 0.500000f, + -0.455953f, -0.726562f, -0.455953f, -0.100995f, -0.989748f, -0.100995f, 0.500000f, 0.500000f, + -0.642187f, -0.726562f, -0.000000f, -0.141421f, -0.989949f, 0.000000f, 1.000000f, 0.500000f, + -0.532500f, -0.675000f, -0.532500f, -0.707107f, 0.000000f, -0.707107f, 0.500000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.014895f, -0.999224f, -0.036468f, 0.250000f, 0.000000f, + 0.000000f, -0.743555f, -0.417773f, -0.000000f, -0.999219f, -0.039517f, 0.000000f, 0.250000f, + -0.163976f, -0.743555f, -0.385396f, -0.015211f, -0.999218f, -0.036505f, 0.250000f, 0.250000f, + -0.296619f, -0.743555f, -0.296619f, -0.027829f, -0.999225f, -0.027829f, 0.500000f, 0.250000f, + -0.252059f, -0.726562f, -0.592418f, -0.054434f, -0.989934f, -0.130641f, 0.250000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, -0.003046f, -0.999876f, -0.015426f, 0.125000f, 0.000000f, + 0.000000f, -0.748315f, -0.236792f, -0.000000f, -0.999874f, -0.015871f, 0.000000f, 0.125000f, + -0.048246f, -0.748315f, -0.232056f, -0.003112f, -0.999874f, -0.015562f, 0.125000f, 0.125000f, + -0.092941f, -0.748315f, -0.218441f, -0.006089f, -0.999875f, -0.014614f, 0.250000f, 0.125000f, + -0.085121f, -0.743555f, -0.409418f, -0.007749f, -0.999219f, -0.038747f, 0.125000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, -0.008711f, -0.999877f, -0.013015f, 0.375000f, 0.000000f, + -0.092941f, -0.748315f, -0.218441f, -0.006089f, -0.999875f, -0.014614f, 0.250000f, 0.125000f, + -0.133195f, -0.748315f, -0.196833f, -0.008815f, -0.999875f, -0.013145f, 0.375000f, 0.125000f, + -0.168122f, -0.748315f, -0.168122f, -0.011177f, -0.999875f, -0.011177f, 0.500000f, 0.125000f, + -0.234998f, -0.743555f, -0.347274f, -0.021947f, -0.999223f, -0.032729f, 0.375000f, 0.250000f, + -0.085121f, -0.743555f, -0.409418f, -0.007750f, -0.999219f, -0.038748f, 0.125000f, 0.250000f, + 0.000000f, -0.736157f, -0.550415f, -0.000000f, -0.997031f, -0.076999f, 0.000000f, 0.375000f, + -0.112147f, -0.736157f, -0.539407f, -0.015100f, -0.997032f, -0.075499f, 0.125000f, 0.375000f, + -0.216038f, -0.736157f, -0.507758f, -0.029541f, -0.997046f, -0.070899f, 0.250000f, 0.375000f, + -0.130846f, -0.726562f, -0.629344f, -0.027734f, -0.989950f, -0.138668f, 0.125000f, 0.500000f, + -0.234998f, -0.743555f, -0.347274f, -0.021948f, -0.999223f, -0.032729f, 0.375000f, 0.250000f, + -0.216038f, -0.736157f, -0.507758f, -0.029541f, -0.997046f, -0.070899f, 0.250000f, 0.375000f, + -0.309608f, -0.736157f, -0.457533f, -0.042765f, -0.997048f, -0.063773f, 0.375000f, 0.375000f, + -0.390795f, -0.736157f, -0.390795f, -0.054226f, -0.997055f, -0.054226f, 0.500000f, 0.375000f, + -0.361230f, -0.726562f, -0.533818f, -0.078549f, -0.990005f, -0.117134f, 0.375000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, -0.036468f, -0.999224f, -0.014895f, 0.750000f, 0.000000f, + -0.296619f, -0.743555f, -0.296619f, -0.027829f, -0.999225f, -0.027829f, 0.500000f, 0.250000f, + -0.385396f, -0.743555f, -0.163976f, -0.036533f, -0.999216f, -0.015222f, 0.750000f, 0.250000f, + -0.417773f, -0.743555f, -0.000000f, -0.039517f, -0.999219f, 0.000000f, 1.000000f, 0.250000f, + -0.592418f, -0.726562f, -0.252059f, -0.130740f, -0.989919f, -0.054475f, 0.750000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, -0.013015f, -0.999877f, -0.008711f, 0.625000f, 0.000000f, + -0.168122f, -0.748315f, -0.168122f, -0.011177f, -0.999875f, -0.011177f, 0.500000f, 0.125000f, + -0.196833f, -0.748315f, -0.133195f, -0.013145f, -0.999875f, -0.008815f, 0.625000f, 0.125000f, + -0.218441f, -0.748315f, -0.092941f, -0.014614f, -0.999875f, -0.006089f, 0.750000f, 0.125000f, + -0.347274f, -0.743555f, -0.234998f, -0.032730f, -0.999223f, -0.021948f, 0.625000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, -0.015426f, -0.999876f, -0.003046f, 0.875000f, 0.000000f, + -0.218441f, -0.748315f, -0.092941f, -0.014614f, -0.999875f, -0.006089f, 0.750000f, 0.125000f, + -0.232056f, -0.748315f, -0.048246f, -0.015564f, -0.999874f, -0.003113f, 0.875000f, 0.125000f, + -0.236792f, -0.748315f, -0.000000f, -0.015871f, -0.999874f, 0.000000f, 1.000000f, 0.125000f, + -0.409418f, -0.743555f, -0.085121f, -0.038753f, -0.999219f, -0.007751f, 0.875000f, 0.250000f, + -0.347274f, -0.743555f, -0.234998f, -0.032731f, -0.999223f, -0.021949f, 0.625000f, 0.250000f, + -0.390795f, -0.736157f, -0.390795f, -0.054226f, -0.997055f, -0.054226f, 0.500000f, 0.375000f, + -0.457533f, -0.736157f, -0.309608f, -0.063776f, -0.997047f, -0.042767f, 0.625000f, 0.375000f, + -0.507758f, -0.736157f, -0.216038f, -0.070899f, -0.997046f, -0.029541f, 0.750000f, 0.375000f, + -0.533818f, -0.726562f, -0.361230f, -0.117140f, -0.990004f, -0.078553f, 0.625000f, 0.500000f, + -0.409418f, -0.743555f, -0.085121f, -0.038753f, -0.999219f, -0.007751f, 0.875000f, 0.250000f, + -0.507758f, -0.736157f, -0.216038f, -0.070899f, -0.997046f, -0.029541f, 0.750000f, 0.375000f, + -0.539407f, -0.736157f, -0.112147f, -0.075510f, -0.997031f, -0.015102f, 0.875000f, 0.375000f, + -0.550415f, -0.736157f, -0.000000f, -0.076999f, -0.997031f, 0.000000f, 1.000000f, 0.375000f, + -0.629344f, -0.726562f, -0.130846f, -0.138687f, -0.989948f, -0.027737f, 0.875000f, 0.500000f, + -0.252059f, -0.726562f, -0.592418f, -0.054434f, -0.989934f, -0.130641f, 0.250000f, 0.500000f, + 0.000000f, -0.702539f, -0.733008f, -0.000000f, -0.857493f, -0.514495f, 0.000000f, 0.750000f, + -0.287706f, -0.702539f, -0.676200f, -0.197995f, -0.857318f, -0.475188f, 0.250000f, 0.750000f, + -0.520436f, -0.702539f, -0.520436f, -0.362711f, -0.858418f, -0.362711f, 0.500000f, 0.750000f, + -0.294375f, -0.675000f, -0.691875f, -0.384615f, 0.000000f, -0.923077f, 0.250000f, 1.000000f, + -0.130846f, -0.726562f, -0.629344f, -0.027734f, -0.989950f, -0.138668f, 0.125000f, 0.500000f, + 0.000000f, -0.715210f, -0.700562f, -0.000000f, -0.964542f, -0.263929f, 0.000000f, 0.625000f, + -0.142739f, -0.715210f, -0.686550f, -0.051758f, -0.964546f, -0.258791f, 0.125000f, 0.625000f, + -0.274970f, -0.715210f, -0.646268f, -0.101276f, -0.964709f, -0.243061f, 0.250000f, 0.625000f, + -0.149350f, -0.702539f, -0.718348f, -0.100897f, -0.857505f, -0.504486f, 0.125000f, 0.750000f, + -0.361230f, -0.726562f, -0.533818f, -0.078549f, -0.990005f, -0.117134f, 0.375000f, 0.500000f, + -0.274970f, -0.715210f, -0.646268f, -0.101276f, -0.964709f, -0.243061f, 0.250000f, 0.625000f, + -0.394066f, -0.715210f, -0.582342f, -0.146613f, -0.964730f, -0.218633f, 0.375000f, 0.625000f, + -0.497399f, -0.715210f, -0.497399f, -0.185918f, -0.964815f, -0.185918f, 0.500000f, 0.625000f, + -0.412317f, -0.702539f, -0.609313f, -0.285959f, -0.858128f, -0.426431f, 0.375000f, 0.750000f, + -0.149350f, -0.702539f, -0.718348f, -0.100897f, -0.857505f, -0.504485f, 0.125000f, 0.750000f, + 0.000000f, -0.688989f, -0.746997f, -0.000000f, -0.464008f, -0.885831f, 0.000000f, 0.875000f, + -0.152201f, -0.688989f, -0.732057f, -0.173724f, -0.464027f, -0.868619f, 0.125000f, 0.875000f, + -0.293196f, -0.688989f, -0.689105f, -0.340521f, -0.464917f, -0.817250f, 0.250000f, 0.875000f, + -0.152812f, -0.675000f, -0.735000f, -0.196116f, 0.000000f, -0.980581f, 0.125000f, 1.000000f, + -0.412317f, -0.702539f, -0.609313f, -0.285959f, -0.858129f, -0.426430f, 0.375000f, 0.750000f, + -0.293196f, -0.688989f, -0.689105f, -0.340521f, -0.464917f, -0.817250f, 0.250000f, 0.875000f, + -0.420186f, -0.688989f, -0.620941f, -0.493068f, -0.465030f, -0.735277f, 0.375000f, 0.875000f, + -0.530368f, -0.688989f, -0.530368f, -0.625825f, -0.465494f, -0.625826f, 0.500000f, 0.875000f, + -0.421875f, -0.675000f, -0.623438f, -0.556953f, 0.000000f, -0.830544f, 0.375000f, 1.000000f, + -0.592418f, -0.726562f, -0.252059f, -0.130740f, -0.989919f, -0.054475f, 0.750000f, 0.500000f, + -0.520436f, -0.702539f, -0.520436f, -0.362711f, -0.858418f, -0.362711f, 0.500000f, 0.750000f, + -0.676200f, -0.702539f, -0.287706f, -0.475457f, -0.857143f, -0.198107f, 0.750000f, 0.750000f, + -0.733008f, -0.702539f, -0.000000f, -0.514495f, -0.857493f, 0.000000f, 1.000000f, 0.750000f, + -0.691875f, -0.675000f, -0.294375f, -0.923077f, 0.000000f, -0.384615f, 0.750000f, 1.000000f, + -0.533818f, -0.726562f, -0.361230f, -0.117140f, -0.990004f, -0.078553f, 0.625000f, 0.500000f, + -0.497399f, -0.715210f, -0.497399f, -0.185918f, -0.964815f, -0.185918f, 0.500000f, 0.625000f, + -0.582342f, -0.715210f, -0.394066f, -0.218643f, -0.964727f, -0.146620f, 0.625000f, 0.625000f, + -0.646268f, -0.715210f, -0.274970f, -0.243061f, -0.964709f, -0.101276f, 0.750000f, 0.625000f, + -0.609313f, -0.702539f, -0.412317f, -0.426446f, -0.858117f, -0.285969f, 0.625000f, 0.750000f, + -0.629344f, -0.726562f, -0.130846f, -0.138687f, -0.989948f, -0.027737f, 0.875000f, 0.500000f, + -0.646268f, -0.715210f, -0.274970f, -0.243061f, -0.964709f, -0.101276f, 0.750000f, 0.625000f, + -0.686550f, -0.715210f, -0.142739f, -0.258825f, -0.964536f, -0.051765f, 0.875000f, 0.625000f, + -0.700562f, -0.715210f, -0.000000f, -0.263929f, -0.964542f, 0.000000f, 1.000000f, 0.625000f, + -0.718348f, -0.702539f, -0.149350f, -0.504538f, -0.857473f, -0.100908f, 0.875000f, 0.750000f, + -0.609313f, -0.702539f, -0.412317f, -0.426445f, -0.858118f, -0.285969f, 0.625000f, 0.750000f, + -0.530368f, -0.688989f, -0.530368f, -0.625826f, -0.465494f, -0.625825f, 0.500000f, 0.875000f, + -0.620941f, -0.688989f, -0.420186f, -0.735284f, -0.465012f, -0.493073f, 0.625000f, 0.875000f, + -0.689105f, -0.688989f, -0.293196f, -0.817250f, -0.464917f, -0.340521f, 0.750000f, 0.875000f, + -0.623438f, -0.675000f, -0.421875f, -0.830544f, 0.000000f, -0.556953f, 0.625000f, 1.000000f, + -0.718348f, -0.702539f, -0.149350f, -0.504537f, -0.857473f, -0.100907f, 0.875000f, 0.750000f, + -0.689105f, -0.688989f, -0.293196f, -0.817250f, -0.464917f, -0.340521f, 0.750000f, 0.875000f, + -0.732057f, -0.688989f, -0.152201f, -0.868645f, -0.463975f, -0.173729f, 0.875000f, 0.875000f, + -0.746997f, -0.688989f, -0.000000f, -0.885831f, -0.464008f, 0.000000f, 1.000000f, 0.875000f, + -0.735000f, -0.675000f, -0.152812f, -0.980581f, 0.000000f, -0.196116f, 0.875000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.099015f, -0.990148f, 0.099015f, 0.000000f, 0.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.099015f, -0.990148f, 0.099015f, 1.000000f, 0.000000f, + -0.750000f, -0.675000f, -0.000000f, -1.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, + 0.000000f, -0.675000f, 0.750000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.099015f, -0.990148f, 0.099015f, 0.500000f, 0.000000f, + -0.642187f, -0.726562f, -0.000000f, -0.141421f, -0.989949f, 0.000000f, 0.000000f, 0.500000f, + -0.455953f, -0.726562f, 0.455953f, -0.100995f, -0.989748f, 0.100995f, 0.500000f, 0.500000f, + 0.000000f, -0.726562f, 0.642187f, 0.000000f, -0.989949f, 0.141421f, 1.000000f, 0.500000f, + -0.532500f, -0.675000f, 0.532500f, -0.707107f, 0.000000f, 0.707107f, 0.500000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, -0.036468f, -0.999224f, 0.014895f, 0.250000f, 0.000000f, + -0.417773f, -0.743555f, -0.000000f, -0.039517f, -0.999219f, 0.000000f, 0.000000f, 0.250000f, + -0.385396f, -0.743555f, 0.163976f, -0.036505f, -0.999218f, 0.015211f, 0.250000f, 0.250000f, + -0.296619f, -0.743555f, 0.296619f, -0.027829f, -0.999225f, 0.027829f, 0.500000f, 0.250000f, + -0.592418f, -0.726562f, 0.252059f, -0.130641f, -0.989934f, 0.054434f, 0.250000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, -0.015426f, -0.999876f, 0.003046f, 0.125000f, 0.000000f, + -0.236792f, -0.748315f, -0.000000f, -0.015871f, -0.999874f, 0.000000f, 0.000000f, 0.125000f, + -0.232056f, -0.748315f, 0.048246f, -0.015562f, -0.999874f, 0.003112f, 0.125000f, 0.125000f, + -0.218441f, -0.748315f, 0.092941f, -0.014614f, -0.999875f, 0.006089f, 0.250000f, 0.125000f, + -0.409418f, -0.743555f, 0.085121f, -0.038747f, -0.999219f, 0.007749f, 0.125000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, -0.013015f, -0.999877f, 0.008711f, 0.375000f, 0.000000f, + -0.218441f, -0.748315f, 0.092941f, -0.014614f, -0.999875f, 0.006089f, 0.250000f, 0.125000f, + -0.196833f, -0.748315f, 0.133195f, -0.013145f, -0.999875f, 0.008815f, 0.375000f, 0.125000f, + -0.168122f, -0.748315f, 0.168122f, -0.011177f, -0.999875f, 0.011177f, 0.500000f, 0.125000f, + -0.347274f, -0.743555f, 0.234998f, -0.032729f, -0.999223f, 0.021947f, 0.375000f, 0.250000f, + -0.409418f, -0.743555f, 0.085121f, -0.038748f, -0.999219f, 0.007750f, 0.125000f, 0.250000f, + -0.550415f, -0.736157f, -0.000000f, -0.076999f, -0.997031f, 0.000000f, 0.000000f, 0.375000f, + -0.539407f, -0.736157f, 0.112147f, -0.075499f, -0.997032f, 0.015100f, 0.125000f, 0.375000f, + -0.507758f, -0.736157f, 0.216038f, -0.070899f, -0.997046f, 0.029541f, 0.250000f, 0.375000f, + -0.629344f, -0.726562f, 0.130846f, -0.138668f, -0.989950f, 0.027734f, 0.125000f, 0.500000f, + -0.347274f, -0.743555f, 0.234998f, -0.032729f, -0.999223f, 0.021948f, 0.375000f, 0.250000f, + -0.507758f, -0.736157f, 0.216038f, -0.070899f, -0.997046f, 0.029541f, 0.250000f, 0.375000f, + -0.457533f, -0.736157f, 0.309608f, -0.063773f, -0.997048f, 0.042765f, 0.375000f, 0.375000f, + -0.390795f, -0.736157f, 0.390795f, -0.054226f, -0.997055f, 0.054226f, 0.500000f, 0.375000f, + -0.533818f, -0.726562f, 0.361230f, -0.117134f, -0.990005f, 0.078549f, 0.375000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, -0.014895f, -0.999224f, 0.036468f, 0.750000f, 0.000000f, + -0.296619f, -0.743555f, 0.296619f, -0.027829f, -0.999225f, 0.027829f, 0.500000f, 0.250000f, + -0.163976f, -0.743555f, 0.385396f, -0.015222f, -0.999216f, 0.036533f, 0.750000f, 0.250000f, + 0.000000f, -0.743555f, 0.417773f, 0.000000f, -0.999219f, 0.039517f, 1.000000f, 0.250000f, + -0.252059f, -0.726562f, 0.592418f, -0.054475f, -0.989919f, 0.130740f, 0.750000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, -0.008711f, -0.999877f, 0.013015f, 0.625000f, 0.000000f, + -0.168122f, -0.748315f, 0.168122f, -0.011177f, -0.999875f, 0.011177f, 0.500000f, 0.125000f, + -0.133195f, -0.748315f, 0.196833f, -0.008815f, -0.999875f, 0.013145f, 0.625000f, 0.125000f, + -0.092941f, -0.748315f, 0.218441f, -0.006089f, -0.999875f, 0.014614f, 0.750000f, 0.125000f, + -0.234998f, -0.743555f, 0.347274f, -0.021948f, -0.999223f, 0.032730f, 0.625000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, -0.003046f, -0.999876f, 0.015426f, 0.875000f, 0.000000f, + -0.092941f, -0.748315f, 0.218441f, -0.006089f, -0.999875f, 0.014614f, 0.750000f, 0.125000f, + -0.048246f, -0.748315f, 0.232056f, -0.003113f, -0.999874f, 0.015564f, 0.875000f, 0.125000f, + 0.000000f, -0.748315f, 0.236792f, 0.000000f, -0.999874f, 0.015871f, 1.000000f, 0.125000f, + -0.085121f, -0.743555f, 0.409418f, -0.007751f, -0.999219f, 0.038753f, 0.875000f, 0.250000f, + -0.234998f, -0.743555f, 0.347274f, -0.021949f, -0.999223f, 0.032731f, 0.625000f, 0.250000f, + -0.390795f, -0.736157f, 0.390795f, -0.054226f, -0.997055f, 0.054226f, 0.500000f, 0.375000f, + -0.309608f, -0.736157f, 0.457533f, -0.042767f, -0.997047f, 0.063776f, 0.625000f, 0.375000f, + -0.216038f, -0.736157f, 0.507758f, -0.029541f, -0.997046f, 0.070899f, 0.750000f, 0.375000f, + -0.361230f, -0.726562f, 0.533818f, -0.078553f, -0.990004f, 0.117140f, 0.625000f, 0.500000f, + -0.085121f, -0.743555f, 0.409418f, -0.007751f, -0.999219f, 0.038753f, 0.875000f, 0.250000f, + -0.216038f, -0.736157f, 0.507758f, -0.029541f, -0.997046f, 0.070899f, 0.750000f, 0.375000f, + -0.112147f, -0.736157f, 0.539407f, -0.015102f, -0.997031f, 0.075510f, 0.875000f, 0.375000f, + 0.000000f, -0.736157f, 0.550415f, 0.000000f, -0.997031f, 0.076999f, 1.000000f, 0.375000f, + -0.130846f, -0.726562f, 0.629344f, -0.027737f, -0.989948f, 0.138687f, 0.875000f, 0.500000f, + -0.592418f, -0.726562f, 0.252059f, -0.130641f, -0.989934f, 0.054434f, 0.250000f, 0.500000f, + -0.733008f, -0.702539f, -0.000000f, -0.514495f, -0.857493f, 0.000000f, 0.000000f, 0.750000f, + -0.676200f, -0.702539f, 0.287706f, -0.475188f, -0.857318f, 0.197995f, 0.250000f, 0.750000f, + -0.520436f, -0.702539f, 0.520436f, -0.362711f, -0.858418f, 0.362711f, 0.500000f, 0.750000f, + -0.691875f, -0.675000f, 0.294375f, -0.923077f, 0.000000f, 0.384615f, 0.250000f, 1.000000f, + -0.629344f, -0.726562f, 0.130846f, -0.138668f, -0.989950f, 0.027734f, 0.125000f, 0.500000f, + -0.700562f, -0.715210f, -0.000000f, -0.263929f, -0.964542f, 0.000000f, 0.000000f, 0.625000f, + -0.686550f, -0.715210f, 0.142739f, -0.258791f, -0.964546f, 0.051758f, 0.125000f, 0.625000f, + -0.646268f, -0.715210f, 0.274970f, -0.243061f, -0.964709f, 0.101276f, 0.250000f, 0.625000f, + -0.718348f, -0.702539f, 0.149350f, -0.504486f, -0.857505f, 0.100897f, 0.125000f, 0.750000f, + -0.533818f, -0.726562f, 0.361230f, -0.117134f, -0.990005f, 0.078549f, 0.375000f, 0.500000f, + -0.646268f, -0.715210f, 0.274970f, -0.243061f, -0.964709f, 0.101276f, 0.250000f, 0.625000f, + -0.582342f, -0.715210f, 0.394066f, -0.218633f, -0.964730f, 0.146613f, 0.375000f, 0.625000f, + -0.497399f, -0.715210f, 0.497399f, -0.185918f, -0.964815f, 0.185918f, 0.500000f, 0.625000f, + -0.609313f, -0.702539f, 0.412317f, -0.426431f, -0.858128f, 0.285959f, 0.375000f, 0.750000f, + -0.718348f, -0.702539f, 0.149350f, -0.504485f, -0.857505f, 0.100897f, 0.125000f, 0.750000f, + -0.746997f, -0.688989f, -0.000000f, -0.885831f, -0.464008f, 0.000000f, 0.000000f, 0.875000f, + -0.732057f, -0.688989f, 0.152201f, -0.868619f, -0.464027f, 0.173724f, 0.125000f, 0.875000f, + -0.689105f, -0.688989f, 0.293196f, -0.817250f, -0.464917f, 0.340521f, 0.250000f, 0.875000f, + -0.735000f, -0.675000f, 0.152812f, -0.980581f, 0.000000f, 0.196116f, 0.125000f, 1.000000f, + -0.609313f, -0.702539f, 0.412317f, -0.426430f, -0.858129f, 0.285959f, 0.375000f, 0.750000f, + -0.689105f, -0.688989f, 0.293196f, -0.817250f, -0.464917f, 0.340521f, 0.250000f, 0.875000f, + -0.620941f, -0.688989f, 0.420186f, -0.735277f, -0.465030f, 0.493068f, 0.375000f, 0.875000f, + -0.530368f, -0.688989f, 0.530368f, -0.625826f, -0.465494f, 0.625825f, 0.500000f, 0.875000f, + -0.623438f, -0.675000f, 0.421875f, -0.830544f, 0.000000f, 0.556953f, 0.375000f, 1.000000f, + -0.252059f, -0.726562f, 0.592418f, -0.054475f, -0.989919f, 0.130740f, 0.750000f, 0.500000f, + -0.520436f, -0.702539f, 0.520436f, -0.362711f, -0.858418f, 0.362711f, 0.500000f, 0.750000f, + -0.287706f, -0.702539f, 0.676200f, -0.198107f, -0.857143f, 0.475457f, 0.750000f, 0.750000f, + 0.000000f, -0.702539f, 0.733008f, 0.000000f, -0.857493f, 0.514495f, 1.000000f, 0.750000f, + -0.294375f, -0.675000f, 0.691875f, -0.384615f, 0.000000f, 0.923077f, 0.750000f, 1.000000f, + -0.361230f, -0.726562f, 0.533818f, -0.078553f, -0.990004f, 0.117140f, 0.625000f, 0.500000f, + -0.497399f, -0.715210f, 0.497399f, -0.185918f, -0.964815f, 0.185918f, 0.500000f, 0.625000f, + -0.394066f, -0.715210f, 0.582342f, -0.146620f, -0.964727f, 0.218643f, 0.625000f, 0.625000f, + -0.274970f, -0.715210f, 0.646268f, -0.101276f, -0.964709f, 0.243061f, 0.750000f, 0.625000f, + -0.412317f, -0.702539f, 0.609313f, -0.285969f, -0.858117f, 0.426446f, 0.625000f, 0.750000f, + -0.130846f, -0.726562f, 0.629344f, -0.027737f, -0.989948f, 0.138687f, 0.875000f, 0.500000f, + -0.274970f, -0.715210f, 0.646268f, -0.101276f, -0.964709f, 0.243061f, 0.750000f, 0.625000f, + -0.142739f, -0.715210f, 0.686550f, -0.051765f, -0.964536f, 0.258825f, 0.875000f, 0.625000f, + 0.000000f, -0.715210f, 0.700562f, 0.000000f, -0.964542f, 0.263929f, 1.000000f, 0.625000f, + -0.149350f, -0.702539f, 0.718348f, -0.100908f, -0.857473f, 0.504538f, 0.875000f, 0.750000f, + -0.412317f, -0.702539f, 0.609313f, -0.285969f, -0.858118f, 0.426445f, 0.625000f, 0.750000f, + -0.530368f, -0.688989f, 0.530368f, -0.625825f, -0.465494f, 0.625826f, 0.500000f, 0.875000f, + -0.420186f, -0.688989f, 0.620941f, -0.493073f, -0.465012f, 0.735284f, 0.625000f, 0.875000f, + -0.293196f, -0.688989f, 0.689105f, -0.340521f, -0.464917f, 0.817250f, 0.750000f, 0.875000f, + -0.421875f, -0.675000f, 0.623438f, -0.556953f, 0.000000f, 0.830544f, 0.625000f, 1.000000f, + -0.149350f, -0.702539f, 0.718348f, -0.100907f, -0.857473f, 0.504537f, 0.875000f, 0.750000f, + -0.293196f, -0.688989f, 0.689105f, -0.340521f, -0.464917f, 0.817250f, 0.750000f, 0.875000f, + -0.152201f, -0.688989f, 0.732057f, -0.173729f, -0.463975f, 0.868645f, 0.875000f, 0.875000f, + 0.000000f, -0.688989f, 0.746997f, 0.000000f, -0.464008f, 0.885831f, 1.000000f, 0.875000f, + -0.152812f, -0.675000f, 0.735000f, -0.196116f, 0.000000f, 0.980581f, 0.875000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.099015f, -0.990148f, 0.099015f, 0.000000f, 0.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.099015f, -0.990148f, 0.099015f, 1.000000f, 0.000000f, + 0.000000f, -0.675000f, 0.750000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, + 0.750000f, -0.675000f, -0.000000f, 1.000000f, -0.000000f, 0.000000f, 1.000000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.099015f, -0.990148f, 0.099015f, 0.500000f, 0.000000f, + 0.000000f, -0.726562f, 0.642187f, 0.000000f, -0.989949f, 0.141421f, 0.000000f, 0.500000f, + 0.455953f, -0.726562f, 0.455953f, 0.100995f, -0.989748f, 0.100995f, 0.500000f, 0.500000f, + 0.642187f, -0.726562f, -0.000000f, 0.141421f, -0.989949f, 0.000000f, 1.000000f, 0.500000f, + 0.532500f, -0.675000f, 0.532500f, 0.707107f, -0.000000f, 0.707107f, 0.500000f, 1.000000f, + 0.000000f, -0.750000f, -0.000000f, 0.014895f, -0.999224f, 0.036468f, 0.250000f, 0.000000f, + 0.000000f, -0.743555f, 0.417773f, 0.000000f, -0.999219f, 0.039517f, 0.000000f, 0.250000f, + 0.163976f, -0.743555f, 0.385396f, 0.015211f, -0.999218f, 0.036505f, 0.250000f, 0.250000f, + 0.296619f, -0.743555f, 0.296619f, 0.027829f, -0.999225f, 0.027829f, 0.500000f, 0.250000f, + 0.252059f, -0.726562f, 0.592418f, 0.054434f, -0.989934f, 0.130641f, 0.250000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, 0.003046f, -0.999876f, 0.015426f, 0.125000f, 0.000000f, + 0.000000f, -0.748315f, 0.236792f, 0.000000f, -0.999874f, 0.015871f, 0.000000f, 0.125000f, + 0.048246f, -0.748315f, 0.232056f, 0.003112f, -0.999874f, 0.015562f, 0.125000f, 0.125000f, + 0.092941f, -0.748315f, 0.218441f, 0.006089f, -0.999875f, 0.014614f, 0.250000f, 0.125000f, + 0.085121f, -0.743555f, 0.409418f, 0.007749f, -0.999219f, 0.038747f, 0.125000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, 0.008711f, -0.999877f, 0.013015f, 0.375000f, 0.000000f, + 0.092941f, -0.748315f, 0.218441f, 0.006089f, -0.999875f, 0.014614f, 0.250000f, 0.125000f, + 0.133195f, -0.748315f, 0.196833f, 0.008815f, -0.999875f, 0.013145f, 0.375000f, 0.125000f, + 0.168122f, -0.748315f, 0.168122f, 0.011177f, -0.999875f, 0.011177f, 0.500000f, 0.125000f, + 0.234998f, -0.743555f, 0.347274f, 0.021947f, -0.999223f, 0.032729f, 0.375000f, 0.250000f, + 0.085121f, -0.743555f, 0.409418f, 0.007750f, -0.999219f, 0.038748f, 0.125000f, 0.250000f, + 0.000000f, -0.736157f, 0.550415f, 0.000000f, -0.997031f, 0.076999f, 0.000000f, 0.375000f, + 0.112147f, -0.736157f, 0.539407f, 0.015100f, -0.997032f, 0.075499f, 0.125000f, 0.375000f, + 0.216038f, -0.736157f, 0.507758f, 0.029541f, -0.997046f, 0.070899f, 0.250000f, 0.375000f, + 0.130846f, -0.726562f, 0.629344f, 0.027734f, -0.989950f, 0.138668f, 0.125000f, 0.500000f, + 0.234998f, -0.743555f, 0.347274f, 0.021948f, -0.999223f, 0.032729f, 0.375000f, 0.250000f, + 0.216038f, -0.736157f, 0.507758f, 0.029541f, -0.997046f, 0.070899f, 0.250000f, 0.375000f, + 0.309608f, -0.736157f, 0.457533f, 0.042765f, -0.997048f, 0.063773f, 0.375000f, 0.375000f, + 0.390795f, -0.736157f, 0.390795f, 0.054226f, -0.997055f, 0.054226f, 0.500000f, 0.375000f, + 0.361230f, -0.726562f, 0.533818f, 0.078549f, -0.990005f, 0.117134f, 0.375000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, 0.036468f, -0.999224f, 0.014895f, 0.750000f, 0.000000f, + 0.296619f, -0.743555f, 0.296619f, 0.027829f, -0.999225f, 0.027829f, 0.500000f, 0.250000f, + 0.385396f, -0.743555f, 0.163976f, 0.036533f, -0.999216f, 0.015222f, 0.750000f, 0.250000f, + 0.417773f, -0.743555f, -0.000000f, 0.039517f, -0.999219f, 0.000000f, 1.000000f, 0.250000f, + 0.592418f, -0.726562f, 0.252059f, 0.130740f, -0.989919f, 0.054475f, 0.750000f, 0.500000f, + 0.000000f, -0.750000f, -0.000000f, 0.013015f, -0.999877f, 0.008711f, 0.625000f, 0.000000f, + 0.168122f, -0.748315f, 0.168122f, 0.011177f, -0.999875f, 0.011177f, 0.500000f, 0.125000f, + 0.196833f, -0.748315f, 0.133195f, 0.013145f, -0.999875f, 0.008815f, 0.625000f, 0.125000f, + 0.218441f, -0.748315f, 0.092941f, 0.014614f, -0.999875f, 0.006089f, 0.750000f, 0.125000f, + 0.347274f, -0.743555f, 0.234998f, 0.032730f, -0.999223f, 0.021948f, 0.625000f, 0.250000f, + 0.000000f, -0.750000f, -0.000000f, 0.015426f, -0.999876f, 0.003046f, 0.875000f, 0.000000f, + 0.218441f, -0.748315f, 0.092941f, 0.014614f, -0.999875f, 0.006089f, 0.750000f, 0.125000f, + 0.232056f, -0.748315f, 0.048246f, 0.015564f, -0.999874f, 0.003113f, 0.875000f, 0.125000f, + 0.236792f, -0.748315f, -0.000000f, 0.015871f, -0.999874f, 0.000000f, 1.000000f, 0.125000f, + 0.409418f, -0.743555f, 0.085121f, 0.038753f, -0.999219f, 0.007751f, 0.875000f, 0.250000f, + 0.347274f, -0.743555f, 0.234998f, 0.032731f, -0.999223f, 0.021949f, 0.625000f, 0.250000f, + 0.390795f, -0.736157f, 0.390795f, 0.054226f, -0.997055f, 0.054226f, 0.500000f, 0.375000f, + 0.457533f, -0.736157f, 0.309608f, 0.063776f, -0.997047f, 0.042767f, 0.625000f, 0.375000f, + 0.507758f, -0.736157f, 0.216038f, 0.070899f, -0.997046f, 0.029541f, 0.750000f, 0.375000f, + 0.533818f, -0.726562f, 0.361230f, 0.117140f, -0.990004f, 0.078553f, 0.625000f, 0.500000f, + 0.409418f, -0.743555f, 0.085121f, 0.038753f, -0.999219f, 0.007751f, 0.875000f, 0.250000f, + 0.507758f, -0.736157f, 0.216038f, 0.070899f, -0.997046f, 0.029541f, 0.750000f, 0.375000f, + 0.539407f, -0.736157f, 0.112147f, 0.075510f, -0.997031f, 0.015102f, 0.875000f, 0.375000f, + 0.550415f, -0.736157f, -0.000000f, 0.076999f, -0.997031f, 0.000000f, 1.000000f, 0.375000f, + 0.629344f, -0.726562f, 0.130846f, 0.138687f, -0.989948f, 0.027737f, 0.875000f, 0.500000f, + 0.252059f, -0.726562f, 0.592418f, 0.054434f, -0.989934f, 0.130641f, 0.250000f, 0.500000f, + 0.000000f, -0.702539f, 0.733008f, 0.000000f, -0.857493f, 0.514495f, 0.000000f, 0.750000f, + 0.287706f, -0.702539f, 0.676200f, 0.197995f, -0.857318f, 0.475188f, 0.250000f, 0.750000f, + 0.520436f, -0.702539f, 0.520436f, 0.362711f, -0.858418f, 0.362711f, 0.500000f, 0.750000f, + 0.294375f, -0.675000f, 0.691875f, 0.384615f, -0.000000f, 0.923077f, 0.250000f, 1.000000f, + 0.130846f, -0.726562f, 0.629344f, 0.027734f, -0.989950f, 0.138668f, 0.125000f, 0.500000f, + 0.000000f, -0.715210f, 0.700562f, 0.000000f, -0.964542f, 0.263929f, 0.000000f, 0.625000f, + 0.142739f, -0.715210f, 0.686550f, 0.051758f, -0.964546f, 0.258791f, 0.125000f, 0.625000f, + 0.274970f, -0.715210f, 0.646268f, 0.101276f, -0.964709f, 0.243061f, 0.250000f, 0.625000f, + 0.149350f, -0.702539f, 0.718348f, 0.100897f, -0.857505f, 0.504486f, 0.125000f, 0.750000f, + 0.361230f, -0.726562f, 0.533818f, 0.078549f, -0.990005f, 0.117134f, 0.375000f, 0.500000f, + 0.274970f, -0.715210f, 0.646268f, 0.101276f, -0.964709f, 0.243061f, 0.250000f, 0.625000f, + 0.394066f, -0.715210f, 0.582342f, 0.146613f, -0.964730f, 0.218633f, 0.375000f, 0.625000f, + 0.497399f, -0.715210f, 0.497399f, 0.185918f, -0.964815f, 0.185918f, 0.500000f, 0.625000f, + 0.412317f, -0.702539f, 0.609313f, 0.285959f, -0.858128f, 0.426431f, 0.375000f, 0.750000f, + 0.149350f, -0.702539f, 0.718348f, 0.100897f, -0.857505f, 0.504485f, 0.125000f, 0.750000f, + 0.000000f, -0.688989f, 0.746997f, 0.000000f, -0.464008f, 0.885831f, 0.000000f, 0.875000f, + 0.152201f, -0.688989f, 0.732057f, 0.173724f, -0.464027f, 0.868619f, 0.125000f, 0.875000f, + 0.293196f, -0.688989f, 0.689105f, 0.340521f, -0.464917f, 0.817250f, 0.250000f, 0.875000f, + 0.152812f, -0.675000f, 0.735000f, 0.196116f, -0.000000f, 0.980581f, 0.125000f, 1.000000f, + 0.412317f, -0.702539f, 0.609313f, 0.285959f, -0.858129f, 0.426430f, 0.375000f, 0.750000f, + 0.293196f, -0.688989f, 0.689105f, 0.340521f, -0.464917f, 0.817250f, 0.250000f, 0.875000f, + 0.420186f, -0.688989f, 0.620941f, 0.493068f, -0.465030f, 0.735277f, 0.375000f, 0.875000f, + 0.530368f, -0.688989f, 0.530368f, 0.625825f, -0.465494f, 0.625826f, 0.500000f, 0.875000f, + 0.421875f, -0.675000f, 0.623438f, 0.556953f, -0.000000f, 0.830544f, 0.375000f, 1.000000f, + 0.592418f, -0.726562f, 0.252059f, 0.130740f, -0.989919f, 0.054475f, 0.750000f, 0.500000f, + 0.520436f, -0.702539f, 0.520436f, 0.362711f, -0.858418f, 0.362711f, 0.500000f, 0.750000f, + 0.676200f, -0.702539f, 0.287706f, 0.475457f, -0.857143f, 0.198107f, 0.750000f, 0.750000f, + 0.733008f, -0.702539f, -0.000000f, 0.514495f, -0.857493f, 0.000000f, 1.000000f, 0.750000f, + 0.691875f, -0.675000f, 0.294375f, 0.923077f, -0.000000f, 0.384615f, 0.750000f, 1.000000f, + 0.533818f, -0.726562f, 0.361230f, 0.117140f, -0.990004f, 0.078553f, 0.625000f, 0.500000f, + 0.497399f, -0.715210f, 0.497399f, 0.185918f, -0.964815f, 0.185918f, 0.500000f, 0.625000f, + 0.582342f, -0.715210f, 0.394066f, 0.218643f, -0.964727f, 0.146620f, 0.625000f, 0.625000f, + 0.646268f, -0.715210f, 0.274970f, 0.243061f, -0.964709f, 0.101276f, 0.750000f, 0.625000f, + 0.609313f, -0.702539f, 0.412317f, 0.426446f, -0.858117f, 0.285969f, 0.625000f, 0.750000f, + 0.629344f, -0.726562f, 0.130846f, 0.138687f, -0.989948f, 0.027737f, 0.875000f, 0.500000f, + 0.646268f, -0.715210f, 0.274970f, 0.243061f, -0.964709f, 0.101276f, 0.750000f, 0.625000f, + 0.686550f, -0.715210f, 0.142739f, 0.258825f, -0.964536f, 0.051765f, 0.875000f, 0.625000f, + 0.700562f, -0.715210f, -0.000000f, 0.263929f, -0.964542f, 0.000000f, 1.000000f, 0.625000f, + 0.718348f, -0.702539f, 0.149350f, 0.504538f, -0.857473f, 0.100908f, 0.875000f, 0.750000f, + 0.609313f, -0.702539f, 0.412317f, 0.426445f, -0.858118f, 0.285969f, 0.625000f, 0.750000f, + 0.530368f, -0.688989f, 0.530368f, 0.625826f, -0.465494f, 0.625825f, 0.500000f, 0.875000f, + 0.620941f, -0.688989f, 0.420186f, 0.735284f, -0.465012f, 0.493073f, 0.625000f, 0.875000f, + 0.689105f, -0.688989f, 0.293196f, 0.817250f, -0.464917f, 0.340521f, 0.750000f, 0.875000f, + 0.623438f, -0.675000f, 0.421875f, 0.830544f, -0.000000f, 0.556953f, 0.625000f, 1.000000f, + 0.718348f, -0.702539f, 0.149350f, 0.504537f, -0.857473f, 0.100907f, 0.875000f, 0.750000f, + 0.689105f, -0.688989f, 0.293196f, 0.817250f, -0.464917f, 0.340521f, 0.750000f, 0.875000f, + 0.732057f, -0.688989f, 0.152201f, 0.868645f, -0.463975f, 0.173729f, 0.875000f, 0.875000f, + 0.746997f, -0.688989f, -0.000000f, 0.885831f, -0.464008f, 0.000000f, 1.000000f, 0.875000f, + 0.735000f, -0.675000f, 0.152812f, 0.980581f, -0.000000f, 0.196116f, 0.875000f, 1.000000f +}; + +static ushort const teapotTriangleData[] = { + 0, 14, 15, 14, 16, 15, 14, 9, 16, 9, 17, 16, + 15, 16, 10, 16, 18, 10, 16, 17, 18, 17, 11, 18, + 9, 19, 20, 19, 21, 20, 19, 4, 21, 4, 22, 21, + 20, 21, 11, 21, 23, 11, 21, 22, 23, 22, 12, 23, + 10, 24, 25, 24, 26, 25, 24, 11, 26, 11, 27, 26, + 25, 26, 5, 26, 28, 5, 26, 27, 28, 27, 13, 28, + 11, 29, 30, 29, 31, 30, 29, 12, 31, 12, 32, 31, + 30, 31, 13, 31, 33, 13, 31, 32, 33, 32, 6, 33, + 4, 39, 40, 39, 41, 40, 39, 34, 41, 34, 42, 41, + 40, 41, 35, 41, 43, 35, 41, 42, 43, 42, 36, 43, + 34, 44, 45, 44, 46, 45, 44, 1, 46, 1, 47, 46, + 45, 46, 36, 46, 48, 36, 46, 47, 48, 47, 37, 48, + 35, 49, 50, 49, 51, 50, 49, 36, 51, 36, 52, 51, + 50, 51, 6, 51, 53, 6, 51, 52, 53, 52, 38, 53, + 36, 54, 55, 54, 56, 55, 54, 37, 56, 37, 57, 56, + 55, 56, 38, 56, 58, 38, 56, 57, 58, 57, 7, 58, + 5, 64, 65, 64, 66, 65, 64, 59, 66, 59, 67, 66, + 65, 66, 60, 66, 68, 60, 66, 67, 68, 67, 61, 68, + 59, 69, 70, 69, 71, 70, 69, 6, 71, 6, 72, 71, + 70, 71, 61, 71, 73, 61, 71, 72, 73, 72, 62, 73, + 60, 74, 75, 74, 76, 75, 74, 61, 76, 61, 77, 76, + 75, 76, 2, 76, 78, 2, 76, 77, 78, 77, 63, 78, + 61, 79, 80, 79, 81, 80, 79, 62, 81, 62, 82, 81, + 80, 81, 63, 81, 83, 63, 81, 82, 83, 82, 8, 83, + 6, 89, 90, 89, 91, 90, 89, 84, 91, 84, 92, 91, + 90, 91, 85, 91, 93, 85, 91, 92, 93, 92, 86, 93, + 84, 94, 95, 94, 96, 95, 94, 7, 96, 7, 97, 96, + 95, 96, 86, 96, 98, 86, 96, 97, 98, 97, 87, 98, + 85, 99, 100, 99, 101, 100, 99, 86, 101, 86, 102, 101, + 100, 101, 8, 101, 103, 8, 101, 102, 103, 102, 88, 103, + 86, 104, 105, 104, 106, 105, 104, 87, 106, 87, 107, 106, + 105, 106, 88, 106, 108, 88, 106, 107, 108, 107, 3, 108, + 109, 123, 124, 123, 125, 124, 123, 118, 125, 118, 126, 125, + 124, 125, 119, 125, 127, 119, 125, 126, 127, 126, 120, 127, + 118, 128, 129, 128, 130, 129, 128, 113, 130, 113, 131, 130, + 129, 130, 120, 130, 132, 120, 130, 131, 132, 131, 121, 132, + 119, 133, 134, 133, 135, 134, 133, 120, 135, 120, 136, 135, + 134, 135, 114, 135, 137, 114, 135, 136, 137, 136, 122, 137, + 120, 138, 139, 138, 140, 139, 138, 121, 140, 121, 141, 140, + 139, 140, 122, 140, 142, 122, 140, 141, 142, 141, 115, 142, + 113, 148, 149, 148, 150, 149, 148, 143, 150, 143, 151, 150, + 149, 150, 144, 150, 152, 144, 150, 151, 152, 151, 145, 152, + 143, 153, 154, 153, 155, 154, 153, 110, 155, 110, 156, 155, + 154, 155, 145, 155, 157, 145, 155, 156, 157, 156, 146, 157, + 144, 158, 159, 158, 160, 159, 158, 145, 160, 145, 161, 160, + 159, 160, 115, 160, 162, 115, 160, 161, 162, 161, 147, 162, + 145, 163, 164, 163, 165, 164, 163, 146, 165, 146, 166, 165, + 164, 165, 147, 165, 167, 147, 165, 166, 167, 166, 116, 167, + 114, 173, 174, 173, 175, 174, 173, 168, 175, 168, 176, 175, + 174, 175, 169, 175, 177, 169, 175, 176, 177, 176, 170, 177, + 168, 178, 179, 178, 180, 179, 178, 115, 180, 115, 181, 180, + 179, 180, 170, 180, 182, 170, 180, 181, 182, 181, 171, 182, + 169, 183, 184, 183, 185, 184, 183, 170, 185, 170, 186, 185, + 184, 185, 111, 185, 187, 111, 185, 186, 187, 186, 172, 187, + 170, 188, 189, 188, 190, 189, 188, 171, 190, 171, 191, 190, + 189, 190, 172, 190, 192, 172, 190, 191, 192, 191, 117, 192, + 115, 198, 199, 198, 200, 199, 198, 193, 200, 193, 201, 200, + 199, 200, 194, 200, 202, 194, 200, 201, 202, 201, 195, 202, + 193, 203, 204, 203, 205, 204, 203, 116, 205, 116, 206, 205, + 204, 205, 195, 205, 207, 195, 205, 206, 207, 206, 196, 207, + 194, 208, 209, 208, 210, 209, 208, 195, 210, 195, 211, 210, + 209, 210, 117, 210, 212, 117, 210, 211, 212, 211, 197, 212, + 195, 213, 214, 213, 215, 214, 213, 196, 215, 196, 216, 215, + 214, 215, 197, 215, 217, 197, 215, 216, 217, 216, 112, 217, + 218, 232, 233, 232, 234, 233, 232, 227, 234, 227, 235, 234, + 233, 234, 228, 234, 236, 228, 234, 235, 236, 235, 229, 236, + 227, 237, 238, 237, 239, 238, 237, 222, 239, 222, 240, 239, + 238, 239, 229, 239, 241, 229, 239, 240, 241, 240, 230, 241, + 228, 242, 243, 242, 244, 243, 242, 229, 244, 229, 245, 244, + 243, 244, 223, 244, 246, 223, 244, 245, 246, 245, 231, 246, + 229, 247, 248, 247, 249, 248, 247, 230, 249, 230, 250, 249, + 248, 249, 231, 249, 251, 231, 249, 250, 251, 250, 224, 251, + 222, 257, 258, 257, 259, 258, 257, 252, 259, 252, 260, 259, + 258, 259, 253, 259, 261, 253, 259, 260, 261, 260, 254, 261, + 252, 262, 263, 262, 264, 263, 262, 219, 264, 219, 265, 264, + 263, 264, 254, 264, 266, 254, 264, 265, 266, 265, 255, 266, + 253, 267, 268, 267, 269, 268, 267, 254, 269, 254, 270, 269, + 268, 269, 224, 269, 271, 224, 269, 270, 271, 270, 256, 271, + 254, 272, 273, 272, 274, 273, 272, 255, 274, 255, 275, 274, + 273, 274, 256, 274, 276, 256, 274, 275, 276, 275, 225, 276, + 223, 282, 283, 282, 284, 283, 282, 277, 284, 277, 285, 284, + 283, 284, 278, 284, 286, 278, 284, 285, 286, 285, 279, 286, + 277, 287, 288, 287, 289, 288, 287, 224, 289, 224, 290, 289, + 288, 289, 279, 289, 291, 279, 289, 290, 291, 290, 280, 291, + 278, 292, 293, 292, 294, 293, 292, 279, 294, 279, 295, 294, + 293, 294, 220, 294, 296, 220, 294, 295, 296, 295, 281, 296, + 279, 297, 298, 297, 299, 298, 297, 280, 299, 280, 300, 299, + 298, 299, 281, 299, 301, 281, 299, 300, 301, 300, 226, 301, + 224, 307, 308, 307, 309, 308, 307, 302, 309, 302, 310, 309, + 308, 309, 303, 309, 311, 303, 309, 310, 311, 310, 304, 311, + 302, 312, 313, 312, 314, 313, 312, 225, 314, 225, 315, 314, + 313, 314, 304, 314, 316, 304, 314, 315, 316, 315, 305, 316, + 303, 317, 318, 317, 319, 318, 317, 304, 319, 304, 320, 319, + 318, 319, 226, 319, 321, 226, 319, 320, 321, 320, 306, 321, + 304, 322, 323, 322, 324, 323, 322, 305, 324, 305, 325, 324, + 323, 324, 306, 324, 326, 306, 324, 325, 326, 325, 221, 326, + 327, 341, 342, 341, 343, 342, 341, 336, 343, 336, 344, 343, + 342, 343, 337, 343, 345, 337, 343, 344, 345, 344, 338, 345, + 336, 346, 347, 346, 348, 347, 346, 331, 348, 331, 349, 348, + 347, 348, 338, 348, 350, 338, 348, 349, 350, 349, 339, 350, + 337, 351, 352, 351, 353, 352, 351, 338, 353, 338, 354, 353, + 352, 353, 332, 353, 355, 332, 353, 354, 355, 354, 340, 355, + 338, 356, 357, 356, 358, 357, 356, 339, 358, 339, 359, 358, + 357, 358, 340, 358, 360, 340, 358, 359, 360, 359, 333, 360, + 331, 366, 367, 366, 368, 367, 366, 361, 368, 361, 369, 368, + 367, 368, 362, 368, 370, 362, 368, 369, 370, 369, 363, 370, + 361, 371, 372, 371, 373, 372, 371, 328, 373, 328, 374, 373, + 372, 373, 363, 373, 375, 363, 373, 374, 375, 374, 364, 375, + 362, 376, 377, 376, 378, 377, 376, 363, 378, 363, 379, 378, + 377, 378, 333, 378, 380, 333, 378, 379, 380, 379, 365, 380, + 363, 381, 382, 381, 383, 382, 381, 364, 383, 364, 384, 383, + 382, 383, 365, 383, 385, 365, 383, 384, 385, 384, 334, 385, + 332, 391, 392, 391, 393, 392, 391, 386, 393, 386, 394, 393, + 392, 393, 387, 393, 395, 387, 393, 394, 395, 394, 388, 395, + 386, 396, 397, 396, 398, 397, 396, 333, 398, 333, 399, 398, + 397, 398, 388, 398, 400, 388, 398, 399, 400, 399, 389, 400, + 387, 401, 402, 401, 403, 402, 401, 388, 403, 388, 404, 403, + 402, 403, 329, 403, 405, 329, 403, 404, 405, 404, 390, 405, + 388, 406, 407, 406, 408, 407, 406, 389, 408, 389, 409, 408, + 407, 408, 390, 408, 410, 390, 408, 409, 410, 409, 335, 410, + 333, 416, 417, 416, 418, 417, 416, 411, 418, 411, 419, 418, + 417, 418, 412, 418, 420, 412, 418, 419, 420, 419, 413, 420, + 411, 421, 422, 421, 423, 422, 421, 334, 423, 334, 424, 423, + 422, 423, 413, 423, 425, 413, 423, 424, 425, 424, 414, 425, + 412, 426, 427, 426, 428, 427, 426, 413, 428, 413, 429, 428, + 427, 428, 335, 428, 430, 335, 428, 429, 430, 429, 415, 430, + 413, 431, 432, 431, 433, 432, 431, 414, 433, 414, 434, 433, + 432, 433, 415, 433, 435, 415, 433, 434, 435, 434, 330, 435, + 436, 450, 451, 450, 452, 451, 450, 445, 452, 445, 453, 452, + 451, 452, 446, 452, 454, 446, 452, 453, 454, 453, 447, 454, + 445, 455, 456, 455, 457, 456, 455, 440, 457, 440, 458, 457, + 456, 457, 447, 457, 459, 447, 457, 458, 459, 458, 448, 459, + 446, 460, 461, 460, 462, 461, 460, 447, 462, 447, 463, 462, + 461, 462, 441, 462, 464, 441, 462, 463, 464, 463, 449, 464, + 447, 465, 466, 465, 467, 466, 465, 448, 467, 448, 468, 467, + 466, 467, 449, 467, 469, 449, 467, 468, 469, 468, 442, 469, + 440, 475, 476, 475, 477, 476, 475, 470, 477, 470, 478, 477, + 476, 477, 471, 477, 479, 471, 477, 478, 479, 478, 472, 479, + 470, 480, 481, 480, 482, 481, 480, 437, 482, 437, 483, 482, + 481, 482, 472, 482, 484, 472, 482, 483, 484, 483, 473, 484, + 471, 485, 486, 485, 487, 486, 485, 472, 487, 472, 488, 487, + 486, 487, 442, 487, 489, 442, 487, 488, 489, 488, 474, 489, + 472, 490, 491, 490, 492, 491, 490, 473, 492, 473, 493, 492, + 491, 492, 474, 492, 494, 474, 492, 493, 494, 493, 443, 494, + 441, 500, 501, 500, 502, 501, 500, 495, 502, 495, 503, 502, + 501, 502, 496, 502, 504, 496, 502, 503, 504, 503, 497, 504, + 495, 505, 506, 505, 507, 506, 505, 442, 507, 442, 508, 507, + 506, 507, 497, 507, 509, 497, 507, 508, 509, 508, 498, 509, + 496, 510, 511, 510, 512, 511, 510, 497, 512, 497, 513, 512, + 511, 512, 438, 512, 514, 438, 512, 513, 514, 513, 499, 514, + 497, 515, 516, 515, 517, 516, 515, 498, 517, 498, 518, 517, + 516, 517, 499, 517, 519, 499, 517, 518, 519, 518, 444, 519, + 442, 525, 526, 525, 527, 526, 525, 520, 527, 520, 528, 527, + 526, 527, 521, 527, 529, 521, 527, 528, 529, 528, 522, 529, + 520, 530, 531, 530, 532, 531, 530, 443, 532, 443, 533, 532, + 531, 532, 522, 532, 534, 522, 532, 533, 534, 533, 523, 534, + 521, 535, 536, 535, 537, 536, 535, 522, 537, 522, 538, 537, + 536, 537, 444, 537, 539, 444, 537, 538, 539, 538, 524, 539, + 522, 540, 541, 540, 542, 541, 540, 523, 542, 523, 543, 542, + 541, 542, 524, 542, 544, 524, 542, 543, 544, 543, 439, 544, + 545, 559, 560, 559, 561, 560, 559, 554, 561, 554, 562, 561, + 560, 561, 555, 561, 563, 555, 561, 562, 563, 562, 556, 563, + 554, 564, 565, 564, 566, 565, 564, 549, 566, 549, 567, 566, + 565, 566, 556, 566, 568, 556, 566, 567, 568, 567, 557, 568, + 555, 569, 570, 569, 571, 570, 569, 556, 571, 556, 572, 571, + 570, 571, 550, 571, 573, 550, 571, 572, 573, 572, 558, 573, + 556, 574, 575, 574, 576, 575, 574, 557, 576, 557, 577, 576, + 575, 576, 558, 576, 578, 558, 576, 577, 578, 577, 551, 578, + 549, 584, 585, 584, 586, 585, 584, 579, 586, 579, 587, 586, + 585, 586, 580, 586, 588, 580, 586, 587, 588, 587, 581, 588, + 579, 589, 590, 589, 591, 590, 589, 546, 591, 546, 592, 591, + 590, 591, 581, 591, 593, 581, 591, 592, 593, 592, 582, 593, + 580, 594, 595, 594, 596, 595, 594, 581, 596, 581, 597, 596, + 595, 596, 551, 596, 598, 551, 596, 597, 598, 597, 583, 598, + 581, 599, 600, 599, 601, 600, 599, 582, 601, 582, 602, 601, + 600, 601, 583, 601, 603, 583, 601, 602, 603, 602, 552, 603, + 550, 609, 610, 609, 611, 610, 609, 604, 611, 604, 612, 611, + 610, 611, 605, 611, 613, 605, 611, 612, 613, 612, 606, 613, + 604, 614, 615, 614, 616, 615, 614, 551, 616, 551, 617, 616, + 615, 616, 606, 616, 618, 606, 616, 617, 618, 617, 607, 618, + 605, 619, 620, 619, 621, 620, 619, 606, 621, 606, 622, 621, + 620, 621, 547, 621, 623, 547, 621, 622, 623, 622, 608, 623, + 606, 624, 625, 624, 626, 625, 624, 607, 626, 607, 627, 626, + 625, 626, 608, 626, 628, 608, 626, 627, 628, 627, 553, 628, + 551, 634, 635, 634, 636, 635, 634, 629, 636, 629, 637, 636, + 635, 636, 630, 636, 638, 630, 636, 637, 638, 637, 631, 638, + 629, 639, 640, 639, 641, 640, 639, 552, 641, 552, 642, 641, + 640, 641, 631, 641, 643, 631, 641, 642, 643, 642, 632, 643, + 630, 644, 645, 644, 646, 645, 644, 631, 646, 631, 647, 646, + 645, 646, 553, 646, 648, 553, 646, 647, 648, 647, 633, 648, + 631, 649, 650, 649, 651, 650, 649, 632, 651, 632, 652, 651, + 650, 651, 633, 651, 653, 633, 651, 652, 653, 652, 548, 653, + 654, 668, 669, 668, 670, 669, 668, 663, 670, 663, 671, 670, + 669, 670, 664, 670, 672, 664, 670, 671, 672, 671, 665, 672, + 663, 673, 674, 673, 675, 674, 673, 658, 675, 658, 676, 675, + 674, 675, 665, 675, 677, 665, 675, 676, 677, 676, 666, 677, + 664, 678, 679, 678, 680, 679, 678, 665, 680, 665, 681, 680, + 679, 680, 659, 680, 682, 659, 680, 681, 682, 681, 667, 682, + 665, 683, 684, 683, 685, 684, 683, 666, 685, 666, 686, 685, + 684, 685, 667, 685, 687, 667, 685, 686, 687, 686, 660, 687, + 658, 693, 694, 693, 695, 694, 693, 688, 695, 688, 696, 695, + 694, 695, 689, 695, 697, 689, 695, 696, 697, 696, 690, 697, + 688, 698, 699, 698, 700, 699, 698, 655, 700, 655, 701, 700, + 699, 700, 690, 700, 702, 690, 700, 701, 702, 701, 691, 702, + 689, 703, 704, 703, 705, 704, 703, 690, 705, 690, 706, 705, + 704, 705, 660, 705, 707, 660, 705, 706, 707, 706, 692, 707, + 690, 708, 709, 708, 710, 709, 708, 691, 710, 691, 711, 710, + 709, 710, 692, 710, 712, 692, 710, 711, 712, 711, 661, 712, + 659, 718, 719, 718, 720, 719, 718, 713, 720, 713, 721, 720, + 719, 720, 714, 720, 722, 714, 720, 721, 722, 721, 715, 722, + 713, 723, 724, 723, 725, 724, 723, 660, 725, 660, 726, 725, + 724, 725, 715, 725, 727, 715, 725, 726, 727, 726, 716, 727, + 714, 728, 729, 728, 730, 729, 728, 715, 730, 715, 731, 730, + 729, 730, 656, 730, 732, 656, 730, 731, 732, 731, 717, 732, + 715, 733, 734, 733, 735, 734, 733, 716, 735, 716, 736, 735, + 734, 735, 717, 735, 737, 717, 735, 736, 737, 736, 662, 737, + 660, 743, 744, 743, 745, 744, 743, 738, 745, 738, 746, 745, + 744, 745, 739, 745, 747, 739, 745, 746, 747, 746, 740, 747, + 738, 748, 749, 748, 750, 749, 748, 661, 750, 661, 751, 750, + 749, 750, 740, 750, 752, 740, 750, 751, 752, 751, 741, 752, + 739, 753, 754, 753, 755, 754, 753, 740, 755, 740, 756, 755, + 754, 755, 662, 755, 757, 662, 755, 756, 757, 756, 742, 757, + 740, 758, 759, 758, 760, 759, 758, 741, 760, 741, 761, 760, + 759, 760, 742, 760, 762, 742, 760, 761, 762, 761, 657, 762, + 763, 777, 778, 777, 779, 778, 777, 772, 779, 772, 780, 779, + 778, 779, 773, 779, 781, 773, 779, 780, 781, 780, 774, 781, + 772, 782, 783, 782, 784, 783, 782, 767, 784, 767, 785, 784, + 783, 784, 774, 784, 786, 774, 784, 785, 786, 785, 775, 786, + 773, 787, 788, 787, 789, 788, 787, 774, 789, 774, 790, 789, + 788, 789, 768, 789, 791, 768, 789, 790, 791, 790, 776, 791, + 774, 792, 793, 792, 794, 793, 792, 775, 794, 775, 795, 794, + 793, 794, 776, 794, 796, 776, 794, 795, 796, 795, 769, 796, + 767, 802, 803, 802, 804, 803, 802, 797, 804, 797, 805, 804, + 803, 804, 798, 804, 806, 798, 804, 805, 806, 805, 799, 806, + 797, 807, 808, 807, 809, 808, 807, 764, 809, 764, 810, 809, + 808, 809, 799, 809, 811, 799, 809, 810, 811, 810, 800, 811, + 798, 812, 813, 812, 814, 813, 812, 799, 814, 799, 815, 814, + 813, 814, 769, 814, 816, 769, 814, 815, 816, 815, 801, 816, + 799, 817, 818, 817, 819, 818, 817, 800, 819, 800, 820, 819, + 818, 819, 801, 819, 821, 801, 819, 820, 821, 820, 770, 821, + 768, 827, 828, 827, 829, 828, 827, 822, 829, 822, 830, 829, + 828, 829, 823, 829, 831, 823, 829, 830, 831, 830, 824, 831, + 822, 832, 833, 832, 834, 833, 832, 769, 834, 769, 835, 834, + 833, 834, 824, 834, 836, 824, 834, 835, 836, 835, 825, 836, + 823, 837, 838, 837, 839, 838, 837, 824, 839, 824, 840, 839, + 838, 839, 765, 839, 841, 765, 839, 840, 841, 840, 826, 841, + 824, 842, 843, 842, 844, 843, 842, 825, 844, 825, 845, 844, + 843, 844, 826, 844, 846, 826, 844, 845, 846, 845, 771, 846, + 769, 852, 853, 852, 854, 853, 852, 847, 854, 847, 855, 854, + 853, 854, 848, 854, 856, 848, 854, 855, 856, 855, 849, 856, + 847, 857, 858, 857, 859, 858, 857, 770, 859, 770, 860, 859, + 858, 859, 849, 859, 861, 849, 859, 860, 861, 860, 850, 861, + 848, 862, 863, 862, 864, 863, 862, 849, 864, 849, 865, 864, + 863, 864, 771, 864, 866, 771, 864, 865, 866, 865, 851, 866, + 849, 867, 868, 867, 869, 868, 867, 850, 869, 850, 870, 869, + 868, 869, 851, 869, 871, 851, 869, 870, 871, 870, 766, 871, + 872, 886, 887, 886, 888, 887, 886, 881, 888, 881, 889, 888, + 887, 888, 882, 888, 890, 882, 888, 889, 890, 889, 883, 890, + 881, 891, 892, 891, 893, 892, 891, 876, 893, 876, 894, 893, + 892, 893, 883, 893, 895, 883, 893, 894, 895, 894, 884, 895, + 882, 896, 897, 896, 898, 897, 896, 883, 898, 883, 899, 898, + 897, 898, 877, 898, 900, 877, 898, 899, 900, 899, 885, 900, + 883, 901, 902, 901, 903, 902, 901, 884, 903, 884, 904, 903, + 902, 903, 885, 903, 905, 885, 903, 904, 905, 904, 878, 905, + 876, 911, 912, 911, 913, 912, 911, 906, 913, 906, 914, 913, + 912, 913, 907, 913, 915, 907, 913, 914, 915, 914, 908, 915, + 906, 916, 917, 916, 918, 917, 916, 873, 918, 873, 919, 918, + 917, 918, 908, 918, 920, 908, 918, 919, 920, 919, 909, 920, + 907, 921, 922, 921, 923, 922, 921, 908, 923, 908, 924, 923, + 922, 923, 878, 923, 925, 878, 923, 924, 925, 924, 910, 925, + 908, 926, 927, 926, 928, 927, 926, 909, 928, 909, 929, 928, + 927, 928, 910, 928, 930, 910, 928, 929, 930, 929, 879, 930, + 877, 936, 937, 936, 938, 937, 936, 931, 938, 931, 939, 938, + 937, 938, 932, 938, 940, 932, 938, 939, 940, 939, 933, 940, + 931, 941, 942, 941, 943, 942, 941, 878, 943, 878, 944, 943, + 942, 943, 933, 943, 945, 933, 943, 944, 945, 944, 934, 945, + 932, 946, 947, 946, 948, 947, 946, 933, 948, 933, 949, 948, + 947, 948, 874, 948, 950, 874, 948, 949, 950, 949, 935, 950, + 933, 951, 952, 951, 953, 952, 951, 934, 953, 934, 954, 953, + 952, 953, 935, 953, 955, 935, 953, 954, 955, 954, 880, 955, + 878, 961, 962, 961, 963, 962, 961, 956, 963, 956, 964, 963, + 962, 963, 957, 963, 965, 957, 963, 964, 965, 964, 958, 965, + 956, 966, 967, 966, 968, 967, 966, 879, 968, 879, 969, 968, + 967, 968, 958, 968, 970, 958, 968, 969, 970, 969, 959, 970, + 957, 971, 972, 971, 973, 972, 971, 958, 973, 958, 974, 973, + 972, 973, 880, 973, 975, 880, 973, 974, 975, 974, 960, 975, + 958, 976, 977, 976, 978, 977, 976, 959, 978, 959, 979, 978, + 977, 978, 960, 978, 980, 960, 978, 979, 980, 979, 875, 980, + 981, 995, 996, 995, 997, 996, 995, 990, 997, 990, 998, 997, + 996, 997, 991, 997, 999, 991, 997, 998, 999, 998, 992, 999, + 990, 1000, 1001, 1000, 1002, 1001, 1000, 985, 1002, 985, 1003, 1002, + 1001, 1002, 992, 1002, 1004, 992, 1002, 1003, 1004, 1003, 993, 1004, + 991, 1005, 1006, 1005, 1007, 1006, 1005, 992, 1007, 992, 1008, 1007, + 1006, 1007, 986, 1007, 1009, 986, 1007, 1008, 1009, 1008, 994, 1009, + 992, 1010, 1011, 1010, 1012, 1011, 1010, 993, 1012, 993, 1013, 1012, + 1011, 1012, 994, 1012, 1014, 994, 1012, 1013, 1014, 1013, 987, 1014, + 985, 1020, 1021, 1020, 1022, 1021, 1020, 1015, 1022, 1015, 1023, 1022, + 1021, 1022, 1016, 1022, 1024, 1016, 1022, 1023, 1024, 1023, 1017, 1024, + 1015, 1025, 1026, 1025, 1027, 1026, 1025, 982, 1027, 982, 1028, 1027, + 1026, 1027, 1017, 1027, 1029, 1017, 1027, 1028, 1029, 1028, 1018, 1029, + 1016, 1030, 1031, 1030, 1032, 1031, 1030, 1017, 1032, 1017, 1033, 1032, + 1031, 1032, 987, 1032, 1034, 987, 1032, 1033, 1034, 1033, 1019, 1034, + 1017, 1035, 1036, 1035, 1037, 1036, 1035, 1018, 1037, 1018, 1038, 1037, + 1036, 1037, 1019, 1037, 1039, 1019, 1037, 1038, 1039, 1038, 988, 1039, + 986, 1045, 1046, 1045, 1047, 1046, 1045, 1040, 1047, 1040, 1048, 1047, + 1046, 1047, 1041, 1047, 1049, 1041, 1047, 1048, 1049, 1048, 1042, 1049, + 1040, 1050, 1051, 1050, 1052, 1051, 1050, 987, 1052, 987, 1053, 1052, + 1051, 1052, 1042, 1052, 1054, 1042, 1052, 1053, 1054, 1053, 1043, 1054, + 1041, 1055, 1056, 1055, 1057, 1056, 1055, 1042, 1057, 1042, 1058, 1057, + 1056, 1057, 983, 1057, 1059, 983, 1057, 1058, 1059, 1058, 1044, 1059, + 1042, 1060, 1061, 1060, 1062, 1061, 1060, 1043, 1062, 1043, 1063, 1062, + 1061, 1062, 1044, 1062, 1064, 1044, 1062, 1063, 1064, 1063, 989, 1064, + 987, 1070, 1071, 1070, 1072, 1071, 1070, 1065, 1072, 1065, 1073, 1072, + 1071, 1072, 1066, 1072, 1074, 1066, 1072, 1073, 1074, 1073, 1067, 1074, + 1065, 1075, 1076, 1075, 1077, 1076, 1075, 988, 1077, 988, 1078, 1077, + 1076, 1077, 1067, 1077, 1079, 1067, 1077, 1078, 1079, 1078, 1068, 1079, + 1066, 1080, 1081, 1080, 1082, 1081, 1080, 1067, 1082, 1067, 1083, 1082, + 1081, 1082, 989, 1082, 1084, 989, 1082, 1083, 1084, 1083, 1069, 1084, + 1067, 1085, 1086, 1085, 1087, 1086, 1085, 1068, 1087, 1068, 1088, 1087, + 1086, 1087, 1069, 1087, 1089, 1069, 1087, 1088, 1089, 1088, 984, 1089, + 1090, 1104, 1105, 1104, 1106, 1105, 1104, 1099, 1106, 1099, 1107, 1106, + 1105, 1106, 1100, 1106, 1108, 1100, 1106, 1107, 1108, 1107, 1101, 1108, + 1099, 1109, 1110, 1109, 1111, 1110, 1109, 1094, 1111, 1094, 1112, 1111, + 1110, 1111, 1101, 1111, 1113, 1101, 1111, 1112, 1113, 1112, 1102, 1113, + 1100, 1114, 1115, 1114, 1116, 1115, 1114, 1101, 1116, 1101, 1117, 1116, + 1115, 1116, 1095, 1116, 1118, 1095, 1116, 1117, 1118, 1117, 1103, 1118, + 1101, 1119, 1120, 1119, 1121, 1120, 1119, 1102, 1121, 1102, 1122, 1121, + 1120, 1121, 1103, 1121, 1123, 1103, 1121, 1122, 1123, 1122, 1096, 1123, + 1094, 1129, 1130, 1129, 1131, 1130, 1129, 1124, 1131, 1124, 1132, 1131, + 1130, 1131, 1125, 1131, 1133, 1125, 1131, 1132, 1133, 1132, 1126, 1133, + 1124, 1134, 1135, 1134, 1136, 1135, 1134, 1091, 1136, 1091, 1137, 1136, + 1135, 1136, 1126, 1136, 1138, 1126, 1136, 1137, 1138, 1137, 1127, 1138, + 1125, 1139, 1140, 1139, 1141, 1140, 1139, 1126, 1141, 1126, 1142, 1141, + 1140, 1141, 1096, 1141, 1143, 1096, 1141, 1142, 1143, 1142, 1128, 1143, + 1126, 1144, 1145, 1144, 1146, 1145, 1144, 1127, 1146, 1127, 1147, 1146, + 1145, 1146, 1128, 1146, 1148, 1128, 1146, 1147, 1148, 1147, 1097, 1148, + 1095, 1154, 1155, 1154, 1156, 1155, 1154, 1149, 1156, 1149, 1157, 1156, + 1155, 1156, 1150, 1156, 1158, 1150, 1156, 1157, 1158, 1157, 1151, 1158, + 1149, 1159, 1160, 1159, 1161, 1160, 1159, 1096, 1161, 1096, 1162, 1161, + 1160, 1161, 1151, 1161, 1163, 1151, 1161, 1162, 1163, 1162, 1152, 1163, + 1150, 1164, 1165, 1164, 1166, 1165, 1164, 1151, 1166, 1151, 1167, 1166, + 1165, 1166, 1092, 1166, 1168, 1092, 1166, 1167, 1168, 1167, 1153, 1168, + 1151, 1169, 1170, 1169, 1171, 1170, 1169, 1152, 1171, 1152, 1172, 1171, + 1170, 1171, 1153, 1171, 1173, 1153, 1171, 1172, 1173, 1172, 1098, 1173, + 1096, 1179, 1180, 1179, 1181, 1180, 1179, 1174, 1181, 1174, 1182, 1181, + 1180, 1181, 1175, 1181, 1183, 1175, 1181, 1182, 1183, 1182, 1176, 1183, + 1174, 1184, 1185, 1184, 1186, 1185, 1184, 1097, 1186, 1097, 1187, 1186, + 1185, 1186, 1176, 1186, 1188, 1176, 1186, 1187, 1188, 1187, 1177, 1188, + 1175, 1189, 1190, 1189, 1191, 1190, 1189, 1176, 1191, 1176, 1192, 1191, + 1190, 1191, 1098, 1191, 1193, 1098, 1191, 1192, 1193, 1192, 1178, 1193, + 1176, 1194, 1195, 1194, 1196, 1195, 1194, 1177, 1196, 1177, 1197, 1196, + 1195, 1196, 1178, 1196, 1198, 1178, 1196, 1197, 1198, 1197, 1093, 1198, + 1199, 1213, 1214, 1213, 1215, 1214, 1213, 1208, 1215, 1208, 1216, 1215, + 1214, 1215, 1209, 1215, 1217, 1209, 1215, 1216, 1217, 1216, 1210, 1217, + 1208, 1218, 1219, 1218, 1220, 1219, 1218, 1203, 1220, 1203, 1221, 1220, + 1219, 1220, 1210, 1220, 1222, 1210, 1220, 1221, 1222, 1221, 1211, 1222, + 1209, 1223, 1224, 1223, 1225, 1224, 1223, 1210, 1225, 1210, 1226, 1225, + 1224, 1225, 1204, 1225, 1227, 1204, 1225, 1226, 1227, 1226, 1212, 1227, + 1210, 1228, 1229, 1228, 1230, 1229, 1228, 1211, 1230, 1211, 1231, 1230, + 1229, 1230, 1212, 1230, 1232, 1212, 1230, 1231, 1232, 1231, 1205, 1232, + 1203, 1238, 1239, 1238, 1240, 1239, 1238, 1233, 1240, 1233, 1241, 1240, + 1239, 1240, 1234, 1240, 1242, 1234, 1240, 1241, 1242, 1241, 1235, 1242, + 1233, 1243, 1244, 1243, 1245, 1244, 1243, 1200, 1245, 1200, 1246, 1245, + 1244, 1245, 1235, 1245, 1247, 1235, 1245, 1246, 1247, 1246, 1236, 1247, + 1234, 1248, 1249, 1248, 1250, 1249, 1248, 1235, 1250, 1235, 1251, 1250, + 1249, 1250, 1205, 1250, 1252, 1205, 1250, 1251, 1252, 1251, 1237, 1252, + 1235, 1253, 1254, 1253, 1255, 1254, 1253, 1236, 1255, 1236, 1256, 1255, + 1254, 1255, 1237, 1255, 1257, 1237, 1255, 1256, 1257, 1256, 1206, 1257, + 1204, 1263, 1264, 1263, 1265, 1264, 1263, 1258, 1265, 1258, 1266, 1265, + 1264, 1265, 1259, 1265, 1267, 1259, 1265, 1266, 1267, 1266, 1260, 1267, + 1258, 1268, 1269, 1268, 1270, 1269, 1268, 1205, 1270, 1205, 1271, 1270, + 1269, 1270, 1260, 1270, 1272, 1260, 1270, 1271, 1272, 1271, 1261, 1272, + 1259, 1273, 1274, 1273, 1275, 1274, 1273, 1260, 1275, 1260, 1276, 1275, + 1274, 1275, 1201, 1275, 1277, 1201, 1275, 1276, 1277, 1276, 1262, 1277, + 1260, 1278, 1279, 1278, 1280, 1279, 1278, 1261, 1280, 1261, 1281, 1280, + 1279, 1280, 1262, 1280, 1282, 1262, 1280, 1281, 1282, 1281, 1207, 1282, + 1205, 1288, 1289, 1288, 1290, 1289, 1288, 1283, 1290, 1283, 1291, 1290, + 1289, 1290, 1284, 1290, 1292, 1284, 1290, 1291, 1292, 1291, 1285, 1292, + 1283, 1293, 1294, 1293, 1295, 1294, 1293, 1206, 1295, 1206, 1296, 1295, + 1294, 1295, 1285, 1295, 1297, 1285, 1295, 1296, 1297, 1296, 1286, 1297, + 1284, 1298, 1299, 1298, 1300, 1299, 1298, 1285, 1300, 1285, 1301, 1300, + 1299, 1300, 1207, 1300, 1302, 1207, 1300, 1301, 1302, 1301, 1287, 1302, + 1285, 1303, 1304, 1303, 1305, 1304, 1303, 1286, 1305, 1286, 1306, 1305, + 1304, 1305, 1287, 1305, 1307, 1287, 1305, 1306, 1307, 1306, 1202, 1307, + 1308, 1322, 1323, 1322, 1324, 1323, 1322, 1317, 1324, 1317, 1325, 1324, + 1323, 1324, 1318, 1324, 1326, 1318, 1324, 1325, 1326, 1325, 1319, 1326, + 1317, 1327, 1328, 1327, 1329, 1328, 1327, 1312, 1329, 1312, 1330, 1329, + 1328, 1329, 1319, 1329, 1331, 1319, 1329, 1330, 1331, 1330, 1320, 1331, + 1318, 1332, 1333, 1332, 1334, 1333, 1332, 1319, 1334, 1319, 1335, 1334, + 1333, 1334, 1313, 1334, 1336, 1313, 1334, 1335, 1336, 1335, 1321, 1336, + 1319, 1337, 1338, 1337, 1339, 1338, 1337, 1320, 1339, 1320, 1340, 1339, + 1338, 1339, 1321, 1339, 1341, 1321, 1339, 1340, 1341, 1340, 1314, 1341, + 1312, 1347, 1348, 1347, 1349, 1348, 1347, 1342, 1349, 1342, 1350, 1349, + 1348, 1349, 1343, 1349, 1351, 1343, 1349, 1350, 1351, 1350, 1344, 1351, + 1342, 1352, 1353, 1352, 1354, 1353, 1352, 1309, 1354, 1309, 1355, 1354, + 1353, 1354, 1344, 1354, 1356, 1344, 1354, 1355, 1356, 1355, 1345, 1356, + 1343, 1357, 1358, 1357, 1359, 1358, 1357, 1344, 1359, 1344, 1360, 1359, + 1358, 1359, 1314, 1359, 1361, 1314, 1359, 1360, 1361, 1360, 1346, 1361, + 1344, 1362, 1363, 1362, 1364, 1363, 1362, 1345, 1364, 1345, 1365, 1364, + 1363, 1364, 1346, 1364, 1366, 1346, 1364, 1365, 1366, 1365, 1315, 1366, + 1313, 1372, 1373, 1372, 1374, 1373, 1372, 1367, 1374, 1367, 1375, 1374, + 1373, 1374, 1368, 1374, 1376, 1368, 1374, 1375, 1376, 1375, 1369, 1376, + 1367, 1377, 1378, 1377, 1379, 1378, 1377, 1314, 1379, 1314, 1380, 1379, + 1378, 1379, 1369, 1379, 1381, 1369, 1379, 1380, 1381, 1380, 1370, 1381, + 1368, 1382, 1383, 1382, 1384, 1383, 1382, 1369, 1384, 1369, 1385, 1384, + 1383, 1384, 1310, 1384, 1386, 1310, 1384, 1385, 1386, 1385, 1371, 1386, + 1369, 1387, 1388, 1387, 1389, 1388, 1387, 1370, 1389, 1370, 1390, 1389, + 1388, 1389, 1371, 1389, 1391, 1371, 1389, 1390, 1391, 1390, 1316, 1391, + 1314, 1397, 1398, 1397, 1399, 1398, 1397, 1392, 1399, 1392, 1400, 1399, + 1398, 1399, 1393, 1399, 1401, 1393, 1399, 1400, 1401, 1400, 1394, 1401, + 1392, 1402, 1403, 1402, 1404, 1403, 1402, 1315, 1404, 1315, 1405, 1404, + 1403, 1404, 1394, 1404, 1406, 1394, 1404, 1405, 1406, 1405, 1395, 1406, + 1393, 1407, 1408, 1407, 1409, 1408, 1407, 1394, 1409, 1394, 1410, 1409, + 1408, 1409, 1316, 1409, 1411, 1316, 1409, 1410, 1411, 1410, 1396, 1411, + 1394, 1412, 1413, 1412, 1414, 1413, 1412, 1395, 1414, 1395, 1415, 1414, + 1413, 1414, 1396, 1414, 1416, 1396, 1414, 1415, 1416, 1415, 1311, 1416, + 1417, 1431, 1432, 1431, 1433, 1432, 1431, 1426, 1433, 1426, 1434, 1433, + 1432, 1433, 1427, 1433, 1435, 1427, 1433, 1434, 1435, 1434, 1428, 1435, + 1426, 1436, 1437, 1436, 1438, 1437, 1436, 1421, 1438, 1421, 1439, 1438, + 1437, 1438, 1428, 1438, 1440, 1428, 1438, 1439, 1440, 1439, 1429, 1440, + 1427, 1441, 1442, 1441, 1443, 1442, 1441, 1428, 1443, 1428, 1444, 1443, + 1442, 1443, 1422, 1443, 1445, 1422, 1443, 1444, 1445, 1444, 1430, 1445, + 1428, 1446, 1447, 1446, 1448, 1447, 1446, 1429, 1448, 1429, 1449, 1448, + 1447, 1448, 1430, 1448, 1450, 1430, 1448, 1449, 1450, 1449, 1423, 1450, + 1421, 1456, 1457, 1456, 1458, 1457, 1456, 1451, 1458, 1451, 1459, 1458, + 1457, 1458, 1452, 1458, 1460, 1452, 1458, 1459, 1460, 1459, 1453, 1460, + 1451, 1461, 1462, 1461, 1463, 1462, 1461, 1418, 1463, 1418, 1464, 1463, + 1462, 1463, 1453, 1463, 1465, 1453, 1463, 1464, 1465, 1464, 1454, 1465, + 1452, 1466, 1467, 1466, 1468, 1467, 1466, 1453, 1468, 1453, 1469, 1468, + 1467, 1468, 1423, 1468, 1470, 1423, 1468, 1469, 1470, 1469, 1455, 1470, + 1453, 1471, 1472, 1471, 1473, 1472, 1471, 1454, 1473, 1454, 1474, 1473, + 1472, 1473, 1455, 1473, 1475, 1455, 1473, 1474, 1475, 1474, 1424, 1475, + 1422, 1481, 1482, 1481, 1483, 1482, 1481, 1476, 1483, 1476, 1484, 1483, + 1482, 1483, 1477, 1483, 1485, 1477, 1483, 1484, 1485, 1484, 1478, 1485, + 1476, 1486, 1487, 1486, 1488, 1487, 1486, 1423, 1488, 1423, 1489, 1488, + 1487, 1488, 1478, 1488, 1490, 1478, 1488, 1489, 1490, 1489, 1479, 1490, + 1477, 1491, 1492, 1491, 1493, 1492, 1491, 1478, 1493, 1478, 1494, 1493, + 1492, 1493, 1419, 1493, 1495, 1419, 1493, 1494, 1495, 1494, 1480, 1495, + 1478, 1496, 1497, 1496, 1498, 1497, 1496, 1479, 1498, 1479, 1499, 1498, + 1497, 1498, 1480, 1498, 1500, 1480, 1498, 1499, 1500, 1499, 1425, 1500, + 1423, 1506, 1507, 1506, 1508, 1507, 1506, 1501, 1508, 1501, 1509, 1508, + 1507, 1508, 1502, 1508, 1510, 1502, 1508, 1509, 1510, 1509, 1503, 1510, + 1501, 1511, 1512, 1511, 1513, 1512, 1511, 1424, 1513, 1424, 1514, 1513, + 1512, 1513, 1503, 1513, 1515, 1503, 1513, 1514, 1515, 1514, 1504, 1515, + 1502, 1516, 1517, 1516, 1518, 1517, 1516, 1503, 1518, 1503, 1519, 1518, + 1517, 1518, 1425, 1518, 1520, 1425, 1518, 1519, 1520, 1519, 1505, 1520, + 1503, 1521, 1522, 1521, 1523, 1522, 1521, 1504, 1523, 1504, 1524, 1523, + 1522, 1523, 1505, 1523, 1525, 1505, 1523, 1524, 1525, 1524, 1420, 1525, + 1526, 1540, 1541, 1540, 1542, 1541, 1540, 1535, 1542, 1535, 1543, 1542, + 1541, 1542, 1536, 1542, 1544, 1536, 1542, 1543, 1544, 1543, 1537, 1544, + 1535, 1545, 1546, 1545, 1547, 1546, 1545, 1530, 1547, 1530, 1548, 1547, + 1546, 1547, 1537, 1547, 1549, 1537, 1547, 1548, 1549, 1548, 1538, 1549, + 1536, 1550, 1551, 1550, 1552, 1551, 1550, 1537, 1552, 1537, 1553, 1552, + 1551, 1552, 1531, 1552, 1554, 1531, 1552, 1553, 1554, 1553, 1539, 1554, + 1537, 1555, 1556, 1555, 1557, 1556, 1555, 1538, 1557, 1538, 1558, 1557, + 1556, 1557, 1539, 1557, 1559, 1539, 1557, 1558, 1559, 1558, 1532, 1559, + 1530, 1565, 1566, 1565, 1567, 1566, 1565, 1560, 1567, 1560, 1568, 1567, + 1566, 1567, 1561, 1567, 1569, 1561, 1567, 1568, 1569, 1568, 1562, 1569, + 1560, 1570, 1571, 1570, 1572, 1571, 1570, 1527, 1572, 1527, 1573, 1572, + 1571, 1572, 1562, 1572, 1574, 1562, 1572, 1573, 1574, 1573, 1563, 1574, + 1561, 1575, 1576, 1575, 1577, 1576, 1575, 1562, 1577, 1562, 1578, 1577, + 1576, 1577, 1532, 1577, 1579, 1532, 1577, 1578, 1579, 1578, 1564, 1579, + 1562, 1580, 1581, 1580, 1582, 1581, 1580, 1563, 1582, 1563, 1583, 1582, + 1581, 1582, 1564, 1582, 1584, 1564, 1582, 1583, 1584, 1583, 1533, 1584, + 1531, 1590, 1591, 1590, 1592, 1591, 1590, 1585, 1592, 1585, 1593, 1592, + 1591, 1592, 1586, 1592, 1594, 1586, 1592, 1593, 1594, 1593, 1587, 1594, + 1585, 1595, 1596, 1595, 1597, 1596, 1595, 1532, 1597, 1532, 1598, 1597, + 1596, 1597, 1587, 1597, 1599, 1587, 1597, 1598, 1599, 1598, 1588, 1599, + 1586, 1600, 1601, 1600, 1602, 1601, 1600, 1587, 1602, 1587, 1603, 1602, + 1601, 1602, 1528, 1602, 1604, 1528, 1602, 1603, 1604, 1603, 1589, 1604, + 1587, 1605, 1606, 1605, 1607, 1606, 1605, 1588, 1607, 1588, 1608, 1607, + 1606, 1607, 1589, 1607, 1609, 1589, 1607, 1608, 1609, 1608, 1534, 1609, + 1532, 1615, 1616, 1615, 1617, 1616, 1615, 1610, 1617, 1610, 1618, 1617, + 1616, 1617, 1611, 1617, 1619, 1611, 1617, 1618, 1619, 1618, 1612, 1619, + 1610, 1620, 1621, 1620, 1622, 1621, 1620, 1533, 1622, 1533, 1623, 1622, + 1621, 1622, 1612, 1622, 1624, 1612, 1622, 1623, 1624, 1623, 1613, 1624, + 1611, 1625, 1626, 1625, 1627, 1626, 1625, 1612, 1627, 1612, 1628, 1627, + 1626, 1627, 1534, 1627, 1629, 1534, 1627, 1628, 1629, 1628, 1614, 1629, + 1612, 1630, 1631, 1630, 1632, 1631, 1630, 1613, 1632, 1613, 1633, 1632, + 1631, 1632, 1614, 1632, 1634, 1614, 1632, 1633, 1634, 1633, 1529, 1634, + 1635, 1649, 1650, 1649, 1651, 1650, 1649, 1644, 1651, 1644, 1652, 1651, + 1650, 1651, 1645, 1651, 1653, 1645, 1651, 1652, 1653, 1652, 1646, 1653, + 1644, 1654, 1655, 1654, 1656, 1655, 1654, 1639, 1656, 1639, 1657, 1656, + 1655, 1656, 1646, 1656, 1658, 1646, 1656, 1657, 1658, 1657, 1647, 1658, + 1645, 1659, 1660, 1659, 1661, 1660, 1659, 1646, 1661, 1646, 1662, 1661, + 1660, 1661, 1640, 1661, 1663, 1640, 1661, 1662, 1663, 1662, 1648, 1663, + 1646, 1664, 1665, 1664, 1666, 1665, 1664, 1647, 1666, 1647, 1667, 1666, + 1665, 1666, 1648, 1666, 1668, 1648, 1666, 1667, 1668, 1667, 1641, 1668, + 1639, 1674, 1675, 1674, 1676, 1675, 1674, 1669, 1676, 1669, 1677, 1676, + 1675, 1676, 1670, 1676, 1678, 1670, 1676, 1677, 1678, 1677, 1671, 1678, + 1669, 1679, 1680, 1679, 1681, 1680, 1679, 1636, 1681, 1636, 1682, 1681, + 1680, 1681, 1671, 1681, 1683, 1671, 1681, 1682, 1683, 1682, 1672, 1683, + 1670, 1684, 1685, 1684, 1686, 1685, 1684, 1671, 1686, 1671, 1687, 1686, + 1685, 1686, 1641, 1686, 1688, 1641, 1686, 1687, 1688, 1687, 1673, 1688, + 1671, 1689, 1690, 1689, 1691, 1690, 1689, 1672, 1691, 1672, 1692, 1691, + 1690, 1691, 1673, 1691, 1693, 1673, 1691, 1692, 1693, 1692, 1642, 1693, + 1640, 1699, 1700, 1699, 1701, 1700, 1699, 1694, 1701, 1694, 1702, 1701, + 1700, 1701, 1695, 1701, 1703, 1695, 1701, 1702, 1703, 1702, 1696, 1703, + 1694, 1704, 1705, 1704, 1706, 1705, 1704, 1641, 1706, 1641, 1707, 1706, + 1705, 1706, 1696, 1706, 1708, 1696, 1706, 1707, 1708, 1707, 1697, 1708, + 1695, 1709, 1710, 1709, 1711, 1710, 1709, 1696, 1711, 1696, 1712, 1711, + 1710, 1711, 1637, 1711, 1713, 1637, 1711, 1712, 1713, 1712, 1698, 1713, + 1696, 1714, 1715, 1714, 1716, 1715, 1714, 1697, 1716, 1697, 1717, 1716, + 1715, 1716, 1698, 1716, 1718, 1698, 1716, 1717, 1718, 1717, 1643, 1718, + 1641, 1724, 1725, 1724, 1726, 1725, 1724, 1719, 1726, 1719, 1727, 1726, + 1725, 1726, 1720, 1726, 1728, 1720, 1726, 1727, 1728, 1727, 1721, 1728, + 1719, 1729, 1730, 1729, 1731, 1730, 1729, 1642, 1731, 1642, 1732, 1731, + 1730, 1731, 1721, 1731, 1733, 1721, 1731, 1732, 1733, 1732, 1722, 1733, + 1720, 1734, 1735, 1734, 1736, 1735, 1734, 1721, 1736, 1721, 1737, 1736, + 1735, 1736, 1643, 1736, 1738, 1643, 1736, 1737, 1738, 1737, 1723, 1738, + 1721, 1739, 1740, 1739, 1741, 1740, 1739, 1722, 1741, 1722, 1742, 1741, + 1740, 1741, 1723, 1741, 1743, 1723, 1741, 1742, 1743, 1742, 1638, 1743, + 1744, 1758, 1759, 1758, 1760, 1759, 1758, 1753, 1760, 1753, 1761, 1760, + 1759, 1760, 1754, 1760, 1762, 1754, 1760, 1761, 1762, 1761, 1755, 1762, + 1753, 1763, 1764, 1763, 1765, 1764, 1763, 1748, 1765, 1748, 1766, 1765, + 1764, 1765, 1755, 1765, 1767, 1755, 1765, 1766, 1767, 1766, 1756, 1767, + 1754, 1768, 1769, 1768, 1770, 1769, 1768, 1755, 1770, 1755, 1771, 1770, + 1769, 1770, 1749, 1770, 1772, 1749, 1770, 1771, 1772, 1771, 1757, 1772, + 1755, 1773, 1774, 1773, 1775, 1774, 1773, 1756, 1775, 1756, 1776, 1775, + 1774, 1775, 1757, 1775, 1777, 1757, 1775, 1776, 1777, 1776, 1750, 1777, + 1748, 1783, 1784, 1783, 1785, 1784, 1783, 1778, 1785, 1778, 1786, 1785, + 1784, 1785, 1779, 1785, 1787, 1779, 1785, 1786, 1787, 1786, 1780, 1787, + 1778, 1788, 1789, 1788, 1790, 1789, 1788, 1745, 1790, 1745, 1791, 1790, + 1789, 1790, 1780, 1790, 1792, 1780, 1790, 1791, 1792, 1791, 1781, 1792, + 1779, 1793, 1794, 1793, 1795, 1794, 1793, 1780, 1795, 1780, 1796, 1795, + 1794, 1795, 1750, 1795, 1797, 1750, 1795, 1796, 1797, 1796, 1782, 1797, + 1780, 1798, 1799, 1798, 1800, 1799, 1798, 1781, 1800, 1781, 1801, 1800, + 1799, 1800, 1782, 1800, 1802, 1782, 1800, 1801, 1802, 1801, 1751, 1802, + 1749, 1808, 1809, 1808, 1810, 1809, 1808, 1803, 1810, 1803, 1811, 1810, + 1809, 1810, 1804, 1810, 1812, 1804, 1810, 1811, 1812, 1811, 1805, 1812, + 1803, 1813, 1814, 1813, 1815, 1814, 1813, 1750, 1815, 1750, 1816, 1815, + 1814, 1815, 1805, 1815, 1817, 1805, 1815, 1816, 1817, 1816, 1806, 1817, + 1804, 1818, 1819, 1818, 1820, 1819, 1818, 1805, 1820, 1805, 1821, 1820, + 1819, 1820, 1746, 1820, 1822, 1746, 1820, 1821, 1822, 1821, 1807, 1822, + 1805, 1823, 1824, 1823, 1825, 1824, 1823, 1806, 1825, 1806, 1826, 1825, + 1824, 1825, 1807, 1825, 1827, 1807, 1825, 1826, 1827, 1826, 1752, 1827, + 1750, 1833, 1834, 1833, 1835, 1834, 1833, 1828, 1835, 1828, 1836, 1835, + 1834, 1835, 1829, 1835, 1837, 1829, 1835, 1836, 1837, 1836, 1830, 1837, + 1828, 1838, 1839, 1838, 1840, 1839, 1838, 1751, 1840, 1751, 1841, 1840, + 1839, 1840, 1830, 1840, 1842, 1830, 1840, 1841, 1842, 1841, 1831, 1842, + 1829, 1843, 1844, 1843, 1845, 1844, 1843, 1830, 1845, 1830, 1846, 1845, + 1844, 1845, 1752, 1845, 1847, 1752, 1845, 1846, 1847, 1846, 1832, 1847, + 1830, 1848, 1849, 1848, 1850, 1849, 1848, 1831, 1850, 1831, 1851, 1850, + 1849, 1850, 1832, 1850, 1852, 1832, 1850, 1851, 1852, 1851, 1747, 1852, + 1853, 1867, 1868, 1867, 1869, 1868, 1867, 1862, 1869, 1862, 1870, 1869, + 1868, 1869, 1863, 1869, 1871, 1863, 1869, 1870, 1871, 1870, 1864, 1871, + 1862, 1872, 1873, 1872, 1874, 1873, 1872, 1857, 1874, 1857, 1875, 1874, + 1873, 1874, 1864, 1874, 1876, 1864, 1874, 1875, 1876, 1875, 1865, 1876, + 1863, 1877, 1878, 1877, 1879, 1878, 1877, 1864, 1879, 1864, 1880, 1879, + 1878, 1879, 1858, 1879, 1881, 1858, 1879, 1880, 1881, 1880, 1866, 1881, + 1864, 1882, 1883, 1882, 1884, 1883, 1882, 1865, 1884, 1865, 1885, 1884, + 1883, 1884, 1866, 1884, 1886, 1866, 1884, 1885, 1886, 1885, 1859, 1886, + 1857, 1892, 1893, 1892, 1894, 1893, 1892, 1887, 1894, 1887, 1895, 1894, + 1893, 1894, 1888, 1894, 1896, 1888, 1894, 1895, 1896, 1895, 1889, 1896, + 1887, 1897, 1898, 1897, 1899, 1898, 1897, 1854, 1899, 1854, 1900, 1899, + 1898, 1899, 1889, 1899, 1901, 1889, 1899, 1900, 1901, 1900, 1890, 1901, + 1888, 1902, 1903, 1902, 1904, 1903, 1902, 1889, 1904, 1889, 1905, 1904, + 1903, 1904, 1859, 1904, 1906, 1859, 1904, 1905, 1906, 1905, 1891, 1906, + 1889, 1907, 1908, 1907, 1909, 1908, 1907, 1890, 1909, 1890, 1910, 1909, + 1908, 1909, 1891, 1909, 1911, 1891, 1909, 1910, 1911, 1910, 1860, 1911, + 1858, 1917, 1918, 1917, 1919, 1918, 1917, 1912, 1919, 1912, 1920, 1919, + 1918, 1919, 1913, 1919, 1921, 1913, 1919, 1920, 1921, 1920, 1914, 1921, + 1912, 1922, 1923, 1922, 1924, 1923, 1922, 1859, 1924, 1859, 1925, 1924, + 1923, 1924, 1914, 1924, 1926, 1914, 1924, 1925, 1926, 1925, 1915, 1926, + 1913, 1927, 1928, 1927, 1929, 1928, 1927, 1914, 1929, 1914, 1930, 1929, + 1928, 1929, 1855, 1929, 1931, 1855, 1929, 1930, 1931, 1930, 1916, 1931, + 1914, 1932, 1933, 1932, 1934, 1933, 1932, 1915, 1934, 1915, 1935, 1934, + 1933, 1934, 1916, 1934, 1936, 1916, 1934, 1935, 1936, 1935, 1861, 1936, + 1859, 1942, 1943, 1942, 1944, 1943, 1942, 1937, 1944, 1937, 1945, 1944, + 1943, 1944, 1938, 1944, 1946, 1938, 1944, 1945, 1946, 1945, 1939, 1946, + 1937, 1947, 1948, 1947, 1949, 1948, 1947, 1860, 1949, 1860, 1950, 1949, + 1948, 1949, 1939, 1949, 1951, 1939, 1949, 1950, 1951, 1950, 1940, 1951, + 1938, 1952, 1953, 1952, 1954, 1953, 1952, 1939, 1954, 1939, 1955, 1954, + 1953, 1954, 1861, 1954, 1956, 1861, 1954, 1955, 1956, 1955, 1941, 1956, + 1939, 1957, 1958, 1957, 1959, 1958, 1957, 1940, 1959, 1940, 1960, 1959, + 1958, 1959, 1941, 1959, 1961, 1941, 1959, 1960, 1961, 1960, 1856, 1961, + 1962, 1976, 1977, 1976, 1978, 1977, 1976, 1971, 1978, 1971, 1979, 1978, + 1977, 1978, 1972, 1978, 1980, 1972, 1978, 1979, 1980, 1979, 1973, 1980, + 1971, 1981, 1982, 1981, 1983, 1982, 1981, 1966, 1983, 1966, 1984, 1983, + 1982, 1983, 1973, 1983, 1985, 1973, 1983, 1984, 1985, 1984, 1974, 1985, + 1972, 1986, 1987, 1986, 1988, 1987, 1986, 1973, 1988, 1973, 1989, 1988, + 1987, 1988, 1967, 1988, 1990, 1967, 1988, 1989, 1990, 1989, 1975, 1990, + 1973, 1991, 1992, 1991, 1993, 1992, 1991, 1974, 1993, 1974, 1994, 1993, + 1992, 1993, 1975, 1993, 1995, 1975, 1993, 1994, 1995, 1994, 1968, 1995, + 1966, 2001, 2002, 2001, 2003, 2002, 2001, 1996, 2003, 1996, 2004, 2003, + 2002, 2003, 1997, 2003, 2005, 1997, 2003, 2004, 2005, 2004, 1998, 2005, + 1996, 2006, 2007, 2006, 2008, 2007, 2006, 1963, 2008, 1963, 2009, 2008, + 2007, 2008, 1998, 2008, 2010, 1998, 2008, 2009, 2010, 2009, 1999, 2010, + 1997, 2011, 2012, 2011, 2013, 2012, 2011, 1998, 2013, 1998, 2014, 2013, + 2012, 2013, 1968, 2013, 2015, 1968, 2013, 2014, 2015, 2014, 2000, 2015, + 1998, 2016, 2017, 2016, 2018, 2017, 2016, 1999, 2018, 1999, 2019, 2018, + 2017, 2018, 2000, 2018, 2020, 2000, 2018, 2019, 2020, 2019, 1969, 2020, + 1967, 2026, 2027, 2026, 2028, 2027, 2026, 2021, 2028, 2021, 2029, 2028, + 2027, 2028, 2022, 2028, 2030, 2022, 2028, 2029, 2030, 2029, 2023, 2030, + 2021, 2031, 2032, 2031, 2033, 2032, 2031, 1968, 2033, 1968, 2034, 2033, + 2032, 2033, 2023, 2033, 2035, 2023, 2033, 2034, 2035, 2034, 2024, 2035, + 2022, 2036, 2037, 2036, 2038, 2037, 2036, 2023, 2038, 2023, 2039, 2038, + 2037, 2038, 1964, 2038, 2040, 1964, 2038, 2039, 2040, 2039, 2025, 2040, + 2023, 2041, 2042, 2041, 2043, 2042, 2041, 2024, 2043, 2024, 2044, 2043, + 2042, 2043, 2025, 2043, 2045, 2025, 2043, 2044, 2045, 2044, 1970, 2045, + 1968, 2051, 2052, 2051, 2053, 2052, 2051, 2046, 2053, 2046, 2054, 2053, + 2052, 2053, 2047, 2053, 2055, 2047, 2053, 2054, 2055, 2054, 2048, 2055, + 2046, 2056, 2057, 2056, 2058, 2057, 2056, 1969, 2058, 1969, 2059, 2058, + 2057, 2058, 2048, 2058, 2060, 2048, 2058, 2059, 2060, 2059, 2049, 2060, + 2047, 2061, 2062, 2061, 2063, 2062, 2061, 2048, 2063, 2048, 2064, 2063, + 2062, 2063, 1970, 2063, 2065, 1970, 2063, 2064, 2065, 2064, 2050, 2065, + 2048, 2066, 2067, 2066, 2068, 2067, 2066, 2049, 2068, 2049, 2069, 2068, + 2067, 2068, 2050, 2068, 2070, 2050, 2068, 2069, 2070, 2069, 1965, 2070, + 2071, 2085, 2086, 2085, 2087, 2086, 2085, 2080, 2087, 2080, 2088, 2087, + 2086, 2087, 2081, 2087, 2089, 2081, 2087, 2088, 2089, 2088, 2082, 2089, + 2080, 2090, 2091, 2090, 2092, 2091, 2090, 2075, 2092, 2075, 2093, 2092, + 2091, 2092, 2082, 2092, 2094, 2082, 2092, 2093, 2094, 2093, 2083, 2094, + 2081, 2095, 2096, 2095, 2097, 2096, 2095, 2082, 2097, 2082, 2098, 2097, + 2096, 2097, 2076, 2097, 2099, 2076, 2097, 2098, 2099, 2098, 2084, 2099, + 2082, 2100, 2101, 2100, 2102, 2101, 2100, 2083, 2102, 2083, 2103, 2102, + 2101, 2102, 2084, 2102, 2104, 2084, 2102, 2103, 2104, 2103, 2077, 2104, + 2075, 2110, 2111, 2110, 2112, 2111, 2110, 2105, 2112, 2105, 2113, 2112, + 2111, 2112, 2106, 2112, 2114, 2106, 2112, 2113, 2114, 2113, 2107, 2114, + 2105, 2115, 2116, 2115, 2117, 2116, 2115, 2072, 2117, 2072, 2118, 2117, + 2116, 2117, 2107, 2117, 2119, 2107, 2117, 2118, 2119, 2118, 2108, 2119, + 2106, 2120, 2121, 2120, 2122, 2121, 2120, 2107, 2122, 2107, 2123, 2122, + 2121, 2122, 2077, 2122, 2124, 2077, 2122, 2123, 2124, 2123, 2109, 2124, + 2107, 2125, 2126, 2125, 2127, 2126, 2125, 2108, 2127, 2108, 2128, 2127, + 2126, 2127, 2109, 2127, 2129, 2109, 2127, 2128, 2129, 2128, 2078, 2129, + 2076, 2135, 2136, 2135, 2137, 2136, 2135, 2130, 2137, 2130, 2138, 2137, + 2136, 2137, 2131, 2137, 2139, 2131, 2137, 2138, 2139, 2138, 2132, 2139, + 2130, 2140, 2141, 2140, 2142, 2141, 2140, 2077, 2142, 2077, 2143, 2142, + 2141, 2142, 2132, 2142, 2144, 2132, 2142, 2143, 2144, 2143, 2133, 2144, + 2131, 2145, 2146, 2145, 2147, 2146, 2145, 2132, 2147, 2132, 2148, 2147, + 2146, 2147, 2073, 2147, 2149, 2073, 2147, 2148, 2149, 2148, 2134, 2149, + 2132, 2150, 2151, 2150, 2152, 2151, 2150, 2133, 2152, 2133, 2153, 2152, + 2151, 2152, 2134, 2152, 2154, 2134, 2152, 2153, 2154, 2153, 2079, 2154, + 2077, 2160, 2161, 2160, 2162, 2161, 2160, 2155, 2162, 2155, 2163, 2162, + 2161, 2162, 2156, 2162, 2164, 2156, 2162, 2163, 2164, 2163, 2157, 2164, + 2155, 2165, 2166, 2165, 2167, 2166, 2165, 2078, 2167, 2078, 2168, 2167, + 2166, 2167, 2157, 2167, 2169, 2157, 2167, 2168, 2169, 2168, 2158, 2169, + 2156, 2170, 2171, 2170, 2172, 2171, 2170, 2157, 2172, 2157, 2173, 2172, + 2171, 2172, 2079, 2172, 2174, 2079, 2172, 2173, 2174, 2173, 2159, 2174, + 2157, 2175, 2176, 2175, 2177, 2176, 2175, 2158, 2177, 2158, 2178, 2177, + 2176, 2177, 2159, 2177, 2179, 2159, 2177, 2178, 2179, 2178, 2074, 2179, + 2194, 2196, 2195, 2189, 2197, 2196, 2195, 2196, 2190, 2196, 2198, 2190, + 2196, 2197, 2198, 2197, 2191, 2198, 2199, 2201, 2200, 2184, 2202, 2201, + 2200, 2201, 2191, 2201, 2203, 2191, 2201, 2202, 2203, 2202, 2192, 2203, + 2190, 2204, 2205, 2204, 2206, 2205, 2204, 2191, 2206, 2191, 2207, 2206, + 2205, 2206, 2185, 2206, 2208, 2185, 2206, 2207, 2208, 2207, 2193, 2208, + 2191, 2209, 2210, 2209, 2211, 2210, 2209, 2192, 2211, 2192, 2212, 2211, + 2210, 2211, 2193, 2211, 2213, 2193, 2211, 2212, 2213, 2212, 2186, 2213, + 2219, 2221, 2220, 2214, 2222, 2221, 2220, 2221, 2215, 2221, 2223, 2215, + 2221, 2222, 2223, 2222, 2216, 2223, 2224, 2226, 2225, 2181, 2227, 2226, + 2225, 2226, 2216, 2226, 2228, 2216, 2226, 2227, 2228, 2227, 2217, 2228, + 2215, 2229, 2230, 2229, 2231, 2230, 2229, 2216, 2231, 2216, 2232, 2231, + 2230, 2231, 2186, 2231, 2233, 2186, 2231, 2232, 2233, 2232, 2218, 2233, + 2216, 2234, 2235, 2234, 2236, 2235, 2234, 2217, 2236, 2217, 2237, 2236, + 2235, 2236, 2218, 2236, 2238, 2218, 2236, 2237, 2238, 2237, 2187, 2238, + 2185, 2244, 2245, 2244, 2246, 2245, 2244, 2239, 2246, 2239, 2247, 2246, + 2245, 2246, 2240, 2246, 2248, 2240, 2246, 2247, 2248, 2247, 2241, 2248, + 2239, 2249, 2250, 2249, 2251, 2250, 2249, 2186, 2251, 2186, 2252, 2251, + 2250, 2251, 2241, 2251, 2253, 2241, 2251, 2252, 2253, 2252, 2242, 2253, + 2240, 2254, 2255, 2254, 2256, 2255, 2254, 2241, 2256, 2241, 2257, 2256, + 2255, 2256, 2182, 2256, 2258, 2182, 2256, 2257, 2258, 2257, 2243, 2258, + 2241, 2259, 2260, 2259, 2261, 2260, 2259, 2242, 2261, 2242, 2262, 2261, + 2260, 2261, 2243, 2261, 2263, 2243, 2261, 2262, 2263, 2262, 2188, 2263, + 2186, 2269, 2270, 2269, 2271, 2270, 2269, 2264, 2271, 2264, 2272, 2271, + 2270, 2271, 2265, 2271, 2273, 2265, 2271, 2272, 2273, 2272, 2266, 2273, + 2264, 2274, 2275, 2274, 2276, 2275, 2274, 2187, 2276, 2187, 2277, 2276, + 2275, 2276, 2266, 2276, 2278, 2266, 2276, 2277, 2278, 2277, 2267, 2278, + 2265, 2279, 2280, 2279, 2281, 2280, 2279, 2266, 2281, 2266, 2282, 2281, + 2280, 2281, 2188, 2281, 2283, 2188, 2281, 2282, 2283, 2282, 2268, 2283, + 2266, 2284, 2285, 2284, 2286, 2285, 2284, 2267, 2286, 2267, 2287, 2286, + 2285, 2286, 2268, 2286, 2288, 2268, 2286, 2287, 2288, 2287, 2183, 2288, + 2303, 2305, 2304, 2298, 2306, 2305, 2304, 2305, 2299, 2305, 2307, 2299, + 2305, 2306, 2307, 2306, 2300, 2307, 2308, 2310, 2309, 2293, 2311, 2310, + 2309, 2310, 2300, 2310, 2312, 2300, 2310, 2311, 2312, 2311, 2301, 2312, + 2299, 2313, 2314, 2313, 2315, 2314, 2313, 2300, 2315, 2300, 2316, 2315, + 2314, 2315, 2294, 2315, 2317, 2294, 2315, 2316, 2317, 2316, 2302, 2317, + 2300, 2318, 2319, 2318, 2320, 2319, 2318, 2301, 2320, 2301, 2321, 2320, + 2319, 2320, 2302, 2320, 2322, 2302, 2320, 2321, 2322, 2321, 2295, 2322, + 2328, 2330, 2329, 2323, 2331, 2330, 2329, 2330, 2324, 2330, 2332, 2324, + 2330, 2331, 2332, 2331, 2325, 2332, 2333, 2335, 2334, 2290, 2336, 2335, + 2334, 2335, 2325, 2335, 2337, 2325, 2335, 2336, 2337, 2336, 2326, 2337, + 2324, 2338, 2339, 2338, 2340, 2339, 2338, 2325, 2340, 2325, 2341, 2340, + 2339, 2340, 2295, 2340, 2342, 2295, 2340, 2341, 2342, 2341, 2327, 2342, + 2325, 2343, 2344, 2343, 2345, 2344, 2343, 2326, 2345, 2326, 2346, 2345, + 2344, 2345, 2327, 2345, 2347, 2327, 2345, 2346, 2347, 2346, 2296, 2347, + 2294, 2353, 2354, 2353, 2355, 2354, 2353, 2348, 2355, 2348, 2356, 2355, + 2354, 2355, 2349, 2355, 2357, 2349, 2355, 2356, 2357, 2356, 2350, 2357, + 2348, 2358, 2359, 2358, 2360, 2359, 2358, 2295, 2360, 2295, 2361, 2360, + 2359, 2360, 2350, 2360, 2362, 2350, 2360, 2361, 2362, 2361, 2351, 2362, + 2349, 2363, 2364, 2363, 2365, 2364, 2363, 2350, 2365, 2350, 2366, 2365, + 2364, 2365, 2291, 2365, 2367, 2291, 2365, 2366, 2367, 2366, 2352, 2367, + 2350, 2368, 2369, 2368, 2370, 2369, 2368, 2351, 2370, 2351, 2371, 2370, + 2369, 2370, 2352, 2370, 2372, 2352, 2370, 2371, 2372, 2371, 2297, 2372, + 2295, 2378, 2379, 2378, 2380, 2379, 2378, 2373, 2380, 2373, 2381, 2380, + 2379, 2380, 2374, 2380, 2382, 2374, 2380, 2381, 2382, 2381, 2375, 2382, + 2373, 2383, 2384, 2383, 2385, 2384, 2383, 2296, 2385, 2296, 2386, 2385, + 2384, 2385, 2375, 2385, 2387, 2375, 2385, 2386, 2387, 2386, 2376, 2387, + 2374, 2388, 2389, 2388, 2390, 2389, 2388, 2375, 2390, 2375, 2391, 2390, + 2389, 2390, 2297, 2390, 2392, 2297, 2390, 2391, 2392, 2391, 2377, 2392, + 2375, 2393, 2394, 2393, 2395, 2394, 2393, 2376, 2395, 2376, 2396, 2395, + 2394, 2395, 2377, 2395, 2397, 2377, 2395, 2396, 2397, 2396, 2292, 2397, + 2412, 2414, 2413, 2407, 2415, 2414, 2413, 2414, 2408, 2414, 2416, 2408, + 2414, 2415, 2416, 2415, 2409, 2416, 2417, 2419, 2418, 2402, 2420, 2419, + 2418, 2419, 2409, 2419, 2421, 2409, 2419, 2420, 2421, 2420, 2410, 2421, + 2408, 2422, 2423, 2422, 2424, 2423, 2422, 2409, 2424, 2409, 2425, 2424, + 2423, 2424, 2403, 2424, 2426, 2403, 2424, 2425, 2426, 2425, 2411, 2426, + 2409, 2427, 2428, 2427, 2429, 2428, 2427, 2410, 2429, 2410, 2430, 2429, + 2428, 2429, 2411, 2429, 2431, 2411, 2429, 2430, 2431, 2430, 2404, 2431, + 2437, 2439, 2438, 2432, 2440, 2439, 2438, 2439, 2433, 2439, 2441, 2433, + 2439, 2440, 2441, 2440, 2434, 2441, 2442, 2444, 2443, 2399, 2445, 2444, + 2443, 2444, 2434, 2444, 2446, 2434, 2444, 2445, 2446, 2445, 2435, 2446, + 2433, 2447, 2448, 2447, 2449, 2448, 2447, 2434, 2449, 2434, 2450, 2449, + 2448, 2449, 2404, 2449, 2451, 2404, 2449, 2450, 2451, 2450, 2436, 2451, + 2434, 2452, 2453, 2452, 2454, 2453, 2452, 2435, 2454, 2435, 2455, 2454, + 2453, 2454, 2436, 2454, 2456, 2436, 2454, 2455, 2456, 2455, 2405, 2456, + 2403, 2462, 2463, 2462, 2464, 2463, 2462, 2457, 2464, 2457, 2465, 2464, + 2463, 2464, 2458, 2464, 2466, 2458, 2464, 2465, 2466, 2465, 2459, 2466, + 2457, 2467, 2468, 2467, 2469, 2468, 2467, 2404, 2469, 2404, 2470, 2469, + 2468, 2469, 2459, 2469, 2471, 2459, 2469, 2470, 2471, 2470, 2460, 2471, + 2458, 2472, 2473, 2472, 2474, 2473, 2472, 2459, 2474, 2459, 2475, 2474, + 2473, 2474, 2400, 2474, 2476, 2400, 2474, 2475, 2476, 2475, 2461, 2476, + 2459, 2477, 2478, 2477, 2479, 2478, 2477, 2460, 2479, 2460, 2480, 2479, + 2478, 2479, 2461, 2479, 2481, 2461, 2479, 2480, 2481, 2480, 2406, 2481, + 2404, 2487, 2488, 2487, 2489, 2488, 2487, 2482, 2489, 2482, 2490, 2489, + 2488, 2489, 2483, 2489, 2491, 2483, 2489, 2490, 2491, 2490, 2484, 2491, + 2482, 2492, 2493, 2492, 2494, 2493, 2492, 2405, 2494, 2405, 2495, 2494, + 2493, 2494, 2484, 2494, 2496, 2484, 2494, 2495, 2496, 2495, 2485, 2496, + 2483, 2497, 2498, 2497, 2499, 2498, 2497, 2484, 2499, 2484, 2500, 2499, + 2498, 2499, 2406, 2499, 2501, 2406, 2499, 2500, 2501, 2500, 2486, 2501, + 2484, 2502, 2503, 2502, 2504, 2503, 2502, 2485, 2504, 2485, 2505, 2504, + 2503, 2504, 2486, 2504, 2506, 2486, 2504, 2505, 2506, 2505, 2401, 2506, + 2521, 2523, 2522, 2516, 2524, 2523, 2522, 2523, 2517, 2523, 2525, 2517, + 2523, 2524, 2525, 2524, 2518, 2525, 2526, 2528, 2527, 2511, 2529, 2528, + 2527, 2528, 2518, 2528, 2530, 2518, 2528, 2529, 2530, 2529, 2519, 2530, + 2517, 2531, 2532, 2531, 2533, 2532, 2531, 2518, 2533, 2518, 2534, 2533, + 2532, 2533, 2512, 2533, 2535, 2512, 2533, 2534, 2535, 2534, 2520, 2535, + 2518, 2536, 2537, 2536, 2538, 2537, 2536, 2519, 2538, 2519, 2539, 2538, + 2537, 2538, 2520, 2538, 2540, 2520, 2538, 2539, 2540, 2539, 2513, 2540, + 2546, 2548, 2547, 2541, 2549, 2548, 2547, 2548, 2542, 2548, 2550, 2542, + 2548, 2549, 2550, 2549, 2543, 2550, 2551, 2553, 2552, 2508, 2554, 2553, + 2552, 2553, 2543, 2553, 2555, 2543, 2553, 2554, 2555, 2554, 2544, 2555, + 2542, 2556, 2557, 2556, 2558, 2557, 2556, 2543, 2558, 2543, 2559, 2558, + 2557, 2558, 2513, 2558, 2560, 2513, 2558, 2559, 2560, 2559, 2545, 2560, + 2543, 2561, 2562, 2561, 2563, 2562, 2561, 2544, 2563, 2544, 2564, 2563, + 2562, 2563, 2545, 2563, 2565, 2545, 2563, 2564, 2565, 2564, 2514, 2565, + 2512, 2571, 2572, 2571, 2573, 2572, 2571, 2566, 2573, 2566, 2574, 2573, + 2572, 2573, 2567, 2573, 2575, 2567, 2573, 2574, 2575, 2574, 2568, 2575, + 2566, 2576, 2577, 2576, 2578, 2577, 2576, 2513, 2578, 2513, 2579, 2578, + 2577, 2578, 2568, 2578, 2580, 2568, 2578, 2579, 2580, 2579, 2569, 2580, + 2567, 2581, 2582, 2581, 2583, 2582, 2581, 2568, 2583, 2568, 2584, 2583, + 2582, 2583, 2509, 2583, 2585, 2509, 2583, 2584, 2585, 2584, 2570, 2585, + 2568, 2586, 2587, 2586, 2588, 2587, 2586, 2569, 2588, 2569, 2589, 2588, + 2587, 2588, 2570, 2588, 2590, 2570, 2588, 2589, 2590, 2589, 2515, 2590, + 2513, 2596, 2597, 2596, 2598, 2597, 2596, 2591, 2598, 2591, 2599, 2598, + 2597, 2598, 2592, 2598, 2600, 2592, 2598, 2599, 2600, 2599, 2593, 2600, + 2591, 2601, 2602, 2601, 2603, 2602, 2601, 2514, 2603, 2514, 2604, 2603, + 2602, 2603, 2593, 2603, 2605, 2593, 2603, 2604, 2605, 2604, 2594, 2605, + 2592, 2606, 2607, 2606, 2608, 2607, 2606, 2593, 2608, 2593, 2609, 2608, + 2607, 2608, 2515, 2608, 2610, 2515, 2608, 2609, 2610, 2609, 2595, 2610, + 2593, 2611, 2612, 2611, 2613, 2612, 2611, 2594, 2613, 2594, 2614, 2613, + 2612, 2613, 2595, 2613, 2615, 2595, 2613, 2614, 2615, 2614, 2510, 2615, + 2616, 2630, 2631, 2630, 2632, 2631, 2630, 2625, 2632, 2625, 2633, 2632, + 2631, 2632, 2626, 2632, 2634, 2626, 2632, 2633, 2634, 2633, 2627, 2634, + 2625, 2635, 2636, 2635, 2637, 2636, 2635, 2620, 2637, 2620, 2638, 2637, + 2636, 2637, 2627, 2637, 2639, 2627, 2637, 2638, 2639, 2638, 2628, 2639, + 2626, 2640, 2641, 2640, 2642, 2641, 2640, 2627, 2642, 2627, 2643, 2642, + 2641, 2642, 2621, 2642, 2644, 2621, 2642, 2643, 2644, 2643, 2629, 2644, + 2627, 2645, 2646, 2645, 2647, 2646, 2645, 2628, 2647, 2628, 2648, 2647, + 2646, 2647, 2629, 2647, 2649, 2629, 2647, 2648, 2649, 2648, 2622, 2649, + 2620, 2655, 2656, 2655, 2657, 2656, 2655, 2650, 2657, 2650, 2658, 2657, + 2656, 2657, 2651, 2657, 2659, 2651, 2657, 2658, 2659, 2658, 2652, 2659, + 2650, 2660, 2661, 2660, 2662, 2661, 2660, 2617, 2662, 2617, 2663, 2662, + 2661, 2662, 2652, 2662, 2664, 2652, 2662, 2663, 2664, 2663, 2653, 2664, + 2651, 2665, 2666, 2665, 2667, 2666, 2665, 2652, 2667, 2652, 2668, 2667, + 2666, 2667, 2622, 2667, 2669, 2622, 2667, 2668, 2669, 2668, 2654, 2669, + 2652, 2670, 2671, 2670, 2672, 2671, 2670, 2653, 2672, 2653, 2673, 2672, + 2671, 2672, 2654, 2672, 2674, 2654, 2672, 2673, 2674, 2673, 2623, 2674, + 2621, 2680, 2681, 2680, 2682, 2681, 2680, 2675, 2682, 2675, 2683, 2682, + 2681, 2682, 2676, 2682, 2684, 2676, 2682, 2683, 2684, 2683, 2677, 2684, + 2675, 2685, 2686, 2685, 2687, 2686, 2685, 2622, 2687, 2622, 2688, 2687, + 2686, 2687, 2677, 2687, 2689, 2677, 2687, 2688, 2689, 2688, 2678, 2689, + 2676, 2690, 2691, 2690, 2692, 2691, 2690, 2677, 2692, 2677, 2693, 2692, + 2691, 2692, 2618, 2692, 2694, 2618, 2692, 2693, 2694, 2693, 2679, 2694, + 2677, 2695, 2696, 2695, 2697, 2696, 2695, 2678, 2697, 2678, 2698, 2697, + 2696, 2697, 2679, 2697, 2699, 2679, 2697, 2698, 2699, 2698, 2624, 2699, + 2622, 2705, 2706, 2705, 2707, 2706, 2705, 2700, 2707, 2700, 2708, 2707, + 2706, 2707, 2701, 2707, 2709, 2701, 2707, 2708, 2709, 2708, 2702, 2709, + 2700, 2710, 2711, 2710, 2712, 2711, 2710, 2623, 2712, 2623, 2713, 2712, + 2711, 2712, 2702, 2712, 2714, 2702, 2712, 2713, 2714, 2713, 2703, 2714, + 2701, 2715, 2716, 2715, 2717, 2716, 2715, 2702, 2717, 2702, 2718, 2717, + 2716, 2717, 2624, 2717, 2719, 2624, 2717, 2718, 2719, 2718, 2704, 2719, + 2702, 2720, 2721, 2720, 2722, 2721, 2720, 2703, 2722, 2703, 2723, 2722, + 2721, 2722, 2704, 2722, 2724, 2704, 2722, 2723, 2724, 2723, 2619, 2724, + 2725, 2739, 2740, 2739, 2741, 2740, 2739, 2734, 2741, 2734, 2742, 2741, + 2740, 2741, 2735, 2741, 2743, 2735, 2741, 2742, 2743, 2742, 2736, 2743, + 2734, 2744, 2745, 2744, 2746, 2745, 2744, 2729, 2746, 2729, 2747, 2746, + 2745, 2746, 2736, 2746, 2748, 2736, 2746, 2747, 2748, 2747, 2737, 2748, + 2735, 2749, 2750, 2749, 2751, 2750, 2749, 2736, 2751, 2736, 2752, 2751, + 2750, 2751, 2730, 2751, 2753, 2730, 2751, 2752, 2753, 2752, 2738, 2753, + 2736, 2754, 2755, 2754, 2756, 2755, 2754, 2737, 2756, 2737, 2757, 2756, + 2755, 2756, 2738, 2756, 2758, 2738, 2756, 2757, 2758, 2757, 2731, 2758, + 2729, 2764, 2765, 2764, 2766, 2765, 2764, 2759, 2766, 2759, 2767, 2766, + 2765, 2766, 2760, 2766, 2768, 2760, 2766, 2767, 2768, 2767, 2761, 2768, + 2759, 2769, 2770, 2769, 2771, 2770, 2769, 2726, 2771, 2726, 2772, 2771, + 2770, 2771, 2761, 2771, 2773, 2761, 2771, 2772, 2773, 2772, 2762, 2773, + 2760, 2774, 2775, 2774, 2776, 2775, 2774, 2761, 2776, 2761, 2777, 2776, + 2775, 2776, 2731, 2776, 2778, 2731, 2776, 2777, 2778, 2777, 2763, 2778, + 2761, 2779, 2780, 2779, 2781, 2780, 2779, 2762, 2781, 2762, 2782, 2781, + 2780, 2781, 2763, 2781, 2783, 2763, 2781, 2782, 2783, 2782, 2732, 2783, + 2730, 2789, 2790, 2789, 2791, 2790, 2789, 2784, 2791, 2784, 2792, 2791, + 2790, 2791, 2785, 2791, 2793, 2785, 2791, 2792, 2793, 2792, 2786, 2793, + 2784, 2794, 2795, 2794, 2796, 2795, 2794, 2731, 2796, 2731, 2797, 2796, + 2795, 2796, 2786, 2796, 2798, 2786, 2796, 2797, 2798, 2797, 2787, 2798, + 2785, 2799, 2800, 2799, 2801, 2800, 2799, 2786, 2801, 2786, 2802, 2801, + 2800, 2801, 2727, 2801, 2803, 2727, 2801, 2802, 2803, 2802, 2788, 2803, + 2786, 2804, 2805, 2804, 2806, 2805, 2804, 2787, 2806, 2787, 2807, 2806, + 2805, 2806, 2788, 2806, 2808, 2788, 2806, 2807, 2808, 2807, 2733, 2808, + 2731, 2814, 2815, 2814, 2816, 2815, 2814, 2809, 2816, 2809, 2817, 2816, + 2815, 2816, 2810, 2816, 2818, 2810, 2816, 2817, 2818, 2817, 2811, 2818, + 2809, 2819, 2820, 2819, 2821, 2820, 2819, 2732, 2821, 2732, 2822, 2821, + 2820, 2821, 2811, 2821, 2823, 2811, 2821, 2822, 2823, 2822, 2812, 2823, + 2810, 2824, 2825, 2824, 2826, 2825, 2824, 2811, 2826, 2811, 2827, 2826, + 2825, 2826, 2733, 2826, 2828, 2733, 2826, 2827, 2828, 2827, 2813, 2828, + 2811, 2829, 2830, 2829, 2831, 2830, 2829, 2812, 2831, 2812, 2832, 2831, + 2830, 2831, 2813, 2831, 2833, 2813, 2831, 2832, 2833, 2832, 2728, 2833, + 2834, 2848, 2849, 2848, 2850, 2849, 2848, 2843, 2850, 2843, 2851, 2850, + 2849, 2850, 2844, 2850, 2852, 2844, 2850, 2851, 2852, 2851, 2845, 2852, + 2843, 2853, 2854, 2853, 2855, 2854, 2853, 2838, 2855, 2838, 2856, 2855, + 2854, 2855, 2845, 2855, 2857, 2845, 2855, 2856, 2857, 2856, 2846, 2857, + 2844, 2858, 2859, 2858, 2860, 2859, 2858, 2845, 2860, 2845, 2861, 2860, + 2859, 2860, 2839, 2860, 2862, 2839, 2860, 2861, 2862, 2861, 2847, 2862, + 2845, 2863, 2864, 2863, 2865, 2864, 2863, 2846, 2865, 2846, 2866, 2865, + 2864, 2865, 2847, 2865, 2867, 2847, 2865, 2866, 2867, 2866, 2840, 2867, + 2838, 2873, 2874, 2873, 2875, 2874, 2873, 2868, 2875, 2868, 2876, 2875, + 2874, 2875, 2869, 2875, 2877, 2869, 2875, 2876, 2877, 2876, 2870, 2877, + 2868, 2878, 2879, 2878, 2880, 2879, 2878, 2835, 2880, 2835, 2881, 2880, + 2879, 2880, 2870, 2880, 2882, 2870, 2880, 2881, 2882, 2881, 2871, 2882, + 2869, 2883, 2884, 2883, 2885, 2884, 2883, 2870, 2885, 2870, 2886, 2885, + 2884, 2885, 2840, 2885, 2887, 2840, 2885, 2886, 2887, 2886, 2872, 2887, + 2870, 2888, 2889, 2888, 2890, 2889, 2888, 2871, 2890, 2871, 2891, 2890, + 2889, 2890, 2872, 2890, 2892, 2872, 2890, 2891, 2892, 2891, 2841, 2892, + 2839, 2898, 2899, 2898, 2900, 2899, 2898, 2893, 2900, 2893, 2901, 2900, + 2899, 2900, 2894, 2900, 2902, 2894, 2900, 2901, 2902, 2901, 2895, 2902, + 2893, 2903, 2904, 2903, 2905, 2904, 2903, 2840, 2905, 2840, 2906, 2905, + 2904, 2905, 2895, 2905, 2907, 2895, 2905, 2906, 2907, 2906, 2896, 2907, + 2894, 2908, 2909, 2908, 2910, 2909, 2908, 2895, 2910, 2895, 2911, 2910, + 2909, 2910, 2836, 2910, 2912, 2836, 2910, 2911, 2912, 2911, 2897, 2912, + 2895, 2913, 2914, 2913, 2915, 2914, 2913, 2896, 2915, 2896, 2916, 2915, + 2914, 2915, 2897, 2915, 2917, 2897, 2915, 2916, 2917, 2916, 2842, 2917, + 2840, 2923, 2924, 2923, 2925, 2924, 2923, 2918, 2925, 2918, 2926, 2925, + 2924, 2925, 2919, 2925, 2927, 2919, 2925, 2926, 2927, 2926, 2920, 2927, + 2918, 2928, 2929, 2928, 2930, 2929, 2928, 2841, 2930, 2841, 2931, 2930, + 2929, 2930, 2920, 2930, 2932, 2920, 2930, 2931, 2932, 2931, 2921, 2932, + 2919, 2933, 2934, 2933, 2935, 2934, 2933, 2920, 2935, 2920, 2936, 2935, + 2934, 2935, 2842, 2935, 2937, 2842, 2935, 2936, 2937, 2936, 2922, 2937, + 2920, 2938, 2939, 2938, 2940, 2939, 2938, 2921, 2940, 2921, 2941, 2940, + 2939, 2940, 2922, 2940, 2942, 2922, 2940, 2941, 2942, 2941, 2837, 2942, + 2943, 2957, 2958, 2957, 2959, 2958, 2957, 2952, 2959, 2952, 2960, 2959, + 2958, 2959, 2953, 2959, 2961, 2953, 2959, 2960, 2961, 2960, 2954, 2961, + 2952, 2962, 2963, 2962, 2964, 2963, 2962, 2947, 2964, 2947, 2965, 2964, + 2963, 2964, 2954, 2964, 2966, 2954, 2964, 2965, 2966, 2965, 2955, 2966, + 2953, 2967, 2968, 2967, 2969, 2968, 2967, 2954, 2969, 2954, 2970, 2969, + 2968, 2969, 2948, 2969, 2971, 2948, 2969, 2970, 2971, 2970, 2956, 2971, + 2954, 2972, 2973, 2972, 2974, 2973, 2972, 2955, 2974, 2955, 2975, 2974, + 2973, 2974, 2956, 2974, 2976, 2956, 2974, 2975, 2976, 2975, 2949, 2976, + 2947, 2982, 2983, 2982, 2984, 2983, 2982, 2977, 2984, 2977, 2985, 2984, + 2983, 2984, 2978, 2984, 2986, 2978, 2984, 2985, 2986, 2985, 2979, 2986, + 2977, 2987, 2988, 2987, 2989, 2988, 2987, 2944, 2989, 2944, 2990, 2989, + 2988, 2989, 2979, 2989, 2991, 2979, 2989, 2990, 2991, 2990, 2980, 2991, + 2978, 2992, 2993, 2992, 2994, 2993, 2992, 2979, 2994, 2979, 2995, 2994, + 2993, 2994, 2949, 2994, 2996, 2949, 2994, 2995, 2996, 2995, 2981, 2996, + 2979, 2997, 2998, 2997, 2999, 2998, 2997, 2980, 2999, 2980, 3000, 2999, + 2998, 2999, 2981, 2999, 3001, 2981, 2999, 3000, 3001, 3000, 2950, 3001, + 2948, 3007, 3008, 3007, 3009, 3008, 3007, 3002, 3009, 3002, 3010, 3009, + 3008, 3009, 3003, 3009, 3011, 3003, 3009, 3010, 3011, 3010, 3004, 3011, + 3002, 3012, 3013, 3012, 3014, 3013, 3012, 2949, 3014, 2949, 3015, 3014, + 3013, 3014, 3004, 3014, 3016, 3004, 3014, 3015, 3016, 3015, 3005, 3016, + 3003, 3017, 3018, 3017, 3019, 3018, 3017, 3004, 3019, 3004, 3020, 3019, + 3018, 3019, 2945, 3019, 3021, 2945, 3019, 3020, 3021, 3020, 3006, 3021, + 3004, 3022, 3023, 3022, 3024, 3023, 3022, 3005, 3024, 3005, 3025, 3024, + 3023, 3024, 3006, 3024, 3026, 3006, 3024, 3025, 3026, 3025, 2951, 3026, + 2949, 3032, 3033, 3032, 3034, 3033, 3032, 3027, 3034, 3027, 3035, 3034, + 3033, 3034, 3028, 3034, 3036, 3028, 3034, 3035, 3036, 3035, 3029, 3036, + 3027, 3037, 3038, 3037, 3039, 3038, 3037, 2950, 3039, 2950, 3040, 3039, + 3038, 3039, 3029, 3039, 3041, 3029, 3039, 3040, 3041, 3040, 3030, 3041, + 3028, 3042, 3043, 3042, 3044, 3043, 3042, 3029, 3044, 3029, 3045, 3044, + 3043, 3044, 2951, 3044, 3046, 2951, 3044, 3045, 3046, 3045, 3031, 3046, + 3029, 3047, 3048, 3047, 3049, 3048, 3047, 3030, 3049, 3030, 3050, 3049, + 3048, 3049, 3031, 3049, 3051, 3031, 3049, 3050, 3051, 3050, 2946, 3051, + 3066, 3068, 3067, 3061, 3069, 3068, 3067, 3068, 3062, 3068, 3070, 3062, + 3068, 3069, 3070, 3069, 3063, 3070, 3071, 3073, 3072, 3056, 3074, 3073, + 3072, 3073, 3063, 3073, 3075, 3063, 3073, 3074, 3075, 3074, 3064, 3075, + 3062, 3076, 3077, 3076, 3078, 3077, 3076, 3063, 3078, 3063, 3079, 3078, + 3077, 3078, 3057, 3078, 3080, 3057, 3078, 3079, 3080, 3079, 3065, 3080, + 3063, 3081, 3082, 3081, 3083, 3082, 3081, 3064, 3083, 3064, 3084, 3083, + 3082, 3083, 3065, 3083, 3085, 3065, 3083, 3084, 3085, 3084, 3058, 3085, + 3091, 3093, 3092, 3086, 3094, 3093, 3092, 3093, 3087, 3093, 3095, 3087, + 3093, 3094, 3095, 3094, 3088, 3095, 3096, 3098, 3097, 3053, 3099, 3098, + 3097, 3098, 3088, 3098, 3100, 3088, 3098, 3099, 3100, 3099, 3089, 3100, + 3087, 3101, 3102, 3101, 3103, 3102, 3101, 3088, 3103, 3088, 3104, 3103, + 3102, 3103, 3058, 3103, 3105, 3058, 3103, 3104, 3105, 3104, 3090, 3105, + 3088, 3106, 3107, 3106, 3108, 3107, 3106, 3089, 3108, 3089, 3109, 3108, + 3107, 3108, 3090, 3108, 3110, 3090, 3108, 3109, 3110, 3109, 3059, 3110, + 3057, 3116, 3117, 3116, 3118, 3117, 3116, 3111, 3118, 3111, 3119, 3118, + 3117, 3118, 3112, 3118, 3120, 3112, 3118, 3119, 3120, 3119, 3113, 3120, + 3111, 3121, 3122, 3121, 3123, 3122, 3121, 3058, 3123, 3058, 3124, 3123, + 3122, 3123, 3113, 3123, 3125, 3113, 3123, 3124, 3125, 3124, 3114, 3125, + 3112, 3126, 3127, 3126, 3128, 3127, 3126, 3113, 3128, 3113, 3129, 3128, + 3127, 3128, 3054, 3128, 3130, 3054, 3128, 3129, 3130, 3129, 3115, 3130, + 3113, 3131, 3132, 3131, 3133, 3132, 3131, 3114, 3133, 3114, 3134, 3133, + 3132, 3133, 3115, 3133, 3135, 3115, 3133, 3134, 3135, 3134, 3060, 3135, + 3058, 3141, 3142, 3141, 3143, 3142, 3141, 3136, 3143, 3136, 3144, 3143, + 3142, 3143, 3137, 3143, 3145, 3137, 3143, 3144, 3145, 3144, 3138, 3145, + 3136, 3146, 3147, 3146, 3148, 3147, 3146, 3059, 3148, 3059, 3149, 3148, + 3147, 3148, 3138, 3148, 3150, 3138, 3148, 3149, 3150, 3149, 3139, 3150, + 3137, 3151, 3152, 3151, 3153, 3152, 3151, 3138, 3153, 3138, 3154, 3153, + 3152, 3153, 3060, 3153, 3155, 3060, 3153, 3154, 3155, 3154, 3140, 3155, + 3138, 3156, 3157, 3156, 3158, 3157, 3156, 3139, 3158, 3139, 3159, 3158, + 3157, 3158, 3140, 3158, 3160, 3140, 3158, 3159, 3160, 3159, 3055, 3160, + 3175, 3177, 3176, 3170, 3178, 3177, 3176, 3177, 3171, 3177, 3179, 3171, + 3177, 3178, 3179, 3178, 3172, 3179, 3180, 3182, 3181, 3165, 3183, 3182, + 3181, 3182, 3172, 3182, 3184, 3172, 3182, 3183, 3184, 3183, 3173, 3184, + 3171, 3185, 3186, 3185, 3187, 3186, 3185, 3172, 3187, 3172, 3188, 3187, + 3186, 3187, 3166, 3187, 3189, 3166, 3187, 3188, 3189, 3188, 3174, 3189, + 3172, 3190, 3191, 3190, 3192, 3191, 3190, 3173, 3192, 3173, 3193, 3192, + 3191, 3192, 3174, 3192, 3194, 3174, 3192, 3193, 3194, 3193, 3167, 3194, + 3200, 3202, 3201, 3195, 3203, 3202, 3201, 3202, 3196, 3202, 3204, 3196, + 3202, 3203, 3204, 3203, 3197, 3204, 3205, 3207, 3206, 3162, 3208, 3207, + 3206, 3207, 3197, 3207, 3209, 3197, 3207, 3208, 3209, 3208, 3198, 3209, + 3196, 3210, 3211, 3210, 3212, 3211, 3210, 3197, 3212, 3197, 3213, 3212, + 3211, 3212, 3167, 3212, 3214, 3167, 3212, 3213, 3214, 3213, 3199, 3214, + 3197, 3215, 3216, 3215, 3217, 3216, 3215, 3198, 3217, 3198, 3218, 3217, + 3216, 3217, 3199, 3217, 3219, 3199, 3217, 3218, 3219, 3218, 3168, 3219, + 3166, 3225, 3226, 3225, 3227, 3226, 3225, 3220, 3227, 3220, 3228, 3227, + 3226, 3227, 3221, 3227, 3229, 3221, 3227, 3228, 3229, 3228, 3222, 3229, + 3220, 3230, 3231, 3230, 3232, 3231, 3230, 3167, 3232, 3167, 3233, 3232, + 3231, 3232, 3222, 3232, 3234, 3222, 3232, 3233, 3234, 3233, 3223, 3234, + 3221, 3235, 3236, 3235, 3237, 3236, 3235, 3222, 3237, 3222, 3238, 3237, + 3236, 3237, 3163, 3237, 3239, 3163, 3237, 3238, 3239, 3238, 3224, 3239, + 3222, 3240, 3241, 3240, 3242, 3241, 3240, 3223, 3242, 3223, 3243, 3242, + 3241, 3242, 3224, 3242, 3244, 3224, 3242, 3243, 3244, 3243, 3169, 3244, + 3167, 3250, 3251, 3250, 3252, 3251, 3250, 3245, 3252, 3245, 3253, 3252, + 3251, 3252, 3246, 3252, 3254, 3246, 3252, 3253, 3254, 3253, 3247, 3254, + 3245, 3255, 3256, 3255, 3257, 3256, 3255, 3168, 3257, 3168, 3258, 3257, + 3256, 3257, 3247, 3257, 3259, 3247, 3257, 3258, 3259, 3258, 3248, 3259, + 3246, 3260, 3261, 3260, 3262, 3261, 3260, 3247, 3262, 3247, 3263, 3262, + 3261, 3262, 3169, 3262, 3264, 3169, 3262, 3263, 3264, 3263, 3249, 3264, + 3247, 3265, 3266, 3265, 3267, 3266, 3265, 3248, 3267, 3248, 3268, 3267, + 3266, 3267, 3249, 3267, 3269, 3249, 3267, 3268, 3269, 3268, 3164, 3269, + 3284, 3286, 3285, 3279, 3287, 3286, 3285, 3286, 3280, 3286, 3288, 3280, + 3286, 3287, 3288, 3287, 3281, 3288, 3289, 3291, 3290, 3274, 3292, 3291, + 3290, 3291, 3281, 3291, 3293, 3281, 3291, 3292, 3293, 3292, 3282, 3293, + 3280, 3294, 3295, 3294, 3296, 3295, 3294, 3281, 3296, 3281, 3297, 3296, + 3295, 3296, 3275, 3296, 3298, 3275, 3296, 3297, 3298, 3297, 3283, 3298, + 3281, 3299, 3300, 3299, 3301, 3300, 3299, 3282, 3301, 3282, 3302, 3301, + 3300, 3301, 3283, 3301, 3303, 3283, 3301, 3302, 3303, 3302, 3276, 3303, + 3309, 3311, 3310, 3304, 3312, 3311, 3310, 3311, 3305, 3311, 3313, 3305, + 3311, 3312, 3313, 3312, 3306, 3313, 3314, 3316, 3315, 3271, 3317, 3316, + 3315, 3316, 3306, 3316, 3318, 3306, 3316, 3317, 3318, 3317, 3307, 3318, + 3305, 3319, 3320, 3319, 3321, 3320, 3319, 3306, 3321, 3306, 3322, 3321, + 3320, 3321, 3276, 3321, 3323, 3276, 3321, 3322, 3323, 3322, 3308, 3323, + 3306, 3324, 3325, 3324, 3326, 3325, 3324, 3307, 3326, 3307, 3327, 3326, + 3325, 3326, 3308, 3326, 3328, 3308, 3326, 3327, 3328, 3327, 3277, 3328, + 3275, 3334, 3335, 3334, 3336, 3335, 3334, 3329, 3336, 3329, 3337, 3336, + 3335, 3336, 3330, 3336, 3338, 3330, 3336, 3337, 3338, 3337, 3331, 3338, + 3329, 3339, 3340, 3339, 3341, 3340, 3339, 3276, 3341, 3276, 3342, 3341, + 3340, 3341, 3331, 3341, 3343, 3331, 3341, 3342, 3343, 3342, 3332, 3343, + 3330, 3344, 3345, 3344, 3346, 3345, 3344, 3331, 3346, 3331, 3347, 3346, + 3345, 3346, 3272, 3346, 3348, 3272, 3346, 3347, 3348, 3347, 3333, 3348, + 3331, 3349, 3350, 3349, 3351, 3350, 3349, 3332, 3351, 3332, 3352, 3351, + 3350, 3351, 3333, 3351, 3353, 3333, 3351, 3352, 3353, 3352, 3278, 3353, + 3276, 3359, 3360, 3359, 3361, 3360, 3359, 3354, 3361, 3354, 3362, 3361, + 3360, 3361, 3355, 3361, 3363, 3355, 3361, 3362, 3363, 3362, 3356, 3363, + 3354, 3364, 3365, 3364, 3366, 3365, 3364, 3277, 3366, 3277, 3367, 3366, + 3365, 3366, 3356, 3366, 3368, 3356, 3366, 3367, 3368, 3367, 3357, 3368, + 3355, 3369, 3370, 3369, 3371, 3370, 3369, 3356, 3371, 3356, 3372, 3371, + 3370, 3371, 3278, 3371, 3373, 3278, 3371, 3372, 3373, 3372, 3358, 3373, + 3356, 3374, 3375, 3374, 3376, 3375, 3374, 3357, 3376, 3357, 3377, 3376, + 3375, 3376, 3358, 3376, 3378, 3358, 3376, 3377, 3378, 3377, 3273, 3378, + 3393, 3395, 3394, 3388, 3396, 3395, 3394, 3395, 3389, 3395, 3397, 3389, + 3395, 3396, 3397, 3396, 3390, 3397, 3398, 3400, 3399, 3383, 3401, 3400, + 3399, 3400, 3390, 3400, 3402, 3390, 3400, 3401, 3402, 3401, 3391, 3402, + 3389, 3403, 3404, 3403, 3405, 3404, 3403, 3390, 3405, 3390, 3406, 3405, + 3404, 3405, 3384, 3405, 3407, 3384, 3405, 3406, 3407, 3406, 3392, 3407, + 3390, 3408, 3409, 3408, 3410, 3409, 3408, 3391, 3410, 3391, 3411, 3410, + 3409, 3410, 3392, 3410, 3412, 3392, 3410, 3411, 3412, 3411, 3385, 3412, + 3418, 3420, 3419, 3413, 3421, 3420, 3419, 3420, 3414, 3420, 3422, 3414, + 3420, 3421, 3422, 3421, 3415, 3422, 3423, 3425, 3424, 3380, 3426, 3425, + 3424, 3425, 3415, 3425, 3427, 3415, 3425, 3426, 3427, 3426, 3416, 3427, + 3414, 3428, 3429, 3428, 3430, 3429, 3428, 3415, 3430, 3415, 3431, 3430, + 3429, 3430, 3385, 3430, 3432, 3385, 3430, 3431, 3432, 3431, 3417, 3432, + 3415, 3433, 3434, 3433, 3435, 3434, 3433, 3416, 3435, 3416, 3436, 3435, + 3434, 3435, 3417, 3435, 3437, 3417, 3435, 3436, 3437, 3436, 3386, 3437, + 3384, 3443, 3444, 3443, 3445, 3444, 3443, 3438, 3445, 3438, 3446, 3445, + 3444, 3445, 3439, 3445, 3447, 3439, 3445, 3446, 3447, 3446, 3440, 3447, + 3438, 3448, 3449, 3448, 3450, 3449, 3448, 3385, 3450, 3385, 3451, 3450, + 3449, 3450, 3440, 3450, 3452, 3440, 3450, 3451, 3452, 3451, 3441, 3452, + 3439, 3453, 3454, 3453, 3455, 3454, 3453, 3440, 3455, 3440, 3456, 3455, + 3454, 3455, 3381, 3455, 3457, 3381, 3455, 3456, 3457, 3456, 3442, 3457, + 3440, 3458, 3459, 3458, 3460, 3459, 3458, 3441, 3460, 3441, 3461, 3460, + 3459, 3460, 3442, 3460, 3462, 3442, 3460, 3461, 3462, 3461, 3387, 3462, + 3385, 3468, 3469, 3468, 3470, 3469, 3468, 3463, 3470, 3463, 3471, 3470, + 3469, 3470, 3464, 3470, 3472, 3464, 3470, 3471, 3472, 3471, 3465, 3472, + 3463, 3473, 3474, 3473, 3475, 3474, 3473, 3386, 3475, 3386, 3476, 3475, + 3474, 3475, 3465, 3475, 3477, 3465, 3475, 3476, 3477, 3476, 3466, 3477, + 3464, 3478, 3479, 3478, 3480, 3479, 3478, 3465, 3480, 3465, 3481, 3480, + 3479, 3480, 3387, 3480, 3482, 3387, 3480, 3481, 3482, 3481, 3467, 3482, + 3465, 3483, 3484, 3483, 3485, 3484, 3483, 3466, 3485, 3466, 3486, 3485, + 3484, 3485, 3467, 3485, 3487, 3467, 3485, 3486, 3487, 3486, 3382, 3487 +}; + +#endif diff --git a/examples/sensors/cubehouse/texture.fsh b/examples/sensors/cubehouse/texture.fsh new file mode 100644 index 0000000..bf2dd08 --- /dev/null +++ b/examples/sensors/cubehouse/texture.fsh @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +uniform sampler2D tex; +varying mediump vec4 qColor; +varying mediump vec4 qSecondaryColor; +varying highp vec4 qTexCoord; + +void main(void) +{ + mediump vec4 col = texture2D(tex, qTexCoord.st); + mediump vec4 lcolor = clamp(qColor + vec4(qSecondaryColor.xyz, 0.0), 0.0, 1.0); + gl_FragColor = vec4(clamp(lcolor.rgb * (1.0 - col.a) + col.rgb * col.a, 0.0, 1.0), lcolor.a); +} diff --git a/examples/sensors/cubehouse/view.cpp b/examples/sensors/cubehouse/view.cpp new file mode 100644 index 0000000..e9cc5dd --- /dev/null +++ b/examples/sensors/cubehouse/view.cpp @@ -0,0 +1,291 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "view.h" +#include "teapot.h" +#include "cube.h" +#include <QtCore/qdebug.h> +#include <QtCore/qtimer.h> +#include <stdio.h> +#include "qaccelerometer.h" + +#if defined(QT_OPENGL_ES) +#define USE_BUFFERS 1 +#endif + +//! [smoothed] +class smoothedaccelerometerfilter : public QObject, public QAccelerometerFilter +{ + qreal prevX; + qreal prevY; + qreal prevZ; + bool havePrev; + +public: + smoothedaccelerometerfilter(QObject *parent = 0) + : QObject(parent) + , QAccelerometerFilter() + , prevX(0) + , prevY(0) + , prevZ(0) + , havePrev(false) + { + } + + bool filter(QAccelerometerReading *reading) + { + // Smooth out the reported values. Large changes are applied as-is, + // and small jitters smooth to the rest position. + if (havePrev) { + qreal xdiff = reading->x() - prevX; + qreal ydiff = reading->y() - prevY; + qreal zdiff = reading->z() - prevZ; +#define threshold 0.196133f + if (qAbs(xdiff) < threshold && qAbs(ydiff) < threshold && qAbs(zdiff) < threshold) { + reading->setX(prevX + xdiff * 0.1f); + reading->setY(prevY + ydiff * 0.1f); + reading->setZ(prevZ + zdiff * 0.1f); + } + } + prevX = reading->x(); + prevY = reading->y(); + prevZ = reading->z(); + havePrev = true; + return true; + } +}; +//! [smoothed] + +View::View(QWidget *parent) + : QGLWidget(parent), + sensitivity(0.1f), + painter(0), + showFrameRate(false) +{ +#if (QT_VERSION >= QT_VERSION_CHECK(4, 7, 2)) + setAttribute(Qt::WA_LockPortraitOrientation); +#endif + + mainCamera = new Camera(this); + + roomCamera = new Camera(this); + roomCamera->setAdjustForAspectRatio(false); + +//! [accelerometer] + sensor = new QAccelerometer(this); + connect(sensor, SIGNAL(readingChanged()), this, SLOT(accelerometerTimeout())); + sensor->addFilter(new smoothedaccelerometerfilter(this)); + sensor->start(); +//! [accelerometer] + + time.start(); + + vertexBuffer = 0; + indexBuffer = 0; +} + +View::~View() +{ + delete painter; +} + +void View::resizeGL(int width, int height) +{ + glViewport(0, 0, width, height); +} + +void View::initializeGL() +{ +#if defined(QT_OPENGL_ES_2) + painter = new ShaderPainter(); +#else + painter = new FixedFunctionPainter(); +#endif + + glEnable(GL_DEPTH_TEST); + + roomMaterialBack = new Material(); + roomMaterialBack->setDiffuseColor(QColor(128, 100, 0)); + + roomMaterialLeftRight = new Material(); + roomMaterialLeftRight->setDiffuseColor(Qt::cyan); + + roomMaterialTopBottom = new Material(); + roomMaterialTopBottom->setDiffuseColor(Qt::yellow); + + cubeMaterial = new Material(); + cubeMaterial->setColor(QColor(170, 202, 0)); + + teapotMaterial = new Material(); + teapotMaterial->setAmbientColor(QColor(192, 150, 128)); + teapotMaterial->setSpecularColor(QColor(60, 60, 60)); + teapotMaterial->setShininess(128); + + roomModel = new LightModel(this); + roomModel->setAmbientSceneColor(Qt::white); + roomModel->setViewerPosition(LightModel::LocalViewer); + + normalModel = new LightModel(this); + + Light *light = new Light(this); + light->setPosition(QVector3D(0.0f, 0.0f, 3.0f)); + painter->setLight(light); + + texture = bindTexture(QImage(QLatin1String(":/qtlogo.png"))); + +#ifdef USE_BUFFERS + // Upload the teapot data into GL buffers for quicker rendering. + glGenBuffers(1, &vertexBuffer); + glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); + glBufferData(GL_ARRAY_BUFFER, + teapotVertexCount * teapotVertexStride * sizeof(float), + teapotVertexData, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glGenBuffers(1, &indexBuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, + teapotTriangleCount * 3 * sizeof(ushort), + teapotTriangleData, GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); +#endif +} + +void View::paintGL() +{ + if (showFrameRate) + qWarning("time since last frame: %d ms", time.restart()); + + qreal aspectRatio = qreal(width()) / qreal(height()); + QMatrix4x4 mv, mv2; + QMatrix4x4 proj; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + mv = roomCamera->modelViewMatrix(); + proj = roomCamera->projectionMatrix(aspectRatio); + painter->setLightModel(roomModel); + painter->setMatrices(mv, proj); + + painter->selectMaterial(roomMaterialBack); + painter->drawQuad(QVector3D(-3.0f, -3.0f, -15.0f), + QVector3D( 3.0f, -3.0f, -15.0f), + QVector3D( 3.0f, 3.0f, -15.0f), + QVector3D(-3.0f, 3.0f, -15.0f), + QVector3D(0.0f, 0.0f, 1.0f)); + + painter->selectMaterial(roomMaterialLeftRight); + painter->drawQuad(QVector3D(-3.0f, -3.0f, -15.0f), + QVector3D(-3.0f, 3.0f, -15.0f), + QVector3D(-3.0f, 3.0f, 0.0f), + QVector3D(-3.0f, -3.0f, 0.0f), + QVector3D(1.0f, 0.0f, 0.0f)); + painter->drawQuad(QVector3D(3.0f, 3.0f, -15.0f), + QVector3D(3.0f, -3.0f, -15.0f), + QVector3D(3.0f, -3.0f, 0.0f), + QVector3D(3.0f, 3.0f, 0.0f), + QVector3D(-1.0f, 0.0f, 0.0f)); + + painter->selectMaterial(roomMaterialTopBottom); + painter->drawQuad(QVector3D(-3.0f, 3.0f, -15.0f), + QVector3D( 3.0f, 3.0f, -15.0f), + QVector3D( 3.0f, 3.0f, 0.0f), + QVector3D(-3.0f, 3.0f, 0.0f), + QVector3D(0.0f, -1.0f, 0.0f)); + painter->drawQuad(QVector3D(-3.0f, -3.0f, -15.0f), + QVector3D(-3.0f, -3.0f, 0.0f), + QVector3D( 3.0f, -3.0f, 0.0f), + QVector3D( 3.0f, -3.0f, -15.0f), + QVector3D(0.0f, 1.0f, 0.0f)); + + mv = mv2 = mainCamera->modelViewMatrix(); + proj = mainCamera->projectionMatrix(aspectRatio); + mv.translate(1.0f, -0.5f, 0.0f); + mv.rotate(45.0f, 1.0f, 1.0f, 1.0f); + painter->setMatrices(mv, proj); + painter->setLightModel(normalModel); + painter->selectTexturedMaterial(cubeMaterial); + painter->setVertices(cubeVertices, 8); + painter->setNormals(cubeVertices + 3, 8); + painter->setTexCoords(cubeVertices + 6, 8); + glDrawArrays(GL_TRIANGLES, 0, 36); + + mv2.translate(-0.8f, -1.5f, -3.0f); + painter->setMatrices(mv2, proj); + painter->selectMaterial(teapotMaterial); +#ifdef USE_BUFFERS + glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); + painter->setVertices(0, 8); + painter->setNormals(reinterpret_cast<float *>(3 * sizeof(float)), 8); + painter->setTexCoords(reinterpret_cast<float *>(6 * sizeof(float)), 8); + glDrawElements(GL_TRIANGLES, teapotTriangleCount * 3, + GL_UNSIGNED_SHORT, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); +#else + painter->setVertices(teapotVertexData, 8); + painter->setNormals(teapotVertexData + 3, 8); + painter->setTexCoords(teapotVertexData + 6, 8); + glDrawElements(GL_TRIANGLES, teapotTriangleCount * 3, + GL_UNSIGNED_SHORT, teapotTriangleData); +#endif +} + +//! [accelerometer2] +void View::accelerometerTimeout() +{ + QVector3D g = gravity(); + mainCamera->setMotionAdjustment(g); + roomCamera->setMotionAdjustment(g); + update(); +} + +#define ACCEL_TO_G(v) (v / 9.80665) + +QVector3D View::gravity() const +{ + qreal x = ACCEL_TO_G(sensor->reading()->x()) * sensitivity; + qreal y = ACCEL_TO_G(sensor->reading()->y()) * sensitivity; + qreal z = ACCEL_TO_G(sensor->reading()->z()); + + return QVector3D(x, y, z); +} +//! [accelerometer2] diff --git a/examples/sensors/cubehouse/view.h b/examples/sensors/cubehouse/view.h new file mode 100644 index 0000000..d073a67 --- /dev/null +++ b/examples/sensors/cubehouse/view.h @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef VIEW_H +#define VIEW_H + +#include <QtOpenGL/qgl.h> +#include <QtGui/qvector3d.h> +#include <QtCore/qdatetime.h> +#include "camera.h" +#include "light.h" +#include "lightmodel.h" +#include "material.h" +#include "painter.h" + +class QAccelerometer; + +class View : public QGLWidget +{ + Q_OBJECT +public: + View(QWidget *parent = 0); + ~View(); + + void setShowFrameRate(bool value) { showFrameRate = value; } + +protected: + void resizeGL(int width, int height); + void initializeGL(); + void paintGL(); + +private slots: + void accelerometerTimeout(); + +private: + GLuint texture; + GLuint vertexBuffer; + GLuint indexBuffer; + Camera *mainCamera; + Camera *roomCamera; + qreal sensitivity; + LightModel *roomModel; + LightModel *normalModel; + Material *cubeMaterial; + Material *teapotMaterial; + Material *roomMaterialBack; + Material *roomMaterialLeftRight; + Material *roomMaterialTopBottom; + Painter *painter; + QTime time; + bool showFrameRate; + QAccelerometer *sensor; + + QVector3D gravity() const; +}; + +#endif diff --git a/examples/sensors/grueapp/grueapp.pro b/examples/sensors/grueapp/grueapp.pro new file mode 100644 index 0000000..65d59be --- /dev/null +++ b/examples/sensors/grueapp/grueapp.pro @@ -0,0 +1,5 @@ +TEMPLATE=app +TARGET=grueapp +QT=core sensors +SOURCES=main.cpp + diff --git a/examples/sensors/grueapp/main.cpp b/examples/sensors/grueapp/main.cpp new file mode 100644 index 0000000..789e645 --- /dev/null +++ b/examples/sensors/grueapp/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include <QtCore> +#include <qsensor.h> + +class Filter : public QSensorFilter +{ + int lastPercent; +public: + Filter() + : QSensorFilter() + , lastPercent(0) + { + } + + bool filter(QSensorReading *reading) + { + int percent = reading->property("chanceOfBeingEaten").value<qreal>() * 100; + if (percent == 0) { + qDebug() << "It is light. You are safe from Grues."; + } else if (lastPercent == 0) { + qDebug() << "It is dark. You are likely to be eaten by a Grue."; + } + if (percent == 100) { + qDebug() << "You have been eaten by a Grue!"; + QCoreApplication::instance()->quit(); + } else if (percent) + qDebug() << "Your chance of being eaten by a Grue:" << percent << "percent."; + lastPercent = percent; + return false; + } +}; + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + QSensor sensor("GrueSensor"); + + Filter filter; + sensor.addFilter(&filter); + sensor.start(); + + if (!sensor.isActive()) { + qWarning("The Grue sensor didn't start. You're on your own!"); + return 1; + } + + return app.exec(); +} + diff --git a/examples/sensors/grueplugin/grueplugin.pri b/examples/sensors/grueplugin/grueplugin.pri new file mode 100644 index 0000000..2cade0f --- /dev/null +++ b/examples/sensors/grueplugin/grueplugin.pri @@ -0,0 +1,8 @@ +HEADERS += gruesensor.h\ + gruesensor_p.h\ + gruesensorimpl.h\ + +SOURCES += gruesensor.cpp\ + gruesensorimpl.cpp\ + main.cpp\ + diff --git a/examples/sensors/grueplugin/grueplugin.pro b/examples/sensors/grueplugin/grueplugin.pro new file mode 100644 index 0000000..0b39f91 --- /dev/null +++ b/examples/sensors/grueplugin/grueplugin.pro @@ -0,0 +1,15 @@ +TEMPLATE = lib +CONFIG += plugin +TARGET = $$qtLibraryTarget(qtsensors_grueplugin) +PLUGIN_TYPE = sensors + +QT = core sensors + +include(version.pri) +include(grueplugin.pri) + +symbian { + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB +} + diff --git a/examples/sensors/grueplugin/gruesensor.cpp b/examples/sensors/grueplugin/gruesensor.cpp new file mode 100644 index 0000000..c5ee030 --- /dev/null +++ b/examples/sensors/grueplugin/gruesensor.cpp @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "gruesensor.h" +#include "gruesensor_p.h" + +IMPLEMENT_READING(GrueSensorReading) + +/*! + \class GrueSensorReading + \ingroup sensors_reading + + \preliminary + \brief The GrueSensorReading class holds readings from the Grue sensor. + + The Grue Sensor informs you of your chance of being eaten by a Grue. + + Grues love the dark so as long as your surroundings are relatively light + you are safe. However the more time you spend in the dark, the higher + your chances are of being eaten by a Grue. +*/ + +/*! + \property GrueSensorReading::chanceOfBeingEaten + \brief holds your chance of being eaten. + + The value is the probability (from 0 to 1) that a Grue will eat you. + A probability of 1 means you are currently being eaten. The darker + it is, the more likely you are to be eaten by a Grue. The longer you + stay in a dark area, the more likely you are to be eaten by a Grue. + If you are in a lit room, the probability will be 0 as Grues fear light. +*/ + +qreal GrueSensorReading::chanceOfBeingEaten() const +{ + return d->chanceOfBeingEaten; +} + +void GrueSensorReading::setChanceOfBeingEaten(qreal chanceOfBeingEaten) +{ + d->chanceOfBeingEaten = chanceOfBeingEaten; +} + +// ===================================================================== + +// begin generated code + +/*! + \class GrueFilter + \ingroup sensors_filter + + \preliminary + \brief The GrueFilter class is a convenience wrapper around QSensorFilter. + + The only difference is that the filter() method features a pointer to GrueSensorReading + instead of QSensorReading. +*/ + +/*! + \fn GrueFilter::filter(GrueSensorReading *reading) + + Called when \a reading changes. Returns false to prevent the reading from propagating. + + \sa QSensorFilter::filter() +*/ + +char const * const GrueSensor::type("GrueSensor"); + +/*! + \class GrueSensor + \ingroup sensors_type + + \preliminary + \brief The GrueSensor class is a convenience wrapper around QSensor. + + The only behavioural difference is that this class sets the type properly. + + This class also features a reading() function that returns a GrueSensorReading instead of a QSensorReading. + + For details about how the sensor works, see \l GrueSensorReading. + + \sa GrueSensorReading +*/ + +/*! + \fn GrueSensor::GrueSensor(QObject *parent) + + Construct the sensor as a child of \a parent. +*/ + +/*! + \fn GrueSensor::~GrueSensor() + + Destroy the sensor. Stops the sensor if it has not already been stopped. +*/ + +/*! + \fn GrueSensor::reading() const + + Returns the reading class for this sensor. + + \sa QSensor::reading() +*/ +// end generated code + +#include "moc_gruesensor.cpp" diff --git a/examples/sensors/grueplugin/gruesensor.h b/examples/sensors/grueplugin/gruesensor.h new file mode 100644 index 0000000..52b08e9 --- /dev/null +++ b/examples/sensors/grueplugin/gruesensor.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef GRUESENSOR_H +#define GRUESENSOR_H + +#include <qsensor.h> + +class GrueSensorReadingPrivate; + +class GrueSensorReading : public QSensorReading +{ + Q_OBJECT + Q_PROPERTY(qreal chanceOfBeingEaten READ chanceOfBeingEaten WRITE setChanceOfBeingEaten) + DECLARE_READING(GrueSensorReading) +public: + qreal chanceOfBeingEaten() const; + void setChanceOfBeingEaten(qreal chanceOfBeingEaten); +}; + +// begin generated code + +class GrueFilter : public QSensorFilter +{ +public: + virtual bool filter(GrueSensorReading *reading) = 0; +private: + bool filter(QSensorReading *reading) { return filter(static_cast<GrueSensorReading*>(reading)); } +}; + +class GrueSensor : public QSensor +{ + Q_OBJECT +public: + explicit GrueSensor(QObject *parent = 0) : QSensor(GrueSensor::type, parent) {} + virtual ~GrueSensor() {} + GrueSensorReading *reading() const { return static_cast<GrueSensorReading*>(QSensor::reading()); } + static char const * const type; +}; +// end generated code + +#endif diff --git a/examples/sensors/grueplugin/gruesensor_p.h b/examples/sensors/grueplugin/gruesensor_p.h new file mode 100644 index 0000000..5eff57e --- /dev/null +++ b/examples/sensors/grueplugin/gruesensor_p.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef GRUESENSOR_P_H +#define GRUESENSOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +class GrueSensorReadingPrivate +{ +public: + GrueSensorReadingPrivate() + : chanceOfBeingEaten(-1.0) + { + } + + qreal chanceOfBeingEaten; +}; + +#endif diff --git a/examples/sensors/grueplugin/gruesensorimpl.cpp b/examples/sensors/grueplugin/gruesensorimpl.cpp new file mode 100644 index 0000000..4a277c9 --- /dev/null +++ b/examples/sensors/grueplugin/gruesensorimpl.cpp @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "gruesensorimpl.h" +#include <QDebug> +#include <QTimer> + +char const * const gruesensorimpl::id("grue.gruesensor"); + +gruesensorimpl::gruesensorimpl(QSensor *sensor) + : QSensorBackend(sensor) +{ + // We need a light sensor + lightSensor = new QAmbientLightSensor(this); + connect(lightSensor, SIGNAL(readingChanged()), this, SLOT(lightChanged())); + lightSensor->connectToBackend(); + + // We need a timer + darkTimer = new QTimer(this); + darkTimer->setInterval(1000); + connect(darkTimer, SIGNAL(timeout()), this, SLOT(increaseChance())); + + // We use this as our timestamp source + timer.start(); + +//! [setReading] + // Register our reading instance + setReading<GrueSensorReading>(&m_reading); +//! [setReading] + +//! [metadata] + // Supply metadata + // We can run as fast as the light sensor does + setDataRates(lightSensor); + // Only one output range, 0 to 1 in .1 increments + addOutputRange(0, 1, 0.1); + setDescription(QLatin1String("Grue Sensor")); +//! [metadata] +} + +void gruesensorimpl::start() +{ +//! [start] + lightSensor->setDataRate(sensor()->dataRate()); + lightSensor->start(); + // If the light sensor doesn't work we don't work either + if (!lightSensor->isActive()) + sensorStopped(); + if (lightSensor->isBusy()) + sensorBusy(); +//! [start] +} + +void gruesensorimpl::stop() +{ + lightSensor->stop(); +} + +void gruesensorimpl::lightChanged() +{ + qreal chance = 0.0; + darkTimer->stop(); + + switch (lightSensor->reading()->lightLevel()) { + case QAmbientLightReading::Dark: + // It is dark. You are likely to be eaten by a grue. + chance = 0.1; + darkTimer->start(); + break; + default: + break; + } + + // Only send an update if the value has changed. + if (chance != m_reading.chanceOfBeingEaten() || m_reading.timestamp() == 0) { + m_reading.setTimestamp(timer.elapsed()); + m_reading.setChanceOfBeingEaten(chance); + + newReadingAvailable(); + } +} + +void gruesensorimpl::increaseChance() +{ + // The longer you stay in the dark, the higher your chance of being eaten + qreal chance = m_reading.chanceOfBeingEaten() + 0.1; + + m_reading.setTimestamp(timer.elapsed()); + m_reading.setChanceOfBeingEaten(chance); + + newReadingAvailable(); + + // No point in using the timer anymore if we've hit 1... you can't get more + // likely to be eaten than 100% + if (chance == 1.0) + darkTimer->stop(); +} + diff --git a/examples/sensors/grueplugin/gruesensorimpl.h b/examples/sensors/grueplugin/gruesensorimpl.h new file mode 100644 index 0000000..bddca84 --- /dev/null +++ b/examples/sensors/grueplugin/gruesensorimpl.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef GRUESENSORIMPL_H +#define GRUESENSORIMPL_H + +#include <qsensorbackend.h> +#include "gruesensor.h" +#include <qambientlightsensor.h> +#include <QTime> + +class QTimer; + +class gruesensorimpl : public QSensorBackend +{ + Q_OBJECT +public: + static char const * const id; + + gruesensorimpl(QSensor *sensor); + + void start(); + void stop(); + +private Q_SLOTS: + void lightChanged(); + void increaseChance(); + +private: + GrueSensorReading m_reading; + QAmbientLightSensor *lightSensor; + QTimer *darkTimer; + QTime timer; +}; + +#endif + diff --git a/examples/sensors/grueplugin/main.cpp b/examples/sensors/grueplugin/main.cpp new file mode 100644 index 0000000..d471ece --- /dev/null +++ b/examples/sensors/grueplugin/main.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "gruesensorimpl.h" +#include <qsensorplugin.h> +#include <qsensorbackend.h> +#include <qsensormanager.h> +#include <QFile> +#include <QDebug> + +class GrueSensorPlugin : public QObject, public QSensorPluginInterface, public QSensorChangesInterface, public QSensorBackendFactory +{ + Q_OBJECT + Q_INTERFACES(QSensorPluginInterface QSensorChangesInterface) +public: + void registerSensors() + { + qDebug() << "loaded the grue plugin"; + } + + void sensorsChanged() + { + if (!QSensor::defaultSensorForType(QAmbientLightSensor::type).isEmpty()) { + // There is a light sensor available. Register the backend + if (!QSensorManager::isBackendRegistered(GrueSensor::type, gruesensorimpl::id)) + QSensorManager::registerBackend(GrueSensor::type, gruesensorimpl::id, this); + } else { + if (QSensorManager::isBackendRegistered(GrueSensor::type, gruesensorimpl::id)) + QSensorManager::unregisterBackend(GrueSensor::type, gruesensorimpl::id); + } + } + + QSensorBackend *createBackend(QSensor *sensor) + { + if (sensor->identifier() == gruesensorimpl::id) + return new gruesensorimpl(sensor); + + return 0; + } +}; + +Q_EXPORT_PLUGIN2(libsensors_grueplugin, GrueSensorPlugin); + +#include "main.moc" + diff --git a/examples/sensors/grueplugin/version.pri b/examples/sensors/grueplugin/version.pri new file mode 100644 index 0000000..6fbe025 --- /dev/null +++ b/examples/sensors/grueplugin/version.pri @@ -0,0 +1 @@ +VERSION = 0.1.1 diff --git a/examples/sensors/sensor_explorer/explorer.cpp b/examples/sensors/sensor_explorer/explorer.cpp new file mode 100644 index 0000000..417dcd9 --- /dev/null +++ b/examples/sensors/sensor_explorer/explorer.cpp @@ -0,0 +1,450 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "explorer.h" +#include <QTimer> +#include <QDebug> +#include <qsensor.h> +#include <QMetaObject> +#include <QMetaProperty> + +Explorer::Explorer(QWidget *parent) + : QMainWindow(parent) + , m_sensor(0) + , ignoreItemChanged(false) +{ + ui.setupUi(this); +#ifdef MAEMO5 + ui.label->hide(); +#endif + // Clear out example data from the .ui file + ui.sensors->clear(); + clearSensorProperties(); + clearReading(); + + // Force types to be registered + (void)QSensor::sensorTypes(); + // Listen for changes to the registered types + QSensor *sensor = new QSensor(QByteArray(), this); + connect(sensor, SIGNAL(availableSensorsChanged()), this, SLOT(loadSensors())); +} + +Explorer::~Explorer() +{ +} + +void Explorer::loadSensors() +{ + qDebug() << "Explorer::loadSensors"; + + // Clear out anything that's in there now + ui.sensors->clear(); + + foreach (const QByteArray &type, QSensor::sensorTypes()) { + qDebug() << "Found type" << type; + foreach (const QByteArray &identifier, QSensor::sensorsForType(type)) { + qDebug() << "Found identifier" << identifier; + // Don't put in sensors we can't connect to + QSensor sensor(type); + sensor.setIdentifier(identifier); + if (!sensor.connectToBackend()) { + qDebug() << "Couldn't connect to" << identifier; + continue; + } + + qDebug() << "Adding identifier" << identifier; + QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() << QString::fromLatin1(identifier)); + item->setData(0, Qt::UserRole, QString::fromLatin1(type)); + ui.sensors->addTopLevelItem(item); + } + } + + if (ui.sensors->topLevelItemCount() == 0) { + QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() << tr("No Sensors Found")); + item->setData(0, Qt::UserRole, QString()); + ui.sensors->addTopLevelItem(item); + } + + ui.sensors->setCurrentItem(0); + ui.scrollArea->hide(); + + resizeSensors(); +} + +void Explorer::resizeSensors() +{ + ui.sensors->resizeColumnToContents(0); + int length = ui.sensors->header()->length() + 4; + ui.sensors->setFixedWidth(length); +} + +void Explorer::on_sensors_currentItemChanged() +{ + qDebug() << "Explorer::sensorSelected"; + + // Clear out anything that's in there now + if (m_sensor) { + delete m_sensor; + m_sensor = 0; + } + clearSensorProperties(); + clearReading(); + ui.scrollArea->hide(); + + // Check that we've selected an item + QTreeWidgetItem *item = ui.sensors->currentItem(); + if (!item) { + qWarning() << "Didn't select an item!"; + return; + } + + QByteArray type = item->data(0, Qt::UserRole).toString().toLatin1(); + QByteArray identifier = item->data(0, Qt::DisplayRole).toString().toLatin1(); + + if (type.isEmpty()) { + // Uh oh, there aren't any sensors. + // The user has clicked the dummy list entry so just ignore it. + return; + } + + // Connect to the sensor so we can probe it + m_sensor = new QSensor(type, this); + connect(m_sensor, SIGNAL(readingChanged()), this, SLOT(sensor_changed())); + m_sensor->setIdentifier(identifier); + if (!m_sensor->connectToBackend()) { + delete m_sensor; + m_sensor = 0; + qWarning() << "Can't connect to the sensor!"; + return; + } + + ui.scrollArea->show(); + loadSensorProperties(); + loadReading(); + + adjustTableColumns(ui.sensorprops); + adjustTableColumns(ui.reading); + QTimer::singleShot(100, this, SLOT(adjustSizes())); +} + +void Explorer::clearReading() +{ + ui.reading->setRowCount(0); +} + +void Explorer::loadReading() +{ + // Probe the reading using Qt's meta-object facilities + QSensorReading *reading = m_sensor->reading(); + const QMetaObject *mo = reading->metaObject(); + int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); + + ui.reading->setRowCount(mo->propertyCount() - firstProperty); + + for (int i = firstProperty; i < mo->propertyCount(); ++i) { + int row = i - firstProperty; + QTableWidgetItem *index; + if (row == 0) + // timestamp is not available via index + index = new QTableWidgetItem(QLatin1String("N/A")); + else + index = new QTableWidgetItem(QVariant(row - 1).toString()); + QTableWidgetItem *prop = new QTableWidgetItem(mo->property(i).name()); + QString typeName = QLatin1String(mo->property(i).typeName()); + int crap = typeName.lastIndexOf("::"); + if (crap != -1) + typeName = typeName.mid(crap + 2); + QTableWidgetItem *type = new QTableWidgetItem(typeName); + QTableWidgetItem *value = new QTableWidgetItem(); + + index->setFlags(value->flags() ^ Qt::ItemIsEditable); + prop->setFlags(value->flags() ^ Qt::ItemIsEditable); + type->setFlags(value->flags() ^ Qt::ItemIsEditable); + value->setFlags(value->flags() ^ Qt::ItemIsEditable); + + ui.reading->setItem(row, 0, index); + ui.reading->setItem(row, 1, prop); + ui.reading->setItem(row, 2, type); + ui.reading->setItem(row, 3, value); + } +} + +void Explorer::clearSensorProperties() +{ + ui.sensorprops->setRowCount(0); +} + +void Explorer::loadSensorProperties() +{ + ignoreItemChanged = true; + + // Probe the sensor using Qt's meta-object facilities + const QMetaObject *mo = m_sensor->metaObject(); + int firstProperty = QSensor::staticMetaObject.propertyOffset(); + + int rows = mo->propertyCount() - firstProperty; + ui.sensorprops->setRowCount(rows); + + int offset = 0; + for (int i = firstProperty; i < mo->propertyCount(); ++i) { + int row = i - firstProperty - offset; + QLatin1String name(mo->property(i).name()); + if (name == "sensorid" || + //name == "type" || + name == "reading" || + name == "connected" || + name == "running" || + name == "supportsPolling") { + ++offset; + continue; + } + QTableWidgetItem *prop = new QTableWidgetItem(name); + QString typeName = QLatin1String(mo->property(i).typeName()); + int crap = typeName.lastIndexOf("::"); + if (crap != -1) + typeName = typeName.mid(crap + 2); + QTableWidgetItem *type = new QTableWidgetItem(typeName); + QVariant v = mo->property(i).read(m_sensor); + QString val; + if (typeName == "qrangelist") { + qrangelist rl = v.value<qrangelist>(); + QStringList out; + foreach (const qrange &r, rl) { + if (r.first == r.second) + out << QString("%1 Hz").arg(r.first); + else + out << QString("%1-%2 Hz").arg(r.first).arg(r.second); + } + val = out.join(", "); + } else if (typeName == "qoutputrangelist") { + qoutputrangelist rl = v.value<qoutputrangelist>(); + QStringList out; + foreach (const qoutputrange &r, rl) { + out << QString("(%1, %2) += %3").arg(r.minimum).arg(r.maximum).arg(r.accuracy); + } + val = out.join(", "); + } else { + val = v.toString(); + } + QTableWidgetItem *value = new QTableWidgetItem(val); + + prop->setFlags(value->flags() ^ Qt::ItemIsEditable); + type->setFlags(value->flags() ^ Qt::ItemIsEditable); + if (!mo->property(i).isWritable()) { + // clear the editable flag + value->setFlags(value->flags() ^ Qt::ItemIsEditable); + } + + ui.sensorprops->setItem(row, 0, prop); + ui.sensorprops->setItem(row, 1, type); + ui.sensorprops->setItem(row, 2, value); + } + + // We don't add all properties + ui.sensorprops->setRowCount(rows - offset); + + ignoreItemChanged = false; +} + +void Explorer::showEvent(QShowEvent *event) +{ + // Once we're visible, load the sensors + // (don't delay showing the UI while we load plugins, connect to backends, etc.) + QTimer::singleShot(0, this, SLOT(loadSensors())); + + QMainWindow::showEvent(event); +} + +// Resize columns to fit the space. +// This shouldn't be so hard! +void Explorer::adjustTableColumns(QTableWidget *table) +{ + if (table->rowCount() == 0) { + table->setFixedHeight(0); + return; + } + + // At least this is easy to do + table->resizeColumnsToContents(); + int length = table->verticalHeader()->length(); + length += (length / static_cast<qreal>(table->verticalHeader()->count())); // Add 1 more (the header itself) +#ifdef MAEMO5 + length += 10; // required for N900 UI +#endif + table->setFixedHeight(length); + + int columns = table->columnCount(); + QList<int> width; + int suggestedWidth = 0; + for (int i = 0; i < columns; ++i) { + int cwidth = table->columnWidth(i); + width << cwidth; + suggestedWidth += cwidth; + } + + int actualWidth = table->size().width(); + //qDebug() << "suggestedWidth" << suggestedWidth << "actualWidth" << actualWidth; + + // We only scale the columns up, we don't scale down + if (actualWidth <= suggestedWidth) + return; + + qreal multiplier = actualWidth / static_cast<qreal>(suggestedWidth); + int currentSpace = 4; + for (int i = 0; i < columns; ++i) { + width[i] = multiplier * width[i]; + currentSpace += width[i]; + } + + // It ends up too big due to cell decorations or something. + // Make things smaller one pixel at a time in round robin fashion until we're good. + int i = 0; + while (currentSpace > actualWidth) { + --width[i]; + --currentSpace; + i = (i + 1) % columns; + } + + for (int i = 0; i < columns; ++i) { + table->setColumnWidth(i, width[i]); + } + + table->setMinimumWidth(suggestedWidth); +} + +void Explorer::adjustSizes() +{ + adjustTableColumns(ui.reading); + adjustTableColumns(ui.sensorprops); +} + +void Explorer::resizeEvent(QResizeEvent *event) +{ + resizeSensors(); + adjustSizes(); + + QMainWindow::resizeEvent(event); +} + +void Explorer::on_start_clicked() +{ + m_sensor->start(); + QTimer::singleShot(0, this, SLOT(loadSensorProperties())); +} + +void Explorer::on_stop_clicked() +{ + m_sensor->stop(); + QTimer::singleShot(0, this, SLOT(loadSensorProperties())); +} + +void Explorer::sensor_changed() +{ + QSensorReading *reading = m_sensor->reading(); + filter(reading); +} + +bool Explorer::filter(QSensorReading *reading) +{ + const QMetaObject *mo = reading->metaObject(); + int firstProperty = QSensorReading::staticMetaObject.propertyOffset(); + + for (int i = firstProperty; i < mo->propertyCount(); ++i) { + int row = i - firstProperty; + QString typeName = QLatin1String(mo->property(i).typeName()); + int crap = typeName.lastIndexOf("::"); + if (crap != -1) + typeName = typeName.mid(crap + 2); + QLatin1String name(mo->property(i).name()); + QTableWidgetItem *value = ui.reading->item(row, 3); + QVariant val = mo->property(i).read(reading); + if (typeName == "qtimestamp") { + value->setText(QString("%1").arg(val.value<qtimestamp>())); + } else if (typeName == "LightLevel") { + QString text; + switch (val.toInt()) { + case 1: + text = "Dark"; + break; + case 2: + text = "Twilight"; + break; + case 3: + text = "Light"; + break; + case 4: + text = "Bright"; + break; + case 5: + text = "Sunny"; + break; + default: + text = "Undefined"; + break; + } + value->setText(text); + } else { + value->setText(val.toString()); + } + } + + adjustTableColumns(ui.reading); + //QTimer::singleShot(0, this, SLOT(adjustSizes())); + + return false; +} + +void Explorer::on_sensorprops_itemChanged(QTableWidgetItem *item) +{ + if (ignoreItemChanged) + return; + if (!(item->flags() & Qt::ItemIsEditable)) + return; + + int row = item->row(); + QString name = ui.sensorprops->item(row, 0)->text(); + QVariant value = item->text(); + + qDebug() << "setProperty" << name << value; + m_sensor->setProperty(name.toLatin1().constData(), QVariant(value)); + + QTimer::singleShot(0, this, SLOT(loadSensorProperties())); +} + diff --git a/examples/sensors/sensor_explorer/explorer.h b/examples/sensors/sensor_explorer/explorer.h new file mode 100644 index 0000000..4ffe140 --- /dev/null +++ b/examples/sensors/sensor_explorer/explorer.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#ifndef EXPLORER_H +#define EXPLORER_H + +#include <QMainWindow> +#include <ui_explorer.h> +#include <qsensor.h> + +class Explorer : public QMainWindow, public QSensorFilter +{ + Q_OBJECT +public: + Explorer(QWidget *parent = 0); + ~Explorer(); + + bool filter(QSensorReading *reading); + +private slots: + void loadSensors(); + void on_sensors_currentItemChanged(); + void on_sensorprops_itemChanged(QTableWidgetItem *item); + void on_start_clicked(); + void on_stop_clicked(); + void sensor_changed(); + void adjustSizes(); + void loadSensorProperties(); + +private: + void showEvent(QShowEvent *event); + void resizeEvent(QResizeEvent *event); + + void clearReading(); + void loadReading(); + void clearSensorProperties(); + void adjustTableColumns(QTableWidget *table); + void resizeSensors(); + + Ui::Explorer ui; + QSensor *m_sensor; + bool ignoreItemChanged; +}; + +#endif + diff --git a/examples/sensors/sensor_explorer/explorer.ui b/examples/sensors/sensor_explorer/explorer.ui new file mode 100644 index 0000000..166e9c3 --- /dev/null +++ b/examples/sensors/sensor_explorer/explorer.ui @@ -0,0 +1,406 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Explorer</class> + <widget class="QMainWindow" name="Explorer"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>760</width> + <height>636</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <property name="spacing"> + <number>9</number> + </property> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Sensors that were detected on the device are listed in the list on the left, grouped by type. The reading properties for the sensor will be presented on the right.</string> + </property> + <property name="textFormat"> + <enum>Qt::AutoText</enum> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="widget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>9</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QWidget" name="widget_2" native="true"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>9</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Sensor</string> + </property> + <property name="buddy"> + <cstring>sensors</cstring> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="sensors"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="itemsExpandable"> + <bool>false</bool> + </property> + <property name="expandsOnDoubleClick"> + <bool>false</bool> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string notr="true">Sensor</string> + </property> + </column> + <item> + <property name="text"> + <string notr="true">dummy.accelerometer</string> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <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>477</width> + <height>556</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <property name="spacing"> + <number>9</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QWidget" name="widget_4" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>9</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Sensor Properties</string> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="sensorprops"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>3</number> + </property> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <row> + <property name="text"> + <string notr="true">1</string> + </property> + </row> + <column> + <property name="text"> + <string>Name</string> + </property> + </column> + <column> + <property name="text"> + <string>Type</string> + </property> + </column> + <column> + <property name="text"> + <string>Value</string> + </property> + </column> + <item row="0" column="0"> + <property name="text"> + <string notr="true">supportedIntervals</string> + </property> + </item> + <item row="0" column="1"> + <property name="text"> + <string notr="true">qrangelist</string> + </property> + </item> + <item row="0" column="2"> + <property name="text"> + <string/> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_3" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>9</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="start"> + <property name="text"> + <string>start</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="stop"> + <property name="text"> + <string>stop</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_5" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>9</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Reading Properties</string> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="reading"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>4</number> + </property> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <row> + <property name="text"> + <string notr="true">1</string> + </property> + </row> + <row> + <property name="text"> + <string notr="true">2</string> + </property> + </row> + <column> + <property name="text"> + <string>Index</string> + </property> + </column> + <column> + <property name="text"> + <string>Value</string> + </property> + </column> + <column> + <property name="text"> + <string>Type</string> + </property> + </column> + <column> + <property name="text"> + <string>Value</string> + </property> + </column> + <item row="0" column="0"> + <property name="text"> + <string notr="true">0</string> + </property> + </item> + <item row="0" column="1"> + <property name="text"> + <string notr="true">x</string> + </property> + </item> + <item row="0" column="2"> + <property name="text"> + <string notr="true">qreal</string> + </property> + </item> + <item row="0" column="3"> + <property name="text"> + <string>9.8</string> + </property> + </item> + <item row="1" column="0"> + <property name="text"> + <string notr="true">0</string> + </property> + </item> + <item row="1" column="1"> + <property name="text"> + <string notr="true">changeOfBeingEaten</string> + </property> + </item> + <item row="1" column="2"> + <property name="text"> + <string notr="true">bool</string> + </property> + </item> + <item row="1" column="3"> + <property name="text"> + <string>true</string> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>18</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QStatusBar" name="statusbar"/> + </widget> + <resources/> + <connections/> +</ui> diff --git a/examples/sensors/sensor_explorer/main.cpp b/examples/sensors/sensor_explorer/main.cpp new file mode 100644 index 0000000..63ef1b9 --- /dev/null +++ b/examples/sensors/sensor_explorer/main.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 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$ +** +****************************************************************************/ + +#include "explorer.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + Explorer explorer; + explorer.show(); + return app.exec(); +} + diff --git a/examples/sensors/sensor_explorer/sensor_explorer.pro b/examples/sensors/sensor_explorer/sensor_explorer.pro new file mode 100644 index 0000000..0868f30 --- /dev/null +++ b/examples/sensors/sensor_explorer/sensor_explorer.pro @@ -0,0 +1,16 @@ +TEMPLATE=app +TARGET=sensor_explorer +QT=core gui sensors + +FORMS=\ + explorer.ui + +HEADERS=\ + explorer.h + +SOURCES=\ + explorer.cpp\ + main.cpp + +maemo5:DEFINES+=MAEMO5 + diff --git a/examples/sensors/sensors.pro b/examples/sensors/sensors.pro new file mode 100644 index 0000000..adc00c7 --- /dev/null +++ b/examples/sensors/sensors.pro @@ -0,0 +1,9 @@ +TEMPLATE = subdirs + +SUBDIRS += \ + accel\ + cubehouse\ + grueapp\ + grueplugin\ + sensor_explorer + diff --git a/qtsensors.pro b/qtsensors.pro index 1ef9537..f7bf2a0 100644 --- a/qtsensors.pro +++ b/qtsensors.pro @@ -20,3 +20,8 @@ module_qtsensors_examples.depends = module_qtsensors_src module_qtsensors_examples.CONFIG = no_default_target no_default_install } +SUBDIRS += module_qtsensors_snippets +module_qtsensors_snippets.subdir = doc/src/snippets +module_qtsensors_snippets.target = module-qtsensors-snippets +module_qtsensors_snippets.depends = module_qtsensors_src + |