JAL-1807 test
[jalviewjs.git] / bin / javajs / util / M4.js
index 211ae5d..59c23db 100644 (file)
-Clazz.declarePackage ("javajs.util");\r
-Clazz.load (["javajs.util.M34"], "javajs.util.M4", ["javajs.util.T3"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.m03 = 0;\r
-this.m13 = 0;\r
-this.m23 = 0;\r
-this.m30 = 0;\r
-this.m31 = 0;\r
-this.m32 = 0;\r
-this.m33 = 0;\r
-Clazz.instantialize (this, arguments);\r
-}, javajs.util, "M4", javajs.util.M34);\r
-c$.newA16 = Clazz.defineMethod (c$, "newA16", \r
-function (v) {\r
-var m =  new javajs.util.M4 ();\r
-m.m00 = v[0];\r
-m.m01 = v[1];\r
-m.m02 = v[2];\r
-m.m03 = v[3];\r
-m.m10 = v[4];\r
-m.m11 = v[5];\r
-m.m12 = v[6];\r
-m.m13 = v[7];\r
-m.m20 = v[8];\r
-m.m21 = v[9];\r
-m.m22 = v[10];\r
-m.m23 = v[11];\r
-m.m30 = v[12];\r
-m.m31 = v[13];\r
-m.m32 = v[14];\r
-m.m33 = v[15];\r
-return m;\r
-}, "~A");\r
-c$.newM4 = Clazz.defineMethod (c$, "newM4", \r
-function (m1) {\r
-var m =  new javajs.util.M4 ();\r
-if (m1 == null) {\r
-m.setIdentity ();\r
-return m;\r
-}m.setToM3 (m1);\r
-m.m03 = m1.m03;\r
-m.m13 = m1.m13;\r
-m.m23 = m1.m23;\r
-m.m30 = m1.m30;\r
-m.m31 = m1.m31;\r
-m.m32 = m1.m32;\r
-m.m33 = m1.m33;\r
-return m;\r
-}, "javajs.util.M4");\r
-c$.newMV = Clazz.defineMethod (c$, "newMV", \r
-function (m1, t) {\r
-var m =  new javajs.util.M4 ();\r
-m.setMV (m1, t);\r
-return m;\r
-}, "javajs.util.M3,javajs.util.T3");\r
-Clazz.defineMethod (c$, "setZero", \r
-function () {\r
-this.clear33 ();\r
-this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = this.m33 = 0.0;\r
-});\r
-Clazz.defineMethod (c$, "setIdentity", \r
-function () {\r
-this.setZero ();\r
-this.m00 = this.m11 = this.m22 = this.m33 = 1.0;\r
-});\r
-Clazz.defineMethod (c$, "setM4", \r
-function (m1) {\r
-this.setM33 (m1);\r
-this.m03 = m1.m03;\r
-this.m13 = m1.m13;\r
-this.m23 = m1.m23;\r
-this.m30 = m1.m30;\r
-this.m31 = m1.m31;\r
-this.m32 = m1.m32;\r
-this.m33 = m1.m33;\r
-return this;\r
-}, "javajs.util.M4");\r
-Clazz.defineMethod (c$, "setMV", \r
-function (m1, t) {\r
-this.setM33 (m1);\r
-this.setTranslation (t);\r
-this.m33 = 1;\r
-}, "javajs.util.M3,javajs.util.T3");\r
-Clazz.defineMethod (c$, "setToM3", \r
-function (m1) {\r
-this.setM33 (m1);\r
-this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = 0.0;\r
-this.m33 = 1.0;\r
-}, "javajs.util.M34");\r
-Clazz.defineMethod (c$, "setToAA", \r
-function (a) {\r
-this.setIdentity ();\r
-this.setAA33 (a);\r
-}, "javajs.util.A4");\r
-Clazz.defineMethod (c$, "setA", \r
-function (m) {\r
-this.m00 = m[0];\r
-this.m01 = m[1];\r
-this.m02 = m[2];\r
-this.m03 = m[3];\r
-this.m10 = m[4];\r
-this.m11 = m[5];\r
-this.m12 = m[6];\r
-this.m13 = m[7];\r
-this.m20 = m[8];\r
-this.m21 = m[9];\r
-this.m22 = m[10];\r
-this.m23 = m[11];\r
-this.m30 = m[12];\r
-this.m31 = m[13];\r
-this.m32 = m[14];\r
-this.m33 = m[15];\r
-}, "~A");\r
-Clazz.defineMethod (c$, "setTranslation", \r
-function (trans) {\r
-this.m03 = trans.x;\r
-this.m13 = trans.y;\r
-this.m23 = trans.z;\r
-}, "javajs.util.T3");\r
-Clazz.defineMethod (c$, "setElement", \r
-function (row, col, v) {\r
-if (row < 3 && col < 3) {\r
-this.set33 (row, col, v);\r
-return;\r
-}if (row > 3 || col > 3) this.err ();\r
-switch (row) {\r
-case 0:\r
-this.m03 = v;\r
-return;\r
-case 1:\r
-this.m13 = v;\r
-return;\r
-case 2:\r
-this.m23 = v;\r
-return;\r
-}\r
-switch (col) {\r
-case 0:\r
-this.m30 = v;\r
-return;\r
-case 1:\r
-this.m31 = v;\r
-return;\r
-case 2:\r
-this.m32 = v;\r
-return;\r
-case 3:\r
-this.m33 = v;\r
-return;\r
-}\r
-}, "~N,~N,~N");\r
-Clazz.defineMethod (c$, "getElement", \r
-function (row, col) {\r
-if (row < 3 && col < 3) return this.get33 (row, col);\r
-if (row > 3 || col > 3) {\r
-this.err ();\r
-return 0;\r
-}switch (row) {\r
-case 0:\r
-return this.m03;\r
-case 1:\r
-return this.m13;\r
-case 2:\r
-return this.m23;\r
-default:\r
-switch (col) {\r
-case 0:\r
-return this.m30;\r
-case 1:\r
-return this.m31;\r
-case 2:\r
-return this.m32;\r
-default:\r
-return this.m33;\r
-}\r
-}\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "getTranslation", \r
-function (trans) {\r
-trans.x = this.m03;\r
-trans.y = this.m13;\r
-trans.z = this.m23;\r
-}, "javajs.util.T3");\r
-Clazz.defineMethod (c$, "getRotationScale", \r
-function (m1) {\r
-m1.m00 = this.m00;\r
-m1.m01 = this.m01;\r
-m1.m02 = this.m02;\r
-m1.m10 = this.m10;\r
-m1.m11 = this.m11;\r
-m1.m12 = this.m12;\r
-m1.m20 = this.m20;\r
-m1.m21 = this.m21;\r
-m1.m22 = this.m22;\r
-}, "javajs.util.M3");\r
-Clazz.defineMethod (c$, "setRotationScale", \r
-function (m1) {\r
-this.m00 = m1.m00;\r
-this.m01 = m1.m01;\r
-this.m02 = m1.m02;\r
-this.m10 = m1.m10;\r
-this.m11 = m1.m11;\r
-this.m12 = m1.m12;\r
-this.m20 = m1.m20;\r
-this.m21 = m1.m21;\r
-this.m22 = m1.m22;\r
-}, "javajs.util.M3");\r
-Clazz.defineMethod (c$, "setRowA", \r
-function (row, v) {\r
-if (row < 3) this.setRow33 (row, v);\r
-switch (row) {\r
-case 0:\r
-this.m03 = v[3];\r
-return;\r
-case 1:\r
-this.m13 = v[3];\r
-return;\r
-case 2:\r
-this.m23 = v[3];\r
-return;\r
-case 3:\r
-this.m30 = v[0];\r
-this.m31 = v[1];\r
-this.m32 = v[2];\r
-this.m33 = v[3];\r
-return;\r
-}\r
-this.err ();\r
-}, "~N,~A");\r
-Clazz.overrideMethod (c$, "getRow", \r
-function (row, v) {\r
-if (row < 3) this.getRow33 (row, v);\r
-switch (row) {\r
-case 0:\r
-v[3] = this.m03;\r
-return;\r
-case 1:\r
-v[3] = this.m13;\r
-return;\r
-case 2:\r
-v[3] = this.m23;\r
-return;\r
-case 3:\r
-v[0] = this.m30;\r
-v[1] = this.m31;\r
-v[2] = this.m32;\r
-v[3] = this.m33;\r
-return;\r
-}\r
-this.err ();\r
-}, "~N,~A");\r
-Clazz.defineMethod (c$, "setColumn4", \r
-function (column, x, y, z, w) {\r
-if (column == 0) {\r
-this.m00 = x;\r
-this.m10 = y;\r
-this.m20 = z;\r
-this.m30 = w;\r
-} else if (column == 1) {\r
-this.m01 = x;\r
-this.m11 = y;\r
-this.m21 = z;\r
-this.m31 = w;\r
-} else if (column == 2) {\r
-this.m02 = x;\r
-this.m12 = y;\r
-this.m22 = z;\r
-this.m32 = w;\r
-} else if (column == 3) {\r
-this.m03 = x;\r
-this.m13 = y;\r
-this.m23 = z;\r
-this.m33 = w;\r
-} else {\r
-this.err ();\r
-}}, "~N,~N,~N,~N,~N");\r
-Clazz.defineMethod (c$, "setColumnA", \r
-function (column, v) {\r
-if (column < 3) this.setColumn33 (column, v);\r
-switch (column) {\r
-case 0:\r
-this.m30 = v[3];\r
-return;\r
-case 1:\r
-this.m31 = v[3];\r
-return;\r
-case 2:\r
-this.m32 = v[3];\r
-return;\r
-case 3:\r
-this.m03 = v[0];\r
-this.m13 = v[1];\r
-this.m23 = v[2];\r
-this.m33 = v[3];\r
-return;\r
-default:\r
-this.err ();\r
-}\r
-}, "~N,~A");\r
-Clazz.defineMethod (c$, "getColumn", \r
-function (column, v) {\r
-if (column < 3) this.getColumn33 (column, v);\r
-switch (column) {\r
-case 0:\r
-v[3] = this.m30;\r
-return;\r
-case 1:\r
-v[3] = this.m31;\r
-return;\r
-case 2:\r
-v[3] = this.m32;\r
-return;\r
-case 3:\r
-v[0] = this.m03;\r
-v[1] = this.m13;\r
-v[2] = this.m23;\r
-v[3] = this.m33;\r
-return;\r
-default:\r
-this.err ();\r
-}\r
-}, "~N,~A");\r
-Clazz.defineMethod (c$, "sub", \r
-function (m1) {\r
-this.sub33 (m1);\r
-this.m03 -= m1.m03;\r
-this.m13 -= m1.m13;\r
-this.m23 -= m1.m23;\r
-this.m30 -= m1.m30;\r
-this.m31 -= m1.m31;\r
-this.m32 -= m1.m32;\r
-this.m33 -= m1.m33;\r
-}, "javajs.util.M4");\r
-Clazz.defineMethod (c$, "transpose", \r
-function () {\r
-this.transpose33 ();\r
-var tmp = this.m03;\r
-this.m03 = this.m30;\r
-this.m30 = tmp;\r
-tmp = this.m13;\r
-this.m13 = this.m31;\r
-this.m31 = tmp;\r
-tmp = this.m23;\r
-this.m23 = this.m32;\r
-this.m32 = tmp;\r
-});\r
-Clazz.defineMethod (c$, "invert", \r
-function () {\r
-var s = this.determinant4 ();\r
-if (s == 0.0) return this;\r
-s = 1 / s;\r
-this.set (this.m11 * (this.m22 * this.m33 - this.m23 * this.m32) + this.m12 * (this.m23 * this.m31 - this.m21 * this.m33) + this.m13 * (this.m21 * this.m32 - this.m22 * this.m31), this.m21 * (this.m02 * this.m33 - this.m03 * this.m32) + this.m22 * (this.m03 * this.m31 - this.m01 * this.m33) + this.m23 * (this.m01 * this.m32 - this.m02 * this.m31), this.m31 * (this.m02 * this.m13 - this.m03 * this.m12) + this.m32 * (this.m03 * this.m11 - this.m01 * this.m13) + this.m33 * (this.m01 * this.m12 - this.m02 * this.m11), this.m01 * (this.m13 * this.m22 - this.m12 * this.m23) + this.m02 * (this.m11 * this.m23 - this.m13 * this.m21) + this.m03 * (this.m12 * this.m21 - this.m11 * this.m22), this.m12 * (this.m20 * this.m33 - this.m23 * this.m30) + this.m13 * (this.m22 * this.m30 - this.m20 * this.m32) + this.m10 * (this.m23 * this.m32 - this.m22 * this.m33), this.m22 * (this.m00 * this.m33 - this.m03 * this.m30) + this.m23 * (this.m02 * this.m30 - this.m00 * this.m32) + this.m20 * (this.m03 * this.m32 - this.m02 * this.m33), this.m32 * (this.m00 * this.m13 - this.m03 * this.m10) + this.m33 * (this.m02 * this.m10 - this.m00 * this.m12) + this.m30 * (this.m03 * this.m12 - this.m02 * this.m13), this.m02 * (this.m13 * this.m20 - this.m10 * this.m23) + this.m03 * (this.m10 * this.m22 - this.m12 * this.m20) + this.m00 * (this.m12 * this.m23 - this.m13 * this.m22), this.m13 * (this.m20 * this.m31 - this.m21 * this.m30) + this.m10 * (this.m21 * this.m33 - this.m23 * this.m31) + this.m11 * (this.m23 * this.m30 - this.m20 * this.m33), this.m23 * (this.m00 * this.m31 - this.m01 * this.m30) + this.m20 * (this.m01 * this.m33 - this.m03 * this.m31) + this.m21 * (this.m03 * this.m30 - this.m00 * this.m33), this.m33 * (this.m00 * this.m11 - this.m01 * this.m10) + this.m30 * (this.m01 * this.m13 - this.m03 * this.m11) + this.m31 * (this.m03 * this.m10 - this.m00 * this.m13), this.m03 * (this.m11 * this.m20 - this.m10 * this.m21) + this.m00 * (this.m13 * this.m21 - this.m11 * this.m23) + this.m01 * (this.m10 * this.m23 - this.m13 * this.m20), this.m10 * (this.m22 * this.m31 - this.m21 * this.m32) + this.m11 * (this.m20 * this.m32 - this.m22 * this.m30) + this.m12 * (this.m21 * this.m30 - this.m20 * this.m31), this.m20 * (this.m02 * this.m31 - this.m01 * this.m32) + this.m21 * (this.m00 * this.m32 - this.m02 * this.m30) + this.m22 * (this.m01 * this.m30 - this.m00 * this.m31), this.m30 * (this.m02 * this.m11 - this.m01 * this.m12) + this.m31 * (this.m00 * this.m12 - this.m02 * this.m10) + this.m32 * (this.m01 * this.m10 - this.m00 * this.m11), this.m00 * (this.m11 * this.m22 - this.m12 * this.m21) + this.m01 * (this.m12 * this.m20 - this.m10 * this.m22) + this.m02 * (this.m10 * this.m21 - this.m11 * this.m20));\r
-this.scale (s);\r
-return this;\r
-});\r
-Clazz.defineMethod (c$, "set", \r
-($fz = function (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\r
-this.m00 = m00;\r
-this.m01 = m01;\r
-this.m02 = m02;\r
-this.m03 = m03;\r
-this.m10 = m10;\r
-this.m11 = m11;\r
-this.m12 = m12;\r
-this.m13 = m13;\r
-this.m20 = m20;\r
-this.m21 = m21;\r
-this.m22 = m22;\r
-this.m23 = m23;\r
-this.m30 = m30;\r
-this.m31 = m31;\r
-this.m32 = m32;\r
-this.m33 = m33;\r
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N");\r
-Clazz.defineMethod (c$, "determinant4", \r
-function () {\r
-return (this.m00 * this.m11 - this.m01 * this.m10) * (this.m22 * this.m33 - this.m23 * this.m32) - (this.m00 * this.m12 - this.m02 * this.m10) * (this.m21 * this.m33 - this.m23 * this.m31) + (this.m00 * this.m13 - this.m03 * this.m10) * (this.m21 * this.m32 - this.m22 * this.m31) + (this.m01 * this.m12 - this.m02 * this.m11) * (this.m20 * this.m33 - this.m23 * this.m30) - (this.m01 * this.m13 - this.m03 * this.m11) * (this.m20 * this.m32 - this.m22 * this.m30) + (this.m02 * this.m13 - this.m03 * this.m12) * (this.m20 * this.m31 - this.m21 * this.m30);\r
-});\r
-Clazz.defineMethod (c$, "scale", \r
-($fz = function (scalar) {\r
-this.mul33 (scalar);\r
-this.m03 *= scalar;\r
-this.m13 *= scalar;\r
-this.m23 *= scalar;\r
-this.m30 *= scalar;\r
-this.m31 *= scalar;\r
-this.m32 *= scalar;\r
-this.m33 *= scalar;\r
-}, $fz.isPrivate = true, $fz), "~N");\r
-Clazz.defineMethod (c$, "mul", \r
-function (m1) {\r
-this.mul2 (this, m1);\r
-}, "javajs.util.M4");\r
-Clazz.defineMethod (c$, "mul2", \r
-function (m1, m2) {\r
-this.set (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20 + m1.m03 * m2.m30, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21 + m1.m03 * m2.m31, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22 + m1.m03 * m2.m32, m1.m00 * m2.m03 + m1.m01 * m2.m13 + m1.m02 * m2.m23 + m1.m03 * m2.m33, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20 + m1.m13 * m2.m30, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21 + m1.m13 * m2.m31, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22 + m1.m13 * m2.m32, m1.m10 * m2.m03 + m1.m11 * m2.m13 + m1.m12 * m2.m23 + m1.m13 * m2.m33, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20 + m1.m23 * m2.m30, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21 + m1.m23 * m2.m31, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22 + m1.m23 * m2.m32, m1.m20 * m2.m03 + m1.m21 * m2.m13 + m1.m22 * m2.m23 + m1.m23 * m2.m33, m1.m30 * m2.m00 + m1.m31 * m2.m10 + m1.m32 * m2.m20 + m1.m33 * m2.m30, m1.m30 * m2.m01 + m1.m31 * m2.m11 + m1.m32 * m2.m21 + m1.m33 * m2.m31, m1.m30 * m2.m02 + m1.m31 * m2.m12 + m1.m32 * m2.m22 + m1.m33 * m2.m32, m1.m30 * m2.m03 + m1.m31 * m2.m13 + m1.m32 * m2.m23 + m1.m33 * m2.m33);\r
-}, "javajs.util.M4,javajs.util.M4");\r
-Clazz.defineMethod (c$, "transform", \r
-function (vec) {\r
-this.transform2 (vec, vec);\r
-}, "javajs.util.T4");\r
-Clazz.defineMethod (c$, "transform2", \r
-function (vec, vecOut) {\r
-vecOut.set4 (this.m00 * vec.x + this.m01 * vec.y + this.m02 * vec.z + this.m03 * vec.w, this.m10 * vec.x + this.m11 * vec.y + this.m12 * vec.z + this.m13 * vec.w, this.m20 * vec.x + this.m21 * vec.y + this.m22 * vec.z + this.m23 * vec.w, this.m30 * vec.x + this.m31 * vec.y + this.m32 * vec.z + this.m33 * vec.w);\r
-}, "javajs.util.T4,javajs.util.T4");\r
-Clazz.defineMethod (c$, "rotTrans", \r
-function (point) {\r
-this.rotTrans2 (point, point);\r
-}, "javajs.util.T3");\r
-Clazz.defineMethod (c$, "rotTrans2", \r
-function (point, pointOut) {\r
-pointOut.set (this.m00 * point.x + this.m01 * point.y + this.m02 * point.z + this.m03, this.m10 * point.x + this.m11 * point.y + this.m12 * point.z + this.m13, this.m20 * point.x + this.m21 * point.y + this.m22 * point.z + this.m23);\r
-return pointOut;\r
-}, "javajs.util.T3,javajs.util.T3");\r
-Clazz.defineMethod (c$, "setAsXYRotation", \r
-function (angle) {\r
-this.setIdentity ();\r
-var c = Math.cos (angle);\r
-var s = Math.sin (angle);\r
-this.m22 = c;\r
-this.m23 = -s;\r
-this.m32 = s;\r
-this.m33 = c;\r
-return this;\r
-}, "~N");\r
-Clazz.defineMethod (c$, "setAsYZRotation", \r
-function (angle) {\r
-this.setIdentity ();\r
-var c = Math.cos (angle);\r
-var s = Math.sin (angle);\r
-this.m00 = c;\r
-this.m03 = -s;\r
-this.m30 = s;\r
-this.m33 = c;\r
-return this;\r
-}, "~N");\r
-Clazz.defineMethod (c$, "setAsXZRotation", \r
-function (angle) {\r
-this.setIdentity ();\r
-var c = Math.cos (angle);\r
-var s = Math.sin (angle);\r
-this.m11 = c;\r
-this.m13 = -s;\r
-this.m31 = s;\r
-this.m33 = c;\r
-return this;\r
-}, "~N");\r
-Clazz.overrideMethod (c$, "equals", \r
-function (o) {\r
-if (!(Clazz.instanceOf (o, javajs.util.M4))) return false;\r
-var m = o;\r
-return (this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m03 == m.m03 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m13 == m.m13 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22 && this.m23 == m.m23 && this.m30 == m.m30 && this.m31 == m.m31 && this.m32 == m.m32 && this.m33 == m.m33);\r
-}, "~O");\r
-Clazz.overrideMethod (c$, "hashCode", \r
-function () {\r
-return javajs.util.T3.floatToIntBits0 (this.m00) ^ javajs.util.T3.floatToIntBits0 (this.m01) ^ javajs.util.T3.floatToIntBits0 (this.m02) ^ javajs.util.T3.floatToIntBits0 (this.m03) ^ javajs.util.T3.floatToIntBits0 (this.m10) ^ javajs.util.T3.floatToIntBits0 (this.m11) ^ javajs.util.T3.floatToIntBits0 (this.m12) ^ javajs.util.T3.floatToIntBits0 (this.m13) ^ javajs.util.T3.floatToIntBits0 (this.m20) ^ javajs.util.T3.floatToIntBits0 (this.m21) ^ javajs.util.T3.floatToIntBits0 (this.m22) ^ javajs.util.T3.floatToIntBits0 (this.m23) ^ javajs.util.T3.floatToIntBits0 (this.m30) ^ javajs.util.T3.floatToIntBits0 (this.m31) ^ javajs.util.T3.floatToIntBits0 (this.m32) ^ javajs.util.T3.floatToIntBits0 (this.m33);\r
-});\r
-Clazz.overrideMethod (c$, "toString", \r
-function () {\r
-return "[\n  [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "\t" + this.m03 + "]" + "\n  [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "\t" + this.m13 + "]" + "\n  [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "\t" + this.m23 + "]" + "\n  [" + this.m30 + "\t" + this.m31 + "\t" + this.m32 + "\t" + this.m33 + "] ]";\r
-});\r
-Clazz.defineMethod (c$, "round", \r
-function (f) {\r
-this.m00 = this.rnd (this.m00, f);\r
-this.m01 = this.rnd (this.m01, f);\r
-this.m02 = this.rnd (this.m02, f);\r
-this.m03 = this.rnd (this.m03, f);\r
-this.m10 = this.rnd (this.m10, f);\r
-this.m11 = this.rnd (this.m11, f);\r
-this.m12 = this.rnd (this.m12, f);\r
-this.m13 = this.rnd (this.m13, f);\r
-this.m20 = this.rnd (this.m20, f);\r
-this.m21 = this.rnd (this.m21, f);\r
-this.m22 = this.rnd (this.m22, f);\r
-this.m23 = this.rnd (this.m23, f);\r
-this.m30 = this.rnd (this.m30, f);\r
-this.m31 = this.rnd (this.m31, f);\r
-this.m32 = this.rnd (this.m32, f);\r
-this.m33 = this.rnd (this.m33, f);\r
-return this;\r
-}, "~N");\r
-Clazz.defineMethod (c$, "rnd", \r
-($fz = function (n, f) {\r
-return (Math.abs (n) < f ? 0 : n);\r
-}, $fz.isPrivate = true, $fz), "~N,~N");\r
-});\r
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.M34"], "javajs.util.M4", ["javajs.util.T3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.m03 = 0;
+this.m13 = 0;
+this.m23 = 0;
+this.m30 = 0;
+this.m31 = 0;
+this.m32 = 0;
+this.m33 = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "M4", javajs.util.M34);
+c$.newA16 = Clazz.defineMethod (c$, "newA16", 
+function (v) {
+var m =  new javajs.util.M4 ();
+m.m00 = v[0];
+m.m01 = v[1];
+m.m02 = v[2];
+m.m03 = v[3];
+m.m10 = v[4];
+m.m11 = v[5];
+m.m12 = v[6];
+m.m13 = v[7];
+m.m20 = v[8];
+m.m21 = v[9];
+m.m22 = v[10];
+m.m23 = v[11];
+m.m30 = v[12];
+m.m31 = v[13];
+m.m32 = v[14];
+m.m33 = v[15];
+return m;
+}, "~A");
+c$.newM4 = Clazz.defineMethod (c$, "newM4", 
+function (m1) {
+var m =  new javajs.util.M4 ();
+if (m1 == null) {
+m.setIdentity ();
+return m;
+}m.setToM3 (m1);
+m.m03 = m1.m03;
+m.m13 = m1.m13;
+m.m23 = m1.m23;
+m.m30 = m1.m30;
+m.m31 = m1.m31;
+m.m32 = m1.m32;
+m.m33 = m1.m33;
+return m;
+}, "javajs.util.M4");
+c$.newMV = Clazz.defineMethod (c$, "newMV", 
+function (m1, t) {
+var m =  new javajs.util.M4 ();
+m.setMV (m1, t);
+return m;
+}, "javajs.util.M3,javajs.util.T3");
+Clazz.defineMethod (c$, "setZero", 
+function () {
+this.clear33 ();
+this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = this.m33 = 0.0;
+});
+Clazz.defineMethod (c$, "setIdentity", 
+function () {
+this.setZero ();
+this.m00 = this.m11 = this.m22 = this.m33 = 1.0;
+});
+Clazz.defineMethod (c$, "setM4", 
+function (m1) {
+this.setM33 (m1);
+this.m03 = m1.m03;
+this.m13 = m1.m13;
+this.m23 = m1.m23;
+this.m30 = m1.m30;
+this.m31 = m1.m31;
+this.m32 = m1.m32;
+this.m33 = m1.m33;
+return this;
+}, "javajs.util.M4");
+Clazz.defineMethod (c$, "setMV", 
+function (m1, t) {
+this.setM33 (m1);
+this.setTranslation (t);
+this.m33 = 1;
+}, "javajs.util.M3,javajs.util.T3");
+Clazz.defineMethod (c$, "setToM3", 
+function (m1) {
+this.setM33 (m1);
+this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = 0.0;
+this.m33 = 1.0;
+}, "javajs.util.M34");
+Clazz.defineMethod (c$, "setToAA", 
+function (a) {
+this.setIdentity ();
+this.setAA33 (a);
+}, "javajs.util.A4");
+Clazz.defineMethod (c$, "setA", 
+function (m) {
+this.m00 = m[0];
+this.m01 = m[1];
+this.m02 = m[2];
+this.m03 = m[3];
+this.m10 = m[4];
+this.m11 = m[5];
+this.m12 = m[6];
+this.m13 = m[7];
+this.m20 = m[8];
+this.m21 = m[9];
+this.m22 = m[10];
+this.m23 = m[11];
+this.m30 = m[12];
+this.m31 = m[13];
+this.m32 = m[14];
+this.m33 = m[15];
+}, "~A");
+Clazz.defineMethod (c$, "setTranslation", 
+function (trans) {
+this.m03 = trans.x;
+this.m13 = trans.y;
+this.m23 = trans.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "setElement", 
+function (row, col, v) {
+if (row < 3 && col < 3) {
+this.set33 (row, col, v);
+return;
+}if (row > 3 || col > 3) this.err ();
+switch (row) {
+case 0:
+this.m03 = v;
+return;
+case 1:
+this.m13 = v;
+return;
+case 2:
+this.m23 = v;
+return;
+}
+switch (col) {
+case 0:
+this.m30 = v;
+return;
+case 1:
+this.m31 = v;
+return;
+case 2:
+this.m32 = v;
+return;
+case 3:
+this.m33 = v;
+return;
+}
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "getElement", 
+function (row, col) {
+if (row < 3 && col < 3) return this.get33 (row, col);
+if (row > 3 || col > 3) {
+this.err ();
+return 0;
+}switch (row) {
+case 0:
+return this.m03;
+case 1:
+return this.m13;
+case 2:
+return this.m23;
+default:
+switch (col) {
+case 0:
+return this.m30;
+case 1:
+return this.m31;
+case 2:
+return this.m32;
+default:
+return this.m33;
+}
+}
+}, "~N,~N");
+Clazz.defineMethod (c$, "getTranslation", 
+function (trans) {
+trans.x = this.m03;
+trans.y = this.m13;
+trans.z = this.m23;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "getRotationScale", 
+function (m1) {
+m1.m00 = this.m00;
+m1.m01 = this.m01;
+m1.m02 = this.m02;
+m1.m10 = this.m10;
+m1.m11 = this.m11;
+m1.m12 = this.m12;
+m1.m20 = this.m20;
+m1.m21 = this.m21;
+m1.m22 = this.m22;
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "setRotationScale", 
+function (m1) {
+this.m00 = m1.m00;
+this.m01 = m1.m01;
+this.m02 = m1.m02;
+this.m10 = m1.m10;
+this.m11 = m1.m11;
+this.m12 = m1.m12;
+this.m20 = m1.m20;
+this.m21 = m1.m21;
+this.m22 = m1.m22;
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "setRowA", 
+function (row, v) {
+if (row < 3) this.setRow33 (row, v);
+switch (row) {
+case 0:
+this.m03 = v[3];
+return;
+case 1:
+this.m13 = v[3];
+return;
+case 2:
+this.m23 = v[3];
+return;
+case 3:
+this.m30 = v[0];
+this.m31 = v[1];
+this.m32 = v[2];
+this.m33 = v[3];
+return;
+}
+this.err ();
+}, "~N,~A");
+Clazz.overrideMethod (c$, "getRow", 
+function (row, v) {
+if (row < 3) this.getRow33 (row, v);
+switch (row) {
+case 0:
+v[3] = this.m03;
+return;
+case 1:
+v[3] = this.m13;
+return;
+case 2:
+v[3] = this.m23;
+return;
+case 3:
+v[0] = this.m30;
+v[1] = this.m31;
+v[2] = this.m32;
+v[3] = this.m33;
+return;
+}
+this.err ();
+}, "~N,~A");
+Clazz.defineMethod (c$, "setColumn4", 
+function (column, x, y, z, w) {
+if (column == 0) {
+this.m00 = x;
+this.m10 = y;
+this.m20 = z;
+this.m30 = w;
+} else if (column == 1) {
+this.m01 = x;
+this.m11 = y;
+this.m21 = z;
+this.m31 = w;
+} else if (column == 2) {
+this.m02 = x;
+this.m12 = y;
+this.m22 = z;
+this.m32 = w;
+} else if (column == 3) {
+this.m03 = x;
+this.m13 = y;
+this.m23 = z;
+this.m33 = w;
+} else {
+this.err ();
+}}, "~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "setColumnA", 
+function (column, v) {
+if (column < 3) this.setColumn33 (column, v);
+switch (column) {
+case 0:
+this.m30 = v[3];
+return;
+case 1:
+this.m31 = v[3];
+return;
+case 2:
+this.m32 = v[3];
+return;
+case 3:
+this.m03 = v[0];
+this.m13 = v[1];
+this.m23 = v[2];
+this.m33 = v[3];
+return;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "getColumn", 
+function (column, v) {
+if (column < 3) this.getColumn33 (column, v);
+switch (column) {
+case 0:
+v[3] = this.m30;
+return;
+case 1:
+v[3] = this.m31;
+return;
+case 2:
+v[3] = this.m32;
+return;
+case 3:
+v[0] = this.m03;
+v[1] = this.m13;
+v[2] = this.m23;
+v[3] = this.m33;
+return;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "sub", 
+function (m1) {
+this.sub33 (m1);
+this.m03 -= m1.m03;
+this.m13 -= m1.m13;
+this.m23 -= m1.m23;
+this.m30 -= m1.m30;
+this.m31 -= m1.m31;
+this.m32 -= m1.m32;
+this.m33 -= m1.m33;
+}, "javajs.util.M4");
+Clazz.defineMethod (c$, "transpose", 
+function () {
+this.transpose33 ();
+var tmp = this.m03;
+this.m03 = this.m30;
+this.m30 = tmp;
+tmp = this.m13;
+this.m13 = this.m31;
+this.m31 = tmp;
+tmp = this.m23;
+this.m23 = this.m32;
+this.m32 = tmp;
+});
+Clazz.defineMethod (c$, "invert", 
+function () {
+var s = this.determinant4 ();
+if (s == 0.0) return this;
+s = 1 / s;
+this.set (this.m11 * (this.m22 * this.m33 - this.m23 * this.m32) + this.m12 * (this.m23 * this.m31 - this.m21 * this.m33) + this.m13 * (this.m21 * this.m32 - this.m22 * this.m31), this.m21 * (this.m02 * this.m33 - this.m03 * this.m32) + this.m22 * (this.m03 * this.m31 - this.m01 * this.m33) + this.m23 * (this.m01 * this.m32 - this.m02 * this.m31), this.m31 * (this.m02 * this.m13 - this.m03 * this.m12) + this.m32 * (this.m03 * this.m11 - this.m01 * this.m13) + this.m33 * (this.m01 * this.m12 - this.m02 * this.m11), this.m01 * (this.m13 * this.m22 - this.m12 * this.m23) + this.m02 * (this.m11 * this.m23 - this.m13 * this.m21) + this.m03 * (this.m12 * this.m21 - this.m11 * this.m22), this.m12 * (this.m20 * this.m33 - this.m23 * this.m30) + this.m13 * (this.m22 * this.m30 - this.m20 * this.m32) + this.m10 * (this.m23 * this.m32 - this.m22 * this.m33), this.m22 * (this.m00 * this.m33 - this.m03 * this.m30) + this.m23 * (this.m02 * this.m30 - this.m00 * this.m32) + this.m20 * (this.m03 * this.m32 - this.m02 * this.m33), this.m32 * (this.m00 * this.m13 - this.m03 * this.m10) + this.m33 * (this.m02 * this.m10 - this.m00 * this.m12) + this.m30 * (this.m03 * this.m12 - this.m02 * this.m13), this.m02 * (this.m13 * this.m20 - this.m10 * this.m23) + this.m03 * (this.m10 * this.m22 - this.m12 * this.m20) + this.m00 * (this.m12 * this.m23 - this.m13 * this.m22), this.m13 * (this.m20 * this.m31 - this.m21 * this.m30) + this.m10 * (this.m21 * this.m33 - this.m23 * this.m31) + this.m11 * (this.m23 * this.m30 - this.m20 * this.m33), this.m23 * (this.m00 * this.m31 - this.m01 * this.m30) + this.m20 * (this.m01 * this.m33 - this.m03 * this.m31) + this.m21 * (this.m03 * this.m30 - this.m00 * this.m33), this.m33 * (this.m00 * this.m11 - this.m01 * this.m10) + this.m30 * (this.m01 * this.m13 - this.m03 * this.m11) + this.m31 * (this.m03 * this.m10 - this.m00 * this.m13), this.m03 * (this.m11 * this.m20 - this.m10 * this.m21) + this.m00 * (this.m13 * this.m21 - this.m11 * this.m23) + this.m01 * (this.m10 * this.m23 - this.m13 * this.m20), this.m10 * (this.m22 * this.m31 - this.m21 * this.m32) + this.m11 * (this.m20 * this.m32 - this.m22 * this.m30) + this.m12 * (this.m21 * this.m30 - this.m20 * this.m31), this.m20 * (this.m02 * this.m31 - this.m01 * this.m32) + this.m21 * (this.m00 * this.m32 - this.m02 * this.m30) + this.m22 * (this.m01 * this.m30 - this.m00 * this.m31), this.m30 * (this.m02 * this.m11 - this.m01 * this.m12) + this.m31 * (this.m00 * this.m12 - this.m02 * this.m10) + this.m32 * (this.m01 * this.m10 - this.m00 * this.m11), this.m00 * (this.m11 * this.m22 - this.m12 * this.m21) + this.m01 * (this.m12 * this.m20 - this.m10 * this.m22) + this.m02 * (this.m10 * this.m21 - this.m11 * this.m20));
+this.scale (s);
+return this;
+});
+Clazz.defineMethod (c$, "set", 
+($fz = function (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
+this.m00 = m00;
+this.m01 = m01;
+this.m02 = m02;
+this.m03 = m03;
+this.m10 = m10;
+this.m11 = m11;
+this.m12 = m12;
+this.m13 = m13;
+this.m20 = m20;
+this.m21 = m21;
+this.m22 = m22;
+this.m23 = m23;
+this.m30 = m30;
+this.m31 = m31;
+this.m32 = m32;
+this.m33 = m33;
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "determinant4", 
+function () {
+return (this.m00 * this.m11 - this.m01 * this.m10) * (this.m22 * this.m33 - this.m23 * this.m32) - (this.m00 * this.m12 - this.m02 * this.m10) * (this.m21 * this.m33 - this.m23 * this.m31) + (this.m00 * this.m13 - this.m03 * this.m10) * (this.m21 * this.m32 - this.m22 * this.m31) + (this.m01 * this.m12 - this.m02 * this.m11) * (this.m20 * this.m33 - this.m23 * this.m30) - (this.m01 * this.m13 - this.m03 * this.m11) * (this.m20 * this.m32 - this.m22 * this.m30) + (this.m02 * this.m13 - this.m03 * this.m12) * (this.m20 * this.m31 - this.m21 * this.m30);
+});
+Clazz.defineMethod (c$, "scale", 
+($fz = function (scalar) {
+this.mul33 (scalar);
+this.m03 *= scalar;
+this.m13 *= scalar;
+this.m23 *= scalar;
+this.m30 *= scalar;
+this.m31 *= scalar;
+this.m32 *= scalar;
+this.m33 *= scalar;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "mul", 
+function (m1) {
+this.mul2 (this, m1);
+}, "javajs.util.M4");
+Clazz.defineMethod (c$, "mul2", 
+function (m1, m2) {
+this.set (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20 + m1.m03 * m2.m30, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21 + m1.m03 * m2.m31, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22 + m1.m03 * m2.m32, m1.m00 * m2.m03 + m1.m01 * m2.m13 + m1.m02 * m2.m23 + m1.m03 * m2.m33, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20 + m1.m13 * m2.m30, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21 + m1.m13 * m2.m31, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22 + m1.m13 * m2.m32, m1.m10 * m2.m03 + m1.m11 * m2.m13 + m1.m12 * m2.m23 + m1.m13 * m2.m33, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20 + m1.m23 * m2.m30, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21 + m1.m23 * m2.m31, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22 + m1.m23 * m2.m32, m1.m20 * m2.m03 + m1.m21 * m2.m13 + m1.m22 * m2.m23 + m1.m23 * m2.m33, m1.m30 * m2.m00 + m1.m31 * m2.m10 + m1.m32 * m2.m20 + m1.m33 * m2.m30, m1.m30 * m2.m01 + m1.m31 * m2.m11 + m1.m32 * m2.m21 + m1.m33 * m2.m31, m1.m30 * m2.m02 + m1.m31 * m2.m12 + m1.m32 * m2.m22 + m1.m33 * m2.m32, m1.m30 * m2.m03 + m1.m31 * m2.m13 + m1.m32 * m2.m23 + m1.m33 * m2.m33);
+}, "javajs.util.M4,javajs.util.M4");
+Clazz.defineMethod (c$, "transform", 
+function (vec) {
+this.transform2 (vec, vec);
+}, "javajs.util.T4");
+Clazz.defineMethod (c$, "transform2", 
+function (vec, vecOut) {
+vecOut.set4 (this.m00 * vec.x + this.m01 * vec.y + this.m02 * vec.z + this.m03 * vec.w, this.m10 * vec.x + this.m11 * vec.y + this.m12 * vec.z + this.m13 * vec.w, this.m20 * vec.x + this.m21 * vec.y + this.m22 * vec.z + this.m23 * vec.w, this.m30 * vec.x + this.m31 * vec.y + this.m32 * vec.z + this.m33 * vec.w);
+}, "javajs.util.T4,javajs.util.T4");
+Clazz.defineMethod (c$, "rotTrans", 
+function (point) {
+this.rotTrans2 (point, point);
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "rotTrans2", 
+function (point, pointOut) {
+pointOut.set (this.m00 * point.x + this.m01 * point.y + this.m02 * point.z + this.m03, this.m10 * point.x + this.m11 * point.y + this.m12 * point.z + this.m13, this.m20 * point.x + this.m21 * point.y + this.m22 * point.z + this.m23);
+return pointOut;
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "setAsXYRotation", 
+function (angle) {
+this.setIdentity ();
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m22 = c;
+this.m23 = -s;
+this.m32 = s;
+this.m33 = c;
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "setAsYZRotation", 
+function (angle) {
+this.setIdentity ();
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m00 = c;
+this.m03 = -s;
+this.m30 = s;
+this.m33 = c;
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "setAsXZRotation", 
+function (angle) {
+this.setIdentity ();
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m11 = c;
+this.m13 = -s;
+this.m31 = s;
+this.m33 = c;
+return this;
+}, "~N");
+Clazz.overrideMethod (c$, "equals", 
+function (o) {
+if (!(Clazz.instanceOf (o, javajs.util.M4))) return false;
+var m = o;
+return (this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m03 == m.m03 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m13 == m.m13 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22 && this.m23 == m.m23 && this.m30 == m.m30 && this.m31 == m.m31 && this.m32 == m.m32 && this.m33 == m.m33);
+}, "~O");
+Clazz.overrideMethod (c$, "hashCode", 
+function () {
+return javajs.util.T3.floatToIntBits0 (this.m00) ^ javajs.util.T3.floatToIntBits0 (this.m01) ^ javajs.util.T3.floatToIntBits0 (this.m02) ^ javajs.util.T3.floatToIntBits0 (this.m03) ^ javajs.util.T3.floatToIntBits0 (this.m10) ^ javajs.util.T3.floatToIntBits0 (this.m11) ^ javajs.util.T3.floatToIntBits0 (this.m12) ^ javajs.util.T3.floatToIntBits0 (this.m13) ^ javajs.util.T3.floatToIntBits0 (this.m20) ^ javajs.util.T3.floatToIntBits0 (this.m21) ^ javajs.util.T3.floatToIntBits0 (this.m22) ^ javajs.util.T3.floatToIntBits0 (this.m23) ^ javajs.util.T3.floatToIntBits0 (this.m30) ^ javajs.util.T3.floatToIntBits0 (this.m31) ^ javajs.util.T3.floatToIntBits0 (this.m32) ^ javajs.util.T3.floatToIntBits0 (this.m33);
+});
+Clazz.overrideMethod (c$, "toString", 
+function () {
+return "[\n  [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "\t" + this.m03 + "]" + "\n  [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "\t" + this.m13 + "]" + "\n  [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "\t" + this.m23 + "]" + "\n  [" + this.m30 + "\t" + this.m31 + "\t" + this.m32 + "\t" + this.m33 + "] ]";
+});
+Clazz.defineMethod (c$, "round", 
+function (f) {
+this.m00 = this.rnd (this.m00, f);
+this.m01 = this.rnd (this.m01, f);
+this.m02 = this.rnd (this.m02, f);
+this.m03 = this.rnd (this.m03, f);
+this.m10 = this.rnd (this.m10, f);
+this.m11 = this.rnd (this.m11, f);
+this.m12 = this.rnd (this.m12, f);
+this.m13 = this.rnd (this.m13, f);
+this.m20 = this.rnd (this.m20, f);
+this.m21 = this.rnd (this.m21, f);
+this.m22 = this.rnd (this.m22, f);
+this.m23 = this.rnd (this.m23, f);
+this.m30 = this.rnd (this.m30, f);
+this.m31 = this.rnd (this.m31, f);
+this.m32 = this.rnd (this.m32, f);
+this.m33 = this.rnd (this.m33, f);
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "rnd", 
+($fz = function (n, f) {
+return (Math.abs (n) < f ? 0 : n);
+}, $fz.isPrivate = true, $fz), "~N,~N");
+});