/*
 * Mesa 3-D graphics library
 * Version:  6.5
 *
 * Copyright (C) 2006  Brian Paul   All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

//
// Constructors and operators introduced in GLSL 1.20 - mostly on new
// (non-square) types of matrices.
//
// One important change in the language is that when a matrix is used
// as an argument to a matrix constructor, it must be the only argument
// for the constructor. The compiler takes care of it by itself and
// here we only care to re-introduce constructors for old (square)
// types of matrices.
//

//
// From Shader Spec, ver. 1.20, rev. 6
//

//// mat2x3: 2 columns of vec3

mat2x3 __constructor(const float f00, const float f10, const float f20,
                     const float f01, const float f11, const float f21)
{
   __retVal[0].x = f00;
   __retVal[0].y = f10;
   __retVal[0].z = f20;
   __retVal[1].x = f01;
   __retVal[1].y = f11;
   __retVal[1].z = f21;
}

mat2x3 __constructor(const float f)
{
   __retVal = mat2x3(  f, 0.0, 0.0,
                     0.0,   f, 0.0);
}

mat2x3 __constructor(const int  i)
{
   const float f = float(i);
   __retVal = mat2x3(f);
}

mat2x3 __constructor(const bool b)
{
   const float f = float(b);
   __retVal = mat2x3(f);
}

mat2x3 __constructor(const vec3 c0, const vec3 c1)
{
   __retVal[0] = c0;
   __retVal[1] = c1;
}



//// mat2x4: 2 columns of vec4

mat2x4 __constructor(const float f00, const float f10, const float f20, const float f30,
                     const float f01, const float f11, const float f21, const float f31)
{
   __retVal[0].x = f00;
   __retVal[0].y = f10;
   __retVal[0].z = f20;
   __retVal[0].w = f30;
   __retVal[1].x = f01;
   __retVal[1].y = f11;
   __retVal[1].z = f21;
   __retVal[1].w = f31;
}

mat2x4 __constructor(const float f)
{
   __retVal = mat2x4(  f, 0.0, 0.0, 0.0,
                     0.0,   f, 0.0, 0.0);
}

mat2x4 __constructor(const int i)
{
   const float f = float(i);
   __retVal = mat2x4(f);
}

mat2x4 __constructor(const bool b)
{
   const float f = float(b);
   __retVal = mat2x4(f);
}

mat2x4 __constructor(const vec4 c0, const vec4 c1)
{
   __retVal[0] = c0;
   __retVal[1] = c1;
}



//// mat3x2: 3 columns of vec2

mat3x2 __constructor(const float f00, const float f10,
                     const float f01, const float f11,
                     const float f02, const float f12)
{
   __retVal[0].x = f00;
   __retVal[0].y = f10;
   __retVal[1].x = f01;
   __retVal[1].y = f11;
   __retVal[2].x = f02;
   __retVal[2].y = f12;
}

mat3x2 __constructor(const float f)
{
   __retVal = mat3x2(  f, 0.0,
                     0.0,   f,
                     0.0, 0.0);
}

mat3x2 __constructor(const int i)
{
   const float f = float(i);
   __retVal = mat3x2(f);
}

mat3x2 __constructor(const bool b)
{
   const float f = float(b);
   __retVal = mat3x2(f);
}

mat3x2 __constructor(const vec2 c0, const vec2 c1, const vec2 c2)
{
   __retVal[0] = c0;
   __retVal[1] = c1;
   __retVal[2] = c2;
}



//// mat3x4: 3 columns of vec4

mat3x4 __constructor(const float f00, const float f10, const float f20, const float f30,
                     const float f01, const float f11, const float f21, const float f31,
		     const float f02, const float f12, const float f22, const float f32)
{
   __retVal[0].x = f00;
   __retVal[0].y = f10;
   __retVal[0].z = f20;
   __retVal[0].w = f30;
   __retVal[1].x = f01;
   __retVal[1].y = f11;
   __retVal[1].z = f21;
   __retVal[1].w = f31;
   __retVal[2].x = f02;
   __retVal[2].y = f12;
   __retVal[2].z = f22;
   __retVal[2].w = f32;
}

mat3x4 __constructor(const float f)
{
   __retVal = mat3x4(  f, 0.0, 0.0, 0.0,
                     0.0,   f, 0.0, 0.0,
                     0.0, 0.0,   f, 0.0);
}

mat3x4 __constructor(const int i)
{
   const float f = float(i);
   __retVal = mat3x4(f);
}

mat3x4 __constructor(const bool b)
{
   const float f = float(b);
   __retVal = mat3x4(f);
}

mat3x4 __constructor(const vec4 c0, const vec4 c1, const vec4 c2)
{
   __retVal[0] = c0;
   __retVal[1] = c1;
   __retVal[2] = c2;
}



//// mat4x2: 4 columns of vec2

mat4x2 __constructor(const float f00, const float f10,
                     const float f01, const float f11,
		     const float f02, const float f12,
		     const float f03, const float f13)
{
   __retVal[0].x = f00;
   __retVal[0].y = f10;
   __retVal[1].x = f01;
   __retVal[1].y = f11;
   __retVal[2].x = f02;
   __retVal[2].y = f12;
   __retVal[3].x = f03;
   __retVal[3].y = f13;
}

mat4x2 __constructor(const float f)
{
   __retVal = mat4x2(  f, 0.0,
                     0.0,   4,
                     0.0, 0.0,
                     0.0, 0.0);
}

mat4x2 __constructor(const int i)
{
   const float f = float(i);
   __retVal = mat4x2(f);
}

mat4x2 __constructor(const bool b)
{
   const float f = float(b);
   __retVal = mat4x2(f);
}

mat4x2 __constructor(const vec2 c0, const vec2 c1, const vec2 c2, const vec2 c3)
{
   __retVal[0] = c0;
   __retVal[1] = c1;
   __retVal[2] = c2;
   __retVal[3] = c3;
}



//// mat4x3: 4 columns of vec3

mat4x3 __constructor(const float f00, const float f10, const float f20,
                     const float f01, const float f11, const float f21,
		     const float f02, const float f12, const float f22,
		     const float f03, const float f13, const float f23)
{
   __retVal[0].x = f00;
   __retVal[0].y = f10;
   __retVal[0].z = f20;
   __retVal[1].x = f01;
   __retVal[1].y = f11;
   __retVal[1].z = f21;
   __retVal[2].x = f02;
   __retVal[2].y = f12;
   __retVal[2].z = f22;
   __retVal[3].x = f03;
   __retVal[3].y = f13;
   __retVal[3].z = f23;
}

mat4x3 __constructor(const float f)
{
   __retVal = mat4x3(  f, 0.0, 0.0,
                     0.0,   f, 0.0,
                     0.0, 0.0,   f,
                     0.0, 0.0, 0.0);
}

mat4x3 __constructor(const int i)
{
   const float f = float(i);
   __retVal = mat4x3(f);
}

mat4x3 __constructor(const bool b)
{
   const float f = float(b);
   __retVal = mat4x3(f);
}

mat4x3 __constructor(const vec3 c0, const vec3 c1, const vec3 c2, const vec3 c3)
{
   __retVal[0] = c0;
   __retVal[1] = c1;
   __retVal[2] = c2;
   __retVal[3] = c3;
}



//// misc assorted matrix constructors

mat2 __constructor(const mat2 m)
{
   __retVal = m;
}

mat2 __constructor(const mat3x2 m)
{
   __retVal = mat2(m[0], m[1]);
}

mat2 __constructor(const mat4x2 m)
{
   __retVal = mat2(m[0], m[1]);
}

mat2 __constructor(const mat2x3 m)
{
   __retVal = mat2(m[0].xy, m[1].xy);
}

mat2 __constructor(const mat2x4 m)
{
   __retVal = mat2(m[0].xy, m[1].xy);
}

mat2 __constructor(const mat3 m)
{
   __retVal = mat2(m[0].xy, m[1].xy);
}

mat2 __constructor(const mat3x4 m)
{
   __retVal = mat2(m[0].xy, m[1].xy);
}

mat2 __constructor(const mat4x3 m)
{
   __retVal = mat2(m[0].xy, m[1].xy);
}

mat2 __constructor(const mat4 m)
{
   __retVal = mat2(m[0].xy, m[1].xy);
}



mat2x3 __constructor(const mat2x3 m)
{
   __retVal = m;
}

mat2x3 __constructor(const mat3 m)
{
   __retVal = mat2x3(m[0], m[1]);
}

mat2x3 __constructor(const mat4x3 m)
{
   __retVal = mat2x3(m[0], m[1]);
}

mat2x3 __constructor(const mat2x4 m)
{
   __retVal = mat2x3(m[0].xyz, m[1].xyz);
}

mat2x3 __constructor(const mat3x4 m)
{
   __retVal = mat2x3(m[0].xyz, m[1].xyz);
}

mat2x3 __constructor(const mat4 m)
{
   __retVal = mat2x3(m[0].xyz, m[1].xyz);
}

mat2x3 __constructor(const mat2 m)
{
   __retVal = mat2x3(m[0].x, m[0].y, 0.0,
                     m[1].x, m[1].y, 0.0);
}

mat2x3 __constructor(const mat3x2 m)
{
   __retVal = mat2x3(m[0].x, m[0].y, 0.0,
                     m[1].x, m[1].y, 0.0);
}

mat2x3 __constructor(const mat4x2 m)
{
   __retVal = mat2x3(m[0].x, m[0].y, 0.0,
                     m[1].x, m[1].y, 0.0);
}



mat2x4 __constructor(const mat2x4 m)
{
   __retVal = m;
}

mat2x4 __constructor(const mat3x4 m)
{
   __retVal = mat2x4(m[0], m[1]);
}

mat2x4 __constructor(const mat4 m)
{
   __retVal = mat2x4(m[0], m[1]);
}

mat2x4 __constructor(const mat2x3 m)
{
   __retVal = mat2x4(m[0].x, m[0].y, m[0].z, 0.0,
                     m[1].x, m[1].y, m[1].z, 0.0);
}

mat2x4 __constructor(const mat3 m)
{
   __retVal = mat2x4(m[0].x, m[0].y, m[0].z, 0.0,
                     m[1].x, m[1].y, m[1].z, 0.0);
}

mat2x4 __constructor(const mat4x3 m)
{
   __retVal = mat2x4(m[0].x, m[0].y, m[0].z, 0.0,
                     m[1].x, m[1].y, m[1].z, 0.0);
}

mat2x4 __constructor(const mat2 m)
{
   __retVal = mat2x4(m[0].x, m[1].y, 0.0, 0.0,
                     m[1].x, m[1].y, 0.0, 0.0);
}

mat2x4 __constructor(const mat3x2 m)
{
   __retVal = mat2x4(m[0].x, m[0].y, 0.0, 0.0,
                     m[1].x, m[1].y, 0.0, 0.0);
}

mat2x4 __constructor(const mat4x2 m)
{
   __retVal = mat2x4(m[0].x, m[0].y, 0.0, 0.0,
                     m[1].x, m[1].y, 0.0, 0.0);
}



mat3x2 __constructor(const mat3x2 m)
{
   __retVal = m;
}

mat3x2 __constructor(const mat4x2 m)
{
   __retVal = mat3x2(m[0], m[1], m[2]);
}

mat3x2 __constructor(const mat3 m)
{
   __retVal = mat3x2(m[0], m[1], m[2]);
}

mat3x2 __constructor(const mat3x4 m)
{
   __retVal = mat3x2(m[0].x, m[0].y,
                     m[1].x, m[1].y,
                     m[2].x, m[2].y);
}

mat3x2 __constructor(const mat4x3 m)
{
   __retVal = mat3x2(m[0].x, m[0].y,
                     m[1].x, m[1].y,
                     m[2].x, m[2].y);
}

mat3x2 __constructor(const mat4 m)
{
   __retVal = mat3x2(m[0].x, m[0].y,
                     m[1].x, m[1].y,
                        0.0,    0.0);
}

mat3x2 __constructor(const mat2 m)
{
   __retVal = mat3x2(m[0], m[1], vec2(0.0));
}

mat3x2 __constructor(const mat2x3 m)
{
   __retVal = mat3x2(m[0].x, m[0].y,
                     m[1].x, m[1].y,
                        0.0,    0.0);
}

mat3x2 __constructor(const mat2x4 m)
{
   __retVal = mat3x2(m[0].x, m[0].y,
                     m[1].x, m[1].y,
                        0.0,    0.0);
}




mat3 __constructor(const mat3 m)
{
   __retVal = m;
}

mat3 __constructor(const mat4x3 m)
{
   __retVal = mat3 (
        m[0],
        m[1],
        m[2]
    );
}

mat3 __constructor(const mat3x4 m)
{
   __retVal = mat3 (
        m[0].xyz,
        m[1].xyz,
        m[2].xyz
    );
}

mat3 __constructor(const mat4 m)
{
   __retVal = mat3 (
        m[0].xyz,
        m[1].xyz,
        m[2].xyz
    );
}

mat3 __constructor(const mat2x3 m)
{
   __retVal = mat3 (
        m[0],
        m[1],
        0., 0., 1.
    );
}

mat3 __constructor(const mat2x4 m)
{
   __retVal = mat3 (
        m[0].xyz,
        m[1].xyz,
        0., 0., 1.
    );
}

mat3 __constructor(const mat3x2 m)
{
   __retVal = mat3 (
        m[0], 0.,
        m[1], 0.,
        m[2], 1.
    );
}

mat3 __constructor(const mat4x2 m)
{
   __retVal = mat3 (
        m[0], 0.,
        m[1], 0.,
        m[2], 1.
    );
}

mat3 __constructor(const mat2 m)
{
   __retVal = mat3 (
        m[0], 0.,
        m[1], 0.,
        0., 0., 1.
    );
}


mat3x4 __constructor(const mat3x4 m)
{
   __retVal = m;
}

mat3x4 __constructor(const mat4 m)
{
   __retVal = mat3x4 (
        m[0],
        m[1],
        m[2]
    );
}

mat3x4 __constructor(const mat3 m)
{
   __retVal = mat3x4 (
        m[0], 0.,
        m[1], 0.,
        m[2], 0.
    );
}

mat3x4 __constructor(const mat4x3 m)
{
   __retVal = mat3x4 (
        m[0], 0.,
        m[1], 0.,
        m[2], 0.
    );
}

mat3x4 __constructor(const mat2x4 m)
{
   __retVal = mat3x4 (
        m[0],
        m[1],
        0., 0., 1., 0.
    );
}

mat3x4 __constructor(const mat2x3 m)
{
   __retVal = mat3x4 (
        m[0], 0.,
        m[1], 0.,
        0., 0., 1., 0.
    );
}

mat3x4 __constructor(const mat3x2 m)
{
   __retVal = mat3x4 (
        m[0], 0., 0.,
        m[1], 0., 0.,
        m[2], 1., 0.
    );
}

mat3x4 __constructor(const mat4x2 m)
{
   __retVal = mat3x4 (
        m[0], 0., 0.,
        m[1], 0., 0.,
        m[2], 1., 0.
    );
}

mat3x4 __constructor(const mat2 m)
{
   __retVal = mat3x4 (
        m[0], 0., 0.,
        m[1], 0., 0.,
        0., 0., 1., 0.
    );
}


mat4x2 __constructor(const mat4x2 m)
{
   __retVal = m;
}

mat4x2 __constructor(const mat4x3 m)
{
   __retVal = mat4x2 (
        m[0].xy,
        m[1].xy,
        m[2].xy,
        m[3].xy
    );
}

mat4x2 __constructor(const mat4 m)
{
   __retVal = mat4x2 (
        m[0].xy,
        m[1].xy,
        m[2].xy,
        m[3].xy
    );
}

mat4x2 __constructor(const mat3x2 m)
{
   __retVal = mat4x2 (
        m[0],
        m[1],
        0., 0.
    );
}

mat4x2 __constructor(const mat3 m)
{
   __retVal = mat4x2 (
        m[0].xy,
        m[1].xy,
        m[2].xy,
        0., 0.
    );
}

mat4x2 __constructor(const mat3x4 m)
{
   __retVal = mat4x2 (
        m[0].xy,
        m[1].xy,
        m[2].xy,
        0., 0.
    );
}

mat4x2 __constructor(const mat2 m)
{
   __retVal = mat4x2 (
        m[0],
        m[1],
        0., 0.,
        0., 0.
    );
}

mat4x2 __constructor(const mat2x3 m)
{
   __retVal = mat4x2 (
        m[0].xy,
        m[1].xy,
        0., 0.,
        0., 0.
    );
}

mat4x2 __constructor(const mat2x4 m)
{
   __retVal = mat4x2 (
        m[0].xy,
        m[1].xy,
        0., 0.,
        0., 0.
    );
}


mat4x3 __constructor(const mat4x3 m)
{
   __retVal = m;
}

mat4x3 __constructor(const mat4 m)
{
   __retVal = mat4x3 (
        m[0].xyz,
        m[1].xyz,
        m[2].xyz,
        m[3].xyz
    );
}

mat4x3 __constructor(const mat3 m)
{
   __retVal = mat4x3 (
        m[0],
        m[1],
        m[2],
        0., 0., 0.
    );
}

mat4x3 __constructor(const mat3x4 m)
{
   __retVal = mat4x3 (
        m[0].xyz,
        m[1].xyz,
        m[2].xyz,
        0., 0., 0.
    );
}

mat4x3 __constructor(const mat4x2 m)
{
   __retVal = mat4x3 (
        m[0], 0.,
        m[1], 0.,
        m[2], 1.,
        m[3], 0.
    );
}

mat4x3 __constructor(const mat2x3 m)
{
   __retVal = mat4x3 (
        m[0],
        m[1],
        0., 0., 1.,
        0., 0., 0.
    );
}

mat4x3 __constructor(const mat3x2 m)
{
   __retVal = mat4x3 (
        m[0], 0.,
        m[1], 0.,
        m[2], 1.,
        0., 0., 0.
    );
}

mat4x3 __constructor(const mat2x4 m)
{
   __retVal = mat4x3 (
        m[0].xyz,
        m[1].xyz,
        0., 0., 1.,
        0., 0., 0.
    );
}

mat4x3 __constructor(const mat2 m)
{
   __retVal = mat4x3 (
        m[0], 0.,
        m[1], 0.,
        0., 0., 1.,
        0., 0., 0.
    );
}


mat4 __constructor(const mat4 m)
{
   __retVal = m;
}

mat4 __constructor(const mat3x4 m)
{
   __retVal = mat4 (
        m[0],
        m[1],
        m[2],
        0., 0., 0., 1.
    );
}

mat4 __constructor(const mat4x3 m)
{
   __retVal = mat4 (
        m[0], 0.,
        m[1], 0.,
        m[2], 0.,
        m[3], 1.
    );
}

mat4 __constructor(const mat2x4 m)
{
   __retVal = mat4 (
        m[0],
        m[1],
        0., 0., 1., 0.,
        0., 0., 0., 1.
    );
}

mat4 __constructor(const mat4x2 m)
{
   __retVal = mat4 (
        m[0], 0., 0.,
        m[1], 0., 0.,
        m[2], 1., 0.,
        m[3], 0., 1.
    );
}

mat4 __constructor(const mat3 m)
{
   __retVal = mat4 (
        m[0], 0.,
        m[1], 0.,
        m[2], 0.,
        0., 0., 0., 1.
    );
}

mat4 __constructor(const mat2x3 m)
{
   __retVal = mat4 (
        m[0], 0.,
        m[1], 0.,
        0., 0., 1., 0.,
        0., 0., 0., 1.
    );
}

mat4 __constructor(const mat3x2 m)
{
   __retVal = mat4 (
        m[0], 0., 0.,
        m[1], 0., 0.,
        m[2], 1., 0.,
        0., 0., 0., 1.
    );
}

mat4 __constructor(const mat2 m)
{
   __retVal = mat4 (
        m[0], 0., 0.,
        m[1], 0., 0.,
        0., 0., 1., 0.,
        0., 0., 0., 1.
    );
}


void __operator += (inout mat2x3 m, const mat2x3 n) {
    m[0] += n[0];
    m[1] += n[1];
}

void __operator += (inout mat2x4 m, const mat2x4 n) {
    m[0] += n[0];
    m[1] += n[1];
}

void __operator += (inout mat3x2 m, const mat3x2 n) {
    m[0] += n[0];
    m[1] += n[1];
    m[2] += n[2];
}

void __operator += (inout mat3x4 m, const mat3x4 n) {
    m[0] += n[0];
    m[1] += n[1];
    m[2] += n[2];
}

void __operator += (inout mat4x2 m, const mat4x2 n) {
    m[0] += n[0];
    m[1] += n[1];
    m[2] += n[2];
    m[3] += n[3];
}

void __operator += (inout mat4x3 m, const mat4x3 n) {
    m[0] += n[0];
    m[1] += n[1];
    m[2] += n[2];
    m[3] += n[3];
}


void __operator -= (inout mat2x3 m, const mat2x3 n) {
    m[0] -= n[0];
    m[1] -= n[1];
}

void __operator -= (inout mat2x4 m, const mat2x4 n) {
    m[0] -= n[0];
    m[1] -= n[1];
}

void __operator -= (inout mat3x2 m, const mat3x2 n) {
    m[0] -= n[0];
    m[1] -= n[1];
    m[2] -= n[2];
}

void __operator -= (inout mat3x4 m, const mat3x4 n) {
    m[0] -= n[0];
    m[1] -= n[1];
    m[2] -= n[2];
}

void __operator -= (inout mat4x2 m, const mat4x2 n) {
    m[0] -= n[0];
    m[1] -= n[1];
    m[2] -= n[2];
    m[3] -= n[3];
}

void __operator -= (inout mat4x3 m, const mat4x3 n) {
    m[0] -= n[0];
    m[1] -= n[1];
    m[2] -= n[2];
    m[3] -= n[3];
}


void __operator /= (inout mat2x3 m, const mat2x3 n) {
    m[0] /= n[0];
    m[1] /= n[1];
}

void __operator /= (inout mat2x4 m, const mat2x4 n) {
    m[0] /= n[0];
    m[1] /= n[1];
}

void __operator /= (inout mat3x2 m, const mat3x2 n) {
    m[0] /= n[0];
    m[1] /= n[1];
    m[2] /= n[2];
}

void __operator /= (inout mat3x4 m, const mat3x4 n) {
    m[0] /= n[0];
    m[1] /= n[1];
    m[2] /= n[2];
}

void __operator /= (inout mat4x2 m, const mat4x2 n) {
    m[0] /= n[0];
    m[1] /= n[1];
    m[2] /= n[2];
    m[3] /= n[3];
}

void __operator /= (inout mat4x3 m, const mat4x3 n) {
    m[0] /= n[0];
    m[1] /= n[1];
    m[2] /= n[2];
    m[3] /= n[3];
}


vec3 __operator * (const mat2x3 m, const vec2 v)
{
   __retVal.x = v.x * m[0].x + v.y * m[1].x;
   __retVal.y = v.x * m[0].y + v.y * m[1].y;
   __retVal.z = v.x * m[0].z + v.y * m[1].z;
}

vec4 __operator * (const mat2x4 m, const vec2 v)
{
   __retVal.x = v.x * m[0].x + v.y * m[1].x;
   __retVal.y = v.x * m[0].y + v.y * m[1].y;
   __retVal.z = v.x * m[0].z + v.y * m[1].z;
   __retVal.w = v.x * m[0].w + v.y * m[1].w;
}

vec2 __operator * (const mat3x2 m, const vec3 v)
{
   __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x;
   __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y;
}

vec4 __operator * (const mat3x4 m, const vec3 v)
{
   __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x;
   __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y;
   __retVal.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z;
   __retVal.w = v.x * m[0].w + v.y * m[1].w + v.z * m[2].w;
}

vec2 __operator * (const mat4x2 m, const vec4 v)
{
   __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x;
   __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y;
}

vec3 __operator * (const mat4x3 m, const vec4 v)
{
   __retVal.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x;
   __retVal.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y;
   __retVal.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z;
}


mat3x2 __operator * (const mat2 m, const mat3x2 n)
{
   //return mat3x2 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4x2 __operator * (const mat2 m, const mat4x2 n)
{
   //return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2x3 __operator * (const mat2x3 m, const mat2 n)
{
   //return mat2x3 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3 __operator * (const mat2x3 m, const mat3x2 n)
{
   //return mat3 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4x3 __operator * (const mat2x3 m, const mat4x2 n)
{
   //return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2x4 __operator * (const mat2x4 m, const mat2 n)
{
   //return mat2x4 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3x4 __operator * (const mat2x4 m, const mat3x2 n)
{
   //return mat3x4 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4 __operator * (const mat2x4 m, const mat4x2 n)
{
   //return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2 __operator * (const mat3x2 m, const mat2x3 n)
{
   //return mat2 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3x2 __operator * (const mat3x2 m, const mat3 n)
{
   //return mat3x2 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4x2 __operator * (const mat3x2 m, const mat4x3 n)
{
   //return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2x3 __operator * (const mat3 m, const mat2x3 n)
{
   //return mat2x3 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat4x3 __operator * (const mat3 m, const mat4x3 n)
{
   //return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2x4 __operator * (const mat3x4 m, const mat2x3 n)
{
   //return mat2x4 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3x4 __operator * (const mat3x4 m, const mat3 n)
{
   //return mat3x4 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4 __operator * (const mat3x4 m, const mat4x3 n)
{
   //return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2 __operator * (const mat4x2 m, const mat2x4 n)
{
   //return = mat2 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3x2 __operator * (const mat4x2 m, const mat3x4 n)
{
   //return mat3x2 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4x2 __operator * (const mat4x2 m, const mat4 n)
{
   //return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2x3 __operator * (const mat4x3 m, const mat2x4 n)
{
   //return mat2x3 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3 __operator * (const mat4x3 m, const mat3x4 n)
{
   //return mat3 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}

mat4x3 __operator * (const mat4x3 m, const mat4 n)
{
   //return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
   __retVal[3] = m * n[3];
}


mat2x4 __operator * (const mat4 m, const mat2x4 n)
{
   //return mat2x4 (m * n[0], m * n[1]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
}

mat3x4 __operator * (const mat4 m, const mat3x4 n)
{
   //return mat3x4 (m * n[0], m * n[1], m * n[2]);
   __retVal[0] = m * n[0];
   __retVal[1] = m * n[1];
   __retVal[2] = m * n[2];
}


void __operator *= (inout mat2x3 m, const mat2 n) {
    m = m * n;
}

void __operator *= (inout mat2x4 m, const mat2 n) {
    m = m * n;
}

void __operator *= (inout mat3x2 m, const mat3 n) {
    m = m * n;
}

void __operator *= (inout mat3x4 m, const mat3 n) {
    m = m * n;
}

void __operator *= (inout mat4x2 m, const mat4 n) {
    m = m * n;
}

void __operator *= (inout mat4x3 m, const mat4 n) {
    m = m * n;
}


vec3 __operator * (const vec2 v, const mat3x2 m)
{
   __retVal.x = dot(v, m[0]);
   __retVal.y = dot(v, m[1]);
   __retVal.z = dot(v, m[2]);
}

vec4 __operator * (const vec2 v, const mat4x2 m)
{
   __retVal.x = dot(v, m[0]);
   __retVal.y = dot(v, m[1]);
   __retVal.z = dot(v, m[2]);
   __retVal.w = dot(v, m[3]);
}

vec2 __operator * (const vec3 v, const mat2x3 m)
{
   __retVal.x = dot(v, m[0]);
   __retVal.y = dot(v, m[1]);
}

vec4 __operator * (const vec3 v, const mat4x3 m)
{
   __retVal.x = dot(v, m[0]);
   __retVal.y = dot(v, m[1]);
   __retVal.z = dot(v, m[2]);
   __retVal.w = dot(v, m[3]);
}

vec2 __operator * (const vec4 v, const mat2x4 m)
{
   __retVal.x = dot(v, m[0]);
   __retVal.y = dot(v, m[1]);
}

vec3 __operator * (const vec4 v, const mat3x4 m)
{
   __retVal.x = dot(v, m[0]);
   __retVal.y = dot(v, m[1]);
   __retVal.z = dot(v, m[2]);
}


void __operator += (inout mat2x3 m, const float a) {
    m[0] += a;
    m[1] += a;
}

void __operator += (inout mat2x4 m, const float a) {
    m[0] += a;
    m[1] += a;
}

void __operator += (inout mat3x2 m, const float a) {
    m[0] += a;
    m[1] += a;
    m[2] += a;
}

void __operator += (inout mat3x4 m, const float a) {
    m[0] += a;
    m[1] += a;
    m[2] += a;
}

void __operator += (inout mat4x2 m, const float a) {
    m[0] += a;
    m[1] += a;
    m[2] += a;
    m[3] += a;
}

void __operator += (inout mat4x3 m, const float a) {
    m[0] += a;
    m[1] += a;
    m[2] += a;
    m[3] += a;
}


void __operator -= (inout mat2x3 m, const float a) {
    m[0] -= a;
    m[1] -= a;
}

void __operator -= (inout mat2x4 m, const float a) {
    m[0] -= a;
    m[1] -= a;
}

void __operator -= (inout mat3x2 m, const float a) {
    m[0] -= a;
    m[1] -= a;
    m[2] -= a;
}

void __operator -= (inout mat3x4 m, const float a) {
    m[0] -= a;
    m[1] -= a;
    m[2] -= a;
}

void __operator -= (inout mat4x2 m, const float a) {
    m[0] -= a;
    m[1] -= a;
    m[2] -= a;
    m[3] -= a;
}

void __operator -= (inout mat4x3 m, const float a) {
    m[0] -= a;
    m[1] -= a;
    m[2] -= a;
    m[3] -= a;
}


void __operator *= (inout mat2x3 m, const float a) {
    m[0] *= a;
    m[1] *= a;
}

void __operator *= (inout mat2x4 m, const float a) {
    m[0] *= a;
    m[1] *= a;
}

void __operator *= (inout mat3x2 m, const float a) {
    m[0] *= a;
    m[1] *= a;
    m[2] *= a;
}

void __operator *= (inout mat3x4 m, const float a) {
    m[0] *= a;
    m[1] *= a;
    m[2] *= a;
}

void __operator *= (inout mat4x2 m, const float a) {
    m[0] *= a;
    m[1] *= a;
    m[2] *= a;
    m[3] *= a;
}

void __operator *= (inout mat4x3 m, const float a) {
    m[0] *= a;
    m[1] *= a;
    m[2] *= a;
    m[3] *= a;
}


void __operator /= (inout mat2x3 m, const float a) {
    m[0] /= a;
    m[1] /= a;
}

void __operator /= (inout mat2x4 m, const float a) {
    m[0] /= a;
    m[1] /= a;
}

void __operator /= (inout mat3x2 m, const float a) {
    m[0] /= a;
    m[1] /= a;
    m[2] /= a;
}

void __operator /= (inout mat3x4 m, const float a) {
    m[0] /= a;
    m[1] /= a;
    m[2] /= a;
}

void __operator /= (inout mat4x2 m, const float a) {
    m[0] /= a;
    m[1] /= a;
    m[2] /= a;
    m[3] /= a;
}

void __operator /= (inout mat4x3 m, const float a) {
    m[0] /= a;
    m[1] /= a;
    m[2] /= a;
    m[3] /= a;
}


mat2x3 __operator + (const mat2x3 m, const mat2x3 n) {
    return mat2x3 (m[0] + n[0], m[1] + n[1]);
}

mat2x4 __operator + (const mat2x4 m, const mat2x4 n) {
    return mat2x4 (m[0] + n[0], m[1] + n[1]);
}

mat3x2 __operator + (const mat3x2 m, const mat3x2 n) {
    return mat3x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
}

mat3x4 __operator + (const mat3x4 m, const mat3x4 n) {
    return mat3x4 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
}

mat4x2 __operator + (const mat4x2 m, const mat4x2 n) {
    return mat4x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
}

mat4x3 __operator + (const mat4x3 m, const mat4x3 n) {
    return mat4x3 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
}


mat2x3 __operator - (const mat2x3 m, const mat2x3 n) {
    return mat2x3 (m[0] - n[0], m[1] - n[1]);
}

mat2x4 __operator - (const mat2x4 m, const mat2x4 n) {
    return mat2x4 (m[0] - n[0], m[1] - n[1]);
}

mat3x2 __operator - (const mat3x2 m, const mat3x2 n) {
    return mat3x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
}

mat3x4 __operator - (const mat3x4 m, const mat3x4 n) {
    return mat3x4 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
}

mat4x2 __operator - (const mat4x2 m, const mat4x2 n) {
    return mat4x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
}

mat4x3 __operator - (const mat4x3 m, const mat4x3 n) {
    return mat4x3 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
}


mat2x3 __operator / (const mat2x3 m, const mat2x3 n) {
    return mat2x3 (m[0] / n[0], m[1] / n[1]);
}

mat2x4 __operator / (const mat2x4 m, const mat2x4 n) {
    return mat2x4 (m[0] / n[0], m[1] / n[1]);
}

mat3x2 __operator / (const mat3x2 m, const mat3x2 n) {
    return mat3x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
}

mat3x4 __operator / (const mat3x4 m, const mat3x4 n) {
    return mat3x4 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
}

mat4x2 __operator / (const mat4x2 m, const mat4x2 n) {
    return mat4x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
}

mat4x3 __operator / (const mat4x3 m, const mat4x3 n) {
    return mat4x3 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
}


mat2x3 __operator + (const float a, const mat2x3 n) {
    return mat2x3 (a + n[0], a + n[1]);
}

mat2x3 __operator + (const mat2x3 m, const float b) {
    return mat2x3 (m[0] + b, m[1] + b);
}

mat2x4 __operator + (const float a, const mat2x4 n) {
    return mat2x4 (a + n[0], a + n[1]);
}

mat2x4 __operator + (const mat2x4 m, const float b) {
    return mat2x4 (m[0] + b, m[1] + b);
}

mat3x2 __operator + (const float a, const mat3x2 n) {
    return mat3x2 (a + n[0], a + n[1], a + n[2]);
}

mat3x2 __operator + (const mat3x2 m, const float b) {
    return mat3x2 (m[0] + b, m[1] + b, m[2] + b);
}

mat3x4 __operator + (const float a, const mat3x4 n) {
    return mat3x4 (a + n[0], a + n[1], a + n[2]);
}

mat3x4 __operator + (const mat3x4 m, const float b) {
    return mat3x4 (m[0] + b, m[1] + b, m[2] + b);
}

mat4x2 __operator + (const mat4x2 m, const float b) {
    return mat4x2 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
}

mat4x2 __operator + (const float a, const mat4x2 n) {
    return mat4x2 (a + n[0], a + n[1], a + n[2], a + n[3]);
}

mat4x3 __operator + (const mat4x3 m, const float b) {
    return mat4x3 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
}

mat4x3 __operator + (const float a, const mat4x3 n) {
    return mat4x3 (a + n[0], a + n[1], a + n[2], a + n[3]);
}


mat2x3 __operator - (const float a, const mat2x3 n) {
    return mat2x3 (a - n[0], a - n[1]);
}

mat2x3 __operator - (const mat2x3 m, const float b) {
    return mat2x3 (m[0] - b, m[1] - b);
}

mat2x4 __operator - (const float a, const mat2x4 n) {
    return mat2x4 (a - n[0], a - n[1]);
}

mat2x4 __operator - (const mat2x4 m, const float b) {
    return mat2x4 (m[0] - b, m[1] - b);
}

mat3x2 __operator - (const float a, const mat3x2 n) {
    return mat3x2 (a - n[0], a - n[1], a - n[2]);
}

mat3x2 __operator - (const mat3x2 m, const float b) {
    return mat3x2 (m[0] - b, m[1] - b, m[2] - b);
}

mat3x4 __operator - (const float a, const mat3x4 n) {
    return mat3x4 (a - n[0], a - n[1], a - n[2]);
}

mat3x4 __operator - (const mat3x4 m, const float b) {
    return mat3x4 (m[0] - b, m[1] - b, m[2] - b);
}

mat4x2 __operator - (const mat4x2 m, const float b) {
    return mat4x2 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
}

mat4x2 __operator - (const float a, const mat4x2 n) {
    return mat4x2 (a - n[0], a - n[1], a - n[2], a - n[3]);
}

mat4x3 __operator - (const mat4x3 m, const float b) {
    return mat4x3 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
}

mat4x3 __operator - (const float a, const mat4x3 n) {
    return mat4x3 (a - n[0], a - n[1], a - n[2], a - n[3]);
}


mat2x3 __operator * (const float a, const mat2x3 n)
{
   //return mat2x3 (a * n[0], a * n[1]);
   __retVal[0] = a * n[0];
   __retVal[1] = a * n[1];
}

mat2x3 __operator * (const mat2x3 m, const float b)
{
   //return mat2x3 (m[0] * b, m[1] * b);
   __retVal[0] = m[0] * b;
   __retVal[1] = m[1] * b;
}

mat2x4 __operator * (const float a, const mat2x4 n)
{
   //return mat2x4 (a * n[0], a * n[1]);
   __retVal[0] = a * n[0];
   __retVal[1] = a * n[1];
}

mat2x4 __operator * (const mat2x4 m, const float b)
{
   //return mat2x4 (m[0] * b, m[1] * b);
   __retVal[0] = m[0] * b;
   __retVal[1] = m[1] * b;
}

mat3x2 __operator * (const float a, const mat3x2 n)
{
   //return mat3x2 (a * n[0], a * n[1], a * n[2]);
   __retVal[0] = a * n[0];
   __retVal[1] = a * n[1];
   __retVal[2] = a * n[2];
}

mat3x2 __operator * (const mat3x2 m, const float b)
{
   //return mat3x2 (m[0] * b, m[1] * b, m[2] * b);
   __retVal[0] = m[0] * b;
   __retVal[1] = m[1] * b;
   __retVal[2] = m[2] * b;
}

mat3x4 __operator * (const float a, const mat3x4 n)
{
   //return mat3x4 (a * n[0], a * n[1], a * n[2]);
   __retVal[0] = a * n[0];
   __retVal[1] = a * n[1];
   __retVal[2] = a * n[2];
}

mat3x4 __operator * (const mat3x4 m, const float b)
{
   //return mat3x4 (m[0] * b, m[1] * b, m[2] * b);
   __retVal[0] = m[0] * b;
   __retVal[1] = m[1] * b;
   __retVal[2] = m[2] * b;
}

mat4x2 __operator * (const mat4x2 m, const float b)
{
   //return mat4x2 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
   __retVal[0] = m[0] * b;
   __retVal[1] = m[1] * b;
   __retVal[2] = m[2] * b;
   __retVal[3] = m[3] * b;
}

mat4x2 __operator * (const float a, const mat4x2 n)
{
   //return mat4x2 (a * n[0], a * n[1], a * n[2], a * n[3]);
   __retVal[0] = a * n[0];
   __retVal[1] = a * n[1];
   __retVal[2] = a * n[2];
   __retVal[3] = a * n[3];
}

mat4x3 __operator * (const mat4x3 m, const float b)
{
   //return mat4x3 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
   __retVal[0] = m[0] * b;
   __retVal[1] = m[1] * b;
   __retVal[2] = m[2] * b;
   __retVal[3] = m[3] * b;
}

mat4x3 __operator * (const float a, const mat4x3 n)
{
   //return mat4x3 (a * n[0], a * n[1], a * n[2], a * n[3]);
   __retVal[0] = a * n[0];
   __retVal[1] = a * n[1];
   __retVal[2] = a * n[2];
   __retVal[3] = a * n[3];
}


mat2x3 __operator / (const float a, const mat2x3 n)
{
   //return mat2x3 (a / n[0], a / n[1]);
   const float inv = 1.0 / a;
   __retVal[0] = inv * n[0];
   __retVal[1] = inv * n[1];
}

mat2x3 __operator / (const mat2x3 m, const float b)
{
   //return mat2x3 (m[0] / b, m[1] / b);
   const float inv = 1.0 / b;
   __retVal[0] = m[0] * inv;
   __retVal[1] = m[1] * inv;
}

mat2x4 __operator / (const float a, const mat2x4 n)
{
   //return mat2x4 (a / n[0], a / n[1]);
   const float inv = 1.0 / a;
   __retVal[0] = inv * n[0];
   __retVal[1] = inv * n[1];
}

mat2x4 __operator / (const mat2x4 m, const float b)
{
   //return mat2x4 (m[0] / b, m[1] / b);
   const float inv = 1.0 / b;
   __retVal[0] = m[0] * inv;
   __retVal[1] = m[1] * inv;
}

mat3x2 __operator / (const float a, const mat3x2 n)
{
   //return mat3x2 (a / n[0], a / n[1], a / n[2]);
   const float inv = 1.0 / a;
   __retVal[0] = inv * n[0];
   __retVal[1] = inv * n[1];
   __retVal[2] = inv * n[2];
}

mat3x2 __operator / (const mat3x2 m, const float b)
{
   //return mat3x2 (m[0] / b, m[1] / b, m[2] / b);
   const float inv = 1.0 / b;
   __retVal[0] = m[0] * inv;
   __retVal[1] = m[1] * inv;
   __retVal[2] = m[2] * inv;
}

mat3x4 __operator / (const float a, const mat3x4 n)
{
   //return mat3x4 (a / n[0], a / n[1], a / n[2]);
   const float inv = 1.0 / a;
   __retVal[0] = inv * n[0];
   __retVal[1] = inv * n[1];
   __retVal[2] = inv * n[2];
}

mat3x4 __operator / (const mat3x4 m, const float b)
{
   //return mat3x4 (m[0] / b, m[1] / b, m[2] / b);
   const float inv = 1.0 / b;
   __retVal[0] = m[0] * inv;
   __retVal[1] = m[1] * inv;
   __retVal[2] = m[2] * inv;
}

mat4x2 __operator / (const mat4x2 m, const float b)
{
   //return mat4x2 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
   const float inv = 1.0 / b;
   __retVal[0] = m[0] * inv;
   __retVal[1] = m[1] * inv;
   __retVal[2] = m[2] * inv;
   __retVal[3] = m[3] * inv;
}

mat4x2 __operator / (const float a, const mat4x2 n)
{
   //return mat4x2 (a / n[0], a / n[1], a / n[2], a / n[3]);
   const float inv = 1.0 / a;
   __retVal[0] = inv * n[0];
   __retVal[1] = inv * n[1];
   __retVal[2] = inv * n[2];
   __retVal[3] = inv * n[3];
}

mat4x3 __operator / (const mat4x3 m, const float b)
{
   //return mat4x3 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
   const float inv = 1.0 / b;
   __retVal[0] = m[0] * inv;
   __retVal[1] = m[1] * inv;
   __retVal[2] = m[2] * inv;
   __retVal[3] = m[3] * inv;
}

mat4x3 __operator / (const float a, const mat4x3 n)
{
   //return mat4x3 (a / n[0], a / n[1], a / n[2], a / n[3]);
   const float inv = 1.0 / a;
   __retVal[0] = inv * n[0];
   __retVal[1] = inv * n[1];
   __retVal[2] = inv * n[2];
   __retVal[3] = inv * n[3];
}


mat2x3 __operator - (const mat2x3 m) {
    return mat2x3 (-m[0], -m[1]);
}

mat2x4 __operator - (const mat2x4 m) {
    return mat2x4 (-m[0], -m[1]);
}

mat3x2 __operator - (const mat3x2 m) {
    return mat3x2 (-m[0], -m[1], -m[2]);
}

mat3x4 __operator - (const mat3x4 m) {
    return mat3x4 (-m[0], -m[1], -m[2]);
}

mat4x2 __operator - (const mat4x2 m) {
    return mat4x2 (-m[0], -m[1], -m[2], -m[3]);
}

mat4x3 __operator - (const mat4x3 m) {
    return mat4x3 (-m[0], -m[1], -m[2], -m[3]);
}


void __operator -- (inout mat2x3 m) {
    --m[0];
    --m[1];
}

void __operator -- (inout mat2x4 m) {
    --m[0];
    --m[1];
}

void __operator -- (inout mat3x2 m) {
    --m[0];
    --m[1];
    --m[2];
}

void __operator -- (inout mat3x4 m) {
    --m[0];
    --m[1];
    --m[2];
}

void __operator -- (inout mat4x2 m) {
    --m[0];
    --m[1];
    --m[2];
    --m[3];
}

void __operator -- (inout mat4x3 m) {
    --m[0];
    --m[1];
    --m[2];
    --m[3];
}


void __operator ++ (inout mat2x3 m) {
    ++m[0];
    ++m[1];
}

void __operator ++ (inout mat2x4 m) {
    ++m[0];
    ++m[1];
}

void __operator ++ (inout mat3x2 m) {
    ++m[0];
    ++m[1];
    ++m[2];
}

void __operator ++ (inout mat3x4 m) {
    ++m[0];
    ++m[1];
    ++m[2];
}

void __operator ++ (inout mat4x2 m) {
    ++m[0];
    ++m[1];
    ++m[2];
    ++m[3];
}

void __operator ++ (inout mat4x3 m) {
    ++m[0];
    ++m[1];
    ++m[2];
    ++m[3];
}

