Kaynağa Gözat

Licht berechnung zum shader hinzugefügt

Kolja Strohm 5 yıl önce
ebeveyn
işleme
cd738088b5
12 değiştirilmiş dosya ile 4768 ekleme ve 2025 silme
  1. 22 6
      Bildschirm.cpp
  2. 67 42
      DXBuffer.cpp
  3. 31 20
      DXBuffer.h
  4. 136 46
      Model3D.cpp
  5. 28 0
      Model3D.h
  6. 67 19
      Render3D.cpp
  7. 18 2
      Render3D.h
  8. 3 1
      Shader.cpp
  9. 2903 995
      UIPixelShader.h
  10. 64 4
      UIPixelShader.hlsl
  11. 1415 889
      UIVertexShader.h
  12. 14 1
      UIVertexShader.hlsl

+ 22 - 6
Bildschirm.cpp

@@ -808,7 +808,7 @@ void Bildschirm3D::update() // aktualisiert directX
     pixelShader = new PixelShader();
     pixelShader->setCompiledByteArray( d3d11Device, (unsigned char*)UIPixelShader, sizeof( UIPixelShader ) );
 
-    D3D11_INPUT_ELEMENT_DESC polygonLayout[ 3 ];
+    D3D11_INPUT_ELEMENT_DESC polygonLayout[ 4 ];
     // Create the vertex input layout description.
     // This setup needs to match the VertexType stucture in the ModelClass and in the shader.
     polygonLayout[ 0 ].SemanticName = "POSITION";
@@ -827,16 +827,32 @@ void Bildschirm3D::update() // aktualisiert directX
     polygonLayout[ 1 ].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
     polygonLayout[ 1 ].InstanceDataStepRate = 0;
 
-    polygonLayout[ 2 ].SemanticName = "KNOCHEN_ID";
+    polygonLayout[ 2 ].SemanticName = "NORMAL";
     polygonLayout[ 2 ].SemanticIndex = 0;
-    polygonLayout[ 2 ].Format = DXGI_FORMAT_R32_UINT;
+    polygonLayout[ 2 ].Format = DXGI_FORMAT_R32G32B32_FLOAT;
     polygonLayout[ 2 ].InputSlot = 0;
     polygonLayout[ 2 ].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
     polygonLayout[ 2 ].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
     polygonLayout[ 2 ].InstanceDataStepRate = 0;
-
-    vertexShader->erstelleInputLayout( d3d11Device, polygonLayout, 3 );
-    vertexShader->erstelleConstBuffer( d3d11Device, sizeof( Mat4< float > ) * MAX_KNOCHEN_ANZ, 0 );
+    
+    polygonLayout[ 3 ].SemanticName = "KNOCHEN_ID";
+    polygonLayout[ 3 ].SemanticIndex = 0;
+    polygonLayout[ 3 ].Format = DXGI_FORMAT_R32_UINT;
+    polygonLayout[ 3 ].InputSlot = 0;
+    polygonLayout[ 3 ].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
+    polygonLayout[ 3 ].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
+    polygonLayout[ 3 ].InstanceDataStepRate = 0;
+
+    vertexShader->erstelleInputLayout( d3d11Device, polygonLayout, 4 );
+    vertexShader->erstelleConstBuffer( d3d11Device, sizeof( Mat4< float > ) * MAX_KNOCHEN_ANZ, 0 ); // matrizen für skelett annimationen
+    vertexShader->erstelleConstBuffer( d3d11Device, sizeof( Mat4< float > ) * 2, 1 ); // View and Projection Matrix
+
+    pixelShader->erstelleConstBuffer( d3d11Device, sizeof( float ) * 3, 0 ); // Kamera Position
+    pixelShader->erstelleConstBuffer( d3d11Device, sizeof( float ) * 3, 1 ); // materialkonstanten nach phong model
+    pixelShader->erstelleConstBuffer( d3d11Device, sizeof( int ) * 2, 2 ); // materialkonstanten nach phong model
+    // TODO: Remove Following Test Code
+    int lc[] = { 1, 6 };
+    pixelShader->füllConstBuffer( d3d11Context, (char *)lc, 2, sizeof( int ) * 2 );
 
     // Create a texture sampler state description.
     D3D11_SAMPLER_DESC samplerDesc;

+ 67 - 42
DXBuffer.cpp

@@ -12,15 +12,17 @@ using namespace Framework;
 // Konstruktor
 //  bind: Der verwendungszweck des Buffers. Beispiel: D3D11_BIND_INDEX_BUFFER, D3D11_BIND_VERTEX_BUFFER.
 //  eLän: Länge eines einzelnen Elements in Bytes
-DXBuffer::DXBuffer( D3D11_BIND_FLAG bind, int eLen )
+DXBuffer::DXBuffer( int eLen )
 {
 #ifdef WIN32
     buffer = 0;
-    bf = bind;
+    description = new D3D11_BUFFER_DESC();
+    memset( description, 0, sizeof( description ) );
+    description->Usage = D3D11_USAGE_DYNAMIC;
+    description->CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
 #endif
     data = 0;
     changed = 0;
-    len = 0;
     altLen = 0;
     elLem = eLen;
     ref = 1;
@@ -32,6 +34,7 @@ DXBuffer::~DXBuffer()
 #ifdef WIN32
     if( buffer )
         buffer->Release();
+    delete description;
 #endif
 }
 
@@ -45,7 +48,7 @@ void DXBuffer::setChanged()
 //  län: Die Länge in Bytes
 void DXBuffer::setLength( int len )
 {
-    this->len = len;
+    description->ByteWidth = len;
     changed = 1;
 }
 
@@ -62,9 +65,9 @@ void DXBuffer::setData( void *data )
 void DXBuffer::copieren( Render3D *zRObj )
 {
 #ifdef WIN32
-    if( !changed || !len || !data )
+    if( !changed || !description->ByteWidth || !data )
         return;
-    if( len != altLen )
+    if( description->ByteWidth != altLen )
     {
         if( buffer )
             buffer->Release();
@@ -72,25 +75,18 @@ void DXBuffer::copieren( Render3D *zRObj )
     }
     if( !buffer )
     {
-        D3D11_BUFFER_DESC desk;
-        memset( &desk, 0, sizeof( desk ) );
-        desk.Usage = D3D11_USAGE_DYNAMIC;
-        desk.ByteWidth = len;
-        desk.BindFlags = bf;
-        desk.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
-
         D3D11_SUBRESOURCE_DATA ini;
         memset( &ini, 0, sizeof( ini ) );
         ini.pSysMem = data;
 
-        zRObj->zDevice()->CreateBuffer( &desk, &ini, &buffer );
-        altLen = len;
+        zRObj->zDevice()->CreateBuffer( description, &ini, &buffer );
+        altLen = description->ByteWidth;
     }
     else if( changed )
     {
         D3D11_MAPPED_SUBRESOURCE map;
         zRObj->zContext()->Map( buffer, 0, D3D11_MAP::D3D11_MAP_WRITE_DISCARD, 0, &map );
-        memcpy( map.pData, data, len );
+        memcpy( map.pData, data, description->ByteWidth );
         zRObj->zContext()->Unmap( buffer, 0 );
         changed = 0;
     }
@@ -139,50 +135,79 @@ DXBuffer *DXBuffer::release()
 // Konstruktor
 // eSize: Die Länge eines Elementes in Bytes
 DXVertexBuffer::DXVertexBuffer( int eSize )
+    : DXBuffer( eSize )
+{
 #ifdef WIN32
-    : DXBuffer( D3D11_BIND_VERTEX_BUFFER, eSize )
-#else
-	: DXBuffer( 0, eSize )
+    description->BindFlags = D3D11_BIND_VERTEX_BUFFER;
 #endif
-{}
+}
 
 // Destruktor
 DXVertexBuffer::~DXVertexBuffer()
 {}
 
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-DXBuffer *DXVertexBuffer::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 
 // Inhalt der DXIndexBuffer Klasse
 
 // Konstruktor
 // eSize: Die Länge eines Elementes in Bytes
 DXIndexBuffer::DXIndexBuffer( int eSize )
+    : DXBuffer( eSize )
+{
 #ifdef WIN32
-    : DXBuffer( D3D11_BIND_INDEX_BUFFER, eSize )
-#else
-: DXBuffer( 0, eSize )
+    description->BindFlags = D3D11_BIND_INDEX_BUFFER;
 #endif
-{}
+}
 
 // Destruktor
 DXIndexBuffer::~DXIndexBuffer()
 {}
 
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-DXBuffer *DXIndexBuffer::release()
+
+#ifdef WIN32
+// Inhalt der DXStructuredBuffer Klasse
+
+// Konstruktor
+// eSize: Die Länge eines Elementes in Bytes
+DXStructuredBuffer::DXStructuredBuffer( int eSize )
+    : DXBuffer( eSize )
 {
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}
+    description->BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE;
+    description->MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
+    description->StructureByteStride = eSize;
+    description->Usage = D3D11_USAGE_DEFAULT;
+    view = 0;
+}
+
+// Destruktor
+DXStructuredBuffer::~DXStructuredBuffer()
+{
+    if( view )
+        view->Release();
+}
+
+// Kopiert die Daten in den Buffer, fals sie sich verändert haben
+//  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
+void DXStructuredBuffer::copieren( Render3D *zRObj )
+{
+    ID3D11Buffer *old = buffer;
+    DXBuffer::copieren( zRObj );
+    if( buffer != old )
+    {
+        if( view )
+            view->Release();
+        D3D11_SHADER_RESOURCE_VIEW_DESC desc = {};
+        desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX;
+        desc.BufferEx.FirstElement = 0;
+        desc.Format = DXGI_FORMAT_UNKNOWN;
+        desc.BufferEx.NumElements = description->ByteWidth / description->StructureByteStride;
+        zRObj->zDevice()->CreateShaderResourceView( buffer, &desc, &view );
+    }
+}
+
+// Gibt die verwendtete Shader Resource View zurück
+DXStructuredBuffer::operator ID3D11ShaderResourceView *( ) const
+{
+    return view;
+}
+#endif

+ 31 - 20
DXBuffer.h

@@ -4,9 +4,8 @@
 
 #ifdef WIN32
 struct ID3D11Buffer;
-enum D3D11_BIND_FLAG;
-#else
-typedef int D3D11_BIND_FLAG;
+struct D3D11_BUFFER_DESC;
+struct ID3D11ShaderResourceView;
 #endif
 
 namespace Framework
@@ -17,24 +16,23 @@ namespace Framework
     class DXBuffer
     {
     private:
-#ifdef WIN32
-        ID3D11Buffer *buffer;
-        D3D11_BIND_FLAG bf;
-#endif
         void *data;
         bool changed;
-        int len;
         int altLen;
         int elLem;
 
     protected:
         int ref;
+#ifdef WIN32
+        D3D11_BUFFER_DESC *description;
+        ID3D11Buffer *buffer;
+#endif
 
     public:
         // Konstruktor
         //  bind: Der verwendungszweck des Buffers. Beispiel: D3D11_BIND_INDEX_BUFFER, D3D11_BIND_VERTEX_BUFFER.
         //  eLen: Länge eines einzelnen Elements in Bytes
-        __declspec( dllexport ) DXBuffer( D3D11_BIND_FLAG bind, int eLen );
+        __declspec( dllexport ) DXBuffer( int eLen );
         // Destruktor
         __declspec( dllexport ) virtual ~DXBuffer();
         // Setzt den geändert fläg, so das beim nächsten auruf von 'kopieren' die daten neu kopiert werden
@@ -47,7 +45,7 @@ namespace Framework
         __declspec( dllexport ) void setData( void *data );
         // Kopiert die Daten in den Buffer, fals sie sich verändert haben
         //  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
-        __declspec( dllexport ) void copieren( Render3D *zRObj );
+        __declspec( dllexport ) virtual void copieren( Render3D *zRObj );
         // Gibt die Länge eines Elementes in bytes zurück
         __declspec( dllexport ) int getElementLength() const;
 #ifdef WIN32
@@ -71,11 +69,8 @@ namespace Framework
         // Konstruktor
         // eSize: Die Länge eines Elementes in Bytes
         __declspec( dllexport ) DXVertexBuffer( int eSize );
-		// Destruktor
-		__declspec( dllexport ) virtual ~DXVertexBuffer();
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) virtual DXBuffer *release();
+        // Destruktor
+        __declspec( dllexport ) virtual ~DXVertexBuffer();
     };
 
     // Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei ein Dreieck ergeben, das gezeichnet wird
@@ -85,10 +80,26 @@ namespace Framework
         // Konstruktor
         // eSize: Die Länge eines Elementes in Bytes
         __declspec( dllexport ) DXIndexBuffer( int eSize );
-		// Destruktor
-		__declspec( dllexport ) virtual ~DXIndexBuffer();
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) virtual DXBuffer *release();
+        // Destruktor
+        __declspec( dllexport ) virtual ~DXIndexBuffer();
     };
+#ifdef WIN32
+    // Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei ein Dreieck ergeben, das gezeichnet wird
+    class DXStructuredBuffer : public DXBuffer
+    {
+    private:
+        ID3D11ShaderResourceView *view;
+    public:
+        // Konstruktor
+        // eSize: Die Länge eines Elementes in Bytes
+        __declspec( dllexport ) DXStructuredBuffer( int eSize );
+        // Kopiert die Daten in den Buffer, fals sie sich verändert haben
+        //  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
+        __declspec( dllexport ) void copieren( Render3D *zRObj ) override;
+        // Gibt die verwendtete Shader Resource View zurück
+        __declspec( dllexport ) operator ID3D11ShaderResourceView *() const;
+        // Destruktor
+        __declspec( dllexport ) virtual ~DXStructuredBuffer();
+    };
+#endif
 }

+ 136 - 46
Model3D.cpp

@@ -34,7 +34,7 @@ Knochen::~Knochen()
 
 // Fügt dem Knochen ein Geschwister Knochen hinzu
 //  k: Der Knochen, der hinzugefügt werden soll
-void Knochen::addGeschwisterKnochen( Knochen *k )
+void Knochen::addGeschwisterKnochen( Knochen* k )
 {
     if( !geschwister )
         geschwister = k;
@@ -46,14 +46,14 @@ void Knochen::addGeschwisterKnochen( Knochen *k )
 
 // Setzt die Position des Knochens relativ zum Model Ursprung
 //  pos: Die Position
-void Knochen::setPosition( Vec3< float > &pos )
+void Knochen::setPosition( Vec3< float > & pos )
 {
     this->pos = pos;
 }
 
 // Setzt die Drehung des Knochens relativ zum Model Ursprung
 //  winkel: Ein Vektor der die Drehung um die verschiedenen Achsen als Komponenten hat
-void Knochen::setDrehung( Vec3< float > &winkel )
+void Knochen::setDrehung( Vec3< float > & winkel )
 {
     this->winkel = winkel;
 }
@@ -61,7 +61,7 @@ void Knochen::setDrehung( Vec3< float > &winkel )
 // Fügt einem bestimmten Knochen ein Kind Knochen hinzu
 //  id: Die id des Knochens, wo der Knochen als Kind hinzugefügt werden soll
 //  k: Der Knochen, der hinzugefügt werden soll
-void Knochen::addKind( int id, Knochen *k )
+void Knochen::addKind( int id, Knochen * k )
 {
     if( this->id == id )
     {
@@ -91,7 +91,7 @@ void Knochen::addKind( int id, Knochen *k )
 //  elternMat: Die fertig berechnete Matrix des Elternknochens
 //  matBuffer: Ein Array, in dem alle berechneten Matrizen gespeichert werden sollen
 //  kamMatrix: Die vereiniegung der view und projektions Matrizen
-void Knochen::kalkulateMatrix( Mat4< float > &elternMat, Mat4< float > *matBuffer, Mat4< float > &kamMat )
+void Knochen::kalkulateMatrix( Mat4< float > & elternMat, Mat4< float > * matBuffer, Mat4< float > & kamMat )
 {
     if( geschwister )
         geschwister->kalkulateMatrix( elternMat, matBuffer, kamMat );
@@ -103,9 +103,9 @@ void Knochen::kalkulateMatrix( Mat4< float > &elternMat, Mat4< float > *matBuffe
 }
 
 // Kopiert den Knochen mit allen Geschwister Knochen und Kind Knochen
-Knochen *Knochen::kopiereKnochen() const
+Knochen * Knochen::kopiereKnochen() const
 {
-    Knochen *ret = new Knochen( id );
+    Knochen* ret = new Knochen( id );
     ret->pos = pos;
     ret->winkel = winkel;
     if( geschwister )
@@ -171,7 +171,7 @@ int Skelett::getNextKnochenId()
 // Fügt dem Skellet einen Knochen hinzu
 //  k: Der Knochen
 //  elternId: Die Id des Eltern Knochens. Wenn der Knochen kein Elternknochen besitzt, kannder Parameter weggelassen werden.
-void Skelett::addKnochen( Knochen *k, int elternId )
+void Skelett::addKnochen( Knochen * k, int elternId )
 {
     if( !this->k )
         this->k = k;
@@ -186,7 +186,7 @@ void Skelett::addKnochen( Knochen *k, int elternId )
 //  matBuffer: Ein Array von Matrizen, der durch die Knochen Matrizen gefüllt wird
 //  return: gibt die Anzahl der verwendeten Matrizen zurück
 //  kamMatrix: Die vereiniegung der view und projektions Matrizen
-int Skelett::kalkulateMatrix( Mat4< float > &modelMatrix, Mat4< float > *matBuffer, Mat4< float > &kamMatrix )
+int Skelett::kalkulateMatrix( Mat4< float > & modelMatrix, Mat4< float > * matBuffer, Mat4< float > & kamMatrix )
 {
     k->kalkulateMatrix( modelMatrix, matBuffer, kamMatrix );
     return nextId;
@@ -201,9 +201,9 @@ float Skelett::getRadius() const
 }
 
 // Kopiert das Skelett
-Skelett *Skelett::kopiereSkelett() const
+Skelett* Skelett::kopiereSkelett() const
 {
-    Skelett *ret = new Skelett();
+    Skelett* ret = new Skelett();
     ret->nextId = nextId;
     if( k )
         ret->addKnochen( k->kopiereKnochen() );
@@ -211,7 +211,7 @@ Skelett *Skelett::kopiereSkelett() const
 }
 
 // Erhöht den Reference Counting Zähler.
-Skelett *Skelett::getThis()
+Skelett* Skelett::getThis()
 {
     ref++;
     return this;
@@ -219,7 +219,7 @@ Skelett *Skelett::getThis()
 
 // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
 //  return: 0.
-Skelett *Skelett::release()
+Skelett* Skelett::release()
 {
     ref--;
     if( !ref )
@@ -252,8 +252,12 @@ Model3DData::Model3DData()
     id = -1;
     skelett = 0;
     vertexList = 0;
+    vertexCount = 0;
     polygons = new Array< Polygon3D* >();
     vertexBuffer = new DXVertexBuffer( sizeof( Vertex3D ) );
+    ambientFactor = 1.f;
+    diffusFactor = 0.f;
+    specularFactor = 0.f;
     radius = 0;
     ref = 1;
 }
@@ -270,6 +274,7 @@ Model3DData::~Model3DData()
 void Model3DData::clearModel()
 {
     delete[] vertexList;
+    vertexCount = 0;
     vertexList = 0;
     for( auto i = polygons->getIterator(); i; i++ )
         delete i;
@@ -280,9 +285,36 @@ void Model3DData::clearModel()
     radius = 0;
 }
 
+// Berechnet die normalen für die Eckpunkte des Modells
+void Model3DData::calculateNormals()
+{
+    for( int i = 0; i < vertexCount; i++ )
+    {
+        Vec3< float > normal( 0, 0, 0 );
+        for( auto p = polygons->getIterator(); p; p++ )
+        {
+            int begin = 0;
+            for( int j = 0; j < p->indexAnz; j++ )
+            {
+                if( j % 3 == 0 )
+                    begin = j;
+                if( p->indexList[ j ] == i )
+                {
+                    Vec3< float > a = vertexList[ p->indexList[ begin  ] ].pos;
+                    Vec3< float > b = vertexList[ p->indexList[ begin + 1 ] ].pos;
+                    Vec3< float > c = vertexList[ p->indexList[ begin + 2 ] ].pos;
+                    normal += ( b - a ).crossProduct( c - a ).normalize();
+                    normal.normalize();
+                }
+            }
+        }
+        vertexList[ i ].normal = normal;
+    }
+}
+
 // Setzt den Zeiger auf ein standartmäßig verwendete Skelett
 //  s: Das Skelett, das verwendet werden soll
-void Model3DData::setSkelettZ( Skelett *s )
+void Model3DData::setSkelettZ( Skelett * s )
 {
     if( skelett )
         skelett->release();
@@ -292,12 +324,13 @@ void Model3DData::setSkelettZ( Skelett *s )
 // Setzt einen Zeiger auf eine Liste mit allen Vertecies des Models
 //  vertexList: Ein Array mit Vertecies
 //  anz: Die Anzahl der Vertecies im Array
-void Model3DData::setVertecies( Vertex3D *vertexList, int anz )
+void Model3DData::setVertecies( Vertex3D * vertexList, int anz )
 {
     delete[] this->vertexList;
     this->vertexList = vertexList;
     vertexBuffer->setData( vertexList );
-    vertexBuffer->setLength( (int)sizeof( Vertex3D ) * anz );
+    vertexBuffer->setLength( ( int )sizeof( Vertex3D ) * anz );
+    vertexCount = anz;
     radius = 0;
     for( int i = 0; i < anz; i++ )
     {
@@ -309,15 +342,36 @@ void Model3DData::setVertecies( Vertex3D *vertexList, int anz )
 
 // Fügt ein Polygon zum Model hinzu
 //  polygon: Das Polygon, das hinzugefügt erden soll
-void Model3DData::addPolygon( Polygon3D *polygon )
+void Model3DData::addPolygon( Polygon3D * polygon )
 {
     polygons->add( polygon );
 }
 
+// Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+//  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+void Model3DData::setAmbientFactor( float f )
+{
+    ambientFactor = f;
+}
+
+// Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+//  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+void Model3DData::setDiffusFactor( float f )
+{
+    diffusFactor = f;
+}
+
+// Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+//  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+void Model3DData::setSpecularFactor( float f )
+{
+    specularFactor = f;
+}
+
 // Konvertiert ein 2d Model zu 3D
 //  model: Das 2d Model, das zu 3d konvertiert werden soll
 //  z: Die z koordinate aller punkte des Models
-void Model3DData::copyModel2D( Model2DData *model, float z )
+void Model3DData::copyModel2D( Model2DData * model, float z )
 {
     if( model && model->vListen && model->polygons )
     {
@@ -327,11 +381,11 @@ void Model3DData::copyModel2D( Model2DData *model, float z )
             vAnz += i._.vertex->getEintragAnzahl();
         vertexList = new Vertex3D[ vAnz ];
         vertexBuffer->setData( vertexList );
-        vertexBuffer->setLength( (int)sizeof( Vertex3D ) * vAnz );
+        vertexBuffer->setLength( ( int )sizeof( Vertex3D ) * vAnz );
         int index = 0;
         for( auto i = model->vListen->getIterator(); i; i++ )
         {
-            Polygon3D *p = new Polygon3D();
+            Polygon3D* p = new Polygon3D();
             p->indexAnz = 0;
             for( auto j = i->getIterator(); j; j++ )
             {
@@ -340,14 +394,14 @@ void Model3DData::copyModel2D( Model2DData *model, float z )
             }
             p->indexList = new int[ p->indexAnz ];
             p->indexBuffer->setData( p->indexList );
-            p->indexBuffer->setLength( (int)sizeof( int ) * p->indexAnz );
+            p->indexBuffer->setLength( ( int )sizeof( int ) * p->indexAnz );
             p->indexAnz = 0;
             for( auto j = i->getIterator(); j; j++ )
             {
                 for( auto k = j->zListe()->getIterator(); k; k++ )
                 {
                     vertexList[ index ].pos = Vec3< float >( k->punkt->x, k->punkt->y, z );
-                    vertexList[ index ].tPos = ( Vec2< float > )*k->textur;
+                    vertexList[ index ].tPos = ( Vec2< float > ) * k->textur;
                     if( k.hasNext() && k.next().hasNext() )
                     {
                         p->indexList[ p->indexAnz ] = index;
@@ -377,7 +431,7 @@ void Model3DData::removePolygon( int index )
 
 // Aktualisiert die Vertecies
 //  zRObj: Das Objekt, mit dem die Grafikkarte verwaltet wird
-void Model3DData::aktualisiereVertecies( Render3D *zRObj )
+void Model3DData::aktualisiereVertecies( Render3D * zRObj )
 {
     vertexBuffer->copieren( zRObj );
 }
@@ -387,7 +441,7 @@ void Model3DData::aktualisiereVertecies( Render3D *zRObj )
 //  matBuffer: Ein Array von Matrizen, der durch die Knochen Matrizen gefüllt wird
 //  return: gibt die Anzahl der verwendeten Matrizen zurück
 //  kamMatrix: Die vereiniegung der view und projektions Matrizen
-int Model3DData::kalkulateMatrix( Mat4< float > &modelMatrix, Mat4< float > *matBuffer, Mat4< float > &kamMatrix ) const
+int Model3DData::kalkulateMatrix( Mat4< float > & modelMatrix, Mat4< float > * matBuffer, Mat4< float > & kamMatrix ) const
 {
     if( !skelett )
         return 0;
@@ -398,14 +452,14 @@ int Model3DData::kalkulateMatrix( Mat4< float > &modelMatrix, Mat4< float > *mat
 //  world: Die Welt Matrix, die das Model in die Welt transformiert
 //  zTxt: Eine Liste mit Texturen der einzelnen Polygone
 //  zRObj: Das Objekt, mit dem gezeichnet werden soll
-void Model3DData::render( Mat4< float > &welt, const Model3DTextur *zTxt, Render3D *zRObj )
+void Model3DData::render( Mat4< float > & welt, const Model3DTextur * zTxt, Render3D * zRObj )
 {
     int ind = 0;
     for( auto i = polygons->getIterator(); i; i++ )
     {
         i->indexBuffer->copieren( zRObj );
-        Textur *t = zTxt->zPolygonTextur( ind );
-        if( t && t->brauchtUpdate() )
+        Textur* t = zTxt->zPolygonTextur( ind );
+        if( t&& t->brauchtUpdate() )
             t->updateTextur( zRObj );
 #ifdef WIN32
         zRObj->draw( i->indexBuffer, t );
@@ -422,7 +476,7 @@ int Model3DData::getPolygonAnzahl() const
 
 // Gibt ein bestimmtes Polygon zurück
 //  index: Der Index des Polygons
-Polygon3D *Model3DData::getPolygon( int index ) const
+Polygon3D* Model3DData::getPolygon( int index ) const
 {
     if( !polygons->hat( index ) )
         return 0;
@@ -441,15 +495,33 @@ int Model3DData::getId() const
     return id;
 }
 
+// Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+float Model3DData::getAmbientFactor() const
+{
+    return ambientFactor;
+}
+
+// Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+float Model3DData::getDiffusFactor() const
+{
+    return diffusFactor;
+}
+
+// Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+float Model3DData::getSpecularFactor() const
+{
+    return specularFactor;
+}
+
 // Gibt einen Buffer mit allen Vertecies des Models zurück
-const DXVertexBuffer *Model3DData::zVertexBuffer() const
+const DXVertexBuffer* Model3DData::zVertexBuffer() const
 {
     return vertexBuffer;
 }
 
 // Erhöht den Reference Counting Zähler.
 //  return: this.
-Model3DData *Model3DData::getThis()
+Model3DData* Model3DData::getThis()
 {
     ref++;
     return this;
@@ -457,7 +529,7 @@ Model3DData *Model3DData::getThis()
 
 // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
 //  return: 0.
-Model3DData *Model3DData::release()
+Model3DData* Model3DData::release()
 {
     ref--;
     if( !ref )
@@ -484,21 +556,21 @@ Model3DTextur::~Model3DTextur()
 // Legt fest, welche Textur für welches Polygon ist
 //  pI: Der Index des Polygons
 //  txt: Die Textur des Polygons
-void Model3DTextur::setPolygonTextur( int pI, Textur *txt )
+void Model3DTextur::setPolygonTextur( int pI, Textur * txt )
 {
     textures->set( txt, pI );
 }
 
 // Gibt einen Zeiger auf die Textur eines Polygons zurück ohne erhöhten Reference Counter
 //  i: Der Index des Polygons
-Textur *Model3DTextur::zPolygonTextur( int i ) const
+Textur* Model3DTextur::zPolygonTextur( int i ) const
 {
     return textures->z( i );
 }
 
 // Erhöht den Reference Counting Zähler.
 //  return: this.
-Model3DTextur *Model3DTextur::getThis()
+Model3DTextur* Model3DTextur::getThis()
 {
     ref++;
     return this;
@@ -506,7 +578,7 @@ Model3DTextur *Model3DTextur::getThis()
 
 // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
 //  return: 0.
-Model3DTextur *Model3DTextur::release()
+Model3DTextur* Model3DTextur::release()
 {
     ref--;
     if( !ref )
@@ -515,12 +587,12 @@ Model3DTextur *Model3DTextur::release()
 }
 
 // Inhalt der AnimationData Struktur
-Model3D::AnimationData *Model3D::AnimationData::getThis()
+Model3D::AnimationData* Model3D::AnimationData::getThis()
 {
     return this;
 }
 
-Model3D::AnimationData *Model3D::AnimationData::release()
+Model3D::AnimationData* Model3D::AnimationData::release()
 {
     a->release();
     delete this;
@@ -552,9 +624,9 @@ Model3D::~Model3D()
 
 // Fügt eine Animation hinzu
 //  a: Die neue Animation
-void Model3D::addAnimation( Animation3D *a, double speed )
+void Model3D::addAnimation( Animation3D * a, double speed )
 {
-    AnimationData *d = new AnimationData();
+    AnimationData* d = new AnimationData();
     d->a = a;
     d->speed = speed;
     d->offset = 0;
@@ -563,7 +635,7 @@ void Model3D::addAnimation( Animation3D *a, double speed )
 
 // Entfernt eine Animation
 //  zA: Die zu entfernende Animation
-void Model3D::removeAnimation( Animation3D *zA )
+void Model3D::removeAnimation( Animation3D * zA )
 {
     for( int i = 0; i < animations->getEintragAnzahl(); i++ )
     {
@@ -577,7 +649,7 @@ void Model3D::removeAnimation( Animation3D *zA )
 
 // Setzt den Zeiger auf das zum Annimieren verwendete Skelett
 //  s: Das Skelett, das verwendet werden soll
-void Model3D::setSkelettZ( Skelett *s )
+void Model3D::setSkelettZ( Skelett * s )
 {
     if( skelett )
         skelett->release();
@@ -586,7 +658,7 @@ void Model3D::setSkelettZ( Skelett *s )
 
 // Setzt die Daten des Models
 //  data: Die Daten
-void Model3D::setModelDaten( Model3DData *data )
+void Model3D::setModelDaten( Model3DData * data )
 {
     if( model )
         model->release();
@@ -595,7 +667,7 @@ void Model3D::setModelDaten( Model3DData *data )
 
 // Setzt die zum Zeichnen zu benutzenden Texturen
 //  txt: Ein Liste mit Texturen zu den verschiedenen Polygonen zugeordnet
-void Model3D::setModelTextur( Model3DTextur *txt )
+void Model3D::setModelTextur( Model3DTextur * txt )
 {
     if( textur )
         textur->release();
@@ -606,7 +678,7 @@ void Model3D::setModelTextur( Model3DTextur *txt )
 //  viewProj: Die miteinander multiplizierten Kameramatrizen
 //  matBuffer: Ein Array mit Matrizen, der gefüllt werden soll
 //  return: Die Anzahl der Matrizen, die das Model benötigt
-int Model3D::errechneMatrizen( Mat4< float > &viewProj, Mat4< float > *matBuffer )
+int Model3D::errechneMatrizen( Mat4< float > & viewProj, Mat4< float > * matBuffer )
 {
     int ret = 0;
     if( skelett )
@@ -638,7 +710,7 @@ bool Model3D::tick( double tickval )
 
 // Zeichnet das Model
 //  zRObj: Ein Zeiger auf das Objekt, das zum Zeichnen verwendet werden soll (ohne erhöhten Reference Counter)
-void Model3D::render( Render3D *zRObj )
+void Model3D::render( Render3D * zRObj )
 {
     if( !model )
         return;
@@ -655,8 +727,26 @@ int Model3D::getDatenId() const
     return model ? model->getId() : -1;
 }
 
+// Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+float Model3D::getAmbientFactor() const
+{
+    return model ? model->getAmbientFactor() : 0.f;
+}
+
+// Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+float Model3D::getDiffusFactor() const
+{
+    return model ? model->getDiffusFactor() : 0.f;
+}
+
+// Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+float Model3D::getSpecularFactor() const
+{
+    return model ? model->getSpecularFactor() : 0.f;
+}
+
 // Gibt einen Buffer mit allen Vertecies des Models zurück
-const DXVertexBuffer *Model3D::zVertexBuffer() const
+const DXVertexBuffer* Model3D::zVertexBuffer() const
 {
     return model ? model->zVertexBuffer() : 0;
 }

+ 28 - 0
Model3D.h

@@ -112,6 +112,7 @@ namespace Framework
     {
         Vec3< float > pos; // Die Position der Ecke basierend zur Position des Knochens
         Vec2< float > tPos; // Die Textur Koordinaten der Ecke
+        Vec3< float > normal; // Die Normale (zeigt nach außen und steht senkrecht auf der Oberfläche des models)
         int knochenId; // Die Id des Knochens, mit dem sich die Ecke bei einer Annimation mitbewegt
     };
 
@@ -135,8 +136,12 @@ namespace Framework
     private:
         Skelett *skelett;
         Vertex3D *vertexList;
+        int vertexCount;
         DXVertexBuffer *vertexBuffer;
         Array< Polygon3D* > *polygons;
+        float ambientFactor;
+        float diffusFactor;
+        float specularFactor;
         float radius;
         int id;
         int ref;
@@ -148,6 +153,8 @@ namespace Framework
         __declspec( dllexport ) ~Model3DData();
         // Löscht alle Model daten
         __declspec( dllexport ) void clearModel();
+        // Berechnet die normalen für die Eckpunkte des Modells
+        __declspec( dllexport ) void calculateNormals();
         // Setzt den Zeiger auf ein standartmäßig verwendete Skelett
         //  s: Das Skelett, das verwendet werden soll
         __declspec( dllexport ) void setSkelettZ( Skelett *s );
@@ -158,6 +165,15 @@ namespace Framework
         // Fügt ein Polygon zum Model hinzu
         //  polygon: Das Polygon, das hinzugefügt erden soll
         __declspec( dllexport ) void addPolygon( Polygon3D *polygon );
+        // Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+        //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+        __declspec( dllexport ) void setAmbientFactor( float f );
+        // Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+        //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+        __declspec( dllexport ) void setDiffusFactor( float f );
+        // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+        //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+        __declspec( dllexport ) void setSpecularFactor( float f);
         // Konvertiert ein 2d Model zu 3D
         //  model: Das 2d Model, das zu 3d konvertiert werden soll
         //  z: Die z koordinate aller punkte des Models
@@ -187,6 +203,12 @@ namespace Framework
         __declspec( dllexport ) float getRadius() const;
         // Gibt die Id der Daten zurück, wenn sie in einer Model3DList registriert wurden. (siehe Framework::zM3DRegister())
         __declspec( dllexport ) int getId() const;
+        // Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+        __declspec( dllexport ) float getAmbientFactor() const;
+        // Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+        __declspec( dllexport ) float getDiffusFactor() const;
+        // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+        __declspec( dllexport ) float getSpecularFactor() const;
         // Gibt einen Buffer mit allen Vertecies des Models zurück
         __declspec( dllexport ) const DXVertexBuffer *zVertexBuffer() const;
         // Erhöht den Reference Counting Zähler.
@@ -279,6 +301,12 @@ namespace Framework
         __declspec( dllexport ) void render( Render3D *zRObj ) override;
         // Gibt die Id der Daten zurück, wenn sie in einer Model3DList registriert wurden. (siehe Framework::zM3DRegister())
         __declspec( dllexport ) int getDatenId() const;
+        // Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+        __declspec( dllexport ) float getAmbientFactor() const;
+        // Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+        __declspec( dllexport ) float getDiffusFactor() const;
+        // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+        __declspec( dllexport ) float getSpecularFactor() const;
         // Gibt einen Buffer mit allen Vertecies des Models zurück
         __declspec( dllexport ) const DXVertexBuffer *zVertexBuffer() const;
     };

+ 67 - 19
Render3D.cpp

@@ -22,6 +22,8 @@ Render3D::Render3D()
     defaultTextur->setBildZ( b );
     shader = new RCArray< RCArray< Shader > >();
     shaderId = new Array< int >();
+    diffuseLights = new DXStructuredBuffer( sizeof( DiffuseLight ) );
+    pointLights = new DXStructuredBuffer( sizeof( PointLight ) );
     lastObjektId = -1;
     lastTexturId = -1;
     ref = 1;
@@ -41,11 +43,13 @@ Render3D::~Render3D()
     defaultTextur->release();
     shader->release();
     shaderId->release();
+    diffuseLights->release();
+    pointLights->release();
 }
 
 // Setzt das Device, was zum zeichnen verwendet werden soll
 //  device: Das neue Device
-void Render3D::setDevice( ID3D11Device *device )
+void Render3D::setDevice( ID3D11Device * device )
 {
     if( this->device )
         this->device->Release();
@@ -87,12 +91,41 @@ void Render3D::setDevice( ID3D11Device *device )
             context->RSSetState( texturRS );
             defaultTextur->updateTextur( this );
         }
+        // TODO: Folgenden tets Code entfernen
+        DiffuseLight dl[ 1 ];
+        dl[ 0 ].direction = Vec3< float >( -0.5f, -0.5f, -0.5f ).normalize();
+        dl[ 0 ].color = Vec3<float>( 1.f, 0.f, 0.f );
+        diffuseLights->setData( dl );
+        diffuseLights->setLength( sizeof( dl ) );
+        diffuseLights->copieren( this );
+        PointLight pl[ 6 ];
+        pl[ 0 ].position = Vec3< float >( 0, 130, 0 );
+        pl[ 0 ].color = Vec3< float >( 1.f, 1.f, 0.f );
+        pl[ 0 ].radius = 100;
+        pl[ 1 ].position = Vec3< float >( 150, 130, 0 );
+        pl[ 1 ].color = Vec3< float >( 0.f, 1.f, 0.f );
+        pl[ 1 ].radius = 100;
+        pl[ 2 ].position = Vec3< float >( 150, 130, 150 );
+        pl[ 2 ].color = Vec3< float >( 0.f, 0.f, 1.f );
+        pl[ 2 ].radius = 100;
+        pl[ 3 ].position = Vec3< float >( -150, 130, 0 );
+        pl[ 3 ].color = Vec3< float >( 1.f, 0.f, 1.f );
+        pl[ 3 ].radius = 100;
+        pl[ 4 ].position = Vec3< float >( 0, 130, 150 );
+        pl[ 4 ].color = Vec3< float >( 0.f, 1.f, 1.f );
+        pl[ 4 ].radius = 100;
+        pl[ 5 ].position = Vec3< float >( -150, 130, 150 );
+        pl[ 5 ].color = Vec3< float >( 1.f, 0.f, 0.f );
+        pl[ 5 ].radius = 100;
+        pointLights->setData( pl );
+        pointLights->setLength( sizeof( pl ) * 6 );
+        pointLights->copieren( this );
     }
 }
 
 // Setzt das Context Objekt, das zum Zeichnen verwendet werden soll
 //  context: das neue Conext Objekt
-void Render3D::setContext( ID3D11DeviceContext *context )
+void Render3D::setContext( ID3D11DeviceContext * context )
 {
     if( this->context )
         this->context->Release();
@@ -109,7 +142,7 @@ void Render3D::setContext( ID3D11DeviceContext *context )
 // Setzt den aktuellen Shader. Er wird hinten an die Liste mit zuletzt verwendeten Shadern angefügt
 //  listIndex: Der Index der Liste mit zuletzt verwendeten Shadern
 //  sh: Der Shader, der verwendet werden soll
-void Render3D::benutzeShader( int listIndex, Shader *sh )
+void Render3D::benutzeShader( int listIndex, Shader * sh )
 {
     if( listIndex < 0 )
         return;
@@ -143,10 +176,10 @@ void Render3D::releaseShader( int listIndex, int anz )
 //  view: Die View Matrix der Kamera
 //  proj: Die Projektion Matrix der Kamera
 //  kamPos: Die Position der Kamera in der Welt
-void Render3D::setKameraMatrix( Mat4< float > &view, Mat4< float > &proj, Vec3< float > &kamPos )
+void Render3D::setKameraMatrix( Mat4< float > & view, Mat4< float > & proj, Vec3< float > & kamPos )
 {
-    this->view = view;
-    this->proj = proj;
+    viewAndProj[ 0 ] = view;
+    viewAndProj[ 1 ] = proj;
     this->kamPos = kamPos;
 
     Mat4< float > tmp = proj * view;
@@ -187,12 +220,21 @@ void Render3D::setKameraMatrix( Mat4< float > &view, Mat4< float > &proj, Vec3<
 
 // Beginnt das Zeichnen eines bestimmten objektes
 //  zMdl: Das 3D Modelohne erhöhten Reference Counter
-void Render3D::beginnModel( Model3D *zMdl )
+void Render3D::beginnModel( Model3D * zMdl )
 {
-    Mat4< float > trans = proj * view;
+    Mat4< float > trans = Mat4< float >::identity();
     int anz = zMdl->errechneMatrizen( trans, matrixBuffer );
     if( shader->z( VERTEX ) && shaderId->hat( VERTEX ) )
-        shader->z( VERTEX )->z( shaderId->get( VERTEX ) )->füllConstBuffer( context, (char*)matrixBuffer, 0, sizeof( Mat4< float > ) * anz );
+        shader->z( VERTEX )->z( shaderId->get( VERTEX ) )->füllConstBuffer( context, (char *)matrixBuffer, 0, sizeof( Mat4< float > ) * anz );
+    matirialBuffer[ 0 ] = zMdl->getAmbientFactor();
+    matirialBuffer[ 1 ] = zMdl->getDiffusFactor();
+    matirialBuffer[ 2 ] = zMdl->getSpecularFactor();
+    if( shader->z( VERTEX ) && shaderId->hat( VERTEX ) )
+        shader->z( VERTEX )->z( shaderId->get( VERTEX ) )->füllConstBuffer( context, (char *)viewAndProj, 1, sizeof( Mat4< float > ) * 2 );
+    if( shader->z( PIXEL ) && shaderId->hat( PIXEL ) )
+        shader->z( PIXEL )->z( shaderId->get( PIXEL ) )->füllConstBuffer( context, (char *)& kamPos, 0, sizeof( float ) * 3 );
+    if( shader->z( PIXEL ) && shaderId->hat( PIXEL ) )
+        shader->z( PIXEL )->z( shaderId->get( PIXEL ) )->füllConstBuffer( context, (char *)matirialBuffer, 1, sizeof( float ) * 3 );
     if( lastObjektId == -1 || lastObjektId != zMdl->getDatenId() )
     {
         lastObjektId = zMdl->getDatenId();
@@ -207,7 +249,7 @@ void Render3D::beginnModel( Model3D *zMdl )
 //  zIndexBuffer: Ein IndexBuffer, der auf verschiedene Vertices aus dem Vertex Buffer des Models zeigt. Ohne erhöhten Reference Counter
 //  textur: Ein Zeiger auf die Textur, die verwendet werden soll ohne erhöhten Reference Counter
 //  struktur: Die Struktur der angegebenen Indices, Beispiel: D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST oder D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ...
-void Render3D::draw( DXIndexBuffer *zIndexBuffer, Textur *textur, D3D_PRIMITIVE_TOPOLOGY struktur )
+void Render3D::draw( DXIndexBuffer * zIndexBuffer, Textur * textur, D3D_PRIMITIVE_TOPOLOGY struktur )
 {
     DXGI_FORMAT f = DXGI_FORMAT_R32_UINT;
     if( zIndexBuffer->getElementLength() == 2 )
@@ -221,8 +263,11 @@ void Render3D::draw( DXIndexBuffer *zIndexBuffer, Textur *textur, D3D_PRIMITIVE_
         if( lastTexturId == -1 || lastTexturId != textur->getId() )
         {
             lastTexturId = textur->getId();
-            ID3D11ShaderResourceView *v = *textur;
-            context->PSSetShaderResources( 0, 1, &v );
+            ID3D11ShaderResourceView *v[ 3 ];
+            v[ 0 ] = *textur;
+            v[ 1 ] = *diffuseLights;
+            v[ 2 ] = *pointLights;
+            context->PSSetShaderResources( 0, 3, v );
         }
         context->DrawIndexed( zIndexBuffer->getElementAnzahl(), 0, 0 );
     }
@@ -231,9 +276,12 @@ void Render3D::draw( DXIndexBuffer *zIndexBuffer, Textur *textur, D3D_PRIMITIVE_
         context->RSSetState( meshRS );
         if( lastTexturId == -1 || lastTexturId != defaultTextur->getId() )
         {
-            ID3D11ShaderResourceView *v = *defaultTextur;
+            ID3D11ShaderResourceView *v[ 3 ];
+            v[ 0 ] = *defaultTextur;
+            v[ 1 ] = *diffuseLights;
+            v[ 2 ] = *pointLights;
             lastTexturId = defaultTextur->getId();
-            context->PSSetShaderResources( 0, 1, &v );
+            context->PSSetShaderResources( 0, 3, v );
         }
         context->DrawIndexed( zIndexBuffer->getElementAnzahl(), 0, 0 );
         context->RSSetState( texturRS );
@@ -251,7 +299,7 @@ Shader *Render3D::getShader( int listIndex ) const
 
 // Gibt einen der aktuell verwendeten Shader ohne erhöhten Reference Counter zurück
 //  listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
-Shader *Render3D::zShader( int listIndex ) const
+Shader * Render3D::zShader( int listIndex ) const
 {
     if( !shader->z( listIndex ) || !shaderId->hat( listIndex ) )
         return 0;
@@ -259,7 +307,7 @@ Shader *Render3D::zShader( int listIndex ) const
 }
 
 // Gibt das momentan verwendete Device Objekt ohne erhöhten Reference Counter zurück
-ID3D11Device *Render3D::zDevice() const
+ID3D11Device * Render3D::zDevice() const
 {
     return device;
 }
@@ -274,7 +322,7 @@ ID3D11DeviceContext *Render3D::zContext() const
 //  pos: Der Mittelpunkt der Kugel
 //  radius: Der Radius der Kugel
 //  dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
-bool Render3D::isInFrustrum( const Vec3< float > &pos, float radius, float *dist ) const
+bool Render3D::isInFrustrum( const Vec3< float > & pos, float radius, float *dist ) const
 {
     for( int i = 0; i < 6; i++ )
     {
@@ -282,13 +330,13 @@ bool Render3D::isInFrustrum( const Vec3< float > &pos, float radius, float *dist
             return 0;
     }
     if( dist )
-        *dist = kamPos.abstandSq( pos );
+        * dist = kamPos.abstandSq( pos );
     return 1;
 }
 
 // Erhöht den Reference Counting Zähler.
 //  return: this.
-Render3D *Render3D::getThis()
+Render3D * Render3D::getThis()
 {
     ref++;
     return this;

+ 18 - 2
Render3D.h

@@ -15,22 +15,38 @@ namespace Framework
     class Shader; // Shader.h
     class DXVertexBuffer; // DXBuffer.h
     class DXIndexBuffer; // DXBuffer.h
+    class DXStructuredBuffer; // DXBuffer.h
     class Textur; // Textur.h
     class Model3D; // Model3D.h
 
+    struct DiffuseLight
+    {
+        Vec3<float> direction;
+        Vec3<float> color;
+    };
+
+    struct PointLight
+    {
+        Vec3<float> position;
+        Vec3<float> color;
+        float radius;
+    };
+
     // Verwaltet die Zeichenfunktionen der Grafikkarte und wird zum Zeichnen von 3D Modelen verwendet. Wird von Bildschirm3D automatisch erzeugt.
     class Render3D
     {
     private:
         Mat4< float > matrixBuffer[ MAX_KNOCHEN_ANZ ];
-        Mat4< float > view;
-        Mat4< float > proj;
+        float matirialBuffer[ 3 ]; // light factors (phong model)
+        Mat4< float > viewAndProj[2];
         Ebene3D< float > frustrum[ 6 ];
         Vec3< float > kamPos;
         ID3D11Device *device;
         ID3D11DeviceContext *context;
         ID3D11RasterizerState *texturRS;
         ID3D11RasterizerState *meshRS;
+        DXStructuredBuffer *diffuseLights;
+        DXStructuredBuffer *pointLights;
         Textur *defaultTextur;
         RCArray< RCArray< Shader > > *shader;
         Array< int > *shaderId;

+ 3 - 1
Shader.cpp

@@ -102,11 +102,13 @@ bool Shader::erstelleConstBuffer( ID3D11Device * zD3d11Device, int gr
         return 0;
     bool ok = 1;
     for( int i = 0; i < index; i++ )
-        ok &= constBuffers[ index ] != 0;
+        ok &= constBuffers[ i ] != 0;
     if( !ok )
         return 0;
     D3D11_BUFFER_DESC bufferDesc;
     bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
+    while( (größe / 16) * 16 != größe ) // es sind nur vielfache von 16 als größe erlaubt
+        größe++;
     bufferDesc.ByteWidth = größe;
     bufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
     bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;

+ 2903 - 995
UIPixelShader.h

@@ -3,12 +3,71 @@
 // Generated by Microsoft (R) HLSL Shader Compiler 10.1
 //
 //
+// Buffer Definitions: 
+//
+// cbuffer Kamera
+// {
+//
+//   float4 kPosition;                  // Offset:    0 Size:    16
+//
+// }
+//
+// cbuffer Material
+// {
+//
+//   float ambientFactor;               // Offset:    0 Size:     4
+//   float diffusFactor;                // Offset:    4 Size:     4
+//   float specularFactor;              // Offset:    8 Size:     4
+//
+// }
+//
+// cbuffer LightCount
+// {
+//
+//   int diffuseLightCount;             // Offset:    0 Size:     4
+//   int pointLightCount;               // Offset:    4 Size:     4
+//
+// }
+//
+// Resource bind info for difuseLights
+// {
+//
+//   struct DiffuseLight
+//   {
+//       
+//       float3 direction;              // Offset:    0
+//       float3 color;                  // Offset:   12
+//
+//   } $Element;                        // Offset:    0 Size:    24
+//
+// }
+//
+// Resource bind info for pointLights
+// {
+//
+//   struct PointLight
+//   {
+//       
+//       float3 position;               // Offset:    0
+//       float3 color;                  // Offset:   12
+//       float radius;                  // Offset:   24
+//
+//   } $Element;                        // Offset:    0 Size:    28
+//
+// }
+//
+//
 // Resource Bindings:
 //
 // Name                                 Type  Format         Dim      HLSL Bind  Count
 // ------------------------------ ---------- ------- ----------- -------------- ------
 // SampleType                        sampler      NA          NA             s0      1 
 // shaderTexture                     texture  float4          2d             t0      1 
+// difuseLights                      texture  struct         r/o             t1      1 
+// pointLights                       texture  struct         r/o             t2      1 
+// Kamera                            cbuffer      NA          NA            cb0      1 
+// Material                          cbuffer      NA          NA            cb1      1 
+// LightCount                        cbuffer      NA          NA            cb2      1 
 //
 //
 //
@@ -16,8 +75,10 @@
 //
 // Name                 Index   Mask Register SysValue  Format   Used
 // -------------------- ----- ------ -------- -------- ------- ------
-// SV_POSITION              0   xyzw        0      POS   float       
-// TEXCOORD                 0   xy          1     NONE   float   xy  
+// POSITION                 0   xyzw        0     NONE   float   xyz 
+// SV_POSITION              0   xyzw        1      POS   float       
+// TEXCOORD                 0   xy          2     NONE   float   xy  
+// TEXCOORD                 1   xyz         3     NONE   float   xyz 
 //
 //
 // Output signature:
@@ -28,134 +89,958 @@
 //
 ps_5_0
 dcl_globalFlags refactoringAllowed | skipOptimization
+dcl_constantbuffer CB0[1], immediateIndexed
+dcl_constantbuffer CB1[1], immediateIndexed
+dcl_constantbuffer CB2[1], immediateIndexed
 dcl_sampler s0, mode_default
 dcl_resource_texture2d (float,float,float,float) t0
-dcl_input_ps linear v1.xy
+dcl_resource_structured t1, 24
+dcl_resource_structured t2, 28
+dcl_input_ps linear v0.xyz
+dcl_input_ps linear v2.xy
+dcl_input_ps linear v3.xyz
 dcl_output o0.xyzw
-dcl_temps 1
+dcl_temps 6
 //
 // Initial variable locations:
-//   v0.x <- input.position.x; v0.y <- input.position.y; v0.z <- input.position.z; v0.w <- input.position.w; 
-//   v1.x <- input.tex.x; v1.y <- input.tex.y; 
+//   v0.x <- input.worldPos.x; v0.y <- input.worldPos.y; v0.z <- input.worldPos.z; v0.w <- input.worldPos.w; 
+//   v1.x <- input.position.x; v1.y <- input.position.y; v1.z <- input.position.z; v1.w <- input.position.w; 
+//   v2.x <- input.tex.x; v2.y <- input.tex.y; 
+//   v3.x <- input.normal.x; v3.y <- input.normal.y; v3.z <- input.normal.z; 
 //   o0.x <- <TexturePixelShader return value>.x; o0.y <- <TexturePixelShader return value>.y; o0.z <- <TexturePixelShader return value>.z; o0.w <- <TexturePixelShader return value>.w
 //
-#line 23 "C:\Users\kolja\OneDrive\Desktop\Kolja-Strohm-Games\Allgemein\Framework\UIPixelShader.hlsl"
-sample_indexable(texture2d)(float,float,float,float) r0.xyzw, v1.xyxx, t0.xyzw, s0  // r0.x <- textureColor.x; r0.y <- textureColor.y; r0.z <- textureColor.z; r0.w <- textureColor.w
+#line 60 "C:\Users\kolja\OneDrive\Desktop\Kolja-Strohm-Games\Allgemein\Framework\UIPixelShader.hlsl"
+itof r0.xyz, l(0, 0, 0, 0)  // r0.x <- diffuseLight.x; r0.y <- diffuseLight.y; r0.z <- diffuseLight.z
+
+#line 61
+itof r1.xyz, l(0, 0, 0, 0)  // r1.x <- specularLight.x; r1.y <- specularLight.y; r1.z <- specularLight.z
+
+#line 62
+mov r0.w, l(0)  // r0.w <- j
+mov r2.xyz, r0.xyzx  // r2.x <- diffuseLight.x; r2.y <- diffuseLight.y; r2.z <- diffuseLight.z
+mov r1.w, r0.w  // r1.w <- j
+loop 
+  ilt r2.w, r1.w, cb2[0].x
+  breakc_z r2.w
+
+#line 64
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.x, r1.w, l(0), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.y, r1.w, l(4), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.z, r1.w, l(8), t1.xxxx
+  mov r3.xyz, -r3.xyzx
+  dp3 r2.w, v3.xyzx, r3.xyzx
+  itof r3.x, l(0)
+  lt r2.w, r2.w, r3.x
+  if_nz r2.w
+
+#line 65
+    iadd r1.w, r1.w, l(1)
+    continue 
+  endif 
+
+#line 66
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.x, r1.w, l(12), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.y, r1.w, l(16), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.z, r1.w, l(20), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(0), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(4), t1.xxxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r4.z, r1.w, l(8), t1.xxxx
+  mov r4.xyz, -r4.xyzx
+  dp3 r2.w, v3.xyzx, r4.xyzx
+  mul r3.xyz, r2.wwww, r3.xyzx
+  add r2.xyz, r2.xyzx, r3.xyzx
+
+#line 62
+  iadd r1.w, r1.w, l(1)
+
+#line 67
+endloop 
+
+#line 68
+mov r0.x, l(0)  // r0.x <- i
+mov r0.yzw, r2.xxyz  // r0.y <- diffuseLight.x; r0.z <- diffuseLight.y; r0.w <- diffuseLight.z
+mov r3.xyz, r1.xyzx  // r3.x <- specularLight.x; r3.y <- specularLight.y; r3.z <- specularLight.z
+mov r1.w, r0.x  // r1.w <- i
+loop 
+  ilt r2.w, r1.w, cb2[0].y
+  breakc_z r2.w
+
+#line 70
+  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(0), t2.xxxx
+  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(4), t2.xxxx
+  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.z, r1.w, l(8), t2.xxxx
+  mov r5.xyz, -v0.xyzx
+  add r4.xyz, r4.xyzx, r5.xyzx  // r4.x <- lightDir.x; r4.y <- lightDir.y; r4.z <- lightDir.z
+
+#line 71
+  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r2.w, r1.w, l(24), t2.xxxx
+  dp3 r3.w, r4.xyzx, r4.xyzx
+  sqrt r3.w, r3.w
+  div r2.w, r2.w, r3.w  // r2.w <- factor
+
+#line 72
+  dp3 r3.w, r4.xyzx, r4.xyzx
+  rsq r3.w, r3.w
+  mul r5.xyz, r3.wwww, r4.xyzx
+  dp3 r3.w, v3.xyzx, r5.xyzx  // r3.w <- f
+
+#line 73
+  itof r4.w, l(0)
+  lt r4.w, r4.w, r3.w
+  if_nz r4.w
+
+#line 75
+    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.x, r1.w, l(12), t2.xxxx
+    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.y, r1.w, l(16), t2.xxxx
+    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.z, r1.w, l(20), t2.xxxx
+    mul r5.xyz, r3.wwww, r5.xyzx
+    mul r5.xyz, r2.wwww, r5.xyzx
+    add r0.yzw, r0.yyzw, r5.xxyz
 
-#line 24
-mov o0.xyzw, r0.xyzw
+#line 76
+    mov r4.xyz, -r4.xyzx
+    dp3 r3.w, r4.xyzx, r4.xyzx
+    rsq r3.w, r3.w
+    mul r4.xyz, r3.wwww, r4.xyzx
+    dp3 r3.w, r4.xyzx, v3.xyzx
+    add r3.w, r3.w, r3.w
+    mov r3.w, -r3.w
+    mul r5.xyz, r3.wwww, v3.xyzx
+    add r4.xyz, r4.xyzx, r5.xyzx
+    dp3 r3.w, r4.xyzx, r4.xyzx
+    rsq r3.w, r3.w
+    mul r4.xyz, r3.wwww, r4.xyzx
+    mov r5.xyz, -v0.xyzx
+    add r5.xyz, r5.xyzx, cb0[0].xyzx
+    dp3 r3.w, r5.xyzx, r5.xyzx
+    rsq r3.w, r3.w
+    mul r5.xyz, r3.wwww, r5.xyzx
+    dp3 r3.w, r4.xyzx, r5.xyzx  // r3.w <- f
+
+#line 77
+    itof r4.x, l(0)
+    lt r4.x, r4.x, r3.w
+    if_nz r4.x
+
+#line 78
+      ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(12), t2.xxxx
+      ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(16), t2.xxxx
+      ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.z, r1.w, l(20), t2.xxxx
+      mul r4.xyz, r3.wwww, r4.xyzx
+      mul r4.xyz, r2.wwww, r4.xyzx
+      add r3.xyz, r3.xyzx, r4.xyzx
+    endif 
+
+#line 79
+  endif 
+
+#line 80
+  iadd r1.w, r1.w, l(1)
+endloop 
+
+#line 81
+sample_indexable(texture2d)(float,float,float,float) r1.xyzw, v2.xyxx, t0.xyzw, s0  // r1.x <- materialColor.x; r1.y <- materialColor.y; r1.z <- materialColor.z; r1.w <- materialColor.w
+
+#line 82
+mul r1.xyz, r1.xyzx, cb1[0].xxxx
+mul r0.xyz, r0.yzwy, cb1[0].yyyy
+add r0.xyz, r0.xyzx, r1.xyzx
+mul r1.xyz, r3.xyzx, cb1[0].zzzz
+add r0.xyz, r0.xyzx, r1.xyzx
+max r0.xyz, r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
+min r0.xyz, r0.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)  // r0.x <- textureColor.x; r0.y <- textureColor.y; r0.z <- textureColor.z
+
+#line 83
+mov r1.w, r1.w  // r1.w <- textureColor.w
+
+#line 84
+mov o0.xyz, r0.xyzx
+mov o0.w, r1.w
 ret 
-// Approximately 3 instruction slots used
+// Approximately 103 instruction slots used
 #endif
 
 const BYTE UIPixelShader[] =
 {
-     68,  88,  66,  67, 216,  73, 
-    189, 158, 225, 159, 227, 252, 
-     22, 112, 114,  48, 184,  72, 
-     15, 216,   1,   0,   0,   0, 
-    196,  64,   0,   0,   6,   0, 
+     68,  88,  66,  67,  45, 249, 
+    169, 157, 175,  49,   2, 247, 
+    219, 116, 228,  81,  63,  37, 
+    218,  26,   1,   0,   0,   0, 
+    136, 104,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
-      0,   1,   0,   0,  88,   1, 
-      0,   0, 140,   1,   0,   0, 
-     32,   2,   0,   0, 188,   2, 
+    124,   5,   0,   0,  12,   6, 
+      0,   0,  64,   6,   0,   0, 
+    228,  17,   0,   0, 128,  18, 
       0,   0,  82,  68,  69,  70, 
-    192,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      2,   0,   0,   0,  60,   0, 
+     60,   5,   0,   0,   5,   0, 
+      0,   0, 108,   1,   0,   0, 
+      7,   0,   0,   0,  60,   0, 
       0,   0,   0,   5, 255, 255, 
-      5,   1,   0,   0, 149,   0, 
+      5,   1,   0,   0,  20,   5, 
       0,   0,  82,  68,  49,  49, 
      60,   0,   0,   0,  24,   0, 
       0,   0,  32,   0,   0,   0, 
      40,   0,   0,   0,  36,   0, 
       0,   0,  12,   0,   0,   0, 
-      0,   0,   0,   0, 124,   0, 
+      0,   0,   0,   0,  28,   1, 
       0,   0,   3,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-    135,   0,   0,   0,   2,   0, 
+     39,   1,   0,   0,   2,   0, 
       0,   0,   5,   0,   0,   0, 
       4,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-      1,   0,   0,   0,  12,   0, 
-      0,   0,  83,  97, 109, 112, 
-    108, 101,  84, 121, 112, 101, 
-      0, 115, 104,  97, 100, 101, 
-    114,  84, 101, 120, 116, 117, 
-    114, 101,   0,  77, 105,  99, 
-    114, 111, 115, 111, 102, 116, 
-     32,  40,  82,  41,  32,  72, 
-     76,  83,  76,  32,  83, 104, 
-     97, 100, 101, 114,  32,  67, 
-    111, 109, 112, 105, 108, 101, 
-    114,  32,  49,  48,  46,  49, 
-      0, 171, 171, 171,  73,  83, 
-     71,  78,  80,   0,   0,   0, 
-      2,   0,   0,   0,   8,   0, 
-      0,   0,  56,   0,   0,   0, 
+      1,   0,   0,   0,  13,   0, 
+      0,   0,  53,   1,   0,   0, 
+      5,   0,   0,   0,   6,   0, 
+      0,   0,   1,   0,   0,   0, 
+     24,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,  66,   1, 
+      0,   0,   5,   0,   0,   0, 
+      6,   0,   0,   0,   1,   0, 
+      0,   0,  28,   0,   0,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     78,   1,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  85,   1,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   1,   0, 
-      0,   0,   3,   0,   0,   0, 
-      0,   0,   0,   0,  15,   0, 
-      0,   0,  68,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,  94,   1, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   3,   0,   0,   0, 
-      1,   0,   0,   0,   3,   3, 
-      0,   0,  83,  86,  95,  80, 
-     79,  83,  73,  84,  73,  79, 
-     78,   0,  84,  69,  88,  67, 
-     79,  79,  82,  68,   0, 171, 
-    171, 171,  79,  83,  71,  78, 
-     44,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     83,  97, 109, 112, 108, 101, 
+     84, 121, 112, 101,   0, 115, 
+    104,  97, 100, 101, 114,  84, 
+    101, 120, 116, 117, 114, 101, 
+      0, 100, 105, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+    115,   0, 112, 111, 105, 110, 
+    116,  76, 105, 103, 104, 116, 
+    115,   0,  75,  97, 109, 101, 
+    114,  97,   0,  77,  97, 116, 
+    101, 114, 105,  97, 108,   0, 
+     76, 105, 103, 104, 116,  67, 
+    111, 117, 110, 116,   0, 171, 
+    171, 171,  78,   1,   0,   0, 
+      1,   0,   0,   0, 228,   1, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  85,   1,   0,   0, 
+      3,   0,   0,   0,  68,   2, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  94,   1,   0,   0, 
+      2,   0,   0,   0,  16,   3, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  53,   1,   0,   0, 
+      1,   0,   0,   0, 172,   3, 
+      0,   0,  24,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,  66,   1,   0,   0, 
+      1,   0,   0,   0, 100,   4, 
+      0,   0,  28,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,  12,   2,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+     32,   2,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    107,  80, 111, 115, 105, 116, 
+    105, 111, 110,   0, 102, 108, 
+    111,  97, 116,  52,   0, 171, 
+    171, 171,   1,   0,   3,   0, 
+      1,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  22,   2, 
+      0,   0, 188,   2,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      0,   0,   2,   0,   0,   0, 
+    208,   2,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    244,   2,   0,   0,   4,   0, 
+      0,   0,   4,   0,   0,   0, 
+      2,   0,   0,   0, 208,   2, 
+      0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0,   1,   3, 
       0,   0,   8,   0,   0,   0, 
-     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   2,   0, 
+      0,   0, 208,   2,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0,  97, 109,  98, 105, 
+    101, 110, 116,  70,  97,  99, 
+    116, 111, 114,   0, 102, 108, 
+    111,  97, 116,   0,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   0,   0,   0, 
-      0,   0,  15,   0,   0,   0, 
-     83,  86,  95,  84,  65,  82, 
-     71,  69,  84,   0, 171, 171, 
-     83,  72,  69,  88, 140,   0, 
-      0,   0,  80,   0,   0,   0, 
-     35,   0,   0,   0, 106, 136, 
-      0,   1,  90,   0,   0,   3, 
-      0,  96,  16,   0,   0,   0, 
-      0,   0,  88,  24,   0,   4, 
-      0, 112,  16,   0,   0,   0, 
-      0,   0,  85,  85,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    202,   2,   0,   0, 100, 105, 
+    102, 102, 117, 115,  70,  97, 
+     99, 116, 111, 114,   0, 115, 
+    112, 101,  99, 117, 108,  97, 
+    114,  70,  97,  99, 116, 111, 
+    114,   0,  96,   3,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   3,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    156,   3,   0,   0,   4,   0, 
+      0,   0,   4,   0,   0,   0, 
+      2,   0,   0,   0, 120,   3, 
+      0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 100, 105, 
+    102, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116,  67, 111, 
+    117, 110, 116,   0, 105, 110, 
+    116,   0, 171, 171,   0,   0, 
+      2,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    114,   3,   0,   0, 112, 111, 
+    105, 110, 116,  76, 105, 103, 
+    104, 116,  67, 111, 117, 110, 
+    116,   0, 212,   3,   0,   0, 
+      0,   0,   0,   0,  24,   0, 
+      0,   0,   2,   0,   0,   0, 
+     64,   4,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+     36,  69, 108, 101, 109, 101, 
+    110, 116,   0,  68, 105, 102, 
+    102, 117, 115, 101,  76, 105, 
+    103, 104, 116,   0, 100, 105, 
+    114, 101,  99, 116, 105, 111, 
+    110,   0, 102, 108, 111,  97, 
+    116,  51,   0, 171,   1,   0, 
+      3,   0,   1,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    244,   3,   0,   0,  99, 111, 
+    108, 111, 114,   0, 171, 171, 
+    234,   3,   0,   0, 252,   3, 
+      0,   0,   0,   0,   0,   0, 
+     32,   4,   0,   0, 252,   3, 
+      0,   0,  12,   0,   0,   0, 
+      5,   0,   0,   0,   1,   0, 
+      6,   0,   0,   0,   2,   0, 
+     40,   4,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 221,   3,   0,   0, 
+    212,   3,   0,   0,   0,   0, 
+      0,   0,  28,   0,   0,   0, 
+      2,   0,   0,   0, 240,   4, 
+      0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0,  80, 111, 
+    105, 110, 116,  76, 105, 103, 
+    104, 116,   0, 112, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+    114,  97, 100, 105, 117, 115, 
+      0, 171,   0,   0,   3,   0, 
+      1,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 202,   2, 
+      0,   0, 151,   4,   0,   0, 
+    252,   3,   0,   0,   0,   0, 
+      0,   0,  32,   4,   0,   0, 
+    252,   3,   0,   0,  12,   0, 
+      0,   0, 160,   4,   0,   0, 
+    168,   4,   0,   0,  24,   0, 
+      0,   0,   5,   0,   0,   0, 
+      1,   0,   7,   0,   0,   0, 
+      3,   0, 204,   4,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 140,   4, 
+      0,   0,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  49,  48,  46,  49,   0, 
+     73,  83,  71,  78, 136,   0, 
+      0,   0,   4,   0,   0,   0, 
+      8,   0,   0,   0, 104,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   7,   0,   0, 113,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+     15,   0,   0,   0, 125,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   2,   0,   0,   0, 
+      3,   3,   0,   0, 125,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   3,   0,   0,   0, 
+      7,   7,   0,   0,  80,  79, 
+     83,  73,  84,  73,  79,  78, 
+      0,  83,  86,  95,  80,  79, 
+     83,  73,  84,  73,  79,  78, 
+      0,  84,  69,  88,  67,  79, 
+     79,  82,  68,   0, 171, 171, 
+     79,  83,  71,  78,  44,   0, 
+      0,   0,   1,   0,   0,   0, 
+      8,   0,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  83,  86, 
+     95,  84,  65,  82,  71,  69, 
+     84,   0, 171, 171,  83,  72, 
+     69,  88, 156,  11,   0,   0, 
+     80,   0,   0,   0, 231,   2, 
+      0,   0, 106, 136,   0,   1, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   1,   0,   0,   0, 
+     90,   0,   0,   3,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     88,  24,   0,   4,   0, 112, 
+     16,   0,   0,   0,   0,   0, 
+     85,  85,   0,   0, 162,   0, 
+      0,   4,   0, 112,  16,   0, 
+      1,   0,   0,   0,  24,   0, 
+      0,   0, 162,   0,   0,   4, 
+      0, 112,  16,   0,   2,   0, 
+      0,   0,  28,   0,   0,   0, 
+     98,  16,   0,   3, 114,  16, 
+     16,   0,   0,   0,   0,   0, 
      98,  16,   0,   3,  50,  16, 
-     16,   0,   1,   0,   0,   0, 
+     16,   0,   2,   0,   0,   0, 
+     98,  16,   0,   3, 114,  16, 
+     16,   0,   3,   0,   0,   0, 
     101,   0,   0,   3, 242,  32, 
      16,   0,   0,   0,   0,   0, 
-    104,   0,   0,   2,   1,   0, 
-      0,   0,  69,   0,   0, 139, 
-    194,   0,   0, 128,  67,  85, 
-     21,   0, 242,   0,  16,   0, 
-      0,   0,   0,   0,  70,  16, 
-     16,   0,   1,   0,   0,   0, 
-     70, 126,  16,   0,   0,   0, 
-      0,   0,   0,  96,  16,   0, 
+    104,   0,   0,   2,   6,   0, 
+      0,   0,  43,   0,   0,   8, 
+    114,   0,  16,   0,   0,   0, 
+      0,   0,   2,  64,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  43,   0, 
+      0,   8, 114,   0,  16,   0, 
+      1,   0,   0,   0,   2,  64, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     54,   0,   0,   5, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    114,   0,  16,   0,   2,   0, 
+      0,   0,  70,   2,  16,   0, 
       0,   0,   0,   0,  54,   0, 
-      0,   5, 242,  32,  16,   0, 
-      0,   0,   0,   0,  70,  14, 
+      0,   5, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-     62,   0,   0,   1,  83,  84, 
-     65,  84, 148,   0,   0,   0, 
-      3,   0,   0,   0,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
+     48,   0,   0,   1,  34,   0, 
+      0,   8, 130,   0,  16,   0, 
+      2,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+     10, 128,  32,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   3,  58,   0, 
+     16,   0,   2,   0,   0,   0, 
+    167,   0,   0, 139,   2, 195, 
+      0, 128, 131, 153,  25,   0, 
+     18,   0,  16,   0,   3,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0,   0,   0, 
+      6, 112,  16,   0,   1,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 195,   0, 128, 131, 153, 
+     25,   0,  34,   0,  16,   0, 
+      3,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,   6, 112,  16,   0, 
+      1,   0,   0,   0, 167,   0, 
+      0, 139,   2, 195,   0, 128, 
+    131, 153,  25,   0,  66,   0, 
+     16,   0,   3,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+      8,   0,   0,   0,   6, 112, 
+     16,   0,   1,   0,   0,   0, 
+     54,   0,   0,   6, 114,   0, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16, 128,  65,   0, 
+      0,   0,   3,   0,   0,   0, 
+     16,   0,   0,   7, 130,   0, 
+     16,   0,   2,   0,   0,   0, 
+     70,  18,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      3,   0,   0,   0,  43,   0, 
+      0,   5,  18,   0,  16,   0, 
+      3,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0,   0,   0, 
+     49,   0,   0,   7, 130,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
+      0,   0,  10,   0,  16,   0, 
+      3,   0,   0,   0,  31,   0, 
+      4,   3,  58,   0,  16,   0, 
+      2,   0,   0,   0,  30,   0, 
+      0,   7, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   1,   0, 
+      0,   0,   7,   0,   0,   1, 
+     21,   0,   0,   1, 167,   0, 
+      0, 139,   2, 195,   0, 128, 
+    131, 153,  25,   0,  18,   0, 
+     16,   0,   3,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+     12,   0,   0,   0,   6, 112, 
+     16,   0,   1,   0,   0,   0, 
+    167,   0,   0, 139,   2, 195, 
+      0, 128, 131, 153,  25,   0, 
+     34,   0,  16,   0,   3,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,  16,   0,   0,   0, 
+      6, 112,  16,   0,   1,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 195,   0, 128, 131, 153, 
+     25,   0,  66,   0,  16,   0, 
+      3,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,  20,   0, 
+      0,   0,   6, 112,  16,   0, 
+      1,   0,   0,   0, 167,   0, 
+      0, 139,   2, 195,   0, 128, 
+    131, 153,  25,   0,  18,   0, 
+     16,   0,   4,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0,   0,   0,   6, 112, 
+     16,   0,   1,   0,   0,   0, 
+    167,   0,   0, 139,   2, 195, 
+      0, 128, 131, 153,  25,   0, 
+     34,   0,  16,   0,   4,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,   4,   0,   0,   0, 
+      6, 112,  16,   0,   1,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 195,   0, 128, 131, 153, 
+     25,   0,  66,   0,  16,   0, 
+      4,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   8,   0, 
+      0,   0,   6, 112,  16,   0, 
+      1,   0,   0,   0,  54,   0, 
+      0,   6, 114,   0,  16,   0, 
+      4,   0,   0,   0,  70,   2, 
+     16, 128,  65,   0,   0,   0, 
+      4,   0,   0,   0,  16,   0, 
+      0,   7, 130,   0,  16,   0, 
+      2,   0,   0,   0,  70,  18, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,   0,  16,   0,   3,   0, 
+      0,   0, 246,  15,  16,   0, 
+      2,   0,   0,   0,  70,   2, 
+     16,   0,   3,   0,   0,   0, 
+      0,   0,   0,   7, 114,   0, 
+     16,   0,   2,   0,   0,   0, 
+     70,   2,  16,   0,   2,   0, 
+      0,   0,  70,   2,  16,   0, 
+      3,   0,   0,   0,  30,   0, 
+      0,   7, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   1,   0, 
+      0,   0,  22,   0,   0,   1, 
+     54,   0,   0,   5,  18,   0, 
+     16,   0,   0,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    226,   0,  16,   0,   0,   0, 
+      0,   0,   6,   9,  16,   0, 
+      2,   0,   0,   0,  54,   0, 
+      0,   5, 114,   0,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16,   0,   1,   0,   0,   0, 
+     54,   0,   0,   5, 130,   0, 
+     16,   0,   1,   0,   0,   0, 
+     10,   0,  16,   0,   0,   0, 
+      0,   0,  48,   0,   0,   1, 
+     34,   0,   0,   8, 130,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,  26, 128,  32,   0, 
       2,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   3, 
+     58,   0,  16,   0,   2,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 227,   0, 128, 131, 153, 
+     25,   0,  18,   0,  16,   0, 
+      4,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,   6, 112,  16,   0, 
+      2,   0,   0,   0, 167,   0, 
+      0, 139,   2, 227,   0, 128, 
+    131, 153,  25,   0,  34,   0, 
+     16,   0,   4,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+      4,   0,   0,   0,   6, 112, 
+     16,   0,   2,   0,   0,   0, 
+    167,   0,   0, 139,   2, 227, 
+      0, 128, 131, 153,  25,   0, 
+     66,   0,  16,   0,   4,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,   8,   0,   0,   0, 
+      6, 112,  16,   0,   2,   0, 
+      0,   0,  54,   0,   0,   6, 
+    114,   0,  16,   0,   5,   0, 
+      0,   0,  70,  18,  16, 128, 
+     65,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   7, 
+    114,   0,  16,   0,   4,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  70,   2, 
+     16,   0,   5,   0,   0,   0, 
+    167,   0,   0, 139,   2, 227, 
+      0, 128, 131, 153,  25,   0, 
+    130,   0,  16,   0,   2,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,  24,   0,   0,   0, 
+      6, 112,  16,   0,   2,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  70,   2, 
+     16,   0,   4,   0,   0,   0, 
+     75,   0,   0,   5, 130,   0, 
+     16,   0,   3,   0,   0,   0, 
+     58,   0,  16,   0,   3,   0, 
+      0,   0,  14,   0,   0,   7, 
+    130,   0,  16,   0,   2,   0, 
+      0,   0,  58,   0,  16,   0, 
+      2,   0,   0,   0,  58,   0, 
+     16,   0,   3,   0,   0,   0, 
+     16,   0,   0,   7, 130,   0, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  68,   0, 
+      0,   5, 130,   0,  16,   0, 
+      3,   0,   0,   0,  58,   0, 
+     16,   0,   3,   0,   0,   0, 
+     56,   0,   0,   7, 114,   0, 
+     16,   0,   5,   0,   0,   0, 
+    246,  15,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  16,   0, 
+      0,   7, 130,   0,  16,   0, 
+      3,   0,   0,   0,  70,  18, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   5,   0, 
+      0,   0,  43,   0,   0,   5, 
+    130,   0,  16,   0,   4,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0,   0,   0,  49,   0, 
+      0,   7, 130,   0,  16,   0, 
+      4,   0,   0,   0,  58,   0, 
+     16,   0,   4,   0,   0,   0, 
+     58,   0,  16,   0,   3,   0, 
+      0,   0,  31,   0,   4,   3, 
+     58,   0,  16,   0,   4,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 227,   0, 128, 131, 153, 
+     25,   0,  18,   0,  16,   0, 
+      5,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,  12,   0, 
+      0,   0,   6, 112,  16,   0, 
+      2,   0,   0,   0, 167,   0, 
+      0, 139,   2, 227,   0, 128, 
+    131, 153,  25,   0,  34,   0, 
+     16,   0,   5,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+     16,   0,   0,   0,   6, 112, 
+     16,   0,   2,   0,   0,   0, 
+    167,   0,   0, 139,   2, 227, 
+      0, 128, 131, 153,  25,   0, 
+     66,   0,  16,   0,   5,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,  20,   0,   0,   0, 
+      6, 112,  16,   0,   2,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,   0,  16,   0,   5,   0, 
+      0,   0, 246,  15,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16,   0,   5,   0,   0,   0, 
+     56,   0,   0,   7, 114,   0, 
+     16,   0,   5,   0,   0,   0, 
+    246,  15,  16,   0,   2,   0, 
+      0,   0,  70,   2,  16,   0, 
+      5,   0,   0,   0,   0,   0, 
+      0,   7, 226,   0,  16,   0, 
+      0,   0,   0,   0,  86,  14, 
+     16,   0,   0,   0,   0,   0, 
+      6,   9,  16,   0,   5,   0, 
+      0,   0,  54,   0,   0,   6, 
+    114,   0,  16,   0,   4,   0, 
+      0,   0,  70,   2,  16, 128, 
+     65,   0,   0,   0,   4,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  70,   2, 
+     16,   0,   4,   0,   0,   0, 
+     68,   0,   0,   5, 130,   0, 
+     16,   0,   3,   0,   0,   0, 
+     58,   0,  16,   0,   3,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,   0,  16,   0,   4,   0, 
+      0,   0, 246,  15,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16,   0,   4,   0,   0,   0, 
+     16,   0,   0,   7, 130,   0, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  70,  18,  16,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   7, 130,   0,  16,   0, 
+      3,   0,   0,   0,  58,   0, 
+     16,   0,   3,   0,   0,   0, 
+     58,   0,  16,   0,   3,   0, 
+      0,   0,  54,   0,   0,   6, 
+    130,   0,  16,   0,   3,   0, 
+      0,   0,  58,   0,  16, 128, 
+     65,   0,   0,   0,   3,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,   0,  16,   0,   5,   0, 
+      0,   0, 246,  15,  16,   0, 
+      3,   0,   0,   0,  70,  18, 
+     16,   0,   3,   0,   0,   0, 
+      0,   0,   0,   7, 114,   0, 
+     16,   0,   4,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  70,   2,  16,   0, 
+      5,   0,   0,   0,  16,   0, 
+      0,   7, 130,   0,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16,   0,   4,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  68,   0,   0,   5, 
+    130,   0,  16,   0,   3,   0, 
+      0,   0,  58,   0,  16,   0, 
+      3,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      4,   0,   0,   0, 246,  15, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  54,   0,   0,   6, 
+    114,   0,  16,   0,   5,   0, 
+      0,   0,  70,  18,  16, 128, 
+     65,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   8, 
+    114,   0,  16,   0,   5,   0, 
+      0,   0,  70,   2,  16,   0, 
+      5,   0,   0,   0,  70, 130, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   7, 130,   0,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16,   0,   5,   0,   0,   0, 
+     70,   2,  16,   0,   5,   0, 
+      0,   0,  68,   0,   0,   5, 
+    130,   0,  16,   0,   3,   0, 
+      0,   0,  58,   0,  16,   0, 
+      3,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      5,   0,   0,   0, 246,  15, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   5,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  70,   2, 
+     16,   0,   5,   0,   0,   0, 
+     43,   0,   0,   5,  18,   0, 
+     16,   0,   4,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,  49,   0,   0,   7, 
+     18,   0,  16,   0,   4,   0, 
+      0,   0,  10,   0,  16,   0, 
+      4,   0,   0,   0,  58,   0, 
+     16,   0,   3,   0,   0,   0, 
+     31,   0,   4,   3,  10,   0, 
+     16,   0,   4,   0,   0,   0, 
+    167,   0,   0, 139,   2, 227, 
+      0, 128, 131, 153,  25,   0, 
+     18,   0,  16,   0,   4,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,  12,   0,   0,   0, 
+      6, 112,  16,   0,   2,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 227,   0, 128, 131, 153, 
+     25,   0,  34,   0,  16,   0, 
+      4,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,  16,   0, 
+      0,   0,   6, 112,  16,   0, 
+      2,   0,   0,   0, 167,   0, 
+      0, 139,   2, 227,   0, 128, 
+    131, 153,  25,   0,  66,   0, 
+     16,   0,   4,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+     20,   0,   0,   0,   6, 112, 
+     16,   0,   2,   0,   0,   0, 
+     56,   0,   0,   7, 114,   0, 
+     16,   0,   4,   0,   0,   0, 
+    246,  15,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      4,   0,   0,   0, 246,  15, 
+     16,   0,   2,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,   0,   0,   0,   7, 
+    114,   0,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16,   0,   4,   0,   0,   0, 
+     21,   0,   0,   1,  21,   0, 
+      0,   1,  30,   0,   0,   7, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0,   1,   0,   0,   0, 
+     22,   0,   0,   1,  69,   0, 
+      0, 139, 194,   0,   0, 128, 
+     67,  85,  21,   0, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,  16,  16,   0,   2,   0, 
+      0,   0,  70, 126,  16,   0, 
+      0,   0,   0,   0,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     56,   0,   0,   8, 114,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,   6, 128,  32,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  56,   0,   0,   8, 
+    114,   0,  16,   0,   0,   0, 
+      0,   0, 150,   7,  16,   0, 
+      0,   0,   0,   0,  86, 133, 
+     32,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    114,   0,  16,   0,   1,   0, 
+      0,   0,  70,   2,  16,   0, 
+      3,   0,   0,   0, 166, 138, 
+     32,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,  52,   0,   0,  10, 
+    114,   0,  16,   0,   0,   0, 
+      0,   0,  70,   2,  16,   0, 
+      0,   0,   0,   0,   2,  64, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     51,   0,   0,  10, 114,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0,   2,  64,   0,   0, 
+      0,   0, 128,  63,   0,   0, 
+    128,  63,   0,   0, 128,  63, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+     54,   0,   0,   5, 114,  32, 
+     16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,  32,  16,   0,   0,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,  62,   0, 
+      0,   1,  83,  84,  65,  84, 
+    148,   0,   0,   0, 103,   0, 
+      0,   0,   6,   0,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      0,   0,  49,   0,   0,   0, 
+      5,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      5,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  19,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  10,   0,   0,   0, 
+      0,   0,   0,   0,   5,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -166,17 +1051,17 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  83,  80, 
-     68,  66,   0,  62,   0,   0, 
-     77, 105,  99, 114, 111, 115, 
-    111, 102, 116,  32,  67,  47, 
-     67,  43,  43,  32,  77,  83, 
-     70,  32,  55,  46,  48,  48, 
-     13,  10,  26,  68,  83,   0, 
-      0,   0,   0,   2,   0,   0, 
-      2,   0,   0,   0,  31,   0, 
-      0,   0, 152,   0,   0,   0, 
-      0,   0,   0,   0,  27,   0, 
+      0,   0,  83,  80,  68,  66, 
+      0,  86,   0,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  67,  47,  67,  43, 
+     43,  32,  77,  83,  70,  32, 
+     55,  46,  48,  48,  13,  10, 
+     26,  68,  83,   0,   0,   0, 
+      0,   2,   0,   0,   2,   0, 
+      0,   0,  43,   0,   0,   0, 
+    212,   0,   0,   0,   0,   0, 
+      0,   0,  42,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -253,8 +1138,7 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 192, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
+    192, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
@@ -338,9 +1222,9 @@ const BYTE UIPixelShader[] =
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255,  56,   0, 
-      0, 240, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
+    255, 255,  56,   0,   0,   0, 
+      0, 248, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
@@ -424,11 +1308,12 @@ const BYTE UIPixelShader[] =
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
-      5,   0,   0,   0,  32,   0, 
-      0,   0,  60,   0,   0,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-      6,   0,   0,   0,   5,   0, 
+    255, 255, 255, 255,   5,   0, 
+      0,   0,  32,   0,   0,   0, 
+     60,   0,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0,   6,   0, 
+      0,   0,   5,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -509,7 +1394,7 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   3,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -594,17 +1479,18 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 148,  46, 
-     49,   1, 217, 169,  75,  92, 
-      1,   0,   0,   0,  38,  94, 
-    199, 206, 228,  31, 242,  76, 
-    180,  97,  58,  53, 136,  15, 
-     60,  74,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
+      0,   0, 148,  46,  49,   1, 
+    154, 220,  80,  92,   1,   0, 
+      0,   0,  42, 208,   4, 239, 
+    233,  22, 207,  77, 129, 179, 
+    197, 137, 209,  11,  47, 185, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 220,  81, 
+     51,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-    220,  81,  51,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -678,110 +1564,112 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     84, 101, 120, 116, 117, 114, 
-    101,  50,  68,  32, 115, 104, 
-     97, 100, 101, 114,  84, 101, 
-    120, 116, 117, 114, 101,  59, 
-     13,  10,  83,  97, 109, 112, 
-    108, 101, 114,  83, 116,  97, 
-    116, 101,  32,  83,  97, 109, 
-    112, 108, 101,  84, 121, 112, 
-    101,  59,  13,  10,  13,  10, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10,  47,  47, 
-     32,  84,  89,  80,  69,  68, 
-     69,  70,  83,  32,  47,  47, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     13,  10,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-    115, 116, 114, 117,  99, 116, 
-     32,  80, 105, 120, 101, 108, 
-     73, 110, 112, 117, 116,  84, 
-    121, 112, 101,  13,  10, 123, 
-     13,  10,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  52, 
-     32, 112, 111, 115, 105, 116, 
-    105, 111, 110,  32,  58,  32, 
-     83,  86,  95,  80,  79,  83, 
-     73,  84,  73,  79,  78,  59, 
-     13,  10,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  50, 
-     32, 116, 101, 120,  32,  58, 
-     32,  84,  69,  88,  67,  79, 
-     79,  82,  68,  48,  59,  13, 
-     10, 125,  59,  13,  10,  13, 
-     10,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47, 198,  90,   0,   0, 
-    117, 131,   1,   0,  53,   5, 
-      1,   0,  43, 236,   3,   0, 
-     38, 247,   2,   0,  65,  36, 
-      1,   0,  39,  82,   3,   0, 
-    127, 166,   1,   0, 217,  42, 
-      2,   0,  21, 230,   0,   0, 
-    200,  81,   2,   0,  73,  20, 
-      1,   0, 153, 189,   3,   0, 
-      0,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  84, 101, 
+    120, 116, 117, 114, 101,  50, 
+     68,  32, 115, 104,  97, 100, 
+    101, 114,  84, 101, 120, 116, 
+    117, 114, 101,  32,  58,  32, 
+    114, 101, 103, 105, 115, 116, 
+    101, 114,  40,  32, 116,  48, 
+     32,  41,  59,  13,  10,  83, 
+     97, 109, 112, 108, 101, 114, 
+     83, 116,  97, 116, 101,  32, 
+     83,  97, 109, 112, 108, 101, 
+     84, 121, 112, 101,  59,  13, 
+     10,  13,  10,  47,  47,  32, 
+     84, 104, 101,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32, 111, 102,  32, 116, 104, 
+    101,  32, 107,  97, 109, 101, 
+    114,  97,  13,  10,  99,  98, 
+    117, 102, 102, 101, 114,  32, 
+     75,  97, 109, 101, 114,  97, 
+     32,  58,  32, 114, 101, 103, 
+    105, 115, 116, 101, 114,  40, 
+     32,  98,  48,  32,  41,  13, 
+     10, 123,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  52,  32, 107,  80, 111, 
+    115, 105, 116, 105, 111, 110, 
+     59,  13,  10, 125,  13,  10, 
+     13,  10,  47,  47,  32, 116, 
+    104, 101, 115, 101,  32, 118, 
+     97, 108, 117, 101, 115,  32, 
+    115, 104, 111, 117, 108, 100, 
+     32, 115, 117, 109,  32, 117, 
+    112,  32, 116, 111,  32,  49, 
+     13,  10,  99,  98, 117, 102, 
+    102, 101, 114,  32,  77,  97, 
+    116, 101, 114, 105,  97, 108, 
+     32,  58,  32, 114, 101, 103, 
+    105, 115, 116, 101, 114,  40, 
+     32,  98,  49,  32,  41,  13, 
+     10, 123,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  32,  97, 109,  98, 105, 
+    101, 110, 116,  70,  97,  99, 
+    116, 111, 114,  59,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  32, 100, 105, 
+    102, 102, 117, 115,  70,  97, 
+     99, 116, 111, 114,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  32, 115, 
+    112, 101,  99, 117, 108,  97, 
+    114,  70,  97,  99, 116, 111, 
+    114,  59,  13,  10, 125,  59, 
+     13,  10,  13,  10,  99,  98, 
+    117, 102, 102, 101, 114,  32, 
+     76, 105, 103, 104, 116,  67, 
+    111, 117, 110, 116,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40,  32,  98, 
+     50,  32,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    105, 110, 116,  32, 100, 105, 
+    102, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116,  67, 111, 
+    117, 110, 116,  59,  13,  10, 
+     32,  32,  32,  32, 105, 110, 
+    116,  32, 112, 111, 105, 110, 
+    116,  76, 105, 103, 104, 116, 
+     67, 111, 117, 110, 116,  59, 
+     13,  10, 125,  13,  10,  13, 
+     10,  47,  47,  32, 108, 105, 
+    103, 104, 116, 115,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+     32,  68, 105, 102, 102, 117, 
+    115, 101,  76, 105, 103, 104, 
+    116,  13,  10, 123,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  51,  32, 100, 
+    105, 114, 101,  99, 116, 105, 
+    111, 110,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  51,  32,  99, 111, 
+    108, 111, 114,  59,  13,  10, 
+    125,  59,  13,  10,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+    198,  90,   0,   0, 117, 131, 
+      1,   0,  76, 232,   3,   0, 
+    242,  56,   1,   0,  43, 236, 
+      3,   0,  28,  19,   2,   0, 
+     65,  36,   1,   0, 236, 179, 
+      1,   0,  85,  79,   1,   0, 
+    125,  10,   2,   0, 125, 181, 
+      2,   0, 200,  81,   2,   0, 
+    193,  33,   3,   0,  65, 185, 
+      2,   0,   9, 241,   2,   0, 
+    146, 230,   3,   0, 125, 218, 
+      1,   0, 118,  19,   1,   0, 
+    202, 179,   0,   0, 201, 241, 
+      2,   0,  12, 238,   0,   0, 
+    115,  74,   1,   0, 117,  14, 
+      0,   0,  80, 185,   1,   0, 
+    110,  77,   0,   0, 144, 132, 
+      1,   0, 232,  35,   2,   0, 
+     16, 206,   3,   0, 226, 163, 
+      0,   0,   0,  16,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -847,13 +1735,9 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  47,  47, 
+      0,   0,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
+     47,  47,  47,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -868,9 +1752,10 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     13,  10,  47,  47,  32,  71, 
-     76,  79,  66,  65,  76,  83, 
-     32,  47,  47,  32,  32,  32, 
+     32,  32,  32,  32,  13,  10, 
+     47,  47,  32,  71,  76,  79, 
+     66,  65,  76,  83,  32,  47, 
+     47,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -885,10 +1770,9 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     47,  47,  47,  47,  47,  47, 
+     32,  32,  13,  10,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  32,  32,  32,  32,  32, 
+     47,  47,  47,  47,  47,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -903,18 +1787,131 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10,  84, 101, 
-    120, 116, 117, 114, 101,  50, 
-     68,  32, 115, 104,  97, 100, 
-    101, 114,  84, 101, 120, 116, 
-    117, 114, 101,  59,  13,  10, 
-     83,  97, 109, 112, 108, 101, 
-    114,  83, 116,  97, 116, 101, 
-     32,  83,  97, 109, 112, 108, 
-    101,  84, 121, 112, 101,  59, 
-     13,  10,  13,  10,  47,  47, 
+     32,  32,  32,  32,  32,  32, 
+     13,  10,  84, 101, 120, 116, 
+    117, 114, 101,  50,  68,  32, 
+    115, 104,  97, 100, 101, 114, 
+     84, 101, 120, 116, 117, 114, 
+    101,  32,  58,  32, 114, 101, 
+    103, 105, 115, 116, 101, 114, 
+     40,  32, 116,  48,  32,  41, 
+     59,  13,  10,  83,  97, 109, 
+    112, 108, 101, 114,  83, 116, 
+     97, 116, 101,  32,  83,  97, 
+    109, 112, 108, 101,  84, 121, 
+    112, 101,  59,  13,  10,  13, 
+     10,  47,  47,  32,  84, 104, 
+    101,  32, 112, 111, 115, 105, 
+    116, 105, 111, 110,  32, 111, 
+    102,  32, 116, 104, 101,  32, 
+    107,  97, 109, 101, 114,  97, 
+     13,  10,  99,  98, 117, 102, 
+    102, 101, 114,  32,  75,  97, 
+    109, 101, 114,  97,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40,  32,  98, 
+     48,  32,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  52, 
+     32, 107,  80, 111, 115, 105, 
+    116, 105, 111, 110,  59,  13, 
+     10, 125,  13,  10,  13,  10, 
+     47,  47,  32, 116, 104, 101, 
+    115, 101,  32, 118,  97, 108, 
+    117, 101, 115,  32, 115, 104, 
+    111, 117, 108, 100,  32, 115, 
+    117, 109,  32, 117, 112,  32, 
+    116, 111,  32,  49,  13,  10, 
+     99,  98, 117, 102, 102, 101, 
+    114,  32,  77,  97, 116, 101, 
+    114, 105,  97, 108,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40,  32,  98, 
+     49,  32,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  32, 
+     97, 109,  98, 105, 101, 110, 
+    116,  70,  97,  99, 116, 111, 
+    114,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  32, 100, 105, 102, 102, 
+    117, 115,  70,  97,  99, 116, 
+    111, 114,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  32, 115, 112, 101, 
+     99, 117, 108,  97, 114,  70, 
+     97,  99, 116, 111, 114,  59, 
+     13,  10, 125,  59,  13,  10, 
+     13,  10,  99,  98, 117, 102, 
+    102, 101, 114,  32,  76, 105, 
+    103, 104, 116,  67, 111, 117, 
+    110, 116,  32,  58,  32, 114, 
+    101, 103, 105, 115, 116, 101, 
+    114,  40,  32,  98,  50,  32, 
+     41,  13,  10, 123,  13,  10, 
+     32,  32,  32,  32, 105, 110, 
+    116,  32, 100, 105, 102, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116,  67, 111, 117, 110, 
+    116,  59,  13,  10,  32,  32, 
+     32,  32, 105, 110, 116,  32, 
+    112, 111, 105, 110, 116,  76, 
+    105, 103, 104, 116,  67, 111, 
+    117, 110, 116,  59,  13,  10, 
+    125,  13,  10,  13,  10,  47, 
+     47,  32, 108, 105, 103, 104, 
+    116, 115,  13,  10, 115, 116, 
+    114, 117,  99, 116,  32,  68, 
+    105, 102, 102, 117, 115, 101, 
+     76, 105, 103, 104, 116,  13, 
+     10, 123,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  51,  32, 100, 105, 114, 
+    101,  99, 116, 105, 111, 110, 
+     59,  13,  10,  32,  32,  32, 
+     32, 102, 108, 111,  97, 116, 
+     51,  32,  99, 111, 108, 111, 
+    114,  59,  13,  10, 125,  59, 
+     13,  10,  13,  10, 115, 116, 
+    114, 117,  99, 116,  32,  80, 
+    111, 105, 110, 116,  76, 105, 
+    103, 104, 116,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  51, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  59,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  51,  32,  99, 
+    111, 108, 111, 114,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  32, 114, 
+     97, 100, 105, 117, 115,  59, 
+     13,  10, 125,  59,  13,  10, 
+     13,  10,  83, 116, 114, 117, 
+     99, 116, 117, 114, 101, 100, 
+     66, 117, 102, 102, 101, 114, 
+     60,  32,  68, 105, 102, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116,  32,  62,  32, 100, 
+    105, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116, 115,  32, 
+     58,  32, 114, 101, 103, 105, 
+    115, 116, 101, 114,  40,  32, 
+    116,  49,  32,  41,  59,  13, 
+     10,  83, 116, 114, 117,  99, 
+    116, 117, 114, 101, 100,  66, 
+    117, 102, 102, 101, 114,  60, 
+     32,  80, 111, 105, 110, 116, 
+     76, 105, 103, 104, 116,  32, 
+     62,  32, 112, 111, 105, 110, 
+    116,  76, 105, 103, 104, 116, 
+    115,  32,  58,  32, 114, 101, 
+    103, 105, 115, 116, 101, 114, 
+     40,  32, 116,  50,  32,  41, 
+     59,  13,  10,  13,  10,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
+     47,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -929,10 +1926,9 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     13,  10,  47,  47,  32,  84, 
-     89,  80,  69,  68,  69,  70, 
-     83,  32,  47,  47,  32,  32, 
+     32,  13,  10,  47,  47,  32, 
+     84,  89,  80,  69,  68,  69, 
+     70,  83,  32,  47,  47,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -947,10 +1943,10 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     47,  47,  47,  47,  47,  47, 
+     32,  32,  32,  32,  32,  13, 
+     10,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  47,  32,  32,  32,  32, 
+     47,  47,  47,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -965,22 +1961,33 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10, 115, 116, 
-    114, 117,  99, 116,  32,  80, 
-    105, 120, 101, 108,  73, 110, 
-    112, 117, 116,  84, 121, 112, 
-    101,  13,  10, 123,  13,  10, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  52,  32, 112, 
-    111, 115, 105, 116, 105, 111, 
-    110,  32,  58,  32,  83,  86, 
-     95,  80,  79,  83,  73,  84, 
-     73,  79,  78,  59,  13,  10, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  50,  32, 116, 
-    101, 120,  32,  58,  32,  84, 
+     32,  32,  32,  13,  10, 115, 
+    116, 114, 117,  99, 116,  32, 
+     80, 105, 120, 101, 108,  73, 
+    110, 112, 117, 116,  84, 121, 
+    112, 101,  13,  10, 123,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  52,  32, 
+    119, 111, 114, 108, 100,  80, 
+    111, 115,  32,  58,  32,  80, 
+     79,  83,  73,  84,  73,  79, 
+     78,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  52,  32, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+     58,  32,  83,  86,  95,  80, 
+     79,  83,  73,  84,  73,  79, 
+     78,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  50,  32, 116, 101, 120, 
+     32,  58,  32,  84,  69,  88, 
+     67,  79,  79,  82,  68,  48, 
+     59,  13,  10,  32,  32,  32, 
+     32, 102, 108, 111,  97, 116, 
+     51,  32, 110, 111, 114, 109, 
+     97, 108,  32,  58,  32,  84, 
      69,  88,  67,  79,  79,  82, 
-     68,  48,  59,  13,  10, 125, 
+     68,  49,  59,  13,  10, 125, 
      59,  13,  10,  13,  10,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
@@ -1046,45 +2053,170 @@ const BYTE UIPixelShader[] =
      32,  58,  32,  83,  86,  95, 
      84,  65,  82,  71,  69,  84, 
      13,  10, 123,  13,  10,  32, 
-     32,  32,  32,  47,  47, 114, 
-    101, 116, 117, 114, 110,  32, 
-    102, 108, 111,  97, 116,  52, 
-     40,  32,  48,  46,  53,  44, 
-     32,  48,  46,  53,  44,  32, 
-     48,  46,  53,  44,  32,  48, 
-     46,  53,  32,  41,  59,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  51,  32, 100, 105, 
+    102, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116,  32,  61, 
+     32, 102, 108, 111,  97, 116, 
+     51,  40,  32,  48,  44,  32, 
+     48,  44,  32,  48,  32,  41, 
+     59,  13,  10,  32,  32,  32, 
+     32, 102, 108, 111,  97, 116, 
+     51,  32, 115, 112, 101,  99, 
+    117, 108,  97, 114,  76, 105, 
+    103, 104, 116,  32,  61,  32, 
+    102, 108, 111,  97, 116,  51, 
+     40,  32,  48,  44,  32,  48, 
+     44,  32,  48,  32,  41,  59, 
+     13,  10,  32,  32,  32,  32, 
+    102, 111, 114,  40,  32, 105, 
+    110, 116,  32, 106,  32,  61, 
+     32,  48,  59,  32, 106,  32, 
+     60,  32, 100, 105, 102, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116,  67, 111, 117, 110, 
+    116,  59,  32, 106,  43,  43, 
+     32,  41,  13,  10,  32,  32, 
+     32,  32, 123,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 105, 102,  40,  32, 100, 
+    111, 116,  40,  32, 105, 110, 
+    112, 117, 116,  46, 110, 111, 
+    114, 109,  97, 108,  44,  32, 
+     45, 100, 105, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+    115,  91,  32, 106,  32,  93, 
+     46, 100, 105, 114, 101,  99, 
+    116, 105, 111, 110,  32,  41, 
+     32,  60,  32,  48,  32,  41, 
+     13,  10,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
+     32,  32,  99, 111, 110, 116, 
+    105, 110, 117, 101,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100, 105, 102, 
+    102, 117, 115, 101,  76, 105, 
+    103, 104, 116,  32,  43,  61, 
+     32, 100, 105, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+    115,  91,  32, 106,  32,  93, 
+     46,  99, 111, 108, 111, 114, 
+     32,  42,  32, 100, 111, 116, 
+     40,  32, 105, 110, 112, 117, 
+    116,  46, 110, 111, 114, 109, 
+     97, 108,  44,  32,  45, 100, 
+    105, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116, 115,  91, 
+     32, 106,  32,  93,  46, 100, 
+    105, 114, 101,  99, 116, 105, 
+    111, 110,  32,  41,  59,  13, 
+     10,  32,  32,  32,  32, 125, 
+     13,  10,  32,  32,  32,  32, 
+    102, 111, 114,  40,  32, 105, 
+    110, 116,  32, 105,  32,  61, 
+     32,  48,  59,  32, 105,  32, 
+     60,  32, 112, 111, 105, 110, 
+    116,  76, 105, 103, 104, 116, 
+     67, 111, 117, 110, 116,  59, 
+     32, 105,  43,  43,  32,  41, 
+     13,  10,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  51,  32, 
+    108, 105, 103, 104, 116,  68, 
+    105, 114,  32,  61,  32, 112, 
+    111, 105, 110, 116,  76, 105, 
+    103, 104, 116, 115,  91,  32, 
+    105,  32,  93,  46, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32,  45,  32, 105, 110, 112, 
+    117, 116,  46, 119, 111, 114, 
+    108, 100,  80, 111, 115,  46, 
+    120, 121, 122,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  32, 102,  97,  99, 116, 
+    111, 114,  32,  61,  32, 112, 
+    111, 105, 110, 116,  76, 105, 
+    103, 104, 116, 115,  91,  32, 
+    105,  32,  93,  46, 114,  97, 
+    100, 105, 117, 115,  32,  47, 
+     32, 108, 101, 110, 103, 116, 
+    104,  40,  32, 108, 105, 103, 
+    104, 116,  68, 105, 114,  32, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  32, 
+    102,  32,  61,  32, 100, 111, 
+    116,  40,  32, 105, 110, 112, 
+    117, 116,  46, 110, 111, 114, 
+    109,  97, 108,  44,  32, 110, 
+    111, 114, 109,  97, 108, 105, 
+    122, 101,  40,  32, 108, 105, 
+    103, 104, 116,  68, 105, 114, 
+     32,  41,  32,  41,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 105, 102,  40, 
+     32, 102,  32,  62,  32,  48, 
+     32,  41,  13,  10,  32,  32, 
      32,  32,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100, 105, 102, 
+    102, 117, 115, 101,  76, 105, 
+    103, 104, 116,  32,  43,  61, 
+     32, 112, 111, 105, 110, 116, 
+     76, 105, 103, 104, 116, 115, 
+     91,  32, 105,  32,  93,  46, 
+     99, 111, 108, 111, 114,  32, 
+     42,  32, 102,  32,  42,  32, 
+    102,  97,  99, 116, 111, 114, 
+     59,  13,  10,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  13,  10,  32,  32,  32, 
-     32,  47,  47,  32,  83,  97, 
-    109, 112, 108, 101,  32, 116, 
-    104, 101,  32, 112, 105, 120, 
-    101, 108,  32,  99, 111, 108, 
-    111, 114,  32, 102, 114, 111, 
-    109,  32, 116, 104, 101,  32, 
-    116, 101, 120, 116, 117, 114, 
-    101,  32, 117, 115, 105, 110, 
-    103,  32, 116, 104, 101,  32, 
-    115,  97, 109, 112, 108, 101, 
-    114,  32,  97, 116,  32, 116, 
-    104, 105, 115,  32, 116, 101, 
-    120, 116, 117, 114, 101,  32, 
-     99, 111, 111, 114, 100, 105, 
-    110,  97, 116, 101,  32, 108, 
-    111,  99,  97, 116, 105, 111, 
-    110,  46,  32,  32,  32,  13, 
-     10,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  52,  32, 
-    116, 101, 120, 116, 117, 114, 
-    101,  67, 111, 108, 111, 114, 
+     32,  32,  32, 102,  32,  61, 
+     32, 100, 111, 116,  40,  32, 
+    110, 111, 114, 109,  97, 108, 
+    105, 122, 101,  40,  32, 114, 
+    101, 102, 108, 101,  99, 116, 
+     40,  32, 110, 111, 114, 109, 
+     97, 108, 105, 122, 101,  40, 
+     32,  45, 108, 105, 103, 104, 
+    116,  68, 105, 114,  32,  41, 
+     44,  32, 105, 110, 112, 117, 
+    116,  46, 110, 111, 114, 109, 
+     97, 108,  32,  41,  32,  41, 
+     44,  32, 110, 111, 114, 109, 
+     97, 108, 105, 122, 101,  40, 
+     32, 107,  80, 111, 115, 105, 
+    116, 105, 111, 110,  46, 120, 
+    121, 122,  32,  45,  32, 105, 
+    110, 112, 117, 116,  46, 119, 
+    111, 114, 108, 100,  80, 111, 
+    115,  46, 120, 121, 122,  32, 
+     41,  32,  41,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  40,  32, 102,  32, 
+     62,  32,  48,  32,  41,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32, 115, 
+    112, 101,  99, 117, 108,  97, 
+    114,  76, 105, 103, 104, 116, 
+     32,  43,  61,  32, 112, 111, 
+    105, 110, 116,  76, 105, 103, 
+    104, 116, 115,  91,  32, 105, 
+     32,  93,  46,  99, 111, 108, 
+    111, 114,  32,  42,  32, 102, 
+     32,  42,  32, 102,  97,  99, 
+    116, 111, 114,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 125,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  52,  32, 109, 
+     97, 116, 101, 114, 105,  97, 
+    108,  67, 111, 108, 111, 114, 
      32,  61,  32, 115, 104,  97, 
     100, 101, 114,  84, 101, 120, 
     116, 117, 114, 101,  46,  83, 
@@ -1094,10 +2226,104 @@ const BYTE UIPixelShader[] =
      32, 105, 110, 112, 117, 116, 
      46, 116, 101, 120,  32,  41, 
      59,  13,  10,  32,  32,  32, 
-     32, 114, 101, 116, 117, 114, 
-    110,  32, 116, 101, 120, 116, 
+     32, 102, 108, 111,  97, 116, 
+     52,  32, 116, 101, 120, 116, 
+    117, 114, 101,  67, 111, 108, 
+    111, 114,  32,  61,  32, 115, 
+     97, 116, 117, 114,  97, 116, 
+    101,  40,  32, 109,  97, 116, 
+    101, 114, 105,  97, 108,  67, 
+    111, 108, 111, 114,  32,  42, 
+     32,  97, 109,  98, 105, 101, 
+    110, 116,  70,  97,  99, 116, 
+    111, 114,  32,  43,  32, 102, 
+    108, 111,  97, 116,  52,  40, 
+     32, 100, 105, 102, 102, 117, 
+    115, 101,  76, 105, 103, 104, 
+    116,  46, 120,  44,  32, 100, 
+    105, 102, 102, 117, 115, 101, 
+     76, 105, 103, 104, 116,  46, 
+    121,  44,  32, 100, 105, 102, 
+    102, 117, 115, 101,  76, 105, 
+    103, 104, 116,  46, 122,  44, 
+     32,  48,  32,  41,  32,  42, 
+     32, 100, 105, 102, 102, 117, 
+    115,  70,  97,  99, 116, 111, 
+    114,  32,  43,  32, 102, 108, 
+    111,  97, 116,  52,  40,  32, 
+    115, 112, 101,  99, 117, 108, 
+     97, 114,  76, 105, 103, 104, 
+    116,  46, 120,  44,  32, 115, 
+    112, 101,  99, 117, 108,  97, 
+    114,  76, 105, 103, 104, 116, 
+     46, 121,  44,  32, 115, 112, 
+    101,  99, 117, 108,  97, 114, 
+     76, 105, 103, 104, 116,  46, 
+    122,  44,  32,  48,  32,  41, 
+     32,  42,  32, 115, 112, 101, 
+     99, 117, 108,  97, 114,  70, 
+     97,  99, 116, 111, 114,  32, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32, 116, 101, 120, 116, 
     117, 114, 101,  67, 111, 108, 
-    111, 114,  59,  13,  10, 125, 
+    111, 114,  46,  97,  32,  61, 
+     32, 109,  97, 116, 101, 114, 
+    105,  97, 108,  67, 111, 108, 
+    111, 114,  46,  97,  59,  13, 
+     10,  32,  32,  32,  32, 114, 
+    101, 116, 117, 114, 110,  32, 
+    116, 101, 120, 116, 117, 114, 
+    101,  67, 111, 108, 111, 114, 
+     59,  13,  10, 125,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1108,7 +2334,7 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0, 254, 239, 
     254, 239,   1,   0,   0,   0, 
-    131,   6,   0,   0,   0,  67, 
+     91,  13,   0,   0,   0,  67, 
      58,  92,  85, 115, 101, 114, 
     115,  92, 107, 111, 108, 106, 
      97,  92,  79, 110, 101,  68, 
@@ -1193,8 +2419,8 @@ const BYTE UIPixelShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  13,  10, 
      27, 226,  48,   1, 128,   0, 
-      0,   0,  26,  25, 148,  41, 
-     14, 181, 212,   1,   1,   0, 
+      0,   0, 232, 180, 219,  90, 
+     39, 184, 212,   1,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1208,7 +2434,7 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
      92,   0,   0,   0,  40,   0, 
       0,   0,  27, 226,  48,   1, 
-     90, 194, 103, 192, 204,   5, 
+     15,  68, 182,  27, 164,  12, 
       0,   0,   1,   0,   0,   0, 
      91,   0,   0,   0,  92,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1302,16 +2528,16 @@ const BYTE UIPixelShader[] =
     108,  83, 104,  97, 100, 101, 
     114,   0,   0,   0,  58,   0, 
      16,  17,   0,   0,   0,   0, 
-    200,   2,   0,   0,   0,   0, 
-      0,   0,  68,   0,   0,   0, 
-      0,   0,   0,   0,  68,   0, 
-      0,   0,   6,  16,   0,   0, 
-     72,   0,   0,   0,   1,   0, 
+    156,   7,   0,   0,   0,   0, 
+      0,   0, 236,  10,   0,   0, 
+      0,   0,   0,   0, 236,  10, 
+      0,   0,   7,  16,   0,   0, 
+    176,   0,   0,   0,   1,   0, 
     160,  84, 101, 120, 116, 117, 
     114, 101,  80, 105, 120, 101, 
     108,  83, 104,  97, 100, 101, 
     114,   0,   0,   0,  46,   0, 
-     62,  17,   3,  16,   0,   0, 
+     62,  17,   4,  16,   0,   0, 
       9,   0, 105, 110, 112, 117, 
     116,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1320,30 +2546,58 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,  22,   0, 
      80,  17,   1,   0,   5,   0, 
-      0,   0,   4,   0,  72,   0, 
-      0,   0,   1,   0,  68,   0, 
+      0,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
       0,   0,   0,   0,  22,   0, 
      80,  17,   1,   0,   5,   0, 
-      4,   0,   4,   0,  72,   0, 
-      0,   0,   1,   0,  68,   0, 
+      4,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
       4,   0,   0,   0,  22,   0, 
      80,  17,   1,   0,   5,   0, 
-      8,   0,   4,   0,  72,   0, 
-      0,   0,   1,   0,  68,   0, 
+      8,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
       8,   0,   0,   0,  22,   0, 
      80,  17,   1,   0,   5,   0, 
-     12,   0,   4,   0,  72,   0, 
-      0,   0,   1,   0,  68,   0, 
+     12,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
      12,   0,   0,   0,  22,   0, 
      80,  17,   1,   0,   5,   0, 
-     16,   0,   4,   0,  72,   0, 
-      0,   0,   1,   0,  68,   0, 
+     16,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
      16,   0,   0,   0,  22,   0, 
      80,  17,   1,   0,   5,   0, 
-     20,   0,   4,   0,  72,   0, 
-      0,   0,   1,   0,  68,   0, 
-     20,   0,   0,   0,  74,   0, 
-     62,  17,   5,  16,   0,   0, 
+     20,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     20,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     24,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     24,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     28,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     28,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     32,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     32,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     36,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     36,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     40,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     48,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     44,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     52,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     48,   0,   4,   0, 176,   0, 
+      0,   0,   1,   0, 236,  10, 
+     56,   0,   0,   0,  74,   0, 
+     62,  17,   6,  16,   0,   0, 
     136,   0,  60,  84, 101, 120, 
     116, 117, 114, 101,  80, 105, 
     120, 101, 108,  83, 104,  97, 
@@ -1357,24 +2611,24 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,  22,   0,  80,  17, 
       2,   0,   5,   0,   0,   0, 
-      4,   0,  72,   0,   0,   0, 
-      1,   0,  68,   0,   0,   0, 
+      4,   0, 176,   0,   0,   0, 
+      1,   0, 236,  10,   0,   0, 
       0,   0,  22,   0,  80,  17, 
       2,   0,   5,   0,   4,   0, 
-      4,   0,  72,   0,   0,   0, 
-      1,   0,  68,   0,   4,   0, 
+      4,   0, 176,   0,   0,   0, 
+      1,   0, 236,  10,   4,   0, 
       0,   0,  22,   0,  80,  17, 
       2,   0,   5,   0,   8,   0, 
-      4,   0,  72,   0,   0,   0, 
-      1,   0,  68,   0,   8,   0, 
+      4,   0, 176,   0,   0,   0, 
+      1,   0, 236,  10,   8,   0, 
       0,   0,  22,   0,  80,  17, 
       2,   0,   5,   0,  12,   0, 
-      4,   0,  72,   0,   0,   0, 
-      1,   0,  68,   0,  12,   0, 
+      4,   0, 176,   0,   0,   0, 
+      1,   0, 236,  10,  12,   0, 
       0,   0,  50,   0,  62,  17, 
-      0,  16,   0,   0,   8,   0, 
-    116, 101, 120, 116, 117, 114, 
-    101,  67, 111, 108, 111, 114, 
+      2,  16,   0,   0,   8,   0, 
+    100, 105, 102, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1382,123 +2636,670 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
      22,   0,  80,  17,   0,   0, 
       5,   0,   0,   0,   4,   0, 
-    116,   0,   0,   0,   1,   0, 
-     24,   0,   0,   0,   0,   0, 
+    208,   0,   0,   0,   1,   0, 
+     72,   0,   0,   0,   0,   0, 
      22,   0,  80,  17,   0,   0, 
       5,   0,   4,   0,   4,   0, 
-    116,   0,   0,   0,   1,   0, 
-     24,   0,   4,   0,   0,   0, 
+    208,   0,   0,   0,   1,   0, 
+     72,   0,   4,   0,   0,   0, 
      22,   0,  80,  17,   0,   0, 
       5,   0,   8,   0,   4,   0, 
-    116,   0,   0,   0,   1,   0, 
-     24,   0,   8,   0,   0,   0, 
+    208,   0,   0,   0,   1,   0, 
+     72,   0,   8,   0,   0,   0, 
      22,   0,  80,  17,   0,   0, 
-      5,   0,  12,   0,   4,   0, 
-    116,   0,   0,   0,   1,   0, 
-     24,   0,  12,   0,   0,   0, 
-      2,   0,   6,   0, 244,   0, 
-      0,   0,  24,   0,   0,   0, 
-      1,   0,   0,   0,  16,   1, 
-    222,  84, 200, 116,  98, 250, 
-    182, 249, 237,   9, 194,  93, 
-    233, 217, 165,  76,   0,   0, 
-    242,   0,   0,   0,  96,   0, 
-      0,   0,   0,   0,   0,   0, 
-      1,   0,   1,   0, 140,   0, 
-      0,   0,   0,   0,   0,   0, 
-      6,   0,   0,   0,  84,   0, 
-      0,   0,  72,   0,   0,   0, 
-     23,   0,   0, 128,  72,   0, 
-      0,   0,  23,   0,   0,   0, 
-    116,   0,   0,   0,  24,   0, 
-      0, 128, 116,   0,   0,   0, 
-     24,   0,   0,   0, 136,   0, 
-      0,   0,  24,   0,   0, 128, 
-    136,   0,   0,   0,  24,   0, 
-      0,   0,   5,   0,  72,   0, 
-     27,   0,  71,   0,   5,   0, 
-     24,   0,   5,   0,  24,   0, 
-      5,   0,  24,   0,   5,   0, 
-     24,   0, 246,   0,   0,   0, 
-      4,   0,   0,   0,   0,   0, 
-      0,   0,  12,   0,   0,   0, 
-      0,   0,   0,   0,  36,   0, 
-      0,   0,  72,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+     24,   1,   0,   0,   1,   0, 
+     24,   3,  32,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   4,   0,   4,   0, 
+     24,   1,   0,   0,   1,   0, 
+     24,   3,  36,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   8,   0,   4,   0, 
+     24,   1,   0,   0,   1,   0, 
+     24,   3,  40,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+     48,   4,   0,   0,   1,   0, 
+    132,   6,   4,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   4,   0,   4,   0, 
+     48,   4,   0,   0,   1,   0, 
+    132,   6,   8,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   8,   0,   4,   0, 
+     48,   4,   0,   0,   1,   0, 
+    108,   7,  12,   0,   0,   0, 
+     54,   0,  62,  17,   2,  16, 
+      0,   0,   8,   0, 115, 112, 
+    101,  99, 117, 108,  97, 114, 
+     76, 105, 103, 104, 116,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0, 240,   0,   0,   0, 
+      1,   0,  84,   3,  16,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   4,   0, 
+      4,   0, 240,   0,   0,   0, 
+      1,   0,  84,   3,  20,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   8,   0, 
+      4,   0, 240,   0,   0,   0, 
+      1,   0,  84,   3,  24,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0,  68,   4,   0,   0, 
+      1,   0,  88,   7,  48,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   4,   0, 
+      4,   0,  68,   4,   0,   0, 
+      1,   0,  88,   7,  52,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   8,   0, 
+      4,   0,  68,   4,   0,   0, 
+      1,   0,  88,   7,  56,   0, 
+      0,   0,  42,   0,  62,  17, 
+    116,   0,   0,   0,   0,   0, 
+    106,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  22,   0, 
+     80,  17,   0,   0,   1,   0, 
+      0,   0,   4,   0,   4,   1, 
+      0,   0,   1,   0,  40,   0, 
+     12,   0,   0,   0,  22,   0, 
+     80,  17,   0,   0,   1,   0, 
+      0,   0,   4,   0,  44,   1, 
+      0,   0,   1,   0,  44,   3, 
+     28,   0,   0,   0,  42,   0, 
+     62,  17, 116,   0,   0,   0, 
+      0,   0, 105,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      1,   0,   0,   0,   4,   0, 
+     28,   4,   0,   0,   1,   0, 
+     60,   0,   0,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      1,   0,   0,   0,   4,   0, 
+     88,   4,   0,   0,   1,   0, 
+     28,   6,  28,   0,   0,   0, 
+     46,   0,  62,  17,   2,  16, 
+      0,   0,   8,   0, 108, 105, 
+    103, 104, 116,  68, 105, 114, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+     64,   5,   0,   0,   1,   0, 
+     12,   2,  64,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   4,   0,   4,   0, 
+     64,   5,   0,   0,   1,   0, 
+     12,   2,  68,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   8,   0,   4,   0, 
+     64,   5,   0,   0,   1,   0, 
+     12,   2,  72,   0,   0,   0, 
+     46,   0,  62,  17,  64,   0, 
+      0,   0,   0,   0, 102,  97, 
+     99, 116, 111, 114,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     11, 202,  49,   1,  56,   0, 
-      0,   0,   0,  16,   0,   0, 
-     13,  16,   0,   0, 248,   0, 
-      0,   0,  10,   0, 255, 255, 
-      4,   0,   0,   0, 255, 255, 
-      3,   0,   0,   0,   0,   0, 
-     52,   0,   0,   0,  52,   0, 
-      0,   0,   8,   0,   0,   0, 
-     60,   0,   0,   0,   0,   0, 
-      0,   0,  22,   0,  27,  21, 
-     64,   0,   0,   0,   4,   0, 
-      0,   0,  16,   0, 102, 108, 
-    111,  97, 116,  52,   0, 243, 
-    242, 241,  22,   0,  27,  21, 
-     64,   0,   0,   0,   2,   0, 
-      0,   0,   8,   0, 102, 108, 
-    111,  97, 116,  50,   0, 243, 
-    242, 241,  38,   0,   3,  18, 
-     13,  21,   3,   0,   0,  16, 
-      0,   0,   0,   0, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-      0, 241,  13,  21,   3,   0, 
-      1,  16,   0,   0,  16,   0, 
-    116, 101, 120,   0, 242, 241, 
-     38,   0,   5,  21,   2,   0, 
-      0,   0,   2,  16,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  24,   0,  80, 105, 
-    120, 101, 108,  73, 110, 112, 
-    117, 116,  84, 121, 112, 101, 
-      0, 243, 242, 241,  10,   0, 
-      1,  18,   1,   0,   0,   0, 
-      3,  16,   0,   0,  10,   0, 
-     24,  21,   0,  16,   0,   0, 
-      1,   0,   1,   0,  14,   0, 
-      8,  16,   5,  16,   0,   0, 
-     23,   0,   1,   0,   4,  16, 
-      0,   0,  14,   0,  23,  21, 
-      0,  16,   0,   0,   3,   2, 
-    240,   3,   0,   0, 242, 241, 
-     10,   0,  24,  21,   7,  16, 
-      0,   0,   1,   0,   1,   0, 
-     10,   0,  24,  21,   8,  16, 
-      0,   0,   1,   0,   0,   2, 
-     14,   0,  23,  21,   0,   0, 
-      0,   0,  10,   2,   0,   0, 
-      0,   0, 242, 241,  10,   0, 
-     24,  21,  10,  16,   0,   0, 
-      1,   0,   1,   0,  10,   0, 
-     24,  21,  11,  16,   0,   0, 
-      1,   0,   0,   2,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      1,   0,   0,   0,   4,   0, 
+    184,   5,   0,   0,   1,   0, 
+    144,   4,  44,   0,   0,   0, 
+     42,   0,  62,  17,  64,   0, 
+      0,   0,   0,   0, 102,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  26,   0,  80,  17, 
+      0,   0,   1,   0,   0,   0, 
+      4,   0,  32,   6,   0,   0, 
+      1,   0,  40,   4,  72,   1, 
+    164,   1,  60,   0,   0,   0, 
+     54,   0,  62,  17,   0,  16, 
+      0,   0,   8,   0, 109,  97, 
+    116, 101, 114, 105,  97, 108, 
+     67, 111, 108, 111, 114,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0, 116,  10,   0,   0, 
+      1,   0,  32,   0,  16,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   4,   0, 
+      4,   0, 116,  10,   0,   0, 
+      1,   0,  32,   0,  20,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   8,   0, 
+      4,   0, 116,  10,   0,   0, 
+      1,   0,  32,   0,  24,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  12,   0, 
+      4,   0, 116,  10,   0,   0, 
+      1,   0,  40,   1,  28,   0, 
+      0,   0,  50,   0,  62,  17, 
+      0,  16,   0,   0,   8,   0, 
+    116, 101, 120, 116, 117, 114, 
+    101,  67, 111, 108, 111, 114, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+     92,  11,   0,   0,   1,   0, 
+     64,   0,   0,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   4,   0,   4,   0, 
+     92,  11,   0,   0,   1,   0, 
+     64,   0,   4,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   8,   0,   4,   0, 
+     92,  11,   0,   0,   1,   0, 
+     64,   0,   8,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,  12,   0,   4,   0, 
+    112,  11,   0,   0,   1,   0, 
+     44,   0,  28,   0,   0,   0, 
+      2,   0,   6,   0, 244,   0, 
+      0,   0,  24,   0,   0,   0, 
+      1,   0,   0,   0,  16,   1, 
+     40,  19,  73,  84,  74, 167, 
+     33,  72, 195, 111, 254, 118, 
+     47, 204, 252,  24,   0,   0, 
+    242,   0,   0,   0, 192,   9, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   1,   0, 156,  11, 
+      0,   0,   0,   0,   0,   0, 
+    206,   0,   0,   0, 180,   9, 
+      0,   0, 176,   0,   0,   0, 
+     60,   0,   0, 128, 176,   0, 
+      0,   0,  60,   0,   0,   0, 
+    208,   0,   0,   0,  61,   0, 
+      0, 128, 208,   0,   0,   0, 
+     61,   0,   0,   0, 240,   0, 
+      0,   0,  62,   0,   0, 128, 
+    240,   0,   0,   0,  62,   0, 
+      0,   0,   4,   1,   0,   0, 
+     62,   0,   0, 128,   4,   1, 
+      0,   0,  62,   0,   0,   0, 
+     24,   1,   0,   0,  62,   0, 
+      0, 128,  24,   1,   0,   0, 
+     62,   0,   0,   0,  44,   1, 
+      0,   0,  62,   0,   0, 128, 
+     44,   1,   0,   0,  62,   0, 
+      0,   0,  48,   1,   0,   0, 
+     62,   0,   0, 128,  48,   1, 
+      0,   0,  62,   0,   0,   0, 
+     80,   1,   0,   0,  62,   0, 
+      0, 128,  80,   1,   0,   0, 
+     62,   0,   0,   0,  92,   1, 
+      0,   0,  64,   0,   0, 128, 
+     92,   1,   0,   0,  64,   0, 
+      0,   0, 136,   1,   0,   0, 
+     64,   0,   0, 128, 136,   1, 
+      0,   0,  64,   0,   0,   0, 
+    180,   1,   0,   0,  64,   0, 
+      0, 128, 180,   1,   0,   0, 
+     64,   0,   0,   0, 224,   1, 
+      0,   0,  64,   0,   0, 128, 
+    224,   1,   0,   0,  64,   0, 
+      0,   0, 248,   1,   0,   0, 
+     64,   0,   0, 128, 248,   1, 
+      0,   0,  64,   0,   0,   0, 
+     20,   2,   0,   0,  64,   0, 
+      0, 128,  20,   2,   0,   0, 
+     64,   0,   0,   0,  40,   2, 
+      0,   0,  64,   0,   0, 128, 
+     40,   2,   0,   0,  64,   0, 
+      0,   0,  68,   2,   0,   0, 
+     64,   0,   0, 128,  68,   2, 
+      0,   0,  64,   0,   0,   0, 
+     80,   2,   0,   0,  65,   0, 
+      0, 128,  80,   2,   0,   0, 
+     62,   0,   0,   0, 108,   2, 
+      0,   0,  65,   0,   0, 128, 
+    108,   2,   0,   0,  65,   0, 
+      0,   0, 112,   2,   0,   0, 
+     65,   0,   0, 128, 112,   2, 
+      0,   0,  65,   0,   0,   0, 
+    116,   2,   0,   0,  66,   0, 
+      0, 128, 116,   2,   0,   0, 
+     66,   0,   0,   0, 160,   2, 
+      0,   0,  66,   0,   0, 128, 
+    160,   2,   0,   0,  66,   0, 
+      0,   0, 204,   2,   0,   0, 
+     66,   0,   0, 128, 204,   2, 
+      0,   0,  66,   0,   0,   0, 
+    248,   2,   0,   0,  66,   0, 
+      0, 128, 248,   2,   0,   0, 
+     66,   0,   0,   0,  36,   3, 
+      0,   0,  66,   0,   0, 128, 
+     36,   3,   0,   0,  66,   0, 
+      0,   0,  80,   3,   0,   0, 
+     66,   0,   0, 128,  80,   3, 
+      0,   0,  66,   0,   0,   0, 
+    124,   3,   0,   0,  66,   0, 
+      0, 128, 124,   3,   0,   0, 
+     66,   0,   0,   0, 148,   3, 
+      0,   0,  66,   0,   0, 128, 
+    148,   3,   0,   0,  66,   0, 
+      0,   0, 176,   3,   0,   0, 
+     66,   0,   0, 128, 176,   3, 
+      0,   0,  66,   0,   0,   0, 
+    204,   3,   0,   0,  66,   0, 
+      0, 128, 204,   3,   0,   0, 
+     66,   0,   0,   0, 232,   3, 
+      0,   0,  62,   0,   0, 128, 
+    232,   3,   0,   0,  62,   0, 
+      0,   0,   4,   4,   0,   0, 
+     67,   0,   0, 128,   4,   4, 
+      0,   0,  67,   0,   0,   0, 
+      8,   4,   0,   0,  68,   0, 
+      0, 128,   8,   4,   0,   0, 
+     68,   0,   0,   0,  28,   4, 
+      0,   0,  68,   0,   0, 128, 
+     28,   4,   0,   0,  68,   0, 
+      0,   0,  48,   4,   0,   0, 
+     68,   0,   0, 128,  48,   4, 
+      0,   0,  68,   0,   0,   0, 
+     68,   4,   0,   0,  68,   0, 
+      0, 128,  68,   4,   0,   0, 
+     68,   0,   0,   0,  88,   4, 
+      0,   0,  68,   0,   0, 128, 
+     88,   4,   0,   0,  68,   0, 
+      0,   0,  92,   4,   0,   0, 
+     68,   0,   0, 128,  92,   4, 
+      0,   0,  68,   0,   0,   0, 
+    124,   4,   0,   0,  68,   0, 
+      0, 128, 124,   4,   0,   0, 
+     68,   0,   0,   0, 136,   4, 
+      0,   0,  70,   0,   0, 128, 
+    136,   4,   0,   0,  70,   0, 
+      0,   0, 180,   4,   0,   0, 
+     70,   0,   0, 128, 180,   4, 
+      0,   0,  70,   0,   0,   0, 
+    224,   4,   0,   0,  70,   0, 
+      0, 128, 224,   4,   0,   0, 
+     70,   0,   0,   0,  12,   5, 
+      0,   0,  70,   0,   0, 128, 
+     12,   5,   0,   0,  70,   0, 
+      0,   0,  36,   5,   0,   0, 
+     70,   0,   0, 128,  36,   5, 
+      0,   0,  70,   0,   0,   0, 
+     64,   5,   0,   0,  71,   0, 
+      0, 128,  64,   5,   0,   0, 
+     71,   0,   0,   0, 108,   5, 
+      0,   0,  71,   0,   0, 128, 
+    108,   5,   0,   0,  71,   0, 
+      0,   0, 136,   5,   0,   0, 
+     71,   0,   0, 128, 136,   5, 
+      0,   0,  71,   0,   0,   0, 
+    156,   5,   0,   0,  71,   0, 
+      0, 128, 156,   5,   0,   0, 
+     71,   0,   0,   0, 184,   5, 
+      0,   0,  72,   0,   0, 128, 
+    184,   5,   0,   0,  72,   0, 
+      0,   0, 212,   5,   0,   0, 
+     72,   0,   0, 128, 212,   5, 
+      0,   0,  72,   0,   0,   0, 
+    232,   5,   0,   0,  72,   0, 
+      0, 128, 232,   5,   0,   0, 
+     72,   0,   0,   0,   4,   6, 
+      0,   0,  72,   0,   0, 128, 
+      4,   6,   0,   0,  72,   0, 
+      0,   0,  32,   6,   0,   0, 
+     73,   0,   0, 128,  32,   6, 
+      0,   0,  73,   0,   0,   0, 
+     52,   6,   0,   0,  73,   0, 
+      0, 128,  52,   6,   0,   0, 
+     73,   0,   0,   0,  80,   6, 
+      0,   0,  73,   0,   0, 128, 
+     80,   6,   0,   0,  73,   0, 
+      0,   0,  92,   6,   0,   0, 
+     75,   0,   0, 128,  92,   6, 
+      0,   0,  75,   0,   0,   0, 
+    136,   6,   0,   0,  75,   0, 
+      0, 128, 136,   6,   0,   0, 
+     75,   0,   0,   0, 180,   6, 
+      0,   0,  75,   0,   0, 128, 
+    180,   6,   0,   0,  75,   0, 
+      0,   0, 224,   6,   0,   0, 
+     75,   0,   0, 128, 224,   6, 
+      0,   0,  75,   0,   0,   0, 
+    252,   6,   0,   0,  75,   0, 
+      0, 128, 252,   6,   0,   0, 
+     75,   0,   0,   0,  24,   7, 
+      0,   0,  75,   0,   0, 128, 
+     24,   7,   0,   0,  75,   0, 
+      0,   0,  52,   7,   0,   0, 
+     76,   0,   0, 128,  52,   7, 
+      0,   0,  76,   0,   0,   0, 
+     76,   7,   0,   0,  76,   0, 
+      0, 128,  76,   7,   0,   0, 
+     76,   0,   0,   0, 104,   7, 
+      0,   0,  76,   0,   0, 128, 
+    104,   7,   0,   0,  76,   0, 
+      0,   0, 124,   7,   0,   0, 
+     76,   0,   0, 128, 124,   7, 
+      0,   0,  76,   0,   0,   0, 
+    152,   7,   0,   0,  76,   0, 
+      0, 128, 152,   7,   0,   0, 
+     76,   0,   0,   0, 180,   7, 
+      0,   0,  76,   0,   0, 128, 
+    180,   7,   0,   0,  76,   0, 
+      0,   0, 208,   7,   0,   0, 
+     76,   0,   0, 128, 208,   7, 
+      0,   0,  76,   0,   0,   0, 
+    232,   7,   0,   0,  76,   0, 
+      0, 128, 232,   7,   0,   0, 
+     76,   0,   0,   0,   4,   8, 
+      0,   0,  76,   0,   0, 128, 
+      4,   8,   0,   0,  76,   0, 
+      0,   0,  32,   8,   0,   0, 
+     76,   0,   0, 128,  32,   8, 
+      0,   0,  76,   0,   0,   0, 
+     60,   8,   0,   0,  76,   0, 
+      0, 128,  60,   8,   0,   0, 
+     76,   0,   0,   0,  80,   8, 
+      0,   0,  76,   0,   0, 128, 
+     80,   8,   0,   0,  76,   0, 
+      0,   0, 108,   8,   0,   0, 
+     76,   0,   0, 128, 108,   8, 
+      0,   0,  76,   0,   0,   0, 
+    132,   8,   0,   0,  76,   0, 
+      0, 128, 132,   8,   0,   0, 
+     76,   0,   0,   0, 164,   8, 
+      0,   0,  76,   0,   0, 128, 
+    164,   8,   0,   0,  76,   0, 
+      0,   0, 192,   8,   0,   0, 
+     76,   0,   0, 128, 192,   8, 
+      0,   0,  76,   0,   0,   0, 
+    212,   8,   0,   0,  76,   0, 
+      0, 128, 212,   8,   0,   0, 
+     76,   0,   0,   0, 240,   8, 
+      0,   0,  76,   0,   0, 128, 
+    240,   8,   0,   0,  76,   0, 
+      0,   0,  12,   9,   0,   0, 
+     77,   0,   0, 128,  12,   9, 
+      0,   0,  77,   0,   0,   0, 
+     32,   9,   0,   0,  77,   0, 
+      0, 128,  32,   9,   0,   0, 
+     77,   0,   0,   0,  60,   9, 
+      0,   0,  77,   0,   0, 128, 
+     60,   9,   0,   0,  77,   0, 
+      0,   0,  72,   9,   0,   0, 
+     78,   0,   0, 128,  72,   9, 
+      0,   0,  78,   0,   0,   0, 
+    116,   9,   0,   0,  78,   0, 
+      0, 128, 116,   9,   0,   0, 
+     78,   0,   0,   0, 160,   9, 
+      0,   0,  78,   0,   0, 128, 
+    160,   9,   0,   0,  78,   0, 
+      0,   0, 204,   9,   0,   0, 
+     78,   0,   0, 128, 204,   9, 
+      0,   0,  78,   0,   0,   0, 
+    232,   9,   0,   0,  78,   0, 
+      0, 128, 232,   9,   0,   0, 
+     78,   0,   0,   0,   4,  10, 
+      0,   0,  78,   0,   0, 128, 
+      4,  10,   0,   0,  78,   0, 
+      0,   0,  32,  10,   0,   0, 
+     78,   0,   0, 128,  32,  10, 
+      0,   0,  78,   0,   0,   0, 
+     36,  10,   0,   0,  79,   0, 
+      0, 128,  36,  10,   0,   0, 
+     79,   0,   0,   0,  40,  10, 
+      0,   0,  80,   0,   0, 128, 
+     40,  10,   0,   0,  68,   0, 
+      0,   0,  68,  10,   0,   0, 
+     80,   0,   0, 128,  68,  10, 
+      0,   0,  80,   0,   0,   0, 
+     72,  10,   0,   0,  81,   0, 
+      0, 128,  72,  10,   0,   0, 
+     81,   0,   0,   0, 116,  10, 
+      0,   0,  82,   0,   0, 128, 
+    116,  10,   0,   0,  82,   0, 
+      0,   0, 148,  10,   0,   0, 
+     82,   0,   0, 128, 148,  10, 
+      0,   0,  82,   0,   0,   0, 
+    180,  10,   0,   0,  82,   0, 
+      0, 128, 180,  10,   0,   0, 
+     82,   0,   0,   0, 208,  10, 
+      0,   0,  82,   0,   0, 128, 
+    208,  10,   0,   0,  82,   0, 
+      0,   0, 240,  10,   0,   0, 
+     82,   0,   0, 128, 240,  10, 
+      0,   0,  82,   0,   0,   0, 
+     12,  11,   0,   0,  82,   0, 
+      0, 128,  12,  11,   0,   0, 
+     82,   0,   0,   0,  52,  11, 
+      0,   0,  82,   0,   0, 128, 
+     52,  11,   0,   0,  82,   0, 
+      0,   0,  92,  11,   0,   0, 
+     83,   0,   0, 128,  92,  11, 
+      0,   0,  83,   0,   0,   0, 
+    112,  11,   0,   0,  84,   0, 
+      0, 128, 112,  11,   0,   0, 
+     84,   0,   0,   0, 132,  11, 
+      0,   0,  84,   0,   0, 128, 
+    132,  11,   0,   0,  84,   0, 
+      0,   0, 152,  11,   0,   0, 
+     84,   0,   0, 128, 152,  11, 
+      0,   0,  84,   0,   0,   0, 
+      5,   0,  44,   0,  27,   0, 
+     43,   0,   5,   0,  45,   0, 
+     28,   0,  44,   0,   5,   0, 
+     48,   0,  14,   0,  18,   0, 
+      5,   0,  48,   0,   5,   0, 
+     48,   0,   5,   0,  48,   0, 
+      5,   0,  48,   0,   5,   0, 
+     48,   0,   5,   0,  48,   0, 
+      5,   0,  48,   0,  21,   0, 
+     41,   0,   5,   0,  48,   0, 
+     21,   0,  41,   0,   9,   0, 
+     67,   0,  33,   0,  49,   0, 
+      9,   0,  67,   0,  33,   0, 
+     49,   0,   9,   0,  67,   0, 
+     33,   0,  49,   0,   9,   0, 
+     67,   0,  32,   0,  59,   0, 
+      9,   0,  67,   0,  13,   0, 
+     61,   0,   9,   0,  67,   0, 
+     13,   0,  65,   0,   9,   0, 
+     67,   0,  13,   0,  65,   0, 
+      9,   0,  67,   0,   9,   0, 
+     67,   0,  13,   0,  21,   0, 
+     44,   0,  46,   0,  13,   0, 
+     21,   0,  13,   0,  21,   0, 
+     21,   0,  21,   0,  21,   0, 
+     21,   0,   9,   0, 100,   0, 
+     25,   0,  41,   0,   9,   0, 
+    100,   0,  25,   0,  41,   0, 
+      9,   0, 100,   0,  25,   0, 
+     41,   0,   9,   0, 100,   0, 
+     71,   0,  87,   0,   9,   0, 
+    100,   0,  71,   0,  87,   0, 
+      9,   0, 100,   0,  71,   0, 
+     87,   0,   9,   0, 100,   0, 
+     70,   0,  97,   0,   9,   0, 
+    100,   0,  51,   0,  99,   0, 
+      9,   0, 100,   0,  25,   0, 
+     99,   0,   9,   0, 100,   0, 
+      9,   0,  99,   0,  44,   0, 
+     46,   0,  44,   0,  46,   0, 
+      5,   0,   5,   0,   5,   0, 
+      5,   0,   5,   0,  46,   0, 
+     14,   0,  18,   0,   5,   0, 
+     46,   0,   5,   0,  46,   0, 
+      5,   0,  46,   0,   5,   0, 
+     46,   0,   5,   0,  46,   0, 
+      5,   0,  46,   0,   5,   0, 
+     46,   0,   5,   0,  46,   0, 
+      5,   0,  46,   0,  21,   0, 
+     39,   0,   5,   0,  46,   0, 
+     21,   0,  39,   0,   9,   0, 
+     73,   0,  27,   0,  42,   0, 
+      9,   0,  73,   0,  27,   0, 
+     42,   0,   9,   0,  73,   0, 
+     27,   0,  42,   0,   9,   0, 
+     73,   0,  27,   0,  72,   0, 
+      9,   0,  73,   0,  27,   0, 
+     72,   0,   9,   0,  68,   0, 
+     24,   0,  39,   0,   9,   0, 
+     68,   0,  50,   0,  67,   0, 
+      9,   0,  68,   0,  50,   0, 
+     67,   0,   9,   0,  68,   0, 
+     24,   0,  67,   0,   9,   0, 
+     61,   0,  38,   0,  58,   0, 
+      9,   0,  61,   0,  38,   0, 
+     58,   0,   9,   0,  61,   0, 
+     38,   0,  58,   0,   9,   0, 
+     61,   0,  19,   0,  60,   0, 
+      9,   0,  19,   0,  13,   0, 
+     17,   0,   9,   0,  19,   0, 
+     13,   0,  17,   0,   9,   0, 
+     19,   0,   9,   0,  19,   0, 
+     13,   0,  64,   0,  29,   0, 
+     44,   0,  13,   0,  64,   0, 
+     29,   0,  44,   0,  13,   0, 
+     64,   0,  29,   0,  44,   0, 
+     13,   0,  64,   0,  29,   0, 
+     54,   0,  13,   0,  64,   0, 
+     29,   0,  63,   0,  13,   0, 
+     64,   0,  13,   0,  63,   0, 
+     13,   0, 133,   0,  53,   0, 
+     61,   0,  13,   0, 133,   0, 
+     42,   0,  63,   0,  13,   0, 
+    133,   0,  42,   0,  63,   0, 
+     13,   0, 133,   0,  42,   0, 
+     63,   0,  13,   0, 133,   0, 
+     33,   0,  79,   0,  13,   0, 
+    133,   0,  33,   0,  79,   0, 
+     13,   0, 133,   0,  33,   0, 
+     79,   0,  13,   0, 133,   0, 
+     33,   0,  79,   0,  13,   0, 
+    133,   0,  33,   0,  79,   0, 
+     13,   0, 133,   0,  22,   0, 
+     81,   0,  13,   0, 133,   0, 
+     22,   0,  81,   0,  13,   0, 
+    133,   0,  22,   0,  81,   0, 
+     13,   0, 133,   0,  95,   0, 
+    128,   0,  13,   0, 133,   0, 
+     95,   0, 128,   0,  13,   0, 
+    133,   0,  84,   0, 130,   0, 
+     13,   0, 133,   0,  84,   0, 
+    130,   0,  13,   0, 133,   0, 
+     84,   0, 130,   0,  13,   0, 
+    133,   0,  17,   0, 132,   0, 
+     13,   0,  23,   0,  17,   0, 
+     21,   0,  13,   0,  23,   0, 
+     17,   0,  21,   0,  13,   0, 
+     23,   0,  13,   0,  23,   0, 
+     17,   0,  69,   0,  34,   0, 
+     49,   0,  17,   0,  69,   0, 
+     34,   0,  49,   0,  17,   0, 
+     69,   0,  34,   0,  49,   0, 
+     17,   0,  69,   0,  34,   0, 
+     59,   0,  17,   0,  69,   0, 
+     34,   0,  68,   0,  17,   0, 
+     69,   0,  17,   0,  68,   0, 
+     69,   0,  69,   0,  69,   0, 
+     69,   0,   9,   0,   9,   0, 
+      9,   0,   9,   0,   5,   0, 
+      5,   0,  42,   0,  44,   0, 
+      5,   0,   5,   0,   5,   0, 
+      5,   0,   5,   0,  73,   0, 
+     28,   0,  72,   0,   5,   0, 
+    227,   0,  37,   0,  65,   0, 
+      5,   0, 227,   0,  69,   0, 
+    142,   0,   5,   0, 227,   0, 
+     37,   0, 142,   0,   5,   0, 
+    227,   0, 146,   0, 224,   0, 
+      5,   0, 227,   0,  37,   0, 
+    224,   0,   5,   0, 227,   0, 
+     27,   0, 226,   0,   5,   0, 
+    227,   0,  27,   0, 226,   0, 
+      5,   0,  37,   0,   5,   0, 
+     36,   0,   5,   0,  24,   0, 
+      5,   0,  24,   0,   5,   0, 
+     24,   0,   5,   0,  24,   0, 
+      5,   0,  24,   0,   5,   0, 
+     24,   0, 246,   0,   0,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,  44,   0,   0,   0, 
+      0,   0,   0,   0,  36,   0, 
+      0,   0,  72,   0,   0,   0, 
+    104,   0,   0,   0, 136,   0, 
+      0,   0, 172,   0,   0,   0, 
+    208,   0,   0,   0, 244,   0, 
+      0,   0,  28,   1,   0,   0, 
+     64,   1,   0,   0, 100,   1, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  26,   2,   0,   0, 
+      0,   0, 242, 241,  10,   0, 
+     24,  21,  21,  16,   0,   0, 
+      1,   0,   1,   0,  10,   0, 
+     24,  21,  22,  16,   0,   0, 
+      1,   0,   0,   2,  58,   0, 
+      3,  18,  13,  21,   3,   0, 
+      2,  16,   0,   0,   0,   0, 
+    112, 111, 115, 105, 116, 105, 
+    111, 110,   0, 241,  13,  21, 
+      3,   0,   2,  16,   0,   0, 
+     16,   0,  99, 111, 108, 111, 
+    114,   0,  13,  21,   3,   0, 
+     64,   0,   0,   0,  28,   0, 
+    114,  97, 100, 105, 117, 115, 
+      0, 243, 242, 241,  34,   0, 
+      5,  21,   3,   0,   0,   0, 
+     24,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     32,   0,  80, 111, 105, 110, 
+    116,  76, 105, 103, 104, 116, 
+      0, 243, 242, 241,  14,   0, 
+     23,  21,  25,  16,   0,   0, 
+     26,   2,   0,   0,   0,   0, 
+    242, 241,  10,   0,  24,  21, 
+     26,  16,   0,   0,   1,   0, 
+      1,   0,  10,   0,  24,  21, 
+     27,  16,   0,   0,   1,   0, 
+      0,   2,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1533,12 +3334,120 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  11, 202,  49,   1, 
-     56,   0,   0,   0,   0,  16, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  11, 202, 
+     49,   1,  56,   0,   0,   0, 
+      0,  16,   0,   0,  29,  16, 
+      0,   0, 112,   2,   0,   0, 
+     10,   0, 255, 255,   4,   0, 
+      0,   0, 255, 255,   3,   0, 
+      0,   0,   0,   0, 116,   0, 
+      0,   0, 116,   0,   0,   0, 
+      8,   0,   0,   0, 124,   0, 
+      0,   0,   0,   0,   0,   0, 
+     22,   0,  27,  21,  64,   0, 
+      0,   0,   4,   0,   0,   0, 
+     16,   0, 102, 108, 111,  97, 
+    116,  52,   0, 243, 242, 241, 
+     22,   0,  27,  21,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+      8,   0, 102, 108, 111,  97, 
+    116,  50,   0, 243, 242, 241, 
+     22,   0,  27,  21,  64,   0, 
+      0,   0,   3,   0,   0,   0, 
+     12,   0, 102, 108, 111,  97, 
+    116,  51,   0, 243, 242, 241, 
+     78,   0,   3,  18,  13,  21, 
+      3,   0,   0,  16,   0,   0, 
+      0,   0, 119, 111, 114, 108, 
+    100,  80, 111, 115,   0, 241, 
+     13,  21,   3,   0,   0,  16, 
+      0,   0,  16,   0, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+      0, 241,  13,  21,   3,   0, 
+      1,  16,   0,   0,  32,   0, 
+    116, 101, 120,   0, 242, 241, 
+     13,  21,   3,   0,   2,  16, 
+      0,   0,  40,   0, 110, 111, 
+    114, 109,  97, 108,   0, 243, 
+    242, 241,  38,   0,   5,  21, 
+      4,   0,   0,   0,   3,  16, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  52,   0, 
+     80, 105, 120, 101, 108,  73, 
+    110, 112, 117, 116,  84, 121, 
+    112, 101,   0, 243, 242, 241, 
+     10,   0,   1,  18,   1,   0, 
+      0,   0,   4,  16,   0,   0, 
+     10,   0,  24,  21,   0,  16, 
+      0,   0,   1,   0,   1,   0, 
+     14,   0,   8,  16,   6,  16, 
+      0,   0,  23,   0,   1,   0, 
+      5,  16,   0,   0,  14,   0, 
+     23,  21,   0,  16,   0,   0, 
+      3,   2,  48,   4,   0,   0, 
+    242, 241,  10,   0,  24,  21, 
+      8,  16,   0,   0,   1,   0, 
+      1,   0,  10,   0,  24,  21, 
+      9,  16,   0,   0,   1,   0, 
+      0,   2,  14,   0,  23,  21, 
+      0,   0,   0,   0,  10,   2, 
+      0,   0,   0,   0, 242, 241, 
+     10,   0,  24,  21,  11,  16, 
+      0,   0,   1,   0,   1,   0, 
+     10,   0,  24,  21,  12,  16, 
+      0,   0,   1,   0,   0,   2, 
+     10,   0,  24,  21,   6,  16, 
+      0,   0,   1,   0,   0,   2, 
+     10,   0,  24,  21,  64,   0, 
+      0,   0,   1,   0,   1,   0, 
+     10,   0,  24,  21,  15,  16, 
+      0,   0,   1,   0,   0,   2, 
+     10,   0,  24,  21, 116,   0, 
+      0,   0,   1,   0,   1,   0, 
+     10,   0,  24,  21,  17,  16, 
+      0,   0,   1,   0,   0,   2, 
+     38,   0,   3,  18,  13,  21, 
+      3,   0,   2,  16,   0,   0, 
+      0,   0, 100, 105, 114, 101, 
+     99, 116, 105, 111, 110,   0, 
+     13,  21,   3,   0,   2,  16, 
+      0,   0,  16,   0,  99, 111, 
+    108, 111, 114,   0,  34,   0, 
+      5,  21,   2,   0,   0,   0, 
+     19,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     28,   0,  68, 105, 102, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116,   0, 241,  14,   0, 
+     23,  21,  20,  16,   0,   0, 
+     11, 202,  49,   1,  56,   0, 
       0,   0,   0,  16,   0,   0, 
-      0,   0,   0,   0,  11,   0, 
-    255, 255,   4,   0,   0,   0, 
-    255, 255,   3,   0,   0,   0, 
+      0,  16,   0,   0,   0,   0, 
+      0,   0,  11,   0, 255, 255, 
+      4,   0,   0,   0, 255, 255, 
+      3,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1618,7 +3527,129 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  47,  47, 
+      0,   0,  32,  80, 111, 105, 
+    110, 116,  76, 105, 103, 104, 
+    116,  13,  10, 123,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  51,  32, 112, 
+    111, 115, 105, 116, 105, 111, 
+    110,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  51,  32,  99, 111, 108, 
+    111, 114,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  32, 114,  97, 100, 
+    105, 117, 115,  59,  13,  10, 
+    125,  59,  13,  10,  13,  10, 
+     83, 116, 114, 117,  99, 116, 
+    117, 114, 101, 100,  66, 117, 
+    102, 102, 101, 114,  60,  32, 
+     68, 105, 102, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+     32,  62,  32, 100, 105, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116, 115,  32,  58,  32, 
+    114, 101, 103, 105, 115, 116, 
+    101, 114,  40,  32, 116,  49, 
+     32,  41,  59,  13,  10,  83, 
+    116, 114, 117,  99, 116, 117, 
+    114, 101, 100,  66, 117, 102, 
+    102, 101, 114,  60,  32,  80, 
+    111, 105, 110, 116,  76, 105, 
+    103, 104, 116,  32,  62,  32, 
+    112, 111, 105, 110, 116,  76, 
+    105, 103, 104, 116, 115,  32, 
+     58,  32, 114, 101, 103, 105, 
+    115, 116, 101, 114,  40,  32, 
+    116,  50,  32,  41,  59,  13, 
+     10,  13,  10,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  13, 
+     10,  47,  47,  32,  84,  89, 
+     80,  69,  68,  69,  70,  83, 
+     32,  47,  47,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  13,  10,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  13,  10, 115, 116, 114, 
+    117,  99, 116,  32,  80, 105, 
+    120, 101, 108,  73, 110, 112, 
+    117, 116,  84, 121, 112, 101, 
+     13,  10, 123,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  52,  32, 119, 111, 
+    114, 108, 100,  80, 111, 115, 
+     32,  58,  32,  80,  79,  83, 
+     73,  84,  73,  79,  78,  59, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  52, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  32,  58,  32, 
+     83,  86,  95,  80,  79,  83, 
+     73,  84,  73,  79,  78,  59, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  50, 
+     32, 116, 101, 120,  32,  58, 
+     32,  84,  69,  88,  67,  79, 
+     79,  82,  68,  48,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  51,  32, 
+    110, 111, 114, 109,  97, 108, 
+     32,  58,  32,  84,  69,  88, 
+     67,  79,  79,  82,  68,  49, 
+     59,  13,  10, 125,  59,  13, 
+     10,  13,  10,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
@@ -1676,44 +3707,169 @@ const BYTE UIPixelShader[] =
      32,  83,  86,  95,  84,  65, 
      82,  71,  69,  84,  13,  10, 
     123,  13,  10,  32,  32,  32, 
-     32,  47,  47, 114, 101, 116, 
-    117, 114, 110,  32, 102, 108, 
-    111,  97, 116,  52,  40,  32, 
-     48,  46,  53,  44,  32,  48, 
-     46,  53,  44,  32,  48,  46, 
-     53,  44,  32,  48,  46,  53, 
-     32,  41,  59,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  32,  32,  32,  32,  47, 
-     47,  32,  83,  97, 109, 112, 
-    108, 101,  32, 116, 104, 101, 
-     32, 112, 105, 120, 101, 108, 
-     32,  99, 111, 108, 111, 114, 
-     32, 102, 114, 111, 109,  32, 
-    116, 104, 101,  32, 116, 101, 
-    120, 116, 117, 114, 101,  32, 
-    117, 115, 105, 110, 103,  32, 
-    116, 104, 101,  32, 115,  97, 
-    109, 112, 108, 101, 114,  32, 
-     97, 116,  32, 116, 104, 105, 
-    115,  32, 116, 101, 120, 116, 
-    117, 114, 101,  32,  99, 111, 
-    111, 114, 100, 105, 110,  97, 
-    116, 101,  32, 108, 111,  99, 
-     97, 116, 105, 111, 110,  46, 
-     32,  32,  32,  13,  10,  32, 
+     32, 102, 108, 111,  97, 116, 
+     51,  32, 100, 105, 102, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116,  32,  61,  32, 102, 
+    108, 111,  97, 116,  51,  40, 
+     32,  48,  44,  32,  48,  44, 
+     32,  48,  32,  41,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  51,  32, 
+    115, 112, 101,  99, 117, 108, 
+     97, 114,  76, 105, 103, 104, 
+    116,  32,  61,  32, 102, 108, 
+    111,  97, 116,  51,  40,  32, 
+     48,  44,  32,  48,  44,  32, 
+     48,  32,  41,  59,  13,  10, 
+     32,  32,  32,  32, 102, 111, 
+    114,  40,  32, 105, 110, 116, 
+     32, 106,  32,  61,  32,  48, 
+     59,  32, 106,  32,  60,  32, 
+    100, 105, 102, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+     67, 111, 117, 110, 116,  59, 
+     32, 106,  43,  43,  32,  41, 
+     13,  10,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 105, 
+    102,  40,  32, 100, 111, 116, 
+     40,  32, 105, 110, 112, 117, 
+    116,  46, 110, 111, 114, 109, 
+     97, 108,  44,  32,  45, 100, 
+    105, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116, 115,  91, 
+     32, 106,  32,  93,  46, 100, 
+    105, 114, 101,  99, 116, 105, 
+    111, 110,  32,  41,  32,  60, 
+     32,  48,  32,  41,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     99, 111, 110, 116, 105, 110, 
+    117, 101,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 100, 105, 102, 102, 117, 
+    115, 101,  76, 105, 103, 104, 
+    116,  32,  43,  61,  32, 100, 
+    105, 102, 117, 115, 101,  76, 
+    105, 103, 104, 116, 115,  91, 
+     32, 106,  32,  93,  46,  99, 
+    111, 108, 111, 114,  32,  42, 
+     32, 100, 111, 116,  40,  32, 
+    105, 110, 112, 117, 116,  46, 
+    110, 111, 114, 109,  97, 108, 
+     44,  32,  45, 100, 105, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116, 115,  91,  32, 106, 
+     32,  93,  46, 100, 105, 114, 
+    101,  99, 116, 105, 111, 110, 
+     32,  41,  59,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     32,  32,  32,  32, 102, 111, 
+    114,  40,  32, 105, 110, 116, 
+     32, 105,  32,  61,  32,  48, 
+     59,  32, 105,  32,  60,  32, 
+    112, 111, 105, 110, 116,  76, 
+    105, 103, 104, 116,  67, 111, 
+    117, 110, 116,  59,  32, 105, 
+     43,  43,  32,  41,  13,  10, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
      32,  32,  32, 102, 108, 111, 
-     97, 116,  52,  32, 116, 101, 
-    120, 116, 117, 114, 101,  67, 
+     97, 116,  51,  32, 108, 105, 
+    103, 104, 116,  68, 105, 114, 
+     32,  61,  32, 112, 111, 105, 
+    110, 116,  76, 105, 103, 104, 
+    116, 115,  91,  32, 105,  32, 
+     93,  46, 112, 111, 115, 105, 
+    116, 105, 111, 110,  32,  45, 
+     32, 105, 110, 112, 117, 116, 
+     46, 119, 111, 114, 108, 100, 
+     80, 111, 115,  46, 120, 121, 
+    122,  59,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  32, 
+    102,  97,  99, 116, 111, 114, 
+     32,  61,  32, 112, 111, 105, 
+    110, 116,  76, 105, 103, 104, 
+    116, 115,  91,  32, 105,  32, 
+     93,  46, 114,  97, 100, 105, 
+    117, 115,  32,  47,  32, 108, 
+    101, 110, 103, 116, 104,  40, 
+     32, 108, 105, 103, 104, 116, 
+     68, 105, 114,  32,  41,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  32, 102,  32, 
+     61,  32, 100, 111, 116,  40, 
+     32, 105, 110, 112, 117, 116, 
+     46, 110, 111, 114, 109,  97, 
+    108,  44,  32, 110, 111, 114, 
+    109,  97, 108, 105, 122, 101, 
+     40,  32, 108, 105, 103, 104, 
+    116,  68, 105, 114,  32,  41, 
+     32,  41,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 105, 102,  40,  32, 102, 
+     32,  62,  32,  48,  32,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 100, 105, 102, 102, 117, 
+    115, 101,  76, 105, 103, 104, 
+    116,  32,  43,  61,  32, 112, 
+    111, 105, 110, 116,  76, 105, 
+    103, 104, 116, 115,  91,  32, 
+    105,  32,  93,  46,  99, 111, 
+    108, 111, 114,  32,  42,  32, 
+    102,  32,  42,  32, 102,  97, 
+     99, 116, 111, 114,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 102,  32,  61,  32, 100, 
+    111, 116,  40,  32, 110, 111, 
+    114, 109,  97, 108, 105, 122, 
+    101,  40,  32, 114, 101, 102, 
+    108, 101,  99, 116,  40,  32, 
+    110, 111, 114, 109,  97, 108, 
+    105, 122, 101,  40,  32,  45, 
+    108, 105, 103, 104, 116,  68, 
+    105, 114,  32,  41,  44,  32, 
+    105, 110, 112, 117, 116,  46, 
+    110, 111, 114, 109,  97, 108, 
+     32,  41,  32,  41,  44,  32, 
+    110, 111, 114, 109,  97, 108, 
+    105, 122, 101,  40,  32, 107, 
+     80, 111, 115, 105, 116, 105, 
+    111, 110,  46, 120, 121, 122, 
+     32,  45,  32, 105, 110, 112, 
+    117, 116,  46, 119, 111, 114, 
+    108, 100,  80, 111, 115,  46, 
+    120, 121, 122,  32,  41,  32, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32, 105, 102, 
+     40,  32, 102,  32,  62,  32, 
+     48,  32,  41,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32, 115, 112, 101, 
+     99, 117, 108,  97, 114,  76, 
+    105, 103, 104, 116,  32,  43, 
+     61,  32, 112, 111, 105, 110, 
+    116,  76, 105, 103, 104, 116, 
+    115,  91,  32, 105,  32,  93, 
+     46,  99, 111, 108, 111, 114, 
+     32,  42,  32, 102,  32,  42, 
+     32, 102,  97,  99, 116, 111, 
+    114,  59,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    125,  13,  10,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  52,  32, 109,  97, 116, 
+    101, 114, 105,  97, 108,  67, 
     111, 108, 111, 114,  32,  61, 
      32, 115, 104,  97, 100, 101, 
     114,  84, 101, 120, 116, 117, 
@@ -1723,18 +3879,61 @@ const BYTE UIPixelShader[] =
     121, 112, 101,  44,  32, 105, 
     110, 112, 117, 116,  46, 116, 
     101, 120,  32,  41,  59,  13, 
-     10,  32,  32,  32,  32, 114, 
-    101, 116, 117, 114, 110,  32, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  52,  32, 
+    116, 101, 120, 116, 117, 114, 
+    101,  67, 111, 108, 111, 114, 
+     32,  61,  32, 115,  97, 116, 
+    117, 114,  97, 116, 101,  40, 
+     32, 109,  97, 116, 101, 114, 
+    105,  97, 108,  67, 111, 108, 
+    111, 114,  32,  42,  32,  97, 
+    109,  98, 105, 101, 110, 116, 
+     70,  97,  99, 116, 111, 114, 
+     32,  43,  32, 102, 108, 111, 
+     97, 116,  52,  40,  32, 100, 
+    105, 102, 102, 117, 115, 101, 
+     76, 105, 103, 104, 116,  46, 
+    120,  44,  32, 100, 105, 102, 
+    102, 117, 115, 101,  76, 105, 
+    103, 104, 116,  46, 121,  44, 
+     32, 100, 105, 102, 102, 117, 
+    115, 101,  76, 105, 103, 104, 
+    116,  46, 122,  44,  32,  48, 
+     32,  41,  32,  42,  32, 100, 
+    105, 102, 102, 117, 115,  70, 
+     97,  99, 116, 111, 114,  32, 
+     43,  32, 102, 108, 111,  97, 
+    116,  52,  40,  32, 115, 112, 
+    101,  99, 117, 108,  97, 114, 
+     76, 105, 103, 104, 116,  46, 
+    120,  44,  32, 115, 112, 101, 
+     99, 117, 108,  97, 114,  76, 
+    105, 103, 104, 116,  46, 121, 
+     44,  32, 115, 112, 101,  99, 
+    117, 108,  97, 114,  76, 105, 
+    103, 104, 116,  46, 122,  44, 
+     32,  48,  32,  41,  32,  42, 
+     32, 115, 112, 101,  99, 117, 
+    108,  97, 114,  70,  97,  99, 
+    116, 111, 114,  32,  41,  59, 
+     13,  10,  32,  32,  32,  32, 
     116, 101, 120, 116, 117, 114, 
     101,  67, 111, 108, 111, 114, 
-     59,  13,  10, 125,   0,   7, 
+     46,  97,  32,  61,  32, 109, 
+     97, 116, 101, 114, 105,  97, 
+    108,  67, 111, 108, 111, 114, 
+     46,  97,  59,  13,  10,  32, 
+     32,  32,  32, 114, 101, 116, 
+    117, 114, 110,  32, 116, 101, 
+    120, 116, 117, 114, 101,  67, 
+    111, 108, 111, 114,  59,  13, 
+     10, 125,   0,   7,   0,   0, 
+      0,   0,   0,   0,   0,  91, 
       0,   0,   0, 182,   0,   0, 
-      0,  91,   0,   0,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,  92,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   4,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,  92, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   4, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1755,10 +3954,13 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     68,  51,  68,  83,  72,  68, 
+     82,   0, 156,  11,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     32,   0,   0,  96,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1789,13 +3991,10 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  68,  51,  68,  83, 
-     72,  68,  82,   0, 140,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  32,   0,   0,  96, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1840,12 +4039,31 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+     26,   9,  47, 241,  88,   0, 
+      0,   0,  48,   2,   0,   0, 
+     37,   0,   0,   0,   1,   0, 
+      0,   0,  29,   1,   0,   0, 
+      1,   0,   0,   0,  65,   1, 
+      0,   0,   1,   0,   0,   0, 
+    245,   0,   0,   0,   1,   0, 
+      0,   0, 209,   0,   0,   0, 
+      1,   0,   0,   0, 173,   0, 
+      0,   0,   1,   0,   0,   0, 
+    101,   1,   0,   0,   1,   0, 
+      0,   0, 137,   0,   0,   0, 
+      1,   0,   0,   0, 105,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  73,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1856,6 +4074,7 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  32,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1863,24 +4082,21 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0, 128,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,  64, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255,  26,   9,  47, 241, 
-     24,   0,   0,   0,  16,   2, 
-      0,   0,  37,   0,   0,   0, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-     73,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1888,13 +4104,13 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1905,7 +4121,9 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     32,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   2,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1915,14 +4133,23 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,  16,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0, 128,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  12,   0,   0,   0, 
+     24,   0,   0,   0,  36,   0, 
+      0,   0,  48,   0,   0,   0, 
+     60,   0,   0,   0,  72,   0, 
+      0,   0,  84,   0,   0,   0, 
+     96,   0,   0,   0, 108,   0, 
+      0,   0, 120,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1958,17 +4185,14 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,  16,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0, 128, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     12,   0,   0,   0,  24,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1986,6 +4210,71 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+     34,   0,  37,  17,   0,   0, 
+      0,   0, 140,   0,   0,   0, 
+      1,   0,  84, 101, 120, 116, 
+    117, 114, 101,  80, 105, 120, 
+    101, 108,  83, 104,  97, 100, 
+    101, 114,   0,   0,   0,   0, 
+     34,   0,  81,  17,  10,  16, 
+      0,   0,   7,   0, 255, 255, 
+    255, 255,   0,   0, 255, 255, 
+    255, 255, 115, 104,  97, 100, 
+    101, 114,  84, 101, 120, 116, 
+    117, 114, 101,   0,   0,   0, 
+     30,   0,  81,  17,  13,  16, 
+      0,   0,   6,   0, 255, 255, 
+    255, 255, 255, 255,   0,   0, 
+    255, 255,  83,  97, 109, 112, 
+    108, 101,  84, 121, 112, 101, 
+      0,   0,  30,   0,  81,  17, 
+     14,  16,   0,   0,   8,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255, 255, 255, 107,  80, 
+    111, 115, 105, 116, 105, 111, 
+    110,   0,   0,   0,  34,   0, 
+     81,  17,  16,  16,   0,   0, 
+      8,   0,   1,   0,   0,   0, 
+    255, 255, 255, 255, 255, 255, 
+     97, 109,  98, 105, 101, 110, 
+    116,  70,  97,  99, 116, 111, 
+    114,   0,   0,   0,  34,   0, 
+     81,  17,  16,  16,   0,   0, 
+      8,   0,   1,   0,   4,   0, 
+    255, 255, 255, 255, 255, 255, 
+    100, 105, 102, 102, 117, 115, 
+     70,  97,  99, 116, 111, 114, 
+      0,   0,   0,   0,  34,   0, 
+     81,  17,  16,  16,   0,   0, 
+      8,   0,   1,   0,   8,   0, 
+    255, 255, 255, 255, 255, 255, 
+    115, 112, 101,  99, 117, 108, 
+     97, 114,  70,  97,  99, 116, 
+    111, 114,   0,   0,  38,   0, 
+     81,  17,  18,  16,   0,   0, 
+      8,   0,   2,   0,   0,   0, 
+    255, 255, 255, 255, 255, 255, 
+    100, 105, 102, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+     67, 111, 117, 110, 116,   0, 
+      0,   0,  34,   0,  81,  17, 
+     18,  16,   0,   0,   8,   0, 
+      2,   0,   4,   0, 255, 255, 
+    255, 255, 255, 255, 112, 111, 
+    105, 110, 116,  76, 105, 103, 
+    104, 116,  67, 111, 117, 110, 
+    116,   0,  34,   0,  81,  17, 
+     23,  16,   0,   0,   7,   0, 
+    255, 255, 255, 255,   1,   0, 
+    255, 255, 255, 255, 100, 105, 
+    102, 117, 115, 101,  76, 105, 
+    103, 104, 116, 115,   0,   0, 
+      0,   0,  30,   0,  81,  17, 
+     28,  16,   0,   0,   7,   0, 
+    255, 255, 255, 255,   2,   0, 
+    255, 255, 255, 255, 112, 111, 
+    105, 110, 116,  76, 105, 103, 
+    104, 116, 115,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2006,10 +4295,13 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,  26,   9, 
+     47, 241,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2045,24 +4337,6 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  34,   0,  37,  17, 
-      0,   0,   0,   0, 140,   0, 
-      0,   0,   1,   0,  84, 101, 
-    120, 116, 117, 114, 101,  80, 
-    105, 120, 101, 108,  83, 104, 
-     97, 100, 101, 114,   0,   0, 
-      0,   0,  34,   0,  81,  17, 
-      9,  16,   0,   0,   7,   0, 
-    255, 255, 255, 255,   0,   0, 
-    255, 255, 255, 255, 115, 104, 
-     97, 100, 101, 114,  84, 101, 
-    120, 116, 117, 114, 101,   0, 
-      0,   0,  30,   0,  81,  17, 
-     12,  16,   0,   0,   6,   0, 
-    255, 255, 255, 255, 255, 255, 
-      0,   0, 255, 255,  83,  97, 
-    109, 112, 108, 101,  84, 121, 
-    112, 101,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2106,507 +4380,70 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255, 119,   9,  49,   1, 
+      1,   0,   0,   0,  13,   0, 
+     10, 140,  14,   0, 180, 156, 
+     15,   0,  11,   0,  88,   0, 
+      0,   0,  32,   0,   0,   0, 
+     44,   0,   0,   0, 104,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  22,   0, 
+      0,   0,  25,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  16,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  77,   0, 
-      0,   0,   0,   0, 100,   0, 
-    101,   0, 255, 255, 255, 255, 
-     26,   9,  47, 241,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255, 119,   9, 
-     49,   1,   1,   0,   0,   0, 
-     13,   0,  10, 140,  14,   0, 
-    180, 156,  15,   0,  11,   0, 
-     88,   0,   0,   0,  32,   0, 
-      0,   0,  44,   0,   0,   0, 
-    104,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     22,   0,   0,   0,  25,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0, 140,   0, 
-      0,   0,  32,   0,   0,  96, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      2,   0,   9,   0, 204,   2, 
-      0,   0,   0,   0,   0,   0, 
-    148,   0,   0,   0,   1,   0, 
-      0,   0, 176, 122, 207,   3, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  84, 101, 120, 116, 
-    117, 114, 101,  80, 105, 120, 
-    101, 108,  83, 104,  97, 100, 
-    101, 114,   0, 110, 111, 110, 
-    101,   0,  45, 186,  46, 241, 
       1,   0,   0,   0,   0,   0, 
-      0,   0, 140,   0,   0,   0, 
+      0,   0, 156,  11,   0,   0, 
      32,   0,   0,  96,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   2,   0, 
-      2,   0,   7,   0,   0,   0, 
-      0,   0,   1,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-    140,   0,   0,   0,   8,   2, 
+      9,   0, 160,   7,   0,   0, 
+      0,   0,   0,   0, 244,   9, 
+      0,   0,   1,   0,   0,   0, 
+     56, 122,  17,   4,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      1,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
-     67,  58,  92,  85, 115, 101, 
-    114, 115,  92, 107, 111, 108, 
-    106,  97,  92,  79, 110, 101, 
-     68, 114, 105, 118, 101,  92, 
-     68, 101, 115, 107, 116, 111, 
-    112,  92,  75, 111, 108, 106, 
-     97,  45,  83, 116, 114, 111, 
-    104, 109,  45,  71,  97, 109, 
-    101, 115,  92,  65, 108, 108, 
-    103, 101, 109, 101, 105, 110, 
-     92,  70, 114,  97, 109, 101, 
-    119, 111, 114, 107,  92,  85, 
-     73,  80, 105, 120, 101, 108, 
+     84, 101, 120, 116, 117, 114, 
+    101,  80, 105, 120, 101, 108, 
      83, 104,  97, 100, 101, 114, 
-     46, 104, 108, 115, 108,   0, 
-      0,   0, 254, 239, 254, 239, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255,  12,   0, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0, 148,  46,  49,   1, 
-    217, 169,  75,  92,   1,   0, 
-      0,   0,  38,  94, 199, 206, 
-    228,  31, 242,  76, 180,  97, 
-     58,  53, 136,  15,  60,  74, 
-    135,   0,   0,   0,  47,  76, 
-    105, 110, 107,  73, 110, 102, 
-    111,   0,  47, 110,  97, 109, 
-    101, 115,   0,  47, 115, 114, 
-     99,  47, 104, 101,  97, 100, 
-    101, 114,  98, 108, 111,  99, 
-    107,   0,  47, 115, 114,  99, 
-     47, 102, 105, 108, 101, 115, 
-     47,  99,  58,  92, 117, 115, 
-    101, 114, 115,  92, 107, 111, 
-    108, 106,  97,  92, 111, 110, 
-    101, 100, 114, 105, 118, 101, 
-     92, 100, 101, 115, 107, 116, 
-    111, 112,  92, 107, 111, 108, 
-    106,  97,  45, 115, 116, 114, 
-    111, 104, 109,  45, 103,  97, 
-    109, 101, 115,  92,  97, 108, 
-    108, 103, 101, 109, 101, 105, 
-    110,  92, 102, 114,  97, 109, 
-    101, 119, 111, 114, 107,  92, 
-    117, 105, 112, 105, 120, 101, 
-    108, 115, 104,  97, 100, 101, 
-    114,  46, 104, 108, 115, 108, 
-      0,   4,   0,   0,   0,   6, 
-      0,   0,   0,   1,   0,   0, 
-      0,  58,   0,   0,   0,   0, 
-      0,   0,   0,  17,   0,   0, 
-      0,   7,   0,   0,   0,  10, 
-      0,   0,   0,   6,   0,   0, 
-      0,   0,   0,   0,   0,   5, 
-      0,   0,   0,  34,   0,   0, 
-      0,   8,   0,   0,   0,   0, 
-      0,   0,   0, 220,  81,  51, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  16,   0, 
-      0,   0,  32,   0,   0,   0, 
-    227,   0,   0,   0,  48,   1, 
-      0,   0, 123,   1,   0,   0, 
-     56,   0,   0,   0,   0,   0, 
-      0,   0, 179,   6,   0,   0, 
-    128,   0,   0,   0, 204,   5, 
-      0,   0, 112,   3,   0,   0, 
-     60,   0,   0,   0,   0,   0, 
-      0,   0,  40,   0,   0,   0, 
-     56,   2,   0,   0,  44,   0, 
-      0,   0, 104,   0,   0,   0, 
-      3,   0,   0,   0,  25,   0, 
-      0,   0,  15,   0,   0,   0, 
-     24,   0,   0,   0,  16,   0, 
-      0,   0,  11,   0,   0,   0, 
-      6,   0,   0,   0,  17,   0, 
-      0,   0,  18,   0,   0,   0, 
-     12,   0,   0,   0,   8,   0, 
-      0,   0,   9,   0,   0,   0, 
-     10,   0,   0,   0,  13,   0, 
-      0,   0,  14,   0,   0,   0, 
-      7,   0,   0,   0,  19,   0, 
-      0,   0,  20,   0,   0,   0, 
-     21,   0,   0,   0,  23,   0, 
-      0,   0,  22,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     26,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+      0, 110, 111, 110, 101,   0, 
+     45, 186,  46, 241,   1,   0, 
       0,   0,   0,   0,   0,   0, 
+    156,  11,   0,   0,  32,   0, 
+      0,  96,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   2,   0, 
+      7,   0,   0,   0,   0,   0, 
+      1,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 156,  11, 
+      0,   0,   8,   2,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    255, 255, 255, 255,   1,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,  67,  58, 
+     92,  85, 115, 101, 114, 115, 
+     92, 107, 111, 108, 106,  97, 
+     92,  79, 110, 101,  68, 114, 
+    105, 118, 101,  92,  68, 101, 
+    115, 107, 116, 111, 112,  92, 
+     75, 111, 108, 106,  97,  45, 
+     83, 116, 114, 111, 104, 109, 
+     45,  71,  97, 109, 101, 115, 
+     92,  65, 108, 108, 103, 101, 
+    109, 101, 105, 110,  92,  70, 
+    114,  97, 109, 101, 119, 111, 
+    114, 107,  92,  85,  73,  80, 
+    105, 120, 101, 108,  83, 104, 
+     97, 100, 101, 114,  46, 104, 
+    108, 115, 108,   0,   0,   0, 
+    254, 239, 254, 239,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255,  12, 
+      0, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2629,8 +4466,44 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    148,  46,  49,   1, 154, 220, 
+     80,  92,   1,   0,   0,   0, 
+     42, 208,   4, 239, 233,  22, 
+    207,  77, 129, 179, 197, 137, 
+    209,  11,  47, 185, 135,   0, 
+      0,   0,  47,  76, 105, 110, 
+    107,  73, 110, 102, 111,   0, 
+     47, 110,  97, 109, 101, 115, 
+      0,  47, 115, 114,  99,  47, 
+    104, 101,  97, 100, 101, 114, 
+     98, 108, 111,  99, 107,   0, 
+     47, 115, 114,  99,  47, 102, 
+    105, 108, 101, 115,  47,  99, 
+     58,  92, 117, 115, 101, 114, 
+    115,  92, 107, 111, 108, 106, 
+     97,  92, 111, 110, 101, 100, 
+    114, 105, 118, 101,  92, 100, 
+    101, 115, 107, 116, 111, 112, 
+     92, 107, 111, 108, 106,  97, 
+     45, 115, 116, 114, 111, 104, 
+    109,  45, 103,  97, 109, 101, 
+    115,  92,  97, 108, 108, 103, 
+    101, 109, 101, 105, 110,  92, 
+    102, 114,  97, 109, 101, 119, 
+    111, 114, 107,  92, 117, 105, 
+    112, 105, 120, 101, 108, 115, 
+    104,  97, 100, 101, 114,  46, 
+    104, 108, 115, 108,   0,   4, 
+      0,   0,   0,   6,   0,   0, 
+      0,   1,   0,   0,   0,  58, 
       0,   0,   0,   0,   0,   0, 
+      0,  17,   0,   0,   0,   7, 
+      0,   0,   0,  10,   0,   0, 
+      0,   6,   0,   0,   0,   0, 
+      0,   0,   0,   5,   0,   0, 
+      0,  34,   0,   0,   0,   8, 
       0,   0,   0,   0,   0,   0, 
+      0, 220,  81,  51,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2678,8 +4551,42 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+     32,   0,   0,   0, 227,   0, 
+      0,   0, 168,   2,   0,   0, 
+    123,   1,   0,   0,  56,   0, 
       0,   0,   0,   0,   0,   0, 
+    139,  13,   0,   0, 128,   0, 
+      0,   0, 164,  12,   0,   0, 
+    196,  17,   0,   0, 124,   0, 
       0,   0,   0,   0,   0,   0, 
+     40,   0,   0,   0, 152,   2, 
+      0,   0,  44,   0,   0,   0, 
+    132,   1,   0,   0,   3,   0, 
+      0,   0,  40,   0,   0,   0, 
+     27,   0,   0,   0,  26,   0, 
+      0,   0,  39,   0,   0,   0, 
+     28,   0,   0,   0,  15,   0, 
+      0,   0,   6,   0,   0,   0, 
+     29,   0,   0,   0,  30,   0, 
+      0,   0,  31,   0,   0,   0, 
+     32,   0,   0,   0,  33,   0, 
+      0,   0,  16,   0,   0,   0, 
+      8,   0,   0,   0,   9,   0, 
+      0,   0,  10,   0,   0,   0, 
+     11,   0,   0,   0,  12,   0, 
+      0,   0,  13,   0,   0,   0, 
+     14,   0,   0,   0,  17,   0, 
+      0,   0,  18,   0,   0,   0, 
+     19,   0,   0,   0,  20,   0, 
+      0,   0,  21,   0,   0,   0, 
+     22,   0,   0,   0,  23,   0, 
+      0,   0,  24,   0,   0,   0, 
+     25,   0,   0,   0,   7,   0, 
+      0,   0,  34,   0,   0,   0, 
+     35,   0,   0,   0,  36,   0, 
+      0,   0,  38,   0,   0,   0, 
+     37,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2729,6 +4636,7 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  41,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2813,5 +4721,5 @@ const BYTE UIPixelShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0
+      0,   0,   0,   0,   0,   0
 };

+ 64 - 4
UIPixelShader.hlsl

@@ -1,16 +1,55 @@
 /////////////                                                                                           
 // GLOBALS //                                                                                           
 /////////////                                                                                           
-Texture2D shaderTexture;
+Texture2D shaderTexture : register( t0 );
 SamplerState SampleType;
 
+// The position of the kamera
+cbuffer Kamera : register( b0 )
+{
+    float4 kPosition;
+}
+
+// these values should sum up to 1
+cbuffer Material : register( b1 )
+{
+    float ambientFactor;
+    float diffusFactor;
+    float specularFactor;
+};
+
+cbuffer LightCount : register( b2 )
+{
+    int diffuseLightCount;
+    int pointLightCount;
+}
+
+// lights
+struct DiffuseLight
+{
+    float3 direction;
+    float3 color;
+};
+
+struct PointLight
+{
+    float3 position;
+    float3 color;
+    float radius;
+};
+
+StructuredBuffer< DiffuseLight > difuseLights : register( t1 );
+StructuredBuffer< PointLight > pointLights : register( t2 );
+
 //////////////                                                                                          
 // TYPEDEFS //                                                                                          
 //////////////                                                                                          
 struct PixelInputType
 {
+    float4 worldPos : POSITION;
     float4 position : SV_POSITION;
     float2 tex : TEXCOORD0;
+    float3 normal : TEXCOORD1;
 };
 
 ////////////////////////////////////////////////////////////////////////////////                        
@@ -18,8 +57,29 @@ struct PixelInputType
 ////////////////////////////////////////////////////////////////////////////////                        
 float4 TexturePixelShader( PixelInputType input ) : SV_TARGET
 {
-    //return float4( 0.5, 0.5, 0.5, 0.5 );                                                              
-    // Sample the pixel color from the texture using the sampler at this texture coordinate location.   
-    float4 textureColor = shaderTexture.Sample( SampleType, input.tex );
+    float3 diffuseLight = float3( 0, 0, 0 );
+    float3 specularLight = float3( 0, 0, 0 );
+    for( int j = 0; j < diffuseLightCount; j++ )
+    {
+        if( dot( input.normal, -difuseLights[ j ].direction ) < 0 )
+            continue;
+        diffuseLight += difuseLights[ j ].color * dot( input.normal, -difuseLights[ j ].direction );
+    }
+    for( int i = 0; i < pointLightCount; i++ )
+    {
+        float3 lightDir = pointLights[ i ].position - input.worldPos.xyz;
+        float factor = pointLights[ i ].radius / length( lightDir );
+        float f = dot( input.normal, normalize( lightDir ) );
+        if( f > 0 )
+        {
+            diffuseLight += pointLights[ i ].color * f * factor;
+            f = dot( normalize( reflect( normalize( -lightDir ), input.normal ) ), normalize( kPosition.xyz - input.worldPos.xyz ) );
+            if( f > 0 )
+                specularLight += pointLights[ i ].color * f * factor;
+        }
+    }
+    float4 materialColor = shaderTexture.Sample( SampleType, input.tex );
+    float4 textureColor = saturate( materialColor * ambientFactor + float4( diffuseLight.x, diffuseLight.y, diffuseLight.z, 0 ) * diffusFactor + float4( specularLight.x, specularLight.y, specularLight.z, 0 ) * specularFactor );
+    textureColor.a = materialColor.a;
     return textureColor;
 }

+ 1415 - 889
UIVertexShader.h

@@ -12,12 +12,21 @@
 //
 // }
 //
+// cbuffer Kamera
+// {
+//
+//   float4x4 view;                     // Offset:    0 Size:    64
+//   float4x4 projection;               // Offset:   64 Size:    64
+//
+// }
+//
 //
 // Resource Bindings:
 //
 // Name                                 Type  Format         Dim      HLSL Bind  Count
 // ------------------------------ ---------- ------- ----------- -------------- ------
 // MatrixBuffer                      cbuffer      NA          NA            cb0      1 
+// Kamera                            cbuffer      NA          NA            cb1      1 
 //
 //
 //
@@ -27,92 +36,135 @@
 // -------------------- ----- ------ -------- -------- ------- ------
 // POSITION                 0   xyzw        0     NONE   float   xyz 
 // TEXCOORD                 0   xy          1     NONE   float   xy  
-// KNOCHEN_ID               0   x           2     NONE    uint   x   
+// NORMAL                   0   xyz         2     NONE   float   xyz 
+// KNOCHEN_ID               0   x           3     NONE    uint   x   
 //
 //
 // Output signature:
 //
 // Name                 Index   Mask Register SysValue  Format   Used
 // -------------------- ----- ------ -------- -------- ------- ------
-// SV_POSITION              0   xyzw        0      POS   float   xyzw
-// TEXCOORD                 0   xy          1     NONE   float   xy  
+// POSITION                 0   xyzw        0     NONE   float   xyzw
+// SV_POSITION              0   xyzw        1      POS   float   xyzw
+// TEXCOORD                 0   xy          2     NONE   float   xy  
+// TEXCOORD                 1   xyz         3     NONE   float   xyz 
 //
 vs_5_0
 dcl_globalFlags refactoringAllowed | skipOptimization
 dcl_constantbuffer CB0[512], dynamicIndexed
+dcl_constantbuffer CB1[8], immediateIndexed
 dcl_input v0.xyz
 dcl_input v1.xy
-dcl_input v2.x
-dcl_output_siv o0.xyzw, position
-dcl_output o1.xy
-dcl_temps 3
+dcl_input v2.xyz
+dcl_input v3.x
+dcl_output o0.xyzw
+dcl_output_siv o1.xyzw, position
+dcl_output o2.xy
+dcl_output o3.xyz
+dcl_temps 5
 //
 // Initial variable locations:
 //   v0.x <- input.position.x; v0.y <- input.position.y; v0.z <- input.position.z; v0.w <- input.position.w; 
 //   v1.x <- input.tex.x; v1.y <- input.tex.y; 
-//   v2.x <- input.knochen; 
-//   o1.x <- <TextureVertexShader return value>.tex.x; o1.y <- <TextureVertexShader return value>.tex.y; 
-//   o0.x <- <TextureVertexShader return value>.position.x; o0.y <- <TextureVertexShader return value>.position.y; o0.z <- <TextureVertexShader return value>.position.z; o0.w <- <TextureVertexShader return value>.position.w
+//   v2.x <- input.normal.x; v2.y <- input.normal.y; v2.z <- input.normal.z; 
+//   v3.x <- input.knochen; 
+//   o3.x <- <TextureVertexShader return value>.normal.x; o3.y <- <TextureVertexShader return value>.normal.y; o3.z <- <TextureVertexShader return value>.normal.z; 
+//   o2.x <- <TextureVertexShader return value>.tex.x; o2.y <- <TextureVertexShader return value>.tex.y; 
+//   o1.x <- <TextureVertexShader return value>.position.x; o1.y <- <TextureVertexShader return value>.position.y; o1.z <- <TextureVertexShader return value>.position.z; o1.w <- <TextureVertexShader return value>.position.w; 
+//   o0.x <- <TextureVertexShader return value>.worldPos.x; o0.y <- <TextureVertexShader return value>.worldPos.y; o0.z <- <TextureVertexShader return value>.worldPos.z; o0.w <- <TextureVertexShader return value>.worldPos.w
 //
-#line 34 "C:\Users\kolja\OneDrive\Desktop\Kolja-Strohm-Games\Allgemein\Framework\UIVertexShader.hlsl"
-mov r0.w, l(1.000000)  // r0.w <- input.position.w
+#line 42 "C:\Users\kolja\OneDrive\Desktop\Kolja-Strohm-Games\Allgemein\Framework\UIVertexShader.hlsl"
+imul null, r0.x, v3.x, l(4)
+dp3 r1.x, v2.xyzx, cb0[r0.x + 0].xyzx
+dp3 r1.y, v2.xyzx, cb0[r0.x + 1].xyzx
+dp3 r1.z, v2.xyzx, cb0[r0.x + 2].xyzx
+dp3 r0.x, r1.xyzx, r1.xyzx
+rsq r0.x, r0.x
+mul r0.xyz, r0.xxxx, r1.xyzx  // r0.x <- output.normal.x; r0.y <- output.normal.y; r0.z <- output.normal.z
+
+#line 45
+mov r1.w, l(1.000000)  // r1.w <- input.position.w
+
+#line 48
+mov r2.xy, v1.xyxx  // r2.x <- output.tex.x; r2.y <- output.tex.y
 
-#line 37
-mov r1.xy, v1.xyxx  // r1.x <- output.tex.x; r1.y <- output.tex.y
+#line 51
+imul null, r0.w, v3.x, l(4)
+mov r1.xyz, v0.xyzx
+dp4 r3.x, r1.xyzw, cb0[r0.w + 0].xyzw  // r3.x <- output.worldPos.x
+dp4 r3.y, r1.xyzw, cb0[r0.w + 1].xyzw  // r3.y <- output.worldPos.y
+dp4 r3.z, r1.xyzw, cb0[r0.w + 2].xyzw  // r3.z <- output.worldPos.z
+dp4 r3.w, r1.xyzw, cb0[r0.w + 3].xyzw  // r3.w <- output.worldPos.w
 
-#line 40
-imul null, r1.z, v2.x, l(4)
-mov r0.xyz, v0.xyzx
-dp4 r2.x, r0.xyzw, cb0[r1.z + 0].xyzw  // r2.x <- output.position.x
-dp4 r2.y, r0.xyzw, cb0[r1.z + 1].xyzw  // r2.y <- output.position.y
-dp4 r2.z, r0.xyzw, cb0[r1.z + 2].xyzw  // r2.z <- output.position.z
-dp4 r2.w, r0.xyzw, cb0[r1.z + 3].xyzw  // r2.w <- output.position.w
+#line 52
+dp4 r1.x, r3.xyzw, cb1[0].xyzw  // r1.x <- output.position.x
+dp4 r1.y, r3.xyzw, cb1[1].xyzw  // r1.y <- output.position.y
+dp4 r1.z, r3.xyzw, cb1[2].xyzw  // r1.z <- output.position.z
+dp4 r1.w, r3.xyzw, cb1[3].xyzw  // r1.w <- output.position.w
 
-#line 42
-mov o0.xyzw, r2.xyzw
-mov o1.xy, r1.xyxx
+#line 53
+dp4 r4.x, r1.xyzw, cb1[4].xyzw  // r4.x <- output.position.x
+dp4 r4.y, r1.xyzw, cb1[5].xyzw  // r4.y <- output.position.y
+dp4 r4.z, r1.xyzw, cb1[6].xyzw  // r4.z <- output.position.z
+dp4 r4.w, r1.xyzw, cb1[7].xyzw  // r4.w <- output.position.w
+
+#line 55
+mov o0.xyzw, r3.xyzw
+mov o1.xyzw, r4.xyzw
+mov o3.xyz, r0.xyzx
+mov o2.xy, r2.xyxx
 ret 
-// Approximately 11 instruction slots used
+// Approximately 28 instruction slots used
 #endif
 
 const BYTE UIVertexShader[] =
 {
-     68,  88,  66,  67, 242, 192, 
-     93,   8, 146, 170,  59,  62, 
-      0, 201,  15, 157,  41,  91, 
-    151, 163,   1,   0,   0,   0, 
-     84,  66,   0,   0,   6,   0, 
+     68,  88,  66,  67,  77, 107, 
+     59,  76, 219, 111, 133,  83, 
+     11, 126,  79,   3, 117,  12, 
+    162, 229,   1,   0,   0,   0, 
+    168,  77,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
-     80,   1,   0,   0, 200,   1, 
-      0,   0,  32,   2,   0,   0, 
-    176,   3,   0,   0,  76,   4, 
+     20,   2,   0,   0, 168,   2, 
+      0,   0,  56,   3,   0,   0, 
+      4,   7,   0,   0, 160,   7, 
       0,   0,  82,  68,  69,  70, 
-     16,   1,   0,   0,   1,   0, 
-      0,   0, 108,   0,   0,   0, 
-      1,   0,   0,   0,  60,   0, 
+    212,   1,   0,   0,   2,   0, 
+      0,   0, 144,   0,   0,   0, 
+      2,   0,   0,   0,  60,   0, 
       0,   0,   0,   5, 254, 255, 
-      5,   1,   0,   0, 232,   0, 
+      5,   1,   0,   0, 171,   1, 
       0,   0,  82,  68,  49,  49, 
      60,   0,   0,   0,  24,   0, 
       0,   0,  32,   0,   0,   0, 
      40,   0,   0,   0,  36,   0, 
       0,   0,  12,   0,   0,   0, 
-      0,   0,   0,   0,  92,   0, 
+      0,   0,   0,   0, 124,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   1,   0, 
       0,   0,   1,   0,   0,   0, 
-     77,  97, 116, 114, 105, 120, 
-     66, 117, 102, 102, 101, 114, 
-      0, 171, 171, 171,  92,   0, 
+    137,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  77,  97, 116, 114, 
+    105, 120,  66, 117, 102, 102, 
+    101, 114,   0,  75,  97, 109, 
+    101, 114,  97,   0, 124,   0, 
       0,   0,   1,   0,   0,   0, 
-    132,   0,   0,   0,   0,  32, 
+    192,   0,   0,   0,   0,  32, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 172,   0, 
+      0,   0,   0,   0, 137,   0, 
+      0,   0,   2,   0,   0,   0, 
+     36,   1,   0,   0, 128,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 232,   0, 
       0,   0,   0,   0,   0,   0, 
       0,  32,   0,   0,   2,   0, 
-      0,   0, 196,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
@@ -125,121 +177,253 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 186,   0, 
-      0,   0,  77, 105,  99, 114, 
-    111, 115, 111, 102, 116,  32, 
-     40,  82,  41,  32,  72,  76, 
-     83,  76,  32,  83, 104,  97, 
-    100, 101, 114,  32,  67, 111, 
-    109, 112, 105, 108, 101, 114, 
-     32,  49,  48,  46,  49,   0, 
-     73,  83,  71,  78, 112,   0, 
-      0,   0,   3,   0,   0,   0, 
-      8,   0,   0,   0,  80,   0, 
+      0,   0,   0,   0, 246,   0, 
+      0,   0, 116,   1,   0,   0, 
+      0,   0,   0,   0,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+    124,   1,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    160,   1,   0,   0,  64,   0, 
+      0,   0,  64,   0,   0,   0, 
+      2,   0,   0,   0, 124,   1, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 118, 105, 
+    101, 119,   0, 171, 171, 171, 
+      3,   0,   3,   0,   4,   0, 
+      4,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     15,   7,   0,   0,  89,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
-      0,   0,   1,   0,   0,   0, 
-      3,   3,   0,   0,  98,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0,   2,   0,   0,   0, 
-      1,   1,   0,   0,  80,  79, 
-     83,  73,  84,  73,  79,  78, 
-      0,  84,  69,  88,  67,  79, 
-     79,  82,  68,   0,  75,  78, 
-     79,  67,  72,  69,  78,  95, 
-     73,  68,   0, 171, 171, 171, 
-     79,  83,  71,  78,  80,   0, 
-      0,   0,   2,   0,   0,   0, 
-      8,   0,   0,   0,  56,   0, 
+      0,   0, 246,   0,   0,   0, 
+    112, 114, 111, 106, 101,  99, 
+    116, 105, 111, 110,   0,  77, 
+    105,  99, 114, 111, 115, 111, 
+    102, 116,  32,  40,  82,  41, 
+     32,  72,  76,  83,  76,  32, 
+     83, 104,  97, 100, 101, 114, 
+     32,  67, 111, 109, 112, 105, 
+    108, 101, 114,  32,  49,  48, 
+     46,  49,   0, 171,  73,  83, 
+     71,  78, 140,   0,   0,   0, 
+      4,   0,   0,   0,   8,   0, 
+      0,   0, 104,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      1,   0,   0,   0,   3,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  15,   7, 
+      0,   0, 113,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     15,   0,   0,   0,  68,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,   3,   3, 
+      0,   0, 122,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      2,   0,   0,   0,   7,   7, 
+      0,   0, 129,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
       0,   0,   1,   0,   0,   0, 
-      3,  12,   0,   0,  83,  86, 
-     95,  80,  79,  83,  73,  84, 
-     73,  79,  78,   0,  84,  69, 
-     88,  67,  79,  79,  82,  68, 
-      0, 171, 171, 171,  83,  72, 
-     69,  88, 136,   1,   0,   0, 
-     80,   0,   1,   0,  98,   0, 
-      0,   0, 106, 136,   0,   1, 
-     89,   8,   0,   4,  70, 142, 
-     32,   0,   0,   0,   0,   0, 
-      0,   2,   0,   0,  95,   0, 
-      0,   3, 114,  16,  16,   0, 
-      0,   0,   0,   0,  95,   0, 
-      0,   3,  50,  16,  16,   0, 
-      1,   0,   0,   0,  95,   0, 
-      0,   3,  18,  16,  16,   0, 
-      2,   0,   0,   0, 103,   0, 
-      0,   4, 242,  32,  16,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0, 101,   0,   0,   3, 
-     50,  32,  16,   0,   1,   0, 
-      0,   0, 104,   0,   0,   2, 
-      3,   0,   0,   0,  54,   0, 
-      0,   5, 130,   0,  16,   0, 
-      0,   0,   0,   0,   1,  64, 
-      0,   0,   0,   0, 128,  63, 
-     54,   0,   0,   5,  50,   0, 
+      3,   0,   0,   0,   1,   1, 
+      0,   0,  80,  79,  83,  73, 
+     84,  73,  79,  78,   0,  84, 
+     69,  88,  67,  79,  79,  82, 
+     68,   0,  78,  79,  82,  77, 
+     65,  76,   0,  75,  78,  79, 
+     67,  72,  69,  78,  95,  73, 
+     68,   0,  79,  83,  71,  78, 
+    136,   0,   0,   0,   4,   0, 
+      0,   0,   8,   0,   0,   0, 
+    104,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+    113,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,  15,   0,   0,   0, 
+    125,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   2,   0, 
+      0,   0,   3,  12,   0,   0, 
+    125,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   3,   0, 
+      0,   0,   7,   8,   0,   0, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,   0,  83,  86,  95, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,   0,  84,  69,  88, 
+     67,  79,  79,  82,  68,   0, 
+    171, 171,  83,  72,  69,  88, 
+    196,   3,   0,   0,  80,   0, 
+      1,   0, 241,   0,   0,   0, 
+    106, 136,   0,   1,  89,   8, 
+      0,   4,  70, 142,  32,   0, 
+      0,   0,   0,   0,   0,   2, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   1,   0, 
+      0,   0,   8,   0,   0,   0, 
+     95,   0,   0,   3, 114,  16, 
+     16,   0,   0,   0,   0,   0, 
+     95,   0,   0,   3,  50,  16, 
      16,   0,   1,   0,   0,   0, 
-     70,  16,  16,   0,   1,   0, 
-      0,   0,  38,   0,   0,   8, 
-      0, 208,   0,   0,  66,   0, 
+     95,   0,   0,   3, 114,  16, 
+     16,   0,   2,   0,   0,   0, 
+     95,   0,   0,   3,  18,  16, 
+     16,   0,   3,   0,   0,   0, 
+    101,   0,   0,   3, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+    103,   0,   0,   4, 242,  32, 
      16,   0,   1,   0,   0,   0, 
-     10,  16,  16,   0,   2,   0, 
-      0,   0,   1,  64,   0,   0, 
-      4,   0,   0,   0,  54,   0, 
-      0,   5, 114,   0,  16,   0, 
-      0,   0,   0,   0,  70,  18, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3,  50,  32,  16,   0, 
+      2,   0,   0,   0, 101,   0, 
+      0,   3, 114,  32,  16,   0, 
+      3,   0,   0,   0, 104,   0, 
+      0,   2,   5,   0,   0,   0, 
+     38,   0,   0,   8,   0, 208, 
+      0,   0,  18,   0,  16,   0, 
+      0,   0,   0,   0,  10,  16, 
+     16,   0,   3,   0,   0,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,  16,   0,   0,   9, 
+     18,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      2,   0,   0,   0,  70, 130, 
+     32,   4,   0,   0,   0,   0, 
+     10,   0,  16,   0,   0,   0, 
+      0,   0,  16,   0,   0,  10, 
+     34,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      2,   0,   0,   0,  70, 130, 
+     32,   6,   0,   0,   0,   0, 
+      1,   0,   0,   0,  10,   0, 
      16,   0,   0,   0,   0,   0, 
-     17,   0,   0,   9,  18,   0, 
-     16,   0,   2,   0,   0,   0, 
-     70,  14,  16,   0,   0,   0, 
-      0,   0,  70, 142,  32,   4, 
-      0,   0,   0,   0,  42,   0, 
+     16,   0,   0,  10,  66,   0, 
      16,   0,   1,   0,   0,   0, 
-     17,   0,   0,  10,  34,   0, 
-     16,   0,   2,   0,   0,   0, 
-     70,  14,  16,   0,   0,   0, 
-      0,   0,  70, 142,  32,   6, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0,  42,   0,  16,   0, 
-      1,   0,   0,   0,  17,   0, 
-      0,  10,  66,   0,  16,   0, 
-      2,   0,   0,   0,  70,  14, 
+     70,  18,  16,   0,   2,   0, 
+      0,   0,  70, 130,  32,   6, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,  10,   0,  16,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   7,  18,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   1,   0,   0,   0, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,  68,   0,   0,   5, 
+     18,   0,  16,   0,   0,   0, 
+      0,   0,  10,   0,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0,   6,   0, 
      16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 128,  63,  54,   0, 
+      0,   5,  50,   0,  16,   0, 
+      2,   0,   0,   0,  70,  16, 
+     16,   0,   1,   0,   0,   0, 
+     38,   0,   0,   8,   0, 208, 
+      0,   0, 130,   0,  16,   0, 
+      0,   0,   0,   0,  10,  16, 
+     16,   0,   3,   0,   0,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,  54,   0,   0,   5, 
+    114,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      0,   0,   0,   0,  17,   0, 
+      0,   9,  18,   0,  16,   0, 
+      3,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   4,   0,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  17,   0, 
+      0,  10,  34,   0,  16,   0, 
+      3,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
      70, 142,  32,   6,   0,   0, 
-      0,   0,   2,   0,   0,   0, 
-     42,   0,  16,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,  17,   0,   0,  10, 
-    130,   0,  16,   0,   2,   0, 
+     66,   0,  16,   0,   3,   0, 
       0,   0,  70,  14,  16,   0, 
-      0,   0,   0,   0,  70, 142, 
+      1,   0,   0,   0,  70, 142, 
      32,   6,   0,   0,   0,   0, 
-      3,   0,   0,   0,  42,   0, 
-     16,   0,   1,   0,   0,   0, 
-     54,   0,   0,   5, 242,  32, 
+      2,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-     70,  14,  16,   0,   2,   0, 
+     17,   0,   0,  10, 130,   0, 
+     16,   0,   3,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32,   6, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  17,   0, 
+      0,   8,  18,   0,  16,   0, 
+      1,   0,   0,   0,  70,  14, 
+     16,   0,   3,   0,   0,   0, 
+     70, 142,  32,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     17,   0,   0,   8,  34,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,  14,  16,   0,   3,   0, 
+      0,   0,  70, 142,  32,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  17,   0,   0,   8, 
+     66,   0,  16,   0,   1,   0, 
+      0,   0,  70,  14,  16,   0, 
+      3,   0,   0,   0,  70, 142, 
+     32,   0,   1,   0,   0,   0, 
+      2,   0,   0,   0,  17,   0, 
+      0,   8, 130,   0,  16,   0, 
+      1,   0,   0,   0,  70,  14, 
+     16,   0,   3,   0,   0,   0, 
+     70, 142,  32,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+     17,   0,   0,   8,  18,   0, 
+     16,   0,   4,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32,   0, 
+      1,   0,   0,   0,   4,   0, 
+      0,   0,  17,   0,   0,   8, 
+     34,   0,  16,   0,   4,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32,   0,   1,   0,   0,   0, 
+      5,   0,   0,   0,  17,   0, 
+      0,   8,  66,   0,  16,   0, 
+      4,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   0,   1,   0, 
+      0,   0,   6,   0,   0,   0, 
+     17,   0,   0,   8, 130,   0, 
+     16,   0,   4,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32,   0, 
+      1,   0,   0,   0,   7,   0, 
       0,   0,  54,   0,   0,   5, 
-     50,  32,  16,   0,   1,   0, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      3,   0,   0,   0,  54,   0, 
+      0,   5, 242,  32,  16,   0, 
+      1,   0,   0,   0,  70,  14, 
+     16,   0,   4,   0,   0,   0, 
+     54,   0,   0,   5, 114,  32, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+     50,  32,  16,   0,   2,   0, 
       0,   0,  70,   0,  16,   0, 
-      1,   0,   0,   0,  62,   0, 
+      2,   0,   0,   0,  62,   0, 
       0,   1,  83,  84,  65,  84, 
-    148,   0,   0,   0,  11,   0, 
-      0,   0,   3,   0,   0,   0, 
-      0,   0,   0,   0,   5,   0, 
-      0,   0,   4,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
+    148,   0,   0,   0,  28,   0, 
+      0,   0,   5,   0,   0,   0, 
+      0,   0,   0,   0,   8,   0, 
+      0,   0,  18,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
       0,   0,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -248,7 +432,7 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   5,   0,   0,   0, 
+      0,   0,   7,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -261,16 +445,16 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,  83,  80,  68,  66, 
-      0,  62,   0,   0,  77, 105, 
+      0,  70,   0,   0,  77, 105, 
      99, 114, 111, 115, 111, 102, 
     116,  32,  67,  47,  67,  43, 
      43,  32,  77,  83,  70,  32, 
      55,  46,  48,  48,  13,  10, 
      26,  68,  83,   0,   0,   0, 
       0,   2,   0,   0,   2,   0, 
-      0,   0,  31,   0,   0,   0, 
-    156,   0,   0,   0,   0,   0, 
-      0,   0,  28,   0,   0,   0, 
+      0,   0,  35,   0,   0,   0, 
+    172,   0,   0,   0,   0,   0, 
+      0,   0,  32,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -432,8 +616,8 @@ const BYTE UIVertexShader[] =
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
-    255, 255,  56,   0,   0, 224, 
-    255, 255, 255, 255, 255, 255, 
+    255, 255,  56,   0,   0,   0, 
+    254, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
     255, 255, 255, 255, 255, 255, 
@@ -689,10 +873,10 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0, 148,  46,  49,   1, 
-    217, 169,  75,  92,   1,   0, 
-      0,   0, 158,  76, 194, 210, 
-    151, 220,  59,  64, 178, 213, 
-    130, 147, 117,  41,  28, 107, 
+    137, 165,  80,  92,   1,   0, 
+      0,   0, 191,  13,  30, 146, 
+    241, 109,  80,  72, 139,  18, 
+     63, 138, 222,   6, 183,  16, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   1,   0,   0,   0, 
       1,   0,   0,   0,   0,   0, 
@@ -773,10 +957,13 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  47,  47, 
-     47,  47,  47,  32,  32,  32, 
+      0,   0,   0,   0,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  13,  10,  47, 
+     47,  32,  84,  89,  80,  69, 
+     68,  69,  70,  83,  32,  47, 
+     47,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -786,61 +973,12 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10, 115, 116, 114, 117,  99, 
-    116,  32,  86, 101, 114, 116, 
-    101, 120,  73, 110, 112, 117, 
-    116,  84, 121, 112, 101,  13, 
-     10, 123,  13,  10,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  52,  32, 112, 111, 115, 
-    105, 116, 105, 111, 110,  32, 
-     58,  32,  80,  79,  83,  73, 
-     84,  73,  79,  78,  59,  13, 
-     10,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  50,  32, 
-    116, 101, 120,  32,  58,  32, 
-     84,  69,  88,  67,  79,  79, 
-     82,  68,  48,  59,  13,  10, 
-     32,  32,  32,  32, 117, 105, 
-    110, 116,  32, 107, 110, 111, 
-     99, 104, 101, 110,  32,  58, 
-     32,  75,  78,  79,  67,  72, 
-     69,  78,  95,  73,  68,  48, 
-     59,  13,  10, 125,  59,  13, 
-     10,  13,  10, 115, 116, 114, 
-    117,  99, 116,  32,  80, 105, 
-    120, 101, 108,  73, 110, 112, 
-    117, 116,  84, 121, 112, 101, 
-     13,  10, 123,  13,  10,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  52,  32, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     32,  58,  32,  83,  86,  95, 
-     80,  79,  83,  73,  84,  73, 
-     79,  78,  59,  13,  10,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  50,  32, 116, 101, 
-    120,  32,  58,  32,  84,  69, 
-     88,  67,  79,  79,  82,  68, 
-     48,  59,  13,  10, 125,  59, 
-     13,  10,  13,  10,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  13,  10,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     13,  10,  47,  47,  32,  86, 
-    101, 114, 116, 101, 120,  32, 
-     83, 104,  97, 100, 101, 114, 
+     47,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -851,25 +989,71 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  13,  10, 115, 
+    116, 114, 117,  99, 116,  32, 
+     86, 101, 114, 116, 101, 120, 
+     73, 110, 112, 117, 116,  84, 
+    121, 112, 101,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  52, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  32,  58,  32, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  50,  32, 116, 101, 
+    120,  32,  58,  32,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+     48,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  51,  32, 110, 111, 114, 
+    109,  97, 108,  32,  58,  32, 
+     78,  79,  82,  77,  65,  76, 
+     59,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    107, 110, 111,  99, 104, 101, 
+    110,  32,  58,  32,  75,  78, 
+     79,  67,  72,  69,  78,  95, 
+     73,  68,  48,  59,  13,  10, 
+    125,  59,  13,  10,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+     32,  80, 105, 120, 101, 108, 
+     73, 110, 112, 117, 116,  84, 
+    121, 112, 101,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  52, 
+     32, 119, 111, 114, 108, 100, 
+     80, 111, 115,  32,  58,  32, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  52,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32,  58,  32,  83,  86,  95, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  50,  32, 116, 101, 
+    120,  32,  58,  32,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+     48,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  51,  32, 110, 111, 114, 
+    109,  97, 108,  32,  58,  32, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,  49,  59,  13,  10, 
     198,  90,   0,   0, 117, 131, 
-      1,   0, 188, 252,   1,   0, 
-    146, 183,   2,   0,  38, 247, 
-      2,   0,  53,   5,   1,   0, 
-     43, 236,   3,   0,  49, 251, 
-      3,   0, 168, 209,   0,   0, 
-    103, 159,   1,   0, 206,  55, 
-      0,   0, 236, 139,   1,   0, 
-    153, 189,   3,   0,   0,  16, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+      1,   0,  76, 232,   3,   0, 
+    251, 168,   1,   0, 146, 183, 
+      2,   0,  28,  19,   2,   0, 
+    242,  56,   1,   0,  43, 236, 
+      3,   0, 217,  42,   2,   0, 
+     38, 107,   0,   0, 103, 159, 
+      1,   0,  73,  20,   1,   0, 
+     19,  54,   2,   0,  65, 185, 
+      2,   0, 153, 189,   3,   0, 
+      0,  16,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -965,11 +1149,29 @@ const BYTE UIVertexShader[] =
      97, 116, 114, 105, 120,  91, 
      32,  49,  50,  56,  32,  93, 
      59,  13,  10, 125,  59,  13, 
-     10,  13,  10,  47,  47,  47, 
+     10,  13,  10,  47,  47,  32, 
+     84, 104, 101,  32, 112, 114, 
+    111, 106, 101,  99, 116, 105, 
+    111, 110,  32,  97, 110, 100, 
+     32, 118, 105, 101, 119,  32, 
+    109,  97, 116, 114, 105, 120, 
+     13,  10,  99,  98, 117, 102, 
+    102, 101, 114,  32,  75,  97, 
+    109, 101, 114,  97,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40,  32,  98, 
+     49,  32,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 118, 105, 101, 119,  59, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 112, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,  59, 
+     13,  10, 125,  13,  10,  13, 
+     10,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
+     47,  47,  47,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -980,10 +1182,11 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  13,  10,  47,  47,  32, 
-     84,  89,  80,  69,  68,  69, 
-     70,  83,  32,  47,  47,  32, 
      32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  13, 
+     10,  47,  47,  32,  84,  89, 
+     80,  69,  68,  69,  70,  83, 
+     32,  47,  47,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -995,10 +1198,10 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  13,  10,  47,  47,  47, 
+     32,  32,  32,  32,  32,  13, 
+     10,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
+     47,  47,  47,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -1010,32 +1213,43 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  13,  10, 115, 116, 114, 
-    117,  99, 116,  32,  86, 101, 
-    114, 116, 101, 120,  73, 110, 
-    112, 117, 116,  84, 121, 112, 
-    101,  13,  10, 123,  13,  10, 
+     32,  32,  32,  32,  32,  13, 
+     10, 115, 116, 114, 117,  99, 
+    116,  32,  86, 101, 114, 116, 
+    101, 120,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  13, 
+     10, 123,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  52,  32, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+     58,  32,  80,  79,  83,  73, 
+     84,  73,  79,  78,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  50,  32, 
+    116, 101, 120,  32,  58,  32, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,  48,  59,  13,  10, 
      32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  52,  32, 112, 
-    111, 115, 105, 116, 105, 111, 
-    110,  32,  58,  32,  80,  79, 
-     83,  73,  84,  73,  79,  78, 
-     59,  13,  10,  32,  32,  32, 
-     32, 102, 108, 111,  97, 116, 
-     50,  32, 116, 101, 120,  32, 
-     58,  32,  84,  69,  88,  67, 
-     79,  79,  82,  68,  48,  59, 
-     13,  10,  32,  32,  32,  32, 
-    117, 105, 110, 116,  32, 107, 
-    110, 111,  99, 104, 101, 110, 
-     32,  58,  32,  75,  78,  79, 
-     67,  72,  69,  78,  95,  73, 
-     68,  48,  59,  13,  10, 125, 
-     59,  13,  10,  13,  10, 115, 
-    116, 114, 117,  99, 116,  32, 
-     80, 105, 120, 101, 108,  73, 
-    110, 112, 117, 116,  84, 121, 
-    112, 101,  13,  10, 123,  13, 
+    111,  97, 116,  51,  32, 110, 
+    111, 114, 109,  97, 108,  32, 
+     58,  32,  78,  79,  82,  77, 
+     65,  76,  59,  13,  10,  32, 
+     32,  32,  32, 117, 105, 110, 
+    116,  32, 107, 110, 111,  99, 
+    104, 101, 110,  32,  58,  32, 
+     75,  78,  79,  67,  72,  69, 
+     78,  95,  73,  68,  48,  59, 
+     13,  10, 125,  59,  13,  10, 
+     13,  10, 115, 116, 114, 117, 
+     99, 116,  32,  80, 105, 120, 
+    101, 108,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  13, 
+     10, 123,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  52,  32, 119, 111, 114, 
+    108, 100,  80, 111, 115,  32, 
+     58,  32,  80,  79,  83,  73, 
+     84,  73,  79,  78,  59,  13, 
      10,  32,  32,  32,  32, 102, 
     108, 111,  97, 116,  52,  32, 
     112, 111, 115, 105, 116, 105, 
@@ -1047,8 +1261,13 @@ const BYTE UIVertexShader[] =
     116, 101, 120,  32,  58,  32, 
      84,  69,  88,  67,  79,  79, 
      82,  68,  48,  59,  13,  10, 
-    125,  59,  13,  10,  13,  10, 
-     47,  47,  47,  47,  47,  47, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  51,  32, 110, 
+    111, 114, 109,  97, 108,  32, 
+     58,  32,  84,  69,  88,  67, 
+     79,  79,  82,  68,  49,  59, 
+     13,  10, 125,  59,  13,  10, 
+     13,  10,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
@@ -1061,10 +1280,10 @@ const BYTE UIVertexShader[] =
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  47,  13,  10,  47,  47, 
-     32,  86, 101, 114, 116, 101, 
-    120,  32,  83, 104,  97, 100, 
-    101, 114,  32,  32,  32,  32, 
+     47,  47,  47,  47,  13,  10, 
+     47,  47,  32,  86, 101, 114, 
+    116, 101, 120,  32,  83, 104, 
+     97, 100, 101, 114,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -1075,7 +1294,7 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     13,  10,  47,  47,  47,  47, 
+     32,  32,  13,  10,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
@@ -1088,22 +1307,22 @@ const BYTE UIVertexShader[] =
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  13,  10, 
-     80, 105, 120, 101, 108,  73, 
-    110, 112, 117, 116,  84, 121, 
-    112, 101,  32,  84, 101, 120, 
-    116, 117, 114, 101,  86, 101, 
-    114, 116, 101, 120,  83, 104, 
-     97, 100, 101, 114,  40,  32, 
+     47,  47,  47,  47,  47,  47, 
+     13,  10,  80, 105, 120, 101, 
+    108,  73, 110, 112, 117, 116, 
+     84, 121, 112, 101,  32,  84, 
+    101, 120, 116, 117, 114, 101, 
      86, 101, 114, 116, 101, 120, 
-     73, 110, 112, 117, 116,  84, 
-    121, 112, 101,  32, 105, 110, 
-    112, 117, 116,  32,  41,  13, 
-     10, 123,  13,  10,  32,  32, 
-     32,  32,  47,  47, 114, 101, 
-    116, 117, 114, 110,  32, 105, 
-    110, 112, 117, 116,  59,  32, 
-     32,  32,  32,  32,  32,  32, 
+     83, 104,  97, 100, 101, 114, 
+     40,  32,  86, 101, 114, 116, 
+    101, 120,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  32, 
+    105, 110, 112, 117, 116,  32, 
+     41,  13,  10, 123,  13,  10, 
+     32,  32,  32,  32,  47,  47, 
+    114, 101, 116, 117, 114, 110, 
+     32, 105, 110, 112, 117, 116, 
+     59,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -1114,85 +1333,121 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10,  32,  32, 
-     32,  32,  80, 105, 120, 101, 
-    108,  73, 110, 112, 117, 116, 
-     84, 121, 112, 101,  32, 111, 
-    117, 116, 112, 117, 116,  59, 
-     13,  10,  13,  10,  32,  32, 
-     32,  32,  47,  47,  32,  67, 
-    104,  97, 110, 103, 101,  32, 
-    116, 104, 101,  32, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     32, 118, 101,  99, 116, 111, 
-    114,  32, 116, 111,  32,  98, 
-    101,  32,  52,  32, 117, 110, 
-    105, 116, 115,  32, 102, 111, 
-    114,  32, 112, 114, 111, 112, 
-    101, 114,  32, 109,  97, 116, 
-    114, 105, 120,  32,  99,  97, 
-    108,  99, 117, 108,  97, 116, 
-    105, 111, 110, 115,  46,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10,  32,  32, 
-     32,  32, 105, 110, 112, 117, 
-    116,  46, 112, 111, 115, 105, 
-    116, 105, 111, 110,  46, 119, 
-     32,  61,  32,  49,  46,  48, 
-    102,  59,  13,  10,  13,  10, 
-     32,  32,  32,  32,  47,  47, 
-     32,  83, 116, 111, 114, 101, 
-     32, 116, 104, 101,  32, 116, 
-    101, 120, 116, 117, 114, 101, 
-     32,  99, 111, 111, 114, 100, 
-    105, 110,  97, 116, 101, 115, 
-     32, 102, 111, 114,  32, 116, 
-    104, 101,  32, 112, 105, 120, 
-    101, 108,  32, 115, 104,  97, 
-    100, 101, 114,  46,  32,  32, 
+     32,  32,  32,  32,  13,  10, 
+     32,  32,  32,  32,  80, 105, 
+    120, 101, 108,  73, 110, 112, 
+    117, 116,  84, 121, 112, 101, 
+     32, 111, 117, 116, 112, 117, 
+    116,  59,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 110, 111, 114, 
+    109,  97, 108,  32,  61,  32, 
+    110, 111, 114, 109,  97, 108, 
+    105, 122, 101,  40,  32, 109, 
+    117, 108,  40,  32, 105, 110, 
+    112, 117, 116,  46, 110, 111, 
+    114, 109,  97, 108,  44,  32, 
+     40, 102, 108, 111,  97, 116, 
+     51, 120,  51,  41, 107, 110, 
+    111,  99, 104, 101, 110,  77, 
+     97, 116, 114, 105, 120,  91, 
+     32, 105, 110, 112, 117, 116, 
+     46, 107, 110, 111,  99, 104, 
+    101, 110,  32,  93,  32,  41, 
+     32,  41,  59,  13,  10,  13, 
+     10,  32,  32,  32,  32,  47, 
+     47,  32,  67, 104,  97, 110, 
+    103, 101,  32, 116, 104, 101, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  32, 118, 101, 
+     99, 116, 111, 114,  32, 116, 
+    111,  32,  98, 101,  32,  52, 
+     32, 117, 110, 105, 116, 115, 
+     32, 102, 111, 114,  32, 112, 
+    114, 111, 112, 101, 114,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32,  99,  97, 108,  99, 117, 
+    108,  97, 116, 105, 111, 110, 
+    115,  46,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  13, 
+     10,  32,  32,  32,  32, 105, 
+    110, 112, 117, 116,  46, 112, 
+    111, 115, 105, 116, 105, 111, 
+    110,  46, 119,  32,  61,  32, 
+     49,  46,  48, 102,  59,  13, 
+     10,  13,  10,  32,  32,  32, 
+     32,  47,  47,  32,  83, 116, 
+    111, 114, 101,  32, 116, 104, 
+    101,  32, 116, 101, 120, 116, 
+    117, 114, 101,  32,  99, 111, 
+    111, 114, 100, 105, 110,  97, 
+    116, 101, 115,  32, 102, 111, 
+    114,  32, 116, 104, 101,  32, 
+    112, 105, 120, 101, 108,  32, 
+    115, 104,  97, 100, 101, 114, 
+     46,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     32,  32,  32,  32, 111, 117, 
-    116, 112, 117, 116,  46, 116, 
-    101, 120,  32,  61,  32, 105, 
-    110, 112, 117, 116,  46, 116, 
-    101, 120,  59,  13,  10,  13, 
-     10,  32,  32,  32,  32,  47, 
-     47,  32,  67,  97, 108,  99, 
-    117, 108,  97, 116, 101,  32, 
-    116, 104, 101,  32, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     32, 111, 102,  32, 116, 104, 
-    101,  32, 118, 101, 114, 116, 
-    101, 120,  32,  97, 103,  97, 
-    105, 110, 115, 116,  32, 116, 
-    104, 101,  32, 119, 111, 114, 
-    108, 100,  44,  32, 118, 105, 
-    101, 119,  44,  32,  97, 110, 
-    100,  32, 112, 114, 111, 106, 
-    101,  99, 116, 105, 111, 110, 
-     32, 109,  97, 116, 114, 105, 
-     99, 101, 115,  46,  32,  13, 
-     10,  32,  32,  32,  32, 111, 
-    117, 116, 112, 117, 116,  46, 
-    112, 111, 115, 105, 116, 105, 
-    111, 110,  32,  61,  32, 109, 
-    117, 108,  40,  32, 105, 110, 
-    112, 117, 116,  46, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     44,  32, 107, 110, 111,  99, 
-    104, 101, 110,  77,  97, 116, 
-    114, 105, 120,  91,  32, 105, 
-    110, 112, 117, 116,  46, 107, 
+     32,  13,  10,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 116, 101, 120,  32, 
+     61,  32, 105, 110, 112, 117, 
+    116,  46, 116, 101, 120,  59, 
+     13,  10,  13,  10,  32,  32, 
+     32,  32,  47,  47,  32,  67, 
+     97, 108,  99, 117, 108,  97, 
+    116, 101,  32, 116, 104, 101, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  32, 111, 102, 
+     32, 116, 104, 101,  32, 118, 
+    101, 114, 116, 101, 120,  32, 
+     97, 103,  97, 105, 110, 115, 
+    116,  32, 116, 104, 101,  32, 
+    119, 111, 114, 108, 100,  44, 
+     32, 118, 105, 101, 119,  44, 
+     32,  97, 110, 100,  32, 112, 
+    114, 111, 106, 101,  99, 116, 
+    105, 111, 110,  32, 109,  97, 
+    116, 114, 105,  99, 101, 115, 
+     46,  32,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 119, 111, 114, 
+    108, 100,  80, 111, 115,  32, 
+     61,  32, 109, 117, 108,  40, 
+     32, 105, 110, 112, 117, 116, 
+     46, 112, 111, 115, 105, 116, 
+    105, 111, 110,  44,  32, 107, 
     110, 111,  99, 104, 101, 110, 
-     32,  93,  32,  41,  59,  13, 
-     10,  13,  10,  32,  32,  32, 
-     32, 114, 101, 116, 117, 114, 
-    110,  32, 111, 117, 116, 112, 
-    117, 116,  59,  13,  10, 125, 
+     77,  97, 116, 114, 105, 120, 
+     91,  32, 105, 110, 112, 117, 
+    116,  46, 107, 110, 111,  99, 
+    104, 101, 110,  32,  93,  32, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+     61,  32, 109, 117, 108,  40, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 119, 111, 114, 108, 
+    100,  80, 111, 115,  44,  32, 
+    118, 105, 101, 119,  32,  41, 
+     59,  13,  10,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 112, 111, 115, 105, 
+    116, 105, 111, 110,  32,  61, 
+     32, 109, 117, 108,  40,  32, 
+    111, 117, 116, 112, 117, 116, 
+     46, 112, 111, 115, 105, 116, 
+    105, 111, 110,  44,  32, 112, 
+    114, 111, 106, 101,  99, 116, 
+    105, 111, 110,  32,  41,  59, 
+     13,  10,  13,  10,  32,  32, 
+     32,  32, 114, 101, 116, 117, 
+    114, 110,  32, 111, 117, 116, 
+    112, 117, 116,  59,  13,  10, 
+    125,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1200,60 +1455,94 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 254, 239, 254, 239, 
-      1,   0,   0,   0, 141,   6, 
-      0,   0,   0,  67,  58,  92, 
-     85, 115, 101, 114, 115,  92, 
-    107, 111, 108, 106,  97,  92, 
-     79, 110, 101,  68, 114, 105, 
-    118, 101,  92,  68, 101, 115, 
-    107, 116, 111, 112,  92,  75, 
-    111, 108, 106,  97,  45,  83, 
-    116, 114, 111, 104, 109,  45, 
-     71,  97, 109, 101, 115,  92, 
-     65, 108, 108, 103, 101, 109, 
-    101, 105, 110,  92,  70, 114, 
-     97, 109, 101, 119, 111, 114, 
-    107,  92,  85,  73,  86, 101, 
-    114, 116, 101, 120,  83, 104, 
-     97, 100, 101, 114,  46, 104, 
-    108, 115, 108,   0,   0,  99, 
-     58,  92, 117, 115, 101, 114, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 254, 239, 
+    254, 239,   1,   0,   0,   0, 
+     50,   8,   0,   0,   0,  67, 
+     58,  92,  85, 115, 101, 114, 
     115,  92, 107, 111, 108, 106, 
-     97,  92, 111, 110, 101, 100, 
-    114, 105, 118, 101,  92, 100, 
+     97,  92,  79, 110, 101,  68, 
+    114, 105, 118, 101,  92,  68, 
     101, 115, 107, 116, 111, 112, 
-     92, 107, 111, 108, 106,  97, 
-     45, 115, 116, 114, 111, 104, 
-    109,  45, 103,  97, 109, 101, 
-    115,  92,  97, 108, 108, 103, 
+     92,  75, 111, 108, 106,  97, 
+     45,  83, 116, 114, 111, 104, 
+    109,  45,  71,  97, 109, 101, 
+    115,  92,  65, 108, 108, 103, 
     101, 109, 101, 105, 110,  92, 
-    102, 114,  97, 109, 101, 119, 
-    111, 114, 107,  92, 117, 105, 
-    118, 101, 114, 116, 101, 120, 
-    115, 104,  97, 100, 101, 114, 
+     70, 114,  97, 109, 101, 119, 
+    111, 114, 107,  92,  85,  73, 
+     86, 101, 114, 116, 101, 120, 
+     83, 104,  97, 100, 101, 114, 
      46, 104, 108, 115, 108,   0, 
+      0,  99,  58,  92, 117, 115, 
+    101, 114, 115,  92, 107, 111, 
+    108, 106,  97,  92, 111, 110, 
+    101, 100, 114, 105, 118, 101, 
+     92, 100, 101, 115, 107, 116, 
+    111, 112,  92, 107, 111, 108, 
+    106,  97,  45, 115, 116, 114, 
+    111, 104, 109,  45, 103,  97, 
+    109, 101, 115,  92,  97, 108, 
+    108, 103, 101, 109, 101, 105, 
+    110,  92, 102, 114,  97, 109, 
+    101, 119, 111, 114, 107,  92, 
+    117, 105, 118, 101, 114, 116, 
+    101, 120, 115, 104,  97, 100, 
+    101, 114,  46, 104, 108, 115, 
+    108,   0,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  47, 
+     47,  32,  71,  76,  79,  66, 
+     65,  76,  83,  32,  47,  47, 
+     13,  10,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     47,  13,  10,  47,  47,  32, 
-     71,  76,  79,  66,  65,  76, 
-     83,  32,  47,  47,  13,  10, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  13,  10,  99,  98, 117, 
-    102, 102, 101, 114,  32,  77, 
-     97, 116, 114, 105, 120,  66, 
-    117, 102, 102, 101, 114,  32, 
-     58,  32, 114, 101, 103, 105, 
-    115, 116, 101, 114,  40,  32, 
-     98,  48,  32,  41,  13,  10, 
-    123,  13,  10,  32,  32,  32, 
-     32, 109,  97, 116, 114, 105, 
-    120,  32, 107, 110, 111,  99, 
-    104, 101, 110,  77,  97, 116, 
-    114, 105, 120,  91,  32,  49, 
-     50,  56,  32,  93,  59,  13, 
-     10, 125,  59,  13,  10,  13, 
+     47,  47,  47,  13,  10,  99, 
+     98, 117, 102, 102, 101, 114, 
+     32,  77,  97, 116, 114, 105, 
+    120,  66, 117, 102, 102, 101, 
+    114,  32,  58,  32, 114, 101, 
+    103, 105, 115, 116, 101, 114, 
+     40,  32,  98,  48,  32,  41, 
+     13,  10, 123,  13,  10,  32, 
+     32,  32,  32, 109,  97, 116, 
+    114, 105, 120,  32, 107, 110, 
+    111,  99, 104, 101, 110,  77, 
+     97, 116, 114, 105, 120,  91, 
+     32,  49,  50,  56,  32,  93, 
+     59,  13,  10, 125,  59,  13, 
+     10,  13,  10,  47,  47,  32, 
+     84, 104, 101,  32, 112, 114, 
+    111, 106, 101,  99, 116, 105, 
+    111, 110,  32,  97, 110, 100, 
+     32, 118, 105, 101, 119,  32, 
+    109,  97, 116, 114, 105, 120, 
+     13,  10,  99,  98, 117, 102, 
+    102, 101, 114,  32,  75,  97, 
+    109, 101, 114,  97,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40,  32,  98, 
+     49,  32,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 118, 105, 101, 119,  59, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 112, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,  59, 
+     13,  10, 125,  13,  10,  13, 
      10,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  32,  32,  32, 
@@ -1266,29 +1555,9 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  32,  84,  89, 
-     80,  69,  68,  69,  70,  83, 
-     32,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  27, 226, 
-     48,   1, 128,   0,   0,   0, 
-    107, 170, 194,  41,  14, 181, 
-    212,   1,   1,   0,   0,   0, 
+     27, 226,  48,   1, 128,   0, 
+      0,   0,   8, 235, 113, 136, 
+      6, 184, 212,   1,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1296,15 +1565,15 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      2,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   1,   0, 
       0,   0,   2,   0,   0,   0, 
-      0,   0,   0,   0,  93,   0, 
-      0,   0,  40,   0,   0,   0, 
-     27, 226,  48,   1,  42, 224, 
-     54, 246, 212,   5,   0,   0, 
-      1,   0,   0,   0,  92,   0, 
-      0,   0,  93,   0,   0,   0, 
+      1,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+     93,   0,   0,   0,  40,   0, 
+      0,   0,  27, 226,  48,   1, 
+    155, 234,  65, 223, 121,   7, 
+      0,   0,   1,   0,   0,   0, 
+     92,   0,   0,   0,  93,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1371,189 +1640,328 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      4,   0,   0,   0,  66,   0, 
-     60,  17,  16,   1,   0,   0, 
-      0,   1,  10,   0,   1,   0, 
-     15,   0, 171,  63,  10,   0, 
+      0,   0,   4,   0,   0,   0, 
+     66,   0,  60,  17,  16,   1, 
+      0,   0,   0,   1,  10,   0, 
       1,   0,  15,   0, 171,  63, 
-     77, 105,  99, 114, 111, 115, 
-    111, 102, 116,  32,  40,  82, 
-     41,  32,  72,  76,  83,  76, 
-     32,  83, 104,  97, 100, 101, 
-    114,  32,  67, 111, 109, 112, 
-    105, 108, 101, 114,  32,  49, 
-     48,  46,  49,   0,   0,   0, 
-     66,   0,  61,  17,   1, 104, 
-    108, 115, 108,  70, 108,  97, 
-    103, 115,   0,  48, 120,  53, 
-      0, 104, 108, 115, 108,  84, 
-     97, 114, 103, 101, 116,   0, 
-    118, 115,  95,  53,  95,  48, 
-      0, 104, 108, 115, 108,  69, 
-    110, 116, 114, 121,   0,  84, 
-    101, 120, 116, 117, 114, 101, 
-     86, 101, 114, 116, 101, 120, 
-     83, 104,  97, 100, 101, 114, 
-      0,   0,  58,   0,  16,  17, 
-      0,   0,   0,   0,  84,   3, 
+     10,   0,   1,   0,  15,   0, 
+    171,  63,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  49,  48,  46,  49,   0, 
+      0,   0,  66,   0,  61,  17, 
+      1, 104, 108, 115, 108,  70, 
+    108,  97, 103, 115,   0,  48, 
+    120,  53,   0, 104, 108, 115, 
+    108,  84,  97, 114, 103, 101, 
+    116,   0, 118, 115,  95,  53, 
+     95,  48,   0, 104, 108, 115, 
+    108,  69, 110, 116, 114, 121, 
+      0,  84, 101, 120, 116, 117, 
+    114, 101,  86, 101, 114, 116, 
+    101, 120,  83, 104,  97, 100, 
+    101, 114,   0,   0,  58,   0, 
+     16,  17,   0,   0,   0,   0, 
+     76,   5,   0,   0,   0,   0, 
+      0,   0,  44,   3,   0,   0, 
+      0,   0,   0,   0,  44,   3, 
+      0,   0,   9,  16,   0,   0, 
+    152,   0,   0,   0,   1,   0, 
+    160,  84, 101, 120, 116, 117, 
+    114, 101,  86, 101, 114, 116, 
+    101, 120,  83, 104,  97, 100, 
+    101, 114,   0,   0,  46,   0, 
+     62,  17,   4,  16,   0,   0, 
+      9,   0, 105, 110, 112, 117, 
+    116,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+      0,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+      0,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+      4,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+      4,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+      8,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+      8,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     12,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     12,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     16,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     16,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     20,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     20,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     24,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     32,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     28,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     36,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     32,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     40,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     36,   0,   4,   0, 152,   0, 
+      0,   0,   1,   0,  44,   3, 
+     48,   0,   0,   0,  22,   0, 
+     80,  17,   0,   0,   5,   0, 
+     12,   0,   4,   0, 140,   1, 
+      0,   0,   1,   0, 100,   1, 
+     28,   0,   0,   0,  74,   0, 
+     62,  17,   8,  16,   0,   0, 
+    136,   0,  60,  84, 101, 120, 
+    116, 117, 114, 101,  86, 101, 
+    114, 116, 101, 120,  83, 104, 
+     97, 100, 101, 114,  32, 114, 
+    101, 116, 117, 114, 110,  32, 
+    118,  97, 108, 117, 101,  62, 
       0,   0,   0,   0,   0,   0, 
-     36,   1,   0,   0,   0,   0, 
-      0,   0,  36,   1,   0,   0, 
-      8,  16,   0,   0, 100,   0, 
-      0,   0,   1,   0, 160,  84, 
-    101, 120, 116, 117, 114, 101, 
-     86, 101, 114, 116, 101, 120, 
-     83, 104,  97, 100, 101, 114, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  40,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  48,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  44,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  52,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  48,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  56,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  32,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  32,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  36,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  36,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  16,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  16,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  20,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  20,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  24,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  24,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  28,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  28,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,   0,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,   4,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,   4,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,   8,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,   8,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  12,   0, 
+      4,   0, 152,   0,   0,   0, 
+      1,   0,  44,   3,  12,   0, 
       0,   0,  46,   0,  62,  17, 
-      3,  16,   0,   0,   9,   0, 
-    105, 110, 112, 117, 116,   0, 
+      7,  16,   0,   0,   8,   0, 
+    111, 117, 116, 112, 117, 116, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,   0,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,   0,   0, 
+      0,   0,   5,   0,  40,   0, 
+      4,   0, 120,   1,   0,   0, 
+      1,   0,  76,   2,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  44,   0, 
+      4,   0, 120,   1,   0,   0, 
+      1,   0,  76,   2,   4,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  48,   0, 
+      4,   0, 120,   1,   0,   0, 
+      1,   0,  76,   2,   8,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  32,   0, 
+      4,   0, 160,   1,   0,   0, 
+      1,   0,  36,   2,  32,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  36,   0, 
+      4,   0, 160,   1,   0,   0, 
+      1,   0,  36,   2,  36,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0, 248,   1,   0,   0, 
+      1,   0, 204,   1,  48,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   4,   0, 
+      4,   0,  32,   2,   0,   0, 
+      1,   0, 164,   1,  52,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,   4,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,   4,   0, 
+      0,   0,   5,   0,   8,   0, 
+      4,   0,  72,   2,   0,   0, 
+      1,   0, 124,   1,  56,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,   8,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,   8,   0, 
+      0,   0,   5,   0,  12,   0, 
+      4,   0, 112,   2,   0,   0, 
+      1,   0,  84,   1,  60,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,  12,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,  12,   0, 
+      0,   0,   5,   0,  16,   0, 
+      4,   0, 144,   2,   0,   0, 
+      1,   0, 128,   0,  16,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,  16,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,  16,   0, 
+      0,   0,   5,   0,  20,   0, 
+      4,   0, 176,   2,   0,   0, 
+      1,   0, 128,   0,  20,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,  20,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,  20,   0, 
+      0,   0,   5,   0,  24,   0, 
+      4,   0, 208,   2,   0,   0, 
+      1,   0, 128,   0,  24,   0, 
       0,   0,  22,   0,  80,  17, 
-      1,   0,   5,   0,  24,   0, 
-      4,   0, 100,   0,   0,   0, 
-      1,   0,  36,   1,  32,   0, 
+      0,   0,   5,   0,  28,   0, 
+      4,   0, 240,   2,   0,   0, 
+      1,   0, 128,   0,  28,   0, 
       0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  12,   0, 
-      4,   0, 120,   0,   0,   0, 
-      1,   0,  16,   1,  12,   0, 
-      0,   0,  74,   0,  62,  17, 
-      7,  16,   0,   0, 136,   0, 
-     60,  84, 101, 120, 116, 117, 
-    114, 101,  86, 101, 114, 116, 
-    101, 120,  83, 104,  97, 100, 
-    101, 114,  32, 114, 101, 116, 
-    117, 114, 110,  32, 118,  97, 
-    108, 117, 101,  62,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     22,   0,  80,  17,   2,   0, 
-      5,   0,  16,   0,   4,   0, 
-    100,   0,   0,   0,   1,   0, 
-     36,   1,  16,   0,   0,   0, 
-     22,   0,  80,  17,   2,   0, 
-      5,   0,  20,   0,   4,   0, 
-    100,   0,   0,   0,   1,   0, 
-     36,   1,  20,   0,   0,   0, 
-     22,   0,  80,  17,   2,   0, 
-      5,   0,   0,   0,   4,   0, 
-    100,   0,   0,   0,   1,   0, 
-     36,   1,   0,   0,   0,   0, 
-     22,   0,  80,  17,   2,   0, 
-      5,   0,   4,   0,   4,   0, 
-    100,   0,   0,   0,   1,   0, 
-     36,   1,   4,   0,   0,   0, 
-     22,   0,  80,  17,   2,   0, 
-      5,   0,   8,   0,   4,   0, 
-    100,   0,   0,   0,   1,   0, 
-     36,   1,   8,   0,   0,   0, 
-     22,   0,  80,  17,   2,   0, 
-      5,   0,  12,   0,   4,   0, 
-    100,   0,   0,   0,   1,   0, 
-     36,   1,  12,   0,   0,   0, 
-     46,   0,  62,  17,   6,  16, 
-      0,   0,   8,   0, 111, 117, 
-    116, 112, 117, 116,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,  16,   0,   4,   0, 
-    140,   0,   0,   0,   1,   0, 
-    252,   0,  16,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,  20,   0,   4,   0, 
-    140,   0,   0,   0,   1,   0, 
-    252,   0,  20,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   0,   0,   4,   0, 
-    228,   0,   0,   0,   1,   0, 
-    164,   0,  32,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   4,   0,   4,   0, 
-     12,   1,   0,   0,   1,   0, 
-    124,   0,  36,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   8,   0,   4,   0, 
-     52,   1,   0,   0,   1,   0, 
-     84,   0,  40,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,  12,   0,   4,   0, 
-     92,   1,   0,   0,   1,   0, 
-     44,   0,  44,   0,   0,   0, 
-      2,   0,   6,   0, 244,   0, 
-      0,   0,  24,   0,   0,   0, 
-      1,   0,   0,   0,  16,   1, 
-    195, 136, 163, 205, 119,  93, 
-     78, 120, 171,  17,   4,  84, 
-    110, 240, 121, 227,   0,   0, 
-    242,   0,   0,   0,  32,   1, 
-      0,   0,   0,   0,   0,   0, 
-      1,   0,   1,   0, 136,   1, 
-      0,   0,   0,   0,   0,   0, 
-     22,   0,   0,   0,  20,   1, 
-      0,   0, 100,   0,   0,   0, 
-     34,   0,   0, 128, 100,   0, 
-      0,   0,  34,   0,   0,   0, 
-    120,   0,   0,   0,  37,   0, 
-      0, 128, 120,   0,   0,   0, 
-     37,   0,   0,   0, 140,   0, 
-      0,   0,  40,   0,   0, 128, 
-    140,   0,   0,   0,  40,   0, 
-      0,   0, 172,   0,   0,   0, 
-     40,   0,   0, 128, 172,   0, 
-      0,   0,  40,   0,   0,   0, 
-    192,   0,   0,   0,  40,   0, 
-      0, 128, 192,   0,   0,   0, 
-     40,   0,   0,   0, 228,   0, 
-      0,   0,  40,   0,   0, 128, 
-    228,   0,   0,   0,  40,   0, 
-      0,   0,  12,   1,   0,   0, 
-     40,   0,   0, 128,  12,   1, 
-      0,   0,  40,   0,   0,   0, 
-     52,   1,   0,   0,  40,   0, 
-      0, 128,  52,   1,   0,   0, 
-     40,   0,   0,   0,  92,   1, 
+      0,   0,   5,   0,  16,   0, 
+      4,   0,  16,   3,   0,   0, 
+      1,   0, 180,   0,  64,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  20,   0, 
+      4,   0,  48,   3,   0,   0, 
+      1,   0, 148,   0,  68,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  24,   0, 
+      4,   0,  80,   3,   0,   0, 
+      1,   0, 116,   0,  72,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  28,   0, 
+      4,   0, 112,   3,   0,   0, 
+      1,   0,  84,   0,  76,   0, 
+      0,   0,   2,   0,   6,   0, 
+    244,   0,   0,   0,  24,   0, 
+      0,   0,   1,   0,   0,   0, 
+     16,   1, 179,  13,  72, 160, 
+    162, 195,  89, 194, 190,  27, 
+    114, 125, 118, 227, 205, 203, 
+      0,   0, 242,   0,   0,   0, 
+    184,   2,   0,   0,   0,   0, 
+      0,   0,   1,   0,   1,   0, 
+    196,   3,   0,   0,   0,   0, 
+      0,   0,  56,   0,   0,   0, 
+    172,   2,   0,   0, 152,   0, 
       0,   0,  42,   0,   0, 128, 
-     92,   1,   0,   0,  42,   0, 
-      0,   0, 112,   1,   0,   0, 
-     42,   0,   0, 128, 112,   1, 
+    152,   0,   0,   0,  42,   0, 
+      0,   0, 184,   0,   0,   0, 
+     42,   0,   0, 128, 184,   0, 
+      0,   0,  42,   0,   0,   0, 
+    220,   0,   0,   0,  42,   0, 
+      0, 128, 220,   0,   0,   0, 
+     42,   0,   0,   0,   4,   1, 
+      0,   0,  42,   0,   0, 128, 
+      4,   1,   0,   0,  42,   0, 
+      0,   0,  44,   1,   0,   0, 
+     42,   0,   0, 128,  44,   1, 
       0,   0,  42,   0,   0,   0, 
-    132,   1,   0,   0,  42,   0, 
-      0, 128, 132,   1,   0,   0, 
-     42,   0,   0,   0,   5,   0, 
+     72,   1,   0,   0,  42,   0, 
+      0, 128,  72,   1,   0,   0, 
+     42,   0,   0,   0,  92,   1, 
+      0,   0,  42,   0,   0, 128, 
+     92,   1,   0,   0,  42,   0, 
+      0,   0, 120,   1,   0,   0, 
+     45,   0,   0, 128, 120,   1, 
+      0,   0,  45,   0,   0,   0, 
+    140,   1,   0,   0,  48,   0, 
+      0, 128, 140,   1,   0,   0, 
+     48,   0,   0,   0, 160,   1, 
+      0,   0,  51,   0,   0, 128, 
+    160,   1,   0,   0,  51,   0, 
+      0,   0, 192,   1,   0,   0, 
+     51,   0,   0, 128, 192,   1, 
+      0,   0,  51,   0,   0,   0, 
+    212,   1,   0,   0,  51,   0, 
+      0, 128, 212,   1,   0,   0, 
+     51,   0,   0,   0, 248,   1, 
+      0,   0,  51,   0,   0, 128, 
+    248,   1,   0,   0,  51,   0, 
+      0,   0,  32,   2,   0,   0, 
+     51,   0,   0, 128,  32,   2, 
+      0,   0,  51,   0,   0,   0, 
+     72,   2,   0,   0,  51,   0, 
+      0, 128,  72,   2,   0,   0, 
+     51,   0,   0,   0, 112,   2, 
+      0,   0,  52,   0,   0, 128, 
+    112,   2,   0,   0,  52,   0, 
+      0,   0, 144,   2,   0,   0, 
+     52,   0,   0, 128, 144,   2, 
+      0,   0,  52,   0,   0,   0, 
+    176,   2,   0,   0,  52,   0, 
+      0, 128, 176,   2,   0,   0, 
+     52,   0,   0,   0, 208,   2, 
+      0,   0,  52,   0,   0, 128, 
+    208,   2,   0,   0,  52,   0, 
+      0,   0, 240,   2,   0,   0, 
+     53,   0,   0, 128, 240,   2, 
+      0,   0,  53,   0,   0,   0, 
+     16,   3,   0,   0,  53,   0, 
+      0, 128,  16,   3,   0,   0, 
+     53,   0,   0,   0,  48,   3, 
+      0,   0,  53,   0,   0, 128, 
+     48,   3,   0,   0,  53,   0, 
+      0,   0,  80,   3,   0,   0, 
+     53,   0,   0, 128,  80,   3, 
+      0,   0,  53,   0,   0,   0, 
+    112,   3,   0,   0,  55,   0, 
+      0, 128, 112,   3,   0,   0, 
+     55,   0,   0,   0, 132,   3, 
+      0,   0,  55,   0,   0, 128, 
+    132,   3,   0,   0,  55,   0, 
+      0,   0, 152,   3,   0,   0, 
+     55,   0,   0, 128, 152,   3, 
+      0,   0,  55,   0,   0,   0, 
+    172,   3,   0,   0,  55,   0, 
+      0, 128, 172,   3,   0,   0, 
+     55,   0,   0,   0, 192,   3, 
+      0,   0,  55,   0,   0, 128, 
+    192,   3,   0,   0,  55,   0, 
+      0,   0,   5,   0,  95,   0, 
+     61,   0,  90,   0,   5,   0, 
+     95,   0,  32,   0,  92,   0, 
+      5,   0,  95,   0,  32,   0, 
+     92,   0,   5,   0,  95,   0, 
+     32,   0,  92,   0,   5,   0, 
+     95,   0,  21,   0,  94,   0, 
+      5,   0,  95,   0,  21,   0, 
+     94,   0,   5,   0,  95,   0, 
+     21,   0,  94,   0,   5,   0, 
      28,   0,   5,   0,  27,   0, 
       5,   0,  27,   0,   5,   0, 
      26,   0,   5,   0,  76,   0, 
@@ -1564,14 +1972,46 @@ const BYTE UIVertexShader[] =
      23,   0,  75,   0,   5,   0, 
      76,   0,  23,   0,  75,   0, 
       5,   0,  76,   0,  23,   0, 
-     75,   0,   5,   0,  18,   0, 
+     75,   0,   5,   0,  51,   0, 
+     23,   0,  50,   0,   5,   0, 
+     51,   0,  23,   0,  50,   0, 
+      5,   0,  51,   0,  23,   0, 
+     50,   0,   5,   0,  51,   0, 
+     23,   0,  50,   0,   5,   0, 
+     57,   0,  23,   0,  56,   0, 
+      5,   0,  57,   0,  23,   0, 
+     56,   0,   5,   0,  57,   0, 
+     23,   0,  56,   0,   5,   0, 
+     57,   0,  23,   0,  56,   0, 
       5,   0,  18,   0,   5,   0, 
      18,   0,   5,   0,  18,   0, 
       5,   0,  18,   0,   5,   0, 
-     18,   0, 246,   0,   0,   0, 
-      4,   0,   0,   0,   0,   0, 
-      0,   0,   8,   0,   0,   0, 
-      0,   0,   0,   0,  36,   0, 
+     18,   0,   5,   0,  18,   0, 
+      5,   0,  18,   0,   5,   0, 
+     18,   0,   5,   0,  18,   0, 
+      5,   0,  18,   0, 246,   0, 
+      0,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+     36,   0,   0,   0,  72,   0, 
+      0,   0, 100,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1629,13 +2069,13 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
      11, 202,  49,   1,  56,   0, 
       0,   0,   0,  16,   0,   0, 
-     13,  16,   0,   0,  88,   1, 
+     15,  16,   0,   0, 184,   1, 
       0,   0,  10,   0, 255, 255, 
       4,   0,   0,   0, 255, 255, 
       3,   0,   0,   0,   0,   0, 
-     52,   0,   0,   0,  52,   0, 
+     60,   0,   0,   0,  60,   0, 
       0,   0,   8,   0,   0,   0, 
-     60,   0,   0,   0,   0,   0, 
+     68,   0,   0,   0,   0,   0, 
       0,   0,  22,   0,  27,  21, 
      64,   0,   0,   0,   4,   0, 
       0,   0,  16,   0, 102, 108, 
@@ -1644,74 +2084,74 @@ const BYTE UIVertexShader[] =
      64,   0,   0,   0,   2,   0, 
       0,   0,   8,   0, 102, 108, 
     111,  97, 116,  50,   0, 243, 
-    242, 241,  58,   0,   3,  18, 
+    242, 241,  22,   0,  27,  21, 
+     64,   0,   0,   0,   3,   0, 
+      0,   0,  12,   0, 102, 108, 
+    111,  97, 116,  51,   0, 243, 
+    242, 241,  78,   0,   3,  18, 
      13,  21,   3,   0,   0,  16, 
       0,   0,   0,   0, 112, 111, 
     115, 105, 116, 105, 111, 110, 
       0, 241,  13,  21,   3,   0, 
       1,  16,   0,   0,  16,   0, 
     116, 101, 120,   0, 242, 241, 
-     13,  21,   3,   0, 117,   0, 
-      0,   0,  24,   0, 107, 110, 
-    111,  99, 104, 101, 110,   0, 
-    242, 241,  38,   0,   5,  21, 
-      3,   0,   0,   0,   2,  16, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  28,   0, 
-     86, 101, 114, 116, 101, 120, 
-     73, 110, 112, 117, 116,  84, 
-    121, 112, 101,   0, 242, 241, 
-     10,   0,   1,  18,   1,   0, 
-      0,   0,   3,  16,   0,   0, 
-     38,   0,   3,  18,  13,  21, 
-      3,   0,   0,  16,   0,   0, 
-      0,   0, 112, 111, 115, 105, 
-    116, 105, 111, 110,   0, 241, 
-     13,  21,   3,   0,   1,  16, 
-      0,   0,  16,   0, 116, 101, 
-    120,   0, 242, 241,  38,   0, 
-      5,  21,   2,   0,   0,   0, 
-      5,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     24,   0,  80, 105, 120, 101, 
+     13,  21,   3,   0,   2,  16, 
+      0,   0,  24,   0, 110, 111, 
+    114, 109,  97, 108,   0, 243, 
+    242, 241,  13,  21,   3,   0, 
+    117,   0,   0,   0,  36,   0, 
+    107, 110, 111,  99, 104, 101, 
+    110,   0, 242, 241,  38,   0, 
+      5,  21,   4,   0,   0,   0, 
+      3,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     40,   0,  86, 101, 114, 116, 
+    101, 120,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,   0, 
+    242, 241,  10,   0,   1,  18, 
+      1,   0,   0,   0,   4,  16, 
+      0,   0,  78,   0,   3,  18, 
+     13,  21,   3,   0,   0,  16, 
+      0,   0,   0,   0, 119, 111, 
+    114, 108, 100,  80, 111, 115, 
+      0, 241,  13,  21,   3,   0, 
+      0,  16,   0,   0,  16,   0, 
+    112, 111, 115, 105, 116, 105, 
+    111, 110,   0, 241,  13,  21, 
+      3,   0,   1,  16,   0,   0, 
+     32,   0, 116, 101, 120,   0, 
+    242, 241,  13,  21,   3,   0, 
+      2,  16,   0,   0,  40,   0, 
+    110, 111, 114, 109,  97, 108, 
+      0, 243, 242, 241,  38,   0, 
+      5,  21,   4,   0,   0,   0, 
+      6,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     52,   0,  80, 105, 120, 101, 
     108,  73, 110, 112, 117, 116, 
      84, 121, 112, 101,   0, 243, 
     242, 241,  10,   0,  24,  21, 
-      6,  16,   0,   0,   1,   0, 
+      7,  16,   0,   0,   1,   0, 
       1,   0,  14,   0,   8,  16, 
-      7,  16,   0,   0,  23,   0, 
-      1,   0,   4,  16,   0,   0, 
+      8,  16,   0,   0,  23,   0, 
+      1,   0,   5,  16,   0,   0, 
      30,   0,  28,  21,  64,   0, 
       0,   0,   4,   0,   0,   0, 
       4,   0,   0,   0,  16,   0, 
       0,   0,   0,  64,   0, 102, 
     108, 111,  97, 116,  52, 120, 
      52,   0,  10,   0,  24,  21, 
-      9,  16,   0,   0,   1,   0, 
+     10,  16,   0,   0,   1,   0, 
       1,   0,  18,   0,  22,  21, 
-     10,  16,   0,   0,  34,   0, 
+     11,  16,   0,   0,  34,   0, 
       0,   0,  64,   0,   0,   0, 
       0,  32,   0, 241,  10,   0, 
+     24,  21,  12,  16,   0,   0, 
+      1,   0,   0,   2,  10,   0, 
      24,  21,  11,  16,   0,   0, 
       1,   0,   0,   2,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
       0,   0,  11, 202,  49,   1, 
      56,   0,   0,   0,   0,  16, 
       0,   0,   0,  16,   0,   0, 
@@ -1797,28 +2237,24 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  47,  47, 
+      0,   0,   0,   0, 125,  59, 
+     13,  10,  13,  10,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
      47,  47,  47,  47,  47,  47, 
-     13,  10,  80, 105, 120, 101, 
-    108,  73, 110, 112, 117, 116, 
-     84, 121, 112, 101,  32,  84, 
-    101, 120, 116, 117, 114, 101, 
-     86, 101, 114, 116, 101, 120, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     13,  10,  47,  47,  32,  86, 
+    101, 114, 116, 101, 120,  32, 
      83, 104,  97, 100, 101, 114, 
-     40,  32,  86, 101, 114, 116, 
-    101, 120,  73, 110, 112, 117, 
-    116,  84, 121, 112, 101,  32, 
-    105, 110, 112, 117, 116,  32, 
-     41,  13,  10, 123,  13,  10, 
-     32,  32,  32,  32,  47,  47, 
-    114, 101, 116, 117, 114, 110, 
-     32, 105, 110, 112, 117, 116, 
-     59,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
@@ -1830,94 +2266,165 @@ const BYTE UIVertexShader[] =
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  13,  10, 
-     32,  32,  32,  32,  80, 105, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  13,  10,  80, 105, 
     120, 101, 108,  73, 110, 112, 
     117, 116,  84, 121, 112, 101, 
-     32, 111, 117, 116, 112, 117, 
-    116,  59,  13,  10,  13,  10, 
-     32,  32,  32,  32,  47,  47, 
-     32,  67, 104,  97, 110, 103, 
-    101,  32, 116, 104, 101,  32, 
-    112, 111, 115, 105, 116, 105, 
-    111, 110,  32, 118, 101,  99, 
-    116, 111, 114,  32, 116, 111, 
-     32,  98, 101,  32,  52,  32, 
-    117, 110, 105, 116, 115,  32, 
-    102, 111, 114,  32, 112, 114, 
-    111, 112, 101, 114,  32, 109, 
-     97, 116, 114, 105, 120,  32, 
-     99,  97, 108,  99, 117, 108, 
-     97, 116, 105, 111, 110, 115, 
-     46,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     32,  32,  32,  32, 105, 110, 
-    112, 117, 116,  46, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     46, 119,  32,  61,  32,  49, 
-     46,  48, 102,  59,  13,  10, 
+     32,  84, 101, 120, 116, 117, 
+    114, 101,  86, 101, 114, 116, 
+    101, 120,  83, 104,  97, 100, 
+    101, 114,  40,  32,  86, 101, 
+    114, 116, 101, 120,  73, 110, 
+    112, 117, 116,  84, 121, 112, 
+    101,  32, 105, 110, 112, 117, 
+    116,  32,  41,  13,  10, 123, 
      13,  10,  32,  32,  32,  32, 
-     47,  47,  32,  83, 116, 111, 
-    114, 101,  32, 116, 104, 101, 
-     32, 116, 101, 120, 116, 117, 
-    114, 101,  32,  99, 111, 111, 
-    114, 100, 105, 110,  97, 116, 
-    101, 115,  32, 102, 111, 114, 
-     32, 116, 104, 101,  32, 112, 
-    105, 120, 101, 108,  32, 115, 
-    104,  97, 100, 101, 114,  46, 
+     47,  47, 114, 101, 116, 117, 
+    114, 110,  32, 105, 110, 112, 
+    117, 116,  59,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      32,  32,  32,  32,  32,  32, 
      13,  10,  32,  32,  32,  32, 
-    111, 117, 116, 112, 117, 116, 
-     46, 116, 101, 120,  32,  61, 
-     32, 105, 110, 112, 117, 116, 
-     46, 116, 101, 120,  59,  13, 
-     10,  13,  10,  32,  32,  32, 
-     32,  47,  47,  32,  67,  97, 
-    108,  99, 117, 108,  97, 116, 
-    101,  32, 116, 104, 101,  32, 
-    112, 111, 115, 105, 116, 105, 
-    111, 110,  32, 111, 102,  32, 
-    116, 104, 101,  32, 118, 101, 
-    114, 116, 101, 120,  32,  97, 
-    103,  97, 105, 110, 115, 116, 
-     32, 116, 104, 101,  32, 119, 
-    111, 114, 108, 100,  44,  32, 
-    118, 105, 101, 119,  44,  32, 
-     97, 110, 100,  32, 112, 114, 
-    111, 106, 101,  99, 116, 105, 
-    111, 110,  32, 109,  97, 116, 
-    114, 105,  99, 101, 115,  46, 
-     32,  13,  10,  32,  32,  32, 
-     32, 111, 117, 116, 112, 117, 
-    116,  46, 112, 111, 115, 105, 
-    116, 105, 111, 110,  32,  61, 
+     80, 105, 120, 101, 108,  73, 
+    110, 112, 117, 116,  84, 121, 
+    112, 101,  32, 111, 117, 116, 
+    112, 117, 116,  59,  13,  10, 
+     32,  32,  32,  32, 111, 117, 
+    116, 112, 117, 116,  46, 110, 
+    111, 114, 109,  97, 108,  32, 
+     61,  32, 110, 111, 114, 109, 
+     97, 108, 105, 122, 101,  40, 
      32, 109, 117, 108,  40,  32, 
     105, 110, 112, 117, 116,  46, 
-    112, 111, 115, 105, 116, 105, 
-    111, 110,  44,  32, 107, 110, 
-    111,  99, 104, 101, 110,  77, 
-     97, 116, 114, 105, 120,  91, 
+    110, 111, 114, 109,  97, 108, 
+     44,  32,  40, 102, 108, 111, 
+     97, 116,  51, 120,  51,  41, 
+    107, 110, 111,  99, 104, 101, 
+    110,  77,  97, 116, 114, 105, 
+    120,  91,  32, 105, 110, 112, 
+    117, 116,  46, 107, 110, 111, 
+     99, 104, 101, 110,  32,  93, 
+     32,  41,  32,  41,  59,  13, 
+     10,  13,  10,  32,  32,  32, 
+     32,  47,  47,  32,  67, 104, 
+     97, 110, 103, 101,  32, 116, 
+    104, 101,  32, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+    118, 101,  99, 116, 111, 114, 
+     32, 116, 111,  32,  98, 101, 
+     32,  52,  32, 117, 110, 105, 
+    116, 115,  32, 102, 111, 114, 
+     32, 112, 114, 111, 112, 101, 
+    114,  32, 109,  97, 116, 114, 
+    105, 120,  32,  99,  97, 108, 
+     99, 117, 108,  97, 116, 105, 
+    111, 110, 115,  46,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  13,  10,  32,  32,  32, 
      32, 105, 110, 112, 117, 116, 
-     46, 107, 110, 111,  99, 104, 
-    101, 110,  32,  93,  32,  41, 
+     46, 112, 111, 115, 105, 116, 
+    105, 111, 110,  46, 119,  32, 
+     61,  32,  49,  46,  48, 102, 
      59,  13,  10,  13,  10,  32, 
-     32,  32,  32, 114, 101, 116, 
-    117, 114, 110,  32, 111, 117, 
-    116, 112, 117, 116,  59,  13, 
-     10, 125,   0,   7,   0,   0, 
-      0,   0,   0,   0,   0,  92, 
-      0,   0,   0,  93,   0,   0, 
-      0, 184,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   4, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+     32,  32,  32,  47,  47,  32, 
+     83, 116, 111, 114, 101,  32, 
+    116, 104, 101,  32, 116, 101, 
+    120, 116, 117, 114, 101,  32, 
+     99, 111, 111, 114, 100, 105, 
+    110,  97, 116, 101, 115,  32, 
+    102, 111, 114,  32, 116, 104, 
+    101,  32, 112, 105, 120, 101, 
+    108,  32, 115, 104,  97, 100, 
+    101, 114,  46,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  13,  10,  32, 
+     32,  32,  32, 111, 117, 116, 
+    112, 117, 116,  46, 116, 101, 
+    120,  32,  61,  32, 105, 110, 
+    112, 117, 116,  46, 116, 101, 
+    120,  59,  13,  10,  13,  10, 
+     32,  32,  32,  32,  47,  47, 
+     32,  67,  97, 108,  99, 117, 
+    108,  97, 116, 101,  32, 116, 
+    104, 101,  32, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+    111, 102,  32, 116, 104, 101, 
+     32, 118, 101, 114, 116, 101, 
+    120,  32,  97, 103,  97, 105, 
+    110, 115, 116,  32, 116, 104, 
+    101,  32, 119, 111, 114, 108, 
+    100,  44,  32, 118, 105, 101, 
+    119,  44,  32,  97, 110, 100, 
+     32, 112, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,  32, 
+    109,  97, 116, 114, 105,  99, 
+    101, 115,  46,  32,  13,  10, 
+     32,  32,  32,  32, 111, 117, 
+    116, 112, 117, 116,  46, 119, 
+    111, 114, 108, 100,  80, 111, 
+    115,  32,  61,  32, 109, 117, 
+    108,  40,  32, 105, 110, 112, 
+    117, 116,  46, 112, 111, 115, 
+    105, 116, 105, 111, 110,  44, 
+     32, 107, 110, 111,  99, 104, 
+    101, 110,  77,  97, 116, 114, 
+    105, 120,  91,  32, 105, 110, 
+    112, 117, 116,  46, 107, 110, 
+    111,  99, 104, 101, 110,  32, 
+     93,  32,  41,  59,  13,  10, 
+     32,  32,  32,  32, 111, 117, 
+    116, 112, 117, 116,  46, 112, 
+    111, 115, 105, 116, 105, 111, 
+    110,  32,  61,  32, 109, 117, 
+    108,  40,  32, 111, 117, 116, 
+    112, 117, 116,  46, 119, 111, 
+    114, 108, 100,  80, 111, 115, 
+     44,  32, 118, 105, 101, 119, 
+     32,  41,  59,  13,  10,  32, 
+     32,  32,  32, 111, 117, 116, 
+    112, 117, 116,  46, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32,  61,  32, 109, 117, 108, 
+     40,  32, 111, 117, 116, 112, 
+    117, 116,  46, 112, 111, 115, 
+    105, 116, 105, 111, 110,  44, 
+     32, 112, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,  32, 
+     41,  59,  13,  10,  13,  10, 
+     32,  32,  32,  32, 114, 101, 
+    116, 117, 114, 110,  32, 111, 
+    117, 116, 112, 117, 116,  59, 
+     13,  10, 125,   0,   7,   0, 
       0,   0,   0,   0,   0,   0, 
+     92,   0,   0,   0,  93,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0, 184,   0, 
       0,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1968,13 +2475,10 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  68,  51,  68,  83, 
-     72,  68,  82,   0, 136,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  32,   0,   0,  96, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -1989,9 +2493,14 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  68,  51, 
+     68,  83,  72,  68,  82,   0, 
+    196,   3,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  32,   0, 
+      0,  96,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2053,19 +2562,12 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255,  26,   9,  47, 241, 
-     16,   0,   0,   0,  12,   2, 
-      0,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,  37,   0, 
-      0,   0,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      2,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2077,12 +2579,21 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,  26,   9, 
+     47, 241,  32,   0,   0,   0, 
+     20,   2,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     73,   0,   0,   0,   1,   0, 
+      0,   0,  37,   0,   0,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   0,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2090,8 +2601,8 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   4, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2108,6 +2619,7 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   4, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2134,6 +2646,7 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   4,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2145,7 +2658,6 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  12,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2161,6 +2673,9 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  12,   0, 
+      0,   0,  24,   0,   0,   0, 
+     36,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2224,18 +2739,6 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  34,   0,  37,  17, 
-      0,   0,   0,   0, 140,   0, 
-      0,   0,   1,   0,  84, 101, 
-    120, 116, 117, 114, 101,  86, 
-    101, 114, 116, 101, 120,  83, 
-    104,  97, 100, 101, 114,   0, 
-      0,   0,  34,   0,  81,  17, 
-     12,  16,   0,   0,   8,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255, 255, 255, 107, 110, 
-    111,  99, 104, 101, 110,  77, 
-     97, 116, 114, 105, 120,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2246,6 +2749,29 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  34,   0, 
+     37,  17,   0,   0,   0,   0, 
+    140,   0,   0,   0,   1,   0, 
+     84, 101, 120, 116, 117, 114, 
+    101,  86, 101, 114, 116, 101, 
+    120,  83, 104,  97, 100, 101, 
+    114,   0,   0,   0,  34,   0, 
+     81,  17,  13,  16,   0,   0, 
+      8,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255, 255, 255, 
+    107, 110, 111,  99, 104, 101, 
+    110,  77,  97, 116, 114, 105, 
+    120,   0,   0,   0,  26,   0, 
+     81,  17,  14,  16,   0,   0, 
+      8,   0,   1,   0,   0,   0, 
+    255, 255, 255, 255, 255, 255, 
+    118, 105, 101, 119,   0,   0, 
+      0,   0,  30,   0,  81,  17, 
+     14,  16,   0,   0,   8,   0, 
+      1,   0,  64,   0, 255, 255, 
+    255, 255, 255, 255, 112, 114, 
+    111, 106, 101,  99, 116, 105, 
+    111, 110,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2309,13 +2835,13 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  16,   0, 
+     16,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,  26,   9,  47, 241, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-     26,   9,  47, 241,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2394,71 +2920,71 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+    119,   9,  49,   1,   1,   0, 
+      0,   0,  13,   0,  10, 140, 
+     14,   0, 180, 156,  15,   0, 
+     11,   0,  92,   0,   0,   0, 
+     32,   0,   0,   0,  44,   0, 
+      0,   0, 104,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255, 119,   9, 
-     49,   1,   1,   0,   0,   0, 
-     13,   0,  10, 140,  14,   0, 
-    180, 156,  15,   0,  11,   0, 
-     92,   0,   0,   0,  32,   0, 
-      0,   0,  44,   0,   0,   0, 
-    104,   0,   0,   0,   0,   0, 
+      0,   0,  22,   0,   0,   0, 
+     25,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     22,   0,   0,   0,  25,   0, 
+      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
+    196,   3,   0,   0,  32,   0, 
+      0,  96,   0,   0, 183,  16, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0, 136,   1, 
-      0,   0,  32,   0,   0,  96, 
-      0,   0,  28, 107,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      2,   0,   9,   0,  88,   3, 
-      0,   0,   0,   0,   0,   0, 
-     84,   1,   0,   0,   1,   0, 
-      0,   0, 240, 120, 132,   3, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  84, 101, 120, 116, 
-    117, 114, 101,  86, 101, 114, 
-    116, 101, 120,  83, 104,  97, 
-    100, 101, 114,   0, 110, 111, 
-    110, 101,   0,   0,   0,   0, 
-     45, 186,  46, 241,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
-    136,   1,   0,   0,  32,   0, 
-      0,  96,   0,   0,  28, 107, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   2,   0, 
-      7,   0,   0,   0,   0,   0, 
-      1,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0, 136,   1, 
-      0,   0,   8,   2,   0,   0, 
-      0,   0,   0,   0, 255, 255, 
+      0,   0,   2,   0,   9,   0, 
+     80,   5,   0,   0,   0,   0, 
+      0,   0, 236,   2,   0,   0, 
+      1,   0,   0,   0,  40, 121, 
+     69,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  84, 101, 
+    120, 116, 117, 114, 101,  86, 
+    101, 114, 116, 101, 120,  83, 
+    104,  97, 100, 101, 114,   0, 
+    110, 111, 110, 101,   0,   0, 
+      0,   0,  45, 186,  46, 241, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 196,   3,   0,   0, 
+     32,   0,   0,  96,   0,   0, 
+    183,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      2,   0,   7,   0,   0,   0, 
+      0,   0,   1,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-    255, 255, 255, 255,   1,   0, 
+    196,   3,   0,   0,   8,   2, 
+      0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      1,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+     67,  58,  92,  85, 115, 101, 
+    114, 115,  92, 107, 111, 108, 
+    106,  97,  92,  79, 110, 101, 
+     68, 114, 105, 118, 101,  92, 
+     68, 101, 115, 107, 116, 111, 
+    112,  92,  75, 111, 108, 106, 
+     97,  45,  83, 116, 114, 111, 
+    104, 109,  45,  71,  97, 109, 
+    101, 115,  92,  65, 108, 108, 
+    103, 101, 109, 101, 105, 110, 
+     92,  70, 114,  97, 109, 101, 
+    119, 111, 114, 107,  92,  85, 
+     73,  86, 101, 114, 116, 101, 
+    120,  83, 104,  97, 100, 101, 
+    114,  46, 104, 108, 115, 108, 
+      0,   0, 254, 239, 254, 239, 
       1,   0,   0,   0,   1,   0, 
-      0,   0,   0,   0,  67,  58, 
-     92,  85, 115, 101, 114, 115, 
-     92, 107, 111, 108, 106,  97, 
-     92,  79, 110, 101,  68, 114, 
-    105, 118, 101,  92,  68, 101, 
-    115, 107, 116, 111, 112,  92, 
-     75, 111, 108, 106,  97,  45, 
-     83, 116, 114, 111, 104, 109, 
-     45,  71,  97, 109, 101, 115, 
-     92,  65, 108, 108, 103, 101, 
-    109, 101, 105, 110,  92,  70, 
-    114,  97, 109, 101, 119, 111, 
-    114, 107,  92,  85,  73,  86, 
-    101, 114, 116, 101, 120,  83, 
-    104,  97, 100, 101, 114,  46, 
-    104, 108, 115, 108,   0,   0, 
-    254, 239, 254, 239,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255,  12, 
-      0, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255,   0, 
+      0,   0,   0, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255,  12,   0, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2479,46 +3005,45 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 148,  46, 
+     49,   1, 137, 165,  80,  92, 
+      1,   0,   0,   0, 191,  13, 
+     30, 146, 241, 109,  80,  72, 
+    139,  18,  63, 138, 222,   6, 
+    183,  16, 136,   0,   0,   0, 
+     47,  76, 105, 110, 107,  73, 
+    110, 102, 111,   0,  47, 110, 
+     97, 109, 101, 115,   0,  47, 
+    115, 114,  99,  47, 104, 101, 
+     97, 100, 101, 114,  98, 108, 
+    111,  99, 107,   0,  47, 115, 
+    114,  99,  47, 102, 105, 108, 
+    101, 115,  47,  99,  58,  92, 
+    117, 115, 101, 114, 115,  92, 
+    107, 111, 108, 106,  97,  92, 
+    111, 110, 101, 100, 114, 105, 
+    118, 101,  92, 100, 101, 115, 
+    107, 116, 111, 112,  92, 107, 
+    111, 108, 106,  97,  45, 115, 
+    116, 114, 111, 104, 109,  45, 
+    103,  97, 109, 101, 115,  92, 
+     97, 108, 108, 103, 101, 109, 
+    101, 105, 110,  92, 102, 114, 
+     97, 109, 101, 119, 111, 114, 
+    107,  92, 117, 105, 118, 101, 
+    114, 116, 101, 120, 115, 104, 
+     97, 100, 101, 114,  46, 104, 
+    108, 115, 108,   0,   4,   0, 
+      0,   0,   6,   0,   0,   0, 
+      1,   0,   0,   0,  58,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 148,  46,  49,   1, 
-    217, 169,  75,  92,   1,   0, 
-      0,   0, 158,  76, 194, 210, 
-    151, 220,  59,  64, 178, 213, 
-    130, 147, 117,  41,  28, 107, 
-    136,   0,   0,   0,  47,  76, 
-    105, 110, 107,  73, 110, 102, 
-    111,   0,  47, 110,  97, 109, 
-    101, 115,   0,  47, 115, 114, 
-     99,  47, 104, 101,  97, 100, 
-    101, 114,  98, 108, 111,  99, 
-    107,   0,  47, 115, 114,  99, 
-     47, 102, 105, 108, 101, 115, 
-     47,  99,  58,  92, 117, 115, 
-    101, 114, 115,  92, 107, 111, 
-    108, 106,  97,  92, 111, 110, 
-    101, 100, 114, 105, 118, 101, 
-     92, 100, 101, 115, 107, 116, 
-    111, 112,  92, 107, 111, 108, 
-    106,  97,  45, 115, 116, 114, 
-    111, 104, 109,  45, 103,  97, 
-    109, 101, 115,  92,  97, 108, 
-    108, 103, 101, 109, 101, 105, 
-    110,  92, 102, 114,  97, 109, 
-    101, 119, 111, 114, 107,  92, 
-    117, 105, 118, 101, 114, 116, 
-    101, 120, 115, 104,  97, 100, 
-    101, 114,  46, 104, 108, 115, 
-    108,   0,   4,   0,   0,   0, 
-      6,   0,   0,   0,   1,   0, 
-      0,   0,  58,   0,   0,   0, 
-      0,   0,   0,   0,  17,   0, 
-      0,   0,   7,   0,   0,   0, 
-     10,   0,   0,   0,   6,   0, 
+     17,   0,   0,   0,   7,   0, 
+      0,   0,  10,   0,   0,   0, 
+      6,   0,   0,   0,   0,   0, 
+      0,   0,   5,   0,   0,   0, 
+     34,   0,   0,   0,   8,   0, 
       0,   0,   0,   0,   0,   0, 
-      5,   0,   0,   0,  34,   0, 
-      0,   0,   8,   0,   0,   0, 
-      0,   0,   0,   0, 220,  81, 
-     51,   1,   0,   0,   0,   0, 
+    220,  81,  51,   1,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2565,35 +3090,36 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  16,   0, 
-      0,   0,  32,   0,   0,   0, 
-    228,   0,   0,   0, 144,   1, 
-      0,   0, 127,   1,   0,   0, 
-     56,   0,   0,   0,   0,   0, 
-      0,   0, 189,   6,   0,   0, 
-    128,   0,   0,   0, 212,   5, 
-      0,   0, 184,   4,   0,   0, 
-     60,   0,   0,   0,   0,   0, 
-      0,   0,  40,   0,   0,   0, 
-     44,   2,   0,   0,  44,   0, 
-      0,   0,  72,   0,   0,   0, 
-      3,   0,   0,   0,  26,   0, 
-      0,   0,  16,   0,   0,   0, 
-     25,   0,   0,   0,  17,   0, 
-      0,   0,  11,   0,   0,   0, 
-      6,   0,   0,   0,  18,   0, 
-      0,   0,  19,   0,   0,   0, 
-     12,   0,   0,   0,   8,   0, 
+      0,   0,   0,   0,   0,   0, 
+     16,   0,   0,   0,  32,   0, 
+      0,   0, 228,   0,   0,   0, 
+    240,   1,   0,   0, 127,   1, 
+      0,   0,  56,   0,   0,   0, 
+      0,   0,   0,   0,  98,   8, 
+      0,   0, 128,   0,   0,   0, 
+    121,   7,   0,   0,  80,   8, 
+      0,   0,  68,   0,   0,   0, 
+      0,   0,   0,   0,  40,   0, 
+      0,   0,  68,   2,   0,   0, 
+     44,   0,   0,   0, 132,   0, 
+      0,   0,   3,   0,   0,   0, 
+     30,   0,   0,   0,  19,   0, 
+      0,   0,  29,   0,   0,   0, 
+     20,   0,   0,   0,  12,   0, 
+      0,   0,   6,   0,   0,   0, 
+     21,   0,   0,   0,  22,   0, 
+      0,   0,  23,   0,   0,   0, 
+     13,   0,   0,   0,   8,   0, 
       0,   0,   9,   0,   0,   0, 
-     10,   0,   0,   0,  13,   0, 
+     10,   0,   0,   0,  11,   0, 
       0,   0,  14,   0,   0,   0, 
-     15,   0,   0,   0,   7,   0, 
-      0,   0,  20,   0,   0,   0, 
-     21,   0,   0,   0,  22,   0, 
+     15,   0,   0,   0,  16,   0, 
+      0,   0,  17,   0,   0,   0, 
+     18,   0,   0,   0,   7,   0, 
       0,   0,  24,   0,   0,   0, 
-     23,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+     25,   0,   0,   0,  26,   0, 
+      0,   0,  28,   0,   0,   0, 
+     27,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2650,8 +3176,8 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,  31,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     27,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -2906,5 +3432,5 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0
+      0,   0
 };

+ 14 - 1
UIVertexShader.hlsl

@@ -6,6 +6,13 @@ cbuffer MatrixBuffer : register( b0 )
     matrix knochenMatrix[ 128 ];
 };
 
+// The projection and view matrix
+cbuffer Kamera : register( b1 )
+{
+    matrix view;
+    matrix projection;
+}
+
 //////////////                                                                          
 // TYPEDEFS //                                                                          
 //////////////                                                                          
@@ -13,13 +20,16 @@ struct VertexInputType
 {
     float4 position : POSITION;
     float2 tex : TEXCOORD0;
+    float3 normal : NORMAL;
     uint knochen : KNOCHEN_ID0;
 };
 
 struct PixelInputType
 {
+    float4 worldPos : POSITION;
     float4 position : SV_POSITION;
     float2 tex : TEXCOORD0;
+    float3 normal : TEXCOORD1;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -29,6 +39,7 @@ PixelInputType TextureVertexShader( VertexInputType input )
 {
     //return input;                                                                     
     PixelInputType output;
+    output.normal = normalize( mul( input.normal, (float3x3)knochenMatrix[ input.knochen ] ) );
 
     // Change the position vector to be 4 units for proper matrix calculations.         
     input.position.w = 1.0f;
@@ -37,7 +48,9 @@ PixelInputType TextureVertexShader( VertexInputType input )
     output.tex = input.tex;
 
     // Calculate the position of the vertex against the world, view, and projection matrices. 
-    output.position = mul( input.position, knochenMatrix[ input.knochen ] );
+    output.worldPos = mul( input.position, knochenMatrix[ input.knochen ] );
+    output.position = mul( output.worldPos, view );
+    output.position = mul( output.position, projection );
 
     return output;
 }