Вход Регистрация
Файл: Space race/libs/Three.dev.js
Строк: 14355
<?php
// Three.js - http://github.com/mrdoob/three.js
'use strict';
var 
THREE THREE || {
    
REVISION"50dev"
};
self.console || (self.console = {
    
info: function() {},
    
log: function() {},
    
debug: function() {},
    
warn: function() {},
    
error: function() {}
});
self.Int32Array || (self.Int32Array = Array, self.Float32Array = Array);
(function() {
    for (var 
0= ["ms""moz""webkit""o"], 0b.length && !window.requestAnimationFrame; ++c) {
        
window.requestAnimationFrame window[b[c] + "RequestAnimationFrame"];
        
window.cancelAnimationFrame window[b[c] + "CancelAnimationFrame"] || window[b[c] + "CancelRequestAnimationFrame"]
    }
    if (!
window.requestAnimationFramewindow.requestAnimationFrame = function(b) {
        var 
Date.now(),
            
Math.max(016 - (a)),
            
window.setTimeout(function() {
                
b(f)
            }, 
f);
        
f;
        return 
g
    
};
    if (!
window.cancelAnimationFramewindow.cancelAnimationFrame =
        function(
a) {
            
clearTimeout(a)
        }
})();
THREE.NoShading 0;
THREE.FlatShading 1;
THREE.SmoothShading 2;
THREE.NoColors 0;
THREE.FaceColors 1;
THREE.VertexColors 2;
THREE.NoBlending 0;
THREE.NormalBlending 1;
THREE.AdditiveBlending 2;
THREE.SubtractiveBlending 3;
THREE.MultiplyBlending 4;
THREE.CustomBlending 5;
THREE.AddEquation 100;
THREE.SubtractEquation 101;
THREE.ReverseSubtractEquation 102;
THREE.ZeroFactor 200;
THREE.OneFactor 201;
THREE.SrcColorFactor 202;
THREE.OneMinusSrcColorFactor 203;
THREE.SrcAlphaFactor 204;
THREE.OneMinusSrcAlphaFactor 205;
THREE.DstAlphaFactor 206;
THREE.OneMinusDstAlphaFactor 207;
THREE.DstColorFactor 208;
THREE.OneMinusDstColorFactor 209;
THREE.SrcAlphaSaturateFactor 210;
THREE.MultiplyOperation 0;
THREE.MixOperation 1;
THREE.UVMapping = function() {};
THREE.CubeReflectionMapping = function() {};
THREE.CubeRefractionMapping = function() {};
THREE.SphericalReflectionMapping = function() {};
THREE.SphericalRefractionMapping = function() {};
THREE.RepeatWrapping 1E3;
THREE.ClampToEdgeWrapping 1001;
THREE.MirroredRepeatWrapping 1002;
THREE.NearestFilter 1003;
THREE.NearestMipMapNearestFilter 1004;
THREE.NearestMipMapLinearFilter 1005;
THREE.LinearFilter 1006;
THREE.LinearMipMapNearestFilter 1007;
THREE.LinearMipMapLinearFilter 1008;
THREE.UnsignedByteType 1009;
THREE.ByteType 1010;
THREE.ShortType 1011;
THREE.UnsignedShortType 1012;
THREE.IntType 1013;
THREE.UnsignedIntType 1014;
THREE.FloatType 1015;
THREE.UnsignedShort4444Type 1016;
THREE.UnsignedShort5551Type 1017;
THREE.UnsignedShort565Type 1018;
THREE.AlphaFormat 1019;
THREE.RGBFormat 1020;
THREE.RGBAFormat 1021;
THREE.LuminanceFormat 1022;
THREE.LuminanceAlphaFormat 1023;
THREE.Clock = function(a) {
    
this.autoStart !== void 0 true;
    
this.elapsedTime this.oldTime this.startTime 0;
    
this.running false
};
THREE.Clock.prototype.start = function() {
    
this.oldTime this.startTime Date.now();
    
this.running true
};
THREE.Clock.prototype.stop = function() {
    
this.getElapsedTime();
    
this.running false
};
THREE.Clock.prototype.getElapsedTime = function() {
    return 
this.elapsedTime this.elapsedTime this.getDelta()
};
THREE.Clock.prototype.getDelta = function() {
    var 
0;
    
this.autoStart && !this.running && this.start();
    if (
this.running) {
        var 
Date.now(),
            
0.0010 * (this.oldTime);
        
this.oldTime b;
        
this.elapsedTime this.elapsedTime a
    
}
    return 
a
};
THREE.Color = function(a) {
    
!== void 0 && this.setHex(a);
    return 
this
};
THREE.Color.prototype = {
    
constructorTHREE.Color,
    
r1,
    
g1,
    
b1,
    
copy: function(a) {
        
this.a.r;
        
this.a.g;
        
this.a.b;
        return 
this
    
},
    
copyGammaToLinear: function(a) {
        
this.a.a.r;
        
this.a.a.g;
        
this.a.a.b;
        return 
this
    
},
    
copyLinearToGamma: function(a) {
        
this.Math.sqrt(a.r);
        
this.Math.sqrt(a.g);
        
this.Math.sqrt(a.b);
        return 
this
    
},
    
convertGammaToLinear: function() {
        var 
this.r,
            
this.g,
            
this.b;
        
this.a;
        
this.b;
        
this.c;
        return 
this
    
},
    
convertLinearToGamma: function() {
        
this.Math.sqrt(this.r);
        
this.Math.sqrt(this.g);
        
this.Math.sqrt(this.b);
        return 
this
    
},
    
setRGB: function(abc) {
        
this.a;
        
this.b;
        
this.c;
        return 
this
    
},
    
setHSV: function(abc) {
        var 
def;
        if (
=== 0this.this.this.0;
        else {
            
Math.floor(6);
            
d;
            
* (b);
            
* (e);
            
* (* (e));
            if (
=== 0) {
                
this.c;
                
this.b;
                
this.a
            
} else if (=== 1) {
                
this.f;
                
this.c;
                
this.a
            
} else if (=== 2) {
                
this.a;
                
this.c;
                
this.b
            
} else if (=== 3) {
                
this.a;
                
this.f;
                
this.c
            
} else if (=== 4) {
                
this.b;
                
this.a;
                
this.c
            
} else if (=== 5) {
                
this.c;
                
this.a;
                
this.f
            
}
        }
        return 
this
    
},
    
setHex: function(a) {
        
=
            
Math.floor(a);
        
this.= (>> 16 255) / 255;
        
this.= (>> 255) / 255;
        
this.= (255) / 255;
        return 
this
    
},
    
lerpSelf: function(ab) {
        
this.this.+ (a.this.r) * b;
        
this.this.+ (a.this.g) * b;
        
this.this.+ (a.this.b) * b;
        return 
this
    
},
    
getHex: function() {
        return 
Math.floor(this.255) << 16 Math.floor(this.255) << Math.floor(this.255)
    },
    
getContextStyle: function() {
        return 
"rgb(" Math.floor(this.255) + "," Math.floor(this.255) + "," Math.floor(this.255) + ")"
    
},
    clone: function() {
        return (new 
THREE.Color).setRGB(this.rthis.gthis.b)
    }
};
THREE.Vector2 = function(ab) {
    
this.|| 0;
    
this.|| 0
};
THREE.Vector2.prototype = {
    
constructorTHREE.Vector2,
    
set: function(ab) {
        
this.a;
        
this.b;
        return 
this
    
},
    
copy: function(a) {
        
this.a.x;
        
this.a.y;
        return 
this
    
},
    
add: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        return 
this
    
},
    
addSelf: function(a) {
        
this.this.a.x;
        
this.this.a.y;
        return 
this
    
},
    
sub: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        return 
this
    
},
    
subSelf: function(a) {
        
this.this.a.x;
        
this.this.a.y;
        return 
this
    
},
    
multiplyScalar: function(a) {
        
this.this.a;
        
this.this.a;
        return 
this
    
},
    
divideScalar: function(a) {
        if (
a) {
            
this.=
                
this.a;
            
this.this.a
        
} else this.set(00);
        return 
this
    
},
    
negate: function() {
        return 
this.multiplyScalar(-1)
    },
    
dot: function(a) {
        return 
this.a.this.a.y
    
},
    
lengthSq: function() {
        return 
this.this.this.this.y
    
},
    
length: function() {
        return 
Math.sqrt(this.lengthSq())
    },
    
normalize: function() {
        return 
this.divideScalar(this.length())
    },
    
distanceTo: function(a) {
        return 
Math.sqrt(this.distanceToSquared(a))
    },
    
distanceToSquared: function(a) {
        var 
this.a.x,
            
this.a.y;
        return 
a
    
},
    
setLength: function(a) {
        return 
this.normalize().multiplyScalar(a)
    },
    
lerpSelf: function(ab) {
        
this.this.+ (a.this.x) * b;
        
this.this.+ (a.this.y) * b;
        return 
this
    
},
    
equals: function(a) {
        return 
a.=== this.&& a.=== this.y
    
},
    
isZero: function() {
        return 
this.lengthSq() < 1.0E-4
    
},
    clone: function() {
        return new 
THREE.Vector2(this.xthis.y)
    }
};
THREE.Vector3 = function(abc) {
    
this.|| 0;
    
this.|| 0;
    
this.|| 0
};
THREE.Vector3.prototype = {
    
constructorTHREE.Vector3,
    
set: function(abc) {
        
this.a;
        
this.b;
        
this.c;
        return 
this
    
},
    
setX: function(a) {
        
this.a;
        return 
this
    
},
    
setY: function(a) {
        
this.a;
        return 
this
    
},
    
setZ: function(a) {
        
this.a;
        return 
this
    
},
    
copy: function(a) {
        
this.a.x;
        
this.a.y;
        
this.a.z;
        return 
this
    
},
    
add: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        
this.a.b.z;
        return 
this
    
},
    
addSelf: function(a) {
        
this.this.a.x;
        
this.this.a.y;
        
this.this.a.z;
        return 
this
    
},
    
addScalar: function(a) {
        
this.this.a;
        
this.this.+
            
a;
        
this.this.a;
        return 
this
    
},
    
sub: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        
this.a.b.z;
        return 
this
    
},
    
subSelf: function(a) {
        
this.this.a.x;
        
this.this.a.y;
        
this.this.a.z;
        return 
this
    
},
    
multiply: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        
this.a.b.z;
        return 
this
    
},
    
multiplySelf: function(a) {
        
this.this.a.x;
        
this.this.a.y;
        
this.this.a.z;
        return 
this
    
},
    
multiplyScalar: function(a) {
        
this.this.a;
        
this.this.a;
        
this.this.a;
        return 
this
    
},
    
divideSelf: function(a) {
        
this.this.a.x;
        
this.=
            
this.a.y;
        
this.this.a.z;
        return 
this
    
},
    
divideScalar: function(a) {
        if (
a) {
            
this.this.a;
            
this.this.a;
            
this.this.a
        
} else this.this.this.0;
        return 
this
    
},
    
negate: function() {
        return 
this.multiplyScalar(-1)
    },
    
dot: function(a) {
        return 
this.a.this.a.this.a.z
    
},
    
lengthSq: function() {
        return 
this.this.this.this.this.this.z
    
},
    
length: function() {
        return 
Math.sqrt(this.lengthSq())
    },
    
lengthManhattan: function() {
        return 
Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z)
    },
    
normalize: function() {
        return 
this.divideScalar(this.length())
    },
    
setLength: function(a) {
        return 
this.normalize().multiplyScalar(a)
    },
    
lerpSelf: function(ab) {
        
this.this.+ (a.this.x) * b;
        
this.this.+ (a.this.y) * b;
        
this.this.+ (a.this.z) * b;
        return 
this
    
},
    
cross: function(ab) {
        
this.a.b.a.b.y;
        
this.a.b.a.b.z;
        
this.a.b.a.b.x;
        return 
this
    
},
    
crossSelf: function(a) {
        var 
this.x,
            
this.y,
            
this.z;
        
this.a.a.y;
        
this.a.a.z;
        
this.a.a.x;
        return 
this
    
},
    
distanceTo: function(a) {
        return 
Math.sqrt(this.distanceToSquared(a))
    },
    
distanceToSquared: function(a) {
        return (new 
THREE.Vector3).sub(this,
            
a).lengthSq()
    },
    
getPositionFromMatrix: function(a) {
        
this.a.elements[12];
        
this.a.elements[13];
        
this.a.elements[14];
        return 
this
    
},
    
setEulerFromRotationMatrix: function(ab) {
        function 
c(a) {
            return 
Math.min(Math.max(a, -1), 1)
        }
        var 
a.elements,
            
d[0],
            
d[4],
            
d[8],
            
d[1],
            
d[5],
            
d[9],
            
d[2],
            
d[6],
            
d[10];
        if (
=== void 0 || === "XYZ") {
            
this.Math.asin(c(g));
            if (
Math.abs(g) < 0.99999) {
                
this.Math.atan2(-jd);
                
this.Math.atan2(-fe)
            } else {
                
this.Math.atan2(hi);
                
this.0
            
}
        } else if (
=== "YXZ") {
            
this.Math.asin(-c(j));
            if (
Math.abs(j) <
                
0.99999) {
                
this.Math.atan2(gd);
                
this.Math.atan2(hi)
            } else {
                
this.Math.atan2(-le);
                
this.0
            
}
        } else if (
=== "ZXY") {
            
this.Math.asin(c(m));
            if (
Math.abs(m) < 0.99999) {
                
this.Math.atan2(-ld);
                
this.Math.atan2(-fi)
            } else {
                
this.0;
                
this.Math.atan2(ge)
            }
        } else if (
=== "ZYX") {
            
this.Math.asin(-c(l));
            if (
Math.abs(l) < 0.99999) {
                
this.Math.atan2(md);
                
this.Math.atan2(he)
            } else {
                
this.0;
                
this.Math.atan2(-fi)
            }
        } else if (
=== "YZX") {
            
this.Math.asin(c(h));
            if (
Math.abs(h) < 0.99999) {
                
this.Math.atan2(-ji);
                
this.Math.atan2(-l,
                    
e)
            } else {
                
this.0;
                
this.Math.atan2(ld)
            }
        } else if (
=== "XZY") {
            
this.Math.asin(-c(f));
            if (
Math.abs(f) < 0.99999) {
                
this.Math.atan2(mi);
                
this.Math.atan2(ge)
            } else {
                
this.Math.atan2(-gd);
                
this.0
            
}
        }
        return 
this
    
},
    
setEulerFromQuaternion: function(ab) {
        function 
c(a) {
            return 
Math.min(Math.max(a, -1), 1)
        }
        var 
a.a.x,
            
a.a.y,
            
a.a.z,
            
a.a.w;
        if (
=== void 0 || === "XYZ") {
            
this.Math.atan2(* (a.a.a.a.z), f);
            
this.Math.asin(c(* (a.a.a.a.w)));
            
this.Math.atan2(* (a.a.a.a.y), f)
        } else if (
===
            
"YXZ") {
            
this.Math.asin(c(* (a.a.a.a.z)));
            
this.Math.atan2(* (a.a.a.a.w), f);
            
this.Math.atan2(* (a.a.a.a.w), f)
        } else if (
=== "ZXY") {
            
this.Math.asin(c(* (a.a.a.a.z)));
            
this.Math.atan2(* (a.a.a.a.x), f);
            
this.Math.atan2(* (a.a.a.a.y), f)
        } else if (
=== "ZYX") {
            
this.Math.atan2(* (a.a.a.a.y), f);
            
this.Math.asin(c(* (a.a.a.a.z)));
            
this.Math.atan2(* (a.a.a.a.w), f)
        } else if (
=== "YZX") {
            
this.Math.atan2(* (a.a.a.*
                
a.y), f);
            
this.Math.atan2(* (a.a.a.a.z), f);
            
this.Math.asin(c(* (a.a.a.a.w)))
        } else if (
=== "XZY") {
            
this.Math.atan2(* (a.a.a.a.z), f);
            
this.Math.atan2(* (a.a.a.a.w), f);
            
this.Math.asin(c(* (a.a.a.a.y)))
        }
        return 
this
    
},
    
getScaleFromMatrix: function(a) {
        var 
this.set(a.elements[0], a.elements[1], a.elements[2]).length(),
            
this.set(a.elements[4], a.elements[5], a.elements[6]).length(),
            
this.set(a.elements[8], a.elements[9], a.elements[10]).length();
        
this.=
            
b;
        
this.c;
        
this.a;
        return 
this
    
},
    
equals: function(a) {
        return 
a.=== this.&& a.=== this.&& a.=== this.z
    
},
    
isZero: function() {
        return 
this.lengthSq() < 1.0E-4
    
},
    clone: function() {
        return new 
THREE.Vector3(this.xthis.ythis.z)
    }
};
THREE.Vector4 = function(abcd) {
    
this.|| 0;
    
this.|| 0;
    
this.|| 0;
    
this.!== void 0 1
};
THREE.Vector4.prototype = {
    
constructorTHREE.Vector4,
    
set: function(abcd) {
        
this.a;
        
this.b;
        
this.c;
        
this.d;
        return 
this
    
},
    
copy: function(a) {
        
this.a.x;
        
this.a.y;
        
this.a.z;
        
this.a.!== void 0 a.1;
        return 
this
    
},
    
add: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        
this.a.b.z;
        
this.a.b.w;
        return 
this
    
},
    
addSelf: function(a) {
        
this.this.a.x;
        
this.this.a.y;
        
this.this.a.z;
        
this.this.a.w;
        return 
this
    
},
    
sub: function(ab) {
        
this.a.b.x;
        
this.a.b.y;
        
this.a.b.z;
        
this.a.b.w;
        return 
this
    
},
    
subSelf: function(a) {
        
this.=
            
this.a.x;
        
this.this.a.y;
        
this.this.a.z;
        
this.this.a.w;
        return 
this
    
},
    
multiplyScalar: function(a) {
        
this.this.a;
        
this.this.a;
        
this.this.a;
        
this.this.a;
        return 
this
    
},
    
divideScalar: function(a) {
        if (
a) {
            
this.this.a;
            
this.this.a;
            
this.this.a;
            
this.this.a
        
} else {
            
this.this.this.0;
            
this.1
        
}
        return 
this
    
},
    
negate: function() {
        return 
this.multiplyScalar(-1)
    },
    
dot: function(a) {
        return 
this.a.this.a.this.a.this.a.w
    
},
    
lengthSq: function() {
        return 
this.dot(this)
    },
    
length: function() {
        return 
Math.sqrt(this.lengthSq())
    },
    
normalize: function() {
        return 
this.divideScalar(this.length())
    },
    
setLength: function(a) {
        return 
this.normalize().multiplyScalar(a)
    },
    
lerpSelf: function(ab) {
        
this.this.+ (a.this.x) * b;
        
this.this.+ (a.this.y) * b;
        
this.this.+ (a.this.z) * b;
        
this.this.+ (a.this.w) * b;
        return 
this
    
},
    clone: function() {
        return new 
THREE.Vector4(this.xthis.ythis.zthis.w)
    },
    
setAxisAngleFromQuaternion: function(a) {
        
this.Math.acos(a.w);
        var 
Math.sqrt(a.a.w);
        if (
1.0E-4) {
            
this.1;
            
this.this.0
        
} else {
            
this.a.b;
            
this.=
                
a.b;
            
this.a.b
        
}
        return 
this
    
},
    
setAxisAngleFromRotationMatrix: function(a) {
        var 
bcda.elements,
            
a[0];
        
a[4];
        var 
a[8],
            
a[1],
            
a[5],
            
a[9];
        
a[2];
        
a[6];
        var 
a[10];
        if (
Math.abs(g) < 0.01 && Math.abs(c) < 0.01 && Math.abs(b) < 0.01) {
            if (
Math.abs(g) < 0.1 && Math.abs(c) < 0.1 && Math.abs(b) < 0.1 && Math.abs(3) < 0.1) {
                
this.set(1000);
                return 
this
            
}
            
Math.PI;
            
= (1) / 2;
            
= (1) / 2;
            
= (1) / 2;
            
= (g) / 4;
            
= (c) / 4;
            
= (b) / 4;
            if (
&& j)
                if (
0.01) {
                    
0;
                    
0.707106781
                
} else {
                    
Math.sqrt(e);
                    
b;
                    
b
                
} else if (>
                
j)
                if (
0.01) {
                    
0.707106781;
                    
0;
                    
0.707106781
                
} else {
                    
Math.sqrt(h);
                    
c;
                    
c
                
} else if (0.01) {
                
0.707106781;
                
0
            
} else {
                
Math.sqrt(j);
                
d;
                
d
            
}
            
this.set(bcda);
            return 
this
        
}
        
Math.sqrt((i) * (i) + (c) * (c) + (d) * (d));
        
Math.abs(a) < 0.0010 && (1);
        
this.= (i) / a;
        
this.= (c) / a;
        
this.= (d) / a;
        
this.Math.acos((1) / 2);
        return 
this
    
}
};
THREE.EventTarget = function() {
    var 
= {};
    
this.addEventListener = function(bc) {
        
a[b] === void 0 && (a[b] = []);
        
a[b].indexOf(c) === -&& a[b].push(c)
    };
    
this.dispatchEvent = function(b) {
        for (var 
c in a[b.type]) a[b.type][c](b)
    };
    
this.removeEventListener = function(bc) {
        var 
a[b].indexOf(c);
        
!== -&& a[b].splice(d1)
    }
};
THREE.Frustum = function() {
    
this.planes = [new THREE.Vector4, new THREE.Vector4, new THREE.Vector4, new THREE.Vector4, new THREE.Vector4, new THREE.Vector4]
};
THREE.Frustum.prototype.setFromMatrix = function(a) {
    var 
this.planes,
        
a.elements,
        
c[0],
        
c[1],
        
c[2],
        
c[3],
        
c[4],
        
c[5],
        
c[6],
        
c[7],
        
c[8],
        
c[9],
        
c[10],
        
c[11],
        
c[12],
        
c[13],
        
c[14],
        
c[15];
    
b[0].set(aglr);
    
b[1].set(aglr);
    
b[2].set(dhmo);
    
b[3].set(dhmo);
    
b[4].set(einq);
    
b[5].set(einq);
    for (
06d++) {
        
b[d];
        
a.divideScalar(Math.sqrt(a.a.a.a.a.a.z))
    }
};
THREE.Frustum.prototype.contains = function(a) {
    for (var 
0this.planesa.matrixWorldb.elements= -a.geometry.boundingSphere.radius b.getMaxScaleOnAxis(), 06e++) {
        
c[e].d[12] + c[e].d[13] + c[e].d[14] + c[e].w;
        if (
<= a) return false
    
}
    return 
true
};
THREE.Frustum.__v1 = new THREE.Vector3;
THREE.Ray = function(abcd) {
    
this.origin || new THREE.Vector3;
    
this.direction || new THREE.Vector3;
    
this.near || 0;
    
this.far || Infinity;
    var 
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= function(ab) {
            return 
a.distance b.distance
        
},
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
swt= function(abc) {
            
r.sub(ca);
            
r.dot(b);
            
o.add(aq.copy(b).multiplyScalar(s));
            return 
c.distanceTo(w)
        },
        
xCDzuGJM= function(abcd) {
            
r.sub(db);
            
o.sub(cb);
            
q.sub(ab);
            
r.dot(r);
            
r.dot(o);
            
r.dot(q);
            
o.dot(o);
            
o.dot(q);
            
/ (C);
            
= (u) * G;
            
= (D) * G;
            return 
>= && >= && 1
        
},
        
1.0E-4;
    
this.setPrecision = function(a) {
        
a
    
};
    
this.intersectObject = function(ab) {
        var 
c= [];
        if (
=== true)
            for (var 
0a.children.lengthro++) Array.prototype.push.apply(dthis.intersectObject(a.children[o], b));
        if (
instanceof THREE.Particle) {
            
v(this.originthis.directiona.matrixWorld.getPosition());
            if (
a.scale.x) return [];
            
= {
                
distancet,
                
pointa.position,
                
facenull,
                
objecta
            
};
            
d.push(c)
        } else if (
instanceof THREE.Mesh) {
            
THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(), a.matrixWorld.getColumnY().length(), a.matrixWorld.getColumnZ().length());
            
a.geometry.boundingSphere.radius Math.max(o.xMath.max(o.yo.z));
            
v(this.originthis.directiona.matrixWorld.getPosition());
            if (
o) return d;
            var 
qsa.geometry,
                
u.vertices,
                
x;
            
a.matrixRotationWorld.extractRotation(a.matrixWorld);
            
0;
            for (
u.faces.length<
                
ro++) {
                
u.faces[o];
                
i.copy(this.origin);
                
j.copy(this.direction);
                
a.matrixWorld;
                
x.multiplyVector3(l.copy(c.centroid)).subSelf(i);
                
a.matrixRotationWorld.multiplyVector3(m.copy(c.normal));
                
j.dot(m);
                if (!(
Math.abs(q) < X)) {
                    
m.dot(l) / q;
                    if (!(
0) && (a.doubleSided || (a.flipSided 0))) {
                        
n.add(ij.multiplyScalar(s));
                        
i.distanceTo(n);
                        if (!(
this.near) && !(this.far))
                            if (
instanceof THREE.Face3) {
                                
x.multiplyVector3(e.copy(w[c.a]));
                                
x.multiplyVector3(f.copy(w[c.b]));
                                
x.multiplyVector3(g.copy(w[c.c]));
                                if (
O(nefg)) {
                                    
= {
                                        
distancet,
                                        
pointn.clone(),
                                        
facec,
                                        
objecta
                                    
};
                                    
d.push(c)
                                }
                            } else if (
instanceof THREE.Face4) {
                            
x.multiplyVector3(e.copy(w[c.a]));
                            
x.multiplyVector3(f.copy(w[c.b]));
                            
x.multiplyVector3(g.copy(w[c.c]));
                            
x.multiplyVector3(h.copy(w[c.d]));
                            if (
O(nefh) || O(nfgh)) {
                                
= {
                                    
distancet,
                                    
pointn.clone(),
                                    
facec,
                                    
objecta
                                
};
                                
d.push(c)
                            }
                        }
                    }
                }
            }
        }
        
d.sort(p);
        return 
d
    
};
    
this.intersectObjects = function(ab) {
        for (var 
= [], 0a.lengthed++) Array.prototype.push.apply(cthis.intersectObject(a[d], b));
        
c.sort(p);
        return 
c
    
}
};
THREE.Rectangle = function() {
    function 
a() {
        
b;
        
c
    
}
    var 
0,
        
0,
        
0,
        
0,
        
0,
        
0,
        
true;
    
this.getX = function() {
        return 
b
    
};
    
this.getY = function() {
        return 
c
    
};
    
this.getWidth = function() {
        return 
f
    
};
    
this.getHeight = function() {
        return 
g
    
};
    
this.getLeft = function() {
        return 
b
    
};
    
this.getTop = function() {
        return 
c
    
};
    
this.getRight = function() {
        return 
d
    
};
    
this.getBottom = function() {
        return 
e
    
};
    
this.set = function(fglm) {
        
false;
        
f;
        
g;
        
l;
        
m;
        
a()
    };
    
this.addPoint = function(fg) {
        if (
=== true) {
            
false;
            
f;
            
g;
            
f;
            
g
        
} else {
            
f;
            
:
                
g;
            
f;
            
g
        
}
        
a()
    };
    
this.add3Points = function(fglmnp) {
        if (
=== true) {
            
false;
            
n;
            
p;
            
n;
            
p
        
} else {
            
b;
            
c;
            
d;
            
e
        
}
        
a()
    };
    
this.addRectangle = function(f) {
        if (
=== true) {
            
false;
            
f.getLeft();
            
f.getTop();
            
f.getRight();
            
f.getBottom()
        } else {
            
f.getLeft() ? f.getLeft();
            
f.getTop() ? f.getTop();
            
f.getRight() ? f.getRight();
            
f.getBottom() ? f.getBottom()
        }
        
a()
    };
    
this.inflate = function(f) {
        
f;
        
f;
        
f;
        
f;
        
a()
    };
    
this.minSelf = function(f) {
        
f.getLeft() ? f.getLeft();
        
f.getTop() ? f.getTop();
        
f.getRight() ? f.getRight();
        
f.getBottom() ? f.getBottom();
        
a()
    };
    
this.intersects = function(a) {
        return 
a.getLeft() || a.getRight() || a.getTop() || a.getBottom() ? false true
    
};
    
this.empty = function() {
        
true;
        
0;
        
a()
    };
    
this.isEmpty = function() {
        return 
h
    
}
};
THREE.Math = {
    
clamp: function(abc) {
        return 
a
    
},
    
clampBottom: function(ab) {
        return 
a
    
},
    
mapLinear: function(abcde) {
        return 
+ (b) * (d) / (b)
    },
    
random16: function() {
        return (
65280 Math.random() + 255 Math.random()) / 65535
    
},
    
randInt: function(ab) {
        return 
Math.floor(Math.random() * (1))
    },
    
randFloat: function(ab) {
        return 
Math.random() * (a)
    },
    
randFloatSpread: function(a) {
        return 
* (0.5 Math.random())
    },
    
sign: function(a) {
        return 
? -0
    
}
};
THREE.Matrix3 = function() {
    
this.elements = new Float32Array(9)
};
THREE.Matrix3.prototype = {
    
constructorTHREE.Matrix3,
    
getInverse: function(a) {
        var 
a.elements,
            
b[10] * b[5] - b[6] * b[9],
            
= -b[10] * b[1] + b[2] * b[9],
            
b[6] * b[1] - b[2] * b[5],
            
= -b[10] * b[4] + b[6] * b[8],
            
b[10] * b[0] - b[2] * b[8],
            
= -b[6] * b[0] + b[2] * b[4],
            
b[9] * b[4] - b[5] * b[8],
            
= -b[9] * b[0] + b[1] * b[8],
            
b[5] * b[0] - b[1] * b[4],
            
b[0] * b[1] * b[2] * h;
        
=== 0;
        var 
b,
            
this.elements;
        
l[0] = a;
        
l[1] = c;
        
l[2] = d;
        
l[3] = e;
        
l[4] = f;
        
l[5] = g;
        
l[6] = h;
        
l[7] = i;
        
l[8] = j;
        return 
this
    
},
    
transpose: function() {
        var 
athis.elements;
        
b[1];
        
b[1] = b[3];
        
b[3] = a;
        
b[2];
        
b[2] = b[6];
        
b[6] = a;
        
b[5];
        
b[5] = b[7];
        
b[7] = a;
        return 
this
    
},
    
transposeIntoArray: function(a) {
        var 
this.m;
        
a[0] = b[0];
        
a[1] = b[3];
        
a[2] = b[6];
        
a[3] = b[1];
        
a[4] = b[4];
        
a[5] = b[7];
        
a[6] = b[2];
        
a[7] = b[5];
        
a[8] = b[8];
        return 
this
    
}
};
THREE.Matrix4 = function(abcdefghijlmnpro) {
    
this.elements = new Float32Array(16);
    
this.set(!== void 0 1|| 0|| 0|| 0|| 0!== void 0 1|| 0|| 0|| 0|| 0!== void 0 1|| 0|| 0|| 0|| 0!== void 0 1)
};
THREE.Matrix4.prototype = {
    
constructorTHREE.Matrix4,
    
set: function(abcdefghijlmnpro) {
        var 
this.elements;
        
q[0] = a;
        
q[4] = b;
        
q[8] = c;
        
q[12] = d;
        
q[1] = e;
        
q[5] = f;
        
q[9] = g;
        
q[13] = h;
        
q[2] = i;
        
q[6] = j;
        
q[10] = l;
        
q[14] = m;
        
q[3] = n;
        
q[7] = p;
        
q[11] = r;
        
q[15] = o;
        return 
this
    
},
    
identity: function() {
        
this.set(1000010000100001);
        return 
this
    
},
    
copy: function(a) {
        
a.elements;
        
this.set(a[0], a[4], a[8], a[12], a[1], a[5], a[9], a[13], a[2], a[6], a[10], a[14], a[3], a[7], a[11], a[15]);
        return 
this
    
},
    
lookAt: function(abc) {
        var 
this.elements,
            
THREE.Matrix4.__v1,
            
THREE.Matrix4.__v2,
            
THREE.Matrix4.__v3;
        
g.sub(ab).normalize();
        if (
g.length() === 0g.1;
        
e.cross(cg).normalize();
        if (
e.length() === 0) {
            
g.g.1.0E-4;
            
e.cross(cg).normalize()
        }
        
f.cross(ge);
        
d[0] = e.x;
        
d[4] = f.x;
        
d[8] = g.x;
        
d[1] = e.y;
        
d[5] = f.y;
        
d[9] = g.y;
        
d[2] = e.z;
        
d[6] = f.z;
        
d[10] = g.z;
        return 
this
    
},
    
multiply: function(ab) {
        var 
a.elements,
            
b.elements,
            
this.elements,
            
c[0],
            
c[4],
            
c[8],
            
c[12],
            
c[1],
            
c[5],
            
c[9],
            
c[13],
            
c[2],
            
c[6],
            
c[10],
            
c[14],
            
c[3],
            
c[7],
            
c[11],
            
c[15],
            
d[0],
            
d[4],
            
d[8],
            
d[12],
            
d[1],
            
d[5],
            
d[9],
            
d[13],
            
d[2],
            
d[6],
            
d[10],
            
d[14],
            
d[3],
            
d[7],
            
d[11],
            
d[15];
        
e[0] = F;
        
e[4] = Q;
        
e[8] = E;
        
e[12] = d;
        
e[1] = F;
        
e[5] = Q;
        
e[9] = E;
        
e[13] = d;
        
e[2] = F;
        
e[6] = Q;
        
e[10] = E;
        
e[14] = d;
        
e[3] = F;
        
e[7] = Q;
        
e[11] = E;
        
e[15] = d;
        return 
this
    
},
    
multiplySelf: function(a) {
        return 
this.multiply(this,
            
a)
    },
    
multiplyToArray: function(abc) {
        var 
this.elements;
        
this.multiply(ab);
        
c[0] = d[0];
        
c[1] = d[1];
        
c[2] = d[2];
        
c[3] = d[3];
        
c[4] = d[4];
        
c[5] = d[5];
        
c[6] = d[6];
        
c[7] = d[7];
        
c[8] = d[8];
        
c[9] = d[9];
        
c[10] = d[10];
        
c[11] = d[11];
        
c[12] = d[12];
        
c[13] = d[13];
        
c[14] = d[14];
        
c[15] = d[15];
        return 
this
    
},
    
multiplyScalar: function(a) {
        var 
this.elements;
        
b[0] = b[0] * a;
        
b[4] = b[4] * a;
        
b[8] = b[8] * a;
        
b[12] = b[12] * a;
        
b[1] = b[1] * a;
        
b[5] = b[5] * a;
        
b[9] = b[9] * a;
        
b[13] = b[13] * a;
        
b[2] = b[2] * a;
        
b[6] = b[6] * a;
        
b[10] = b[10] * a;
        
b[14] = b[14] * a;
        
b[3] = b[3] * a;
        
b[7] = b[7] * a;
        
b[11] = b[11] * a;
        
b[15] =
            
b[15] * a;
        return 
this
    
},
    
multiplyVector3: function(a) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z,
            
/ (b[3] * b[7] * b[11] * b[15]);
        
a.= (b[0] * b[4] * b[8] * b[12]) * f;
        
a.= (b[1] * b[5] * b[9] * b[13]) * f;
        
a.= (b[2] * b[6] * b[10] * b[14]) * f;
        return 
a
    
},
    
multiplyVector4: function(a) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z,
            
a.w;
        
a.b[0] * b[4] * b[8] * b[12] * f;
        
a.b[1] * b[5] * b[9] * b[13] * f;
        
a.b[2] * b[6] * b[10] * b[14] * f;
        
a.b[3] * b[7] * b[11] * b[15] * f;
        return 
a
    
},
    
multiplyVector3Array: function(a) {
        for (var 
THREE.Matrix4.__v1,
                
0a.lengthd3) {
            
b.a[c];
            
b.a[1];
            
b.a[2];
            
this.multiplyVector3(b);
            
a[c] = b.x;
            
a[1] = b.y;
            
a[2] = b.z
        
}
        return 
a
    
},
    
rotateAxis: function(a) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z;
        
a.b[0] + b[4] + b[8];
        
a.b[1] + b[5] + b[9];
        
a.b[2] + b[6] + b[10];
        
a.normalize();
        return 
a
    
},
    
crossVector: function(a) {
        var 
this.elements,
            
= new THREE.Vector4;
        
c.b[0] * a.b[4] * a.b[8] * a.b[12] * a.w;
        
c.b[1] * a.b[5] * a.b[9] * a.b[13] * a.w;
        
c.b[2] * a.b[6] * a.b[10] * a.b[14] * a.w;
        
c.a.b[3] * a.b[7] * a.b[11] *
            
a.b[15] * a.1;
        return 
c
    
},
    
determinant: function() {
        var 
this.elements,
            
a[0],
            
a[4],
            
a[8],
            
a[12],
            
a[1],
            
a[5],
            
a[9],
            
a[13],
            
a[2],
            
a[6],
            
a[10],
            
a[14],
            
a[3],
            
a[7],
            
a[11],
            
a[15];
        return 
a
    
},
    
transpose: function() {
        var 
this.elements,
            
b;
        
a[1];
        
a[1] = a[4];
        
a[4] = b;
        
a[2];
        
a[2] = a[8];
        
a[8] = b;
        
a[6];
        
a[6] = a[9];
        
a[9] = b;
        
a[3];
        
a[3] = a[12];
        
a[12] = b;
        
a[7];
        
a[7] = a[13];
        
a[13] = b;
        
a[11];
        
a[11] = a[14];
        
a[14] = b;
        return 
this
    
},
    
flattenToArray: function(a) {
        var 
this.elements;
        
a[0] = b[0];
        
a[1] = b[1];
        
a[2] = b[2];
        
a[3] = b[3];
        
a[4] = b[4];
        
a[5] = b[5];
        
a[6] = b[6];
        
a[7] = b[7];
        
a[8] = b[8];
        
a[9] = b[9];
        
a[10] = b[10];
        
a[11] = b[11];
        
a[12] = b[12];
        
a[13] = b[13];
        
a[14] = b[14];
        
a[15] = b[15];
        return 
a
    
},
    
flattenToArrayOffset: function(ab) {
        var 
this.elements;
        
a[b] = c[0];
        
a[1] = c[1];
        
a[2] = c[2];
        
a[3] = c[3];
        
a[4] = c[4];
        
a[5] = c[5];
        
a[6] = c[6];
        
a[7] = c[7];
        
a[8] = c[8];
        
a[9] = c[9];
        
a[10] =
            
c[10];
        
a[11] = c[11];
        
a[12] = c[12];
        
a[13] = c[13];
        
a[14] = c[14];
        
a[15] = c[15];
        return 
a
    
},
    
getPosition: function() {
        var 
this.elements;
        return 
THREE.Matrix4.__v1.set(a[12], a[13], a[14])
    },
    
setPosition: function(a) {
        var 
this.elements;
        
b[12] = a.x;
        
b[13] = a.y;
        
b[14] = a.z;
        return 
this
    
},
    
getColumnX: function() {
        var 
this.elements;
        return 
THREE.Matrix4.__v1.set(a[0], a[1], a[2])
    },
    
getColumnY: function() {
        var 
this.elements;
        return 
THREE.Matrix4.__v1.set(a[4], a[5], a[6])
    },
    
getColumnZ: function() {
        var 
this.elements;
        return 
THREE.Matrix4.__v1.set(a[8],
            
a[9], a[10])
    },
    
getInverse: function(a) {
        var 
this.elements,
            
a.elements,
            
c[0],
            
c[4],
            
c[8],
            
c[12],
            
c[1],
            
c[5],
            
c[9],
            
c[13],
            
c[2],
            
c[6],
            
c[10],
            
c[14],
            
c[3],
            
c[7],
            
c[11],
            
c[15];
        
b[0] = c;
        
b[4] = c;
        
b[8] = c;
        
b[12] = r;
        
b[1] = c;
        
b[5] = c;
        
b[9] = c;
        
b[13] = *
            
r;
        
b[2] = c;
        
b[6] = c;
        
b[10] = c;
        
b[14] = r;
        
b[3] = s;
        
b[7] = s;
        
b[11] = s;
        
b[15] = p;
        
this.multiplyScalar(a.determinant());
        return 
this
    
},
    
setRotationFromEuler: function(ab) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z,
            
Math.cos(d),
            
Math.sin(d),
            
Math.cos(e),
            
Math.sin(e),
            
Math.cos(f),
            
Math.sin(f);
        if (
=== void 0 || === "XYZ") {
            var 
i,
                
f,
                
i,
                
f;
            
c[0] = i;
            
c[4] = -f;
            
c[8] = e;
            
c[1] = e;
            
c[5] = e;
            
c[9] = -h;
            
c[2] = e;
            
c[6] = e;
            
c[10] = h
        
} else if (=== "YXZ") {
            
i;
            
f;
            
i;
            
f;
            
c[0] = d;
            
c[4] = l;
            
c[8] = e;
            
c[1] = f;
            
c[5] = i;
            
c[9] = -d;
            
c[2] = m;
            
c[6] = d;
            
c[10] = h
        
} else if (=== "ZXY") {
            
i;
            
f;
            
i;
            
f;
            
c[0] = d;
            
c[4] = -f;
            
c[8] = d;
            
c[1] = d;
            
c[5] = i;
            
c[9] = d;
            
c[2] = -e;
            
c[6] = d;
            
c[10] = h
        
} else if (=== "ZYX") {
            
i;
            
f;
            
i;
            
f;
            
c[0] = i;
            
c[4] = l;
            
c[8] = n;
            
c[1] = f;
            
c[5] = j;
            
c[9] = m;
            
c[2] = -e;
            
c[6] = h;
            
c[10] = h
        
} else if (=== "YZX") {
            
h;
            
e;
            
h;
            
e;
            
c[0] = i;
            
c[4] = f;
            
c[8] = l;
            
c[1] = f;
            
c[5] = i;
            
c[9] = -i;
            
c[2] = -i;
            
c[6] = m;
            
c[10] = f
        
} else if (=== "XZY") {
            
h;
            
e;
            
h;
            
e;
            
c[0] = i;
            
c[4] = -f;
            
c[8] = i;
            
c[1] = n;
            
c[5] = i;
            
c[9] = m;
            
c[2] = l;
            
c[6] = i;
            
c[10] = j
        
}
        return 
this
    
},
    
setRotationFromQuaternion: function(a) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z,
            
a.w,
            
c,
            
d,
            
e,
            
g,
            
h,
            
i,
            
h,
            
*
            
i,
            
i,
            
g,
            
h,
            
i;
        
b[0] = - (e);
        
b[4] = f;
        
b[8] = h;
        
b[1] = f;
        
b[5] = - (e);
        
b[9] = g;
        
b[2] = h;
        
b[6] = g;
        
b[10] = - (l);
        return 
this
    
},
    
compose: function(abc) {
        var 
this.elements,
            
THREE.Matrix4.__m1,
            
THREE.Matrix4.__m2;
        
e.identity();
        
e.setRotationFromQuaternion(b);
        
f.makeScale(c.xc.yc.z);
        
this.multiply(ef);
        
d[12] = a.x;
        
d[13] = a.y;
        
d[14] = a.z;
        return 
this
    
},
    
decompose: function(abc) {
        var 
this.elements,
            
THREE.Matrix4.__v1,
            
THREE.Matrix4.__v2,
            
THREE.Matrix4.__v3;
        
e.set(d[0], d[1], d[2]);
        
f.set(d[4], d[5], d[6]);
        
g.set(d[8], d[9], d[10]);
        
instanceof THREE.Vector3 : new THREE.Vector3;
        
instanceof THREE.Quaternion : new THREE.Quaternion;
        
instanceof THREE.Vector3 : new THREE.Vector3;
        
c.e.length();
        
c.f.length();
        
c.g.length();
        
a.d[12];
        
a.d[13];
        
a.d[14];
        
THREE.Matrix4.__m1;
        
d.copy(this);
        
d.elements[0] = d.elements[0] / c.x;
        
d.elements[1] = d.elements[1] / c.x;
        
d.elements[2] = d.elements[2] / c.x;
        
d.elements[4] = d.elements[4] / c.y;
        
d.elements[5] = d.elements[5] / c.y;
        
d.elements[6] = d.elements[6] / c.y;
        
d.elements[8] = d.elements[8] /
            
c.z;
        
d.elements[9] = d.elements[9] / c.z;
        
d.elements[10] = d.elements[10] / c.z;
        
b.setFromRotationMatrix(d);
        return [
abc]
    },
    
extractPosition: function(a) {
        var 
this.elements,
            
a.elements;
        
b[12] = a[12];
        
b[13] = a[13];
        
b[14] = a[14];
        return 
this
    
},
    
extractRotation: function(a) {
        var 
this.elements,
            
a.elements,
            
THREE.Matrix4.__v1,
            
c.set(a[0], a[1], a[2]).length(),
            
c.set(a[4], a[5], a[6]).length(),
            
c.set(a[8], a[9], a[10]).length();
        
b[0] = a[0] * d;
        
b[1] = a[1] * d;
        
b[2] = a[2] * d;
        
b[4] = a[4] * e;
        
b[5] = a[5] * e;
        
b[6] = a[6] * e;
        
b[8] = a[8] * c;
        
b[9] = a[9] *
            
c;
        
b[10] = a[10] * c;
        return 
this
    
},
    
translate: function(a) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z;
        
b[12] = b[0] * b[4] * b[8] * b[12];
        
b[13] = b[1] * b[5] * b[9] * b[13];
        
b[14] = b[2] * b[6] * b[10] * b[14];
        
b[15] = b[3] * b[7] * b[11] * b[15];
        return 
this
    
},
    
rotateX: function(a) {
        var 
this.elements,
            
b[4],
            
b[5],
            
b[6],
            
b[7],
            
b[8],
            
b[9],
            
b[10],
            
b[11],
            
Math.cos(a),
            
Math.sin(a);
        
b[4] = g;
        
b[5] = h;
        
b[6] = i;
        
b[7] = j;
        
b[8] = c;
        
b[9] = d;
        
b[10] = e;
        
b[11] = f;
        return 
this
    
},
    
rotateY: function(a) {
        var 
=
            
this.elements,
            
b[0],
            
b[1],
            
b[2],
            
b[3],
            
b[8],
            
b[9],
            
b[10],
            
b[11],
            
Math.cos(a),
            
Math.sin(a);
        
b[0] = g;
        
b[1] = h;
        
b[2] = i;
        
b[3] = j;
        
b[8] = c;
        
b[9] = d;
        
b[10] = e;
        
b[11] = f;
        return 
this
    
},
    
rotateZ: function(a) {
        var 
this.elements,
            
b[0],
            
b[1],
            
b[2],
            
b[3],
            
b[4],
            
b[5],
            
b[6],
            
b[7],
            
Math.cos(a),
            
Math.sin(a);
        
b[0] = g;
        
b[1] = h;
        
b[2] = i;
        
b[3] = j;
        
b[4] = c;
        
b[5] = d;
        
b[6] = e;
        
b[7] = f;
        return 
this
    
},
    
rotateByAxis: function(ab) {
        var 
this.elements;
        if (
a.=== && a.=== && a.=== 0) return this.rotateX(b);
        if (
a.=== && a.=== && a.=== 0) return this.rotateY(b);
        if (
a.=== && a.=== && a.=== 1) return this.rotateZ(b);
        var 
a.x,
            
a.y,
            
a.z,
            
Math.sqrt(f),
            
g,
            
g,
            
g,
            
d,
            
e,
            
f,
            
Math.cos(b),
            
Math.sin(b),
            
j,
            
m,
            
m,
            
m,
            
l,
            
l,
            
l,
            
+ (g) * j,
            
l,
            
r,
            
l,
            
+ (h) * j,
            
d,
            
r,
            
d,
            
+ (i) * j,
            
c[0],
            
c[1],
            
c[2],
            
c[3],
            
c[4],
            
c[5],
            
c[6],
            
c[7],
            
c[8],
            
c[9],
            
c[10],
            
c[11];
        
c[0] = v;
        
c[1] = *
            
x;
        
c[2] = C;
        
c[3] = D;
        
c[4] = v;
        
c[5] = x;
        
c[6] = C;
        
c[7] = D;
        
c[8] = v;
        
c[9] = x;
        
c[10] = C;
        
c[11] = D;
        return 
this
    
},
    
scale: function(a) {
        var 
this.elements,
            
a.x,
            
a.y,
            
a.z;
        
b[0] = b[0] * c;
        
b[4] = b[4] * d;
        
b[8] = b[8] * a;
        
b[1] = b[1] * c;
        
b[5] = b[5] * d;
        
b[9] = b[9] * a;
        
b[2] = b[2] * c;
        
b[6] = b[6] * d;
        
b[10] = b[10] * a;
        
b[3] = b[3] * c;
        
b[7] = b[7] * d;
        
b[11] = b[11] * a;
        return 
this
    
},
    
getMaxScaleOnAxis: function() {
        var 
this.elements;
        return 
Math.sqrt(Math.max(a[0] * a[0] + a[1] * a[1] +
            
a[2] * a[2], Math.max(a[4] * a[4] + a[5] * a[5] + a[6] * a[6], a[8] * a[8] + a[9] * a[9] + a[10] * a[10])))
    },
    
makeTranslation: function(abc) {
        
this.set(100a010b001c0001);
        return 
this
    
},
    
makeRotationX: function(a) {
        var 
Math.cos(a),
            
Math.sin(a);
        
this.set(10000b, -a00ab00001);
        return 
this
    
},
    
makeRotationY: function(a) {
        var 
Math.cos(a),
            
Math.sin(a);
        
this.set(b0a00100, -a0b00001);
        return 
this
    
},
    
makeRotationZ: function(a) {
        var 
Math.cos(a),
            
Math.sin(a);
        
this.set(b, -a00ab0000100001);
        return 
this
    
},
    
makeRotationAxis: function(ab) {
        var 
Math.cos(b),
            
Math.sin(b),
            
c,
            
a.x,
            
a.y,
            
a.z,
            
f,
            
g;
        
this.set(chg0hcf0gfc00001);
        return 
this
    
},
    
makeScale: function(abc) {
        
this.set(a0000b0000c00001);
        return 
this
    
},
    
makeFrustum: function(abcdef) {
        var 
this.elements;
        
g[0] = / (a);
        
g[4] = 0;
        
g[8] = (a) / (a);
        
g[12] = 0;
        
g[1] = 0;
        
g[5] = / (c);
        
g[9] = (c) / (c);
        
g[13] = 0;
        
g[2] = 0;
        
g[6] = 0;
        
g[10] = -(e) / (e);
        
g[14] = -/ (e);
        
g[3] =
            
0;
        
g[7] = 0;
        
g[11] = -1;
        
g[15] = 0;
        return 
this
    
},
    
makePerspective: function(abcd) {
        var 
Math.tan(Math.PI 360),
            
= -a;
        return 
this.makeFrustum(bbeacd)
    },
    
makeOrthographic: function(abcdef) {
        var 
this.elements,
            
a,
            
d,
            
e;
        
g[0] = h;
        
g[4] = 0;
        
g[8] = 0;
        
g[12] = -((a) / h);
        
g[1] = 0;
        
g[5] = i;
        
g[9] = 0;
        
g[13] = -((d) / i);
        
g[2] = 0;
        
g[6] = 0;
        
g[10] = -j;
        
g[14] = -((e) / j);
        
g[3] = 0;
        
g[7] = 0;
        
g[11] = 0;
        
g[15] = 1;
        return 
this
    
},
    clone: function() {
        var 
this.elements;
        return new 
THREE.Matrix4(a[0], a[4], a[8], a[12], a[1], a[5], a[9], a[13], a[2],
            
a[6], a[10], a[14], a[3], a[7], a[11], a[15])
    }
};
THREE.Matrix4.__v1 = new THREE.Vector3;
THREE.Matrix4.__v2 = new THREE.Vector3;
THREE.Matrix4.__v3 = new THREE.Vector3;
THREE.Matrix4.__m1 = new THREE.Matrix4;
THREE.Matrix4.__m2 = new THREE.Matrix4;
THREE.Object3D = function() {
    
this.id THREE.Object3DCount++;
    
this.name "";
    
this.parent void 0;
    
this.children = [];
    
this.up = new THREE.Vector3(010);
    
this.position = new THREE.Vector3;
    
this.rotation = new THREE.Vector3;
    
this.eulerOrder "XYZ";
    
this.scale = new THREE.Vector3(111);
    
this.flipSided this.doubleSided false;
    
this.renderDepth null;
    
this.rotationAutoUpdate true;
    
this.matrix = new THREE.Matrix4;
    
this.matrixWorld = new THREE.Matrix4;
    
this.matrixRotationWorld = new THREE.Matrix4;
    
this.matrixWorldNeedsUpdate this.matrixAutoUpdate =
        
true;
    
this.quaternion = new THREE.Quaternion;
    
this.useQuaternion false;
    
this.boundRadius 0;
    
this.boundRadiusScale 1;
    
this.visible true;
    
this.receiveShadow this.castShadow false;
    
this.frustumCulled true;
    
this._vector = new THREE.Vector3
};
THREE.Object3D.prototype = {
    
constructorTHREE.Object3D,
    
applyMatrix: function(a) {
        
this.matrix.multiply(athis.matrix);
        
this.scale.getScaleFromMatrix(this.matrix);
        
this.rotation.setEulerFromRotationMatrix((new THREE.Matrix4).extractRotation(this.matrix), this.eulerOrder);
        
this.position.getPositionFromMatrix(this.matrix)
    },
    
translate: function(ab) {
        
this.matrix.rotateAxis(b);
        
this.position.addSelf(b.multiplyScalar(a))
    },
    
translateX: function(a) {
        
this.translate(athis._vector.set(100))
    },
    
translateY: function(a) {
        
this.translate(a,
            
this._vector.set(010))
    },
    
translateZ: function(a) {
        
this.translate(athis._vector.set(001))
    },
    
lookAt: function(a) {
        
this.matrix.lookAt(athis.positionthis.up);
        
this.rotationAutoUpdate && this.rotation.setEulerFromRotationMatrix(this.matrixthis.eulerOrder)
    },
    
add: function(a) {
        if (
=== thisconsole.warn("THREE.Object3D.add: An object can't be added as a child of itself.");
        else if (
instanceof THREE.Object3D) {
            
a.parent !== void 0 && a.parent.remove(a);
            
a.parent this;
            
this.children.push(a);
            for (var 
thisb.parent !== void 0;) =
                
b.parent;
            
!== void 0 && instanceof THREE.Scene && b.__addObject(a)
        }
    },
    
remove: function(a) {
        var 
this.children.indexOf(a);
        if (
!== -1) {
            
a.parent void 0;
            
this.children.splice(b1);
            for (
thisb.parent !== void 0;) b.parent;
            
!== void 0 && instanceof THREE.Scene && b.__removeObject(a)
        }
    },
    
getChildByName: function(ab) {
        var 
cde;
        
0;
        for (
this.children.lengthdc++) {
            
this.children[c];
            if (
e.name === a) return e;
            if (
b) {
                
e.getChildByName(ab);
                if (
!== void 0) return e
            
}
        }
    },
    
updateMatrix: function() {
        
this.matrix.setPosition(this.position);
        
this.useQuaternion === true this.matrix.setRotationFromQuaternion(this.quaternion) : this.matrix.setRotationFromEuler(this.rotationthis.eulerOrder);
        if (
this.scale.!== || this.scale.!== || this.scale.!== 1) {
            
this.matrix.scale(this.scale);
            
this.boundRadiusScale Math.max(this.scale.xMath.max(this.scale.ythis.scale.z))
        }
        
this.matrixWorldNeedsUpdate true
    
},
    
updateMatrixWorld: function(a) {
        
this.matrixAutoUpdate === true && this.updateMatrix();
        if (
this.matrixWorldNeedsUpdate === true || === true) {
            
this.parent !== void 0 this.matrixWorld.multiply(this.parent.matrixWorld,
                
this.matrix) : this.matrixWorld.copy(this.matrix);
            
this.matrixWorldNeedsUpdate false;
            
true
        
}
        for (var 
0this.children.lengthcb++) this.children[b].updateMatrixWorld(a)
    },
    
worldToLocal: function(a) {
        return 
THREE.Object3D.__m1.getInverse(this.matrixWorld).multiplyVector3(a)
    },
    
localToWorld: function(a) {
        return 
this.matrixWorld.multiplyVector3(a)
    }
};
THREE.Object3D.__m1 = new THREE.Matrix4;
THREE.Object3DCount 0;
THREE.Projector = function() {
    function 
a(ac) {
        
0;
        
C.objects.length 0;
        
C.sprites.length 0;
        
C.lights.length 0;
        var 
= function(a) {
            if (
a.visible !== false) {
                if ((
instanceof THREE.Mesh || instanceof THREE.Line) && (a.frustumCulled === false || J.contains(a) === true)) {
                    
D.copy(a.matrixWorld.getPosition());
                    
u.multiplyVector3(D);
                    
b();
                    
f.object a;
                    
f.D.z;
                    
C.objects.push(f)
                } else if (
instanceof THREE.Sprite || instanceof THREE.Particle) {
                    
D.copy(a.matrixWorld.getPosition());
                    
u.multiplyVector3(D);
                    
b();
                    
f.object a;
                    
f.D.z;
                    
C.sprites.push(f)
                } else 
instanceof
                
THREE.Light && C.lights.push(a);
                for (var 
0a.children.lengthdc++) e(a.children[c])
            }
        };
        
e(a);
        
=== true && C.objects.sort(d);
        return 
C
    
}

    function 
b() {
        var 
a;
        if (
=== h.length) {
            
= new THREE.RenderableObject;
            
h.push(a)
        } else 
h[g];
        
g++;
        return 
a
    
}

    function 
c() {
        var 
a;
        if (
=== l.length) {
            
= new THREE.RenderableVertex;
            
l.push(a)
        } else 
l[j];
        
j++;
        return 
a
    
}

    function 
d(ab) {
        return 
b.a.z
    
}

    function 
e(ab) {
        var 
0,
            
1,
            
a.a.w,
            
b.b.w,
            
= -a.a.w,
            
= -b.b.w;
        if (
>= && >= && >= && >= 0) return true;
        if (
&& || && 0) return false;
        
Math.max(c/ (e)) : && (Math.min(d/ (e)));
        
Math.max(c/ (h)) : && (Math.min(d/ (h)));
        if (
c) return false;
        
a.lerpSelf(bc);
        
b.lerpSelf(ad);
        return 
true
    
}
    var 
fg= [],
        
ij= [],
        
mn= [],
        
r= [],
        
qs= [],
        
tv= [],
        
= {
            
objects: [],
            
sprites: [],
            
lights: [],
            
elements: []
        },
        
= new THREE.Vector3,
        
= new THREE.Vector4,
        
= new THREE.Matrix4,
        
= new THREE.Matrix4,
        
= new THREE.Frustum,
        
= new THREE.Vector4,
        
= new THREE.Vector4;
    
this.projectVector = function(ab) {
        
b.matrixWorldInverse.getInverse(b.matrixWorld);
        
u.multiply(b.projectionMatrix,
            
b.matrixWorldInverse);
        
u.multiplyVector3(a);
        return 
a
    
};
    
this.unprojectVector = function(ab) {
        
b.projectionMatrixInverse.getInverse(b.projectionMatrix);
        
u.multiply(b.matrixWorldb.projectionMatrixInverse);
        
u.multiplyVector3(a);
        return 
a
    
};
    
this.pickingRay = function(ab) {
        var 
c;
        
a.= -1;
        
= new THREE.Vector3(a.xa.y1);
        
this.unprojectVector(ab);
        
this.unprojectVector(cb);
        
c.subSelf(a).normalize();
        return new 
THREE.Ray(ac)
    };
    
this.projectScene = function(bfg) {
        var 
f.near,
            
f.far,
            
false,
            
TNWbaHcaiaSRPUfamaGa,
            
na;
        
0;
        
C.elements.length 0;
        if (
f.parent === void 0) {
            
console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");
            
b.add(f)
        }
        
b.updateMatrixWorld();
        
f.matrixWorldInverse.getInverse(f.matrixWorld);
        
u.multiply(f.projectionMatrixf.matrixWorldInverse);
        
J.setFromMatrix(u);
        
a(bfalse);
        
0;
        for (
C.objects.lengthTb++) {
            
C.objects[b].object;
            
R.matrixWorld;
            
0;
            if (
instanceof THREE.Mesh) {
                
R.geometry;
                
fa R.geometry.materials;
                
ba U.vertices;
                
ma U.faces;
                
Ga U.faceVertexUvs;
                
R.matrixRotationWorld.extractRotation(P);
                
0;
                for (
ba.lengthWN++) {
                    
c();
                    
i.positionWorld.copy(ba[N]);
                    
P.multiplyVector3(i.positionWorld);
                    
i.positionScreen.copy(i.positionWorld);
                    
u.multiplyVector4(i.positionScreen);
                    
i.positionScreen.i.positionScreen.i.positionScreen.w;
                    
i.positionScreen.i.positionScreen.i.positionScreen.w;
                    
i.visible i.positionScreen.&& i.positionScreen.E
                
}
                
ba 0;
                for (
ma.lengthba Nba++) {
                    
ma[ba];
                    if (
instanceof THREE.Face3) {
                        
l[W.a];
                        
ca l[W.b];
                        
ia l[W.c];
                        if (
H.visible === true && ca.visible === true && ia.visible === true) {
                            
= (ia.positionScreen.-
                                
H.positionScreen.x) * (ca.positionScreen.H.positionScreen.y) - (ia.positionScreen.H.positionScreen.y) * (ca.positionScreen.H.positionScreen.x) < 0;
                            if (
R.doubleSided === true || !== R.flipSided) {
                                
void 0;
                                if (
=== p.length) {
                                    
= new THREE.RenderableFace3;
                                    
p.push(S)
                                } else 
p[n];
                                
n++;
                                
S;
                                
m.v1.copy(H);
                                
m.v2.copy(ca);
                                
m.v3.copy(ia)
                            } else continue
                        } else continue
                    } else if (
instanceof THREE.Face4) {
                        
l[W.a];
                        
ca l[W.b];
                        
ia l[W.c];
                        
l[W.d];
                        if (
H.visible === true && ca.visible === true && ia.visible === true && S.visible === true) {
                            
= (S.positionScreen.-
                                
H.positionScreen.x) * (ca.positionScreen.H.positionScreen.y) - (S.positionScreen.H.positionScreen.y) * (ca.positionScreen.H.positionScreen.x) < || (ca.positionScreen.ia.positionScreen.x) * (S.positionScreen.ia.positionScreen.y) - (ca.positionScreen.ia.positionScreen.y) * (S.positionScreen.ia.positionScreen.x) < 0;
                            if (
R.doubleSided === true || !== R.flipSided) {
                                
na void 0;
                                if (
=== o.length) {
                                    
na = new THREE.RenderableFace4;
                                    
o.push(na)
                                } else 
na o[r];
                                
r++;
                                
na;
                                
m.v1.copy(H);
                                
m.v2.copy(ca);
                                
m.v3.copy(ia);
                                
m.v4.copy(S)
                            } else continue
                        } else continue
                    }
                    
m.normalWorld.copy(W.normal);
                    
=== false && (R.flipSided === true || R.doubleSided === true) && m.normalWorld.negate();
                    
U.multiplyVector3(m.normalWorld);
                    
m.centroidWorld.copy(W.centroid);
                    
P.multiplyVector3(m.centroidWorld);
                    
m.centroidScreen.copy(m.centroidWorld);
                    
u.multiplyVector3(m.centroidScreen);
                    
ia W.vertexNormals;
                    
0;
                    for (
ca ia.lengthcaH++) {
                        
m.vertexNormalsWorld[H];
                        
S.copy(ia[H]);
                        
=== false && (R.flipSided === true || R.doubleSided === true) && S.negate();
                        
U.multiplyVector3(S)
                    }
                    
0;
                    for (
ca Ga.lengthcaH++) {
                        
na Ga[H][ba];
                        if (
na !== void 0) {
                            
ia 0;
                            for (
=
                                
na.lengthia Sia++) m.uvs[H][ia] = na[ia]
                        }
                    }
                    
m.material R.material;
                    
m.faceMaterial W.materialIndex !== null fa[W.materialIndex] : null;
                    
m.m.centroidScreen.z;
                    
C.elements.push(m)
                }
            } else if (
instanceof THREE.Line) {
                
G.multiply(uP);
                
ba R.geometry.vertices;
                
c();
                
H.positionScreen.copy(ba[0]);
                
G.multiplyVector4(H.positionScreen);
                
R.type === THREE.LinePieces 1;
                
1;
                for (
ba.lengthWN++) {
                    
c();
                    
H.positionScreen.copy(ba[N]);
                    
G.multiplyVector4(H.positionScreen);
                    if (!((
1) % 0)) {
                        
ca l[2];
                        
M.copy(H.positionScreen);
                        
O.copy(ca.positionScreen);
                        if (
e(MO) === true) {
                            
M.multiplyScalar(M.w);
                            
O.multiplyScalar(O.w);
                            
fa void 0;
                            if (
=== w.length) {
                                
fa = new THREE.RenderableLine;
                                
w.push(fa)
                            } else 
fa w[s];
                            
s++;
                            
fa;
                            
q.v1.positionScreen.copy(M);
                            
q.v2.positionScreen.copy(O);
                            
q.Math.max(M.zO.z);
                            
q.material R.material;
                            
C.elements.push(q)
                        }
                    }
                }
            }
        }
        
0;
        for (
C.sprites.lengthTb++) {
            
C.sprites[b].object;
            
R.matrixWorld;
            if (
instanceof THREE.Particle) {
                
z.set(P.elements[12], P.elements[13], P.elements[14], 1);
                
u.multiplyVector4(z);
                
z.z.z.w;
                if (
z.&& z.1) {
                    
void 0;
                    if (
===
                        
x.length) {
                        
= new THREE.RenderableParticle;
                        
x.push(h)
                    } else 
x[v];
                    
v++;
                    
h;
                    
t.z.z.w;
                    
t.z.z.w;
                    
t.z.z;
                    
t.rotation R.rotation.z;
                    
t.scale.R.scale.Math.abs(t.- (z.f.projectionMatrix.elements[0]) / (z.f.projectionMatrix.elements[12]));
                    
t.scale.R.scale.Math.abs(t.- (z.f.projectionMatrix.elements[5]) / (z.f.projectionMatrix.elements[13]));
                    
t.material R.material;
                    
C.elements.push(t)
                }
            }
        }
        
&& C.elements.sort(d);
        return 
C
    
}
};
THREE.Quaternion = function(abcd) {
    
this.|| 0;
    
this.|| 0;
    
this.|| 0;
    
this.!== void 0 1
};
THREE.Quaternion.prototype = {
    
constructorTHREE.Quaternion,
    
set: function(abcd) {
        
this.a;
        
this.b;
        
this.c;
        
this.d;
        return 
this
    
},
    
copy: function(a) {
        
this.a.x;
        
this.a.y;
        
this.a.z;
        
this.a.w;
        return 
this
    
},
    
setFromEuler: function(ab) {
        var 
Math.cos(a.2),
            
Math.cos(a.2),
            
Math.cos(a.2),
            
Math.sin(a.2),
            
Math.sin(a.2),
            
Math.sin(a.2);
        if (
=== void 0 || === "XYZ") {
            
this.h;
            
this.h;
            
this.e;
            
this.h
        
} else if (=== "YXZ") {
            
this.h;
            
this.h;
            
this.=
                
e;
            
this.h
        
} else if (=== "ZXY") {
            
this.h;
            
this.h;
            
this.e;
            
this.h
        
} else if (=== "ZYX") {
            
this.h;
            
this.h;
            
this.e;
            
this.h
        
} else if (=== "YZX") {
            
this.h;
            
this.h;
            
this.e;
            
this.h
        
} else if (=== "XZY") {
            
this.h;
            
this.h;
            
this.e;
            
this.h
        
}
        return 
this
    
},
    
setFromAxisAngle: function(ab) {
        var 
2,
            
Math.sin(c);
        
this.a.d;
        
this.a.*
            
d;
        
this.a.d;
        
this.Math.cos(c);
        return 
this
    
},
    
setFromRotationMatrix: function(a) {
        var 
a.elements,
            
b[0],
            
b[4],
            
b[8],
            
b[1],
            
b[5],
            
b[9],
            
b[2],
            
b[6],
            
b[10],
            
b;
        if (
0) {
            
0.5 Math.sqrt(1);
            
this.0.25 c;
            
this.= (g) * c;
            
this.= (h) * c;
            
this.= (a) * c
        
} else if (&& b) {
            
Math.sqrt(b);
            
this.= (g) / c;
            
this.0.25 c;
            
this.= (e) / c;
            
this.= (h) / c
        
} else if (b) {
            
Math.sqrt(b);
            
this.= (h) / c;
            
this.= (e) / c;
            
this.0.25 c;
            
this.= (i) / c
        
} else {
            
Math.sqrt(f);
            
this.= (a) / c;
            
this.=
                (
h) / c;
            
this.= (i) / c;
            
this.0.25 c
        
}
        return 
this
    
},
    
calculateW: function() {
        
this.= -Math.sqrt(Math.abs(this.this.this.this.this.this.z));
        return 
this
    
},
    
inverse: function() {
        
this.this.* -1;
        
this.this.* -1;
        
this.this.* -1;
        return 
this
    
},
    
length: function() {
        return 
Math.sqrt(this.this.this.this.this.this.this.this.w)
    },
    
normalize: function() {
        var 
Math.sqrt(this.this.this.this.this.this.this.this.w);
        if (
=== 0this.this.this.this.0;
        else {
            
a;
            
this.this.a;
            
this.=
                
this.a;
            
this.this.a;
            
this.this.a
        
}
        return 
this
    
},
    
multiply: function(ab) {
        
this.a.b.a.b.a.b.a.b.x;
        
this.= -a.b.a.b.a.b.a.b.y;
        
this.a.b.a.b.a.b.a.b.z;
        
this.= -a.b.a.b.a.b.a.b.w;
        return 
this
    
},
    
multiplySelf: function(a) {
        var 
this.x,
            
this.y,
            
this.z,
            
this.w,
            
a.x,
            
a.y,
            
a.z,
            
a.w;
        
this.g;
        
this.h;
        
this.f;
        
this.h;
        return 
this
    
},
    
multiplyVector3: function(ab) {
        
|| (a);
        var 
a.x,
            
a.y,
            
a.z,
            
this.x,
            
this.y,
            
this.z,
            
this.w,
            
d,
            
e,
            
c,
            
= -e;
        
b.* -* -* -g;
        
b.* -* -* -h;
        
b.* -* -* -f;
        return 
b
    
},
    
slerpSelf: function(ab) {
        var 
this.x,
            
this.y,
            
this.z,
            
this.w,
            
a.a.a.a.z;
        if (
0) {
            
this.= -a.w;
            
this.= -a.x;
            
this.= -a.y;
            
this.= -a.z;
            
= -g
        
} else this.copy(a);
        if (
>= 1) {
            
this.f;
            
this.c;
            
this.d;
            
this.e;
            return 
this
        
}
        var 
Math.acos(g),
            
Math.sqrt(g);
        if (
Math.abs(i) < 0.0010) {
            
this.0.5 * (this.w);
            
this.0.5 * (this.x);
            
this.0.5 * (this.y);
            
this.0.5 * (this.z);
            return 
this
        
}
        
Math.sin((b) * h) / i;
        
Math.sin(h) / i;
        
this.this.h;
        
this.this.h;
        
this.this.h;
        
this.this.h;
        return 
this
    
},
    clone: function() {
        return new 
THREE.Quaternion(this.xthis.ythis.zthis.w)
    }
};
THREE.Quaternion.slerp = function(abcd) {
    var 
a.b.a.b.a.b.a.b.z;
    if (
0) {
        
c.= -b.w;
        
c.= -b.x;
        
c.= -b.y;
        
c.= -b.z;
        
= -e
    
} else c.copy(b);
    if (
Math.abs(e) >= 1) {
        
c.a.w;
        
c.a.x;
        
c.a.y;
        
c.a.z;
        return 
c
    
}
    var 
Math.acos(e),
        
Math.sqrt(e);
    if (
Math.abs(f) < 0.0010) {
        
c.0.5 * (a.c.w);
        
c.0.5 * (a.c.x);
        
c.0.5 * (a.c.y);
        
c.0.5 * (a.c.z);
        return 
c
    
}
    
Math.sin((d) * b) / f;
    
Math.sin(b) / f;
    
c.a.c.d;
    
c.a.c.d;
    
c.a.c.d;
    
c.a.c.d;
    return 
c
};
THREE.Vertex = function(a) {
    
console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");
    return 
a
};
THREE.Face3 = function(abcdef) {
    
this.a;
    
this.b;
    
this.c;
    
this.normal instanceof THREE.Vector3 : new THREE.Vector3;
    
this.vertexNormals instanceof Array ? : [];
    
this.color instanceof THREE.Color : new THREE.Color;
    
this.vertexColors instanceof Array ? : [];
    
this.vertexTangents = [];
    
this.materialIndex f;
    
this.centroid = new THREE.Vector3
};
THREE.Face3.prototype = {
    
constructorTHREE.Face3,
    clone: function() {
        var 
= new THREE.Face3(this.athis.bthis.c);
        
a.normal.copy(this.normal);
        
a.color.copy(this.color);
        
a.centroid.copy(this.centroid);
        
a.materialIndex this.materialIndex;
        var 
bc;
        
0;
        for (
this.vertexNormals.lengthcb++) a.vertexNormals[b] = this.vertexNormals[b].clone();
        
0;
        for (
this.vertexColors.lengthcb++) a.vertexColors[b] = this.vertexColors[b].clone();
        
0;
        for (
this.vertexTangents.lengthcb++) a.vertexTangents[b] = this.vertexTangents[b].clone();
        return 
a
    
}
};
THREE.Face4 = function(abcdefg) {
    
this.a;
    
this.b;
    
this.c;
    
this.d;
    
this.normal instanceof THREE.Vector3 : new THREE.Vector3;
    
this.vertexNormals instanceof Array ? : [];
    
this.color instanceof THREE.Color : new THREE.Color;
    
this.vertexColors instanceof Array ? : [];
    
this.vertexTangents = [];
    
this.materialIndex g;
    
this.centroid = new THREE.Vector3
};
THREE.Face4.prototype = {
    
constructorTHREE.Face4,
    clone: function() {
        var 
= new THREE.Face4(this.athis.bthis.cthis.d);
        
a.normal.copy(this.normal);
        
a.color.copy(this.color);
        
a.centroid.copy(this.centroid);
        
a.materialIndex this.materialIndex;
        var 
bc;
        
0;
        for (
this.vertexNormals.lengthcb++) a.vertexNormals[b] = this.vertexNormals[b].clone();
        
0;
        for (
this.vertexColors.lengthcb++) a.vertexColors[b] = this.vertexColors[b].clone();
        
0;
        for (
this.vertexTangents.lengthcb++) a.vertexTangents[b] = this.vertexTangents[b].clone();
        return 
a
    
}
};
THREE.UV = function(ab) {
    
this.|| 0;
    
this.|| 0
};
THREE.UV.prototype = {
    
constructorTHREE.UV,
    
set: function(ab) {
        
this.a;
        
this.b;
        return 
this
    
},
    
copy: function(a) {
        
this.a.u;
        
this.a.v;
        return 
this
    
},
    
lerpSelf: function(ab) {
        
this.this.+ (a.this.u) * b;
        
this.this.+ (a.this.v) * b;
        return 
this
    
},
    clone: function() {
        return new 
THREE.UV(this.uthis.v)
    }
};
THREE.Geometry = function() {
    
this.id THREE.GeometryCount++;
    
this.name "";
    
this.vertices = [];
    
this.colors = [];
    
this.materials = [];
    
this.faces = [];
    
this.faceUvs = [
        []
    ];
    
this.faceVertexUvs = [
        []
    ];
    
this.morphTargets = [];
    
this.morphColors = [];
    
this.morphNormals = [];
    
this.skinWeights = [];
    
this.skinIndices = [];
    
this.boundingSphere this.boundingBox null;
    
this.dynamic this.hasTangents false
};
THREE.Geometry.prototype = {
    
constructorTHREE.Geometry,
    
applyMatrix: function(a) {
        var 
= new THREE.Matrix4;
        
b.extractRotation(a);
        for (var 
0this.vertices.lengthdc++) a.multiplyVector3(this.vertices[c]);
        
0;
        for (
this.faces.lengthdc++) {
            var 
this.faces[c];
            
b.multiplyVector3(e.normal);
            for (var 
0e.vertexNormals.lengthgf++) b.multiplyVector3(e.vertexNormals[f]);
            
a.multiplyVector3(e.centroid)
        }
    },
    
computeCentroids: function() {
        var 
abc;
        
0;
        for (
this.faces.lengthba++) {
            
this.faces[a];
            
c.centroid.set(0,
                
00);
            if (
instanceof THREE.Face3) {
                
c.centroid.addSelf(this.vertices[c.a]);
                
c.centroid.addSelf(this.vertices[c.b]);
                
c.centroid.addSelf(this.vertices[c.c]);
                
c.centroid.divideScalar(3)
            } else if (
instanceof THREE.Face4) {
                
c.centroid.addSelf(this.vertices[c.a]);
                
c.centroid.addSelf(this.vertices[c.b]);
                
c.centroid.addSelf(this.vertices[c.c]);
                
c.centroid.addSelf(this.vertices[c.d]);
                
c.centroid.divideScalar(4)
            }
        }
    },
    
computeFaceNormals: function() {
        var 
abcdef= new THREE.Vector3,
            
= new THREE.Vector3;
        
0;
        for (
this.faces.length<
            
ba++) {
            
this.faces[a];
            
this.vertices[c.a];
            
this.vertices[c.b];
            
this.vertices[c.c];
            
g.sub(fe);
            
h.sub(de);
            
g.crossSelf(h);
            
g.isZero() || g.normalize();
            
c.normal.copy(g)
        }
    },
    
computeVertexNormals: function() {
        var 
abcd;
        if (
this.__tmpVertices === void 0) {
            
this.__tmpVertices = Array(this.vertices.length);
            
0;
            for (
this.vertices.lengthba++) d[a] = new THREE.Vector3;
            
0;
            for (
this.faces.lengthba++) {
                
this.faces[a];
                if (
instanceof THREE.Face3c.vertexNormals = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
                else if (
instanceof THREE.Face4c.vertexNormals = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3]
            }
        } else {
            
this.__tmpVertices;
            
0;
            for (
this.vertices.lengthba++) d[a].set(000)
        }
        
0;
        for (
this.faces.lengthba++) {
            
this.faces[a];
            if (
instanceof THREE.Face3) {
                
d[c.a].addSelf(c.normal);
                
d[c.b].addSelf(c.normal);
                
d[c.c].addSelf(c.normal)
            } else if (
instanceof THREE.Face4) {
                
d[c.a].addSelf(c.normal);
                
d[c.b].addSelf(c.normal);
                
d[c.c].addSelf(c.normal);
                
d[c.d].addSelf(c.normal)
            }
        }
        
0;
        for (
this.vertices.lengthba++) d[a].normalize();
        
0;
        for (
this.faces.lengthba++) {
            
this.faces[a];
            if (
instanceof THREE.Face3) {
                
c.vertexNormals[0].copy(d[c.a]);
                
c.vertexNormals[1].copy(d[c.b]);
                
c.vertexNormals[2].copy(d[c.c])
            } else if (
instanceof THREE.Face4) {
                
c.vertexNormals[0].copy(d[c.a]);
                
c.vertexNormals[1].copy(d[c.b]);
                
c.vertexNormals[2].copy(d[c.c]);
                
c.vertexNormals[3].copy(d[c.d])
            }
        }
    },
    
computeMorphNormals: function() {
        var 
abcde;
        
0;
        for (
this.faces.lengthdc++) {
            
this.faces[c];
            
e.__originalFaceNormal ?
                
e.__originalFaceNormal.copy(e.normal) : e.__originalFaceNormal e.normal.clone();
            if (!
e.__originalVertexNormalse.__originalVertexNormals = [];
            
0;
            for (
e.vertexNormals.lengthba++) e.__originalVertexNormals[a] ? e.__originalVertexNormals[a].copy(e.vertexNormals[a]) : e.__originalVertexNormals[a] = e.vertexNormals[a].clone()
        }
        var 
= new THREE.Geometry;
        
f.faces this.faces;
        
0;
        for (
this.morphTargets.lengthba++) {
            if (!
this.morphNormals[a]) {
                
this.morphNormals[a] = {};
                
this.morphNormals[a].faceNormals = [];
                
this.morphNormals[a].vertexNormals = [];
                var 
this.morphNormals[a].faceNormals,
                    
this.morphNormals[a].vertexNormals,
                    
ij;
                
0;
                for (
this.faces.lengthdc++) {
                    
this.faces[c];
                    
= new THREE.Vector3;
                    
instanceof THREE.Face3 ? {
                        
a: new THREE.Vector3,
                        
b: new THREE.Vector3,
                        
c: new THREE.Vector3
                    
} : {
                        
a: new THREE.Vector3,
                        
b: new THREE.Vector3,
                        
c: new THREE.Vector3,
                        
d: new THREE.Vector3
                    
};
                    
g.push(i);
                    
h.push(j)
                }
            }
            
this.morphNormals[a];
            
f.vertices this.morphTargets[a].vertices;
            
f.computeFaceNormals();
            
f.computeVertexNormals();
            
0;
            for (
this.faces.lengthdc++) {
                
this.faces[c];
                
g.faceNormals[c];
                
g.vertexNormals[c];
                
i.copy(e.normal);
                if (
instanceof THREE.Face3) {
                    
j.a.copy(e.vertexNormals[0]);
                    
j.b.copy(e.vertexNormals[1]);
                    
j.c.copy(e.vertexNormals[2])
                } else {
                    
j.a.copy(e.vertexNormals[0]);
                    
j.b.copy(e.vertexNormals[1]);
                    
j.c.copy(e.vertexNormals[2]);
                    
j.d.copy(e.vertexNormals[3])
                }
            }
        }
        
0;
        for (
this.faces.lengthdc++) {
            
this.faces[c];
            
e.normal e.__originalFaceNormal;
            
e.vertexNormals e.__originalVertexNormals
        
}
    },
    
computeTangents: function() {
        function 
a(abcdfez) {
            
a.vertices[b];
            
a.vertices[c];
            
a.vertices[d];
            
g[f];
            
g[e];
            
g[z];
            
i.h.x;
            
j.h.x;
            
i.h.y;
            
j.h.y;
            
i.h.z;
            
j.h.z;
            
m.l.u;
            
n.l.u;
            
m.l.v;
            
n.l.v;
            
/ (x);
            
J.set((r) * D, (q) * D, (w) * D);
            
M.set((p) * D, (o) * D, (s) * D);
            
u[b].addSelf(J);
            
u[c].addSelf(J);
            
u[d].addSelf(J);
            
G[b].addSelf(M);
            
G[c].addSelf(M);
            
G[d].addSelf(M)
        }
        var 
bcdefghijlmnproqswtvxCDz= [],
            
= [],
            
= new THREE.Vector3,
            
= new THREE.Vector3,
            
= new THREE.Vector3,
            
= new THREE.Vector3,
            
= new THREE.Vector3;
        
0;
        for (
=
            
this.vertices.lengthcb++) {
            
u[b] = new THREE.Vector3;
            
G[b] = new THREE.Vector3
        
}
        
0;
        for (
this.faces.lengthcb++) {
            
this.faces[b];
            
this.faceVertexUvs[0][b];
            if (
instanceof THREE.Face3a(thisf.af.bf.c012);
            else if (
instanceof THREE.Face4) {
                
a(thisf.af.bf.d013);
                
a(thisf.bf.cf.d123)
            }
        }
        var 
= ["a""b""c""d"];
        
0;
        for (
this.faces.lengthcb++) {
            
this.faces[b];
            for (
0f.vertexNormals.lengthd++) {
                
B.copy(f.vertexNormals[d]);
                
f[F[d]];
                
u[e];
                
O.copy(z);
                
O.subSelf(B.multiplyScalar(B.dot(z))).normalize();
                
X.cross(f.vertexNormals[d], z);
                
X.dot(G[e]);
                
? -1;
                
f.vertexTangents[d] = new THREE.Vector4(O.xO.yO.ze)
            }
        }
        
this.hasTangents true
    
},
    
computeBoundingBox: function() {
        if (!
this.boundingBoxthis.boundingBox = {
            
min: new THREE.Vector3,
            
max: new THREE.Vector3
        
};
        if (
this.vertices.length 0) {
            var 
a;
            
this.vertices[0];
            
this.boundingBox.min.copy(a);
            
this.boundingBox.max.copy(a);
            for (var 
this.boundingBox.minthis.boundingBox.max1this.vertices.lengthed++) {
                
this.vertices[d];
                if (
a.b.xb.a.x;
                else if (
a.c.xc.=
                    
a.x;
                if (
a.b.yb.a.y;
                else if (
a.c.yc.a.y;
                if (
a.b.zb.a.z;
                else if (
a.c.zc.a.z
            
}
        } else {
            
this.boundingBox.min.set(000);
            
this.boundingBox.max.set(000)
        }
    },
    
computeBoundingSphere: function() {
        if (!
this.boundingSpherethis.boundingSphere = {
            
radius0
        
};
        for (var 
a00this.vertices.lengthdc++) {
            
this.vertices[c].length();
            
&& (a)
        }
        
this.boundingSphere.radius b
    
},
    
mergeVertices: function() {
        var 
= {},
            
= [],
            
= [],
            
dMath.pow(104),
            
fghi;
        
0;
        for (
this.vertices.lengthgf++) {
            
this.vertices[f];
            
= [Math.round(d.e), Math.round(d.e), Math.round(d.e)].join("_");
            if (
a[d] === void 0) {
                
a[d] = f;
                
b.push(this.vertices[f]);
                
c[f] = b.length 1
            
} else c[f] = c[a[d]]
        }
        
0;
        for (
this.faces.lengthgf++) {
            
this.faces[f];
            if (
instanceof THREE.Face3) {
                
a.c[a.a];
                
a.c[a.b];
                
a.c[a.c]
            } else if (
instanceof THREE.Face4) {
                
a.c[a.a];
                
a.c[a.b];
                
a.c[a.c];
                
a.c[a.d];
                
= [a.aa.ba.ca.d];
                for (
30e--)
                    if (
d.indexOf(a["abcd" [e]]) !== e) {
                        
d.splice(e1);
                        
this.faces[f] = new THREE.Face3(d[0], d[1], d[2], a.normala.colora.materialIndex);
                        
0;
                        for (
this.faceVertexUvs.lengthhd++)(this.faceVertexUvs[d][f]) && i.splice(e1);
                        
this.faces[f].vertexColors a.vertexColors;
                        break
                    }
            }
        }
        
this.vertices.length b.length;
        
this.vertices b;
        return 
c
    
}
};
THREE.GeometryCount 0;
THREE.Spline = function(a) {
    function 
b(abcdfeg) {
        
= (a) * 0.5;
        
= (b) * 0.5;
        return (
* (c) + d) * + (-* (c) - d) * b
    
}
    
this.points a;
    var 
= [],
        
= {
            
x0,
            
y0,
            
z0
        
},
        
efghijlmn;
    
this.initFromArray = function(a) {
        
this.points = [];
        for (var 
0a.lengthb++) this.points[b] = {
            
xa[b][0],
            
ya[b][1],
            
za[b][2]
        }
    };
    
this.getPoint = function(a) {
        
= (this.points.length 1) * a;
        
Math.floor(e);
        
f;
        
c[0] = === 1;
        
c[1] = f;
        
c[2] = this.points.length this.points.length 1;
        
c[3] = this.points.length this.points.length :
            
2;
        
this.points[c[0]];
        
this.points[c[1]];
        
this.points[c[2]];
        
this.points[c[3]];
        
g;
        
h;
        
d.b(j.xl.xm.xn.xghi);
        
d.b(j.yl.ym.yn.yghi);
        
d.b(j.zl.zm.zn.zghi);
        return 
d
    
};
    
this.getControlPointsArray = function() {
        var 
abthis.points.length,
            
= [];
        for (
0ca++) {
            
this.points[a];
            
d[a] = [b.xb.yb.z]
        }
        return 
d
    
};
    
this.getLength = function(a) {
        var 
bcd0,
            
= new THREE.Vector3,
            
= new THREE.Vector3,
            
= [],
            
0;
        
h[0] = 0;
        
|| (100);
        
this.points.length a;
        
e.copy(this.points[0]);
        for (
1ca++) {
            
=
                
c;
            
this.getPoint(b);
            
g.copy(d);
            
g.distanceTo(e);
            
e.copy(d);
            
= (this.points.length 1) * b;
            
Math.floor(b);
            if (
!= f) {
                
h[b] = i;
                
b
            
}
        }
        
h[h.length] = i;
        return {
            
chunksh,
            
totali
        
}
    };
    
this.reparametrizeByArcLength = function(a) {
        var 
bcdfeg= [],
            
= new THREE.Vector3,
            
this.getLength();
        
h.push(i.copy(this.points[0]).clone());
        for (
1this.points.lengthb++) {
            
j.chunks[b] - j.chunks[1];
            
Math.ceil(j.total);
            
= (1) / (this.points.length 1);
            
/ (this.points.length 1);
            for (
11c++) {
                
* (g) * (f);
                
this.getPoint(d);
                
h.push(i.copy(d).clone())
            }
            
h.push(i.copy(this.points[b]).clone())
        }
        
this.points h
    
}
};
THREE.Camera = function() {
    
THREE.Object3D.call(this);
    
this.matrixWorldInverse = new THREE.Matrix4;
    
this.projectionMatrix = new THREE.Matrix4;
    
this.projectionMatrixInverse = new THREE.Matrix4
};
THREE.Camera.prototype Object.create(THREE.Object3D.prototype);
THREE.Camera.prototype.lookAt = function(a) {
    
this.matrix.lookAt(this.positionathis.up);
    
this.rotationAutoUpdate === true && this.rotation.setEulerFromRotationMatrix(this.matrixthis.eulerOrder)
};
THREE.OrthographicCamera = function(abcdef) {
    
THREE.Camera.call(this);
    
this.left a;
    
this.right b;
    
this.top c;
    
this.bottom d;
    
this.near !== void 0 0.1;
    
this.far !== void 0 2E3;
    
this.updateProjectionMatrix()
};
THREE.OrthographicCamera.prototype Object.create(THREE.Camera.prototype);
THREE.OrthographicCamera.prototype.updateProjectionMatrix = function() {
    
this.projectionMatrix.makeOrthographic(this.leftthis.rightthis.topthis.bottomthis.nearthis.far)
};
THREE.PerspectiveCamera = function(abcd) {
    
THREE.Camera.call(this);
    
this.fov !== void 0 50;
    
this.aspect !== void 0 1;
    
this.near !== void 0 0.1;
    
this.far !== void 0 2E3;
    
this.updateProjectionMatrix()
};
THREE.PerspectiveCamera.prototype Object.create(THREE.Camera.prototype);
THREE.PerspectiveCamera.prototype.setLens = function(ab) {
    
this.fov Math.atan((!== void 0 24) / (2)) * (180 Math.PI);
    
this.updateProjectionMatrix()
};
THREE.PerspectiveCamera.prototype.setViewOffset = function(abcdef) {
    
this.fullWidth a;
    
this.fullHeight b;
    
this.c;
    
this.d;
    
this.width e;
    
this.height f;
    
this.updateProjectionMatrix()
};
THREE.PerspectiveCamera.prototype.updateProjectionMatrix = function() {
    if (
this.fullWidth) {
        var 
this.fullWidth this.fullHeight,
            
Math.tan(this.fov Math.PI 360) * this.near,
            
= -b,
            
c,
            
Math.abs(d),
            
Math.abs(c);
        
this.projectionMatrix.makeFrustum(this.this.fullWidth+ (this.this.width) * this.fullWidth- (this.this.height) * this.fullHeightthis.this.fullHeightthis.nearthis.far)
    } else 
this.projectionMatrix.makePerspective(this.fovthis.aspectthis.nearthis.far)
};
THREE.Light = function(a) {
    
THREE.Object3D.call(this);
    
this.color = new THREE.Color(a)
};
THREE.Light.prototype Object.create(THREE.Object3D.prototype);
THREE.AmbientLight = function(a) {
    
THREE.Light.call(thisa)
};
THREE.AmbientLight.prototype Object.create(THREE.Light.prototype);
THREE.DirectionalLight = function(abc) {
    
THREE.Light.call(thisa);
    
this.position = new THREE.Vector3(010);
    
this.target = new THREE.Object3D;
    
this.intensity !== void 0 1;
    
this.distance !== void 0 0;
    
this.onlyShadow this.castShadow false;
    
this.shadowCameraNear 50;
    
this.shadowCameraFar 5E3;
    
this.shadowCameraLeft = -500;
    
this.shadowCameraTop this.shadowCameraRight 500;
    
this.shadowCameraBottom = -500;
    
this.shadowCameraVisible false;
    
this.shadowBias 0;
    
this.shadowDarkness 0.5;
    
this.shadowMapHeight this.shadowMapWidth 512;
    
this.shadowCascade false;
    
this.shadowCascadeOffset = new THREE.Vector3(00, -1E3);
    
this.shadowCascadeCount 2;
    
this.shadowCascadeBias = [000];
    
this.shadowCascadeWidth = [512512512];
    
this.shadowCascadeHeight = [512512512];
    
this.shadowCascadeNearZ = [-10.990.998];
    
this.shadowCascadeFarZ = [0.990.9981];
    
this.shadowCascadeArray = [];
    
this.shadowMatrix this.shadowCamera this.shadowMapSize this.shadowMap null
};
THREE.DirectionalLight.prototype Object.create(THREE.Light.prototype);
THREE.PointLight = function(abc) {
    
THREE.Light.call(thisa);
    
this.position = new THREE.Vector3(000);
    
this.intensity !== void 0 1;
    
this.distance !== void 0 0
};
THREE.PointLight.prototype Object.create(THREE.Light.prototype);
THREE.SpotLight = function(abcde) {
    
THREE.Light.call(thisa);
    
this.position = new THREE.Vector3(010);
    
this.target = new THREE.Object3D;
    
this.intensity !== void 0 1;
    
this.distance !== void 0 0;
    
this.angle !== void 0 Math.PI 2;
    
this.exponent !== void 0 10;
    
this.onlyShadow this.castShadow false;
    
this.shadowCameraNear 50;
    
this.shadowCameraFar 5E3;
    
this.shadowCameraFov 50;
    
this.shadowCameraVisible false;
    
this.shadowBias 0;
    
this.shadowDarkness 0.5;
    
this.shadowMapHeight this.shadowMapWidth 512;
    
this.shadowMatrix =
        
this.shadowCamera this.shadowMapSize this.shadowMap null
};
THREE.SpotLight.prototype Object.create(THREE.Light.prototype);
THREE.Loader = function(a) {
    
this.statusDomElement = (this.showStatus a) ? THREE.Loader.prototype.addStatusElement() : null;
    
this.onLoadStart = function() {};
    
this.onLoadProgress = function() {};
    
this.onLoadComplete = function() {}
};
THREE.Loader.prototype = {
    
constructorTHREE.Loader,
    
crossOrigin"anonymous",
    
addStatusElement: function() {
        var 
document.createElement("div");
        
a.style.position "absolute";
        
a.style.right "0px";
        
a.style.top "0px";
        
a.style.fontSize "0.8em";
        
a.style.textAlign "left";
        
a.style.background "rgba(0,0,0,0.25)";
        
a.style.color "#fff";
        
a.style.width "120px";
        
a.style.padding "0.5em 0.5em 0.5em 0.5em";
        
a.style.zIndex 1E3;
        
a.innerHTML "Loading ...";
        return 
a
    
},
    
updateProgress: function(a) {
        var 
"Loaded ",
            
a.total + ((100 a.loaded /
                
a.total).toFixed(0) + "%") : + ((a.loaded 1E3).toFixed(2) + " KB");
        
this.statusDomElement.innerHTML b
    
},
    
extractUrlBase: function(a) {
        
a.split("/");
        
a.pop();
        return (
a.length "." a.join("/")) + "/"
    
},
    
initMaterials: function(abc) {
        
a.materials = [];
        for (var 
0b.length; ++da.materials[d] = THREE.Loader.prototype.createMaterial(b[d], c)
    },
    
hasNormals: function(a) {
        var 
bca.materials.length;
        for (
0dc++) {
            
a.materials[c];
            if (
instanceof THREE.ShaderMaterial) return true
        
}
        return 
false
    
},
    
createMaterial: function(ab) {
        function 
c(a) {
            
=
                
Math.log(a) / Math.LN2;
            return 
Math.floor(a) == a
        
}

        function 
d(a) {
            
Math.log(a) / Math.LN2;
            return 
Math.pow(2Math.round(a))
        }

        function 
e(ab) {
            var 
= new Image;
            
f.onload = function() {
                if (!
c(this.width) || !c(this.height)) {
                    var 
d(this.width),
                        
d(this.height);
                    
a.image.width b;
                    
a.image.height f;
                    
a.image.getContext("2d").drawImage(this00bf)
                } else 
a.image this;
                
a.needsUpdate true
            
};
            
f.crossOrigin h.crossOrigin;
            
f.src b
        
}

        function 
f(acdfgh) {
            var 
document.createElement("canvas");
            
a[c] = new THREE.Texture(i);
            
a[c].sourceFile =
                
d;
            if (
f) {
                
a[c].repeat.set(f[0], f[1]);
                if (
f[0] != 1a[c].wrapS THREE.RepeatWrapping;
                if (
f[1] != 1a[c].wrapT THREE.RepeatWrapping
            
}
            
&& a[c].offset.set(g[0], g[1]);
            if (
h) {
                
= {
                    
repeatTHREE.RepeatWrapping,
                    
mirrorTHREE.MirroredRepeatWrapping
                
};
                if (
f[h[0]] !== void 0a[c].wrapS f[h[0]];
                if (
f[h[1]] !== void 0a[c].wrapT f[h[1]]
            }
            
e(a[c], "/" d)
        }

        function 
g(a) {
            return (
a[0] * 255 << 16) + (a[1] * 255 << 8) + a[2] * 255
        
}
        var 
this,
            
"MeshLambertMaterial",
            
= {
                
color15658734,
                
opacity1,
                
mapnull,
                
lightMapnull,
                
normalMapnull,
                
wireframea.wireframe
            
};
        if (
a.shading) {
            var 
a.shading.toLowerCase();
            
=== "phong" "MeshPhongMaterial" === "basic" && ("MeshBasicMaterial")
        }
        if (
a.blending !== void 0 && THREE[a.blending] !== void 0j.blending THREE[a.blending];
        if (
a.transparent !== void 0 || a.opacity 1j.transparent a.transparent;
        if (
a.depthTest !== void 0j.depthTest a.depthTest;
        if (
a.depthWrite !== void 0j.depthWrite a.depthWrite;
        if (
a.vertexColors !== void 0)
            if (
a.vertexColors == "face"j.vertexColors THREE.FaceColors;
            else if (
a.vertexColorsj.vertexColors THREE.VertexColors;
        if (
a.colorDiffusej.color g(a.colorDiffuse);
        else if (
a.DbgColorj.color a.DbgColor;
        if (
a.colorSpecularj.specular g(a.colorSpecular);
        if (
a.colorAmbientj.ambient g(a.colorAmbient);
        if (
a.transparencyj.opacity a.transparency;
        if (
a.specularCoefj.shininess a.specularCoef;
        
a.mapDiffuse && && f(j"map"a.mapDiffusea.mapDiffuseRepeata.mapDiffuseOffseta.mapDiffuseWrap);
        
a.mapLight && && f(j"lightMap"a.mapLighta.mapLightRepeata.mapLightOffseta.mapLightWrap);
        
a.mapNormal && && f(j"normalMap"a.mapNormala.mapNormalRepeat,
            
a.mapNormalOffseta.mapNormalWrap);
        
a.mapSpecular && && f(j"specularMap"a.mapSpeculara.mapSpecularRepeata.mapSpecularOffseta.mapSpecularWrap);
        if (
a.mapNormal) {
            
THREE.ShaderUtils.lib.normal;
            
THREE.UniformsUtils.clone(i.uniforms);
            
l.tNormal.texture j.normalMap;
            if (
a.mapNormalFactorl.uNormalScale.value a.mapNormalFactor;
            if (
j.map) {
                
l.tDiffuse.texture j.map;
                
l.enableDiffuse.value true
            
}
            if (
j.specularMap) {
                
l.tSpecular.texture j.specularMap;
                
l.enableSpecular.value true
            
}
            if (
j.lightMap) {
                
l.tAO.texture j.lightMap;
                
l.enableAO.value true
            
}
            
l.uDiffuseColor.value.setHex(j.color);
            
l.uSpecularColor.value.setHex(j.specular);
            
l.uAmbientColor.value.setHex(j.ambient);
            
l.uShininess.value j.shininess;
            if (
j.opacity !== void 0l.uOpacity.value j.opacity;
            
= new THREE.ShaderMaterial({
                
fragmentShaderi.fragmentShader,
                
vertexShaderi.vertexShader,
                
uniformsl,
                
lightstrue,
                
fogtrue
            
})
        } else 
= new THREE[i](j);
        if (
a.DbgName !== void 0j.name a.DbgName;
        return 
j
    
}
};
THREE.BinaryLoader = function(a) {
    
THREE.Loader.call(thisa)
};
THREE.BinaryLoader.prototype Object.create(THREE.Loader.prototype);
THREE.BinaryLoader.prototype.load = function(abcd) {
    var 
this.extractUrlBase(a),
        
this.extractUrlBase(a),
        
this.showProgress THREE.Loader.prototype.updateProgress null;
    
this.onLoadStart();
    
this.loadAjaxJSON(thisabcde)
};
THREE.BinaryLoader.prototype.loadAjaxJSON = function(abcdef) {
    var 
= new XMLHttpRequest;
    
g.onreadystatechange = function() {
        if (
g.readyState == 4)
            if (
g.status == 200 || g.status == 0) {
                var 
JSON.parse(g.responseText);
                
a.loadAjaxBuffers(hcedf)
            } else 
console.error("THREE.BinaryLoader: Couldn't load [" "] [" g.status "]")
    };
    
g.open("GET"btrue);
    
g.overrideMimeType && g.overrideMimeType("text/plain; charset=x-user-defined");
    
g.setRequestHeader("Content-Type""text/plain");
    
g.send(null)
};
THREE.BinaryLoader.prototype.loadAjaxBuffers = function(abcde) {
    var 
= new XMLHttpRequest,
        
"/" a.buffers,
        
0;
    
f.onreadystatechange = function() {
        if (
f.readyState == 4f.status == 200 || f.status == THREE.BinaryLoader.prototype.createBinModel(f.responsebda.materials) : console.error("THREE.BinaryLoader: Couldn't load [" "] [" f.status "]");
        else if (
f.readyState == 3) {
            if (
e) {
                
== && (f.getResponseHeader("Content-Length"));
                
e({
                    
totalh,
                    
loadedf.responseText.length
                
})
            }
        } else 
f.readyState == && (f.getResponseHeader("Content-Length"))
    };
    
f.open("GET"gtrue);
    
f.responseType "arraybuffer";
    
f.send(null)
};
THREE.BinaryLoader.prototype.createBinModel = function(abcd) {
    var 
= function(b) {
        var 
ceijlmnproqswtv;

        function 
x(a) {
            return 
0
        
}

        function 
C(ab) {
            return (new 
Uint8Array(ab1))[0]
        }

        function 
D(ab) {
            return (new 
Uint32Array(ab1))[0]
        }

        function 
z(bc) {
            var 
dfeghijl= new Uint32Array(acb);
            for (
0bd++) {
                
m[3];
                
m[1];
                
m[2];
                
Q[2];
                
Q[1];
                
Q[2];
                
Q[1];
                
Q[2];
                
Q[1];
                
X.faceVertexUvs[0];
                var 
= [];
                
n.push(new THREE.UV(hf));
                
n.push(new THREE.UV(ij));
                
n.push(new THREE.UV(e,
                    
l));
                
g.push(n)
            }
        }

        function 
u(bc) {
            var 
dfeghijlmn= new Uint32Array(acb);
            for (
0bd++) {
                
o[4];
                
o[1];
                
o[2];
                
o[3];
                
Q[2];
                
Q[1];
                
Q[2];
                
Q[1];
                
Q[2];
                
Q[1];
                
Q[2];
                
Q[1];
                
X.faceVertexUvs[0];
                var 
= [];
                
p.push(new THREE.UV(if));
                
p.push(new THREE.UV(jm));
                
p.push(new THREE.UV(ln));
                
p.push(new THREE.UV(ge));
                
h.push(p)
            }
        }

        function 
G(bcd) {
            for (var 
fegh= new Uint32Array(acb), = new Uint16Array(adb), 0bd++) {
                
c[3];
                
c[1];
                
c[2];
                
i[d];
                
X.faces.push(new THREE.Face3(fegnullnullh))
            }
        }

        function 
J(bcd) {
            for (var 
feghi= new Uint32Array(acb), = new Uint16Array(adb), 0bd++) {
                
c[4];
                
c[1];
                
c[2];
                
c[3];
                
j[d];
                
X.faces.push(new THREE.Face4(feghnullnulli))
            }
        }

        function 
M(bcdf) {
            for (var 
eghijlm= new Uint32Array(acb), = new Uint32Array(adb), = new Uint16Array(afb), 0bf++) {
                
c[3];
                
c[1];
                
c[2];
                
d[3];
                
d[1];
                
d[2];
                
n[f];
                var 
F[3],
                    
F[1];
                
F[2];
                var 
F[3],
                    
F[1];
                
F[2];
                
X.faces.push(new THREE.Face3(egh, [new THREE.Vector3(F[3], F[1], F[2]), new THREE.Vector3(opl), new THREE.Vector3(rqm)], nulli))
            }
        }

        function 
O(bcdf) {
            for (var 
eghijlmno= new Uint32Array(acb), = new Uint32Array(adb), = new Uint16Array(afb), 0bf++) {
                
c[4];
                
c[1];
                
c[2];
                
c[3];
                
d[4];
                
d[1];
                
d[2];
                
d[3];
                
p[f];
                var 
F[3],
                    
F[1];
                
F[2];
                var 
F[3],
                    
F[1];
                
F[2];
                var 
F[3],
                    
F[1];
                
F[2];
                
X.faces.push(new THREE.Face4(e,
                    
ghi, [new THREE.Vector3(F[3], F[1], F[2]), new THREE.Vector3(rqm), new THREE.Vector3(sun), new THREE.Vector3(tvo)], nullj))
            }
        }
        var 
this,
            
0,
            
= [],
            
= [],
            
EaaT;
        
THREE.Geometry.call(this);
        
THREE.Loader.prototype.initMaterials(Xdb);
        (function(
abc) {
            for (var 
= new Uint8Array(abc), ""0cf++) String.fromCharCode(a[f]);
            return 
d
        
})(aB12);
        
C(a12);
        
C(a13);
        
C(a14);
        
C(a15);
        
C(a16);
        
C(a17);
        
C(a18);
        
C(a19);
        
D(a20);
        
D(a20 4);
        
D(a20 8);
        
D(a20 12);
        
D(a20 16);
        
D(a20 20);
        
D(a20 24);
        
D(a20 28);
        
D(a20 32);
        
D(a20 36);
        
D(a20 40);
        
c;
        
l;
        
l;
        
c;
        
aa * (3);
        
* (3);
        
* (3);
        
T;
        
* (4);
        
* (4);
        
+ function(b) {
            var 
= new Float32Array(ab3),
                
cdfe;
            for (
0mc++) {
                
b[3];
                
b[1];
                
b[2];
                
X.vertices.push(new THREE.Vector3(dfe))
            }
            return 
Float32Array.BYTES_PER_ELEMENT
        
}(B);
        
+ function(b) {
            if (
n) {
                var 
= new Int8Array(ab3),
                    
cdfe;
                for (
0nc++) {
                    
b[3];
                    
b[1];
                    
b[2];
                    
F.push(127127127)
                }
            }
            return 
Int8Array.BYTES_PER_ELEMENT
        
}(B);
        
x(3);
        
+ function(b) {
            if (
p) {
                var 
= new Float32Array(ab2),
                    
cdf;
                for (
0pc++) {
                    
b[2];
                    
b[1];
                    
Q.push(df)
                }
            }
            return 
Float32Array.BYTES_PER_ELEMENT
        
}(B);
        
x(2);
        
aa aa x(2);
        
aa x(2);
        
x(2);
        
x(2);
        
x(2);
        
x(2);
        (function(
a) {
            if (
o) {
                var 
Uint32Array.BYTES_PER_ELEMENT 3;
                
G(oaUint32Array.BYTES_PER_ELEMENT 3);
                
z(ob)
            }
        })(
aa);
        (function(
a) {
            if (
q) {
                var 
Uint32Array.BYTES_PER_ELEMENT *
                    
3,
                    
Uint32Array.BYTES_PER_ELEMENT 3;
                
M(qabUint32Array.BYTES_PER_ELEMENT 3);
                
z(qc)
            }
        })(
e);
        (function(
a) {
            if (
t) {
                var 
Uint32Array.BYTES_PER_ELEMENT 4;
                
J(taUint32Array.BYTES_PER_ELEMENT 4);
                
u(tb)
            }
        })(
i);
        (function(
a) {
            if (
v) {
                var 
Uint32Array.BYTES_PER_ELEMENT 4,
                    
Uint32Array.BYTES_PER_ELEMENT 4;
                
O(vabUint32Array.BYTES_PER_ELEMENT 4);
                
u(vc)
            }
        })(
j);
        
&& G(bBUint32Array.BYTES_PER_ELEMENT 3);
        (function(
a) {
            if (
r) {
                var 
Uint32Array.BYTES_PER_ELEMENT 3;
                
M(rabUint32Array.BYTES_PER_ELEMENT *
                    
3)
            }
        })(
E);
        
&& J(slUint32Array.BYTES_PER_ELEMENT 4);
        (function(
a) {
            if (
w) {
                var 
Uint32Array.BYTES_PER_ELEMENT 4;
                
O(wabUint32Array.BYTES_PER_ELEMENT 4)
            }
        })(
c);
        
this.computeCentroids();
        
this.computeFaceNormals();
        
THREE.Loader.prototype.hasNormals(this) && this.computeTangents()
    };
    
e.prototype Object.create(THREE.Geometry.prototype);
    
b(new e(c))
};
THREE.ImageLoader = function() {
    
THREE.EventTarget.call(this);
    
this.crossOrigin null
};
THREE.ImageLoader.prototype = {
    
constructorTHREE.ImageLoader,
    
load: function(a) {
        var 
this,
            
= new Image;
        
c.addEventListener("load", function() {
            
b.dispatchEvent({
                
type"load",
                
contentc
            
})
        }, 
false);
        
c.addEventListener("error", function() {
            
b.dispatchEvent({
                
type"error",
                
message"Couldn't load URL [" "]"
            
})
        }, 
false);
        if (
b.crossOriginc.crossOrigin b.crossOrigin;
        
c.src a
    
}
};
THREE.JSONLoader = function(a) {
    
THREE.Loader.call(thisa)
};
THREE.JSONLoader.prototype Object.create(THREE.Loader.prototype);
THREE.JSONLoader.prototype.load = function(abc) {
    
this.extractUrlBase(a);
    
this.onLoadStart();
    
this.loadAjaxJSON(thisabc)
};
THREE.JSONLoader.prototype.loadAjaxJSON = function(abcde) {
    var 
= new XMLHttpRequest,
        
0;
    
f.onreadystatechange = function() {
        if (
f.readyState === f.DONE)
            if (
f.status === 200 || f.status === 0) {
                if (
f.responseText) {
                    var 
JSON.parse(f.responseText);
                    
a.createModel(hcd)
                } else 
console.warn("THREE.JSONLoader: [" "] seems to be unreachable or file there is empty");
                
a.onLoadComplete()
            } else 
console.error("THREE.JSONLoader: Couldn't load [" "] [" f.status "]");
        else if (
f.readyState === f.LOADING) {
            if (
e) {
                
=== && (f.getResponseHeader("Content-Length"));
                
e({
                    
totalg,
                    
loadedf.responseText.length
                
})
            }
        } else 
f.readyState === f.HEADERS_RECEIVED && (f.getResponseHeader("Content-Length"))
    };
    
f.open("GET"btrue);
    
f.overrideMimeType && f.overrideMimeType("text/plain; charset=x-user-defined");
    
f.setRequestHeader("Content-Type""text/plain");
    
f.send(null)
};
THREE.JSONLoader.prototype.createModel = function(abc) {
    var 
= new THREE.Geometry,
        
a.scale !== void 0 a.scale 1;
    
this.initMaterials(da.materialsc);
    (function(
b) {
        var 
ceijlmnproqswta.faces;
        
a.vertices;
        var 
a.normals,
            
a.colors,
            
0;
        for (
0a.uvs.lengthc++) a.uvs[c].length && D++;
        for (
0Dc++) {
            
d.faceUvs[c] = [];
            
d.faceVertexUvs[c] = []
        }
        
0;
        for (
m.lengthl;) {
            
= new THREE.Vector3;
            
n.m[j++] * b;
            
n.m[j++] * b;
            
n.m[j++] * b;
            
d.vertices.push(n)
        }
        
0;
        for (
v.lengthl;) {
            
v[j++];
            
1;
            
2;
            
&
                
4;
            
8;
            
16;
            
32;
            
64;
            
128;
            if (
m) {
                
= new THREE.Face4;
                
q.v[j++];
                
q.v[j++];
                
q.v[j++];
                
q.v[j++];
                
4
            
} else {
                
= new THREE.Face3;
                
q.v[j++];
                
q.v[j++];
                
q.v[j++];
                
3
            
}
            if (
i) {
                
v[j++];
                
q.materialIndex i
            
}
            
d.faces.length;
            if (
c)
                for (
0Dc++) {
                    
a.uvs[c];
                    
v[j++];
                    
s[2];
                    
s[1];
                    
d.faceUvs[c][i] = new THREE.UV(tr)
                }
            if (
e)
                for (
0Dc++) {
                    
a.uvs[c];
                    
= [];
                    for (
0me++) {
                        
v[j++];
                        
s[2];
                        
s[1];
                        
w[e] = new THREE.UV(tr)
                    }
                    
d.faceVertexUvs[c][i] = w
                
}
            if (
p) {
                
v[j++] * 3;
                
= new THREE.Vector3;
                
e.x[p++];
                
e.x[p++];
                
e.x[p];
                
q.normal e
            
}
            if (
n)
                for (
0mc++) {
                    
v[j++] * 3;
                    
= new THREE.Vector3;
                    
e.x[p++];
                    
e.x[p++];
                    
e.x[p];
                    
q.vertexNormals.push(e)
                }
            if (
o) {
                
v[j++];
                
= new THREE.Color(C[n]);
                
q.color n
            
}
            if (
b)
                for (
0mc++) {
                    
v[j++];
                    
= new THREE.Color(C[n]);
                    
q.vertexColors.push(n)
                }
            
d.faces.push(q)
        }
    })(
e);
    (function() {
        var 
bcei;
        if (
a.skinWeights) {
            
0;
            for (
a.skinWeights.lengthc2) {
                
a.skinWeights[b];
                
a.skinWeights[1];
                
d.skinWeights.push(new THREE.Vector4(ei00))
            }
        }
        if (
a.skinIndices) {
            
0;
            for (
a.skinIndices.lengthc=
                
2) {
                
a.skinIndices[b];
                
a.skinIndices[1];
                
d.skinIndices.push(new THREE.Vector4(ei00))
            }
        }
        
d.bones a.bones;
        
d.animation a.animation
    
})();
    (function(
b) {
        if (
a.morphTargets !== void 0) {
            var 
ceijlm;
            
0;
            for (
a.morphTargets.lengthec++) {
                
d.morphTargets[c] = {};
                
d.morphTargets[c].name a.morphTargets[c].name;
                
d.morphTargets[c].vertices = [];
                
d.morphTargets[c].vertices;
                
a.morphTargets[c].vertices;
                
0;
                for (
m.lengthj3) {
                    var 
= new THREE.Vector3;
                    
n.m[i] * b;
                    
n.m[1] * b;
                    
n.m[2] * b;
                    
l.push(n)
                }
            }
        }
        if (
a.morphColors !==
            
void 0) {
            
0;
            for (
a.morphColors.lengthec++) {
                
d.morphColors[c] = {};
                
d.morphColors[c].name a.morphColors[c].name;
                
d.morphColors[c].colors = [];
                
d.morphColors[c].colors;
                
a.morphColors[c].colors;
                
0;
                for (
l.lengthi3) {
                    
= new THREE.Color(16755200);
                    
m.setRGB(l[b], l[1], l[2]);
                    
j.push(m)
                }
            }
        }
    })(
e);
    
d.computeCentroids();
    
d.computeFaceNormals();
    
this.hasNormals(d) && d.computeTangents();
    
b(d)
};
THREE.GeometryLoader = function() {
    
THREE.EventTarget.call(this);
    
this.path this.crossOrigin null
};
THREE.GeometryLoader.prototype = {
    
constructorTHREE.GeometryLoader,
    
load: function(a) {
        var 
this,
            
null;
        if (
b.path === null) {
            var 
a.split("/");
            
d.pop();
            
b.path d.length "." d.join("/")
        }
        
= new XMLHttpRequest;
        
d.addEventListener("load", function(d) {
            
d.target.responseText b.parse(JSON.parse(d.target.responseText), e) : b.dispatchEvent({
                
type"error",
                
message"Invalid file [" "]"
            
})
        }, 
false);
        
d.addEventListener("error", function() {
            
b.dispatchEvent({
                
type"error",
                
message"Couldn't load URL [" "]"
            
})
        }, 
false);
        
d.open("GET",
            
atrue);
        
d.send(null);
        var 
= new THREE.LoadingMonitor;
        
e.addEventListener("load", function() {
            
b.dispatchEvent({
                
type"load",
                
contentc
            
})
        });
        
e.add(d)
    },
    
parse: function(ab) {
        var 
this,
            
= new THREE.Geometry,
            
a.scale !== void 0 a.scale 1;
        if (
a.materials) {
            
d.materials = [];
            for (var 
0a.materials.length; ++f) {
                var 
a.materials[f],
                    
= function(a) {
                        
Math.log(a) / Math.LN2;
                        return 
Math.floor(a) == a
                    
},
                    
= function(a) {
                        
Math.log(a) / Math.LN2;
                        return 
Math.pow(2Math.round(a))
                    },
                    
= function(adefgj) {
                        
a[d] = new THREE.Texture;
                        
a[d].sourceFile =
                            
e;
                        if (
f) {
                            
a[d].repeat.set(f[0], f[1]);
                            if (
f[0] != 1a[d].wrapS THREE.RepeatWrapping;
                            if (
f[1] != 1a[d].wrapT THREE.RepeatWrapping
                        
}
                        
&& a[d].offset.set(g[0], g[1]);
                        if (
j) {
                            
= {
                                
repeatTHREE.RepeatWrapping,
                                
mirrorTHREE.MirroredRepeatWrapping
                            
};
                            if (
f[j[0]] !== void 0a[d].wrapS f[j[0]];
                            if (
f[j[1]] !== void 0a[d].wrapT f[j[1]]
                        }
                        var 
a[d],
                            
= new THREE.ImageLoader;
                        
a.addEventListener("load", function(a) {
                            
a.content;
                            if (!
h(a.width) || !h(a.height)) {
                                var 
i(a.width),
                                    
i(a.height);
                                
l.image document.createElement("canvas");
                                
l.image.width =
                                    
b;
                                
l.image.height c;
                                
l.image.getContext("2d").drawImage(a00bc)
                            } else 
l.image a;
                            
l.needsUpdate true
                        
});
                        
a.crossOrigin c.crossOrigin;
                        
a.load(c.path "/" e);
                        
&& b.add(a)
                    },
                    
= function(a) {
                        return (
a[0] * 255 << 16) + (a[1] * 255 << 8) + a[2] * 255
                    
},
                    
"MeshLambertMaterial",
                    
= {
                        
color15658734,
                        
opacity1,
                        
mapnull,
                        
lightMapnull,
                        
normalMapnull,
                        
wireframeg.wireframe
                    
};
                if (
g.shading) {
                    var 
g.shading.toLowerCase();
                    
=== "phong" "MeshPhongMaterial" === "basic" && ("MeshBasicMaterial")
                }
                if (
g.blending !== void 0 && THREE[g.blending] !== void 0n.blending =
                    
THREE[g.blending];
                if (
g.transparent !== void 0 || g.opacity 1n.transparent g.transparent;
                if (
g.depthTest !== void 0n.depthTest g.depthTest;
                if (
g.depthWrite !== void 0n.depthWrite g.depthWrite;
                if (
g.vertexColors !== void 0)
                    if (
g.vertexColors == "face"n.vertexColors THREE.FaceColors;
                    else if (
g.vertexColorsn.vertexColors THREE.VertexColors;
                if (
g.colorDiffusen.color l(g.colorDiffuse);
                else if (
g.DbgColorn.color g.DbgColor;
                if (
g.colorSpecularn.specular l(g.colorSpecular);
                if (
g.colorAmbientn.ambient l(g.colorAmbient);
                if (
g.transparencyn.opacity g.transparency;
                if (
g.specularCoefn.shininess g.specularCoef;
                
g.mapDiffuse && j(n"map"g.mapDiffuseg.mapDiffuseRepeatg.mapDiffuseOffsetg.mapDiffuseWrap);
                
g.mapLight && j(n"lightMap"g.mapLightg.mapLightRepeatg.mapLightOffsetg.mapLightWrap);
                
g.mapNormal && j(n"normalMap"g.mapNormalg.mapNormalRepeatg.mapNormalOffsetg.mapNormalWrap);
                
g.mapSpecular && j(n"specularMap"g.mapSpecularg.mapSpecularRepeatg.mapSpecularOffsetg.mapSpecularWrap);
                if (
g.mapNormal) {
                    
THREE.ShaderUtils.lib.normal;
                    
THREE.UniformsUtils.clone(j.uniforms);
                    
l.tNormal.texture n.normalMap;
                    if (
g.mapNormalFactorl.uNormalScale.value g.mapNormalFactor;
                    if (
n.map) {
                        
l.tDiffuse.texture n.map;
                        
l.enableDiffuse.value true
                    
}
                    if (
n.specularMap) {
                        
l.tSpecular.texture n.specularMap;
                        
l.enableSpecular.value true
                    
}
                    if (
n.lightMap) {
                        
l.tAO.texture n.lightMap;
                        
l.enableAO.value true
                    
}
                    
l.uDiffuseColor.value.setHex(n.color);
                    
l.uSpecularColor.value.setHex(n.specular);
                    
l.uAmbientColor.value.setHex(n.ambient);
                    
l.uShininess.value n.shininess;
                    if (
n.opacity !== void 0l.uOpacity.value =
                        
n.opacity;
                    
= new THREE.ShaderMaterial({
                        
fragmentShaderj.fragmentShader,
                        
vertexShaderj.vertexShader,
                        
uniformsl,
                        
lightstrue,
                        
fogtrue
                    
})
                } else 
= new THREE[m](n);
                if (
g.DbgName !== void 0n.name g.DbgName;
                
d.materials[f] = n
            
}
        }
        var 
a.faces,
            
a.vertices,
            
a.normals,
            
a.colors,
            
0;
        if (
a.uvs)
            for (
0a.uvs.lengthf++) a.uvs[f].length && l++;
        for (
0lf++) {
            
d.faceUvs[f] = [];
            
d.faceVertexUvs[f] = []
        }
        
0;
        for (
r.lengthp;) {
            var 
= new THREE.Vector3;
            
o.r[m++] * e;
            
o.r[m++] * e;
            
o.r[m++] * e;
            
d.vertices.push(o)
        }
        
0;
        for (
g.length<
            
p;) {
            var 
g[m++],
                
2,
                
4,
                
8,
                
16,
                
32,
                
64,
                
128;
            if (
1) {
                
= new THREE.Face4;
                
q.g[m++];
                
q.g[m++];
                
q.g[m++];
                
q.g[m++];
                var 
4
            
} else {
                
= new THREE.Face3;
                
q.g[m++];
                
q.g[m++];
                
q.g[m++];
                
3
            
}
            if (
s) {
                
g[m++];
                
q.materialIndex s
            
}
            var 
d.faces.length;
            if (
f)
                for (
0lf++) {
                    var 
a.uvs[f],
                        
g[m++],
                        
D[2],
                        
D[1];
                    
d.faceUvs[f][C] = new THREE.UV(zs)
                }
            if (
w)
                for (
0lf++) {
                    for (var 
a.uvs[f], = [], 0xu++) {
                        
g[m++];
                        
D[2];
                        
D[1];
                        
w[u] = new THREE.UV(zs)
                    }
                    
d.faceVertexUvs[f][C] = w
                
}
            if (
t) {
                
g[m++] *
                    
3;
                
= new THREE.Vector3;
                
s.n[t++];
                
s.n[t++];
                
s.n[t];
                
q.normal s
            
}
            if (
r)
                for (
0xf++) {
                    
g[m++] * 3;
                    
= new THREE.Vector3;
                    
s.n[t++];
                    
s.n[t++];
                    
s.n[t];
                    
q.vertexNormals.push(s)
                }
            if (
v) {
                
g[m++];
                
q.color = new THREE.Color(j[r])
            }
            if (
o)
                for (
0xf++) {
                    
g[m++];
                    
q.vertexColors.push(new THREE.Color(j[r]))
                }
            
d.faces.push(q)
        }
        if (
a.skinWeights) {
            
0;
            for (
a.skinWeights.lengthg2d.skinWeights.push(new THREE.Vector4(a.skinWeights[f], a.skinWeights[1], 00))
        }
        if (
a.skinIndices) {
            
0;
            for (
a.skinIndices.lengthg+
                
2) {
                
0;
                
d.skinIndices.push(new THREE.Vector4(a.skinIndices[f], a.skinIndices[1], n0))
            }
        }
        
d.bones a.bones;
        
d.animation a.animation;
        if (
a.morphTargets) {
            
0;
            for (
a.morphTargets.lengthgf++) {
                
d.morphTargets[f] = {};
                
d.morphTargets[f].name a.morphTargets[f].name;
                
d.morphTargets[f].vertices = [];
                
d.morphTargets[f].vertices;
                
a.morphTargets[f].vertices;
                
0;
                for (
j.lengthl3) {
                    
= new THREE.Vector3;
                    
o.j[s] * e;
                    
o.j[1] * e;
                    
o.j[2] * e;
                    
n.push(o)
                }
            }
        }
        if (
a.morphColors) {
            
0;
            for (
a.morphColors.lengthgf++) {
                
d.morphColors[f] = {};
                
d.morphColors[f].name a.morphColors[f].name;
                
d.morphColors[f].colors = [];
                
d.morphColors[f].colors;
                
a.morphColors[f].colors;
                
0;
                for (
j.lengthl3) {
                    
= new THREE.Color(16755200);
                    
m.setRGB(j[n], j[1], j[2]);
                    
e.push(m)
                }
            }
        }
        
d.computeCentroids();
        
d.computeFaceNormals();
        return 
d
    
}
};
THREE.SceneLoader = function() {
    
this.onLoadStart = function() {};
    
this.onLoadProgress = function() {};
    
this.onLoadComplete = function() {};
    
this.callbackSync = function() {};
    
this.callbackProgress = function() {}
};
THREE.SceneLoader.prototype.constructor THREE.SceneLoader;
THREE.SceneLoader.prototype.load = function(ab) {
    var 
this,
        
= new XMLHttpRequest;
    
d.onreadystatechange = function() {
        if (
d.readyState === 4)
            if (
d.status === 200 || d.status === 0) {
                var 
JSON.parse(d.responseText);
                
c.createScene(eba)
            } else 
console.error("THREE.SceneLoader: Couldn't load [" "] [" d.status "]")
    };
    
d.open("GET"atrue);
    
d.overrideMimeType && d.overrideMimeType("text/plain; charset=x-user-defined");
    
d.setRequestHeader("Content-Type""text/plain");
    
d.send(null)
};
THREE.SceneLoader.prototype.createScene = function(abc) {
    function 
d(ab) {
        return 
== "relativeToHTML" "/" a
    
}

    function 
e() {
        var 
a;
        for (
n in B.objects)
            if (!
N.objects[n]) {
                
B.objects[n];
                if (
s.geometry !== void 0) {
                    if (
N.geometries[s.geometry]) {
                        
false;
                        
N.materials[s.materials[0]];
                        (
instanceof THREE.ShaderMaterial) && J.computeTangents();
                        
s.position;
                        
s.rotation;
                        
s.quaternion;
                        
s.scale;
                        
s.matrix;
                        
0;
                        
s.materials.length == && (= new THREE.MeshFaceMaterial);
                        
s.materials.length && (= new THREE.MeshFaceMaterial);
                        
= new THREE.Mesh(JM);
                        
a.name n;
                        if (
w) {
                            
a.matrixAutoUpdate false;
                            
a.matrix.set(w[0], w[1], w[2], w[3], w[4], w[5], w[6], w[7], w[8], w[9], w[10], w[11], w[12], w[13], w[14], w[15])
                        } else {
                            
a.position.set(x[0], x[1], x[2]);
                            if (
D) {
                                
a.quaternion.set(D[0], D[1], D[2], D[3]);
                                
a.useQuaternion true
                            
} else a.rotation.set(C[0], C[1], C[2]);
                            
a.scale.set(z[0], z[1], z[2])
                        }
                        
a.visible s.visible;
                        
a.doubleSided s.doubleSided;
                        
a.castShadow s.castShadow;
                        
a.receiveShadow s.receiveShadow;
                        
N.scene.add(a);
                        
N.objects[n] = a
                    
}
                } else {
                    
s.position;
                    
s.rotation;
                    
s.quaternion;
                    
s.scale;
                    
0;
                    
= new THREE.Object3D;
                    
a.name n;
                    
a.position.set(x[0], x[1], x[2]);
                    if (
D) {
                        
a.quaternion.set(D[0], D[1], D[2], D[3]);
                        
a.useQuaternion true
                    
} else a.rotation.set(C[0], C[1], C[2]);
                    
a.scale.set(z[0], z[1], z[2]);
                    
a.visible s.visible !== void 0 s.visible false;
                    
N.scene.add(a);
                    
N.objects[n] = a;
                    
N.empties[n] = a
                
}
            }
    }

    function 
f(a) {
        return function(
b) {
            
N.geometries[a] = b;
            
e();
            
1;
            
i.onLoadComplete();
            
h()
        }
    }

    function 
g(a) {
        return function(
b) {
            
N.geometries[a] = b
        
}
    }

    function 
h() {
        
i.callbackProgress({
            
totalModelsaa,
            
totalTexturesT,
            
loadedModelsaa -
                
Q,
            
loadedTexturesE
        
}, N);
        
i.onLoadProgress();
        
=== && === && b(N)
    }
    var 
this,
        
THREE.Loader.prototype.extractUrlBase(c),
        
lmnproqswtvxCDzuGJMOXBFQEaaTN;
    
a;
    
= new THREE.BinaryLoader;
    
= new THREE.JSONLoader;
    
0;
    
= {
        
scene: new THREE.Scene,
        
geometries: {},
        
materials: {},
        
textures: {},
        
objects: {},
        
cameras: {},
        
lights: {},
        
fogs: {},
        
empties: {}
    };
    if (
B.transform) {
        
B.transform.position;
        
B.transform.rotation;
        
B.transform.scale;
        
&& N.scene.position.set(a[0], a[1], a[2]);
        
&& N.scene.rotation.set(t[0], t[1],
            
t[2]);
        
&& N.scene.scale.set(u[0], u[1], u[2]);
        if (
|| || u) {
            
N.scene.updateMatrix();
            
N.scene.updateMatrixWorld()
        }
    }
    
= function(a) {
        return function() {
            
a;
            
h();
            
i.onLoadComplete()
        }
    };
    for (
r in B.cameras) {
        
B.cameras[r];
        
u.type === "perspective" = new THREE.PerspectiveCamera(u.fovu.aspectu.nearu.far) : u.type === "ortho" && (= new THREE.OrthographicCamera(u.leftu.rightu.topu.bottomu.nearu.far));
        
u.position;
        
u.target;
        
u.up;
        
O.position.set(x[0], x[1], x[2]);
        
O.target = new THREE.Vector3(t[0], t[1], t[2]);
        
&& O.up.set(u[0],
            
u[1], u[2]);
        
N.cameras[r] = O
    
}
    for (
p in B.lights) {
        
B.lights[p];
        
t.color !== void 0 t.color 16777215;
        
t.intensity !== void 0 t.intensity 1;
        if (
t.type === "directional") {
            
t.direction;
            
= new THREE.DirectionalLight(rO);
            
v.position.set(x[0], x[1], x[2]);
            
v.position.normalize()
        } else if (
t.type === "point") {
            
t.position;
            
t.distance;
            
= new THREE.PointLight(rOv);
            
v.position.set(x[0], x[1], x[2])
        } else 
t.type === "ambient" && (= new THREE.AmbientLight(r));
        
N.scene.add(v);
        
N.lights[p] = v
    
}
    for (
o in B.fogs) {
        
B.fogs[o];
        
p.type === "linear" ?
            
= new THREE.Fog(0p.nearp.far) : p.type === "exp2" && (= new THREE.FogExp2(0p.density));
        
p.color;
        
X.color.setRGB(u[0], u[1], u[2]);
        
N.fogs[o] = X
    
}
    if (
N.cameras && B.defaults.cameraN.currentCamera N.cameras[B.defaults.camera];
    if (
N.fogs && B.defaults.fogN.scene.fog N.fogs[B.defaults.fog];
    
B.defaults.bgcolor;
    
N.bgColor = new THREE.Color;
    
N.bgColor.setRGB(u[0], u[1], u[2]);
    
N.bgColorAlpha B.defaults.bgalpha;
    for (
l in B.geometries) {
        
B.geometries[l];
        if (
o.type == "bin_mesh" || o.type == "ascii_mesh") {
            
1;
            
i.onLoadStart()
        }
    }
    
aa =
        
Q;
    for (
l in B.geometries) {
        
B.geometries[l];
        if (
o.type === "cube") {
            
= new THREE.CubeGeometry(o.widtho.heighto.deptho.segmentsWidtho.segmentsHeighto.segmentsDepthnullo.flippedo.sides);
            
N.geometries[l] = J
        
} else if (o.type === "plane") {
            
= new THREE.PlaneGeometry(o.widtho.heighto.segmentsWidtho.segmentsHeight);
            
N.geometries[l] = J
        
} else if (o.type === "sphere") {
            
= new THREE.SphereGeometry(o.radiuso.segmentsWidtho.segmentsHeight);
            
N.geometries[l] = J
        
} else if (o.type === "cylinder") {
            
= new THREE.CylinderGeometry(o.topRad,
                
o.botRado.heighto.radSegso.heightSegs);
            
N.geometries[l] = J
        
} else if (o.type === "torus") {
            
= new THREE.TorusGeometry(o.radiuso.tubeo.segmentsRo.segmentsT);
            
N.geometries[l] = J
        
} else if (o.type === "icosahedron") {
            
= new THREE.IcosahedronGeometry(o.radiuso.subdivisions);
            
N.geometries[l] = J
        
} else if (o.type === "bin_mesh"c.load(d(o.urlB.urlBaseType), f(l));
        else if (
o.type === "ascii_mesh"F.load(d(o.urlB.urlBaseType), f(l));
        else if (
o.type === "embedded_mesh") {
            
B.embeds[o.id];
            
o.metadata B.metadata;
            
&& F.createModel(og(l),
                
"")
        }
    }
    for (
q in B.textures) {
        
B.textures[q];
        if (
l.url instanceof Array) {
            
l.url.length;
            for (
0l.url.lengtho++) i.onLoadStart()
        } else {
            
1;
            
i.onLoadStart()
        }
    }
    
E;
    for (
q in B.textures) {
        
B.textures[q];
        if (
l.mapping !== void 0 && THREE[l.mapping] !== void 0l.mapping = new THREE[l.mapping];
        if (
l.url instanceof Array) {
            
l.url.length;
            
= [];
            for (
0oc++) X[c] = d(l.url[c], B.urlBaseType);
            
THREE.ImageUtils.loadTextureCube(Xl.mappinga(o))
        } else {
            
THREE.ImageUtils.loadTexture(d(l.urlB.urlBaseType), l.mappinga(1));
            if (
THREE[l.minFilter] !==
                
void 0o.minFilter THREE[l.minFilter];
            if (
THREE[l.magFilter] !== void 0o.magFilter THREE[l.magFilter];
            if (
l.repeat) {
                
o.repeat.set(l.repeat[0], l.repeat[1]);
                if (
l.repeat[0] !== 1o.wrapS THREE.RepeatWrapping;
                if (
l.repeat[1] !== 1o.wrapT THREE.RepeatWrapping
            
}
            
l.offset && o.offset.set(l.offset[0], l.offset[1]);
            if (
l.wrap) {
                
= {
                    
repeatTHREE.RepeatWrapping,
                    
mirrorTHREE.MirroredRepeatWrapping
                
};
                if (
X[l.wrap[0]] !== void 0o.wrapS X[l.wrap[0]];
                if (
X[l.wrap[1]] !== void 0o.wrapT X[l.wrap[1]]
            }
        }
        
N.textures[q] = o
    
}
    for (
m in B.materials) {
        
=
            
B.materials[m];
        for (
G in w.parameters)
            if (
=== "envMap" || === "map" || === "lightMap"w.parameters[G] = N.textures[w.parameters[G]];
            else if (
=== "shading"w.parameters[G] = w.parameters[G] == "flat" THREE.FlatShading THREE.SmoothShading;
        else if (
=== "blending"w.parameters[G] = w.parameters[Gin THREE THREE[w.parameters[G]] : THREE.NormalBlending;
        else if (
=== "combine"w.parameters[G] = w.parameters[G] == "MixOperation" THREE.MixOperation THREE.MultiplyOperation;
        else if (
=== "vertexColors")
            if (
w.parameters[G] == "face"w.parameters[G] =
                
THREE.FaceColors;
            else if (
w.parameters[G]) w.parameters[G] = THREE.VertexColors;
        if (
w.parameters.opacity !== void 0 && w.parameters.opacity 1w.parameters.transparent true;
        if (
w.parameters.normalMap) {
            
THREE.ShaderUtils.lib.normal;
            
THREE.UniformsUtils.clone(q.uniforms);
            
w.parameters.color;
            
w.parameters.specular;
            
w.parameters.ambient;
            
w.parameters.shininess;
            
a.tNormal.texture N.textures[w.parameters.normalMap];
            if (
w.parameters.normalMapFactora.uNormalScale.value w.parameters.normalMapFactor;
            if (
w.parameters.map) {
                
a.tDiffuse.texture =
                    
w.parameters.map;
                
a.enableDiffuse.value true
            
}
            if (
w.parameters.lightMap) {
                
a.tAO.texture w.parameters.lightMap;
                
a.enableAO.value true
            
}
            if (
w.parameters.specularMap) {
                
a.tSpecular.texture N.textures[w.parameters.specularMap];
                
a.enableSpecular.value true
            
}
            
a.uDiffuseColor.value.setHex(l);
            
a.uSpecularColor.value.setHex(o);
            
a.uAmbientColor.value.setHex(X);
            
a.uShininess.value c;
            if (
w.parameters.opacitya.uOpacity.value w.parameters.opacity;
            
= new THREE.ShaderMaterial({
                
fragmentShaderq.fragmentShader,
                
vertexShaderq.vertexShader,
                
uniformsa,
                
lightstrue,
                
fogtrue
            
})
        } else 
= new THREE[w.type](w.parameters);
        
N.materials[m] = M
    
}
    
e();
    
i.callbackSync(N);
    
h()
};
THREE.TextureLoader = function() {
    
THREE.EventTarget.call(this);
    
this.crossOrigin null
};
THREE.TextureLoader.prototype = {
    
constructorTHREE.TextureLoader,
    
load: function(a) {
        var 
this,
            
= new Image;
        
c.addEventListener("load", function() {
            var 
= new THREE.Texture(c);
            
a.needsUpdate true;
            
b.dispatchEvent({
                
type"load",
                
contenta
            
})
        }, 
false);
        
c.addEventListener("error", function() {
            
b.dispatchEvent({
                
type"error",
                
message"Couldn't load URL [" "]"
            
})
        }, 
false);
        if (
b.crossOriginc.crossOrigin b.crossOrigin;
        
c.src a
    
}
};
THREE.Material = function(a) {
    
|| {};
    
this.id THREE.MaterialCount++;
    
this.name "";
    
this.opacity a.opacity !== void 0 a.opacity 1;
    
this.transparent a.transparent !== void 0 a.transparent false;
    
this.blending a.blending !== void 0 a.blending THREE.NormalBlending;
    
this.blendSrc a.blendSrc !== void 0 a.blendSrc THREE.SrcAlphaFactor;
    
this.blendDst a.blendDst !== void 0 a.blendDst THREE.OneMinusSrcAlphaFactor;
    
this.blendEquation a.blendEquation !== void 0 a.blendEquation THREE.AddEquation;
    
this.depthTest a.depthTest !== void 0 ?
        
a.depthTest true;
    
this.depthWrite a.depthWrite !== void 0 a.depthWrite true;
    
this.polygonOffset a.polygonOffset !== void 0 a.polygonOffset false;
    
this.polygonOffsetFactor a.polygonOffsetFactor !== void 0 a.polygonOffsetFactor 0;
    
this.polygonOffsetUnits a.polygonOffsetUnits !== void 0 a.polygonOffsetUnits 0;
    
this.alphaTest a.alphaTest !== void 0 a.alphaTest 0;
    
this.overdraw a.overdraw !== void 0 a.overdraw false;
    
this.needsUpdate this.visible true
};
THREE.MaterialCount 0;
THREE.LineBasicMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.linewidth a.linewidth !== void 0 a.linewidth 1;
    
this.linecap a.linecap !== void 0 a.linecap "round";
    
this.linejoin a.linejoin !== void 0 a.linejoin "round";
    
this.vertexColors a.vertexColors a.vertexColors false;
    
this.fog a.fog !== void 0 a.fog true
};
THREE.LineBasicMaterial.prototype Object.create(THREE.Material.prototype);
THREE.MeshBasicMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.map a.map !== void 0 a.map null;
    
this.lightMap a.lightMap !== void 0 a.lightMap null;
    
this.envMap a.envMap !== void 0 a.envMap null;
    
this.combine a.combine !== void 0 a.combine THREE.MultiplyOperation;
    
this.reflectivity a.reflectivity !== void 0 a.reflectivity 1;
    
this.refractionRatio a.refractionRatio !== void 0 a.refractionRatio 0.98;
    
this.fog a.fog !== void 0 a.fog :
        
true;
    
this.shading a.shading !== void 0 a.shading THREE.SmoothShading;
    
this.wireframe a.wireframe !== void 0 a.wireframe false;
    
this.wireframeLinewidth a.wireframeLinewidth !== void 0 a.wireframeLinewidth 1;
    
this.wireframeLinecap a.wireframeLinecap !== void 0 a.wireframeLinecap "round";
    
this.wireframeLinejoin a.wireframeLinejoin !== void 0 a.wireframeLinejoin "round";
    
this.vertexColors a.vertexColors !== void 0 a.vertexColors THREE.NoColors;
    
this.skinning a.skinning !== void 0 a.skinning false;
    
this.morphTargets a.morphTargets !==
        
void 0 a.morphTargets false
};
THREE.MeshBasicMaterial.prototype Object.create(THREE.Material.prototype);
THREE.MeshLambertMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.ambient a.ambient !== void 0 ? new THREE.Color(a.ambient) : new THREE.Color(16777215);
    
this.emissive a.emissive !== void 0 ? new THREE.Color(a.emissive) : new THREE.Color(0);
    
this.wrapAround a.wrapAround !== void 0 a.wrapAround false;
    
this.wrapRGB = new THREE.Vector3(111);
    
this.map a.map !== void 0 a.map null;
    
this.lightMap a.lightMap !== void 0 a.lightMap null;
    
this.envMap =
        
a.envMap !== void 0 a.envMap null;
    
this.combine a.combine !== void 0 a.combine THREE.MultiplyOperation;
    
this.reflectivity a.reflectivity !== void 0 a.reflectivity 1;
    
this.refractionRatio a.refractionRatio !== void 0 a.refractionRatio 0.98;
    
this.fog a.fog !== void 0 a.fog true;
    
this.shading a.shading !== void 0 a.shading THREE.SmoothShading;
    
this.wireframe a.wireframe !== void 0 a.wireframe false;
    
this.wireframeLinewidth a.wireframeLinewidth !== void 0 a.wireframeLinewidth 1;
    
this.wireframeLinecap a.wireframeLinecap !== void 0 ?
        
a.wireframeLinecap "round";
    
this.wireframeLinejoin a.wireframeLinejoin !== void 0 a.wireframeLinejoin "round";
    
this.vertexColors a.vertexColors !== void 0 a.vertexColors THREE.NoColors;
    
this.skinning a.skinning !== void 0 a.skinning false;
    
this.morphTargets a.morphTargets !== void 0 a.morphTargets false;
    
this.morphNormals a.morphNormals !== void 0 a.morphNormals false
};
THREE.MeshLambertMaterial.prototype Object.create(THREE.Material.prototype);
THREE.MeshPhongMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.ambient a.ambient !== void 0 ? new THREE.Color(a.ambient) : new THREE.Color(16777215);
    
this.emissive a.emissive !== void 0 ? new THREE.Color(a.emissive) : new THREE.Color(0);
    
this.specular a.specular !== void 0 ? new THREE.Color(a.specular) : new THREE.Color(1118481);
    
this.shininess a.shininess !== void 0 a.shininess 30;
    
this.metal a.metal !== void 0 a.metal false;
    
this.perPixel =
        
a.perPixel !== void 0 a.perPixel false;
    
this.wrapAround a.wrapAround !== void 0 a.wrapAround false;
    
this.wrapRGB = new THREE.Vector3(111);
    
this.map a.map !== void 0 a.map null;
    
this.lightMap a.lightMap !== void 0 a.lightMap null;
    
this.envMap a.envMap !== void 0 a.envMap null;
    
this.combine a.combine !== void 0 a.combine THREE.MultiplyOperation;
    
this.reflectivity a.reflectivity !== void 0 a.reflectivity 1;
    
this.refractionRatio a.refractionRatio !== void 0 a.refractionRatio 0.98;
    
this.fog a.fog !== void 0 a.fog true;
    
this.shading =
        
a.shading !== void 0 a.shading THREE.SmoothShading;
    
this.wireframe a.wireframe !== void 0 a.wireframe false;
    
this.wireframeLinewidth a.wireframeLinewidth !== void 0 a.wireframeLinewidth 1;
    
this.wireframeLinecap a.wireframeLinecap !== void 0 a.wireframeLinecap "round";
    
this.wireframeLinejoin a.wireframeLinejoin !== void 0 a.wireframeLinejoin "round";
    
this.vertexColors a.vertexColors !== void 0 a.vertexColors THREE.NoColors;
    
this.skinning a.skinning !== void 0 a.skinning false;
    
this.morphTargets a.morphTargets !== void 0 ?
        
a.morphTargets false;
    
this.morphNormals a.morphNormals !== void 0 a.morphNormals false
};
THREE.MeshPhongMaterial.prototype Object.create(THREE.Material.prototype);
THREE.MeshDepthMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.shading a.shading !== void 0 a.shading THREE.SmoothShading;
    
this.wireframe a.wireframe !== void 0 a.wireframe false;
    
this.wireframeLinewidth a.wireframeLinewidth !== void 0 a.wireframeLinewidth 1
};
THREE.MeshDepthMaterial.prototype Object.create(THREE.Material.prototype);
THREE.MeshNormalMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.shading a.shading a.shading THREE.FlatShading;
    
this.wireframe a.wireframe a.wireframe false;
    
this.wireframeLinewidth a.wireframeLinewidth a.wireframeLinewidth 1
};
THREE.MeshNormalMaterial.prototype Object.create(THREE.Material.prototype);
THREE.MeshFaceMaterial = function() {};
THREE.ParticleBasicMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.map a.map !== void 0 a.map null;
    
this.size a.size !== void 0 a.size 1;
    
this.sizeAttenuation a.sizeAttenuation !== void 0 a.sizeAttenuation true;
    
this.vertexColors a.vertexColors !== void 0 a.vertexColors false;
    
this.fog a.fog !== void 0 a.fog true
};
THREE.ParticleBasicMaterial.prototype Object.create(THREE.Material.prototype);
THREE.ParticleCanvasMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.program a.program !== void 0 a.program : function() {}
};
THREE.ParticleCanvasMaterial.prototype Object.create(THREE.Material.prototype);
THREE.ParticleDOMMaterial = function(a) {
    
THREE.Material.call(this);
    
this.domElement a
};
THREE.ShaderMaterial = function(a) {
    
THREE.Material.call(thisa);
    
|| {};
    
this.fragmentShader a.fragmentShader !== void 0 a.fragmentShader "void main() {}";
    
this.vertexShader a.vertexShader !== void 0 a.vertexShader "void main() {}";
    
this.uniforms a.uniforms !== void 0 a.uniforms : {};
    
this.attributes a.attributes;
    
this.shading a.shading !== void 0 a.shading THREE.SmoothShading;
    
this.wireframe a.wireframe !== void 0 a.wireframe false;
    
this.wireframeLinewidth a.wireframeLinewidth !== void 0 a.wireframeLinewidth 1;
    
this.fog =
        
a.fog !== void 0 a.fog false;
    
this.lights a.lights !== void 0 a.lights false;
    
this.vertexColors a.vertexColors !== void 0 a.vertexColors THREE.NoColors;
    
this.skinning a.skinning !== void 0 a.skinning false;
    
this.morphTargets a.morphTargets !== void 0 a.morphTargets false;
    
this.morphNormals a.morphNormals !== void 0 a.morphNormals false
};
THREE.ShaderMaterial.prototype Object.create(THREE.Material.prototype);
THREE.Texture = function(abcdefghi) {
    
this.id THREE.TextureCount++;
    
this.image a;
    
this.mapping !== void 0 : new THREE.UVMapping;
    
this.wrapS !== void 0 THREE.ClampToEdgeWrapping;
    
this.wrapT !== void 0 THREE.ClampToEdgeWrapping;
    
this.magFilter !== void 0 THREE.LinearFilter;
    
this.minFilter !== void 0 THREE.LinearMipMapLinearFilter;
    
this.anisotropy !== void 0 1;
    
this.format !== void 0 THREE.RGBAFormat;
    
this.type !== void 0 THREE.UnsignedByteType;
    
this.offset = new THREE.Vector2(00);
    
this.repeat =
        new 
THREE.Vector2(11);
    
this.generateMipmaps true;
    
this.premultiplyAlpha false;
    
this.flipY true;
    
this.needsUpdate false;
    
this.onUpdate null
};
THREE.Texture.prototype = {
    
constructorTHREE.Texture,
    clone: function() {
        var 
= new THREE.Texture(this.imagethis.mappingthis.wrapSthis.wrapTthis.magFilterthis.minFilterthis.formatthis.typethis.anisotropy);
        
a.offset.copy(this.offset);
        
a.repeat.copy(this.repeat);
        
a.generateMipmaps this.generateMipmaps;
        
a.premultiplyAlpha this.premultiplyAlpha;
        
a.flipY this.flipY;
        return 
a
    
}
};
THREE.TextureCount 0;
THREE.DataTexture = function(abcdefghij) {
    
THREE.Texture.call(thisnullfghijde);
    
this.image = {
        
dataa,
        
widthb,
        
heightc
    
}
};
THREE.DataTexture.prototype Object.create(THREE.Texture.prototype);
THREE.DataTexture.prototype.clone = function() {
    var 
= new THREE.DataTexture(this.image.datathis.image.widththis.image.heightthis.formatthis.typethis.mappingthis.wrapSthis.wrapTthis.magFilterthis.minFilter);
    
a.offset.copy(this.offset);
    
a.repeat.copy(this.repeat);
    return 
a
};
THREE.Particle = function(a) {
    
THREE.Object3D.call(this);
    
this.material a
};
THREE.Particle.prototype Object.create(THREE.Object3D.prototype);
THREE.ParticleSystem = function(ab) {
    
THREE.Object3D.call(this);
    
this.geometry a;
    
this.material !== void 0 : new THREE.ParticleBasicMaterial({
        
colorMath.random() * 16777215
    
});
    
this.sortParticles false;
    if (
this.geometry) {
        
this.geometry.boundingSphere || this.geometry.computeBoundingSphere();
        
this.boundRadius a.boundingSphere.radius
    
}
    
this.frustumCulled false
};
THREE.ParticleSystem.prototype Object.create(THREE.Object3D.prototype);
THREE.Line = function(abc) {
    
THREE.Object3D.call(this);
    
this.geometry a;
    
this.material !== void 0 : new THREE.LineBasicMaterial({
        
colorMath.random() * 16777215
    
});
    
this.type !== void 0 THREE.LineStrip;
    
this.geometry && (this.geometry.boundingSphere || this.geometry.computeBoundingSphere())
};
THREE.LineStrip 0;
THREE.LinePieces 1;
THREE.Line.prototype Object.create(THREE.Object3D.prototype);
THREE.Mesh = function(ab) {
    
THREE.Object3D.call(this);
    
this.geometry a;
    
this.material !== void 0 : new THREE.MeshBasicMaterial({
        
colorMath.random() * 16777215,
        
wireframetrue
    
});
    if (
this.geometry) {
        
this.geometry.boundingSphere || this.geometry.computeBoundingSphere();
        
this.boundRadius a.boundingSphere.radius;
        if (
this.geometry.morphTargets.length) {
            
this.morphTargetBase = -1;
            
this.morphTargetForcedOrder = [];
            
this.morphTargetInfluences = [];
            
this.morphTargetDictionary = {};
            for (var 
0this.geometry.morphTargets.lengthc++) {
                
this.morphTargetInfluences.push(0);
                
this.morphTargetDictionary[this.geometry.morphTargets[c].name] = c
            
}
        }
    }
};
THREE.Mesh.prototype Object.create(THREE.Object3D.prototype);
THREE.Mesh.prototype.getMorphTargetIndexByName = function(a) {
    if (
this.morphTargetDictionary[a] !== void 0) return this.morphTargetDictionary[a];
    
console.log("THREE.Mesh.getMorphTargetIndexByName: morph target " " does not exist. Returning 0.");
    return 
0
};
THREE.Bone = function(a) {
    
THREE.Object3D.call(this);
    
this.skin a;
    
this.skinMatrix = new THREE.Matrix4
};
THREE.Bone.prototype Object.create(THREE.Object3D.prototype);
THREE.Bone.prototype.update = function(ab) {
    
this.matrixAutoUpdate && (this.updateMatrix());
    if (
|| this.matrixWorldNeedsUpdate) {
        
this.skinMatrix.multiply(athis.matrix) : this.skinMatrix.copy(this.matrix);
        
this.matrixWorldNeedsUpdate false;
        
true
    
}
    var 
cthis.children.length;
    for (
0dc++) this.children[c].update(this.skinMatrixb)
};
THREE.SkinnedMesh = function(abc) {
    
THREE.Mesh.call(thisab);
    
this.useVertexTexture !== void 0 true;
    
this.identityMatrix = new THREE.Matrix4;
    
this.bones = [];
    
this.boneMatrices = [];
    var 
def;
    if (
this.geometry.bones !== void 0) {
        for (
0this.geometry.bones.lengtha++) {
            
this.geometry.bones[a];
            
c.pos;
            
c.rotq;
            
c.scl;
            
this.addBone();
            
b.name c.name;
            
b.position.set(d[0], d[1], d[2]);
            
b.quaternion.set(e[0], e[1], e[2], e[3]);
            
b.useQuaternion true;
            
!== void 0 b.scale.set(f[0], f[1], f[2]) : b.scale.set(111)
        }
        for (
0this.bones.lengtha++) {
            
=
                
this.geometry.bones[a];
            
this.bones[a];
            
c.parent === -this.add(b) : this.bones[c.parent].add(b)
        }
        
this.bones.length;
        if (
this.useVertexTexture) {
            
this.boneTextureHeight this.boneTextureWidth 256 64 64 32 16 16 8;
            
this.boneMatrices = new Float32Array(this.boneTextureWidth this.boneTextureHeight 4);
            
this.boneTexture = new THREE.DataTexture(this.boneMatricesthis.boneTextureWidththis.boneTextureHeightTHREE.RGBAFormatTHREE.FloatType);
            
this.boneTexture.minFilter THREE.NearestFilter;
            
this.boneTexture.magFilter =
                
THREE.NearestFilter;
            
this.boneTexture.generateMipmaps false;
            
this.boneTexture.flipY false
        
} else this.boneMatrices = new Float32Array(16 a);
        
this.pose()
    }
};
THREE.SkinnedMesh.prototype Object.create(THREE.Mesh.prototype);
THREE.SkinnedMesh.prototype.addBone = function(a) {
    
=== void 0 && (= new THREE.Bone(this));
    
this.bones.push(a);
    return 
a
};
THREE.SkinnedMesh.prototype.updateMatrixWorld = function(a) {
    
this.matrixAutoUpdate && this.updateMatrix();
    if (
this.matrixWorldNeedsUpdate || a) {
        
this.parent this.matrixWorld.multiply(this.parent.matrixWorldthis.matrix) : this.matrixWorld.copy(this.matrix);
        
this.matrixWorldNeedsUpdate false
    
}
    for (var 
0this.children.lengthba++) {
        var 
this.children[a];
        
instanceof THREE.Bone c.update(this.identityMatrixfalse) : c.updateMatrixWorld(true)
    }
    for (var 
this.bones.lengththis.bonesthis.boneMatrices0ba++) c[a].skinMatrix.flattenToArrayOffset(d,
        
16);
    if (
this.useVertexTexturethis.boneTexture.needsUpdate true
};
THREE.SkinnedMesh.prototype.pose = function() {
    
this.updateMatrixWorld(true);
    for (var 
a= [], 0this.bones.lengthc++) {
        
this.bones[c];
        var 
= new THREE.Matrix4;
        
d.getInverse(a.skinMatrix);
        
b.push(d);
        
a.skinMatrix.flattenToArrayOffset(this.boneMatrices16)
    }
    if (
this.geometry.skinVerticesA === void 0) {
        
this.geometry.skinVerticesA = [];
        
this.geometry.skinVerticesB = [];
        for (
0this.geometry.skinIndices.lengtha++) {
            var 
this.geometry.vertices[a],
                
this.geometry.skinIndices[a].x,
                
this.geometry.skinIndices[a].y,
                
= new THREE.Vector3(c.xc.yc.z);
            
this.geometry.skinVerticesA.push(b[e].multiplyVector3(d));
            
= new THREE.Vector3(c.xc.yc.z);
            
this.geometry.skinVerticesB.push(b[f].multiplyVector3(d));
            if (
this.geometry.skinWeights[a].this.geometry.skinWeights[a].!== 1) {
                
= (- (this.geometry.skinWeights[a].this.geometry.skinWeights[a].y)) * 0.5;
                
this.geometry.skinWeights[a].this.geometry.skinWeights[a].c;
                
this.geometry.skinWeights[a].this.geometry.skinWeights[a].c
            
}
        }
    }
};
THREE.MorphAnimMesh = function(ab) {
    
THREE.Mesh.call(thisab);
    
this.duration 1E3;
    
this.mirroredLoop false;
    
this.currentKeyframe this.lastKeyframe this.time 0;
    
this.direction 1;
    
this.directionBackwards false;
    
this.setFrameRange(0this.geometry.morphTargets.length 1)
};
THREE.MorphAnimMesh.prototype Object.create(THREE.Mesh.prototype);
THREE.MorphAnimMesh.prototype.setFrameRange = function(ab) {
    
this.startKeyframe a;
    
this.endKeyframe b;
    
this.length this.endKeyframe this.startKeyframe 1
};
THREE.MorphAnimMesh.prototype.setDirectionForward = function() {
    
this.direction 1;
    
this.directionBackwards false
};
THREE.MorphAnimMesh.prototype.setDirectionBackward = function() {
    
this.direction = -1;
    
this.directionBackwards true
};
THREE.MorphAnimMesh.prototype.parseAnimations = function() {
    var 
this.geometry;
    if (!
a.animationsa.animations = {};
    for (var 
ba.animations= /([a-z]+)(d+)/, 0a.morphTargets.lengthfe++) {
        var 
a.morphTargets[e].name.match(d);
        if (
&& g.length 1) {
            
g[1];
            
c[g] || (c[g] = {
                
startInfinity,
                
end: -Infinity
            
});
            var 
c[g];
            if (
h.starth.start e;
            if (
h.endh.end e;
            
|| (g)
        }
    }
    
a.firstAnimation b
};
THREE.MorphAnimMesh.prototype.setAnimationLabel = function(abc) {
    if (!
this.geometry.animationsthis.geometry.animations = {};
    
this.geometry.animations[a] = {
        
startb,
        
endc
    
}
};
THREE.MorphAnimMesh.prototype.playAnimation = function(ab) {
    var 
this.geometry.animations[a];
    if (
c) {
        
this.setFrameRange(c.startc.end);
        
this.duration 1E3 * ((c.end c.start) / b);
        
this.time 0
    
} else console.warn("animation[" "] undefined")
};
THREE.MorphAnimMesh.prototype.updateAnimation = function(a) {
    var 
this.duration this.length;
    
this.time this.time this.direction a;
    if (
this.mirroredLoop) {
        if (
this.time this.duration || this.time 0) {
            
this.direction this.direction * -1;
            if (
this.time this.duration) {
                
this.time this.duration;
                
this.directionBackwards true
            
}
            if (
this.time 0) {
                
this.time 0;
                
this.directionBackwards false
            
}
        }
    } else {
        
this.time this.time this.duration;
        if (
this.time 0this.time this.time this.duration
    
}
    
this.startKeyframe THREE.Math.clamp(Math.floor(this.time /
        
b), 0this.length 1);
    if (
!== this.currentKeyframe) {
        
this.morphTargetInfluences[this.lastKeyframe] = 0;
        
this.morphTargetInfluences[this.currentKeyframe] = 1;
        
this.morphTargetInfluences[a] = 0;
        
this.lastKeyframe this.currentKeyframe;
        
this.currentKeyframe a
    
}
    
this.time b;
    
this.directionBackwards && (b);
    
this.morphTargetInfluences[this.currentKeyframe] = b;
    
this.morphTargetInfluences[this.lastKeyframe] = b
};
THREE.Ribbon = function(ab) {
    
THREE.Object3D.call(this);
    
this.geometry a;
    
this.material b
};
THREE.Ribbon.prototype Object.create(THREE.Object3D.prototype);
THREE.LOD = function() {
    
THREE.Object3D.call(this);
    
this.LODs = []
};
THREE.LOD.prototype Object.create(THREE.Object3D.prototype);
THREE.LOD.prototype.addLevel = function(ab) {
    
=== void 0 && (0);
    for (var 
Math.abs(b), 0this.LODs.lengthc++)
        if (
this.LODs[c].visibleAtDistance) break;
    
this.LODs.splice(c0, {
        
visibleAtDistanceb,
        
object3Da
    
});
    
this.add(a)
};
THREE.LOD.prototype.update = function(a) {
    if (
this.LODs.length 1) {
        
a.matrixWorldInverse.getInverse(a.matrixWorld);
        
a.matrixWorldInverse;
        
= -(a.elements[2] * this.matrixWorld.elements[12] + a.elements[6] * this.matrixWorld.elements[13] + a.elements[10] * this.matrixWorld.elements[14] + a.elements[14]);
        
this.LODs[0].object3D.visible true;
        for (var 
1this.LODs.lengthb++)
            if (
>= this.LODs[b].visibleAtDistance) {
                
this.LODs[1].object3D.visible false;
                
this.LODs[b].object3D.visible true
            
} else break;
        for (; 
this.LODs.lengthb++) this.LODs[b].object3D.visible =
            
false
    
}
};
THREE.Sprite = function(a) {
    
THREE.Object3D.call(this);
    
this.color a.color !== void 0 ? new THREE.Color(a.color) : new THREE.Color(16777215);
    
this.map a.map !== void 0 a.map : new THREE.Texture;
    
this.blending a.blending !== void 0 a.blending THREE.NormalBlending;
    
this.blendSrc a.blendSrc !== void 0 a.blendSrc THREE.SrcAlphaFactor;
    
this.blendDst a.blendDst !== void 0 a.blendDst THREE.OneMinusSrcAlphaFactor;
    
this.blendEquation a.blendEquation !== void 0 a.blendEquation THREE.AddEquation;
    
this.useScreenCoordinates a.useScreenCoordinates !== void 0 ?
        
a.useScreenCoordinates true;
    
this.mergeWith3D a.mergeWith3D !== void 0 a.mergeWith3D : !this.useScreenCoordinates;
    
this.affectedByDistance a.affectedByDistance !== void 0 a.affectedByDistance : !this.useScreenCoordinates;
    
this.scaleByViewport a.scaleByViewport !== void 0 a.scaleByViewport : !this.affectedByDistance;
    
this.alignment a.alignment instanceof THREE.Vector2 a.alignment THREE.SpriteAlignment.center;
    
this.rotation3d this.rotation;
    
this.rotation 0;
    
this.opacity 1;
    
this.uvOffset = new THREE.Vector2(00);
    
this.uvScale =
        new 
THREE.Vector2(11)
};
THREE.Sprite.prototype Object.create(THREE.Object3D.prototype);
THREE.Sprite.prototype.updateMatrix = function() {
    
this.matrix.setPosition(this.position);
    
this.rotation3d.set(00this.rotation);
    
this.matrix.setRotationFromEuler(this.rotation3d);
    if (
this.scale.!== || this.scale.!== 1) {
        
this.matrix.scale(this.scale);
        
this.boundRadiusScale Math.max(this.scale.xthis.scale.y)
    }
    
this.matrixWorldNeedsUpdate true
};
THREE.SpriteAlignment = {};
THREE.SpriteAlignment.topLeft = new THREE.Vector2(1, -1);
THREE.SpriteAlignment.topCenter = new THREE.Vector2(0, -1);
THREE.SpriteAlignment.topRight = new THREE.Vector2(-1, -1);
THREE.SpriteAlignment.centerLeft = new THREE.Vector2(10);
THREE.SpriteAlignment.center = new THREE.Vector2(00);
THREE.SpriteAlignment.centerRight = new THREE.Vector2(-10);
THREE.SpriteAlignment.bottomLeft = new THREE.Vector2(11);
THREE.SpriteAlignment.bottomCenter = new THREE.Vector2(01);
THREE.SpriteAlignment.bottomRight = new THREE.Vector2(-11);
THREE.Scene = function() {
    
THREE.Object3D.call(this);
    
this.overrideMaterial this.fog null;
    
this.matrixAutoUpdate false;
    
this.__objects = [];
    
this.__lights = [];
    
this.__objectsAdded = [];
    
this.__objectsRemoved = []
};
THREE.Scene.prototype Object.create(THREE.Object3D.prototype);
THREE.Scene.prototype.__addObject = function(a) {
    if (
instanceof THREE.Light) {
        
this.__lights.indexOf(a) === -&& this.__lights.push(a);
        
a.target && a.target.parent === void 0 && this.add(a.target)
    } else if (!(
instanceof THREE.Camera || instanceof THREE.Bone) && this.__objects.indexOf(a) === -1) {
        
this.__objects.push(a);
        
this.__objectsAdded.push(a);
        var 
this.__objectsRemoved.indexOf(a);
        
!== -&& this.__objectsRemoved.splice(b1)
    }
    for (
0a.children.lengthb++) this.__addObject(a.children[b])
};
THREE.Scene.prototype.__removeObject = function(a) {
    if (
instanceof THREE.Light) {
        var 
this.__lights.indexOf(a);
        
!== -&& this.__lights.splice(b1)
    } else if (!(
instanceof THREE.Camera)) {
        
this.__objects.indexOf(a);
        if (
!== -1) {
            
this.__objects.splice(b1);
            
this.__objectsRemoved.push(a);
            
this.__objectsAdded.indexOf(a);
            
!== -&& this.__objectsAdded.splice(b1)
        }
    }
    for (
0a.children.lengthb++) this.__removeObject(a.children[b])
};
THREE.Fog = function(abc) {
    
this.color = new THREE.Color(a);
    
this.near !== void 0 1;
    
this.far !== void 0 1E3
};
THREE.FogExp2 = function(ab) {
    
this.color = new THREE.Color(a);
    
this.density !== void 0 2.5E-4
};
THREE.CanvasRenderer = function(a) {
    function 
b(a) {
        if (
!== ao.globalAlpha a
    
}

    function 
c(a) {
        if (
!== a) {
            if (
=== THREE.NormalBlendingo.globalCompositeOperation "source-over";
            else if (
=== THREE.AdditiveBlendingo.globalCompositeOperation "lighter";
            else if (
=== THREE.SubtractiveBlendingo.globalCompositeOperation "darker";
            
a
        
}
    }

    function 
d(a) {
        if (
!== ao.strokeStyle a
    
}

    function 
e(a) {
        if (
!== ao.fillStyle a
    
}
    
console.log("THREE.CanvasRenderer"THREE.REVISION);
    var 
|| {},
        
this,
        
ghi= new THREE.Projector,
        
a.canvas !==
        
void 0 a.canvas document.createElement("canvas"),
        
mnprl.getContext("2d"),
        
= new THREE.Color(0),
        
0,
        
1,
        
0,
        
null,
        
null,
        
null,
        
null,
        
null,
        
uGJM= new THREE.RenderableVertex,
        
= new THREE.RenderableVertex,
        
BFQEaaTNWbaHcaia= new THREE.Color,
        
= new THREE.Color,
        
= new THREE.Color,
        
= new THREE.Color,
        
fa = new THREE.Color,
        
ma = [],
        
Ga = [],
        
naOaPabbnbgbObobkbecUa = new THREE.Rectangle,
        
Da = new THREE.Rectangle,
        
Aa = new THREE.Rectangle,
        
hb false,
        
qa = new THREE.Color,
        
Fa = new THREE.Color,
        
Ra = new THREE.Color,
        
sa = new THREE.Vector3,
        
kYaGbVapbcb16;
    
document.createElement("canvas");
    
k.width k.height 2;
    
Ya k.getContext("2d");
    
Ya.fillStyle "rgba(0,0,0,1)";
    
Ya.fillRect(0022);
    
Gb Ya.getImageData(0022);
    
Va Gb.data;
    
pb document.createElement("canvas");
    
pb.width pb.height a;
    
cb pb.getContext("2d");
    
cb.translate(-2, -2);
    
cb.scale(aa);
    
a--;
    
this.domElement l;
    
this.sortElements this.sortObjects this.autoClear true;
    
this.info = {
        
render: {
            
vertices0,
            
faces0
        
}
    };
    
this.setSize = function(ab) {
        
a;
        
b;
        
Math.floor(2);
        
Math.floor(/
            
2);
        
l.width m;
        
l.height n;
        
Ua.set(-p, -rpr);
        
Da.set(-p, -rpr);
        
1;
        
0;
        
null
    
};
    
this.setClearColor = function(ab) {
        
q.copy(a);
        
!== void 0 1;
        
Da.set(-p, -rpr)
    };
    
this.setClearColorHex = function(ab) {
        
q.setHex(a);
        
!== void 0 1;
        
Da.set(-p, -rpr)
    };
    
this.clear = function() {
        
o.setTransform(100, -1pr);
        if (
Da.isEmpty() === false) {
            
Da.minSelf(Ua);
            
Da.inflate(2);
            
&& o.clearRect(Math.floor(Da.getX()), Math.floor(Da.getY()), Math.floor(Da.getWidth()), Math.floor(Da.getHeight()));
            if (
0) {
                
c(THREE.NormalBlending);
                
b(1);
                
e("rgba(" Math.floor(q.255) + "," Math.floor(q.255) + "," Math.floor(q.255) + "," ")");
                
o.fillRect(Math.floor(Da.getX()), Math.floor(Da.getY()), Math.floor(Da.getWidth()), Math.floor(Da.getHeight()))
            }
            
Da.empty()
        }
    };
    
this.render = function(al) {
        function 
m(a) {
            var 
bcde;
            
qa.setRGB(000);
            
Fa.setRGB(000);
            
Ra.setRGB(000);
            
0;
            for (
a.lengthcb++) {
                
a[b];
                
d.color;
                if (
instanceof THREE.AmbientLight) {
                    
qa.qa.e.r;
                    
qa.qa.e.g;
                    
qa.qa.e.b
                
} else if (instanceof THREE.DirectionalLight) {
                    
Fa.Fa.e.r;
                    
Fa.=
                        
Fa.e.g;
                    
Fa.Fa.e.b
                
} else if (instanceof THREE.PointLight) {
                    
Ra.Ra.e.r;
                    
Ra.Ra.e.g;
                    
Ra.Ra.e.b
                
}
            }
        }

        function 
n(abcd) {
            var 
efghki;
            
0;
            for (
a.lengthfe++) {
                
a[e];
                
g.color;
                if (
instanceof THREE.DirectionalLight) {
                    
g.matrixWorld.getPosition();
                    
c.dot(k);
                    if (!(
<= 0)) {
                        
g.intensity;
                        
d.d.h.i;
                        
d.d.h.i;
                        
d.d.h.i
                    
}
                } else if (
instanceof THREE.PointLight) {
                    
g.matrixWorld.getPosition();
                    
c.dot(sa.sub(kb).normalize());
                    if (!(
<= 0)) {
                        
* (g.distance == Math.min(b.distanceTo(k) /
                            
g.distance1));
                        if (
!= 0) {
                            
g.intensity;
                            
d.d.h.i;
                            
d.d.h.i;
                            
d.d.h.i
                        
}
                    }
                }
            }
        }

        function 
q(afg) {
            
b(g.opacity);
            
c(g.blending);
            var 
hkijlm;
            if (
instanceof THREE.ParticleBasicMaterial) {
                if (
g.map !== null) {
                    
g.map.image;
                    
j.width >> 1;
                    
j.height >> 1;
                    
f.scale.p;
                    
f.scale.r;
                    
l;
                    
m;
                    
Aa.set(a.ha.ka.ha.k);
                    if (
Ua.intersects(Aa) !== false) {
                        
o.save();
                        
o.translate(a.xa.y);
                        
o.rotate(-f.rotation);
                        
o.scale(g, -i);
                        
o.translate(-l, -m);
                        
o.drawImage(j00);
                        
o.restore()
                    }
                }
            } else if (
instanceof THREE.ParticleCanvasMaterial) {
                
=
                    
f.scale.p;
                
f.scale.r;
                
Aa.set(a.ha.ka.ha.k);
                if (
Ua.intersects(Aa) !== false) {
                    
d(g.color.getContextStyle());
                    
e(g.color.getContextStyle());
                    
o.save();
                    
o.translate(a.xa.y);
                    
o.rotate(-f.rotation);
                    
o.scale(hk);
                    
g.program(o);
                    
o.restore()
                }
            }
        }

        function 
s(aefg) {
            
b(g.opacity);
            
c(g.blending);
            
o.beginPath();
            
o.moveTo(a.positionScreen.xa.positionScreen.y);
            
o.lineTo(e.positionScreen.xe.positionScreen.y);
            
o.closePath();
            if (
instanceof THREE.LineBasicMaterial) {
                
g.linewidth;
                if (
!== ao.lineWidth a;
                
g.linecap;
                if (
!== ao.lineCap a;
                
g.linejoin;
                if (
!== ao.lineJoin a;
                
d(g.color.getContextStyle());
                
o.stroke();
                
Aa.inflate(g.linewidth 2)
            }
        }

        function 
t(adeghkjm) {
            
f.info.render.vertices f.info.render.vertices 3;
            
f.info.render.faces++;
            
b(m.opacity);
            
c(m.blending);
            
a.positionScreen.x;
            
a.positionScreen.y;
            
d.positionScreen.x;
            
d.positionScreen.y;
            
aa e.positionScreen.x;
            
e.positionScreen.y;
            
w(BFQEaaT);
            if (
instanceof THREE.MeshBasicMaterial)
                if (
m.map !== null) {
                    if (
m.map.mapping instanceof THREE.UVMapping) {
                        
bb j.uvs[0];
                        
kd(BFQEaaTbb[g].ubb[g].vbb[h].ubb[h].vbb[k].ubb[k].vm.map)
                    }
                } else if (
m.envMap !== null) {
                if (
m.envMap.mapping instanceof THREE.SphericalReflectionMapping) {
                    
l.matrixWorldInverse;
                    
sa.copy(j.vertexNormalsWorld[g]);
                    
nb = (sa.a.elements[0] + sa.a.elements[4] + sa.a.elements[8]) * 0.5 0.5;
                    
gb = (sa.a.elements[1] + sa.a.elements[5] + sa.a.elements[9]) * 0.5 0.5;
                    
sa.copy(j.vertexNormalsWorld[h]);
                    
Ob = (sa.a.elements[0] + sa.a.elements[4] + sa.a.elements[8]) * 0.5 0.5;
                    
ob = (sa.a.elements[1] + sa.a.elements[5] +
                        
sa.a.elements[9]) * 0.5 0.5;
                    
sa.copy(j.vertexNormalsWorld[k]);
                    
kb = (sa.a.elements[0] + sa.a.elements[4] + sa.a.elements[8]) * 0.5 0.5;
                    
ec = (sa.a.elements[1] + sa.a.elements[5] + sa.a.elements[9]) * 0.5 0.5;
                    
kd(BFQEaaTnbgbObobkbecm.envMap)
                }
            } else 
m.wireframe === true Pb(m.colorm.wireframeLinewidthm.wireframeLinecapm.wireframeLinejoin) : Hb(m.color);
            else if (
instanceof THREE.MeshLambertMaterial)
                if (
hb === true)
                    if (
m.wireframe === false && m.shading == THREE.SmoothShading && j.vertexNormalsWorld.length == 3) {
                        
R.=
                            
P.U.qa.r;
                        
R.P.U.qa.g;
                        
R.P.U.qa.b;
                        
n(ij.v1.positionWorldj.vertexNormalsWorld[0], R);
                        
n(ij.v2.positionWorldj.vertexNormalsWorld[1], P);
                        
n(ij.v3.positionWorldj.vertexNormalsWorld[2], U);
                        
R.Math.max(0Math.min(m.color.R.r1));
                        
R.Math.max(0Math.min(m.color.R.g1));
                        
R.Math.max(0Math.min(m.color.R.b1));
                        
P.Math.max(0Math.min(m.color.P.r1));
                        
P.Math.max(0Math.min(m.color.P.g1));
                        
P.Math.max(0Math.min(m.color.P.b1));
                        
U.Math.max(0Math.min(m.color.U.r1));
                        
U.Math.max(0,
                            
Math.min(m.color.U.g1));
                        
U.Math.max(0Math.min(m.color.U.b1));
                        
fa.= (P.U.r) * 0.5;
                        
fa.= (P.U.g) * 0.5;
                        
fa.= (P.U.b) * 0.5;
                        
Pa Ic(RPUfa);
                        
mc(BFQEaaT001001Pa)
                    } else {
                        
S.qa.r;
                        
S.qa.g;
                        
S.qa.b;
                        
n(ij.centroidWorldj.normalWorldS);
                        
S.Math.max(0Math.min(m.color.S.r1));
                        
S.Math.max(0Math.min(m.color.S.g1));
                        
S.Math.max(0Math.min(m.color.S.b1));
                        
m.wireframe === true Pb(Sm.wireframeLinewidthm.wireframeLinecapm.wireframeLinejoin) : Hb(S)
                    } else 
m.wireframe === true Pb(m.colorm.wireframeLinewidth,
                
m.wireframeLinecapm.wireframeLinejoin) : Hb(m.color);
            else if (
instanceof THREE.MeshDepthMaterial) {
                
na l.near;
                
Oa l.far;
                
R.R.R.gc(a.positionScreen.znaOa);
                
P.P.P.gc(d.positionScreen.znaOa);
                
U.U.U.gc(e.positionScreen.znaOa);
                
fa.= (P.U.r) * 0.5;
                
fa.= (P.U.g) * 0.5;
                
fa.= (P.U.b) * 0.5;
                
Pa Ic(RPUfa);
                
mc(BFQEaaT001001Pa)
            } else if (
instanceof THREE.MeshNormalMaterial) {
                
S.nc(j.normalWorld.x);
                
S.nc(j.normalWorld.y);
                
S.nc(j.normalWorld.z);
                
m.wireframe === true Pb(Sm.wireframeLinewidth,
                    
m.wireframeLinecapm.wireframeLinejoin) : Hb(S)
            }
        }

        function 
v(adeghkjmo) {
            
f.info.render.vertices f.info.render.vertices 4;
            
f.info.render.faces++;
            
b(m.opacity);
            
c(m.blending);
            if (
m.map !== void 0 && m.map !== null || m.envMap !== void 0 && m.envMap !== null) {
                
t(adg013jmo);
                
t(hek123jmo)
            } else {
                
a.positionScreen.x;
                
a.positionScreen.y;
                
d.positionScreen.x;
                
d.positionScreen.y;
                
aa e.positionScreen.x;
                
e.positionScreen.y;
                
g.positionScreen.x;
                
g.positionScreen.y;
                
ba h.positionScreen.x;
                
h.positionScreen.y;
                
ca k.positionScreen.x;
                
ia k.positionScreen.y;
                if (
instanceof THREE.MeshBasicMaterial) {
                    
x(BFQEaaTNW);
                    
m.wireframe === true Pb(m.colorm.wireframeLinewidthm.wireframeLinecapm.wireframeLinejoin) : Hb(m.color)
                } else if (
instanceof THREE.MeshLambertMaterial)
                    if (
hb === true)
                        if (!
m.wireframe && m.shading == THREE.SmoothShading && j.vertexNormalsWorld.length == 4) {
                            
R.P.U.fa.qa.r;
                            
R.P.U.fa.qa.g;
                            
R.P.U.fa.qa.b;
                            
n(ij.v1.positionWorldj.vertexNormalsWorld[0], R);
                            
n(ij.v2.positionWorldj.vertexNormalsWorld[1],
                                
P);
                            
n(ij.v4.positionWorldj.vertexNormalsWorld[3], U);
                            
n(ij.v3.positionWorldj.vertexNormalsWorld[2], fa);
                            
R.Math.max(0Math.min(m.color.R.r1));
                            
R.Math.max(0Math.min(m.color.R.g1));
                            
R.Math.max(0Math.min(m.color.R.b1));
                            
P.Math.max(0Math.min(m.color.P.r1));
                            
P.Math.max(0Math.min(m.color.P.g1));
                            
P.Math.max(0Math.min(m.color.P.b1));
                            
U.Math.max(0Math.min(m.color.U.r1));
                            
U.Math.max(0Math.min(m.color.U.g1));
                            
U.Math.max(0Math.min(m.color.U.b1));
                            
fa.Math.max(0Math.min(m.color.*
                                
fa.r1));
                            
fa.Math.max(0Math.min(m.color.fa.g1));
                            
fa.Math.max(0Math.min(m.color.fa.b1));
                            
Pa Ic(RPUfa);
                            
w(BFQENW);
                            
mc(BFQENW001001Pa);
                            
w(baHaaTcaia);
                            
mc(baHaaTcaia101101Pa)
                        } else {
                            
S.qa.r;
                            
S.qa.g;
                            
S.qa.b;
                            
n(ij.centroidWorldj.normalWorldS);
                            
S.Math.max(0Math.min(m.color.S.r1));
                            
S.Math.max(0Math.min(m.color.S.g1));
                            
S.Math.max(0Math.min(m.color.S.b1));
                            
x(BFQEaaTNW);
                            
m.wireframe === true Pb(Sm.wireframeLinewidthm.wireframeLinecapm.wireframeLinejoin) :
                                
Hb(S)
                        } else {
                    
x(BFQEaaTNW);
                    
m.wireframe === true Pb(m.colorm.wireframeLinewidthm.wireframeLinecapm.wireframeLinejoin) : Hb(m.color)
                } else if (
instanceof THREE.MeshNormalMaterial) {
                    
S.nc(j.normalWorld.x);
                    
S.nc(j.normalWorld.y);
                    
S.nc(j.normalWorld.z);
                    
x(BFQEaaTNW);
                    
m.wireframe === true Pb(Sm.wireframeLinewidthm.wireframeLinecapm.wireframeLinejoin) : Hb(S)
                } else if (
instanceof THREE.MeshDepthMaterial) {
                    
na l.near;
                    
Oa l.far;
                    
R.R.R.gc(a.positionScreen.znaOa);
                    
P.P.P.gc(d.positionScreen.z,
                        
naOa);
                    
U.U.U.gc(g.positionScreen.znaOa);
                    
fa.fa.fa.gc(e.positionScreen.znaOa);
                    
Pa Ic(RPUfa);
                    
w(BFQENW);
                    
mc(BFQENW001001Pa);
                    
w(baHaaTcaia);
                    
mc(baHaaTcaia101101Pa)
                }
            }
        }

        function 
w(abcdef) {
            
o.beginPath();
            
o.moveTo(ab);
            
o.lineTo(cd);
            
o.lineTo(ef);
            
o.lineTo(ab)
        }

        function 
x(abcdefgh) {
            
o.beginPath();
            
o.moveTo(ab);
            
o.lineTo(cd);
            
o.lineTo(ef);
            
o.lineTo(gh);
            
o.lineTo(ab)
        }

        function 
Pb(abce) {
            if (
!== bo.lineWidth b;
            if (
!== co.lineCap c;
            if (
!== eo.lineJoin =
                
e;
            
d(a.getContextStyle());
            
o.stroke();
            
Aa.inflate(2)
        }

        function 
Hb(a) {
            
e(a.getContextStyle());
            
o.fill()
        }

        function 
kd(abcdfghkijmln) {
            if (!(
n.image === void 0 || n.image.width === 0)) {
                if (
n.needsUpdate === true || ma[n.id] === void 0) {
                    var 
n.wrapS == THREE.RepeatWrapping,
                        
fc n.wrapT == THREE.RepeatWrapping;
                    
ma[n.id] = o.createPattern(n.image=== true && fc === true "repeat" === true && fc === false "repeat-x" === false && fc === true "repeat-y" "no-repeat");
                    
n.needsUpdate false
                
}
                
e(ma[n.id]);
                var 
n.offset.n.repeat.x,
                    
fc n.offset./
                    
n.repeat.y,
                    
n.image.width n.repeat.x,
                    
n.image.height n.repeat.y,
                    
= (p) * r,
                    
= (fc) * q,
                    
a,
                    
b,
                    
a,
                    
b,
                    
= (p) * h,
                    
= (fc) * k,
                    
= (p) * h,
                    
= (fc) * k,
                    
j;
                if (
=== 0) {
                    if (
Ga[n.id] === void 0) {
                        
document.createElement("canvas");
                        
b.width n.image.width;
                        
b.height n.image.height;
                        
b.getContext("2d");
                        
b.drawImage(n.image00);
                        
Ga[n.id] = b.getImageData(00n.image.widthn.image.height).data
                    
}
                    
Ga[n.id];
                    
= (Math.floor(h) + Math.floor(k) * n.image.width) * 4;
                    
S.setRGB(b[h] / 255b[1] / 255b[2] / 255);
                    
Hb(S)
                } else {
                    
=
                        
p;
                    
= (f) * p;
                    
= (g) * p;
                    
= (c) * p;
                    
= (d) * p;
                    
k;
                    
k;
                    
o.save();
                    
o.transform(njcdah);
                    
o.fill();
                    
o.restore()
                }
            }
        }

        function 
mc(abcdefghkijml) {
            var 
np;
            
l.width 1;
            
l.height 1;
            
n;
            
p;
            
a;
            
b;
            
a;
            
b;
            
g;
            
h;
            
g;
            
h;
            
/ (i);
            
= (e) * p;
            
= (f) * p;
            
= (c) * p;
            
= (d) * p;
            
h;
            
h;
            
o.save();
            
o.transform(nicdab);
            
o.clip();
            
o.drawImage(l00);
            
o.restore()
        }

        function 
Ic(abcd) {
            var 
= ~~(a.255),
                
= ~~(a.255),
                
= ~~(a.255),
                
= ~~(b.255),
                
= ~~(b.255),
                
= ~~(b.255),
                
= ~~(c.255),
                
= ~~(c.255),
                
= ~~(c.255),
                
= ~~(d.255),
                
= ~~(d.255),
                
= ~~(d.255);
            
Va[0] = 255 255 e;
            
Va[1] = 255 255 f;
            
Va[2] = 255 255 a;
            
Va[4] = 255 255 g;
            
Va[5] = 255 255 h;
            
Va[6] = 255 255 b;
            
Va[8] = 255 255 i;
            
Va[9] = 255 255 j;
            
Va[10] = 255 255 c;
            
Va[12] = 255 255 m;
            
Va[13] = 255 255 l;
            
Va[14] = 255 255 d;
            
Ya.putImageData(Gb00);
            
cb.drawImage(k00);
            return 
pb
        
}

        function 
gc(ab,
            
c) {
            
= (b) / (b);
            return 
* (a)
        }

        function 
nc(a) {
            
= (1) * 0.5;
            return 
a
        
}

        function 
Qb(ab) {
            var 
b.a.x,
                
b.a.y,
                
d;
            if (
!== 0) {
                
Math.sqrt(e);
                
e;
                
e;
                
b.b.c;
                
b.b.d;
                
a.a.c;
                
a.a.d
            
}
        }
        var 
JcldMaib;
        
this.autoClear === true this.clear() : o.setTransform(100, -1pr);
        
f.info.render.vertices 0;
        
f.info.render.faces 0;
        
j.projectScene(althis.sortElements);
        
g.elements;
        
g.lights;
        
hb i.length 0;
        
hb === true && m(i);
        
Jc 0;
        for (
ld h.lengthJc ldJc++) {
            
Ma h[Jc];
            
ib Ma.material;
            
ib ib instanceof
            
THREE.MeshFaceMaterial Ma.faceMaterial ib;
            if (!(
ib === void 0 || ib.visible === false)) {
                
Aa.empty();
                if (
Ma instanceof THREE.RenderableParticle) {
                    
Ma;
                    
u.u.p;
                    
u.u.r;
                    
q(uMaiba)
                } else if (
Ma instanceof THREE.RenderableLine) {
                    
Ma.v1;
                    
Ma.v2;
                    
u.positionScreen.u.positionScreen.p;
                    
u.positionScreen.u.positionScreen.r;
                    
G.positionScreen.G.positionScreen.p;
                    
G.positionScreen.G.positionScreen.r;
                    
Aa.addPoint(u.positionScreen.xu.positionScreen.y);
                    
Aa.addPoint(G.positionScreen.xG.positionScreen.y);
                    
Ua.intersects(Aa) ===
                        
true && s(uGMaiba)
                } else if (
Ma instanceof THREE.RenderableFace3) {
                    
Ma.v1;
                    
Ma.v2;
                    
Ma.v3;
                    
u.positionScreen.u.positionScreen.p;
                    
u.positionScreen.u.positionScreen.r;
                    
G.positionScreen.G.positionScreen.p;
                    
G.positionScreen.G.positionScreen.r;
                    
J.positionScreen.J.positionScreen.p;
                    
J.positionScreen.J.positionScreen.r;
                    if (
ib.overdraw === true) {
                        
Qb(u.positionScreenG.positionScreen);
                        
Qb(G.positionScreenJ.positionScreen);
                        
Qb(J.positionScreenu.positionScreen)
                    }
                    
Aa.add3Points(u.positionScreen.xu.positionScreen.y,
                        
G.positionScreen.xG.positionScreen.yJ.positionScreen.xJ.positionScreen.y);
                    
Ua.intersects(Aa) === true && t(uGJ012Maiba)
                } else if (
Ma instanceof THREE.RenderableFace4) {
                    
Ma.v1;
                    
Ma.v2;
                    
Ma.v3;
                    
Ma.v4;
                    
u.positionScreen.u.positionScreen.p;
                    
u.positionScreen.u.positionScreen.r;
                    
G.positionScreen.G.positionScreen.p;
                    
G.positionScreen.G.positionScreen.r;
                    
J.positionScreen.J.positionScreen.p;
                    
J.positionScreen.J.positionScreen.r;
                    
M.positionScreen.M.positionScreen.p;
                    
M.positionScreen.=
                        
M.positionScreen.r;
                    
O.positionScreen.copy(G.positionScreen);
                    
X.positionScreen.copy(M.positionScreen);
                    if (
ib.overdraw === true) {
                        
Qb(u.positionScreenG.positionScreen);
                        
Qb(G.positionScreenM.positionScreen);
                        
Qb(M.positionScreenu.positionScreen);
                        
Qb(J.positionScreenO.positionScreen);
                        
Qb(J.positionScreenX.positionScreen)
                    }
                    
Aa.addPoint(u.positionScreen.xu.positionScreen.y);
                    
Aa.addPoint(G.positionScreen.xG.positionScreen.y);
                    
Aa.addPoint(J.positionScreen.xJ.positionScreen.y);
                    
Aa.addPoint(M.positionScreen.xM.positionScreen.y);
                    
Ua.intersects(Aa) === true && v(uGJMOXMaiba)
                }
                
Da.addRectangle(Aa)
            }
        }
        
o.setTransform(100100)
    }
};
THREE.ShaderChunk = {
    
fog_pars_fragment"#ifdef USE_FOGnuniform vec3 fogColor;n#ifdef FOG_EXP2nuniform float fogDensity;n#elsenuniform float fogNear;nuniform float fogFar;n#endifn#endif",
    
fog_fragment"#ifdef USE_FOGnfloat depth = gl_FragCoord.z / gl_FragCoord.w;n#ifdef FOG_EXP2nconst float LOG2 = 1.442695;nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );n#elsenfloat fogFactor = smoothstep( fogNear, fogFar, depth );n#endifngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );n#endif",
    
envmap_pars_fragment"#ifdef USE_ENVMAPnvarying vec3 vReflect;nuniform float reflectivity;nuniform samplerCube envMap;nuniform float flipEnvMap;nuniform int combine;n#endif",
    
envmap_fragment"#ifdef USE_ENVMAPn#ifdef DOUBLE_SIDEDnfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * vReflect.x, vReflect.yz ) );n#elsenvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * vReflect.x, vReflect.yz ) );n#endifn#ifdef GAMMA_INPUTncubeColor.xyz *= cubeColor.xyz;n#endifnif ( combine == 1 ) {ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity );n} else {ngl_FragColor.xyz = gl_FragColor.xyz * cubeColor.xyz;n}n#endif",
    
envmap_pars_vertex"#ifdef USE_ENVMAPnvarying vec3 vReflect;nuniform float refractionRatio;nuniform bool useRefract;n#endif",
    
envmap_vertex"#ifdef USE_ENVMAPnvec4 mPosition = objectMatrix * vec4( position, 1.0 );nvec3 nWorld = mat3( objectMatrix[ 0 ].xyz, objectMatrix[ 1 ].xyz, objectMatrix[ 2 ].xyz ) * normal;nif ( useRefract ) {nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );n} else {nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );n}n#endif",
    
map_particle_pars_fragment"#ifdef USE_MAPnuniform sampler2D map;n#endif",
    
map_particle_fragment"#ifdef USE_MAPngl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );n#endif",
    
map_pars_vertex"#ifdef USE_MAPnvarying vec2 vUv;nuniform vec4 offsetRepeat;n#endif",
    
map_pars_fragment"#ifdef USE_MAPnvarying vec2 vUv;nuniform sampler2D map;n#endif",
    
map_vertex"#ifdef USE_MAPnvUv = uv * offsetRepeat.zw + offsetRepeat.xy;n#endif",
    
map_fragment"#ifdef USE_MAPn#ifdef GAMMA_INPUTnvec4 texelColor = texture2D( map, vUv );ntexelColor.xyz *= texelColor.xyz;ngl_FragColor = gl_FragColor * texelColor;n#elsengl_FragColor = gl_FragColor * texture2D( map, vUv );n#endifn#endif",
    
lightmap_pars_fragment"#ifdef USE_LIGHTMAPnvarying vec2 vUv2;nuniform sampler2D lightMap;n#endif",
    
lightmap_pars_vertex"#ifdef USE_LIGHTMAPnvarying vec2 vUv2;n#endif",
    
lightmap_fragment"#ifdef USE_LIGHTMAPngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );n#endif",
    
lightmap_vertex"#ifdef USE_LIGHTMAPnvUv2 = uv2;n#endif",
    
lights_lambert_pars_vertex"uniform vec3 ambient;nuniform vec3 diffuse;nuniform vec3 emissive;nuniform vec3 ambientLightColor;n#if MAX_DIR_LIGHTS > 0nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];n#endifn#if MAX_POINT_LIGHTS > 0nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];n#endifn#if MAX_SPOT_LIGHTS > 0nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];nuniform float spotLightAngle[ MAX_SPOT_LIGHTS ];nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];n#endifn#ifdef WRAP_AROUNDnuniform vec3 wrapRGB;n#endif",
    
lights_lambert_vertex"vLightFront = vec3( 0.0 );n#ifdef DOUBLE_SIDEDnvLightBack = vec3( 0.0 );n#endifntransformedNormal = normalize( transformedNormal );n#if MAX_DIR_LIGHTS > 0nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );nvec3 dirVector = normalize( lDirection.xyz );nfloat dotProduct = dot( transformedNormal, dirVector );nvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );n#ifdef DOUBLE_SIDEDnvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );n#ifdef WRAP_AROUNDnvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );n#endifn#endifn#ifdef WRAP_AROUNDnvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );ndirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );n#ifdef DOUBLE_SIDEDndirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );n#endifn#endifnvLightFront += directionalLightColor[ i ] * directionalLightWeighting;n#ifdef DOUBLE_SIDEDnvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;n#endifn}n#endifn#if MAX_POINT_LIGHTS > 0nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );nvec3 lVector = lPosition.xyz - mvPosition.xyz;nfloat lDistance = 1.0;nif ( pointLightDistance[ i ] > 0.0 )nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );nlVector = normalize( lVector );nfloat dotProduct = dot( transformedNormal, lVector );nvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );n#ifdef DOUBLE_SIDEDnvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );n#ifdef WRAP_AROUNDnvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );n#endifn#endifn#ifdef WRAP_AROUNDnvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );npointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );n#ifdef DOUBLE_SIDEDnpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );n#endifn#endifnvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;n#ifdef DOUBLE_SIDEDnvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;n#endifn}n#endifn#if MAX_SPOT_LIGHTS > 0nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );nvec3 lVector = lPosition.xyz - mvPosition.xyz;nlVector = normalize( lVector );nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - mPosition.xyz ) );nif ( spotEffect > spotLightAngle[ i ] ) {nspotEffect = pow( spotEffect, spotLightExponent[ i ] );nfloat lDistance = 1.0;nif ( spotLightDistance[ i ] > 0.0 )nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );nfloat dotProduct = dot( transformedNormal, lVector );nvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );n#ifdef DOUBLE_SIDEDnvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );n#ifdef WRAP_AROUNDnvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );n#endifn#endifn#ifdef WRAP_AROUNDnvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );nspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );n#ifdef DOUBLE_SIDEDnspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );n#endifn#endifnvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;n#ifdef DOUBLE_SIDEDnvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;n#endifn}n}n#endifnvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;n#ifdef DOUBLE_SIDEDnvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;n#endif",
    
lights_phong_pars_vertex"#ifndef PHONG_PER_PIXELn#if MAX_POINT_LIGHTS > 0nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];n#endifn#if MAX_SPOT_LIGHTS > 0nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];n#endifn#endifn#if MAX_SPOT_LIGHTS > 0nvarying vec3 vWorldPosition;n#endif",
    
lights_phong_vertex"#ifndef PHONG_PER_PIXELn#if MAX_POINT_LIGHTS > 0nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );nvec3 lVector = lPosition.xyz - mvPosition.xyz;nfloat lDistance = 1.0;nif ( pointLightDistance[ i ] > 0.0 )nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );nvPointLight[ i ] = vec4( lVector, lDistance );n}n#endifn#if MAX_SPOT_LIGHTS > 0nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );nvec3 lVector = lPosition.xyz - mvPosition.xyz;nfloat lDistance = 1.0;nif ( spotLightDistance[ i ] > 0.0 )nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );nvSpotLight[ i ] = vec4( lVector, lDistance );n}n#endifn#endifn#if MAX_SPOT_LIGHTS > 0nvWorldPosition = mPosition.xyz;n#endif",
    
lights_phong_pars_fragment"uniform vec3 ambientLightColor;n#if MAX_DIR_LIGHTS > 0nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];n#endifn#if MAX_POINT_LIGHTS > 0nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];n#ifdef PHONG_PER_PIXELnuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];n#elsenvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];n#endifn#endifn#if MAX_SPOT_LIGHTS > 0nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];nuniform float spotLightAngle[ MAX_SPOT_LIGHTS ];nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];n#ifdef PHONG_PER_PIXELnuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];n#elsenvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];n#endifnvarying vec3 vWorldPosition;n#endifn#ifdef WRAP_AROUNDnuniform vec3 wrapRGB;n#endifnvarying vec3 vViewPosition;nvarying vec3 vNormal;",
    
lights_phong_fragment"vec3 normal = normalize( vNormal );nvec3 viewPosition = normalize( vViewPosition );n#ifdef DOUBLE_SIDEDnnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );n#endifn#if MAX_POINT_LIGHTS > 0nvec3 pointDiffuse  = vec3( 0.0 );nvec3 pointSpecular = vec3( 0.0 );nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {n#ifdef PHONG_PER_PIXELnvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );nvec3 lVector = lPosition.xyz + vViewPosition.xyz;nfloat lDistance = 1.0;nif ( pointLightDistance[ i ] > 0.0 )nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );nlVector = normalize( lVector );n#elsenvec3 lVector = normalize( vPointLight[ i ].xyz );nfloat lDistance = vPointLight[ i ].w;n#endifnfloat dotProduct = dot( normal, lVector );n#ifdef WRAP_AROUNDnfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );nfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );n#elsenfloat pointDiffuseWeight = max( dotProduct, 0.0 );n#endifnpointDiffuse  += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;nvec3 pointHalfVector = normalize( lVector + viewPosition );nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );nfloat pointSpecularWeight = max( pow( pointDotNormalHalf, shininess ), 0.0 );n#ifdef PHYSICALLY_BASED_SHADINGnfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, pointHalfVector ), 5.0 );npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;n#elsenpointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;n#endifn}n#endifn#if MAX_SPOT_LIGHTS > 0nvec3 spotDiffuse  = vec3( 0.0 );nvec3 spotSpecular = vec3( 0.0 );nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {n#ifdef PHONG_PER_PIXELnvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );nvec3 lVector = lPosition.xyz + vViewPosition.xyz;nfloat lDistance = 1.0;nif ( spotLightDistance[ i ] > 0.0 )nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );nlVector = normalize( lVector );n#elsenvec3 lVector = normalize( vSpotLight[ i ].xyz );nfloat lDistance = vSpotLight[ i ].w;n#endifnfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );nif ( spotEffect > spotLightAngle[ i ] ) {nspotEffect = pow( spotEffect, spotLightExponent[ i ] );nfloat dotProduct = dot( normal, lVector );n#ifdef WRAP_AROUNDnfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );nfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );n#elsenfloat spotDiffuseWeight = max( dotProduct, 0.0 );n#endifnspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;nvec3 spotHalfVector = normalize( lVector + viewPosition );nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );nfloat spotSpecularWeight = max( pow( spotDotNormalHalf, shininess ), 0.0 );n#ifdef PHYSICALLY_BASED_SHADINGnfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, spotHalfVector ), 5.0 );nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;n#elsenspotSpecular += specular * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * spotEffect;n#endifn}n}n#endifn#if MAX_DIR_LIGHTS > 0nvec3 dirDiffuse  = vec3( 0.0 );nvec3 dirSpecular = vec3( 0.0 );nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );nvec3 dirVector = normalize( lDirection.xyz );nfloat dotProduct = dot( normal, dirVector );n#ifdef WRAP_AROUNDnfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );nfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );n#elsenfloat dirDiffuseWeight = max( dotProduct, 0.0 );n#endifndirDiffuse  += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;nvec3 dirHalfVector = normalize( dirVector + viewPosition );nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );nfloat dirSpecularWeight = max( pow( dirDotNormalHalf, shininess ), 0.0 );n#ifdef PHYSICALLY_BASED_SHADINGnfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;n#elsendirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;n#endifn}n#endifnvec3 totalDiffuse = vec3( 0.0 );nvec3 totalSpecular = vec3( 0.0 );n#if MAX_DIR_LIGHTS > 0ntotalDiffuse += dirDiffuse;ntotalSpecular += dirSpecular;n#endifn#if MAX_POINT_LIGHTS > 0ntotalDiffuse += pointDiffuse;ntotalSpecular += pointSpecular;n#endifn#if MAX_SPOT_LIGHTS > 0ntotalDiffuse += spotDiffuse;ntotalSpecular += spotSpecular;n#endifn#ifdef METALngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );n#elsengl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;n#endif",
    
color_pars_fragment"#ifdef USE_COLORnvarying vec3 vColor;n#endif",
    
color_fragment"#ifdef USE_COLORngl_FragColor = gl_FragColor * vec4( vColor, opacity );n#endif",
    
color_pars_vertex"#ifdef USE_COLORnvarying vec3 vColor;n#endif",
    
color_vertex"#ifdef USE_COLORn#ifdef GAMMA_INPUTnvColor = color * color;n#elsenvColor = color;n#endifn#endif",
    
skinning_pars_vertex"#ifdef USE_SKINNINGn#ifdef BONE_TEXTUREnuniform sampler2D boneTexture;nmat4 getBoneMatrix( const in float i ) {nfloat j = i * 4.0;nfloat x = mod( j, N_BONE_PIXEL_X );nfloat y = floor( j / N_BONE_PIXEL_X );nconst float dx = 1.0 / N_BONE_PIXEL_X;nconst float dy = 1.0 / N_BONE_PIXEL_Y;ny = dy * ( y + 0.5 );nvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );nvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );nvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );nvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );nmat4 bone = mat4( v1, v2, v3, v4 );nreturn bone;n}n#elsenuniform mat4 boneGlobalMatrices[ MAX_BONES ];nmat4 getBoneMatrix( const in float i ) {nmat4 bone = boneGlobalMatrices[ int(i) ];nreturn bone;n}n#endifn#endif",
    
skinbase_vertex"#ifdef USE_SKINNINGnmat4 boneMatX = getBoneMatrix( skinIndex.x );nmat4 boneMatY = getBoneMatrix( skinIndex.y );n#endif",
    
skinning_vertex"#ifdef USE_SKINNINGnvec4 skinned  = boneMatX * skinVertexA * skinWeight.x;nskinned t  += boneMatY * skinVertexB * skinWeight.y;ngl_Position  = projectionMatrix * modelViewMatrix * skinned;n#endif",
    
morphtarget_pars_vertex"#ifdef USE_MORPHTARGETSn#ifndef USE_MORPHNORMALSnuniform float morphTargetInfluences[ 8 ];n#elsenuniform float morphTargetInfluences[ 4 ];n#endifn#endif",
    
morphtarget_vertex"#ifdef USE_MORPHTARGETSnvec3 morphed = vec3( 0.0 );nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];n#ifndef USE_MORPHNORMALSnmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];n#endifnmorphed += position;ngl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );n#endif",
    
default_vertex"#ifndef USE_MORPHTARGETSn#ifndef USE_SKINNINGngl_Position = projectionMatrix * mvPosition;n#endifn#endif",
    
morphnormal_vertex"#ifdef USE_MORPHNORMALSnvec3 morphedNormal = vec3( 0.0 );nmorphedNormal +=  ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];nmorphedNormal +=  ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];nmorphedNormal +=  ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];nmorphedNormal +=  ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];nmorphedNormal += normal;n#endif",
    
skinnormal_vertex"#ifdef USE_SKINNINGnmat4 skinMatrix = skinWeight.x * boneMatX;nskinMatrix t+= skinWeight.y * boneMatY;nvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );n#endif",
    
defaultnormal_vertex"vec3 transformedNormal;n#ifdef USE_SKINNINGntransformedNormal = skinnedNormal.xyz;n#endifn#ifdef USE_MORPHNORMALSntransformedNormal = morphedNormal;n#endifn#ifndef USE_MORPHNORMALSn#ifndef USE_SKINNINGntransformedNormal = normal;n#endifn#endifntransformedNormal = normalMatrix * transformedNormal;",
    
shadowmap_pars_fragment"#ifdef USE_SHADOWMAPnuniform sampler2D shadowMap[ MAX_SHADOWS ];nuniform vec2 shadowMapSize[ MAX_SHADOWS ];nuniform float shadowDarkness[ MAX_SHADOWS ];nuniform float shadowBias[ MAX_SHADOWS ];nvarying vec4 vShadowCoord[ MAX_SHADOWS ];nfloat unpackDepth( const in vec4 rgba_depth ) {nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );nfloat depth = dot( rgba_depth, bit_shift );nreturn depth;n}n#endif",
    
shadowmap_fragment"#ifdef USE_SHADOWMAPn#ifdef SHADOWMAP_DEBUGnvec3 frustumColors[3];nfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );nfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );nfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );n#endifn#ifdef SHADOWMAP_CASCADEnint inFrustumCount = 0;n#endifnfloat fDepth;nvec3 shadowColor = vec3( 1.0 );nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;nbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );nbool inFrustum = all( inFrustumVec );n#ifdef SHADOWMAP_CASCADEninFrustumCount += int( inFrustum );nbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );n#elsenbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );n#endifnbool frustumTest = all( frustumTestVec );nif ( frustumTest ) {nshadowCoord.z += shadowBias[ i ];n#ifdef SHADOWMAP_SOFTnfloat shadow = 0.0;nconst float shadowDelta = 1.0 / 9.0;nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;nfloat dx0 = -1.25 * xPixelOffset;nfloat dy0 = -1.25 * yPixelOffset;nfloat dx1 = 1.25 * xPixelOffset;nfloat dy1 = 1.25 * yPixelOffset;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );n#elsenvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );nfloat fDepth = unpackDepth( rgbaDepth );nif ( fDepth < shadowCoord.z )nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );n#endifn}n#ifdef SHADOWMAP_DEBUGn#ifdef SHADOWMAP_CASCADEnif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];n#elsenif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];n#endifn#endifn}n#ifdef GAMMA_OUTPUTnshadowColor *= shadowColor;n#endifngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;n#endif",
    
shadowmap_pars_vertex"#ifdef USE_SHADOWMAPnvarying vec4 vShadowCoord[ MAX_SHADOWS ];nuniform mat4 shadowMatrix[ MAX_SHADOWS ];n#endif",
    
shadowmap_vertex"#ifdef USE_SHADOWMAPnvec4 transformedPosition;n#ifdef USE_MORPHTARGETSntransformedPosition = objectMatrix * vec4( morphed, 1.0 );n#elsen#ifdef USE_SKINNINGntransformedPosition = objectMatrix * skinned;n#elsentransformedPosition = objectMatrix * vec4( position, 1.0 );n#endifn#endifnfor( int i = 0; i < MAX_SHADOWS; i ++ ) {nvShadowCoord[ i ] = shadowMatrix[ i ] * transformedPosition;n}n#endif",
    
alphatest_fragment"#ifdef ALPHATESTnif ( gl_FragColor.a < ALPHATEST ) discard;n#endif",
    
linear_to_gamma_fragment"#ifdef GAMMA_OUTPUTngl_FragColor.xyz = sqrt( gl_FragColor.xyz );n#endif"
};
THREE.UniformsUtils = {
    
merge: function(a) {
        var 
bcd= {};
        for (
0a.lengthb++) {
            
this.clone(a[b]);
            for (
c in de[c] = d[c]
        }
        return 
e
    
},
    clone: function(
a) {
        var 
bcd= {};
        for (
b in a) {
            
e[b] = {};
            for (
c in a[b]) {
                
a[b][c];
                
e[b][c] = instanceof THREE.Color || instanceof THREE.Vector2 || instanceof THREE.Vector3 || instanceof THREE.Vector4 || instanceof THREE.Matrix4 || instanceof THREE.Texture d.clone() : instanceof Array ? d.slice() : d
            
}
        }
        return 
e
    
}
};
THREE.UniformsLib = {
    
common: {
        
diffuse: {
            
type"c",
            
value: new THREE.Color(15658734)
        },
        
opacity: {
            
type"f",
            
value1
        
},
        
map: {
            
type"t",
            
value0,
            
texturenull
        
},
        
offsetRepeat: {
            
type"v4",
            
value: new THREE.Vector4(0011)
        },
        
lightMap: {
            
type"t",
            
value2,
            
texturenull
        
},
        
envMap: {
            
type"t",
            
value1,
            
texturenull
        
},
        
flipEnvMap: {
            
type"f",
            
value: -1
        
},
        
useRefract: {
            
type"i",
            
value0
        
},
        
reflectivity: {
            
type"f",
            
value1
        
},
        
refractionRatio: {
            
type"f",
            
value0.98
        
},
        
combine: {
            
type"i",
            
value0
        
},
        
morphTargetInfluences: {
            
type"f",
            
value0
        
}
    },
    
fog: {
        
fogDensity: {
            
type"f",
            
value2.5E-4
        
},
        
fogNear: {
            
type"f",
            
value1
        
},
        
fogFar: {
            
type"f",
            
value2E3
        
},
        
fogColor: {
            
type"c",
            
value: new THREE.Color(16777215)
        }
    },
    
lights: {
        
ambientLightColor: {
            
type"fv",
            
value: []
        },
        
directionalLightDirection: {
            
type"fv",
            
value: []
        },
        
directionalLightColor: {
            
type"fv",
            
value: []
        },
        
pointLightColor: {
            
type"fv",
            
value: []
        },
        
pointLightPosition: {
            
type"fv",
            
value: []
        },
        
pointLightDistance: {
            
type"fv1",
            
value: []
        },
        
spotLightColor: {
            
type"fv",
            
value: []
        },
        
spotLightPosition: {
            
type"fv",
            
value: []
        },
        
spotLightDirection: {
            
type"fv",
            
value: []
        },
        
spotLightDistance: {
            
type"fv1",
            
value: []
        },
        
spotLightAngle: {
            
type"fv1",
            
value: []
        },
        
spotLightExponent: {
            
type"fv1",
            
value: []
        }
    },
    
particle: {
        
psColor: {
            
type"c",
            
value: new THREE.Color(15658734)
        },
        
opacity: {
            
type"f",
            
value1
        
},
        
size: {
            
type"f",
            
value1
        
},
        
scale: {
            
type"f",
            
value1
        
},
        
map: {
            
type"t",
            
value0,
            
texturenull
        
},
        
fogDensity: {
            
type"f",
            
value2.5E-4
        
},
        
fogNear: {
            
type"f",
            
value1
        
},
        
fogFar: {
            
type"f",
            
value2E3
        
},
        
fogColor: {
            
type"c",
            
value: new THREE.Color(16777215)
        }
    },
    
shadowmap: {
        
shadowMap: {
            
type"tv",
            
value6,
            
texture: []
        },
        
shadowMapSize: {
            
type"v2v",
            
value: []
        },
        
shadowBias: {
            
type"fv1",
            
value: []
        },
        
shadowDarkness: {
            
type"fv1",
            
value: []
        },
        
shadowMatrix: {
            
type"m4v",
            
value: []
        }
    }
};
THREE.ShaderLib = {
    
depth: {
        
uniforms: {
            
mNear: {
                
type"f",
                
value1
            
},
            
mFar: {
                
type"f",
                
value2E3
            
},
            
opacity: {
                
type"f",
                
value1
            
}
        },
        
vertexShader"void main() {ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );n}",
        
fragmentShader"uniform float mNear;nuniform float mFar;nuniform float opacity;nvoid main() {nfloat depth = gl_FragCoord.z / gl_FragCoord.w;nfloat color = 1.0 - smoothstep( mNear, mFar, depth );ngl_FragColor = vec4( vec3( color ), opacity );n}"
    
},
    
normal: {
        
uniforms: {
            
opacity: {
                
type"f",
                
value1
            
}
        },
        
vertexShader"varying vec3 vNormal;nvoid main() {nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );nvNormal = normalMatrix * normal;ngl_Position = projectionMatrix * mvPosition;n}",
        
fragmentShader"uniform float opacity;nvarying vec3 vNormal;nvoid main() {ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );n}"
    
},
    
basic: {
        
uniformsTHREE.UniformsUtils.merge([THREE.UniformsLib.commonTHREE.UniformsLib.fogTHREE.UniformsLib.shadowmap]),
        
vertexShader: [THREE.ShaderChunk.map_pars_vertex,
            
THREE.ShaderChunk.lightmap_pars_vertexTHREE.ShaderChunk.envmap_pars_vertexTHREE.ShaderChunk.color_pars_vertexTHREE.ShaderChunk.skinning_pars_vertexTHREE.ShaderChunk.morphtarget_pars_vertexTHREE.ShaderChunk.shadowmap_pars_vertex"void main() {nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );"THREE.ShaderChunk.map_vertexTHREE.ShaderChunk.lightmap_vertexTHREE.ShaderChunk.envmap_vertexTHREE.ShaderChunk.color_vertexTHREE.ShaderChunk.skinbase_vertexTHREE.ShaderChunk.skinning_vertex,
            
THREE.ShaderChunk.morphtarget_vertexTHREE.ShaderChunk.default_vertexTHREE.ShaderChunk.shadowmap_vertex"}"
        
].join("n"),
        
fragmentShader: ["uniform vec3 diffuse;nuniform float opacity;"THREE.ShaderChunk.color_pars_fragmentTHREE.ShaderChunk.map_pars_fragmentTHREE.ShaderChunk.lightmap_pars_fragmentTHREE.ShaderChunk.envmap_pars_fragmentTHREE.ShaderChunk.fog_pars_fragmentTHREE.ShaderChunk.shadowmap_pars_fragment"void main() {ngl_FragColor = vec4( diffuse, opacity );"THREE.ShaderChunk.map_fragment,
            
THREE.ShaderChunk.alphatest_fragmentTHREE.ShaderChunk.lightmap_fragmentTHREE.ShaderChunk.color_fragmentTHREE.ShaderChunk.envmap_fragmentTHREE.ShaderChunk.shadowmap_fragmentTHREE.ShaderChunk.linear_to_gamma_fragmentTHREE.ShaderChunk.fog_fragment"}"
        
].join("n")
    },
    
lambert: {
        
uniformsTHREE.UniformsUtils.merge([THREE.UniformsLib.commonTHREE.UniformsLib.fogTHREE.UniformsLib.lightsTHREE.UniformsLib.shadowmap, {
            
ambient: {
                
type"c",
                
value: new THREE.Color(16777215)
            },
            
emissive: {
                
type"c",
                
value: new THREE.Color(0)
            },
            
wrapRGB: {
                
type"v3",
                
value: new THREE.Vector3(111)
            }
        }]),
        
vertexShader: ["varying vec3 vLightFront;n#ifdef DOUBLE_SIDEDnvarying vec3 vLightBack;n#endif"THREE.ShaderChunk.map_pars_vertexTHREE.ShaderChunk.lightmap_pars_vertexTHREE.ShaderChunk.envmap_pars_vertexTHREE.ShaderChunk.lights_lambert_pars_vertexTHREE.ShaderChunk.color_pars_vertexTHREE.ShaderChunk.skinning_pars_vertexTHREE.ShaderChunk.morphtarget_pars_vertexTHREE.ShaderChunk.shadowmap_pars_vertex"void main() {nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
            
THREE.ShaderChunk.map_vertexTHREE.ShaderChunk.lightmap_vertexTHREE.ShaderChunk.envmap_vertexTHREE.ShaderChunk.color_vertexTHREE.ShaderChunk.morphnormal_vertexTHREE.ShaderChunk.skinbase_vertexTHREE.ShaderChunk.skinnormal_vertexTHREE.ShaderChunk.defaultnormal_vertex"#ifndef USE_ENVMAPnvec4 mPosition = objectMatrix * vec4( position, 1.0 );n#endif"THREE.ShaderChunk.lights_lambert_vertexTHREE.ShaderChunk.skinning_vertexTHREE.ShaderChunk.morphtarget_vertexTHREE.ShaderChunk.default_vertex,
            
THREE.ShaderChunk.shadowmap_vertex"}"
        
].join("n"),
        
fragmentShader: ["uniform float opacity;nvarying vec3 vLightFront;n#ifdef DOUBLE_SIDEDnvarying vec3 vLightBack;n#endif"THREE.ShaderChunk.color_pars_fragmentTHREE.ShaderChunk.map_pars_fragmentTHREE.ShaderChunk.lightmap_pars_fragmentTHREE.ShaderChunk.envmap_pars_fragmentTHREE.ShaderChunk.fog_pars_fragmentTHREE.ShaderChunk.shadowmap_pars_fragment"void main() {ngl_FragColor = vec4( vec3 ( 1.0 ), opacity );"THREE.ShaderChunk.map_fragmentTHREE.ShaderChunk.alphatest_fragment,
            
"#ifdef DOUBLE_SIDEDnif ( gl_FrontFacing )ngl_FragColor.xyz *= vLightFront;nelsengl_FragColor.xyz *= vLightBack;n#elsengl_FragColor.xyz *= vLightFront;n#endif"THREE.ShaderChunk.lightmap_fragmentTHREE.ShaderChunk.color_fragmentTHREE.ShaderChunk.envmap_fragmentTHREE.ShaderChunk.shadowmap_fragmentTHREE.ShaderChunk.linear_to_gamma_fragmentTHREE.ShaderChunk.fog_fragment"}"
        
].join("n")
    },
    
phong: {
        
uniformsTHREE.UniformsUtils.merge([THREE.UniformsLib.commonTHREE.UniformsLib.fogTHREE.UniformsLib.lights,
            
THREE.UniformsLib.shadowmap, {
                
ambient: {
                    
type"c",
                    
value: new THREE.Color(16777215)
                },
                
emissive: {
                    
type"c",
                    
value: new THREE.Color(0)
                },
                
specular: {
                    
type"c",
                    
value: new THREE.Color(1118481)
                },
                
shininess: {
                    
type"f",
                    
value30
                
},
                
wrapRGB: {
                    
type"v3",
                    
value: new THREE.Vector3(111)
                }
            }
        ]),
        
vertexShader: ["varying vec3 vViewPosition;nvarying vec3 vNormal;"THREE.ShaderChunk.map_pars_vertexTHREE.ShaderChunk.lightmap_pars_vertexTHREE.ShaderChunk.envmap_pars_vertexTHREE.ShaderChunk.lights_phong_pars_vertexTHREE.ShaderChunk.color_pars_vertex,
            
THREE.ShaderChunk.skinning_pars_vertexTHREE.ShaderChunk.morphtarget_pars_vertexTHREE.ShaderChunk.shadowmap_pars_vertex"void main() {nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );"THREE.ShaderChunk.map_vertexTHREE.ShaderChunk.lightmap_vertexTHREE.ShaderChunk.envmap_vertexTHREE.ShaderChunk.color_vertex"#ifndef USE_ENVMAPnvec4 mPosition = objectMatrix * vec4( position, 1.0 );n#endifnvViewPosition = -mvPosition.xyz;"THREE.ShaderChunk.morphnormal_vertexTHREE.ShaderChunk.skinbase_vertex,
            
THREE.ShaderChunk.skinnormal_vertexTHREE.ShaderChunk.defaultnormal_vertex"vNormal = transformedNormal;"THREE.ShaderChunk.lights_phong_vertexTHREE.ShaderChunk.skinning_vertexTHREE.ShaderChunk.morphtarget_vertexTHREE.ShaderChunk.default_vertexTHREE.ShaderChunk.shadowmap_vertex"}"
        
].join("n"),
        
fragmentShader: ["uniform vec3 diffuse;nuniform float opacity;nuniform vec3 ambient;nuniform vec3 emissive;nuniform vec3 specular;nuniform float shininess;"THREE.ShaderChunk.color_pars_fragmentTHREE.ShaderChunk.map_pars_fragment,
            
THREE.ShaderChunk.lightmap_pars_fragmentTHREE.ShaderChunk.envmap_pars_fragmentTHREE.ShaderChunk.fog_pars_fragmentTHREE.ShaderChunk.lights_phong_pars_fragmentTHREE.ShaderChunk.shadowmap_pars_fragment"void main() {ngl_FragColor = vec4( vec3 ( 1.0 ), opacity );"THREE.ShaderChunk.map_fragmentTHREE.ShaderChunk.alphatest_fragmentTHREE.ShaderChunk.lights_phong_fragmentTHREE.ShaderChunk.lightmap_fragmentTHREE.ShaderChunk.color_fragmentTHREE.ShaderChunk.envmap_fragmentTHREE.ShaderChunk.shadowmap_fragment,
            
THREE.ShaderChunk.linear_to_gamma_fragmentTHREE.ShaderChunk.fog_fragment"}"
        
].join("n")
    },
    
particle_basic: {
        
uniformsTHREE.UniformsUtils.merge([THREE.UniformsLib.particleTHREE.UniformsLib.shadowmap]),
        
vertexShader: ["uniform float size;nuniform float scale;"THREE.ShaderChunk.color_pars_vertexTHREE.ShaderChunk.shadowmap_pars_vertex"void main() {"THREE.ShaderChunk.color_vertex"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );n#ifdef USE_SIZEATTENUATIONngl_PointSize = size * ( scale / length( mvPosition.xyz ) );n#elsengl_PointSize = size;n#endifngl_Position = projectionMatrix * mvPosition;",
            
THREE.ShaderChunk.shadowmap_vertex"}"
        
].join("n"),
        
fragmentShader: ["uniform vec3 psColor;nuniform float opacity;"THREE.ShaderChunk.color_pars_fragmentTHREE.ShaderChunk.map_particle_pars_fragmentTHREE.ShaderChunk.fog_pars_fragmentTHREE.ShaderChunk.shadowmap_pars_fragment"void main() {ngl_FragColor = vec4( psColor, opacity );"THREE.ShaderChunk.map_particle_fragmentTHREE.ShaderChunk.alphatest_fragmentTHREE.ShaderChunk.color_fragmentTHREE.ShaderChunk.shadowmap_fragmentTHREE.ShaderChunk.fog_fragment,
            
"}"
        
].join("n")
    },
    
depthRGBA: {
        
uniforms: {},
        
vertexShader: [THREE.ShaderChunk.skinning_pars_vertexTHREE.ShaderChunk.morphtarget_pars_vertex"void main() {nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );"THREE.ShaderChunk.skinbase_vertexTHREE.ShaderChunk.skinning_vertexTHREE.ShaderChunk.morphtarget_vertexTHREE.ShaderChunk.default_vertex"}"].join("n"),
        
fragmentShader"vec4 pack_depth( const in float depth ) {nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );nconst vec4 bit_mask  = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );nvec4 res = fract( depth * bit_shift );nres -= res.xxyz * bit_mask;nreturn res;n}nvoid main() {ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );n}"
    
}
};
THREE.WebGLRenderer = function(a) {
    function 
b(ab) {
        var 
a.vertices.length,
            
b.material;
        if (
d.attributes) {
            if (
a.__webglCustomAttributesList === void 0a.__webglCustomAttributesList = [];
            for (var 
e in d.attributes) {
                var 
d.attributes[e];
                if (!
f.__webglInitialized || f.createUniqueBuffers) {
                    
f.__webglInitialized true;
                    var 
1;
                    
f.type === "v2" f.type === "v3" f.type === "v4" f.type === "c" && (3);
                    
f.size g;
                    
f.array = new Float32Array(g);
                    
f.buffer k.createBuffer();
                    
f.buffer.belongsToAttribute e;
                    
f.needsUpdate true
                
}
                
a.__webglCustomAttributesList.push(f)
            }
        }
    }

    function 
c(ab) {
        if (
a.material && !(a.material instanceof THREE.MeshFaceMaterial)) return a.material;
        if (
b.materialIndex >= 0) return a.geometry.materials[b.materialIndex]
    }

    function 
d(a) {
        return 
instanceof THREE.MeshBasicMaterial && !a.envMap || instanceof THREE.MeshDepthMaterial false && a.shading !== void 0 && a.shading === THREE.SmoothShading THREE.SmoothShading THREE.FlatShading
    
}

    function 
e(a) {
        return 
a.map || a.lightMap || instanceof THREE.ShaderMaterial true false
    
}

    function 
f(abc) {
        var 
defga.vertices;
        
h.length;
        var 
a.colors,
            
i.length,
            
a.__vertexArray,
            
a.__colorArray,
            
a.__sortArray,
            
a.verticesNeedUpdate,
            
a.colorsNeedUpdate,
            
a.__webglCustomAttributesList;
        if (
c.sortParticles) {
            
hb.copy(Aa);
            
hb.multiplySelf(c.matrixWorld);
            for (
0gd++) {
                
h[d];
                
qa.copy(e);
                
hb.multiplyVector3(qa);
                
n[d] = [qa.zd]
            }
            
n.sort(function(ab) {
                return 
b[0] - a[0]
            });
            for (
0gd++) {
                
h[n[d][1]];
                
3;
                
m[f] = e.x;
                
m[1] = e.y;
                
m[2] = e.z
            
}
            for (
0jd++) {
                
3;
                
i[n[d][1]];
                
l[f] = e.r;
                
l[1] = e.g;
                
l[2] = e.b
            
}
            if (
r) {
                
0;
                for (
r.lengthji++) {
                    
r[i];
                    if (
h.boundTo === void 0 || h.boundTo === "vertices") {
                        
0;
                        
h.value.length;
                        if (
h.size === 1)
                            for (
0ed++) {
                                
n[d][1];
                                
h.array[d] = h.value[g]
                            } else if (
h.size === 2)
                                for (
0ed++) {
                                    
n[d][1];
                                    
h.value[g];
                                    
h.array[f] = g.x;
                                    
h.array[1] = g.y;
                                    
2
                                
} else if (h.size === 3)
                                    if (
h.type === "c")
                                        for (
0ed++) {
                                            
n[d][1];
                                            
h.value[g];
                                            
h.array[f] = g.r;
                                            
h.array[1] = g.g;
                                            
h.array[2] = g.b;
                                            
3
                                        
} else
                                            for (
0ed++) {
                                                
n[d][1];
                                                
h.value[g];
                                                
h.array[f] = g.x;
                                                
h.array[1] = g.y;
                                                
h.array[2] = g.z;
                                                
3
                                            
} else if (h.size === 4)
                                                for (
0ed++) {
                                                    
n[d][1];
                                                    
h.value[g];
                                                    
h.array[f] = g.x;
                                                    
h.array[1] = g.y;
                                                    
h.array[2] = g.z;
                                                    
h.array[3] = g.w;
                                                    
4
                                                
}
                    }
                }
            }
        } else {
            if (
o)
                for (
0gd++) {
                    
h[d];
                    
3;
                    
m[f] = e.x;
                    
m[1] = e.y;
                    
m[2] = e.z
                
}
            if (
p)
                for (
0jd++) {
                    
i[d];
                    
3;
                    
l[f] = e.r;
                    
l[1] = e.g;
                    
l[2] = e.b
                
}
            if (
r) {
                
0;
                for (
r.lengthji++) {
                    
r[i];
                    if (
h.needsUpdate && (h.boundTo === void 0 || h.boundTo === "vertices")) {
                        
h.value.length;
                        
0;
                        if (
h.size === 1)
                            for (
0ed++) h.array[d] = h.value[d];
                        else if (
h.size === 2)
                            for (
0ed++) {
                                
h.value[d];
                                
h.array[f] = g.x;
                                
h.array[1] = g.y;
                                
2
                            
} else if (h.size ===
                                
3)
                                if (
h.type === "c")
                                    for (
0ed++) {
                                        
h.value[d];
                                        
h.array[f] = g.r;
                                        
h.array[1] = g.g;
                                        
h.array[2] = g.b;
                                        
3
                                    
} else
                                        for (
0ed++) {
                                            
h.value[d];
                                            
h.array[f] = g.x;
                                            
h.array[1] = g.y;
                                            
h.array[2] = g.z;
                                            
3
                                        
} else if (h.size === 4)
                                            for (
0ed++) {
                                                
h.value[d];
                                                
h.array[f] = g.x;
                                                
h.array[1] = g.y;
                                                
h.array[2] = g.z;
                                                
h.array[3] = g.w;
                                                
4
                                            
}
                    }
                }
            }
        }
        if (
|| c.sortParticles) {
            
k.bindBuffer(k.ARRAY_BUFFERa.__webglVertexBuffer);
            
k.bufferData(k.ARRAY_BUFFERmb)
        }
        if (
|| c.sortParticles) {
            
k.bindBuffer(k.ARRAY_BUFFERa.__webglColorBuffer);
            
k.bufferData(k.ARRAY_BUFFER,
                
lb)
        }
        if (
r) {
            
0;
            for (
r.lengthji++) {
                
r[i];
                if (
h.needsUpdate || c.sortParticles) {
                    
k.bindBuffer(k.ARRAY_BUFFERh.buffer);
                    
k.bufferData(k.ARRAY_BUFFERh.array, b)
                }
            }
        }
    }

    function 
g(ab) {
        return 
b.a.z
    
}

    function 
h(ab) {
        return 
b[1] - a[1]
    }

    function 
i(abc) {
        if (
a.length)
            for (var 
0a.lengthfd++) {
                
ca null;
                
ba na Ga = -1;
                
Ra true;
                
a[d].render(bcecUa);
                
ca null;
                
ba na Ga = -1;
                
Ra true
            
}
    }

    function 
j(abcdfegh) {
        var 
ikjm;
        if (
b) {
            
a.length 1;
            
= -1
        
} else {
            
0;
            
a.length;
            
1
        
}
        for (var 
k!== bm) {
            
=
                
a[l];
            if (
i.render) {
                
i.object;
                
i.buffer;
                if (
hh;
                else {
                    
i[c];
                    if (!
i) continue;
                    
&& E.setBlending(i.blendingi.blendEquationi.blendSrci.blendDst);
                    
E.setDepthTest(i.depthTest);
                    
E.setDepthWrite(i.depthWrite);
                    
w(i.polygonOffseti.polygonOffsetFactori.polygonOffsetUnits)
                }
                
E.setObjectFaces(k);
                
instanceof THREE.BufferGeometry E.renderBufferDirect(dfeijk) : E.renderBuffer(dfeijk)
            }
        }
    }

    function 
l(abcdfeg) {
        for (var 
hi0a.lengthjk++) {
            
a[k];
            
h.object;
            if (
i.visible) {
                if (
gg;
                else {
                    
h[b];
                    if (!
h) continue;
                    
&& E.setBlending(h.blendingh.blendEquationh.blendSrch.blendDst);
                    
E.setDepthTest(h.depthTest);
                    
E.setDepthWrite(h.depthWrite);
                    
w(h.polygonOffseth.polygonOffsetFactorh.polygonOffsetUnits)
                }
                
E.renderImmediateObject(cdfhi)
            }
        }
    }

    function 
m(abc) {
        
a.push({
            
bufferb,
            
objectc,
            
opaquenull,
            
transparentnull
        
})
    }

    function 
n(a) {
        for (var 
b in a.attributes)
            if (
a.attributes[b].needsUpdate) return true;
        return 
false
    
}

    function 
p(a) {
        for (var 
b in a.attributesa.attributes[b].needsUpdate false
    
}

    function 
r(ab) {
        for (var 
a.length -
                
1>= 0c--) a[c].object === && a.splice(c1)
    }

    function 
o(ab) {
        for (var 
a.length 1>= 0c--) a[c] === && a.splice(c1)
    }

    function 
q(abcdf) {
        if (
d.needsUpdate) {
            
d.program && E.deallocateMaterial(d);
            
E.initMaterial(dbcf);
            
d.needsUpdate false
        
}
        if (
d.morphTargets && !f.__webglMorphTargetInfluencesf.__webglMorphTargetInfluences = new Float32Array(E.maxMorphTargets);
        var 
false,
            
d.program,
            
g.uniforms,
            
d.uniforms;
        if (
!== N) {
            
k.useProgram(g);
            
g;
            
true
        
}
        if (
d.id !== ba) {
            
ba d.id;
            
true
        
}
        if (
|| !== ca) {
            
k.uniformMatrix4fv(h.projectionMatrix,
                
falsea._projectionMatrixArray);
            
!== ca && (ca a)
        }
        if (
e) {
            if (
&& d.fog) {
                
i.fogColor.value c.color;
                if (
instanceof THREE.Fog) {
                    
i.fogNear.value c.near;
                    
i.fogFar.value c.far
                
} else if (instanceof THREE.FogExp2i.fogDensity.value c.density
            
}
            if (
instanceof THREE.MeshPhongMaterial || instanceof THREE.MeshLambertMaterial || d.lights) {
                if (
Ra) {
                    for (var 
j000oprsaq.directional.colorsq.directional.positionsq.point.colorsq.point.positionsq.point.distancesq.spot.colorsq.spot.positionsq.spot.distances,
                            
q.spot.directionsq.spot.anglesq.spot.exponents00000b.lengthec++) {
                        
b[c];
                        if (!
j.onlyShadow && j.visible) {
                            
j.color;
                            
j.intensity;
                            
j.distance;
                            if (
instanceof THREE.AmbientLight)
                                if (
E.gammaInput) {
                                    
o.o.r;
                                    
o.o.g;
                                    
o.o.b
                                
} else {
                                    
o.r;
                                    
o.g;
                                    
o.b
                                
} else if (instanceof THREE.DirectionalLight) {
                                
3;
                                if (
E.gammaInput) {
                                    
s[r] = o.o.p;
                                    
s[1] = o.o.p;
                                    
s[2] = o.o.p
                                
} else {
                                    
s[r] = o.p;
                                    
s[1] = o.p;
                                    
s[2] = o.p
                                
}
                                
Fa.copy(j.matrixWorld.getPosition());
                                
Fa.subSelf(j.target.matrixWorld.getPosition());
                                
Fa.normalize();
                                
u[r] = Fa.x;
                                
u[1] = Fa.y;
                                
u[2] = Fa.z;
                                
1
                            
} else if (instanceof THREE.PointLight) {
                                
3;
                                if (
E.gammaInput) {
                                    
t[P] = o.o.p;
                                    
t[1] = o.o.p;
                                    
t[2] = o.o.p
                                
} else {
                                    
t[P] = o.p;
                                    
t[1] = o.p;
                                    
t[2] = o.p
                                
}
                                
j.matrixWorld.getPosition();
                                
w[P] = o.x;
                                
w[1] = o.y;
                                
w[2] = o.z;
                                
x[M] = r;
                                
1
                            
} else if (instanceof THREE.SpotLight) {
                                
3;
                                if (
E.gammaInput) {
                                    
C[P] = o.o.p;
                                    
C[1] = o.o.p;
                                    
C[2] = o.o.p
                                
} else {
                                    
C[P] = o.p;
                                    
C[1] = o.p;
                                    
C[2] = o.p
                                
}
                                
j.matrixWorld.getPosition();
                                
B[P] = o.x;
                                
B[1] = o.y;
                                
B[2] =
                                    
o.z;
                                
H[U] = r;
                                
Fa.copy(o);
                                
Fa.subSelf(j.target.matrixWorld.getPosition());
                                
Fa.normalize();
                                
R[P] = Fa.x;
                                
R[1] = Fa.y;
                                
R[2] = Fa.z;
                                
G[U] = Math.cos(j.angle);
                                
J[U] = j.exponent;
                                
1
                            
}
                        }
                    }
                    
3;
                    for (
s.lengthec++) s[c] = 0;
                    
3;
                    for (
t.lengthec++) t[c] = 0;
                    
3;
                    for (
C.lengthec++) C[c] = 0;
                    
q.directional.length F;
                    
q.point.length M;
                    
q.spot.length U;
                    
q.ambient[0] = m;
                    
q.ambient[1] = l;
                    
q.ambient[2] = n;
                    
Ra false
                
}
                
sa;
                
i.ambientLightColor.value c.ambient;
                
i.directionalLightColor.value c.directional.colors;
                
i.directionalLightDirection.value =
                    
c.directional.positions;
                
i.pointLightColor.value c.point.colors;
                
i.pointLightPosition.value c.point.positions;
                
i.pointLightDistance.value c.point.distances;
                
i.spotLightColor.value c.spot.colors;
                
i.spotLightPosition.value c.spot.positions;
                
i.spotLightDistance.value c.spot.distances;
                
i.spotLightDirection.value c.spot.directions;
                
i.spotLightAngle.value c.spot.angles;
                
i.spotLightExponent.value c.spot.exponents
            
}
            if (
instanceof THREE.MeshBasicMaterial || instanceof THREE.MeshLambertMaterial || instanceof THREE.MeshPhongMaterial) {
                
i.opacity.value =
                    
d.opacity;
                
E.gammaInput i.diffuse.value.copyGammaToLinear(d.color) : i.diffuse.value d.color;
                (
i.map.texture d.map) && i.offsetRepeat.value.set(d.map.offset.xd.map.offset.yd.map.repeat.xd.map.repeat.y);
                
i.lightMap.texture d.lightMap;
                
i.envMap.texture d.envMap;
                
i.flipEnvMap.value d.envMap instanceof THREE.WebGLRenderTargetCube : -1;
                
i.reflectivity.value d.reflectivity;
                
i.refractionRatio.value d.refractionRatio;
                
i.combine.value d.combine;
                
i.useRefract.value d.envMap && d.envMap.mapping instanceof THREE.CubeRefractionMapping
            
}
            if (
instanceof THREE.LineBasicMaterial) {
                
i.diffuse.value d.color;
                
i.opacity.value d.opacity
            
} else if (instanceof THREE.ParticleBasicMaterial) {
                
i.psColor.value d.color;
                
i.opacity.value d.opacity;
                
i.size.value d.size;
                
i.scale.value z.height 2;
                
i.map.texture d.map
            
} else if (instanceof THREE.MeshPhongMaterial) {
                
i.shininess.value d.shininess;
                if (
E.gammaInput) {
                    
i.ambient.value.copyGammaToLinear(d.ambient);
                    
i.emissive.value.copyGammaToLinear(d.emissive);
                    
i.specular.value.copyGammaToLinear(d.specular)
                } else {
                    
i.ambient.value d.ambient;
                    
i.emissive.value d.emissive;
                    
i.specular.value d.specular
                
}
                
d.wrapAround && i.wrapRGB.value.copy(d.wrapRGB)
            } else if (
instanceof THREE.MeshLambertMaterial) {
                if (
E.gammaInput) {
                    
i.ambient.value.copyGammaToLinear(d.ambient);
                    
i.emissive.value.copyGammaToLinear(d.emissive)
                } else {
                    
i.ambient.value d.ambient;
                    
i.emissive.value d.emissive
                
}
                
d.wrapAround && i.wrapRGB.value.copy(d.wrapRGB)
            } else if (
instanceof THREE.MeshDepthMaterial) {
                
i.mNear.value a.near;
                
i.mFar.value a.far;
                
i.opacity.value d.opacity
            
} else if (instanceof THREE.MeshNormalMateriali.opacity.value =
                
d.opacity;
            if (
f.receiveShadow && !d._shadowPass && i.shadowMatrix) {
                
0;
                for (
b.lengthje++) {
                    
b[e];
                    if (
m.castShadow && (instanceof THREE.SpotLight || instanceof THREE.DirectionalLight && !m.shadowCascade)) {
                        
i.shadowMap.texture[c] = m.shadowMap;
                        
i.shadowMapSize.value[c] = m.shadowMapSize;
                        
i.shadowMatrix.value[c] = m.shadowMatrix;
                        
i.shadowDarkness.value[c] = m.shadowDarkness;
                        
i.shadowBias.value[c] = m.shadowBias;
                        
c++
                    }
                }
            }
            
d.uniformsList;
            
0;
            for (
b.lengthci++)
                if (
g.uniforms[b[i][1]]) {
                    
b[i][0];
                    
e.type;
                    
e.value;
                    if (
=== "i"k.uniform1i(mj);
                    else if (
=== "f"k.uniform1f(mj);
                    else if (
=== "v2"k.uniform2f(mj.xj.y);
                    else if (
=== "v3"k.uniform3f(mj.xj.yj.z);
                    else if (
=== "v4"k.uniform4f(mj.xj.yj.zj.w);
                    else if (
=== "c"k.uniform3f(mj.rj.gj.b);
                    else if (
=== "iv1"k.uniform1iv(mj);
                    else if (
=== "iv"k.uniform3iv(mj);
                    else if (
=== "fv1"k.uniform1fv(mj);
                    else if (
=== "fv"k.uniform3fv(mj);
                    else if (
=== "v2v") {
                        if (
e._array === void 0e._array = new Float32Array(j.length);
                        
0;
                        for (
j.lengthnl++) {
                            
2;
                            
e._array[q] =
                                
j[l].x;
                            
e._array[1] = j[l].y
                        
}
                        
k.uniform2fv(me._array)
                    } else if (
=== "v3v") {
                        if (
e._array === void 0e._array = new Float32Array(j.length);
                        
0;
                        for (
j.lengthnl++) {
                            
3;
                            
e._array[q] = j[l].x;
                            
e._array[1] = j[l].y;
                            
e._array[2] = j[l].z
                        
}
                        
k.uniform3fv(me._array)
                    } else if (
=== "v4v") {
                        if (
e._array === void 0e._array = new Float32Array(j.length);
                        
0;
                        for (
j.lengthnl++) {
                            
4;
                            
e._array[q] = j[l].x;
                            
e._array[1] = j[l].y;
                            
e._array[2] = j[l].z;
                            
e._array[3] = j[l].w
                        
}
                        
k.uniform4fv(me._array)
                    } else if (
=== "m4") {
                        if (
e._array ===
                            
void 0e._array = new Float32Array(16);
                        
j.flattenToArray(e._array);
                        
k.uniformMatrix4fv(mfalsee._array)
                    } else if (
=== "m4v") {
                        if (
e._array === void 0e._array = new Float32Array(16 j.length);
                        
0;
                        for (
j.lengthnl++) j[l].flattenToArrayOffset(e._array16);
                        
k.uniformMatrix4fv(mfalsee._array)
                    } else if (
=== "t") {
                        
k.uniform1i(mj);
                        if (
e.texture)
                            if (
m.image instanceof Array && m.image.length === 6) {
                                
m;
                                if (
e.image.length === 6)
                                    if (
e.needsUpdate) {
                                        if (!
e.image.__webglTextureCubee.image.__webglTextureCube k.createTexture();
                                        
k.activeTexture(k.TEXTURE0 j);
                                        
k.bindTexture(k.TEXTURE_CUBE_MAPe.image.__webglTextureCube);
                                        
k.pixelStorei(k.UNPACK_FLIP_Y_WEBGLe.flipY);
                                        
= [];
                                        for (
06m++) {
                                            
j;
                                            
m;
                                            if (
E.autoScaleCubemaps) {
                                                
e.image[m];
                                                
Va;
                                                if (!(
q.width <= && q.height <= u)) {
                                                    
Math.max(q.widthq.height);
                                                    
Math.floor(q.width t);
                                                    
Math.floor(q.height t);
                                                    
document.createElement("canvas");
                                                    
t.width s;
                                                    
t.height u;
                                                    
t.getContext("2d").drawImage(q00q.widthq.height00su);
                                                    
t
                                                
}
                                            } else 
e.image[m];
                                            
l[n] = q
                                        
}
                                        
j[0];
                                        
= (m.width m.width 1) === &&
                                            (
m.height m.height 1) === 0;
                                        
D(e.format);
                                        
D(e.type);
                                        
v(k.TEXTURE_CUBE_MAPel);
                                        for (
06m++) k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X m0nnqj[m]);
                                        
e.generateMipmaps && && k.generateMipmap(k.TEXTURE_CUBE_MAP);
                                        
e.needsUpdate false;
                                        if (
e.onUpdatee.onUpdate()
                                    } else {
                                        
k.activeTexture(k.TEXTURE0 j);
                                        
k.bindTexture(k.TEXTURE_CUBE_MAPe.image.__webglTextureCube)
                                    }
                            } else if (
instanceof THREE.WebGLRenderTargetCube) {
                            
m;
                            
k.activeTexture(k.TEXTURE0 j);
                            
k.bindTexture(k.TEXTURE_CUBE_MAPe.__webglTexture)
                        } else 
E.setTexture(m,
                            
j)
                    } else if (
=== "tv") {
                        if (
e._array === void 0) {
                            
e._array = [];
                            
0;
                            for (
e.texture.lengthnl++) e._array[l] = l
                        
}
                        
k.uniform1iv(me._array);
                        
0;
                        for (
e.texture.lengthnl++)(e.texture[l]) && E.setTexture(me._array[l])
                    }
                }
            if ((
instanceof THREE.ShaderMaterial || instanceof THREE.MeshPhongMaterial || d.envMap) && h.cameraPosition !== null) {
                
a.matrixWorld.getPosition();
                
k.uniform3f(h.cameraPositionb.xb.yb.z)
            }(
instanceof THREE.MeshPhongMaterial || instanceof THREE.MeshLambertMaterial || instanceof THREE.ShaderMaterial ||
                
d.skinning) && h.viewMatrix !== null && k.uniformMatrix4fv(h.viewMatrixfalsea._viewMatrixArray)
        }
        if (
d.skinning)
            if (
dc && f.useVertexTexture) {
                if (
h.boneTexture !== null) {
                    
k.uniform1i(h.boneTexture12);
                    
E.setTexture(f.boneTexture12)
                }
            } else 
h.boneGlobalMatrices !== null && k.uniformMatrix4fv(h.boneGlobalMatricesfalsef.boneMatrices);
        
k.uniformMatrix4fv(h.modelViewMatrixfalsef._modelViewMatrix.elements);
        
h.normalMatrix && k.uniformMatrix3fv(h.normalMatrixfalsef._normalMatrix.elements);
        
h.objectMatrix !== null && k.uniformMatrix4fv(h.objectMatrix,
            
falsef.matrixWorld.elements);
        return 
g
    
}

    function 
s(ab) {
        
a._modelViewMatrix.multiply(b.matrixWorldInversea.matrixWorld);
        
a._normalMatrix.getInverse(a._modelViewMatrix);
        
a._normalMatrix.transpose()
    }

    function 
w(abc) {
        if (
Oa !== a) {
            
k.enable(k.POLYGON_OFFSET_FILL) : k.disable(k.POLYGON_OFFSET_FILL);
            
Oa a
        
}
        if (
&& (Pa !== || bb !== c)) {
            
k.polygonOffset(bc);
            
Pa b;
            
bb c
        
}
    }

    function 
t(ab) {
        var 
c;
        
=== "fragment" k.createShader(k.FRAGMENT_SHADER) : === "vertex" && (k.createShader(k.VERTEX_SHADER));
        
k.shaderSource(cb);
        
k.compileShader(c);
        if (!
k.getShaderParameter(ck.COMPILE_STATUS)) {
            
console.error(k.getShaderInfoLog(c));
            
console.error(b);
            return 
null
        
}
        return 
c
    
}

    function 
v(abc) {
        if (
c) {
            
k.texParameteri(ak.TEXTURE_WRAP_SD(b.wrapS));
            
k.texParameteri(ak.TEXTURE_WRAP_TD(b.wrapT));
            
k.texParameteri(ak.TEXTURE_MAG_FILTERD(b.magFilter));
            
k.texParameteri(ak.TEXTURE_MIN_FILTERD(b.minFilter))
        } else {
            
k.texParameteri(ak.TEXTURE_WRAP_Sk.CLAMP_TO_EDGE);
            
k.texParameteri(ak.TEXTURE_WRAP_Tk.CLAMP_TO_EDGE);
            
k.texParameteri(ak.TEXTURE_MAG_FILTERC(b.magFilter));
            
k.texParameteri(ak.TEXTURE_MIN_FILTERC(b.minFilter))
        }
        if (
Ya && b.type !== THREE.FloatType && (b.anisotropy || b.__oldAnisotropy)) {
            
k.texParameterf(aYa.TEXTURE_MAX_ANISOTROPY_EXTMath.min(b.anisotropypb));
            
b.__oldAnisotropy b.anisotropy
        
}
    }

    function 
x(ab) {
        
k.bindRenderbuffer(k.RENDERBUFFERa);
        if (
b.depthBuffer && !b.stencilBuffer) {
            
k.renderbufferStorage(k.RENDERBUFFERk.DEPTH_COMPONENT16b.widthb.height);
            
k.framebufferRenderbuffer(k.FRAMEBUFFERk.DEPTH_ATTACHMENTk.RENDERBUFFERa)
        } else if (
b.depthBuffer && b.stencilBuffer) {
            
k.renderbufferStorage(k.RENDERBUFFER,
                
k.DEPTH_STENCILb.widthb.height);
            
k.framebufferRenderbuffer(k.FRAMEBUFFERk.DEPTH_STENCIL_ATTACHMENTk.RENDERBUFFERa)
        } else 
k.renderbufferStorage(k.RENDERBUFFERk.RGBA4b.widthb.height)
    }

    function 
C(a) {
        return 
=== THREE.NearestFilter || === THREE.NearestMipMapNearestFilter || === THREE.NearestMipMapLinearFilter k.NEAREST k.LINEAR
    
}

    function 
D(a) {
        return 
=== THREE.RepeatWrapping k.REPEAT === THREE.ClampToEdgeWrapping k.CLAMP_TO_EDGE === THREE.MirroredRepeatWrapping k.MIRRORED_REPEAT === THREE.NearestFilter ?
            
k.NEAREST === THREE.NearestMipMapNearestFilter k.NEAREST_MIPMAP_NEAREST === THREE.NearestMipMapLinearFilter k.NEAREST_MIPMAP_LINEAR === THREE.LinearFilter k.LINEAR === THREE.LinearMipMapNearestFilter k.LINEAR_MIPMAP_NEAREST === THREE.LinearMipMapLinearFilter k.LINEAR_MIPMAP_LINEAR === THREE.UnsignedByteType k.UNSIGNED_BYTE === THREE.UnsignedShort4444Type k.UNSIGNED_SHORT_4_4_4_4 === THREE.UnsignedShort5551Type k.UNSIGNED_SHORT_5_5_5_1 === THREE.UnsignedShort565Type k.UNSIGNED_SHORT_5_6_5 === THREE.ByteType ?
            
k.BYTE === THREE.ShortType k.SHORT === THREE.UnsignedShortType k.UNSIGNED_SHORT === THREE.IntType k.INT === THREE.UnsignedIntType k.UNSIGNED_INT === THREE.FloatType k.FLOAT === THREE.AlphaFormat k.ALPHA === THREE.RGBFormat k.RGB === THREE.RGBAFormat k.RGBA === THREE.LuminanceFormat k.LUMINANCE === THREE.LuminanceAlphaFormat k.LUMINANCE_ALPHA === THREE.AddEquation k.FUNC_ADD === THREE.SubtractEquation k.FUNC_SUBTRACT === THREE.ReverseSubtractEquation k.FUNC_REVERSE_SUBTRACT === THREE.ZeroFactor k.ZERO :
            
=== THREE.OneFactor k.ONE === THREE.SrcColorFactor k.SRC_COLOR === THREE.OneMinusSrcColorFactor k.ONE_MINUS_SRC_COLOR === THREE.SrcAlphaFactor k.SRC_ALPHA === THREE.OneMinusSrcAlphaFactor k.ONE_MINUS_SRC_ALPHA === THREE.DstAlphaFactor k.DST_ALPHA === THREE.OneMinusDstAlphaFactor k.ONE_MINUS_DST_ALPHA === THREE.DstColorFactor k.DST_COLOR === THREE.OneMinusDstColorFactor k.ONE_MINUS_DST_COLOR === THREE.SrcAlphaSaturateFactor k.SRC_ALPHA_SATURATE 0
    
}
    
console.log("THREE.WebGLRenderer"THREE.REVISION);
    var 
=
        
|| {},
        
a.canvas !== void 0 a.canvas document.createElement("canvas"),
        
a.precision !== void 0 a.precision "highp",
        
a.alpha !== void 0 a.alpha true,
        
a.premultipliedAlpha !== void 0 a.premultipliedAlpha true,
        
a.antialias !== void 0 a.antialias false,
        
a.stencil !== void 0 a.stencil true,
        
a.preserveDrawingBuffer !== void 0 a.preserveDrawingBuffer false,
        
a.clearColor !== void 0 ? new THREE.Color(a.clearColor) : new THREE.Color(0),
        
a.clearAlpha !== void 0 a.clearAlpha 0,
        
a.maxLights !== void 0 a.maxLights 4;
    
this.domElement =
        
z;
    
this.context null;
    
this.autoUpdateScene this.autoUpdateObjects this.sortObjects this.autoClearStencil this.autoClearDepth this.autoClearColor this.autoClear true;
    
this.shadowMapEnabled this.physicallyBasedShading this.gammaOutput this.gammaInput false;
    
this.shadowMapCullFrontFaces this.shadowMapSoft this.shadowMapAutoUpdate true;
    
this.shadowMapCascade this.shadowMapDebug false;
    
this.maxMorphTargets 8;
    
this.maxMorphNormals 4;
    
this.autoScaleCubemaps true;
    
this.renderPluginsPre = [];
    
this.renderPluginsPost = [];
    
this.info = {
        
memory: {
            
programs0,
            
geometries0,
            
textures0
        
},
        
render: {
            
calls0,
            
vertices0,
            
faces0,
            
points0
        
}
    };
    var 
this,
        
aa = [],
        
0,
        
null,
        
null,
        
ba = -1,
        
null,
        
ca null,
        
ia 0,
        
= -1,
        
= -1,
        
= -1,
        
= -1,
        
fa = -1,
        
ma = -1,
        
Ga = -1,
        
na = -1,
        
Oa null,
        
Pa null,
        
bb null,
        
nb null,
        
gb 0,
        
Ob 0,
        
ob 0,
        
kb 0,
        
ec 0,
        
Ua 0,
        
Da = new THREE.Frustum,
        
Aa = new THREE.Matrix4,
        
hb = new THREE.Matrix4,
        
qa = new THREE.Vector4,
        
Fa = new THREE.Vector3,
        
Ra true,
        
sa = {
            
ambient: [000],
            
directional: {
                
length0,
                
colors: [],
                
positions: []
            },
            
point: {
                
length0,
                
colors: [],
                
positions: [],
                
distances: []
            },
            
spot: {
                
length0,
                
colors: [],
                
positions: [],
                
distances: [],
                
directions: [],
                
angles: [],
                
exponents: []
            }
        },
        
kYa;
    try {
        if (!(
z.getContext("experimental-webgl", {
                
alphaG,
                
premultipliedAlphaJ,
                
antialiasM,
                
stencilO,
                
preserveDrawingBufferX
            
}))) throw "Error creating WebGL context.";
    } catch (
Gb) {
        
console.error(Gb)
    }
    
k.getExtension("OES_texture_float");
    
k.getExtension("OES_standard_derivatives");
    
Ya k.getExtension("EXT_texture_filter_anisotropic") || k.getExtension("MOZ_EXT_texture_filter_anisotropic") || k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");
    
|| console.log("THREE.WebGLRenderer: Float textures not supported.");
    
|| console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
    
Ya || console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");
    
k.clearColor(0001);
    
k.clearDepth(1);
    
k.clearStencil(0);
    
k.enable(k.DEPTH_TEST);
    
k.depthFunc(k.LEQUAL);
    
k.frontFace(k.CCW);
    
k.cullFace(k.BACK);
    
k.enable(k.CULL_FACE);
    
k.enable(k.BLEND);
    
k.blendEquation(k.FUNC_ADD);
    
k.blendFunc(k.SRC_ALPHAk.ONE_MINUS_SRC_ALPHA);
    
k.clearColor(B.rB.g,
        
B.bF);
    
this.context k;
    
k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
    
k.getParameter(k.MAX_TEXTURE_SIZE);
    var 
Va k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),
        
pb Ya k.getParameter(Ya.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0,
        
cb 0,
        
dc cb && a;
    
this.getContext = function() {
        return 
k
    
};
    
this.supportsVertexTextures = function() {
        return 
cb
    
};
    
this.getMaxAnisotropy = function() {
        return 
pb
    
};
    
this.setSize = function(ab) {
        
z.width a;
        
z.height b;
        
this.setViewport(00z.widthz.height)
    };
    
this.setViewport = function(abcd) {
        
gb !== void 0 ?
            
0;
        
Ob !== void 0 0;
        
ob !== void 0 z.width;
        
kb !== void 0 z.height;
        
k.viewport(gbObobkb)
    };
    
this.setScissor = function(abcd) {
        
k.scissor(abcd)
    };
    
this.enableScissorTest = function(a) {
        
k.enable(k.SCISSOR_TEST) : k.disable(k.SCISSOR_TEST)
    };
    
this.setClearColorHex = function(ab) {
        
B.setHex(a);
        
b;
        
k.clearColor(B.rB.gB.bF)
    };
    
this.setClearColor = function(ab) {
        
B.copy(a);
        
b;
        
k.clearColor(B.rB.gB.bF)
    };
    
this.getClearColor = function() {
        return 
B
    
};
    
this.getClearAlpha = function() {
        return 
F
    
};
    
this.clear = function(abc) {
        var 
=
            
0;
        if (
=== void 0 || ak.COLOR_BUFFER_BIT;
        if (
=== void 0 || bk.DEPTH_BUFFER_BIT;
        if (
=== void 0 || ck.STENCIL_BUFFER_BIT;
        
k.clear(d)
    };
    
this.clearTarget = function(abcd) {
        
this.setRenderTarget(a);
        
this.clear(bcd)
    };
    
this.addPostPlugin = function(a) {
        
a.init(this);
        
this.renderPluginsPost.push(a)
    };
    
this.addPrePlugin = function(a) {
        
a.init(this);
        
this.renderPluginsPre.push(a)
    };
    
this.deallocateObject = function(a) {
        if (
a.__webglInit) {
            
a.__webglInit false;
            
delete a._modelViewMatrix;
            
delete a._normalMatrix;
            
delete a._normalMatrixArray;
            
delete a._modelViewMatrixArray;
            
delete a._objectMatrixArray;
            if (
instanceof THREE.Mesh)
                for (var 
b in a.geometry.geometryGroups) {
                    var 
a.geometry.geometryGroups[b];
                    
k.deleteBuffer(c.__webglVertexBuffer);
                    
k.deleteBuffer(c.__webglNormalBuffer);
                    
k.deleteBuffer(c.__webglTangentBuffer);
                    
k.deleteBuffer(c.__webglColorBuffer);
                    
k.deleteBuffer(c.__webglUVBuffer);
                    
k.deleteBuffer(c.__webglUV2Buffer);
                    
k.deleteBuffer(c.__webglSkinVertexABuffer);
                    
k.deleteBuffer(c.__webglSkinVertexBBuffer);
                    
k.deleteBuffer(c.__webglSkinIndicesBuffer);
                    
k.deleteBuffer(c.__webglSkinWeightsBuffer);
                    
k.deleteBuffer(c.__webglFaceBuffer);
                    
k.deleteBuffer(c.__webglLineBuffer);
                    var 
void 0,
                        
void 0;
                    if (
c.numMorphTargets) {
                        
0;
                        for (
c.numMorphTargetsed++) k.deleteBuffer(c.__webglMorphTargetsBuffers[d])
                    }
                    if (
c.numMorphNormals) {
                        
0;
                        for (
c.numMorphNormalsed++) k.deleteBuffer(c.__webglMorphNormalsBuffers[d])
                    }
                    if (
c.__webglCustomAttributesList) {
                        
void 0;
                        for (
d in c.__webglCustomAttributesListk.deleteBuffer(c.__webglCustomAttributesList[d].buffer)
                    }
                    
E.info.memory.geometries--
                } else if (
instanceof THREE.Ribbon) {
                    
a.geometry;
                    
k.deleteBuffer(a.__webglVertexBuffer);
                    
k.deleteBuffer(a.__webglColorBuffer);
                    
E.info.memory.geometries--
                } else if (
instanceof THREE.Line) {
                
a.geometry;
                
k.deleteBuffer(a.__webglVertexBuffer);
                
k.deleteBuffer(a.__webglColorBuffer);
                
E.info.memory.geometries--
            } else if (
instanceof THREE.ParticleSystem) {
                
a.geometry;
                
k.deleteBuffer(a.__webglVertexBuffer);
                
k.deleteBuffer(a.__webglColorBuffer);
                
E.info.memory.geometries--
            }
        }
    };
    
this.deallocateTexture = function(a) {
        if (
a.__webglInit) {
            
a.__webglInit =
                
false;
            
k.deleteTexture(a.__webglTexture);
            
E.info.memory.textures--
        }
    };
    
this.deallocateRenderTarget = function(a) {
        if (
&& a.__webglTexture) {
            
k.deleteTexture(a.__webglTexture);
            if (
instanceof THREE.WebGLRenderTargetCube)
                for (var 
06b++) {
                    
k.deleteFramebuffer(a.__webglFramebuffer[b]);
                    
k.deleteRenderbuffer(a.__webglRenderbuffer[b])
                } else {
                    
k.deleteFramebuffer(a.__webglFramebuffer);
                    
k.deleteRenderbuffer(a.__webglRenderbuffer)
                }
        }
    };
    
this.deallocateMaterial = function(a) {
        var 
a.program;
        if (
b) {
            
a.program void 0;
            var 
cd=
                
false,
                
0;
            for (
aa.lengthca++) {
                
aa[a];
                if (
d.program === b) {
                    
d.usedTimes--;
                    
d.usedTimes === && (true);
                    break
                }
            }
            if (
e) {
                
= [];
                
0;
                for (
aa.lengthca++) {
                    
aa[a];
                    
d.program !== && e.push(d)
                }
                
aa e;
                
k.deleteProgram(b);
                
E.info.memory.programs--
            }
        }
    };
    
this.updateShadowMap = function(ab) {
        
null;
        
ba na Ga = -1;
        
Ra true;
        
= -1;
        
this.shadowMapPlugin.update(ab)
    };
    
this.renderBufferImmediate = function(abc) {
        if (
a.hasPositions && !a.__webglVertexBuffera.__webglVertexBuffer k.createBuffer();
        if (
a.hasNormals && !a.__webglNormalBuffera.__webglNormalBuffer =
            
k.createBuffer();
        if (
a.hasUvs && !a.__webglUvBuffera.__webglUvBuffer k.createBuffer();
        if (
a.hasColors && !a.__webglColorBuffera.__webglColorBuffer k.createBuffer();
        if (
a.hasPositions) {
            
k.bindBuffer(k.ARRAY_BUFFERa.__webglVertexBuffer);
            
k.bufferData(k.ARRAY_BUFFERa.positionArrayk.DYNAMIC_DRAW);
            
k.enableVertexAttribArray(b.attributes.position);
            
k.vertexAttribPointer(b.attributes.position3k.FLOATfalse00)
        }
        if (
a.hasNormals) {
            
k.bindBuffer(k.ARRAY_BUFFERa.__webglNormalBuffer);
            if (
c.shading === THREE.FlatShading) {
                var 
d,
                    
efghijmlnoa.count 3;
                for (
0p9) {
                    
a.normalArray;
                    
n[o];
                    
n[1];
                    
n[2];
                    
n[3];
                    
n[4];
                    
n[5];
                    
n[6];
                    
n[7];
                    
n[8];
                    
= (h) / 3;
                    
= (j) / 3;
                    
= (l) / 3;
                    
n[o] = d;
                    
n[1] = e;
                    
n[2] = f;
                    
n[3] = d;
                    
n[4] = e;
                    
n[5] = f;
                    
n[6] = d;
                    
n[7] = e;
                    
n[8] = f
                
}
            }
            
k.bufferData(k.ARRAY_BUFFERa.normalArrayk.DYNAMIC_DRAW);
            
k.enableVertexAttribArray(b.attributes.normal);
            
k.vertexAttribPointer(b.attributes.normal3k.FLOATfalse00)
        }
        if (
a.hasUvs && c.map) {
            
k.bindBuffer(k.ARRAY_BUFFERa.__webglUvBuffer);
            
k.bufferData(k.ARRAY_BUFFER,
                
a.uvArrayk.DYNAMIC_DRAW);
            
k.enableVertexAttribArray(b.attributes.uv);
            
k.vertexAttribPointer(b.attributes.uv2k.FLOATfalse00)
        }
        if (
a.hasColors && c.vertexColors !== THREE.NoColors) {
            
k.bindBuffer(k.ARRAY_BUFFERa.__webglColorBuffer);
            
k.bufferData(k.ARRAY_BUFFERa.colorArrayk.DYNAMIC_DRAW);
            
k.enableVertexAttribArray(b.attributes.color);
            
k.vertexAttribPointer(b.attributes.color3k.FLOATfalse00)
        }
        
k.drawArrays(k.TRIANGLES0a.count);
        
a.count 0
    
};
    
this.renderBufferDirect = function(abcdef) {
        if (
d.visible !== false) {
            
=
                
q(abcdf);
            
c.attributes;
            
false;
            
e.id 16777215 c.id + (d.wireframe 0);
            if (
!== H) {
                
d;
                
true
            
}
            if (
instanceof THREE.Mesh) {
                
e.offsets;
                
f.length && (true);
                
0;
                for (
f.lengthc; ++d) {
                    var 
f[d].index;
                    if (
b) {
                        var 
e.attributes.position,
                            
h.itemSize;
                        
k.bindBuffer(k.ARRAY_BUFFERh.buffer);
                        
k.vertexAttribPointer(a.positionik.FLOATfalse04);
                        
e.attributes.normal;
                        if (
a.normal >= && h) {
                            
h.itemSize;
                            
k.bindBuffer(k.ARRAY_BUFFERh.buffer);
                            
k.vertexAttribPointer(a.normalik.FLOATfalse04)
                        }
                        
e.attributes.uv;
                        if (
a.uv >= && h)
                            if (
h.buffer) {
                                
h.itemSize;
                                
k.bindBuffer(k.ARRAY_BUFFERh.buffer);
                                
k.vertexAttribPointer(a.uvik.FLOATfalse04);
                                
k.enableVertexAttribArray(a.uv)
                            } else 
k.disableVertexAttribArray(a.uv);
                        
e.attributes.color;
                        if (
a.color >= && h) {
                            
h.itemSize;
                            
k.bindBuffer(k.ARRAY_BUFFERh.buffer);
                            
k.vertexAttribPointer(a.colorik.FLOATfalse04)
                        }
                        
e.attributes.tangent;
                        if (
a.tangent >= && h) {
                            
h.itemSize;
                            
k.bindBuffer(k.ARRAY_BUFFERh.buffer);
                            
k.vertexAttribPointer(a.tangentik.FLOATfalse04)
                        }
                        
k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,
                            
e.attributes.index.buffer)
                    }
                    
k.drawElements(k.TRIANGLESf[d].countk.UNSIGNED_SHORTf[d].start 2);
                    
E.info.render.calls++;
                    
E.info.render.vertices E.info.render.vertices f[d].count;
                    
E.info.render.faces E.info.render.faces f[d].count 3
                
}
            }
        }
    };
    
this.renderBuffer = function(abcdef) {
        if (
d.visible !== false) {
            var 
giq(abcdf),
                
c.attributes,
                
false,
                
e.id 16777215 c.id + (d.wireframe 0);
            if (
!== H) {
                
c;
                
true
            
}
            if (!
d.morphTargets && b.position >= 0) {
                if (
a) {
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglVertexBuffer);
                    
k.vertexAttribPointer(b.position,
                        
3k.FLOATfalse00)
                }
            } else if (
f.morphTargetBase) {
                
d.program.attributes;
                if (
f.morphTargetBase !== -1) {
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglMorphTargetsBuffers[f.morphTargetBase]);
                    
k.vertexAttribPointer(c.position3k.FLOATfalse00)
                } else if (
c.position >= 0) {
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglVertexBuffer);
                    
k.vertexAttribPointer(c.position3k.FLOATfalse00)
                }
                if (
f.morphTargetForcedOrder.length) {
                    var 
0;
                    
f.morphTargetForcedOrder;
                    for (
f.morphTargetInfluencesd.numSupportedMorphTargets && i.length;) {
                        
k.bindBuffer(k.ARRAY_BUFFER,
                            
e.__webglMorphTargetsBuffers[i[j]]);
                        
k.vertexAttribPointer(c["morphTarget" j], 3k.FLOATfalse00);
                        if (
d.morphNormals) {
                            
k.bindBuffer(k.ARRAY_BUFFERe.__webglMorphNormalsBuffers[i[j]]);
                            
k.vertexAttribPointer(c["morphNormal" j], 3k.FLOATfalse00)
                        }
                        
f.__webglMorphTargetInfluences[j] = g[i[j]];
                        
j++
                    }
                } else {
                    
= [];
                    
f.morphTargetInfluences;
                    var 
mg.length;
                    for (
0lm++) {
                        
g[m];
                        
&& i.push([mj])
                    }
                    if (
i.length d.numSupportedMorphTargets) {
                        
i.sort(h);
                        
i.length d.numSupportedMorphTargets
                    
} else i.length d.numSupportedMorphNormals ?
                        
i.sort(h) : i.length === && i.push([00]);
                    for (
0d.numSupportedMorphTargets;) {
                        if (
i[j]) {
                            
i[j][0];
                            
k.bindBuffer(k.ARRAY_BUFFERe.__webglMorphTargetsBuffers[m]);
                            
k.vertexAttribPointer(c["morphTarget" j], 3k.FLOATfalse00);
                            if (
d.morphNormals) {
                                
k.bindBuffer(k.ARRAY_BUFFERe.__webglMorphNormalsBuffers[m]);
                                
k.vertexAttribPointer(c["morphNormal" j], 3k.FLOATfalse00)
                            }
                            
f.__webglMorphTargetInfluences[j] = g[m]
                        } else {
                            
k.vertexAttribPointer(c["morphTarget" j], 3k.FLOATfalse00);
                            
d.morphNormals && k.vertexAttribPointer(c["morphNormal" +
                                
j], 3k.FLOATfalse00);
                            
f.__webglMorphTargetInfluences[j] = 0
                        
}
                        
j++
                    }
                }
                
d.program.uniforms.morphTargetInfluences !== null && k.uniform1fv(d.program.uniforms.morphTargetInfluencesf.__webglMorphTargetInfluences)
            }
            if (
a) {
                if (
e.__webglCustomAttributesList) {
                    
0;
                    for (
e.__webglCustomAttributesList.lengthig++) {
                        
e.__webglCustomAttributesList[g];
                        if (
b[c.buffer.belongsToAttribute] >= 0) {
                            
k.bindBuffer(k.ARRAY_BUFFERc.buffer);
                            
k.vertexAttribPointer(b[c.buffer.belongsToAttribute], c.sizek.FLOATfalse00)
                        }
                    }
                }
                if (
b.color >= 0) {
                    
k.bindBuffer(k.ARRAY_BUFFER,
                        
e.__webglColorBuffer);
                    
k.vertexAttribPointer(b.color3k.FLOATfalse00)
                }
                if (
b.normal >= 0) {
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglNormalBuffer);
                    
k.vertexAttribPointer(b.normal3k.FLOATfalse00)
                }
                if (
b.tangent >= 0) {
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglTangentBuffer);
                    
k.vertexAttribPointer(b.tangent4k.FLOATfalse00)
                }
                if (
b.uv >= 0)
                    if (
e.__webglUVBuffer) {
                        
k.bindBuffer(k.ARRAY_BUFFERe.__webglUVBuffer);
                        
k.vertexAttribPointer(b.uv2k.FLOATfalse00);
                        
k.enableVertexAttribArray(b.uv)
                    } else 
k.disableVertexAttribArray(b.uv);
                if (
b.uv2 >= 0)
                    if (
e.__webglUV2Buffer) {
                        
k.bindBuffer(k.ARRAY_BUFFERe.__webglUV2Buffer);
                        
k.vertexAttribPointer(b.uv22k.FLOATfalse00);
                        
k.enableVertexAttribArray(b.uv2)
                    } else 
k.disableVertexAttribArray(b.uv2);
                if (
d.skinning && b.skinVertexA >= && b.skinVertexB >= && b.skinIndex >= && b.skinWeight >= 0) {
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglSkinVertexABuffer);
                    
k.vertexAttribPointer(b.skinVertexA4k.FLOATfalse00);
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglSkinVertexBBuffer);
                    
k.vertexAttribPointer(b.skinVertexB4k.FLOAT,
                        
false00);
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglSkinIndicesBuffer);
                    
k.vertexAttribPointer(b.skinIndex4k.FLOATfalse00);
                    
k.bindBuffer(k.ARRAY_BUFFERe.__webglSkinWeightsBuffer);
                    
k.vertexAttribPointer(b.skinWeight4k.FLOATfalse00)
                }
            }
            if (
instanceof THREE.Mesh) {
                if (
d.wireframe) {
                    
d.wireframeLinewidth;
                    if (
!== nb) {
                        
k.lineWidth(d);
                        
nb d
                    
}
                    
&& k.bindBuffer(k.ELEMENT_ARRAY_BUFFERe.__webglLineBuffer);
                    
k.drawElements(k.LINESe.__webglLineCountk.UNSIGNED_SHORT0)
                } else {
                    
&& k.bindBuffer(k.ELEMENT_ARRAY_BUFFERe.__webglFaceBuffer);
                    
k.drawElements(k.TRIANGLESe.__webglFaceCountk.UNSIGNED_SHORT0)
                }
                
E.info.render.calls++;
                
E.info.render.vertices E.info.render.vertices e.__webglFaceCount;
                
E.info.render.faces E.info.render.faces e.__webglFaceCount 3
            
} else if (instanceof THREE.Line) {
                
f.type === THREE.LineStrip k.LINE_STRIP k.LINES;
                
d.linewidth;
                if (
!== nb) {
                    
k.lineWidth(d);
                    
nb d
                
}
                
k.drawArrays(f0e.__webglLineCount);
                
E.info.render.calls++
            } else if (
instanceof THREE.ParticleSystem) {
                
k.drawArrays(k.POINTS0e.__webglParticleCount);
                
E.info.render.calls++;
                
E.info.render.points E.info.render.points e.__webglParticleCount
            
} else if (instanceof THREE.Ribbon) {
                
k.drawArrays(k.TRIANGLE_STRIP0e.__webglVertexCount);
                
E.info.render.calls++
            }
        }
    };
    
this.render = function(abcd) {
        var 
efhma.__lights,
            
a.fog;
        
ba = -1;
        
Ra true;
        if (
b.parent === void 0) {
            
console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");
            
a.add(b)
        }
        
this.autoUpdateScene && a.updateMatrixWorld();
        if (!
b._viewMatrixArrayb._viewMatrixArray = new Float32Array(16);
        if (!
b._projectionMatrixArrayb._projectionMatrixArray =
            new 
Float32Array(16);
        
b.matrixWorldInverse.getInverse(b.matrixWorld);
        
b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);
        
b.projectionMatrix.flattenToArray(b._projectionMatrixArray);
        
Aa.multiply(b.projectionMatrixb.matrixWorldInverse);
        
Da.setFromMatrix(Aa);
        
this.autoUpdateObjects && this.initWebGLObjects(a);
        
i(this.renderPluginsPreab);
        
E.info.render.calls 0;
        
E.info.render.vertices 0;
        
E.info.render.faces 0;
        
E.info.render.points 0;
        
this.setRenderTarget(c);
        (
this.autoClear || d) && this.clear(this.autoClearColor,
            
this.autoClearDepththis.autoClearStencil);
        
a.__webglObjects;
        
0;
        for (
m.lengthed++) {
            
m[d];
            
f.object;
            
f.render false;
            if (
h.visible && (!(instanceof THREE.Mesh || instanceof THREE.ParticleSystem) || !h.frustumCulled || Da.contains(h))) {
                
s(hb);
                var 
f,
                    
p.object,
                    
p.buffer,
                    
void 0,
                    
void 0,
                    
r.material;
                if (
instanceof THREE.MeshFaceMaterial) {
                    
q.materialIndex;
                    if (
>= 0) {
                        
r.geometry.materials[t];
                        if (
t.transparent) {
                            
p.transparent t;
                            
p.opaque null
                        
} else {
                            
p.opaque t;
                            
p.transparent null
                        
}
                    }
                } else if (
t)
                    if (
t.transparent) {
                        
p.transparent =
                            
t;
                        
p.opaque null
                    
} else {
                        
p.opaque t;
                        
p.transparent null
                    
}
                
f.render true;
                if (
this.sortObjects)
                    if (
h.renderDepthf.h.renderDepth;
                    else {
                        
qa.copy(h.matrixWorld.getPosition());
                        
Aa.multiplyVector3(qa);
                        
f.qa.z
                    
}
            }
        }
        
this.sortObjects && m.sort(g);
        
a.__webglObjectsImmediate;
        
0;
        for (
m.lengthed++) {
            
m[d];
            
f.object;
            if (
h.visible) {
                
s(hb);
                
f.object.material;
                if (
h.transparent) {
                    
f.transparent h;
                    
f.opaque null
                
} else {
                    
f.opaque h;
                    
f.transparent null
                
}
            }
        }
        if (
a.overrideMaterial) {
            
a.overrideMaterial;
            
this.setBlending(d.blendingd.blendEquation,
                
d.blendSrcd.blendDst);
            
this.setDepthTest(d.depthTest);
            
this.setDepthWrite(d.depthWrite);
            
w(d.polygonOffsetd.polygonOffsetFactord.polygonOffsetUnits);
            
j(a.__webglObjectsfalse""bnotrued);
            
l(a.__webglObjectsImmediate""bnofalsed)
        } else {
            
this.setBlending(THREE.NormalBlending);
            
j(a.__webglObjectstrue"opaque"bnofalse);
            
l(a.__webglObjectsImmediate"opaque"bnofalse);
            
j(a.__webglObjectsfalse"transparent"bnotrue);
            
l(a.__webglObjectsImmediate"transparent"bnotrue)
        }
        
i(this.renderPluginsPost,
            
ab);
        if (
&& c.generateMipmaps && c.minFilter !== THREE.NearestFilter && c.minFilter !== THREE.LinearFilter)
            if (
instanceof THREE.WebGLRenderTargetCube) {
                
k.bindTexture(k.TEXTURE_CUBE_MAPc.__webglTexture);
                
k.generateMipmap(k.TEXTURE_CUBE_MAP);
                
k.bindTexture(k.TEXTURE_CUBE_MAPnull)
            } else {
                
k.bindTexture(k.TEXTURE_2Dc.__webglTexture);
                
k.generateMipmap(k.TEXTURE_2D);
                
k.bindTexture(k.TEXTURE_2Dnull)
            }
        
this.setDepthTest(true);
        
this.setDepthWrite(true)
    };
    
this.renderImmediateObject = function(abcde) {
        var 
q(abcde);
        
= -1;
        
E.setObjectFaces(e);
        
e.immediateRenderCallback e.immediateRenderCallback(fkDa) : e.render(function(a) {
            
E.renderBufferImmediate(afd)
        })
    };
    
this.initWebGLObjects = function(a) {
        if (!
a.__webglObjects) {
            
a.__webglObjects = [];
            
a.__webglObjectsImmediate = [];
            
a.__webglSprites = [];
            
a.__webglFlares = []
        }
        for (; 
a.__objectsAdded.length;) {
            var 
a.__objectsAdded[0],
                
a,
                
void 0,
                
void 0,
                
void 0;
            if (!
g.__webglInit) {
                
g.__webglInit true;
                
g._modelViewMatrix = new THREE.Matrix4;
                
g._normalMatrix = new THREE.Matrix3;
                if (
instanceof THREE.Mesh) {
                    
=
                        
g.geometry;
                    if (
instanceof THREE.Geometry) {
                        if (
j.geometryGroups === void 0) {
                            var 
j,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
= {},
                                
q.morphTargets.length,
                                
q.morphNormals.length;
                            
q.geometryGroups = {};
                            
0;
                            for (
q.faces.lengthts++) {
                                
q.faces[s];
                                
u.materialIndex;
                                
!== void 0 : -1;
                                
C[x] === void 0 && (C[x] = {
                                    
hashx,
                                    
counter0
                                
});
                                
C[x].hash "_" C[x].counter;
                                
q.geometryGroups[z] === void 0 && (q.geometryGroups[z] = {
                                    
faces3: [],
                                    
faces4: [],
                                    
materialIndexv,
                                    
vertices0,
                                    
numMorphTargetsD,
                                    
numMorphNormalsB
                                
});
                                
instanceof THREE.Face3 4;
                                if (
q.geometryGroups[z].vertices 65535) {
                                    
C[x].counter C[x].counter 1;
                                    
C[x].hash "_" C[x].counter;
                                    
q.geometryGroups[z] === void 0 && (q.geometryGroups[z] = {
                                        
faces3: [],
                                        
faces4: [],
                                        
materialIndexv,
                                        
vertices0,
                                        
numMorphTargetsD,
                                        
numMorphNormalsB
                                    
})
                                }
                                
instanceof THREE.Face3 q.geometryGroups[z].faces3.push(s) : q.geometryGroups[z].faces4.push(s);
                                
q.geometryGroups[z].vertices q.geometryGroups[z].vertices w
                            
}
                            
q.geometryGroupsList = [];
                            var 
void 0;
                            for (
R in q.geometryGroups) {
                                
q.geometryGroups[R].id =
                                    
ia++;
                                
q.geometryGroupsList.push(q.geometryGroups[R])
                            }
                        }
                        for (
i in j.geometryGroups) {
                            
j.geometryGroups[i];
                            if (!
l.__webglVertexBuffer) {
                                var 
l;
                                
H.__webglVertexBuffer k.createBuffer();
                                
H.__webglNormalBuffer k.createBuffer();
                                
H.__webglTangentBuffer k.createBuffer();
                                
H.__webglColorBuffer k.createBuffer();
                                
H.__webglUVBuffer k.createBuffer();
                                
H.__webglUV2Buffer k.createBuffer();
                                
H.__webglSkinVertexABuffer k.createBuffer();
                                
H.__webglSkinVertexBBuffer k.createBuffer();
                                
H.__webglSkinIndicesBuffer k.createBuffer();
                                
H.__webglSkinWeightsBuffer =
                                    
k.createBuffer();
                                
H.__webglFaceBuffer k.createBuffer();
                                
H.__webglLineBuffer k.createBuffer();
                                var 
void 0,
                                    
void 0;
                                if (
H.numMorphTargets) {
                                    
H.__webglMorphTargetsBuffers = [];
                                    
0;
                                    for (
H.numMorphTargetsPG++) H.__webglMorphTargetsBuffers.push(k.createBuffer())
                                }
                                if (
H.numMorphNormals) {
                                    
H.__webglMorphNormalsBuffers = [];
                                    
0;
                                    for (
H.numMorphNormalsPG++) H.__webglMorphNormalsBuffers.push(k.createBuffer())
                                }
                                
E.info.memory.geometries++;
                                var 
l,
                                    
g,
                                    
J.geometry,
                                    
F.faces3,
                                    
F.faces4,
                                    
M.length N.length 4,
                                    
M.length *
                                    
N.length 2,
                                    
M.length N.length 4,
                                    
c(JF),
                                    
e(Q),
                                    
d(Q),
                                    
ba Q.vertexColors Q.vertexColors false;
                                
F.__vertexArray = new Float32Array(3);
                                if (
TF.__normalArray = new Float32Array(3);
                                if (
U.hasTangentsF.__tangentArray = new Float32Array(4);
                                if (
baF.__colorArray = new Float32Array(3);
                                if (
X) {
                                    if (
U.faceUvs.length || U.faceVertexUvs.length 0F.__uvArray = new Float32Array(2);
                                    if (
U.faceUvs.length || U.faceVertexUvs.length 1F.__uv2Array = new Float32Array(2)
                                }
                                if (
J.geometry.skinWeights.length && J.geometry.skinIndices.length) {
                                    
F.__skinVertexAArray =
                                        new 
Float32Array(4);
                                    
F.__skinVertexBArray = new Float32Array(4);
                                    
F.__skinIndexArray = new Float32Array(4);
                                    
F.__skinWeightArray = new Float32Array(4)
                                }
                                
F.__faceArray = new Uint16Array(3);
                                
F.__lineArray = new Uint16Array(2);
                                var 
fa void 0,
                                    
ca void 0;
                                if (
F.numMorphTargets) {
                                    
F.__morphTargetsArrays = [];
                                    
fa 0;
                                    for (
ca F.numMorphTargetsfa cafa++) F.__morphTargetsArrays.push(new Float32Array(3))
                                }
                                if (
F.numMorphNormals) {
                                    
F.__morphNormalsArrays = [];
                                    
fa 0;
                                    for (
ca F.numMorphNormalsfa cafa++) F.__morphNormalsArrays.push(new Float32Array(*
                                        
3))
                                }
                                
F.__webglFaceCount 3;
                                
F.__webglLineCount 2;
                                if (
Q.attributes) {
                                    if (
F.__webglCustomAttributesList === void 0F.__webglCustomAttributesList = [];
                                    var 
aa void 0;
                                    for (
aa in Q.attributes) {
                                        var 
na Q.attributes[aa],
                                            
ma = {},
                                            
bb;
                                        for (
bb in nama[bb] = na[bb];
                                        if (!
ma.__webglInitialized || ma.createUniqueBuffers) {
                                            
ma.__webglInitialized true;
                                            var 
Ga 1;
                                            
ma.type === "v2" Ga ma.type === "v3" Ga ma.type === "v4" Ga ma.type === "c" && (Ga 3);
                                            
ma.size Ga;
                                            
ma.array = new Float32Array(Ga);
                                            
ma.buffer k.createBuffer();
                                            
ma.buffer.belongsToAttribute =
                                                
aa;
                                            
na.needsUpdate true;
                                            
ma.__original na
                                        
}
                                        
F.__webglCustomAttributesList.push(ma)
                                    }
                                }
                                
F.__inittedArrays true;
                                
j.verticesNeedUpdate true;
                                
j.morphTargetsNeedUpdate true;
                                
j.elementsNeedUpdate true;
                                
j.uvsNeedUpdate true;
                                
j.normalsNeedUpdate true;
                                
j.tangentsNeedUpdate true;
                                
j.colorsNeedUpdate true
                            
}
                        }
                    } else if (
instanceof THREE.BufferGeometry) {
                        var 
Oa j,
                            
Pa void 0,
                            
qa void 0,
                            
sa void 0;
                        for (
Pa in Oa.attributes) {
                            
sa Pa === "index" k.ELEMENT_ARRAY_BUFFER k.ARRAY_BUFFER;
                            
qa Oa.attributes[Pa];
                            
qa.buffer k.createBuffer();
                            
k.bindBuffer(sa,
                                
qa.buffer);
                            
k.bufferData(saqa.array, k.STATIC_DRAW)
                        }
                    }
                } else if (
instanceof THREE.Ribbon) {
                    
g.geometry;
                    if (!
j.__webglVertexBuffer) {
                        var 
Aa j;
                        
Aa.__webglVertexBuffer k.createBuffer();
                        
Aa.__webglColorBuffer k.createBuffer();
                        
E.info.memory.geometries++;
                        var 
Da j,
                            
Fa Da.vertices.length;
                        
Da.__vertexArray = new Float32Array(Fa 3);
                        
Da.__colorArray = new Float32Array(Fa 3);
                        
Da.__webglVertexCount Fa;
                        
j.verticesNeedUpdate true;
                        
j.colorsNeedUpdate true
                    
}
                } else if (
instanceof THREE.Line) {
                    
g.geometry;
                    if (!
j.__webglVertexBuffer) {
                        var 
nb =
                            
j;
                        
nb.__webglVertexBuffer k.createBuffer();
                        
nb.__webglColorBuffer k.createBuffer();
                        
E.info.memory.geometries++;
                        var 
gb j,
                            
Va g,
                            
Ra gb.vertices.length;
                        
gb.__vertexArray = new Float32Array(Ra 3);
                        
gb.__colorArray = new Float32Array(Ra 3);
                        
gb.__webglLineCount Ra;
                        
b(gbVa);
                        
j.verticesNeedUpdate true;
                        
j.colorsNeedUpdate true
                    
}
                } else if (
instanceof THREE.ParticleSystem) {
                    
g.geometry;
                    if (!
j.__webglVertexBuffer) {
                        var 
Ya j;
                        
Ya.__webglVertexBuffer k.createBuffer();
                        
Ya.__webglColorBuffer k.createBuffer();
                        
E.info.geometries++;
                        var 
Ua =
                            
j,
                            
Ob g,
                            
ob Ua.vertices.length;
                        
Ua.__vertexArray = new Float32Array(ob 3);
                        
Ua.__colorArray = new Float32Array(ob 3);
                        
Ua.__sortArray = [];
                        
Ua.__webglParticleCount ob;
                        
b(UaOb);
                        
j.verticesNeedUpdate true;
                        
j.colorsNeedUpdate true
                    
}
                }
            }
            if (!
g.__webglActive) {
                if (
instanceof THREE.Mesh) {
                    
g.geometry;
                    if (
instanceof THREE.BufferGeometrym(h.__webglObjectsjg);
                    else
                        for (
i in j.geometryGroups) {
                            
j.geometryGroups[i];
                            
m(h.__webglObjectslg)
                        }
                } else if (
instanceof THREE.Ribbon || instanceof THREE.Line || instanceof THREE.ParticleSystem) {
                    
=
                        
g.geometry;
                    
m(h.__webglObjectsjg)
                } else 
instanceof THREE.ImmediateRenderObject || g.immediateRenderCallback h.__webglObjectsImmediate.push({
                    
objectg,
                    
opaquenull,
                    
transparentnull
                
}) : instanceof THREE.Sprite h.__webglSprites.push(g) : instanceof THREE.LensFlare && h.__webglFlares.push(g);
                
g.__webglActive true
            
}
            
a.__objectsAdded.splice(01)
        }
        for (; 
a.__objectsRemoved.length;) {
            var 
db a.__objectsRemoved[0],
                
kb a;
            
db instanceof THREE.Mesh || db instanceof THREE.ParticleSystem || db instanceof THREE.Ribbon || db instanceof
            
THREE.Line r(kb.__webglObjectsdb) : db instanceof THREE.Sprite o(kb.__webglSpritesdb) : db instanceof THREE.LensFlare o(kb.__webglFlaresdb) : (db instanceof THREE.ImmediateRenderObject || db.immediateRenderCallback) && r(kb.__webglObjectsImmediatedb);
            
db.__webglActive false;
            
a.__objectsRemoved.splice(01)
        }
        for (var 
hb 0pb a.__webglObjects.lengthhb pbhb++) {
            var 
lb a.__webglObjects[hb].object,
                
da lb.geometry,
                
cb void 0,
                
oc void 0,
                
Wa void 0;
            if (
lb instanceof THREE.Mesh)
                if (
da instanceof THREE.BufferGeometry) {
                    if (
da.verticesNeedUpdate ||
                        
da.elementsNeedUpdate || da.uvsNeedUpdate || da.normalsNeedUpdate || da.colorsNeedUpdate || da.tangentsNeedUpdate) {
                        var 
Ib da,
                            
pc k.DYNAMIC_DRAW,
                            
ec = !da.dynamic,
                            
qc Ib.attributes,
                            
Gb qc.index,
                            
dc qc.position,
                            
Yc qc.normal,
                            
Zc qc.uv,
                            
$c qc.color,
                            
ad qc.tangent;
                        if (
Ib.elementsNeedUpdate && Gb !== void 0) {
                            
k.bindBuffer(k.ELEMENT_ARRAY_BUFFERGb.buffer);
                            
k.bufferData(k.ELEMENT_ARRAY_BUFFERGb.array, pc)
                        }
                        if (
Ib.verticesNeedUpdate && dc !== void 0) {
                            
k.bindBuffer(k.ARRAY_BUFFERdc.buffer);
                            
k.bufferData(k.ARRAY_BUFFERdc.array, pc)
                        }
                        if (
Ib.normalsNeedUpdate &&
                            
Yc !== void 0) {
                            
k.bindBuffer(k.ARRAY_BUFFERYc.buffer);
                            
k.bufferData(k.ARRAY_BUFFERYc.array, pc)
                        }
                        if (
Ib.uvsNeedUpdate && Zc !== void 0) {
                            
k.bindBuffer(k.ARRAY_BUFFERZc.buffer);
                            
k.bufferData(k.ARRAY_BUFFERZc.array, pc)
                        }
                        if (
Ib.colorsNeedUpdate && $c !== void 0) {
                            
k.bindBuffer(k.ARRAY_BUFFER$c.buffer);
                            
k.bufferData(k.ARRAY_BUFFER$c.array, pc)
                        }
                        if (
Ib.tangentsNeedUpdate && ad !== void 0) {
                            
k.bindBuffer(k.ARRAY_BUFFERad.buffer);
                            
k.bufferData(k.ARRAY_BUFFERad.array, pc)
                        }
                        if (
ec) {
                            var 
md void 0;
                            for (
md in Ib.attributesdelete Ib.attributes[md].array
                        }
                    }
                    
da.verticesNeedUpdate =
                        
false;
                    
da.elementsNeedUpdate false;
                    
da.uvsNeedUpdate false;
                    
da.normalsNeedUpdate false;
                    
da.colorsNeedUpdate false;
                    
da.tangentsNeedUpdate false
                
} else {
                    for (var 
bd 0yd da.geometryGroupsList.lengthbd ydbd++) {
                        
cb da.geometryGroupsList[bd];
                        
Wa c(lbcb);
                        
oc Wa.attributes && n(Wa);
                        if (
da.verticesNeedUpdate || da.morphTargetsNeedUpdate || da.elementsNeedUpdate || da.uvsNeedUpdate || da.normalsNeedUpdate || da.colorsNeedUpdate || da.tangentsNeedUpdate || oc) {
                            var 
ga cb,
                                
zd lb,
                                
Za k.DYNAMIC_DRAW,
                                
Ad = !da.dynamic,
                                
hc Wa;
                            if (
ga.__inittedArrays) {
                                var 
nd =
                                    
d(hc),
                                    
cd hc.vertexColors hc.vertexColors false,
                                    
od e(hc),
                                    
Kc nd === THREE.SmoothShading,
                                    
void 0,
                                    
void 0,
                                    
jb void 0,
                                    
void 0,
                                    
rc void 0,
                                    
Rb void 0,
                                    
mb void 0,
                                    
Lc void 0,
                                    
Jb void 0,
                                    
sc void 0,
                                    
tc void 0,
                                    
void 0,
                                    
void 0,
                                    $ = 
void 0,
                                    
oa void 0,
                                    
qb void 0,
                                    
rb void 0,
                                    
sb void 0,
                                    
xc void 0,
                                    
tb void 0,
                                    
ub void 0,
                                    
vb void 0,
                                    
yc void 0,
                                    
wb void 0,
                                    
xb void 0,
                                    
yb void 0,
                                    
zc void 0,
                                    
zb void 0,
                                    
Ab void 0,
                                    
Bb void 0,
                                    
Ac void 0,
                                    
Cb void 0,
                                    
Db void 0,
                                    
Eb void 0,
                                    
Bc void 0,
                                    
Sb void 0,
                                    
Tb void 0,
                                    
Ub void 0,
                                    
Mc void 0,
                                    
Vb void 0,
                                    
Wb void 0,
                                    
Xb void 0,
                                    
Nc =
                                    
void 0,
                                    
ja void 0,
                                    
pd void 0,
                                    
Yb void 0,
                                    
uc void 0,
                                    
vc void 0,
                                    
Ja void 0,
                                    
qd void 0,
                                    
Ha void 0,
                                    
Ia void 0,
                                    
Zb void 0,
                                    
Kb void 0,
                                    
za 0,
                                    
Ea 0,
                                    
Lb 0,
                                    
Mb 0,
                                    
eb 0,
                                    
Qa 0,
                                    
pa 0,
                                    
Sa 0,
                                    
Ba 0,
                                    
0,
                                    
ea 0,
                                    
0,
                                    
$a void 0,
                                    
Ka ga.__vertexArray,
                                    
Cc ga.__uvArray,
                                    
Dc ga.__uv2Array,
                                    
fb ga.__normalArray,
                                    
ta ga.__tangentArray,
                                    
La ga.__colorArray,
                                    
ua ga.__skinVertexAArray,
                                    
va ga.__skinVertexBArray,
                                    
wa ga.__skinIndexArray,
                                    
xa ga.__skinWeightArray,
                                    
dd ga.__morphTargetsArrays,
                                    
ed ga.__morphNormalsArrays,
                                    
fd ga.__webglCustomAttributesList,
                                    
void 0,
                                    
Fb ga.__faceArray,
                                    
ab ga.__lineArray,
                                    
Ta zd.geometry,
                                    
Bd Ta.elementsNeedUpdate,
                                    
rd Ta.uvsNeedUpdate,
                                    
Cd Ta.normalsNeedUpdate,
                                    
Dd Ta.tangentsNeedUpdate,
                                    
Ed Ta.colorsNeedUpdate,
                                    
Fd Ta.morphTargetsNeedUpdate,
                                    
ic Ta.vertices,
                                    
ka ga.faces3,
                                    
la ga.faces4,
                                    
Ca Ta.faces,
                                    
gd Ta.faceVertexUvs[0],
                                    
hd Ta.faceVertexUvs[1],
                                    
jc Ta.skinVerticesA,
                                    
kc Ta.skinVerticesB,
                                    
lc Ta.skinIndices,
                                    
$b Ta.skinWeights,
                                    
ac Ta.morphTargets,
                                    
Oc Ta.morphNormals;
                                if (
Ta.verticesNeedUpdate) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
Ca[ka[I]];
                                        
ic[L.a];
                                        
ic[L.b];
                                        $ = 
ic[L.c];
                                        
Ka[Ea] = Y.x;
                                        
Ka[Ea +
                                            
1] = Y.y;
                                        
Ka[Ea 2] = Y.z;
                                        
Ka[Ea 3] = Z.x;
                                        
Ka[Ea 4] = Z.y;
                                        
Ka[Ea 5] = Z.z;
                                        
Ka[Ea 6] = $.x;
                                        
Ka[Ea 7] = $.y;
                                        
Ka[Ea 8] = $.z;
                                        
Ea Ea 9
                                    
}
                                    
0;
                                    for (
la.lengthVI++) {
                                        
Ca[la[I]];
                                        
ic[L.a];
                                        
ic[L.b];
                                        $ = 
ic[L.c];
                                        
oa ic[L.d];
                                        
Ka[Ea] = Y.x;
                                        
Ka[Ea 1] = Y.y;
                                        
Ka[Ea 2] = Y.z;
                                        
Ka[Ea 3] = Z.x;
                                        
Ka[Ea 4] = Z.y;
                                        
Ka[Ea 5] = Z.z;
                                        
Ka[Ea 6] = $.x;
                                        
Ka[Ea 7] = $.y;
                                        
Ka[Ea 8] = $.z;
                                        
Ka[Ea 9] = oa.x;
                                        
Ka[Ea 10] = oa.y;
                                        
Ka[Ea 11] = oa.z;
                                        
Ea Ea 12
                                    
}
                                    
k.bindBuffer(k.ARRAY_BUFFERga.__webglVertexBuffer);
                                    
k.bufferData(k.ARRAY_BUFFERKaZa)
                                }
                                if (
Fd) {
                                    
Ja 0;
                                    for (
qd ac.lengthJa qdJa++) {
                                        
ea 0;
                                        for (
ka.length<
                                            
VI++) {
                                            
Zb ka[I];
                                            
Ca[Zb];
                                            
ac[Ja].vertices[L.a];
                                            
ac[Ja].vertices[L.b];
                                            $ = 
ac[Ja].vertices[L.c];
                                            
Ha dd[Ja];
                                            
Ha[ea] = Y.x;
                                            
Ha[ea 1] = Y.y;
                                            
Ha[ea 2] = Y.z;
                                            
Ha[ea 3] = Z.x;
                                            
Ha[ea 4] = Z.y;
                                            
Ha[ea 5] = Z.z;
                                            
Ha[ea 6] = $.x;
                                            
Ha[ea 7] = $.y;
                                            
Ha[ea 8] = $.z;
                                            if (
hc.morphNormals) {
                                                if (
Kc) {
                                                    
Kb Oc[Ja].vertexNormals[Zb];
                                                    
tb Kb.a;
                                                    
ub Kb.b;
                                                    
vb Kb.c
                                                
} else vb ub tb Oc[Ja].faceNormals[Zb];
                                                
Ia ed[Ja];
                                                
Ia[ea] = tb.x;
                                                
Ia[ea 1] = tb.y;
                                                
Ia[ea 2] = tb.z;
                                                
Ia[ea 3] = ub.x;
                                                
Ia[ea 4] = ub.y;
                                                
Ia[ea 5] = ub.z;
                                                
Ia[ea 6] = vb.x;
                                                
Ia[ea 7] = vb.y;
                                                
Ia[ea 8] = vb.z
                                            
}
                                            
ea ea 9
                                        
}
                                        
0;
                                        for (
la.lengthVI++) {
                                            
Zb =
                                                
la[I];
                                            
Ca[Zb];
                                            
ac[Ja].vertices[L.a];
                                            
ac[Ja].vertices[L.b];
                                            $ = 
ac[Ja].vertices[L.c];
                                            
oa ac[Ja].vertices[L.d];
                                            
Ha dd[Ja];
                                            
Ha[ea] = Y.x;
                                            
Ha[ea 1] = Y.y;
                                            
Ha[ea 2] = Y.z;
                                            
Ha[ea 3] = Z.x;
                                            
Ha[ea 4] = Z.y;
                                            
Ha[ea 5] = Z.z;
                                            
Ha[ea 6] = $.x;
                                            
Ha[ea 7] = $.y;
                                            
Ha[ea 8] = $.z;
                                            
Ha[ea 9] = oa.x;
                                            
Ha[ea 10] = oa.y;
                                            
Ha[ea 11] = oa.z;
                                            if (
hc.morphNormals) {
                                                if (
Kc) {
                                                    
Kb Oc[Ja].vertexNormals[Zb];
                                                    
tb Kb.a;
                                                    
ub Kb.b;
                                                    
vb Kb.c;
                                                    
yc Kb.d
                                                
} else yc vb ub tb Oc[Ja].faceNormals[Zb];
                                                
Ia ed[Ja];
                                                
Ia[ea] = tb.x;
                                                
Ia[ea 1] = tb.y;
                                                
Ia[ea 2] = tb.z;
                                                
Ia[ea 3] = ub.x;
                                                
Ia[ea 4] = ub.y;
                                                
Ia[ea 5] = ub.z;
                                                
Ia[ea +
                                                    
6] = vb.x;
                                                
Ia[ea 7] = vb.y;
                                                
Ia[ea 8] = vb.z;
                                                
Ia[ea 9] = yc.x;
                                                
Ia[ea 10] = yc.y;
                                                
Ia[ea 11] = yc.z
                                            
}
                                            
ea ea 12
                                        
}
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglMorphTargetsBuffers[Ja]);
                                        
k.bufferData(k.ARRAY_BUFFERdd[Ja], Za);
                                        if (
hc.morphNormals) {
                                            
k.bindBuffer(k.ARRAY_BUFFERga.__webglMorphNormalsBuffers[Ja]);
                                            
k.bufferData(k.ARRAY_BUFFERed[Ja], Za)
                                        }
                                    }
                                }
                                if (
$b.length) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
Ca[ka[I]];
                                        
zb $b[L.a];
                                        
Ab $b[L.b];
                                        
Bb $b[L.c];
                                        
xa[K] = zb.x;
                                        
xa[1] = zb.y;
                                        
xa[2] = zb.z;
                                        
xa[3] = zb.w;
                                        
xa[4] = Ab.x;
                                        
xa[5] = Ab.y;
                                        
xa[6] = Ab.z;
                                        
xa[7] = Ab.w;
                                        
xa[8] = Bb.x;
                                        
xa[9] = Bb.y;
                                        
xa[10] = Bb.z;
                                        
xa[11] = Bb.w;
                                        
Cb lc[L.a];
                                        
Db lc[L.b];
                                        
Eb lc[L.c];
                                        
wa[K] = Cb.x;
                                        
wa[1] = Cb.y;
                                        
wa[2] = Cb.z;
                                        
wa[3] = Cb.w;
                                        
wa[4] = Db.x;
                                        
wa[5] = Db.y;
                                        
wa[6] = Db.z;
                                        
wa[7] = Db.w;
                                        
wa[8] = Eb.x;
                                        
wa[9] = Eb.y;
                                        
wa[10] = Eb.z;
                                        
wa[11] = Eb.w;
                                        
Sb jc[L.a];
                                        
Tb jc[L.b];
                                        
Ub jc[L.c];
                                        
ua[K] = Sb.x;
                                        
ua[1] = Sb.y;
                                        
ua[2] = Sb.z;
                                        
ua[3] = 1;
                                        
ua[4] = Tb.x;
                                        
ua[5] = Tb.y;
                                        
ua[6] = Tb.z;
                                        
ua[7] = 1;
                                        
ua[8] = Ub.x;
                                        
ua[9] = Ub.y;
                                        
ua[10] = Ub.z;
                                        
ua[11] = 1;
                                        
Vb kc[L.a];
                                        
Wb kc[L.b];
                                        
Xb kc[L.c];
                                        
va[K] = Vb.x;
                                        
va[1] = Vb.y;
                                        
va[2] = Vb.z;
                                        
va[3] =
                                            
1;
                                        
va[4] = Wb.x;
                                        
va[5] = Wb.y;
                                        
va[6] = Wb.z;
                                        
va[7] = 1;
                                        
va[8] = Xb.x;
                                        
va[9] = Xb.y;
                                        
va[10] = Xb.z;
                                        
va[11] = 1;
                                        
12
                                    
}
                                    
0;
                                    for (
la.lengthVI++) {
                                        
Ca[la[I]];
                                        
zb $b[L.a];
                                        
Ab $b[L.b];
                                        
Bb $b[L.c];
                                        
Ac $b[L.d];
                                        
xa[K] = zb.x;
                                        
xa[1] = zb.y;
                                        
xa[2] = zb.z;
                                        
xa[3] = zb.w;
                                        
xa[4] = Ab.x;
                                        
xa[5] = Ab.y;
                                        
xa[6] = Ab.z;
                                        
xa[7] = Ab.w;
                                        
xa[8] = Bb.x;
                                        
xa[9] = Bb.y;
                                        
xa[10] = Bb.z;
                                        
xa[11] = Bb.w;
                                        
xa[12] = Ac.x;
                                        
xa[13] = Ac.y;
                                        
xa[14] = Ac.z;
                                        
xa[15] = Ac.w;
                                        
Cb lc[L.a];
                                        
Db lc[L.b];
                                        
Eb lc[L.c];
                                        
Bc lc[L.d];
                                        
wa[K] = Cb.x;
                                        
wa[1] = Cb.y;
                                        
wa[2] = Cb.z;
                                        
wa[3] = Cb.w;
                                        
wa[+
                                            
4] = Db.x;
                                        
wa[5] = Db.y;
                                        
wa[6] = Db.z;
                                        
wa[7] = Db.w;
                                        
wa[8] = Eb.x;
                                        
wa[9] = Eb.y;
                                        
wa[10] = Eb.z;
                                        
wa[11] = Eb.w;
                                        
wa[12] = Bc.x;
                                        
wa[13] = Bc.y;
                                        
wa[14] = Bc.z;
                                        
wa[15] = Bc.w;
                                        
Sb jc[L.a];
                                        
Tb jc[L.b];
                                        
Ub jc[L.c];
                                        
Mc jc[L.d];
                                        
ua[K] = Sb.x;
                                        
ua[1] = Sb.y;
                                        
ua[2] = Sb.z;
                                        
ua[3] = 1;
                                        
ua[4] = Tb.x;
                                        
ua[5] = Tb.y;
                                        
ua[6] = Tb.z;
                                        
ua[7] = 1;
                                        
ua[8] = Ub.x;
                                        
ua[9] = Ub.y;
                                        
ua[10] = Ub.z;
                                        
ua[11] = 1;
                                        
ua[12] = Mc.x;
                                        
ua[13] = Mc.y;
                                        
ua[14] = Mc.z;
                                        
ua[15] = 1;
                                        
Vb kc[L.a];
                                        
Wb kc[L.b];
                                        
Xb kc[L.c];
                                        
Nc kc[L.d];
                                        
va[K] = Vb.x;
                                        
va[1] = Vb.y;
                                        
va[2] = Vb.z;
                                        
va[3] = 1;
                                        
va[4] = Wb.x;
                                        
va[5] = Wb.y;
                                        
va[6] = Wb.z;
                                        
va[7] = 1;
                                        
va[8] = Xb.x;
                                        
va[9] = Xb.y;
                                        
va[10] = Xb.z;
                                        
va[11] = 1;
                                        
va[12] = Nc.x;
                                        
va[13] = Nc.y;
                                        
va[14] = Nc.z;
                                        
va[15] = 1;
                                        
16
                                    
}
                                    if (
0) {
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglSkinVertexABuffer);
                                        
k.bufferData(k.ARRAY_BUFFERuaZa);
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglSkinVertexBBuffer);
                                        
k.bufferData(k.ARRAY_BUFFERvaZa);
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglSkinIndicesBuffer);
                                        
k.bufferData(k.ARRAY_BUFFERwaZa);
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglSkinWeightsBuffer);
                                        
k.bufferData(k.ARRAY_BUFFER,
                                            
xaZa)
                                    }
                                }
                                if (
Ed && cd) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
Ca[ka[I]];
                                        
mb L.vertexColors;
                                        
Lc L.color;
                                        if (
mb.length === && cd === THREE.VertexColors) {
                                            
wb mb[0];
                                            
xb mb[1];
                                            
yb mb[2]
                                        } else 
yb xb wb Lc;
                                        
La[Ba] = wb.r;
                                        
La[Ba 1] = wb.g;
                                        
La[Ba 2] = wb.b;
                                        
La[Ba 3] = xb.r;
                                        
La[Ba 4] = xb.g;
                                        
La[Ba 5] = xb.b;
                                        
La[Ba 6] = yb.r;
                                        
La[Ba 7] = yb.g;
                                        
La[Ba 8] = yb.b;
                                        
Ba Ba 9
                                    
}
                                    
0;
                                    for (
la.lengthVI++) {
                                        
Ca[la[I]];
                                        
mb L.vertexColors;
                                        
Lc L.color;
                                        if (
mb.length === && cd === THREE.VertexColors) {
                                            
wb mb[0];
                                            
xb mb[1];
                                            
yb mb[2];
                                            
zc mb[3]
                                        } else 
zc yb xb wb Lc;
                                        
La[Ba] = wb.r;
                                        
La[Ba 1] = wb.g;
                                        
La[Ba 2] = wb.b;
                                        
La[Ba 3] = xb.r;
                                        
La[Ba 4] = xb.g;
                                        
La[Ba 5] = xb.b;
                                        
La[Ba 6] = yb.r;
                                        
La[Ba 7] = yb.g;
                                        
La[Ba 8] = yb.b;
                                        
La[Ba 9] = zc.r;
                                        
La[Ba 10] = zc.g;
                                        
La[Ba 11] = zc.b;
                                        
Ba Ba 12
                                    
}
                                    if (
Ba 0) {
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglColorBuffer);
                                        
k.bufferData(k.ARRAY_BUFFERLaZa)
                                    }
                                }
                                if (
Dd && Ta.hasTangents) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
Ca[ka[I]];
                                        
Jb L.vertexTangents;
                                        
qb Jb[0];
                                        
rb Jb[1];
                                        
sb Jb[2];
                                        
ta[pa] = qb.x;
                                        
ta[pa 1] = qb.y;
                                        
ta[pa 2] = qb.z;
                                        
ta[pa 3] = qb.w;
                                        
ta[pa 4] = rb.x;
                                        
ta[pa 5] = rb.y;
                                        
ta[pa 6] = rb.z;
                                        
ta[pa 7] = rb.w;
                                        
ta[pa 8] = sb.x;
                                        
ta[pa 9] = sb.y;
                                        
ta[pa +
                                            
10] = sb.z;
                                        
ta[pa 11] = sb.w;
                                        
pa pa 12
                                    
}
                                    
0;
                                    for (
la.lengthVI++) {
                                        
Ca[la[I]];
                                        
Jb L.vertexTangents;
                                        
qb Jb[0];
                                        
rb Jb[1];
                                        
sb Jb[2];
                                        
xc Jb[3];
                                        
ta[pa] = qb.x;
                                        
ta[pa 1] = qb.y;
                                        
ta[pa 2] = qb.z;
                                        
ta[pa 3] = qb.w;
                                        
ta[pa 4] = rb.x;
                                        
ta[pa 5] = rb.y;
                                        
ta[pa 6] = rb.z;
                                        
ta[pa 7] = rb.w;
                                        
ta[pa 8] = sb.x;
                                        
ta[pa 9] = sb.y;
                                        
ta[pa 10] = sb.z;
                                        
ta[pa 11] = sb.w;
                                        
ta[pa 12] = xc.x;
                                        
ta[pa 13] = xc.y;
                                        
ta[pa 14] = xc.z;
                                        
ta[pa 15] = xc.w;
                                        
pa pa 16
                                    
}
                                    
k.bindBuffer(k.ARRAY_BUFFERga.__webglTangentBuffer);
                                    
k.bufferData(k.ARRAY_BUFFERtaZa)
                                }
                                if (
Cd && nd) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
Ca[ka[I]];
                                        
rc L.vertexNormals;
                                        
Rb L.normal;
                                        if (
rc.length === && Kc)
                                            for (
ja 0ja 3ja++) {
                                                
Yb rc[ja];
                                                
fb[Qa] = Yb.x;
                                                
fb[Qa 1] = Yb.y;
                                                
fb[Qa 2] = Yb.z;
                                                
Qa Qa 3
                                            
} else
                                                for (
ja 0ja 3ja++) {
                                                    
fb[Qa] = Rb.x;
                                                    
fb[Qa 1] = Rb.y;
                                                    
fb[Qa 2] = Rb.z;
                                                    
Qa Qa 3
                                                
}
                                    }
                                    
0;
                                    for (
la.lengthVI++) {
                                        
Ca[la[I]];
                                        
rc L.vertexNormals;
                                        
Rb L.normal;
                                        if (
rc.length === && Kc)
                                            for (
ja 0ja 4ja++) {
                                                
Yb rc[ja];
                                                
fb[Qa] = Yb.x;
                                                
fb[Qa 1] = Yb.y;
                                                
fb[Qa 2] = Yb.z;
                                                
Qa Qa 3
                                            
} else
                                                for (
ja 0ja 4ja++) {
                                                    
fb[Qa] = Rb.x;
                                                    
fb[Qa 1] = Rb.y;
                                                    
fb[Qa 2] = Rb.z;
                                                    
Qa Qa 3
                                                
}
                                    }
                                    
k.bindBuffer(k.ARRAY_BUFFERga.__webglNormalBuffer);
                                    
k.bufferData(k.ARRAY_BUFFERfbZa)
                                }
                                if (
rd && gd && od) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
jb ka[I];
                                        
Ca[jb];
                                        
sc gd[jb];
                                        if (
sc !== void 0)
                                            for (
ja 0ja 3ja++) {
                                                
uc sc[ja];
                                                
Cc[Lb] = uc.u;
                                                
Cc[Lb 1] = uc.v;
                                                
Lb Lb 2
                                            
}
                                    }
                                    
0;
                                    for (
la.lengthVI++) {
                                        
jb la[I];
                                        
Ca[jb];
                                        
sc gd[jb];
                                        if (
sc !== void 0)
                                            for (
ja 0ja 4ja++) {
                                                
uc sc[ja];
                                                
Cc[Lb] = uc.u;
                                                
Cc[Lb 1] = uc.v;
                                                
Lb Lb 2
                                            
}
                                    }
                                    if (
Lb 0) {
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglUVBuffer);
                                        
k.bufferData(k.ARRAY_BUFFERCcZa)
                                    }
                                }
                                if (
rd && hd && od) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
jb ka[I];
                                        
Ca[jb];
                                        
tc hd[jb];
                                        if (
tc !== void 0)
                                            for (
ja =
                                                
0ja 3ja++) {
                                                
vc tc[ja];
                                                
Dc[Mb] = vc.u;
                                                
Dc[Mb 1] = vc.v;
                                                
Mb Mb 2
                                            
}
                                    }
                                    
0;
                                    for (
la.lengthVI++) {
                                        
jb la[I];
                                        
Ca[jb];
                                        
tc hd[jb];
                                        if (
tc !== void 0)
                                            for (
ja 0ja 4ja++) {
                                                
vc tc[ja];
                                                
Dc[Mb] = vc.u;
                                                
Dc[Mb 1] = vc.v;
                                                
Mb Mb 2
                                            
}
                                    }
                                    if (
Mb 0) {
                                        
k.bindBuffer(k.ARRAY_BUFFERga.__webglUV2Buffer);
                                        
k.bufferData(k.ARRAY_BUFFERDcZa)
                                    }
                                }
                                if (
Bd) {
                                    
0;
                                    for (
ka.lengthVI++) {
                                        
Ca[ka[I]];
                                        
Fb[eb] = za;
                                        
Fb[eb 1] = za 1;
                                        
Fb[eb 2] = za 2;
                                        
eb eb 3;
                                        
ab[Sa] = za;
                                        
ab[Sa 1] = za 1;
                                        
ab[Sa 2] = za;
                                        
ab[Sa 3] = za 2;
                                        
ab[Sa 4] = za 1;
                                        
ab[Sa 5] = za 2;
                                        
Sa Sa 6;
                                        
za za 3
                                    
}
                                    
0;
                                    for (
la.lengthVI++) {
                                        
=
                                            
Ca[la[I]];
                                        
Fb[eb] = za;
                                        
Fb[eb 1] = za 1;
                                        
Fb[eb 2] = za 3;
                                        
Fb[eb 3] = za 1;
                                        
Fb[eb 4] = za 2;
                                        
Fb[eb 5] = za 3;
                                        
eb eb 6;
                                        
ab[Sa] = za;
                                        
ab[Sa 1] = za 1;
                                        
ab[Sa 2] = za;
                                        
ab[Sa 3] = za 3;
                                        
ab[Sa 4] = za 1;
                                        
ab[Sa 5] = za 2;
                                        
ab[Sa 6] = za 2;
                                        
ab[Sa 7] = za 3;
                                        
Sa Sa 8;
                                        
za za 4
                                    
}
                                    
k.bindBuffer(k.ELEMENT_ARRAY_BUFFERga.__webglFaceBuffer);
                                    
k.bufferData(k.ELEMENT_ARRAY_BUFFERFbZa);
                                    
k.bindBuffer(k.ELEMENT_ARRAY_BUFFERga.__webglLineBuffer);
                                    
k.bufferData(k.ELEMENT_ARRAY_BUFFERabZa)
                                }
                                if (
fd) {
                                    
ja 0;
                                    for (
pd fd.lengthja pdja++) {
                                        
fd[ja];
                                        if (
y.__original.needsUpdate) {
                                            
=
                                                
0;
                                            if (
y.size === 1)
                                                if (
y.boundTo === void 0 || y.boundTo === "vertices") {
                                                    
0;
                                                    for (
ka.lengthVI++) {
                                                        
Ca[ka[I]];
                                                        
y.array[A] = y.value[L.a];
                                                        
y.array[1] = y.value[L.b];
                                                        
y.array[2] = y.value[L.c];
                                                        
3
                                                    
}
                                                    
0;
                                                    for (
la.lengthVI++) {
                                                        
Ca[la[I]];
                                                        
y.array[A] = y.value[L.a];
                                                        
y.array[1] = y.value[L.b];
                                                        
y.array[2] = y.value[L.c];
                                                        
y.array[3] = y.value[L.d];
                                                        
4
                                                    
}
                                                } else {
                                                    if (
y.boundTo === "faces") {
                                                        
0;
                                                        for (
ka.lengthVI++) {
                                                            
$a y.value[ka[I]];
                                                            
y.array[A] = $a;
                                                            
y.array[1] = $a;
                                                            
y.array[2] = $a;
                                                            
3
                                                        
}
                                                        
0;
                                                        for (
la.lengthVI++) {
                                                            
$a y.value[la[I]];
                                                            
y.array[A] = $a;
                                                            
y.array[1] = $a;
                                                            
y.array[2] = $a;
                                                            
y.array[3] = $a;
                                                            
4
                                                        
}
                                                    }
                                                } else if (
y.size === 2)
                                                if (
y.boundTo === void 0 || y.boundTo === "vertices") {
                                                    
0;
                                                    for (
ka.lengthVI++) {
                                                        
Ca[ka[I]];
                                                        
y.value[L.a];
                                                        
y.value[L.b];
                                                        $ = 
y.value[L.c];
                                                        
y.array[A] = Y.x;
                                                        
y.array[1] = Y.y;
                                                        
y.array[2] = Z.x;
                                                        
y.array[3] = Z.y;
                                                        
y.array[4] = $.x;
                                                        
y.array[5] = $.y;
                                                        
6
                                                    
}
                                                    
0;
                                                    for (
la.lengthVI++) {
                                                        
Ca[la[I]];
                                                        
y.value[L.a];
                                                        
y.value[L.b];
                                                        $ = 
y.value[L.c];
                                                        
oa y.value[L.d];
                                                        
y.array[A] = Y.x;
                                                        
y.array[1] = Y.y;
                                                        
y.array[2] = Z.x;
                                                        
y.array[3] = Z.y;
                                                        
y.array[+
                                                            
4] = $.x;
                                                        
y.array[5] = $.y;
                                                        
y.array[6] = oa.x;
                                                        
y.array[7] = oa.y;
                                                        
8
                                                    
}
                                                } else {
                                                    if (
y.boundTo === "faces") {
                                                        
0;
                                                        for (
ka.lengthVI++) {
                                                            $ = 
$a y.value[ka[I]];
                                                            
y.array[A] = Y.x;
                                                            
y.array[1] = Y.y;
                                                            
y.array[2] = Z.x;
                                                            
y.array[3] = Z.y;
                                                            
y.array[4] = $.x;
                                                            
y.array[5] = $.y;
                                                            
6
                                                        
}
                                                        
0;
                                                        for (
la.lengthVI++) {
                                                            
oa = $ = $a y.value[la[I]];
                                                            
y.array[A] = Y.x;
                                                            
y.array[1] = Y.y;
                                                            
y.array[2] = Z.x;
                                                            
y.array[3] = Z.y;
                                                            
y.array[4] = $.x;
                                                            
y.array[5] = $.y;
                                                            
y.array[6] = oa.x;
                                                            
y.array[7] = oa.y;
                                                            
8
                                                        
}
                                                    }
                                                } else if (
y.size === 3) {
                                                var 
ha;
                                                
ha y.type === "c" ? ["r",
                                                    
"g""b"
                                                
] : ["x""y""z"];
                                                if (
y.boundTo === void 0 || y.boundTo === "vertices") {
                                                    
0;
                                                    for (
ka.lengthVI++) {
                                                        
Ca[ka[I]];
                                                        
y.value[L.a];
                                                        
y.value[L.b];
                                                        $ = 
y.value[L.c];
                                                        
y.array[A] = Y[ha[0]];
                                                        
y.array[1] = Y[ha[1]];
                                                        
y.array[2] = Y[ha[2]];
                                                        
y.array[3] = Z[ha[0]];
                                                        
y.array[4] = Z[ha[1]];
                                                        
y.array[5] = Z[ha[2]];
                                                        
y.array[6] = $[ha[0]];
                                                        
y.array[7] = $[ha[1]];
                                                        
y.array[8] = $[ha[2]];
                                                        
9
                                                    
}
                                                    
0;
                                                    for (
la.lengthVI++) {
                                                        
Ca[la[I]];
                                                        
y.value[L.a];
                                                        
y.value[L.b];
                                                        $ = 
y.value[L.c];
                                                        
oa y.value[L.d];
                                                        
y.array[A] = Y[ha[0]];
                                                        
y.array[1] = Y[ha[1]];
                                                        
y.array[2] = Y[ha[2]];
                                                        
y.array[3] = Z[ha[0]];
                                                        
y.array[4] = Z[ha[1]];
                                                        
y.array[5] = Z[ha[2]];
                                                        
y.array[6] = $[ha[0]];
                                                        
y.array[7] = $[ha[1]];
                                                        
y.array[8] = $[ha[2]];
                                                        
y.array[9] = oa[ha[0]];
                                                        
y.array[10] = oa[ha[1]];
                                                        
y.array[11] = oa[ha[2]];
                                                        
12
                                                    
}
                                                } else if (
y.boundTo === "faces") {
                                                    
0;
                                                    for (
ka.lengthVI++) {
                                                        $ = 
$a y.value[ka[I]];
                                                        
y.array[A] = Y[ha[0]];
                                                        
y.array[1] = Y[ha[1]];
                                                        
y.array[2] = Y[ha[2]];
                                                        
y.array[3] = Z[ha[0]];
                                                        
y.array[4] = Z[ha[1]];
                                                        
y.array[5] = Z[ha[2]];
                                                        
y.array[6] = $[ha[0]];
                                                        
y.array[7] = $[ha[1]];
                                                        
y.array[8] =
                                                            $[
ha[2]];
                                                        
9
                                                    
}
                                                    
0;
                                                    for (
la.lengthVI++) {
                                                        
oa = $ = $a y.value[la[I]];
                                                        
y.array[A] = Y[ha[0]];
                                                        
y.array[1] = Y[ha[1]];
                                                        
y.array[2] = Y[ha[2]];
                                                        
y.array[3] = Z[ha[0]];
                                                        
y.array[4] = Z[ha[1]];
                                                        
y.array[5] = Z[ha[2]];
                                                        
y.array[6] = $[ha[0]];
                                                        
y.array[7] = $[ha[1]];
                                                        
y.array[8] = $[ha[2]];
                                                        
y.array[9] = oa[ha[0]];
                                                        
y.array[10] = oa[ha[1]];
                                                        
y.array[11] = oa[ha[2]];
                                                        
12
                                                    
}
                                                }
                                            } else if (
y.size === 4)
                                                if (
y.boundTo === void 0 || y.boundTo === "vertices") {
                                                    
0;
                                                    for (
ka.lengthVI++) {
                                                        
Ca[ka[I]];
                                                        
y.value[L.a];
                                                        
y.value[L.b];
                                                        $ = 
y.value[L.c];
                                                        
y.array[A] =
                                                            
Y.x;
                                                        
y.array[1] = Y.y;
                                                        
y.array[2] = Y.z;
                                                        
y.array[3] = Y.w;
                                                        
y.array[4] = Z.x;
                                                        
y.array[5] = Z.y;
                                                        
y.array[6] = Z.z;
                                                        
y.array[7] = Z.w;
                                                        
y.array[8] = $.x;
                                                        
y.array[9] = $.y;
                                                        
y.array[10] = $.z;
                                                        
y.array[11] = $.w;
                                                        
12
                                                    
}
                                                    
0;
                                                    for (
la.lengthVI++) {
                                                        
Ca[la[I]];
                                                        
y.value[L.a];
                                                        
y.value[L.b];
                                                        $ = 
y.value[L.c];
                                                        
oa y.value[L.d];
                                                        
y.array[A] = Y.x;
                                                        
y.array[1] = Y.y;
                                                        
y.array[2] = Y.z;
                                                        
y.array[3] = Y.w;
                                                        
y.array[4] = Z.x;
                                                        
y.array[5] = Z.y;
                                                        
y.array[6] = Z.z;
                                                        
y.array[7] = Z.w;
                                                        
y.array[8] = $.x;
                                                        
y.array[9] = $.y;
                                                        
y.array[10] = $.z;
                                                        
y.array[11] =
                                                            $.
w;
                                                        
y.array[12] = oa.x;
                                                        
y.array[13] = oa.y;
                                                        
y.array[14] = oa.z;
                                                        
y.array[15] = oa.w;
                                                        
16
                                                    
}
                                                } else if (
y.boundTo === "faces") {
                                                
0;
                                                for (
ka.lengthVI++) {
                                                    $ = 
$a y.value[ka[I]];
                                                    
y.array[A] = Y.x;
                                                    
y.array[1] = Y.y;
                                                    
y.array[2] = Y.z;
                                                    
y.array[3] = Y.w;
                                                    
y.array[4] = Z.x;
                                                    
y.array[5] = Z.y;
                                                    
y.array[6] = Z.z;
                                                    
y.array[7] = Z.w;
                                                    
y.array[8] = $.x;
                                                    
y.array[9] = $.y;
                                                    
y.array[10] = $.z;
                                                    
y.array[11] = $.w;
                                                    
12
                                                
}
                                                
0;
                                                for (
la.lengthVI++) {
                                                    
oa = $ = $a y.value[la[I]];
                                                    
y.array[A] = Y.x;
                                                    
y.array[1] = Y.y;
                                                    
y.array[2] = Y.z;
                                                    
y.array[3] = Y.w;
                                                    
y.array[4] = Z.x;
                                                    
y.array[5] = Z.y;
                                                    
y.array[6] = Z.z;
                                                    
y.array[7] = Z.w;
                                                    
y.array[8] = $.x;
                                                    
y.array[9] = $.y;
                                                    
y.array[10] = $.z;
                                                    
y.array[11] = $.w;
                                                    
y.array[12] = oa.x;
                                                    
y.array[13] = oa.y;
                                                    
y.array[14] = oa.z;
                                                    
y.array[15] = oa.w;
                                                    
16
                                                
}
                                            }
                                            
k.bindBuffer(k.ARRAY_BUFFERy.buffer);
                                            
k.bufferData(k.ARRAY_BUFFERy.array, Za)
                                        }
                                    }
                                }
                                if (
Ad) {
                                    
delete ga.__inittedArrays;
                                    
delete ga.__colorArray;
                                    
delete ga.__normalArray;
                                    
delete ga.__tangentArray;
                                    
delete ga.__uvArray;
                                    
delete ga.__uv2Array;
                                    
delete ga.__faceArray;
                                    
delete ga.__vertexArray;
                                    
delete ga.__lineArray;
                                    
delete ga.__skinVertexAArray;
                                    
delete ga.__skinVertexBArray;
                                    
delete ga.__skinIndexArray;
                                    
delete ga.__skinWeightArray
                                
}
                            }
                        }
                    }
                    
da.verticesNeedUpdate false;
                    
da.morphTargetsNeedUpdate false;
                    
da.elementsNeedUpdate false;
                    
da.uvsNeedUpdate false;
                    
da.normalsNeedUpdate false;
                    
da.colorsNeedUpdate false;
                    
da.tangentsNeedUpdate false;
                    
Wa.attributes && p(Wa)
                } else if (
lb instanceof THREE.Ribbon) {
                if (
da.verticesNeedUpdate || da.colorsNeedUpdate) {
                    var 
bc da,
                        
sd k.DYNAMIC_DRAW,
                        
Ec void 0,
                        
Fc void 0,
                        
Pc void 0,
                        
cc void 0,
                        
Qc void 0,
                        
td bc.vertices,
                        
ud bc.colors,
                        
Gd td.length,
                        
Hd ud.length,
                        
Rc bc.__vertexArray,
                        
Sc bc.__colorArray,
                        
Id bc.colorsNeedUpdate;
                    if (
bc.verticesNeedUpdate) {
                        for (
Ec 0Ec GdEc++) {
                            
Pc td[Ec];
                            
cc Ec 3;
                            
Rc[cc] = Pc.x;
                            
Rc[cc 1] = Pc.y;
                            
Rc[cc 2] = Pc.z
                        
}
                        
k.bindBuffer(k.ARRAY_BUFFERbc.__webglVertexBuffer);
                        
k.bufferData(k.ARRAY_BUFFERRcsd)
                    }
                    if (
Id) {
                        for (
Fc 0Fc HdFc++) {
                            
Qc ud[Fc];
                            
cc Fc 3;
                            
Sc[cc] = Qc.r;
                            
Sc[cc 1] = Qc.g;
                            
Sc[cc 2] = Qc.b
                        
}
                        
k.bindBuffer(k.ARRAY_BUFFERbc.__webglColorBuffer);
                        
k.bufferData(k.ARRAY_BUFFERScsd)
                    }
                }
                
da.verticesNeedUpdate false;
                
da.colorsNeedUpdate =
                    
false
            
} else if (lb instanceof THREE.Line) {
                
Wa c(lbcb);
                
oc Wa.attributes && n(Wa);
                if (
da.verticesNeedUpdate || da.colorsNeedUpdate || oc) {
                    var 
Nb da,
                        
id k.DYNAMIC_DRAW,
                        
Gc void 0,
                        
Hc void 0,
                        
Tc void 0,
                        
ya void 0,
                        
Uc void 0,
                        
vd Nb.vertices,
                        
wd Nb.colors,
                        
Jd vd.length,
                        
Kd wd.length,
                        
Vc Nb.__vertexArray,
                        
Wc Nb.__colorArray,
                        
Ld Nb.colorsNeedUpdate,
                        
jd Nb.__webglCustomAttributesList,
                        
Xc void 0,
                        
xd void 0,
                        
Na void 0,
                        
wc void 0,
                        
Xa void 0,
                        
ra void 0;
                    if (
Nb.verticesNeedUpdate) {
                        for (
Gc 0Gc JdGc++) {
                            
Tc vd[Gc];
                            
ya Gc 3;
                            
Vc[ya] = Tc.x;
                            
Vc[ya 1] =
                                
Tc.y;
                            
Vc[ya 2] = Tc.z
                        
}
                        
k.bindBuffer(k.ARRAY_BUFFERNb.__webglVertexBuffer);
                        
k.bufferData(k.ARRAY_BUFFERVcid)
                    }
                    if (
Ld) {
                        for (
Hc 0Hc KdHc++) {
                            
Uc wd[Hc];
                            
ya Hc 3;
                            
Wc[ya] = Uc.r;
                            
Wc[ya 1] = Uc.g;
                            
Wc[ya 2] = Uc.b
                        
}
                        
k.bindBuffer(k.ARRAY_BUFFERNb.__webglColorBuffer);
                        
k.bufferData(k.ARRAY_BUFFERWcid)
                    }
                    if (
jd) {
                        
Xc 0;
                        for (
xd jd.lengthXc xdXc++) {
                            
ra jd[Xc];
                            if (
ra.needsUpdate && (ra.boundTo === void 0 || ra.boundTo === "vertices")) {
                                
ya 0;
                                
wc ra.value.length;
                                if (
ra.size === 1)
                                    for (
Na 0Na wcNa++) ra.array[Na] = ra.value[Na];
                                else if (
ra.size === 2)
                                    for (
Na =
                                        
0Na wcNa++) {
                                        
Xa ra.value[Na];
                                        
ra.array[ya] = Xa.x;
                                        
ra.array[ya 1] = Xa.y;
                                        
ya ya 2
                                    
} else if (ra.size === 3)
                                        if (
ra.type === "c")
                                            for (
Na 0Na wcNa++) {
                                                
Xa ra.value[Na];
                                                
ra.array[ya] = Xa.r;
                                                
ra.array[ya 1] = Xa.g;
                                                
ra.array[ya 2] = Xa.b;
                                                
ya ya 3
                                            
} else
                                                for (
Na 0Na wcNa++) {
                                                    
Xa ra.value[Na];
                                                    
ra.array[ya] = Xa.x;
                                                    
ra.array[ya 1] = Xa.y;
                                                    
ra.array[ya 2] = Xa.z;
                                                    
ya ya 3
                                                
} else if (ra.size === 4)
                                                    for (
Na 0Na wcNa++) {
                                                        
Xa ra.value[Na];
                                                        
ra.array[ya] = Xa.x;
                                                        
ra.array[ya 1] = Xa.y;
                                                        
ra.array[ya 2] = Xa.z;
                                                        
ra.array[ya 3] = Xa.w;
                                                        
ya ya 4
                                                    
}
                                                
k.bindBuffer(k.ARRAY_BUFFERra.buffer);
                                
k.bufferData(k.ARRAY_BUFFERra.array, id)
                            }
                        }
                    }
                }
                
da.verticesNeedUpdate false;
                
da.colorsNeedUpdate false;
                
Wa.attributes && p(Wa)
            } else if (
lb instanceof THREE.ParticleSystem) {
                
Wa c(lbcb);
                
oc Wa.attributes && n(Wa);
                (
da.verticesNeedUpdate || da.colorsNeedUpdate || lb.sortParticles || oc) && f(dak.DYNAMIC_DRAWlb);
                
da.verticesNeedUpdate false;
                
da.colorsNeedUpdate false;
                
Wa.attributes && p(Wa)
            }
        }
    };
    
this.initMaterial = function(abcd) {
        var 
efghijml;
        
instanceof THREE.MeshDepthMaterial "depth" instanceof THREE.MeshNormalMaterial ?
            
"normal" instanceof THREE.MeshBasicMaterial "basic" instanceof THREE.MeshLambertMaterial "lambert" instanceof THREE.MeshPhongMaterial "phong" instanceof THREE.LineBasicMaterial "basic" instanceof THREE.ParticleBasicMaterial && ("particle_basic");
        if (
l) {
            var 
THREE.ShaderLib[l];
            
a.uniforms THREE.UniformsUtils.clone(n.uniforms);
            
a.vertexShader n.vertexShader;
            
a.fragmentShader n.fragmentShader
        
}
        var 
op;
        
0;
        for (
b.lengthfo++) {
            
b[o];
            if (!
p.onlyShadow) {
                
instanceof THREE.DirectionalLight &&
                    
g++;
                
instanceof THREE.PointLight && e++;
                
instanceof THREE.SpotLight && n++
            }
        }
        if (
<= Q) {
            
g;
            
e
        
} else {
            
Math.ceil(/ (g));
            
o
        
}
        
o;
        
n;
        
0;
        for (
b.lengthon++) {
            
b[n];
            if (
p.castShadow) {
                
instanceof THREE.SpotLight && m++;
                
instanceof THREE.DirectionalLight && !p.shadowCascade && m++
            }
        }
        if (
dc && && d.useVertexTexture1024;
        else {
            
k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS);
            
Math.floor((20) / 4);
            if (
!== void 0 && instanceof THREE.SkinnedMesh) {
                
Math.min(d.bones.lengthb);
                
d.bones.length && console.warn("WebGLRenderer: too many bones - " +
                    
d.bones.length ", this GPU supports just " " (try OpenGL instead of ANGLE)")
            }
            
b
        
}
        var 
r;
        
a: {
            
a.fragmentShader;
            
a.vertexShader;
            var 
a.uniforms,
                
a.attributes,
                
= {
                    
map: !!a.map,
                    
envMap: !!a.envMap,
                    
lightMap: !!a.lightMap,
                    
vertexColorsa.vertexColors,
                    
fogc,
                    
useFoga.fog,
                    
sizeAttenuationa.sizeAttenuation,
                    
skinninga.skinning,
                    
maxBonesj,
                    
useVertexTexturedc && && d.useVertexTexture,
                    
boneTextureWidth&& d.boneTextureWidth,
                    
boneTextureHeight&& d.boneTextureHeight,
                    
morphTargetsa.morphTargets,
                    
morphNormalsa.morphNormals,
                    
maxMorphTargetsthis.maxMorphTargets,
                    
maxMorphNormalsthis.maxMorphNormals,
                    
maxDirLightse,
                    
maxPointLightsf,
                    
maxSpotLightsg,
                    
maxShadowsm,
                    
shadowMapEnabledthis.shadowMapEnabled && d.receiveShadow,
                    
shadowMapSoftthis.shadowMapSoft,
                    
shadowMapDebugthis.shadowMapDebug,
                    
shadowMapCascadethis.shadowMapCascade,
                    
alphaTesta.alphaTest,
                    
metala.metal,
                    
perPixela.perPixel,
                    
wrapArounda.wrapAround,
                    
doubleSided&& d.doubleSided
                
},
                
q= [];
            if (
ld.push(l);
            else {
                
d.push(p);
                
d.push(o)
            }
            for (
q in c) {
                
d.push(q);
                
d.push(c[q])
            }
            
d.join();
            
0;
            for (
aa.lengthdq++) {
                
aa[q];
                if (
e.code === l) {
                    
e.usedTimes++;
                    
e.program;
                    break 
a
                
}
            }
            
k.createProgram();
            
= ["precision " " float;"cb "#define VERTEX_TEXTURES" ""E.gammaInput "#define GAMMA_INPUT" ""E.gammaOutput "#define GAMMA_OUTPUT" ""E.physicallyBasedShading "#define PHYSICALLY_BASED_SHADING" """#define MAX_DIR_LIGHTS " c.maxDirLights"#define MAX_POINT_LIGHTS " c.maxPointLights"#define MAX_SPOT_LIGHTS " c.maxSpotLights"#define MAX_SHADOWS " c.maxShadows"#define MAX_BONES " c.maxBones,
                
c.map "#define USE_MAP" ""c.envMap "#define USE_ENVMAP" ""c.lightMap "#define USE_LIGHTMAP" ""c.vertexColors "#define USE_COLOR" ""c.skinning "#define USE_SKINNING" ""c.useVertexTexture "#define BONE_TEXTURE" ""c.boneTextureWidth "#define N_BONE_PIXEL_X " c.boneTextureWidth.toFixed(1) : ""c.boneTextureHeight "#define N_BONE_PIXEL_Y " c.boneTextureHeight.toFixed(1) : ""c.morphTargets "#define USE_MORPHTARGETS" ""c.morphNormals "#define USE_MORPHNORMALS" ""c.perPixel "#define PHONG_PER_PIXEL" :
                
""c.wrapAround "#define WRAP_AROUND" ""c.doubleSided "#define DOUBLE_SIDED" ""c.shadowMapEnabled "#define USE_SHADOWMAP" ""c.shadowMapSoft "#define SHADOWMAP_SOFT" ""c.shadowMapDebug "#define SHADOWMAP_DEBUG" ""c.shadowMapCascade "#define SHADOWMAP_CASCADE" ""c.sizeAttenuation "#define USE_SIZEATTENUATION" """uniform mat4 objectMatrix;nuniform mat4 modelViewMatrix;nuniform mat4 projectionMatrix;nuniform mat4 viewMatrix;nuniform mat3 normalMatrix;nuniform vec3 cameraPosition;nattribute vec3 position;nattribute vec3 normal;nattribute vec2 uv;nattribute vec2 uv2;n#ifdef USE_COLORnattribute vec3 color;n#endifn#ifdef USE_MORPHTARGETSnattribute vec3 morphTarget0;nattribute vec3 morphTarget1;nattribute vec3 morphTarget2;nattribute vec3 morphTarget3;n#ifdef USE_MORPHNORMALSnattribute vec3 morphNormal0;nattribute vec3 morphNormal1;nattribute vec3 morphNormal2;nattribute vec3 morphNormal3;n#elsenattribute vec3 morphTarget4;nattribute vec3 morphTarget5;nattribute vec3 morphTarget6;nattribute vec3 morphTarget7;n#endifn#endifn#ifdef USE_SKINNINGnattribute vec4 skinVertexA;nattribute vec4 skinVertexB;nattribute vec4 skinIndex;nattribute vec4 skinWeight;n#endifn"
            
].join("n");
            
= ["precision " " float;""#define MAX_DIR_LIGHTS " c.maxDirLights"#define MAX_POINT_LIGHTS " c.maxPointLights"#define MAX_SPOT_LIGHTS " c.maxSpotLights"#define MAX_SHADOWS " c.maxShadowsc.alphaTest "#define ALPHATEST " c.alphaTest ""E.gammaInput "#define GAMMA_INPUT" ""E.gammaOutput "#define GAMMA_OUTPUT" ""E.physicallyBasedShading "#define PHYSICALLY_BASED_SHADING" ""c.useFog && c.fog "#define USE_FOG" ""c.useFog && c.fog instanceof THREE.FogExp2 "#define FOG_EXP2" ""c.map "#define USE_MAP" :
                
""c.envMap "#define USE_ENVMAP" ""c.lightMap "#define USE_LIGHTMAP" ""c.vertexColors "#define USE_COLOR" ""c.metal "#define METAL" ""c.perPixel "#define PHONG_PER_PIXEL" ""c.wrapAround "#define WRAP_AROUND" ""c.doubleSided "#define DOUBLE_SIDED" ""c.shadowMapEnabled "#define USE_SHADOWMAP" ""c.shadowMapSoft "#define SHADOWMAP_SOFT" ""c.shadowMapDebug "#define SHADOWMAP_DEBUG" ""c.shadowMapCascade "#define SHADOWMAP_CASCADE" """uniform mat4 viewMatrix;nuniform vec3 cameraPosition;n"
            
].join("n");
            
t("fragment"p);
            
t("vertex"o);
            
k.attachShader(qd);
            
k.attachShader(qe);
            
k.linkProgram(q);
            
k.getProgramParameter(qk.LINK_STATUS) || console.error("Could not initialise shadernVALIDATE_STATUS: " k.getProgramParameter(qk.VALIDATE_STATUS) + ", gl error [" k.getError() + "]");
            
k.deleteShader(e);
            
k.deleteShader(d);
            
q.uniforms = {};
            
q.attributes = {};
            var 
s= ["viewMatrix""modelViewMatrix""projectionMatrix""normalMatrix""objectMatrix""cameraPosition""morphTargetInfluences"];
            
c.useVertexTexture d.push("boneTexture") :
                
d.push("boneGlobalMatrices");
            for (
s in nd.push(s);
            
d;
            
0;
            for (
s.lengthnd++) {
                
s[d];
                
q.uniforms[e] = k.getUniformLocation(qe)
            }
            
= ["position""normal""uv""uv2""tangent""color""skinVertexA""skinVertexB""skinIndex""skinWeight"];
            for (
0c.maxMorphTargetss++) d.push("morphTarget" s);
            for (
0c.maxMorphNormalss++) d.push("morphNormal" s);
            for (
r in bd.push(r);
            
d;
            
0;
            for (
r.lengthcs++) {
                
r[s];
                
q.attributes[d] = k.getAttribLocation(qd)
            }
            
q.id T++;
            
aa.push({
                
programq,
                
codel,
                
usedTimes1
            
});
            
E.info.memory.programs =
                
aa.length;
            
q
        
}
        
a.program r;
        
a.program.attributes;
        
r.position >= && k.enableVertexAttribArray(r.position);
        
r.color >= && k.enableVertexAttribArray(r.color);
        
r.normal >= && k.enableVertexAttribArray(r.normal);
        
r.tangent >= && k.enableVertexAttribArray(r.tangent);
        if (
a.skinning && r.skinVertexA >= && r.skinVertexB >= && r.skinIndex >= && r.skinWeight >= 0) {
            
k.enableVertexAttribArray(r.skinVertexA);
            
k.enableVertexAttribArray(r.skinVertexB);
            
k.enableVertexAttribArray(r.skinIndex);
            
k.enableVertexAttribArray(r.skinWeight)
        }
        if (
a.attributes)
            for (
i in a.attributesr[i] !==
                
void 0 && r[i] >= && k.enableVertexAttribArray(r[i]);
        if (
a.morphTargets) {
            
a.numSupportedMorphTargets 0;
            
"morphTarget";
            for (
0this.maxMorphTargetsi++) {
                
i;
                if (
r[s] >= 0) {
                    
k.enableVertexAttribArray(r[s]);
                    
a.numSupportedMorphTargets++
                }
            }
        }
        if (
a.morphNormals) {
            
a.numSupportedMorphNormals 0;
            
"morphNormal";
            for (
0this.maxMorphNormalsi++) {
                
i;
                if (
r[s] >= 0) {
                    
k.enableVertexAttribArray(r[s]);
                    
a.numSupportedMorphNormals++
                }
            }
        }
        
a.uniformsList = [];
        for (
h in a.uniformsa.uniformsList.push([a.uniforms[h], h])
    };
    
this.setFaceCulling =
        function(
ab) {
            if (
a) {
                !
|| === "ccw" k.frontFace(k.CCW) : k.frontFace(k.CW);
                
=== "back" k.cullFace(k.BACK) : === "front" k.cullFace(k.FRONT) : k.cullFace(k.FRONT_AND_BACK);
                
k.enable(k.CULL_FACE)
            } else 
k.disable(k.CULL_FACE)
        };
    
this.setObjectFaces = function(a) {
        if (
!== a.doubleSided) {
            
a.doubleSided k.disable(k.CULL_FACE) : k.enable(k.CULL_FACE);
            
a.doubleSided
        
}
        if (
!== a.flipSided) {
            
a.flipSided k.frontFace(k.CW) : k.frontFace(k.CCW);
            
a.flipSided
        
}
    };
    
this.setDepthTest = function(a) {
        if (
Ga !== a) {
            
k.enable(k.DEPTH_TEST) : k.disable(k.DEPTH_TEST);
            
Ga a
        
}
    };
    
this.setDepthWrite = function(a) {
        if (
na !== a) {
            
k.depthMask(a);
            
na a
        
}
    };
    
this.setBlending = function(abcd) {
        if (
!== P) {
            if (
=== THREE.NoBlendingk.disable(k.BLEND);
            else if (
=== THREE.AdditiveBlending) {
                
k.enable(k.BLEND);
                
k.blendEquation(k.FUNC_ADD);
                
k.blendFunc(k.SRC_ALPHAk.ONE)
            } else if (
=== THREE.SubtractiveBlending) {
                
k.enable(k.BLEND);
                
k.blendEquation(k.FUNC_ADD);
                
k.blendFunc(k.ZEROk.ONE_MINUS_SRC_COLOR)
            } else if (
=== THREE.MultiplyBlending) {
                
k.enable(k.BLEND);
                
k.blendEquation(k.FUNC_ADD);
                
k.blendFunc(k.ZEROk.SRC_COLOR)
            } else if (
===
                
THREE.CustomBlendingk.enable(k.BLEND);
            else {
                
k.enable(k.BLEND);
                
k.blendEquationSeparate(k.FUNC_ADDk.FUNC_ADD);
                
k.blendFuncSeparate(k.SRC_ALPHAk.ONE_MINUS_SRC_ALPHAk.ONEk.ONE_MINUS_SRC_ALPHA)
            }
            
a
        
}
        if (
=== THREE.CustomBlending) {
            if (
!== U) {
                
k.blendEquation(D(b));
                
b
            
}
            if (
!== fa || !== ma) {
                
k.blendFunc(D(c), D(d));
                
fa c;
                
ma d
            
}
        } else 
ma fa null
    
};
    
this.setTexture = function(ab) {
        if (
a.needsUpdate) {
            if (!
a.__webglInit) {
                
a.__webglInit true;
                
a.__webglTexture k.createTexture();
                
E.info.memory.textures++
            }
            
k.activeTexture(k.TEXTURE0 +
                
b);
            
k.bindTexture(k.TEXTURE_2Da.__webglTexture);
            
k.pixelStorei(k.UNPACK_FLIP_Y_WEBGLa.flipY);
            
k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGLa.premultiplyAlpha);
            var 
a.image,
                
= (c.width c.width 1) === && (c.height c.height 1) === 0,
                
D(a.format),
                
D(a.type);
            
v(k.TEXTURE_2Dad);
            
instanceof THREE.DataTexture k.texImage2D(k.TEXTURE_2D0ec.widthc.height0efc.data) : k.texImage2D(k.TEXTURE_2D0eefa.image);
            
a.generateMipmaps && && k.generateMipmap(k.TEXTURE_2D);
            
a.needsUpdate false;
            if (
a.onUpdatea.onUpdate()
        } else {
            
k.activeTexture(k.TEXTURE0 +
                
b);
            
k.bindTexture(k.TEXTURE_2Da.__webglTexture)
        }
    };
    
this.setRenderTarget = function(a) {
        var 
instanceof THREE.WebGLRenderTargetCube;
        if (
&& !a.__webglFramebuffer) {
            if (
a.depthBuffer === void 0a.depthBuffer true;
            if (
a.stencilBuffer === void 0a.stencilBuffer true;
            
a.__webglTexture k.createTexture();
            var 
= (a.width a.width 1) === && (a.height a.height 1) === 0,
                
D(a.format),
                
D(a.type);
            if (
b) {
                
a.__webglFramebuffer = [];
                
a.__webglRenderbuffer = [];
                
k.bindTexture(k.TEXTURE_CUBE_MAPa.__webglTexture);
                
v(k.TEXTURE_CUBE_MAPac);
                for (var 
06f++) {
                    
a.__webglFramebuffer[f] = k.createFramebuffer();
                    
a.__webglRenderbuffer[f] = k.createRenderbuffer();
                    
k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X f0da.widtha.height0denull);
                    var 
a,
                        
k.TEXTURE_CUBE_MAP_POSITIVE_X f;
                    
k.bindFramebuffer(k.FRAMEBUFFERa.__webglFramebuffer[f]);
                    
k.framebufferTexture2D(k.FRAMEBUFFERk.COLOR_ATTACHMENT0hg.__webglTexture0);
                    
x(a.__webglRenderbuffer[f], a)
                }
                
&& k.generateMipmap(k.TEXTURE_CUBE_MAP)
            } else {
                
a.__webglFramebuffer k.createFramebuffer();
                
a.__webglRenderbuffer =
                    
k.createRenderbuffer();
                
k.bindTexture(k.TEXTURE_2Da.__webglTexture);
                
v(k.TEXTURE_2Dac);
                
k.texImage2D(k.TEXTURE_2D0da.widtha.height0denull);
                
k.TEXTURE_2D;
                
k.bindFramebuffer(k.FRAMEBUFFERa.__webglFramebuffer);
                
k.framebufferTexture2D(k.FRAMEBUFFERk.COLOR_ATTACHMENT0da.__webglTexture0);
                
x(a.__webglRenderbuffera);
                
&& k.generateMipmap(k.TEXTURE_2D)
            }
            
k.bindTexture(k.TEXTURE_CUBE_MAPnull) : k.bindTexture(k.TEXTURE_2Dnull);
            
k.bindRenderbuffer(k.RENDERBUFFERnull);
            
k.bindFramebuffer(k.FRAMEBUFFER,
                
null)
        }
        if (
a) {
            
a.__webglFramebuffer[a.activeCubeFace] : a.__webglFramebuffer;
            
a.width;
            
a.height;
            
0
        
} else {
            
null;
            
ob;
            
kb;
            
gb;
            
Ob
        
}
        if (
!== W) {
            
k.bindFramebuffer(k.FRAMEBUFFERb);
            
k.viewport(deca);
            
b
        
}
        
ec c;
        
Ua a
    
};
    
this.shadowMapPlugin = new THREE.ShadowMapPlugin;
    
this.addPrePlugin(this.shadowMapPlugin);
    
this.addPostPlugin(new THREE.SpritePlugin);
    
this.addPostPlugin(new THREE.LensFlarePlugin)
};
THREE.WebGLRenderTarget = function(abc) {
    
this.width a;
    
this.height b;
    
|| {};
    
this.wrapS c.wrapS !== void 0 c.wrapS THREE.ClampToEdgeWrapping;
    
this.wrapT c.wrapT !== void 0 c.wrapT THREE.ClampToEdgeWrapping;
    
this.magFilter c.magFilter !== void 0 c.magFilter THREE.LinearFilter;
    
this.minFilter c.minFilter !== void 0 c.minFilter THREE.LinearMipMapLinearFilter;
    
this.anisotropy c.anisotropy !== void 0 c.anisotropy 1;
    
this.offset = new THREE.Vector2(00);
    
this.repeat = new THREE.Vector2(11);
    
this.format c.format !== void 0 c.format :
        
THREE.RGBAFormat;
    
this.type c.type !== void 0 c.type THREE.UnsignedByteType;
    
this.depthBuffer c.depthBuffer !== void 0 c.depthBuffer true;
    
this.stencilBuffer c.stencilBuffer !== void 0 c.stencilBuffer true;
    
this.generateMipmaps true
};
THREE.WebGLRenderTarget.prototype.clone = function() {
    var 
= new THREE.WebGLRenderTarget(this.widththis.height);
    
a.wrapS this.wrapS;
    
a.wrapT this.wrapT;
    
a.magFilter this.magFilter;
    
a.anisotropy this.anisotropy;
    
a.minFilter this.minFilter;
    
a.offset.copy(this.offset);
    
a.repeat.copy(this.repeat);
    
a.format this.format;
    
a.type this.type;
    
a.depthBuffer this.depthBuffer;
    
a.stencilBuffer this.stencilBuffer;
    
a.generateMipmaps this.generateMipmaps;
    return 
a
};
THREE.WebGLRenderTargetCube = function(abc) {
    
THREE.WebGLRenderTarget.call(thisabc);
    
this.activeCubeFace 0
};
THREE.WebGLRenderTargetCube.prototype Object.create(THREE.WebGLRenderTarget.prototype);
THREE.RenderableVertex = function() {
    
this.positionWorld = new THREE.Vector3;
    
this.positionScreen = new THREE.Vector4;
    
this.visible true
};
THREE.RenderableVertex.prototype.copy = function(a) {
    
this.positionWorld.copy(a.positionWorld);
    
this.positionScreen.copy(a.positionScreen)
};
THREE.RenderableFace3 = function() {
    
this.v1 = new THREE.RenderableVertex;
    
this.v2 = new THREE.RenderableVertex;
    
this.v3 = new THREE.RenderableVertex;
    
this.centroidWorld = new THREE.Vector3;
    
this.centroidScreen = new THREE.Vector3;
    
this.normalWorld = new THREE.Vector3;
    
this.vertexNormalsWorld = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
    
this.faceMaterial this.material null;
    
this.uvs = [
        []
    ];
    
this.null
};
THREE.RenderableFace4 = function() {
    
this.v1 = new THREE.RenderableVertex;
    
this.v2 = new THREE.RenderableVertex;
    
this.v3 = new THREE.RenderableVertex;
    
this.v4 = new THREE.RenderableVertex;
    
this.centroidWorld = new THREE.Vector3;
    
this.centroidScreen = new THREE.Vector3;
    
this.normalWorld = new THREE.Vector3;
    
this.vertexNormalsWorld = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
    
this.faceMaterial this.material null;
    
this.uvs = [
        []
    ];
    
this.null
};
THREE.RenderableObject = function() {
    
this.this.object null
};
THREE.RenderableParticle = function() {
    
this.rotation this.this.this.null;
    
this.scale = new THREE.Vector2;
    
this.material null
};
THREE.RenderableLine = function() {
    
this.null;
    
this.v1 = new THREE.RenderableVertex;
    
this.v2 = new THREE.RenderableVertex;
    
this.material null
};
THREE.ColorUtils = {
    
adjustHSV: function(abcd) {
        var 
THREE.ColorUtils.__hsv;
        
THREE.ColorUtils.rgbToHsv(ae);
        
e.THREE.Math.clamp(e.b01);
        
e.THREE.Math.clamp(e.c01);
        
e.THREE.Math.clamp(e.d01);
        
a.setHSV(e.he.se.v)
    },
    
rgbToHsv: function(ab) {
        var 
a.r,
            
a.g,
            
a.b,
            
Math.max(Math.max(cd), e),
            
Math.min(Math.min(cd), e);
        if (
=== f0;
        else {
            var 
g,
                
f,
                
= (=== ? (e) / === + (c) / + (d) / h) / 6;
            
&& (1);
            
&& (1)
        }
        
=== void 0 && (= {
            
h0,
            
s0,
            
v0
        
});
        
b.c;
        
b.g;
        
b.f;
        return 
b
    
}
};
THREE.ColorUtils.__hsv = {
    
h0,
    
s0,
    
v0
};
THREE.GeometryUtils = {
    
merge: function(ab) {
        for (var 
cda.vertices.lengthinstanceof THREE.Mesh b.geometry ba.verticesf.verticesa.facesf.facesa.faceVertexUvs[0], f.faceVertexUvs[0], = {}, 0a.materials.lengthp++) n[a.materials[p].id] = p;
        if (
instanceof THREE.Mesh) {
            
b.matrixAutoUpdate && b.updateMatrix();
            
b.matrix;
            
= new THREE.Matrix4;
            
d.extractRotation(cb.scale)
        }
        for (var 
0h.lengthrp++) {
            var 
h[p].clone();
            
&& c.multiplyVector3(o);
            
g.push(o)
        }
        
0;
        for (
j.lengthrp++) {
            var 
=
                
j[p],
                
qsg.vertexNormals,
                
g.vertexColors;
            
instanceof THREE.Face3 = new THREE.Face3(g.eg.eg.e) : instanceof THREE.Face4 && (= new THREE.Face4(g.eg.eg.eg.e));
            
q.normal.copy(g.normal);
            
&& d.multiplyVector3(q.normal);
            
0;
            for (
w.lengthoh++) {
                
w[h].clone();
                
&& d.multiplyVector3(s);
                
q.vertexNormals.push(s)
            }
            
q.color.copy(g.color);
            
0;
            for (
t.lengthoh++) {
                
t[h];
                
q.vertexColors.push(s.clone())
            }
            if (
g.materialIndex !== void 0) {
                
f.materials[g.materialIndex];
                
h.id;
                
n[o];
                if (
=== void 0) {
                    
=
                        
a.materials.length;
                    
n[o] = t;
                    
a.materials.push(h)
                }
                
q.materialIndex t
            
}
            
q.centroid.copy(g.centroid);
            
&& c.multiplyVector3(q.centroid);
            
i.push(q)
        }
        
0;
        for (
m.lengthrp++) {
            
m[p];
            
= [];
            
0;
            for (
c.lengthoh++) d.push(new THREE.UV(c[h].uc[h].v));
            
l.push(d)
        }
    },
    clone: function(
a) {
        var 
= new THREE.Geometry,
            
ca.vertices,
            
a.faces,
            
a.faceVertexUvs[0];
        if (
a.materialsb.materials a.materials.slice();
        
0;
        for (
d.lengthca++) b.vertices.push(d[a].clone());
        
0;
        for (
e.lengthca++) b.faces.push(e[a].clone());
        
0;
        for (
f.lengthca++) {
            for (var 
f[a], = [], 0d.lengthhg++) e.push(new THREE.UV(d[g].ud[g].v));
            
b.faceVertexUvs[0].push(e)
        }
        return 
b
    
},
    
randomPointInTriangle: function(abc) {
        var 
def= new THREE.Vector3,
            
THREE.GeometryUtils.__v1;
        
THREE.GeometryUtils.random();
        
THREE.GeometryUtils.random();
        if (
1) {
            
d;
            
e
        
}
        
e;
        
g.copy(a);
        
g.multiplyScalar(d);
        
h.copy(b);
        
h.multiplyScalar(e);
        
g.addSelf(h);
        
h.copy(c);
        
h.multiplyScalar(f);
        
g.addSelf(h);
        return 
g
    
},
    
randomPointInFace: function(abc) {
        var 
def;
        if (
instanceof THREE.Face3) {
            
b.vertices[a.a];
            
b.vertices[a.b];
            
b.vertices[a.c];
            return 
THREE.GeometryUtils.randomPointInTriangle(def)
        }
        if (
instanceof THREE.Face4) {
            
b.vertices[a.a];
            
b.vertices[a.b];
            
b.vertices[a.c];
            var 
b.vertices[a.d],
                
g;
            if (
c)
                if (
a._area1 && a._area2) {
                    
a._area1;
                    
a._area2
                
} else {
                    
THREE.GeometryUtils.triangleArea(deb);
                    
THREE.GeometryUtils.triangleArea(efb);
                    
a._area1 c;
                    
a._area2 g
                
} else {
                
THREE.GeometryUtils.triangleArea(deb);
                
THREE.GeometryUtils.triangleArea(efb)
            }
            return 
THREE.GeometryUtils.random() *
                (
g) < THREE.GeometryUtils.randomPointInTriangle(deb) : THREE.GeometryUtils.randomPointInTriangle(efb)
        }
    },
    
randomPointsInGeometry: function(ab) {
        function 
c(a) {
            function 
b(cd) {
                if (
c) return c;
                var 
Math.floor((c) / 2);
                return 
j[e] > b(c1) : j[e] < b(1d) : e
            
}
            return 
b(0j.length 1)
        }
        var 
dea.faces,
            
a.vertices,
            
f.length,
            
0,
            
= [],
            
lmnp;
        for (
0he++) {
            
f[e];
            if (
instanceof THREE.Face3) {
                
g[d.a];
                
g[d.b];
                
g[d.c];
                
d._area THREE.GeometryUtils.triangleArea(lmn)
            } else if (
instanceof THREE.Face4) {
                
=
                    
g[d.a];
                
g[d.b];
                
g[d.c];
                
g[d.d];
                
d._area1 THREE.GeometryUtils.triangleArea(lmp);
                
d._area2 THREE.GeometryUtils.triangleArea(mnp);
                
d._area d._area1 d._area2
            
}
            
d._area;
            
j[e] = i
        
}
        
= [];
        for (
0be++) {
            
THREE.GeometryUtils.random() * i;
            
c(g);
            
d[e] = THREE.GeometryUtils.randomPointInFace(f[g], atrue)
        }
        return 
d
    
},
    
triangleArea: function(abc) {
        var 
dTHREE.GeometryUtils.__v1;
        
e.sub(ab);
        
e.length();
        
e.sub(ac);
        
e.length();
        
e.sub(bc);
        
e.length();
        
0.5 * (c);
        return 
Math.sqrt(* (d) * (a) * (c))
    },
    
center: function(a) {
        
a.computeBoundingBox();
        var 
a.boundingBox,
            
= new THREE.Vector3;
        
c.add(b.minb.max);
        
c.multiplyScalar(-0.5);
        
a.applyMatrix((new THREE.Matrix4).makeTranslation(c.xc.yc.z));
        
a.computeBoundingBox();
        return 
c
    
},
    
normalizeUVs: function(a) {
        for (var 
a.faceVertexUvs[0], 0a.lengthcb++)
            for (var 
a[b], 0d.lengthfe++) {
                if (
d[e].!== 1d[e].d[e].Math.floor(d[e].u);
                if (
d[e].!== 1d[e].d[e].Math.floor(d[e].v)
            }
    },
    
triangulateQuads: function(a) {
        var 
bcde= [],
            
= [],
            
= [];
        
0;
        for (
a.faceUvs.lengthcb++) g[b] = [];
        
0;
        for (
a.faceVertexUvs.length<
            
cb++) h[b] = [];
        
0;
        for (
a.faces.lengthcb++) {
            
a.faces[b];
            if (
instanceof THREE.Face4) {
                
d.a;
                var 
d.b,
                    
d.c,
                    
d.d,
                    
= new THREE.Face3,
                    
= new THREE.Face3;
                
m.color.copy(d.color);
                
n.color.copy(d.color);
                
m.materialIndex d.materialIndex;
                
n.materialIndex d.materialIndex;
                
m.e;
                
m.i;
                
m.l;
                
n.i;
                
n.j;
                
n.l;
                if (
d.vertexColors.length === 4) {
                    
m.vertexColors[0] = d.vertexColors[0].clone();
                    
m.vertexColors[1] = d.vertexColors[1].clone();
                    
m.vertexColors[2] = d.vertexColors[3].clone();
                    
n.vertexColors[0] = d.vertexColors[1].clone();
                    
n.vertexColors[1] = d.vertexColors[2].clone();
                    
n.vertexColors[2] = d.vertexColors[3].clone()
                }
                
f.push(mn);
                
0;
                for (
a.faceVertexUvs.lengthed++)
                    if (
a.faceVertexUvs[d].length) {
                        
a.faceVertexUvs[d][b];
                        
m[1];
                        
m[2];
                        
m[3];
                        
= [m[0].clone(), i.clone(), l.clone()];
                        
= [i.clone(), j.clone(), l.clone()];
                        
h[d].push(mi)
                    }
                
0;
                for (
a.faceUvs.lengthed++)
                    if (
a.faceUvs[d].length) {
                        
a.faceUvs[d][b];
                        
g[d].push(ii)
                    }
            } else {
                
f.push(d);
                
0;
                for (
a.faceUvs.lengthed++) g[d].push(a.faceUvs[d]);
                
0;
                for (
a.faceVertexUvs.length<
                    
ed++) h[d].push(a.faceVertexUvs[d])
            }
        }
        
a.faces f;
        
a.faceUvs g;
        
a.faceVertexUvs h;
        
a.computeCentroids();
        
a.computeFaceNormals();
        
a.computeVertexNormals();
        
a.hasTangents && a.computeTangents()
    },
    
explode: function(a) {
        for (var 
= [], 0a.faces.lengthdc++) {
            var 
b.length,
                
a.faces[c];
            if (
instanceof THREE.Face4) {
                var 
f.a,
                    
f.b,
                    
f.c,
                    
a.vertices[g],
                    
a.vertices[h],
                    
a.vertices[i],
                    
a.vertices[f.d];
                
b.push(g.clone());
                
b.push(h.clone());
                
b.push(i.clone());
                
b.push(j.clone());
                
f.e;
                
f.1;
                
f.2;
                
f.3
            
} else {
                
f.a;
                
f.b;
                
f.c;
                
a.vertices[g];
                
a.vertices[h];
                
a.vertices[i];
                
b.push(g.clone());
                
b.push(h.clone());
                
b.push(i.clone());
                
f.e;
                
f.1;
                
f.2
            
}
        }
        
a.vertices b;
        
delete a.__tmpVertices
    
},
    
tessellate: function(ab) {
        var 
cdefghijlmnproqswtv= [],
            
= [];
        
0;
        for (
a.faceVertexUvs.lengthdc++) C[c] = [];
        
0;
        for (
a.faces.lengthdc++) {
            
a.faces[c];
            if (
instanceof THREE.Face3) {
                
e.a;
                
e.b;
                
e.c;
                
a.vertices[f];
                
a.vertices[g];
                
a.vertices[h];
                
j.distanceTo(l);
                
l.distanceTo(m);
                
j.distanceTo(m);
                if (
>
                    
|| || b) {
                    
a.vertices.length;
                    
e.clone();
                    
e.clone();
                    if (
>= && >= n) {
                        
j.clone();
                        
j.lerpSelf(l0.5);
                        
t.f;
                        
t.i;
                        
t.h;
                        
v.i;
                        
v.g;
                        
v.h;
                        if (
e.vertexNormals.length === 3) {
                            
e.vertexNormals[0].clone();
                            
f.lerpSelf(e.vertexNormals[1], 0.5);
                            
t.vertexNormals[1].copy(f);
                            
v.vertexNormals[0].copy(f)
                        }
                        if (
e.vertexColors.length === 3) {
                            
e.vertexColors[0].clone();
                            
f.lerpSelf(e.vertexColors[1], 0.5);
                            
t.vertexColors[1].copy(f);
                            
v.vertexColors[0].copy(f)
                        }
                        
0
                    
} else if (>= && >= n) {
                        
l.clone();
                        
j.lerpSelf(m0.5);
                        
t.f;
                        
t.g;
                        
t.=
                            
i;
                        
v.i;
                        
v.h;
                        
v.f;
                        if (
e.vertexNormals.length === 3) {
                            
e.vertexNormals[1].clone();
                            
f.lerpSelf(e.vertexNormals[2], 0.5);
                            
t.vertexNormals[2].copy(f);
                            
v.vertexNormals[0].copy(f);
                            
v.vertexNormals[1].copy(e.vertexNormals[2]);
                            
v.vertexNormals[2].copy(e.vertexNormals[0])
                        }
                        if (
e.vertexColors.length === 3) {
                            
e.vertexColors[1].clone();
                            
f.lerpSelf(e.vertexColors[2], 0.5);
                            
t.vertexColors[2].copy(f);
                            
v.vertexColors[0].copy(f);
                            
v.vertexColors[1].copy(e.vertexColors[2]);
                            
v.vertexColors[2].copy(e.vertexColors[0])
                        }
                        
1
                    
} else {
                        
j.clone();
                        
j.lerpSelf(m0.5);
                        
t.f;
                        
t.g;
                        
t.i;
                        
v.i;
                        
v.g;
                        
v.h;
                        if (
e.vertexNormals.length === 3) {
                            
e.vertexNormals[0].clone();
                            
f.lerpSelf(e.vertexNormals[2], 0.5);
                            
t.vertexNormals[2].copy(f);
                            
v.vertexNormals[0].copy(f)
                        }
                        if (
e.vertexColors.length === 3) {
                            
e.vertexColors[0].clone();
                            
f.lerpSelf(e.vertexColors[2], 0.5);
                            
t.vertexColors[2].copy(f);
                            
v.vertexColors[0].copy(f)
                        }
                        
2
                    
}
                    
x.push(tv);
                    
a.vertices.push(j);
                    
0;
                    for (
a.faceVertexUvs.lengthgf++)
                        if (
a.faceVertexUvs[f].length) {
                            
a.faceVertexUvs[f][c];
                            
j[0];
                            
j[1];
                            
j[2];
                            if (
===
                                
0) {
                                
v.clone();
                                
l.lerpSelf(h0.5);
                                
= [v.clone(), l.clone(), t.clone()];
                                
= [l.clone(), h.clone(), t.clone()]
                            } else if (
=== 1) {
                                
h.clone();
                                
l.lerpSelf(t0.5);
                                
= [v.clone(), h.clone(), l.clone()];
                                
= [l.clone(), t.clone(), v.clone()]
                            } else {
                                
v.clone();
                                
l.lerpSelf(t0.5);
                                
= [v.clone(), h.clone(), l.clone()];
                                
= [l.clone(), h.clone(), t.clone()]
                            }
                            
C[f].push(jh)
                        }
                } else {
                    
x.push(e);
                    
0;
                    for (
a.faceVertexUvs.lengthgf++) C[f].push(a.faceVertexUvs[f][c])
                }
            } else {
                
e.a;
                
e.b;
                
e.c;
                
e.d;
                
a.vertices[f];
                
a.vertices[g];
                
a.vertices[h];
                
=
                    
a.vertices[i];
                
j.distanceTo(l);
                
l.distanceTo(m);
                
m.distanceTo(n);
                
j.distanceTo(n);
                if (
|| || || b) {
                    
a.vertices.length;
                    
a.vertices.length 1;
                    
e.clone();
                    
e.clone();
                    if (
>= && >= && >= || >= && >= && >= q) {
                        
j.clone();
                        
p.lerpSelf(l0.5);
                        
m.clone();
                        
l.lerpSelf(n0.5);
                        
t.f;
                        
t.s;
                        
t.w;
                        
t.i;
                        
v.s;
                        
v.g;
                        
v.h;
                        
v.w;
                        if (
e.vertexNormals.length === 4) {
                            
e.vertexNormals[0].clone();
                            
f.lerpSelf(e.vertexNormals[1], 0.5);
                            
e.vertexNormals[2].clone();
                            
g.lerpSelf(e.vertexNormals[3], 0.5);
                            
t.vertexNormals[1].copy(f);
                            
t.vertexNormals[2].copy(g);
                            
v.vertexNormals[0].copy(f);
                            
v.vertexNormals[3].copy(g)
                        }
                        if (
e.vertexColors.length === 4) {
                            
e.vertexColors[0].clone();
                            
f.lerpSelf(e.vertexColors[1], 0.5);
                            
e.vertexColors[2].clone();
                            
g.lerpSelf(e.vertexColors[3], 0.5);
                            
t.vertexColors[1].copy(f);
                            
t.vertexColors[2].copy(g);
                            
v.vertexColors[0].copy(f);
                            
v.vertexColors[3].copy(g)
                        }
                        
0
                    
} else {
                        
l.clone();
                        
p.lerpSelf(m0.5);
                        
n.clone();
                        
l.lerpSelf(j0.5);
                        
t.f;
                        
t.g;
                        
t.s;
                        
t.w;
                        
v.w;
                        
v.s;
                        
v.h;
                        
v.i;
                        if (
e.vertexNormals.length === 4) {
                            
e.vertexNormals[1].clone();
                            
f.lerpSelf(e.vertexNormals[2], 0.5);
                            
e.vertexNormals[3].clone();
                            
g.lerpSelf(e.vertexNormals[0], 0.5);
                            
t.vertexNormals[2].copy(f);
                            
t.vertexNormals[3].copy(g);
                            
v.vertexNormals[0].copy(g);
                            
v.vertexNormals[1].copy(f)
                        }
                        if (
e.vertexColors.length === 4) {
                            
e.vertexColors[1].clone();
                            
f.lerpSelf(e.vertexColors[2], 0.5);
                            
e.vertexColors[3].clone();
                            
g.lerpSelf(e.vertexColors[0], 0.5);
                            
t.vertexColors[2].copy(f);
                            
t.vertexColors[3].copy(g);
                            
v.vertexColors[0].copy(g);
                            
v.vertexColors[1].copy(f)
                        }
                        
1
                    
}
                    
x.push(tv);
                    
a.vertices.push(pl);
                    
0;
                    for (
a.faceVertexUvs.lengthgf++)
                        if (
a.faceVertexUvs[f].length) {
                            
a.faceVertexUvs[f][c];
                            
j[0];
                            
j[1];
                            
j[2];
                            
j[3];
                            if (
=== 0) {
                                
v.clone();
                                
l.lerpSelf(h0.5);
                                
t.clone();
                                
m.lerpSelf(j0.5);
                                
= [v.clone(), l.clone(), m.clone(), j.clone()];
                                
= [l.clone(), h.clone(), t.clone(), m.clone()]
                            } else {
                                
h.clone();
                                
l.lerpSelf(t0.5);
                                
j.clone();
                                
m.lerpSelf(v0.5);
                                
= [v.clone(), h.clone(), l.clone(), m.clone()];
                                
= [m.clone(), l.clone(), t.clone(), j.clone()]
                            }
                            
C[f].push(vh)
                        }
                } else {
                    
x.push(e);
                    
0;
                    for (
a.faceVertexUvs.lengthgf++) C[f].push(a.faceVertexUvs[f][c])
                }
            }
        }
        
a.faces =
            
x;
        
a.faceVertexUvs C
    
}
};
THREE.GeometryUtils.random THREE.Math.random16;
THREE.GeometryUtils.__v1 = new THREE.Vector3;
THREE.ImageUtils = {
    
crossOrigin"anonymous",
    
loadTexture: function(abcd) {
        var 
= new THREE.Texture(void 0b),
            
= new THREE.ImageLoader;
        
b.addEventListener("load", function(a) {
            
e.image a.content;
            
e.needsUpdate true;
            
&& c(e)
        });
        
b.addEventListener("error", function(a) {
            
&& d(a.message)
        });
        
b.crossOrigin this.crossOrigin;
        
b.load(a);
        return 
e
    
},
    
loadTextureCube: function(abc) {
        var 
d= [],
            
= new THREE.Texture(eb);
        
f.flipY false;
        
e.loadCount 0;
        for (
a.lengthd; ++b) {
            
e[b] = new Image;
            
e[b].onload = function() {
                
e.loadCount e.loadCount +
                    
1;
                if (
e.loadCount === 6) {
                    
f.needsUpdate true;
                    
&& c()
                }
            };
            
e[b].crossOrigin this.crossOrigin;
            
e[b].src a[b]
        }
        return 
f
    
},
    
getNormalMap: function(ab) {
        var 
= function(a) {
                var 
Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]);
                return [
a[0] / ba[1] / ba[2] / b]
            },
            
1,
            
a.width,
            
a.height,
            
document.createElement("canvas");
        
f.width d;
        
f.height e;
        var 
f.getContext("2d");
        
g.drawImage(a00);
        for (var 
g.getImageData(00de).datag.createImageData(de), i.data0dl++)
            for (var 
0em++) {
                var 
1,
                    
1,
                    
=
                    
1,
                    
1,
                    
= [],
                    
= [00h[(l) * 4] / 255 b];
                
q.push([-10h[(r) * 4] / 255 b]);
                
q.push([-1, -1h[(r) * 4] / 255 b]);
                
q.push([0, -1h[(l) * 4] / 255 b]);
                
q.push([1, -1h[(o) * 4] / 255 b]);
                
q.push([10h[(o) * 4] / 255 b]);
                
q.push([11h[(o) * 4] / 255 b]);
                
q.push([01h[(l) * 4] / 255 b]);
                
q.push([-11h[(r) * 4] / 255 b]);
                
= [];
                
q.length;
                for (
0rp++) {
                    var 
q[p],
                        
q[(1) % r],
                        
= [o[0] - s[0], o[1] - s[1], o[2] - s[2]],
                        
= [w[0] - s[0], w[1] - s[1], w[2] - s[2]];
                    
n.push(c([o[1] * w[2] - o[2] * w[1], o[2] * w[0] - o[0] *
                        
w[2], o[0] * w[1] - o[1] * w[0]
                    ]))
                }
                
= [000];
                for (
0n.lengthp++) {
                    
q[0] = q[0] + n[p][0];
                    
q[1] = q[1] + n[p][1];
                    
q[2] = q[2] + n[p][2]
                }
                
q[0] = q[0] / n.length;
                
q[1] = q[1] / n.length;
                
q[2] = q[2] / n.length;
                
= (l) * 4;
                
j[s] = (q[0] + 1) / 255 0;
                
j[1] = (q[1] + 1) / 255 0;
                
j[2] = q[2] * 255 0;
                
j[3] = 255
            
}
        
g.putImageData(i00);
        return 
f
    
},
    
generateDataTexture: function(abc) {
        for (var 
b= new Uint8Array(d), Math.floor(c.255), Math.floor(c.255), Math.floor(c.255), 0dh++) {
            
e[3] = f;
            
e[1] = g;
            
e[2] = c
        
}
        
= new THREE.DataTexture(ea,
            
bTHREE.RGBFormat);
        
a.needsUpdate true;
        return 
a
    
}
};
THREE.SceneUtils = {
    
showHierarchy: function(ab) {
        
THREE.SceneUtils.traverseHierarchy(a, function(a) {
            
a.visible b
        
})
    },
    
traverseHierarchy: function(ab) {
        var 
cda.children.length;
        for (
0ed++) {
            
a.children[d];
            
b(c);
            
THREE.SceneUtils.traverseHierarchy(cb)
        }
    },
    
createMultiMaterialObject: function(ab) {
        var 
cb.length,
            
= new THREE.Object3D;
        for (
0dc++) {
            var 
= new THREE.Mesh(ab[c]);
            
e.add(f)
        }
        return 
e
    
},
    
cloneObject: function(a) {
        var 
b;
        if (
instanceof THREE.MorphAnimMesh) {
            
= new THREE.MorphAnimMesh(a.geometrya.material);
            
b.duration a.duration;
            
b.mirroredLoop a.mirroredLoop;
            
b.time a.time;
            
b.lastKeyframe a.lastKeyframe;
            
b.currentKeyframe a.currentKeyframe;
            
b.direction a.direction;
            
b.directionBackwards a.directionBackwards
        
} else if (instanceof THREE.SkinnedMesh= new THREE.SkinnedMesh(a.geometrya.material);
        else if (
instanceof THREE.Mesh= new THREE.Mesh(a.geometrya.material);
        else if (
instanceof THREE.Line= new THREE.Line(a.geometrya.materiala.type);
        else if (
instanceof THREE.Ribbon= new THREE.Ribbon(a.geometrya.material);
        else if (
instanceof THREE.ParticleSystem) {
            
= new THREE.ParticleSystem(a.geometrya.material);
            
b.sortParticles a.sortParticles
        
} else if (instanceof THREE.Particle= new THREE.Particle(a.material);
        else if (
instanceof THREE.Sprite) {
            
= new THREE.Sprite({});
            
b.color.copy(a.color);
            
b.map a.map;
            
b.blending a.blending;
            
b.useScreenCoordinates a.useScreenCoordinates;
            
b.mergeWith3D a.mergeWith3D;
            
b.affectedByDistance a.affectedByDistance;
            
b.scaleByViewport a.scaleByViewport;
            
b.alignment a.alignment;
            
b.rotation3d.copy(a.rotation3d);
            
b.rotation a.rotation;
            
b.opacity a.opacity;
            
b.uvOffset.copy(a.uvOffset);
            
b.uvScale.copy(a.uvScale)
        } else 
instanceof THREE.LOD = new THREE.LOD instanceof THREE.Object3D && (= new THREE.Object3D);
        
b.name a.name;
        
b.parent a.parent;
        
b.up.copy(a.up);
        
b.position.copy(a.position);
        
b.rotation instanceof THREE.Vector3 && b.rotation.copy(a.rotation);
        
b.eulerOrder a.eulerOrder;
        
b.scale.copy(a.scale);
        
b.dynamic a.dynamic;
        
b.doubleSided a.doubleSided;
        
b.flipSided a.flipSided;
        
b.renderDepth a.renderDepth;
        
b.rotationAutoUpdate =
            
a.rotationAutoUpdate;
        
b.matrix.copy(a.matrix);
        
b.matrixWorld.copy(a.matrixWorld);
        
b.matrixRotationWorld.copy(a.matrixRotationWorld);
        
b.matrixAutoUpdate a.matrixAutoUpdate;
        
b.matrixWorldNeedsUpdate a.matrixWorldNeedsUpdate;
        
b.quaternion.copy(a.quaternion);
        
b.useQuaternion a.useQuaternion;
        
b.boundRadius a.boundRadius;
        
b.boundRadiusScale a.boundRadiusScale;
        
b.visible a.visible;
        
b.castShadow a.castShadow;
        
b.receiveShadow a.receiveShadow;
        
b.frustumCulled a.frustumCulled;
        for (var 
0a.children.lengthc++) {
            var 
THREE.SceneUtils.cloneObject(a.children[c]);
            
b.children[c] = d;
            
d.parent b
        
}
        if (
instanceof THREE.LOD)
            for (
0a.LODs.lengthc++) b.LODs[c] = {
                
visibleAtDistancea.LODs[c].visibleAtDistance,
                
object3Db.children[c]
            };
        return 
b
    
},
    
detach: function(abc) {
        
a.applyMatrix(b.matrixWorld);
        
b.remove(a);
        
c.add(a)
    },
    
attach: function(abc) {
        var 
= new THREE.Matrix4;
        
d.getInverse(c.matrixWorld);
        
a.applyMatrix(d);
        
b.remove(a);
        
c.add(a)
    }
};
THREE.WebGLRenderer && (THREE.ShaderUtils = {
    
lib: {
        
fresnel: {
            
uniforms: {
                
mRefractionRatio: {
                    
type"f",
                    
value1.02
                
},
                
mFresnelBias: {
                    
type"f",
                    
value0.1
                
},
                
mFresnelPower: {
                    
type"f",
                    
value2
                
},
                
mFresnelScale: {
                    
type"f",
                    
value1
                
},
                
tCube: {
                    
type"t",
                    
value1,
                    
texturenull
                
}
            },
            
fragmentShader"uniform samplerCube tCube;nvarying vec3 vReflect;nvarying vec3 vRefract[3];nvarying float vReflectionFactor;nvoid main() {nvec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );nvec4 refractedColor = vec4( 1.0, 1.0, 1.0, 1.0 );nrefractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;nrefractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;nrefractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;nrefractedColor.a = 1.0;ngl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );n}",
            
vertexShader"uniform float mRefractionRatio;nuniform float mFresnelBias;nuniform float mFresnelScale;nuniform float mFresnelPower;nvarying vec3 vReflect;nvarying vec3 vRefract[3];nvarying float vReflectionFactor;nvoid main() {nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );nvec4 mPosition = objectMatrix * vec4( position, 1.0 );nvec3 nWorld = normalize ( mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal );nvec3 I = mPosition.xyz - cameraPosition;nvReflect = reflect( I, nWorld );nvRefract[0] = refract( normalize( I ), nWorld, mRefractionRatio );nvRefract[1] = refract( normalize( I ), nWorld, mRefractionRatio * 0.99 );nvRefract[2] = refract( normalize( I ), nWorld, mRefractionRatio * 0.98 );nvReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), nWorld ), mFresnelPower );ngl_Position = projectionMatrix * mvPosition;n}"
        
},
        
normal: {
            
uniformsTHREE.UniformsUtils.merge([THREE.UniformsLib.fogTHREE.UniformsLib.lightsTHREE.UniformsLib.shadowmap, {
                
enableAO: {
                    
type"i",
                    
value0
                
},
                
enableDiffuse: {
                    
type"i",
                    
value0
                
},
                
enableSpecular: {
                    
type"i",
                    
value0
                
},
                
enableReflection: {
                    
type"i",
                    
value0
                
},
                
enableDisplacement: {
                    
type"i",
                    
value0
                
},
                
tDiffuse: {
                    
type"t",
                    
value0,
                    
texturenull
                
},
                
tCube: {
                    
type"t",
                    
value1,
                    
texturenull
                
},
                
tNormal: {
                    
type"t",
                    
value2,
                    
texturenull
                
},
                
tSpecular: {
                    
type"t",
                    
value3,
                    
texturenull
                
},
                
tAO: {
                    
type"t",
                    
value4,
                    
texturenull
                
},
                
tDisplacement: {
                    
type"t",
                    
value5,
                    
texturenull
                
},
                
uNormalScale: {
                    
type"f",
                    
value1
                
},
                
uDisplacementBias: {
                    
type"f",
                    
value0
                
},
                
uDisplacementScale: {
                    
type"f",
                    
value1
                
},
                
uDiffuseColor: {
                    
type"c",
                    
value: new THREE.Color(16777215)
                },
                
uSpecularColor: {
                    
type"c",
                    
value: new THREE.Color(1118481)
                },
                
uAmbientColor: {
                    
type"c",
                    
value: new THREE.Color(16777215)
                },
                
uShininess: {
                    
type"f",
                    
value30
                
},
                
uOpacity: {
                    
type"f",
                    
value1
                
},
                
uReflectivity: {
                    
type"f",
                    
value0.5
                
},
                
uOffset: {
                    
type"v2",
                    
value: new THREE.Vector2(00)
                },
                
uRepeat: {
                    
type"v2",
                    
value: new THREE.Vector2(11)
                },
                
wrapRGB: {
                    
type"v3",
                    
value: new THREE.Vector3(111)
                }
            }]),
            
fragmentShader: ["uniform vec3 uAmbientColor;nuniform vec3 uDiffuseColor;nuniform vec3 uSpecularColor;nuniform float uShininess;nuniform float uOpacity;nuniform bool enableDiffuse;nuniform bool enableSpecular;nuniform bool enableAO;nuniform bool enableReflection;nuniform sampler2D tDiffuse;nuniform sampler2D tNormal;nuniform sampler2D tSpecular;nuniform sampler2D tAO;nuniform samplerCube tCube;nuniform float uNormalScale;nuniform float uReflectivity;nvarying vec3 vTangent;nvarying vec3 vBinormal;nvarying vec3 vNormal;nvarying vec2 vUv;nuniform vec3 ambientLightColor;n#if MAX_DIR_LIGHTS > 0nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];n#endifn#if MAX_POINT_LIGHTS > 0nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];n#endifn#if MAX_SPOT_LIGHTS > 0nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];nuniform float spotLightAngle[ MAX_SPOT_LIGHTS ];nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];n#endifn#ifdef WRAP_AROUNDnuniform vec3 wrapRGB;n#endifnvarying vec3 vWorldPosition;",
                
THREE.ShaderChunk.shadowmap_pars_fragmentTHREE.ShaderChunk.fog_pars_fragment"void main() {nvec3 vViewPosition = cameraPosition - vWorldPosition;ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );nvec3 specularTex = vec3( 1.0 );nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;nnormalTex.xy *= uNormalScale;nnormalTex = normalize( normalTex );nif( enableDiffuse ) {n#ifdef GAMMA_INPUTnvec4 texelColor = texture2D( tDiffuse, vUv );ntexelColor.xyz *= texelColor.xyz;ngl_FragColor = gl_FragColor * texelColor;n#elsengl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );n#endifn}nif( enableAO ) {n#ifdef GAMMA_INPUTnvec4 aoColor = texture2D( tAO, vUv );naoColor.xyz *= aoColor.xyz;ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;n#elsengl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;n#endifn}nif( enableSpecular )nspecularTex = texture2D( tSpecular, vUv ).xyz;nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );nvec3 finalNormal = tsb * normalTex;nvec3 normal = normalize( finalNormal );nvec3 viewPosition = normalize( vViewPosition );n#if MAX_POINT_LIGHTS > 0nvec3 pointDiffuse = vec3( 0.0 );nvec3 pointSpecular = vec3( 0.0 );nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );nvec3 pointVector = lPosition.xyz + vViewPosition.xyz;nfloat pointDistance = 1.0;nif ( pointLightDistance[ i ] > 0.0 )npointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );npointVector = normalize( pointVector );n#ifdef WRAP_AROUNDnfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );n#elsenfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );n#endifnpointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;nvec3 pointHalfVector = normalize( pointVector + viewPosition );nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );n#ifdef PHYSICALLY_BASED_SHADINGnfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( pointVector, pointHalfVector ), 5.0 );npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;n#elsenpointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;n#endifn}n#endifn#if MAX_SPOT_LIGHTS > 0nvec3 spotDiffuse = vec3( 0.0 );nvec3 spotSpecular = vec3( 0.0 );nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );nvec3 spotVector = lPosition.xyz + vViewPosition.xyz;nfloat spotDistance = 1.0;nif ( spotLightDistance[ i ] > 0.0 )nspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );nspotVector = normalize( spotVector );nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );nif ( spotEffect > spotLightAngle[ i ] ) {nspotEffect = pow( spotEffect, spotLightExponent[ i ] );n#ifdef WRAP_AROUNDnfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );nfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );n#elsenfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );n#endifnspotDiffuse += spotDistance * spotLightColor[ i ] * uDiffuseColor * spotDiffuseWeight * spotEffect;nvec3 spotHalfVector = normalize( spotVector + viewPosition );nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );nfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, uShininess ), 0.0 );n#ifdef PHYSICALLY_BASED_SHADINGnfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( spotVector, spotHalfVector ), 5.0 );nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;n#elsenspotSpecular += spotDistance * spotLightColor[ i ] * uSpecularColor * spotSpecularWeight * spotDiffuseWeight * spotEffect;n#endifn}n}n#endifn#if MAX_DIR_LIGHTS > 0nvec3 dirDiffuse = vec3( 0.0 );nvec3 dirSpecular = vec3( 0.0 );nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );nvec3 dirVector = normalize( lDirection.xyz );n#ifdef WRAP_AROUNDnfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );n#elsenfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );n#endifndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;nvec3 dirHalfVector = normalize( dirVector + viewPosition );nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );n#ifdef PHYSICALLY_BASED_SHADINGnfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;n#elsendirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;n#endifn}n#endifnvec3 totalDiffuse = vec3( 0.0 );nvec3 totalSpecular = vec3( 0.0 );n#if MAX_DIR_LIGHTS > 0ntotalDiffuse += dirDiffuse;ntotalSpecular += dirSpecular;n#endifn#if MAX_POINT_LIGHTS > 0ntotalDiffuse += pointDiffuse;ntotalSpecular += pointSpecular;n#endifn#if MAX_SPOT_LIGHTS > 0ntotalDiffuse += spotDiffuse;ntotalSpecular += spotSpecular;n#endifngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor) + totalSpecular;nif ( enableReflection ) {nvec3 vReflect = reflect( normalize( vWorldPosition ), normal );nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );n#ifdef GAMMA_INPUTncubeColor.xyz *= cubeColor.xyz;n#endifngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );n}",
                
THREE.ShaderChunk.shadowmap_fragmentTHREE.ShaderChunk.linear_to_gamma_fragmentTHREE.ShaderChunk.fog_fragment"}"
            
].join("n"),
            
vertexShader: ["attribute vec4 tangent;nuniform vec2 uOffset;nuniform vec2 uRepeat;nuniform bool enableDisplacement;n#ifdef VERTEX_TEXTURESnuniform sampler2D tDisplacement;nuniform float uDisplacementScale;nuniform float uDisplacementBias;n#endifnvarying vec3 vTangent;nvarying vec3 vBinormal;nvarying vec3 vNormal;nvarying vec2 vUv;nvarying vec3 vWorldPosition;",
                
THREE.ShaderChunk.shadowmap_pars_vertex"void main() {nvNormal = normalMatrix * normal;nvTangent = normalMatrix * tangent.xyz;nvBinormal = cross( vNormal, vTangent ) * tangent.w;nvUv = uv * uRepeat + uOffset;nvec3 displacedPosition;n#ifdef VERTEX_TEXTURESnif ( enableDisplacement ) {nvec3 dv = texture2D( tDisplacement, uv ).xyz;nfloat df = uDisplacementScale * dv.x + uDisplacementBias;ndisplacedPosition = position + normalize( normal ) * df;n} else {ndisplacedPosition = position;n}n#elsendisplacedPosition = position;n#endifnvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );nvec4 wPosition = objectMatrix * vec4( displacedPosition, 1.0 );ngl_Position = projectionMatrix * mvPosition;nvWorldPosition = wPosition.xyz;n#ifdef USE_SHADOWMAPnfor( int i = 0; i < MAX_SHADOWS; i ++ ) {nvShadowCoord[ i ] = shadowMatrix[ i ] * wPosition;n}n#endifn}"
            
].join("n")
        },
        
cube: {
            
uniforms: {
                
tCube: {
                    
type"t",
                    
value1,
                    
texturenull
                
},
                
tFlip: {
                    
type"f",
                    
value: -1
                
}
            },
            
vertexShader"varying vec3 vViewPosition;nvoid main() {nvec4 mPosition = objectMatrix * vec4( position, 1.0 );nvViewPosition = cameraPosition - mPosition.xyz;ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );n}",
            
fragmentShader"uniform samplerCube tCube;nuniform float tFlip;nvarying vec3 vViewPosition;nvoid main() {nvec3 wPos = cameraPosition - vViewPosition;ngl_FragColor = textureCube( tCube, vec3( tFlip * wPos.x, wPos.yz ) );n}"
        
}
    }
});
THREE.FontUtils = {
    
faces: {},
    
face"helvetiker",
    
weight"normal",
    
style"normal",
    
size150,
    
divisions10,
    
getFace: function() {
        return 
this.faces[this.face][this.weight][this.style]
    },
    
loadFace: function(a) {
        var 
a.familyName.toLowerCase();
        
this.faces[b] = this.faces[b] || {};
        
this.faces[b][a.cssFontWeight] = this.faces[b][a.cssFontWeight] || {};
        
this.faces[b][a.cssFontWeight][a.cssFontStyle] = a;
        return 
this.faces[b][a.cssFontWeight][a.cssFontStyle] = a
    
},
    
drawText: function(a) {
        for (var 
this.getFace(), this.size b.resolution=
                
0= ("" a).split(""), e.length= [], 0fa++) {
            var 
= new THREE.Path,
                
this.extractGlyphPoints(e[a], bcdh),
                
h.offset;
            
g.push(h.path)
        }
        return {
            
pathsg,
            
offset2
        
}
    },
    
extractGlyphPoints: function(abcde) {
        var 
= [],
            
ghijlmnproqb.glyphs[a] || b.glyphs["?"];
        if (
s) {
            if (
s.o) {
                
s._cachedOutline || (s._cachedOutline s.o.split(" "));
                
b.length;
                for (
0j;) {
                    
b[a++];
                    switch (
i) {
                        case 
"m":
                            
b[a++] * d;
                            
b[a++] * c;
                            
e.moveTo(il);
                            break;
                        case 
"l":
                            
b[a++] * d;
                            
b[a++] * c;
                            
e.lineTo(il);
                            break;
                        case 
"q":
                            
b[a++] *
                                
d;
                            
b[a++] * c;
                            
b[a++] * d;
                            
b[a++] * c;
                            
e.quadraticCurveTo(pril);
                            if (
f[f.length 1]) {
                                
g.x;
                                
g.y;
                                
1;
                                for (
this.divisions<= hg++) {
                                    var 
h;
                                    
THREE.Shape.Utils.b2(wmpi);
                                    
THREE.Shape.Utils.b2(wnrl)
                                }
                            }
                            break;
                        case 
"b":
                            
b[a++] * d;
                            
b[a++] * c;
                            
b[a++] * d;
                            
b[a++] * -c;
                            
b[a++] * d;
                            
b[a++] * -c;
                            
e.bezierCurveTo(ilproq);
                            if (
f[f.length 1]) {
                                
g.x;
                                
g.y;
                                
1;
                                for (
this.divisions<= hg++) {
                                    
h;
                                    
THREE.Shape.Utils.b3(wmpoi);
                                    
THREE.Shape.Utils.b3(wnrql)
                                }
                            }
                    }
                }
            }
            return {
                
offsets.ha c,
                
pathe
            
}
        }
    }
};
THREE.FontUtils.generateShapes = function(ab) {
    var 
|| {},
        
b.curveSegments !== void 0 b.curveSegments 4,
        
b.font !== void 0 b.font "helvetiker",
        
b.weight !== void 0 b.weight "normal",
        
b.style !== void 0 b.style "normal";
    
THREE.FontUtils.size b.size !== void 0 b.size 100;
    
THREE.FontUtils.divisions c;
    
THREE.FontUtils.face d;
    
THREE.FontUtils.weight e;
    
THREE.FontUtils.style f;
    
THREE.FontUtils.drawText(a).paths;
    
= [];
    
0;
    for (
c.lengthfe++) Array.prototype.push.apply(dc[e].toShapes());
    return 
d
};
(function(
a) {
    var 
= function(a) {
        for (var 
a.length010bg++) + (a[f].a[g].a[g].a[f].y);
        return 
0.5
    
};
    
a.Triangulate = function(ad) {
        var 
a.length;
        if (
3) return null;
        var 
= [],
            
= [],
            
= [],
            
ijl;
        if (
b(a) > 0)
            for (
0ej++) g[j] = j;
        else
            for (
0ej++) g[j] = j;
        var 
e;
        for (
12;) {
            if (
m-- <= 0) {
                
console.log("Warning, unable to triangulate polygon!");
                break
            }
            
j;
            
<= && (0);
            
1;
            
<= && (0);
            
1;
            
<= && (0);
            var 
n;
            
a: {
                
a;
                var 
i,
                    
j,
                    
l,
                    
e,
                    
g,
                    
void 0,
                    
void 0,
                    
void 0,
                    
void 0,
                    
void 0,
                    
void 0,
                    
void 0,
                    
void 0,
                    
void 0,
                    
n[s[p]].x,
                    
n[s[p]].y,
                    
n[s[r]].x,
                    
n[s[r]].y,
                    
n[s[o]].x,
                    
n[s[o]].y;
                if (
1.0E-10 > (t) * (v) - (v) * (t)) false;
                else {
                    for (
0qw++)
                        if (!(
== || == || == o)) {
                            var 
n[s[w]].x,
                                
n[s[w]].y,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
aa void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
void 0,
                                
x,
                                
C,
                                
D,
                                
z,
                                
t,
                                
v,
                                
t,
                                
v,
                                
aa x,
                                
C,
                                
D,
                                
z,
                                
aa,
                                
Q,
                                
N;
                            if (
>= && >= && >= 0) {
                                
false;
                                break 
a
                            
}
                        }
                    
true
                
}
            }
            if (
n) {
                
f.push([a[g[i]],
                    
a[g[j]], a[g[l]]
                ]);
                
h.push([g[i], g[j], g[l]]);
                
j;
                for (
1ei++, l++) g[i] = g[l];
                
e--;
                
e
            
}
        }
        return 
f
    
};
    
a.Triangulate.area b;
    return 
a
})(THREE.FontUtils);
self._typeface_js = {
    
facesTHREE.FontUtils.faces,
    
loadFaceTHREE.FontUtils.loadFace
};
THREE.BufferGeometry = function() {
    
this.id THREE.GeometryCount++;
    
this.attributes = {};
    
this.dynamic false;
    
this.boundingSphere this.boundingBox null;
    
this.hasTangents false;
    
this.morphTargets = []
};
THREE.BufferGeometry.prototype = {
    
constructorTHREE.BufferGeometry,
    
applyMatrix: function(a) {
        var 
bc;
        if (
this.attributes.positionthis.attributes.position.array;
        if (
this.attributes.normalthis.attributes.normal.array;
        if (
!== void 0) {
            
a.multiplyVector3Array(b);
            
this.verticesNeedUpdate true
        
}
        if (
!== void 0) {
            
= new THREE.Matrix4;
            
b.extractRotation(a);
            
b.multiplyVector3Array(c);
            
this.normalsNeedUpdate true
        
}
    },
    
computeBoundingBox: function() {
        if (!
this.boundingBoxthis.boundingBox = {
            
min: new THREE.Vector3(InfinityInfinity,
                
Infinity),
            
max: new THREE.Vector3(-Infinity, -Infinity, -Infinity)
        };
        var 
this.attributes.position.array;
        if (
a)
            for (var 
this.boundingBoxcde0a.lengthg3) {
                
a[f];
                
a[1];
                
a[2];
                if (
b.min.xb.min.c;
                else if (
b.max.xb.max.c;
                if (
b.min.yb.min.d;
                else if (
b.max.yb.max.d;
                if (
b.min.zb.min.e;
                else if (
b.max.zb.max.e
            
}
        if (
=== void 0 || a.length === 0) {
            
this.boundingBox.min.set(000);
            
this.boundingBox.max.set(000)
        }
    },
    
computeBoundingSphere: function() {
        if (!
this.boundingSpherethis.boundingSphere = {
            
radius0
        
};
        var 
this.attributes.position.array;
        if (
a) {
            for (var 
b0de0a.lengthg3) {
                
a[f];
                
a[1];
                
a[2];
                
Math.sqrt(e);
                
&& (b)
            }
            
this.boundingSphere.radius c
        
}
    },
    
computeVertexNormals: function() {
        if (
this.attributes.position && this.attributes.index) {
            var 
abcd;
            
this.attributes.position.array.length;
            if (
this.attributes.normal === void 0this.attributes.normal = {
                
itemSize3,
                array: new 
Float32Array(a),
                
numItemsa
            
};
            else {
                
0;
                for (
this.attributes.normal.array.lengthba++) this.attributes.normal.array[a] =
                    
0
            
}
            var 
this.offsets,
                
this.attributes.index.array,
                
this.attributes.position.array,
                
this.attributes.normal.array,
                
ijlmnp= new THREE.Vector3,
                
= new THREE.Vector3,
                
= new THREE.Vector3,
                
= new THREE.Vector3,
                
= new THREE.Vector3;
            
0;
            for (
e.lengthd; ++c) {
                
e[c].start;
                
e[c].count;
                var 
e[c].index;
                
b;
                for (
ib3) {
                    
f[a];
                    
f[1];
                    
f[2];
                    
g[3];
                    
g[1];
                    
g[2];
                    
r.set(mnp);
                    
g[3];
                    
g[1];
                    
g[2];
                    
o.set(mnp);
                    
g[3];
                    
g[1];
                    
g[2];
                    
q.set(mnp);
                    
s.sub(qo);
                    
w.sub(r,
                        
o);
                    
s.crossSelf(w);
                    
h[3] = h[3] + s.x;
                    
h[1] = h[1] + s.y;
                    
h[2] = h[2] + s.z;
                    
h[3] = h[3] + s.x;
                    
h[1] = h[1] + s.y;
                    
h[2] = h[2] + s.z;
                    
h[3] = h[3] + s.x;
                    
h[1] = h[1] + s.y;
                    
h[2] = h[2] + s.z
                
}
            }
            
0;
            for (
h.lengthb3) {
                
h[a];
                
h[1];
                
h[2];
                
Math.sqrt(p);
                
h[a] = h[a] * c;
                
h[1] = h[1] * c;
                
h[2] = h[2] * c
            
}
            
this.normalsNeedUpdate true
        
}
    },
    
computeTangents: function() {
        function 
a(abc) {
            
d[3];
            
d[1];
            
d[2];
            
d[3];
            
d[1];
            
d[2];
            
d[3];
            
d[1];
            
d[2];
            
=
                
f[2];
            
f[1];
            
f[2];
            
f[1];
            
f[2];
            
f[1];
            
m;
            
m;
            
n;
            
n;
            
p;
            
p;
            
v;
            
v;
            
x;
            
aa x;
            
/ (aa E);
            
N.set((aa J) * T, (aa O) * T, (aa B) * T);
            
W.set((G) * T, (M) * T, (X) * T);
            
j[a].addSelf(N);
            
j[b].addSelf(N);
            
j[c].addSelf(N);
            
l[a].addSelf(W);
            
l[b].addSelf(W);
            
l[c].addSelf(W)
        }

        function 
b(a) {
            
ma.e[3];
            
ma.e[1];
            
ma.e[2];
            
Ga.copy(ma);
            
Oa j[a];
            
U.copy(Oa);
            
U.subSelf(ma.multiplyScalar(ma.dot(Oa))).normalize();
            
fa.cross(GaOa);
            
Pa fa.dot(l[a]);
            
na Pa ? -1;
            
i[4] = U.x;
            
i[1] = U.y;
            
i[2] = U.z;
            
i[3] = na
        
}
        if (
this.attributes.index === void 0 || this.attributes.position === void 0 || this.attributes.normal === void 0 || this.attributes.uv === void 0console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");
        else {
            var 
this.attributes.index.array,
                
this.attributes.position.array,
                
this.attributes.normal.array,
                
this.attributes.uv.array,
                
d.length 3;
            if (
this.attributes.tangent === void 0) {
                var 
g;
                
this.attributes.tangent = {
                    
itemSize4,
                    array: new 
Float32Array(h),
                    
numItemsh
                
}
            }
            for (var 
this.attributes.tangent.array, = [], = [], 0gh++) {
                
j[h] = new THREE.Vector3;
                
l[h] = new THREE.Vector3
            
}
            var 
mnproqswtvxCDzuGJMOXBFQEaaT= new THREE.Vector3,
                
= new THREE.Vector3,
                
baHcaiaSthis.offsets,
                
0;
            for (
R.lengthH; ++h) {
                
ba R[h].start;
                
ca R[h].count;
                var 
R[h].index,
                    
ba;
                for (
ba ba caba3) {
                    
ca c[g];
                    
ia c[1];
                    
c[2];
                    
a(caiaS)
                }
            }
            var 
= new THREE.Vector3,
                
fa = new THREE.Vector3,
                
ma = new THREE.Vector3,
                
Ga =
                new 
THREE.Vector3,
                
naOaPa0;
            for (
R.lengthH; ++h) {
                
ba R[h].start;
                
ca R[h].count;
                
R[h].index;
                
ba;
                for (
ba ba caba3) {
                    
ca c[g];
                    
ia c[1];
                    
c[2];
                    
b(ca);
                    
b(ia);
                    
b(S)
                }
            }
            
this.tangentsNeedUpdate this.hasTangents true
        
}
    }
};
THREE.Curve = function() {};
THREE.Curve.prototype.getPoint = function() {
    
console.log("Warning, getPoint() not implemented!");
    return 
null
};
THREE.Curve.prototype.getPointAt = function(a) {
    return 
this.getPoint(this.getUtoTmapping(a))
};
THREE.Curve.prototype.getPoints = function(a) {
    
|| (5);
    var 
b= [];
    for (
0<= ab++) c.push(this.getPoint(a));
    return 
c
};
THREE.Curve.prototype.getSpacedPoints = function(a) {
    
|| (5);
    var 
b= [];
    for (
0<= ab++) c.push(this.getPointAt(a));
    return 
c
};
THREE.Curve.prototype.getLength = function() {
    var 
this.getLengths();
    return 
a[a.length 1]
};
THREE.Curve.prototype.getLengths = function(a) {
    
|| (this.__arcLengthDivisions this.__arcLengthDivisions 200);
    if (
this.cacheArcLengths && this.cacheArcLengths.length == && !this.needsUpdate) return this.cacheArcLengths;
    
this.needsUpdate false;
    var 
= [],
        
cthis.getPoint(0),
        
e0;
    
b.push(0);
    for (
1<= ae++) {
        
this.getPoint(a);
        
c.distanceTo(d);
        
b.push(f);
        
c
    
}
    return 
this.cacheArcLengths b
};
THREE.Curve.prototype.updateArcLengths = function() {
    
this.needsUpdate true;
    
this.getLengths()
};
THREE.Curve.prototype.getUtoTmapping = function(ab) {
    var 
this.getLengths(),
        
0,
        
c.length,
        
f;
    
c[1];
    for (var 
01i<= h;) {
        
Math.floor(+ (g) / 2);
        
c[d] - f;
        if (
01;
        else if (
01;
        else {
            
d;
            break
        }
    }
    
h;
    if (
c[d] == f) return / (1);
    
c[d];
    return 
= (+ (g) / (c[1] - g)) / (1)
};
THREE.Curve.prototype.getNormalVector = function(a) {
    
this.getTangent(a);
    return new 
THREE.Vector2(-a.ya.x)
};
THREE.Curve.prototype.getTangent = function(a) {
    var 
1.0E-4,
        
1.0E-4;
    
&& (0);
    
&& (1);
    
this.getPoint(b);
    return 
this.getPoint(a).clone().subSelf(b).normalize()
};
THREE.Curve.prototype.getTangentAt = function(a) {
    return 
this.getTangent(this.getUtoTmapping(a))
};
THREE.LineCurve = function(ab) {
    
this.v1 a;
    
this.v2 b
};
THREE.LineCurve.prototype Object.create(THREE.Curve.prototype);
THREE.LineCurve.prototype.getPoint = function(a) {
    var 
this.v2.clone().subSelf(this.v1);
    
b.multiplyScalar(a).addSelf(this.v1);
    return 
b
};
THREE.LineCurve.prototype.getPointAt = function(a) {
    return 
this.getPoint(a)
};
THREE.LineCurve.prototype.getTangent = function() {
    return 
this.v2.clone().subSelf(this.v1).normalize()
};
THREE.QuadraticBezierCurve = function(abc) {
    
this.v0 a;
    
this.v1 b;
    
this.v2 c
};
THREE.QuadraticBezierCurve.prototype Object.create(THREE.Curve.prototype);
THREE.QuadraticBezierCurve.prototype.getPoint = function(a) {
    var 
b;
    
THREE.Shape.Utils.b2(athis.v0.xthis.v1.xthis.v2.x);
    
THREE.Shape.Utils.b2(athis.v0.ythis.v1.ythis.v2.y);
    return new 
THREE.Vector2(ba)
};
THREE.QuadraticBezierCurve.prototype.getTangent = function(a) {
    var 
b;
    
THREE.Curve.Utils.tangentQuadraticBezier(athis.v0.xthis.v1.xthis.v2.x);
    
THREE.Curve.Utils.tangentQuadraticBezier(athis.v0.ythis.v1.ythis.v2.y);
    
= new THREE.Vector2(ba);
    
b.normalize();
    return 
b
};
THREE.CubicBezierCurve = function(abcd) {
    
this.v0 a;
    
this.v1 b;
    
this.v2 c;
    
this.v3 d
};
THREE.CubicBezierCurve.prototype Object.create(THREE.Curve.prototype);
THREE.CubicBezierCurve.prototype.getPoint = function(a) {
    var 
b;
    
THREE.Shape.Utils.b3(athis.v0.xthis.v1.xthis.v2.xthis.v3.x);
    
THREE.Shape.Utils.b3(athis.v0.ythis.v1.ythis.v2.ythis.v3.y);
    return new 
THREE.Vector2(ba)
};
THREE.CubicBezierCurve.prototype.getTangent = function(a) {
    var 
b;
    
THREE.Curve.Utils.tangentCubicBezier(athis.v0.xthis.v1.xthis.v2.xthis.v3.x);
    
THREE.Curve.Utils.tangentCubicBezier(athis.v0.ythis.v1.ythis.v2.ythis.v3.y);
    
= new THREE.Vector2(ba);
    
b.normalize();
    return 
b
};
THREE.SplineCurve = function(a) {
    
this.points == void 0 ? [] : a
};
THREE.SplineCurve.prototype Object.create(THREE.Curve.prototype);
THREE.SplineCurve.prototype.getPoint = function(a) {
    var 
= new THREE.Vector2,
        
= [],
        
this.points,
        
e;
    
= (d.length 1) * a;
    
Math.floor(e);
    
a;
    
c[0] = == 1;
    
c[1] = a;
    
c[2] = d.length d.length 1;
    
c[3] = d.length d.length 2;
    
b.THREE.Curve.Utils.interpolate(d[c[0]].xd[c[1]].xd[c[2]].xd[c[3]].xe);
    
b.THREE.Curve.Utils.interpolate(d[c[0]].yd[c[1]].yd[c[2]].yd[c[3]].ye);
    return 
b
};
THREE.EllipseCurve = function(abcdefg) {
    
this.aX a;
    
this.aY b;
    
this.xRadius c;
    
this.yRadius d;
    
this.aStartAngle e;
    
this.aEndAngle f;
    
this.aClockwise g
};
THREE.EllipseCurve.prototype Object.create(THREE.Curve.prototype);
THREE.EllipseCurve.prototype.getPoint = function(a) {
    var 
this.aEndAngle this.aStartAngle;
    
this.aClockwise || (a);
    
this.aStartAngle b;
    
this.aX this.xRadius Math.cos(b);
    
this.aY this.yRadius Math.sin(b);
    return new 
THREE.Vector2(ab)
};
THREE.ArcCurve = function(abcdef) {
    
THREE.EllipseCurve.call(thisabccdef)
};
THREE.ArcCurve.prototype Object.create(THREE.EllipseCurve.prototype);
THREE.Curve.Utils = {
    
tangentQuadraticBezier: function(abcd) {
        return 
* (a) * (b) + * (c)
    },
    
tangentCubicBezier: function(abcde) {
        return -
* (a) * (a) + * (a) * (a) - * (a) + * (a) - e
    
},
    
tangentSpline: function(a) {
        return 
+ (1) + (-a) + (a)
    },
    
interpolate: function(abcde) {
        var 
= (a) * 0.5,
            
= (b) * 0.5,
            
e;
        return (
d) * + (-d) * b
    
}
};
THREE.Curve.create = function(ab) {
    
a.prototype Object.create(THREE.Curve.prototype);
    
a.prototype.getPoint b;
    return 
a
};
THREE.LineCurve3 THREE.Curve.create(function(ab) {
    
this.v1 a;
    
this.v2 b
}, function(a) {
    var 
= new THREE.Vector3;
    
b.sub(this.v2this.v1);
    
b.multiplyScalar(a);
    
b.addSelf(this.v1);
    return 
b
});
THREE.QuadraticBezierCurve3 THREE.Curve.create(function(abc) {
    
this.v0 a;
    
this.v1 b;
    
this.v2 c
}, function(a) {
    var 
bc;
    
THREE.Shape.Utils.b2(athis.v0.xthis.v1.xthis.v2.x);
    
THREE.Shape.Utils.b2(athis.v0.ythis.v1.ythis.v2.y);
    
THREE.Shape.Utils.b2(athis.v0.zthis.v1.zthis.v2.z);
    return new 
THREE.Vector3(bca)
});
THREE.CubicBezierCurve3 THREE.Curve.create(function(abcd) {
    
this.v0 a;
    
this.v1 b;
    
this.v2 c;
    
this.v3 d
}, function(a) {
    var 
bc;
    
THREE.Shape.Utils.b3(athis.v0.xthis.v1.xthis.v2.xthis.v3.x);
    
THREE.Shape.Utils.b3(athis.v0.ythis.v1.ythis.v2.ythis.v3.y);
    
THREE.Shape.Utils.b3(athis.v0.zthis.v1.zthis.v2.zthis.v3.z);
    return new 
THREE.Vector3(bca)
});
THREE.SplineCurve3 THREE.Curve.create(function(a) {
    
this.points == void 0 ? [] : a
}, function(a) {
    var 
= new THREE.Vector3,
        
= [],
        
this.points,
        
e= (d.length 1) * a;
    
Math.floor(a);
    
e;
    
c[0] = == 1;
    
c[1] = e;
    
c[2] = d.length d.length 1;
    
c[3] = d.length d.length 2;
    
d[c[0]];
    var 
d[c[1]],
        
d[c[2]],
        
d[c[3]];
    
b.THREE.Curve.Utils.interpolate(e.xf.xg.xc.xa);
    
b.THREE.Curve.Utils.interpolate(e.yf.yg.yc.ya);
    
b.THREE.Curve.Utils.interpolate(e.zf.zg.zc.za);
    return 
b
});
THREE.ClosedSplineCurve3 THREE.Curve.create(function(a) {
    
this.points == void 0 ? [] : a
}, function(a) {
    var 
= new THREE.Vector3,
        
= [],
        
this.points,
        
e;
    
= (d.length 0) * a;
    
Math.floor(e);
    
a;
    
+ (: (Math.floor(Math.abs(a) / d.length) + 1) * d.length);
    
c[0] = (1) % d.length;
    
c[1] = d.length;
    
c[2] = (1) % d.length;
    
c[3] = (2) % d.length;
    
b.THREE.Curve.Utils.interpolate(d[c[0]].xd[c[1]].xd[c[2]].xd[c[3]].xe);
    
b.THREE.Curve.Utils.interpolate(d[c[0]].yd[c[1]].yd[c[2]].yd[c[3]].ye);
    
b.THREE.Curve.Utils.interpolate(d[c[0]].z,
        
d[c[1]].zd[c[2]].zd[c[3]].ze);
    return 
b
});
THREE.CurvePath = function() {
    
this.curves = [];
    
this.bends = [];
    
this.autoClose false
};
THREE.CurvePath.prototype Object.create(THREE.Curve.prototype);
THREE.CurvePath.prototype.add = function(a) {
    
this.curves.push(a)
};
THREE.CurvePath.prototype.checkConnection = function() {};
THREE.CurvePath.prototype.closePath = function() {
    var 
this.curves[0].getPoint(0),
        
this.curves[this.curves.length 1].getPoint(1);
    
a.equals(b) || this.curves.push(new THREE.LineCurve(ba))
};
THREE.CurvePath.prototype.getPoint = function(a) {
    for (var 
this.getLength(), this.getCurveLengths(), 0c.length;) {
        if (
c[a] >= b) {
            
c[a] - b;
            
this.curves[a];
            
a.getLength();
            return 
a.getPointAt(b)
        }
        
a++
    }
    return 
null
};
THREE.CurvePath.prototype.getLength = function() {
    var 
this.getCurveLengths();
    return 
a[a.length 1]
};
THREE.CurvePath.prototype.getCurveLengths = function() {
    if (
this.cacheLengths && this.cacheLengths.length == this.curves.length) return this.cacheLengths;
    var 
= [],
        
0,
        
cthis.curves.length;
    for (
0dc++) {
        
this.curves[c].getLength();
        
a.push(b)
    }
    return 
this.cacheLengths a
};
THREE.CurvePath.prototype.getBoundingBox = function() {
    var 
this.getPoints(),
        
bcde;
    
Number.NEGATIVE_INFINITY;
    
Number.POSITIVE_INFINITY;
    var 
fghi;
    
= new THREE.Vector2;
    
0;
    for (
a.lengthhg++) {
        
a[g];
        if (
f.bf.x;
        else if (
f.df.x;
        if (
f.cf.y;
        else if (
f.ef.y;
        
i.addSelf(f.xf.y)
    }
    return {
        
minXd,
        
minYe,
        
maxXb,
        
maxYc,
        
centroidi.divideScalar(h)
    }
};
THREE.CurvePath.prototype.createPointsGeometry = function(a) {
    return 
this.createGeometry(this.getPoints(atrue))
};
THREE.CurvePath.prototype.createSpacedPointsGeometry = function(a) {
    return 
this.createGeometry(this.getSpacedPoints(atrue))
};
THREE.CurvePath.prototype.createGeometry = function(a) {
    for (var 
= new THREE.Geometry0a.lengthc++) b.vertices.push(new THREE.Vector3(a[c].xa[c].y0));
    return 
b
};
THREE.CurvePath.prototype.addWrapPath = function(a) {
    
this.bends.push(a)
};
THREE.CurvePath.prototype.getTransformedPoints = function(ab) {
    var 
this.getPoints(a),
        
de;
    if (!
bthis.bends;
    
0;
    for (
b.lengthed++) this.getWrapPoints(cb[d]);
    return 
c
};
THREE.CurvePath.prototype.getTransformedSpacedPoints = function(ab) {
    var 
this.getSpacedPoints(a),
        
de;
    if (!
bthis.bends;
    
0;
    for (
b.lengthed++) this.getWrapPoints(cb[d]);
    return 
c
};
THREE.CurvePath.prototype.getWrapPoints = function(ab) {
    var 
this.getBoundingBox(),
        
defghi;
    
0;
    for (
a.lengthed++) {
        
a[d];
        
f.x;
        
f.y;
        
c.maxX;
        
b.getUtoTmapping(ig);
        
b.getPoint(i);
        
b.getNormalVector(i).multiplyScalar(h);
        
f.g.h.x;
        
f.g.h.y
    
}
    return 
a
};
THREE.Gyroscope = function() {
    
THREE.Object3D.call(this)
};
THREE.Gyroscope.prototype Object.create(THREE.Object3D.prototype);
THREE.Gyroscope.prototype.updateMatrixWorld = function(a) {
    
this.matrixAutoUpdate && this.updateMatrix();
    if (
this.matrixWorldNeedsUpdate || a) {
        if (
this.parent) {
            
this.matrixWorld.multiply(this.parent.matrixWorldthis.matrix);
            
this.matrixWorld.decompose(this.translationWorldthis.rotationWorldthis.scaleWorld);
            
this.matrix.decompose(this.translationObjectthis.rotationObjectthis.scaleObject);
            
this.matrixWorld.compose(this.translationWorldthis.rotationObjectthis.scaleWorld)
        } else 
this.matrixWorld.copy(this.matrix);
        
this.matrixWorldNeedsUpdate false;
        
true
    
}
    for (var 
0this.children.lengthcb++) this.children[b].updateMatrixWorld(a)
};
THREE.Gyroscope.prototype.translationWorld = new THREE.Vector3;
THREE.Gyroscope.prototype.translationObject = new THREE.Vector3;
THREE.Gyroscope.prototype.rotationWorld = new THREE.Quaternion;
THREE.Gyroscope.prototype.rotationObject = new THREE.Quaternion;
THREE.Gyroscope.prototype.scaleWorld = new THREE.Vector3;
THREE.Gyroscope.prototype.scaleObject = new THREE.Vector3;
THREE.Path = function(a) {
    
THREE.CurvePath.call(this);
    
this.actions = [];
    
&& this.fromPoints(a)
};
THREE.Path.prototype Object.create(THREE.CurvePath.prototype);
THREE.PathActions = {
    
MOVE_TO"moveTo",
    
LINE_TO"lineTo",
    
QUADRATIC_CURVE_TO"quadraticCurveTo",
    
BEZIER_CURVE_TO"bezierCurveTo",
    
CSPLINE_THRU"splineThru",
    
ARC"arc",
    
ELLIPSE"ellipse"
};
THREE.Path.prototype.fromPoints = function(a) {
    
this.moveTo(a[0].xa[0].y);
    for (var 
1a.lengthcb++) this.lineTo(a[b].xa[b].y)
};
THREE.Path.prototype.moveTo = function(ab) {
    var 
= Array.prototype.slice.call(arguments);
    
this.actions.push({
        
actionTHREE.PathActions.MOVE_TO,
        
argsc
    
})
};
THREE.Path.prototype.lineTo = function(ab) {
    var 
= Array.prototype.slice.call(arguments),
        
this.actions[this.actions.length 1].args;
    
this.curves.push(new THREE.LineCurve(new THREE.Vector2(d[d.length 2], d[d.length 1]), new THREE.Vector2(ab)));
    
this.actions.push({
        
actionTHREE.PathActions.LINE_TO,
        
argsc
    
})
};
THREE.Path.prototype.quadraticCurveTo = function(abcd) {
    var 
= Array.prototype.slice.call(arguments),
        
this.actions[this.actions.length 1].args;
    
this.curves.push(new THREE.QuadraticBezierCurve(new THREE.Vector2(f[f.length 2], f[f.length 1]), new THREE.Vector2(ab), new THREE.Vector2(cd)));
    
this.actions.push({
        
actionTHREE.PathActions.QUADRATIC_CURVE_TO,
        
argse
    
})
};
THREE.Path.prototype.bezierCurveTo = function(abcdef) {
    var 
= Array.prototype.slice.call(arguments),
        
this.actions[this.actions.length 1].args;
    
this.curves.push(new THREE.CubicBezierCurve(new THREE.Vector2(h[h.length 2], h[h.length 1]), new THREE.Vector2(ab), new THREE.Vector2(cd), new THREE.Vector2(ef)));
    
this.actions.push({
        
actionTHREE.PathActions.BEZIER_CURVE_TO,
        
argsg
    
})
};
THREE.Path.prototype.splineThru = function(a) {
    var 
= Array.prototype.slice.call(arguments),
        
this.actions[this.actions.length 1].args,
        
= [new THREE.Vector2(c[c.length 2], c[c.length 1])];
    Array.
prototype.push.apply(ca);
    
this.curves.push(new THREE.SplineCurve(c));
    
this.actions.push({
        
actionTHREE.PathActions.CSPLINE_THRU,
        
argsb
    
})
};
THREE.Path.prototype.ellipse = function(abcdefg) {
    var 
this.actions[this.actions.length 1];
    
this.absellipse(h.ah.bcdefg)
};
THREE.Path.prototype.arc = function(abcdef) {
    var 
this.actions[this.actions.length 1];
    
this.absarc(g.ag.bcdef)
};
THREE.Path.prototype.absellipse = function(abcdefg) {
    var 
= Array.prototype.slice.call(arguments),
        
= new THREE.EllipseCurve(abcdefg);
    
this.curves.push(i);
    
i.getPoint(0);
    
h.push(i.x);
    
h.push(i.y);
    
this.actions.push({
        
actionTHREE.PathActions.ELLIPSE,
        
argsh
    
})
};
THREE.Path.prototype.absarc = function(abcdef) {
    
this.absellipse(abccdef)
};
THREE.Path.prototype.getSpacedPoints = function(a) {
    
|| (40);
    for (var 
= [], 0ac++) b.push(this.getPoint(a));
    return 
b
};
THREE.Path.prototype.getPoints = function(ab) {
    if (
this.useSpacedPoints) {
        
console.log("tata");
        return 
this.getSpacedPoints(ab)
    }
    var 
|| 12,
        
= [],
        
defghijlmnpro;
    
0;
    for (
this.actions.lengthed++) {
        
this.actions[d];
        
f.action;
        
f.args;
        switch (
g) {
            case 
THREE.PathActions.MOVE_TO:
                
c.push(new THREE.Vector2(f[0], f[1]));
                break;
            case 
THREE.PathActions.LINE_TO:
                
c.push(new THREE.Vector2(f[0], f[1]));
                break;
            case 
THREE.PathActions.QUADRATIC_CURVE_TO:
                
f[2];
                
f[3];
                
f[0];
                
f[1];
                if (
c.length 0) {
                    
c[c.length 1];
                    
g.x;
                    
g.y
                
} else {
                    
this.actions[1].args;
                    
g[g.length 2];
                    
g[g.length 1]
                }
                for (
1<= af++) {
                    
a;
                    
THREE.Shape.Utils.b2(opmh);
                    
THREE.Shape.Utils.b2(orni);
                    
c.push(new THREE.Vector2(go))
                }
                break;
            case 
THREE.PathActions.BEZIER_CURVE_TO:
                
f[4];
                
f[5];
                
f[0];
                
f[1];
                
f[2];
                
f[3];
                if (
c.length 0) {
                    
c[c.length 1];
                    
g.x;
                    
g.y
                
} else {
                    
this.actions[1].args;
                    
g[g.length 2];
                    
g[g.length 1]
                }
                for (
1<= af++) {
                    
a;
                    
THREE.Shape.Utils.b3(opmjh);
                    
THREE.Shape.Utils.b3(ornli);
                    
c.push(new THREE.Vector2(g,
                        
o))
                }
                break;
            case 
THREE.PathActions.CSPLINE_THRU:
                
this.actions[1].args;
                
= [new THREE.Vector2(g[g.length 2], g[g.length 1])];
                
f[0].length;
                
o.concat(f[0]);
                
= new THREE.SplineCurve(o);
                for (
1<= gf++) c.push(o.getPointAt(g));
                break;
            case 
THREE.PathActions.ARC:
                
f[0];
                
f[1];
                
f[2];
                
f[3];
                
f[4];
                
= !!f[5];
                
j;
                
2;
                for (
1<= rf++) {
                    
r;
                    
|| (o);
                    
p;
                    
Math.cos(o);
                    
Math.sin(o);
                    
c.push(new THREE.Vector2(go))
                }
                break;
            case 
THREE.PathActions.ELLIPSE:
                
f[0];
                
f[1];
                
f[2];
                
f[3];
                
f[4];
                
f[5];
                
= !!f[6];
                
j;
                
2;
                for (
1<= rf++) {
                    
r;
                    
|| (o);
                    
p;
                    
Math.cos(o);
                    
Math.sin(o);
                    
c.push(new THREE.Vector2(go))
                }
        }
    }
    
c[c.length 1];
    
Math.abs(d.c[0].x) < 1.0E-10 && Math.abs(d.c[0].y) < 1.0E-10 && c.splice(c.length 11);
    
&& c.push(c[0]);
    return 
c
};
THREE.Path.prototype.toShapes = function() {
    var 
abcd= [],
        
= new THREE.Path;
    
0;
    for (
this.actions.lengthba++) {
        
this.actions[a];
        
c.args;
        
c.action;
        if (
== THREE.PathActions.MOVE_TO && f.actions.length != 0) {
            
e.push(f);
            
= new THREE.Path
        
}
        
f[c].apply(fd)
    }
    
f.actions.length != && e.push(f);
    if (
e.length == 0) return [];
    var 
g;
    
= [];
    
= !THREE.Shape.Utils.isClockWise(e[0].getPoints());
    if (
e.length == 1) {
        
e[0];
        
= new THREE.Shape;
        
g.actions f.actions;
        
g.curves f.curves;
        
d.push(g);
        return 
d
    
}
    if (
a) {
        
= new THREE.Shape;
        
0;
        for (
e.length<
            
ba++) {
            
e[a];
            if (
THREE.Shape.Utils.isClockWise(f.getPoints())) {
                
g.actions f.actions;
                
g.curves f.curves;
                
d.push(g);
                
= new THREE.Shape
            
} else g.holes.push(f)
        }
    } else {
        
0;
        for (
e.lengthba++) {
            
e[a];
            if (
THREE.Shape.Utils.isClockWise(f.getPoints())) {
                
&& d.push(g);
                
= new THREE.Shape;
                
g.actions f.actions;
                
g.curves f.curves
            
} else g.holes.push(f)
        }
        
d.push(g)
    }
    return 
d
};
THREE.Shape = function() {
    
THREE.Path.apply(thisarguments);
    
this.holes = []
};
THREE.Shape.prototype Object.create(THREE.Path.prototype);
THREE.Shape.prototype.extrude = function(a) {
    return new 
THREE.ExtrudeGeometry(thisa)
};
THREE.Shape.prototype.getPointsHoles = function(a) {
    var 
bthis.holes.length,
        
= [];
    for (
0cb++) d[b] = this.holes[b].getTransformedPoints(athis.bends);
    return 
d
};
THREE.Shape.prototype.getSpacedPointsHoles = function(a) {
    var 
bthis.holes.length,
        
= [];
    for (
0cb++) d[b] = this.holes[b].getTransformedSpacedPoints(athis.bends);
    return 
d
};
THREE.Shape.prototype.extractAllPoints = function(a) {
    return {
        
shapethis.getTransformedPoints(a),
        
holesthis.getPointsHoles(a)
    }
};
THREE.Shape.prototype.extractPoints = function(a) {
    return 
this.useSpacedPoints this.extractAllSpacedPoints(a) : this.extractAllPoints(a)
};
THREE.Shape.prototype.extractAllSpacedPoints = function(a) {
    return {
        
shapethis.getTransformedSpacedPoints(a),
        
holesthis.getSpacedPointsHoles(a)
    }
};
THREE.Shape.Utils = {
    
removeHoles: function(ab) {
        var 
a.concat(),
            
c.concat(),
            
efghijlmnp= [];
        for (
0b.lengthi++) {
            
b[i];
            Array.
prototype.push.apply(dj);
            
Number.POSITIVE_INFINITY;
            for (
0j.lengthe++) {
                
j[e];
                
= [];
                for (
0c.lengthm++) {
                    
c[m];
                    
n.distanceToSquared(l);
                    
p.push(l);
                    if (
f) {
                        
l;
                        
e;
                        
m
                    
}
                }
            }
            
>= c.length 1;
            
>= j.length 1;
            var 
= [j[g], c[h], c[e]];
            
THREE.FontUtils.Triangulate.area(o);
            var 
= [j[g], j[f], c[h]];
            
THREE.FontUtils.Triangulate.area(q);
            
h;
            
g;
            
1;
            
+
                -
1;
            
&& (c.length);
            
c.length;
            
&& (j.length);
            
j.length;
            
>= c.length 1;
            
>= j.length 1;
            
= [j[g], c[h], c[e]];
            
THREE.FontUtils.Triangulate.area(o);
            
= [j[g], j[f], c[h]];
            
THREE.FontUtils.Triangulate.area(q);
            if (
q) {
                
p;
                
l;
                
&& (c.length);
                
c.length;
                
&& (j.length);
                
j.length;
                
>= c.length 1;
                
>= j.length 1
            
}
            
c.slice(0h);
            
c.slice(h);
            
j.slice(g);
            
j.slice(0g);
            
= [j[g], j[f], c[h]];
            
r.push([j[g], c[h], c[e]]);
            
r.push(f);
            
m.concat(p).concat(l).concat(n)
        }
        return {
            
shapec,
            
isolatedPtsr,
            
allpointsd
        
}
    },
    
triangulateShape: function(ab) {
        var 
THREE.Shape.Utils.removeHoles(ab),
            
c.allpoints,
            
c.isolatedPts,
            
THREE.FontUtils.Triangulate(c.shapefalse),
            
fghi= {};
        
0;
        for (
d.lengthgf++) {
            
d[f].":" d[f].y;
            
j[i] !== void 0 && console.log("Duplicate point"i);
            
j[i] = f
        
}
        
0;
        for (
c.lengthgf++) {
            
c[f];
            for (
03d++) {
                
h[d].":" h[d].y;
                
j[i];
                
!== void 0 && (h[d] = i)
            }
        }
        
0;
        for (
e.lengthgf++) {
            
e[f];
            for (
03d++) {
                
h[d].":" h[d].y;
                
j[i];
                
!== void 0 && (h[d] = i)
            }
        }
        return 
c.concat(e)
    },
    
isClockWise: function(a) {
        return 
THREE.FontUtils.Triangulate.area(a) < 0
    
},
    
b2p0: function(ab) {
        var 
a;
        return 
b
    
},
    
b2p1: function(ab) {
        return 
* (a) * b
    
},
    
b2p2: function(ab) {
        return 
b
    
},
    
b2: function(abcd) {
        return 
this.b2p0(ab) + this.b2p1(ac) + this.b2p2(ad)
    },
    
b3p0: function(ab) {
        var 
a;
        return 
b
    
},
    
b3p1: function(ab) {
        var 
a;
        return 
b
    
},
    
b3p2: function(ab) {
        return 
* (a) * b
    
},
    
b3p3: function(ab) {
        return 
b
    
},
    
b3: function(abcde) {
        return 
this.b3p0(ab) + this.b3p1(ac) + this.b3p2(ad) +
            
this.b3p3(ae)
    }
};
THREE.AnimationHandler = function() {
    var 
= [],
        
= {},
        
= {
            
update: function(b) {
                for (var 
0a.lengthc++) a[c].update(b)
            },
            
addToUpdate: function(b) {
                
a.indexOf(b) === -&& a.push(b)
            },
            
removeFromUpdate: function(b) {
                
a.indexOf(b);
                
!== -&& a.splice(b1)
            },
            
add: function(a) {
                
b[a.name] !== void 0 && console.log("THREE.AnimationHandler.add: Warning! " a.name " already exists in library. Overwriting.");
                
b[a.name] = a;
                if (
a.initialized !== true) {
                    for (var 
0a.hierarchy.lengthc++) {
                        for (var 
0a.hierarchy[c].keys.lengthd++) {
                            if (
a.hierarchy[c].keys[d].time 0a.hierarchy[c].keys[d].time =
                                
0;
                            if (
a.hierarchy[c].keys[d].rot !== void 0 && !(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)) {
                                var 
a.hierarchy[c].keys[d].rot;
                                
a.hierarchy[c].keys[d].rot = new THREE.Quaternion(h[0], h[1], h[2], h[3])
                            }
                        }
                        if (
a.hierarchy[c].keys.length && a.hierarchy[c].keys[0].morphTargets !== void 0) {
                            
= {};
                            for (
0a.hierarchy[c].keys.lengthd++)
                                for (var 
0a.hierarchy[c].keys[d].morphTargets.lengthi++) {
                                    var 
a.hierarchy[c].keys[d].morphTargets[i];
                                    
h[j] = -1
                                
}
                            
a.hierarchy[c].usedMorphTargets h;
                            for (
0a.hierarchy[c].keys.lengthd++) {
                                var 
= {};
                                for (
j in h) {
                                    for (
0a.hierarchy[c].keys[d].morphTargets.lengthi++)
                                        if (
a.hierarchy[c].keys[d].morphTargets[i] === j) {
                                            
l[j] = a.hierarchy[c].keys[d].morphTargetsInfluences[i];
                                            break
                                        }
                                    
=== a.hierarchy[c].keys[d].morphTargets.length && (l[j] = 0)
                                }
                                
a.hierarchy[c].keys[d].morphTargetsInfluences l
                            
}
                        }
                        for (
1a.hierarchy[c].keys.lengthd++)
                            if (
a.hierarchy[c].keys[d].time === a.hierarchy[c].keys[1].time) {
                                
a.hierarchy[c].keys.splice(d1);
                                
d--
                            }
                        for (
0a.hierarchy[c].keys.lengthd++) a.hierarchy[c].keys[d].index d
                    
}
                    
parseInt(a.length *
                        
a.fps10);
                    
a.JIT = {};
                    
a.JIT.hierarchy = [];
                    for (
0a.hierarchy.lengthc++) a.JIT.hierarchy.push(Array(d));
                    
a.initialized true
                
}
            },
            
get: function(a) {
                if (
typeof a === "string") {
                    if (
b[a]) return b[a];
                    
console.log("THREE.AnimationHandler.get: Couldn't find animation " a);
                    return 
null
                
}
            },
            
parse: function(a) {
                var 
= [];
                if (
instanceof THREE.SkinnedMesh)
                    for (var 
0a.bones.lengthc++) b.push(a.bones[c]);
                else 
d(ab);
                return 
b
            
}
        },
        
= function(ab) {
            
b.push(a);
            for (var 
0a.children.lengthc++) d(a.children[c], b)
        };
    
c.LINEAR 0;
    
c.CATMULLROM =
        
1;
    
c.CATMULLROM_FORWARD 2;
    return 
c
}();
THREE.Animation = function(abc) {
    
this.root a;
    
this.data THREE.AnimationHandler.get(b);
    
this.hierarchy THREE.AnimationHandler.parse(a);
    
this.currentTime 0;
    
this.timeScale 1;
    
this.isPlaying false;
    
this.loop this.isPaused true;
    
this.interpolationType !== void 0 THREE.AnimationHandler.LINEAR;
    
this.points = [];
    
this.target = new THREE.Vector3
};
THREE.Animation.prototype.play = function(ab) {
    if (
this.isPlaying === false) {
        
this.isPlaying true;
        
this.loop !== void 0 true;
        
this.currentTime !== void 0 0;
        var 
cthis.hierarchy.length,
            
e;
        for (
0dc++) {
            
this.hierarchy[c];
            if (
this.interpolationType !== THREE.AnimationHandler.CATMULLROM_FORWARDe.useQuaternion true;
            
e.matrixAutoUpdate true;
            if (
e.animationCache === void 0) {
                
e.animationCache = {};
                
e.animationCache.prevKey = {
                    
pos0,
                    
rot0,
                    
scl0
                
};
                
e.animationCache.nextKey = {
                    
pos0,
                    
rot0,
                    
scl0
                
};
                
e.animationCache.originalMatrix =
                    
instanceof THREE.Bone e.skinMatrix e.matrix
            
}
            var 
e.animationCache.prevKey;
            
e.animationCache.nextKey;
            
f.pos this.data.hierarchy[c].keys[0];
            
f.rot this.data.hierarchy[c].keys[0];
            
f.scl this.data.hierarchy[c].keys[0];
            
e.pos this.getNextKeyWith("pos"c1);
            
e.rot this.getNextKeyWith("rot"c1);
            
e.scl this.getNextKeyWith("scl"c1)
        }
        
this.update(0)
    }
    
this.isPaused false;
    
THREE.AnimationHandler.addToUpdate(this)
};
THREE.Animation.prototype.pause = function() {
    
this.isPaused === true THREE.AnimationHandler.addToUpdate(this) : THREE.AnimationHandler.removeFromUpdate(this);
    
this.isPaused = !this.isPaused
};
THREE.Animation.prototype.stop = function() {
    
this.isPaused this.isPlaying false;
    
THREE.AnimationHandler.removeFromUpdate(this)
};
THREE.Animation.prototype.update = function(a) {
    if (
this.isPlaying !== false) {
        var 
= ["pos""rot""scl"],
            
cdefghijl;
        
this.currentTime this.currentTime this.timeScale;
        
this.currentTime this.currentTime this.data.length;
        
parseInt(Math.min(this.data.fpsthis.data.length this.data.fps), 10);
        for (var 
0this.hierarchy.lengthnm++) {
            
this.hierarchy[m];
            
a.animationCache;
            for (var 
03p++) {
                
b[p];
                
i.prevKey[c];
                
i.nextKey[c];
                if (
h.time <= l) {
                    if (
l)
                        if (
this.loop) {
                            
this.data.hierarchy[m].keys[0];
                            for (
this.getNextKeyWith(cm1); h.time j;) {
                                
h;
                                
this.getNextKeyWith(cmh.index 1)
                            }
                        } else {
                            
this.stop();
                            return
                        } else {
                        do {
                            
h;
                            
this.getNextKeyWith(cmh.index 1)
                        } while (
h.time j)
                    }
                    
i.prevKey[c] = g;
                    
i.nextKey[c] = h
                
}
                
a.matrixAutoUpdate true;
                
a.matrixWorldNeedsUpdate true;
                
= (g.time) / (h.time g.time);
                
g[c];
                
h[c];
                if (
|| 1) {
                    
console.log("THREE.Animation.update: Warning! Scale out of bounds:" " on bone " m);
                    
1
                
}
                if (
=== "pos") {
                    
a.position;
                    if (
this.interpolationType === THREE.AnimationHandler.LINEAR) {
                        
c.e[0] +
                            (
f[0] - e[0]) * d;
                        
c.e[1] + (f[1] - e[1]) * d;
                        
c.e[2] + (f[2] - e[2]) * d
                    
} else if (this.interpolationType === THREE.AnimationHandler.CATMULLROM || this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD) {
                        
this.points[0] = this.getPrevKeyWith("pos"mg.index 1).pos;
                        
this.points[1] = e;
                        
this.points[2] = f;
                        
this.points[3] = this.getNextKeyWith("pos"mh.index 1).pos;
                        
0.33 0.33;
                        
this.interpolateCatmullRom(this.pointsd);
                        
c.e[0];
                        
c.e[1];
                        
c.e[2];
                        if (
this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD) {
                            
=
                                
this.interpolateCatmullRom(this.points1.01);
                            
this.target.set(d[0], d[1], d[2]);
                            
this.target.subSelf(c);
                            
this.target.0;
                            
this.target.normalize();
                            
Math.atan2(this.target.xthis.target.z);
                            
a.rotation.set(0d0)
                        }
                    }
                } else if (
=== "rot"THREE.Quaternion.slerp(efa.quaterniond);
                else if (
=== "scl") {
                    
a.scale;
                    
c.e[0] + (f[0] - e[0]) * d;
                    
c.e[1] + (f[1] - e[1]) * d;
                    
c.e[2] + (f[2] - e[2]) * d
                
}
            }
        }
    }
};
THREE.Animation.prototype.interpolateCatmullRom = function(ab) {
    var 
= [],
        
= [],
        
efghij;
    
= (a.length 1) * b;
    
Math.floor(e);
    
f;
    
c[0] = === 1;
    
c[1] = f;
    
c[2] = a.length 1;
    
c[3] = a.length 2;
    
a[c[0]];
    
a[c[1]];
    
a[c[2]];
    
a[c[3]];
    
e;
    
c;
    
d[0] = this.interpolate(f[0], h[0], i[0], j[0], ecg);
    
d[1] = this.interpolate(f[1], h[1], i[1], j[1], ecg);
    
d[2] = this.interpolate(f[2], h[2], i[2], j[2], ecg);
    return 
d
};
THREE.Animation.prototype.interpolate = function(abcdefg) {
    
= (a) * 0.5;
    
= (b) * 0.5;
    return (
* (c) + d) * + (-* (c) - d) * b
};
THREE.Animation.prototype.getNextKeyWith = function(abc) {
    for (var 
this.data.hierarchy[b].keysthis.interpolationType === THREE.AnimationHandler.CATMULLROM || this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD d.length d.length d.lengthd.lengthc++)
        if (
d[c][a] !== void 0) return d[c];
    return 
this.data.hierarchy[b].keys[0]
};
THREE.Animation.prototype.getPrevKeyWith = function(abc) {
    for (var 
this.data.hierarchy[b].keysthis.interpolationType === THREE.AnimationHandler.CATMULLROM || this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD >= d.length>= 0c--)
        if (
d[c][a] !== void 0) return d[c];
    return 
this.data.hierarchy[b].keys[d.length 1]
};
THREE.KeyFrameAnimation = function(abc) {
    
this.root a;
    
this.data THREE.AnimationHandler.get(b);
    
this.hierarchy THREE.AnimationHandler.parse(a);
    
this.currentTime 0;
    
this.timeScale 0.0010;
    
this.isPlaying false;
    
this.loop this.isPaused true;
    
this.JITCompile !== void 0 true;
    
0;
    for (
this.hierarchy.lengthba++) {
        var 
this.data.hierarchy[a].sids,
            
this.hierarchy[a];
        if (
this.data.hierarchy[a].keys.length && c) {
            for (var 
0c.lengthe++) {
                var 
c[e],
                    
this.getNextKeyWith(fa0);
                
&& g.apply(f)
            }
            
d.matrixAutoUpdate =
                
false;
            
this.data.hierarchy[a].node.updateMatrix();
            
d.matrixWorldNeedsUpdate true
        
}
    }
};
THREE.KeyFrameAnimation.prototype.play = function(ab) {
    if (!
this.isPlaying) {
        
this.isPlaying true;
        
this.loop !== void 0 true;
        
this.currentTime !== void 0 0;
        
this.startTimeMs b;
        
this.startTime 1E7;
        
this.endTime = -this.startTime;
        var 
cthis.hierarchy.length,
            
ef;
        for (
0dc++) {
            
this.hierarchy[c];
            
this.data.hierarchy[c];
            
e.useQuaternion true;
            if (
f.animationCache === void 0) {
                
f.animationCache = {};
                
f.animationCache.prevKey null;
                
f.animationCache.nextKey null;
                
f.animationCache.originalMatrix instanceof THREE.Bone ?
                    
e.skinMatrix e.matrix
            
}
            
this.data.hierarchy[c].keys;
            if (
e.length) {
                
f.animationCache.prevKey e[0];
                
f.animationCache.nextKey e[1];
                
this.startTime Math.min(e[0].timethis.startTime);
                
this.endTime Math.max(e[e.length 1].timethis.endTime)
            }
        }
        
this.update(0)
    }
    
this.isPaused false;
    
THREE.AnimationHandler.addToUpdate(this)
};
THREE.KeyFrameAnimation.prototype.pause = function() {
    
this.isPaused THREE.AnimationHandler.addToUpdate(this) : THREE.AnimationHandler.removeFromUpdate(this);
    
this.isPaused = !this.isPaused
};
THREE.KeyFrameAnimation.prototype.stop = function() {
    
this.isPaused this.isPlaying false;
    
THREE.AnimationHandler.removeFromUpdate(this);
    for (var 
0this.data.hierarchy.lengtha++) {
        var 
this.hierarchy[a],
            
this.data.hierarchy[a];
        if (
c.animationCache !== void 0) {
            var 
c.animationCache.originalMatrix;
            if (
instanceof THREE.Bone) {
                
d.copy(b.skinMatrix);
                
b.skinMatrix d
            
} else {
                
d.copy(b.matrix);
                
b.matrix d
            
}
            
delete c.animationCache
        
}
    }
};
THREE.KeyFrameAnimation.prototype.update = function(a) {
    if (
this.isPlaying) {
        var 
bcdethis.data.JIT.hierarchy,
            
ghi;
        
this.currentTime this.currentTime this.timeScale;
        
this.currentTime this.currentTime this.data.length;
        if (
this.startTimeMsthis.currentTime this.startTimeMs g;
        
parseInt(Math.min(this.data.fpsthis.data.length this.data.fps), 10);
        if ((
h) && !this.loop) {
            for (var 
0this.hierarchy.lengthja++) {
                var 
this.data.hierarchy[a].keys,
                    
this.data.hierarchy[a].sids;
                
l.length 1;
                
=
                    
this.hierarchy[a];
                if (
l.length) {
                    for (
0f.lengthl++) {
                        
f[l];
                        (
this.getPrevKeyWith(gad)) && h.apply(g)
                    }
                    
this.data.hierarchy[a].node.updateMatrix();
                    
e.matrixWorldNeedsUpdate true
                
}
            }
            
this.stop()
        } else if (!(
this.startTime)) {
            
0;
            for (
this.hierarchy.lengthja++) {
                
this.hierarchy[a];
                
this.data.hierarchy[a];
                var 
b.keys,
                    
b.animationCache;
                if (
this.JITCompile && f[a][e] !== void 0)
                    if (
instanceof THREE.Bone) {
                        
d.skinMatrix f[a][e];
                        
d.matrixWorldNeedsUpdate false
                    
} else {
                        
d.matrix f[a][e];
                        
d.matrixWorldNeedsUpdate =
                            
true
                    
} else if (l.length) {
                    if (
this.JITCompile && minstanceof THREE.Bone d.skinMatrix m.originalMatrix d.matrix m.originalMatrix;
                    
m.prevKey;
                    
m.nextKey;
                    if (
&& c) {
                        if (
c.time <= h) {
                            if (
&& this.loop) {
                                
l[0];
                                for (
l[1]; c.time g;) {
                                    
c;
                                    
l[b.index 1]
                                }
                            } else if (!
i)
                                for (var 
l.length 1c.time && c.index !== n;) {
                                    
c;
                                    
l[b.index 1]
                                }
                            
m.prevKey b;
                            
m.nextKey c
                        
}
                        
c.time >= b.interpolate(cg) : b.interpolate(cc.time)
                    }
                    
this.data.hierarchy[a].node.updateMatrix();
                    
d.matrixWorldNeedsUpdate true
                
}
            }
            if (
this.JITCompile && f[0][e] === void 0) {
                
this.hierarchy[0].updateMatrixWorld(true);
                for (
0this.hierarchy.lengtha++) f[a][e] = this.hierarchy[a] instanceof THREE.Bone this.hierarchy[a].skinMatrix.clone() : this.hierarchy[a].matrix.clone()
            }
        }
    }
};
THREE.KeyFrameAnimation.prototype.getNextKeyWith = function(abc) {
    
this.data.hierarchy[b].keys;
    for (
b.lengthb.lengthc++)
        if (
b[c].hasTarget(a)) return b[c];
    return 
b[0]
};
THREE.KeyFrameAnimation.prototype.getPrevKeyWith = function(abc) {
    
this.data.hierarchy[b].keys;
    for (
>= b.length>= 0c--)
        if (
b[c].hasTarget(a)) return b[c];
    return 
b[b.length 1]
};
THREE.CubeCamera = function(abc) {
    
THREE.Object3D.call(this);
    var 
= new THREE.PerspectiveCamera(901ab);
    
d.up.set(0, -10);
    
d.lookAt(new THREE.Vector3(100));
    
this.add(d);
    var 
= new THREE.PerspectiveCamera(901ab);
    
e.up.set(0, -10);
    
e.lookAt(new THREE.Vector3(-100));
    
this.add(e);
    var 
= new THREE.PerspectiveCamera(901ab);
    
f.up.set(001);
    
f.lookAt(new THREE.Vector3(010));
    
this.add(f);
    var 
= new THREE.PerspectiveCamera(901ab);
    
g.up.set(00, -1);
    
g.lookAt(new THREE.Vector3(0, -10));
    
this.add(g);
    var 
= new THREE.PerspectiveCamera(90,
        
1ab);
    
h.up.set(0, -10);
    
h.lookAt(new THREE.Vector3(001));
    
this.add(h);
    var 
= new THREE.PerspectiveCamera(901ab);
    
i.up.set(0, -10);
    
i.lookAt(new THREE.Vector3(00, -1));
    
this.add(i);
    
this.renderTarget = new THREE.WebGLRenderTargetCube(cc, {
        
formatTHREE.RGBFormat,
        
magFilterTHREE.LinearFilter,
        
minFilterTHREE.LinearFilter
    
});
    
this.updateCubeMap = function(ab) {
        var 
this.renderTarget,
            
c.generateMipmaps;
        
c.generateMipmaps false;
        
c.activeCubeFace 0;
        
a.render(bdc);
        
c.activeCubeFace 1;
        
a.render(bec);
        
c.activeCubeFace =
            
2;
        
a.render(bfc);
        
c.activeCubeFace 3;
        
a.render(bgc);
        
c.activeCubeFace 4;
        
a.render(bhc);
        
c.generateMipmaps n;
        
c.activeCubeFace 5;
        
a.render(bic)
    }
};
THREE.CubeCamera.prototype Object.create(THREE.Object3D.prototype);
THREE.CombinedCamera = function(abcdefg) {
    
THREE.Camera.call(this);
    
this.fov c;
    
this.left = -2;
    
this.right 2;
    
this.top 2;
    
this.bottom = -2;
    
this.cameraO = new THREE.OrthographicCamera(/ -222/ -2fg);
    
this.cameraP = new THREE.PerspectiveCamera(cbde);
    
this.zoom 1;
    
this.toPerspective()
};
THREE.CombinedCamera.prototype Object.create(THREE.Camera.prototype);
THREE.CombinedCamera.prototype.toPerspective = function() {
    
this.near this.cameraP.near;
    
this.far this.cameraP.far;
    
this.cameraP.fov this.fov this.zoom;
    
this.cameraP.updateProjectionMatrix();
    
this.projectionMatrix this.cameraP.projectionMatrix;
    
this.inPerspectiveMode true;
    
this.inOrthographicMode false
};
THREE.CombinedCamera.prototype.toOrthographic = function() {
    var 
this.cameraP.aspect,
        
= (this.cameraP.near this.cameraP.far) / 2,
        
Math.tan(this.fov 2) * b,
        
2,
        
this.zoom,
        
this.zoom;
    
this.cameraO.left = -a;
    
this.cameraO.right a;
    
this.cameraO.top b;
    
this.cameraO.bottom = -b;
    
this.cameraO.updateProjectionMatrix();
    
this.near this.cameraO.near;
    
this.far this.cameraO.far;
    
this.projectionMatrix this.cameraO.projectionMatrix;
    
this.inPerspectiveMode false;
    
this.inOrthographicMode true
};
THREE.CombinedCamera.prototype.setSize = function(ab) {
    
this.cameraP.aspect b;
    
this.left = -2;
    
this.right 2;
    
this.top 2;
    
this.bottom = -2
};
THREE.CombinedCamera.prototype.setFov = function(a) {
    
this.fov a;
    
this.inPerspectiveMode this.toPerspective() : this.toOrthographic()
};
THREE.CombinedCamera.prototype.updateProjectionMatrix = function() {
    if (
this.inPerspectiveModethis.toPerspective();
    else {
        
this.toPerspective();
        
this.toOrthographic()
    }
};
THREE.CombinedCamera.prototype.setLens = function(ab) {
    var 
Math.atan((!== void 0 24) / (2)) * (180 Math.PI);
    
this.setFov(c);
    return 
c
};
THREE.CombinedCamera.prototype.setZoom = function(a) {
    
this.zoom a;
    
this.inPerspectiveMode this.toPerspective() : this.toOrthographic()
};
THREE.CombinedCamera.prototype.toFrontView = function() {
    
this.rotation.0;
    
this.rotation.0;
    
this.rotation.0;
    
this.rotationAutoUpdate false
};
THREE.CombinedCamera.prototype.toBackView = function() {
    
this.rotation.0;
    
this.rotation.Math.PI;
    
this.rotation.0;
    
this.rotationAutoUpdate false
};
THREE.CombinedCamera.prototype.toLeftView = function() {
    
this.rotation.0;
    
this.rotation.= -Math.PI 2;
    
this.rotation.0;
    
this.rotationAutoUpdate false
};
THREE.CombinedCamera.prototype.toRightView = function() {
    
this.rotation.0;
    
this.rotation.Math.PI 2;
    
this.rotation.0;
    
this.rotationAutoUpdate false
};
THREE.CombinedCamera.prototype.toTopView = function() {
    
this.rotation.= -Math.PI 2;
    
this.rotation.0;
    
this.rotation.0;
    
this.rotationAutoUpdate false
};
THREE.CombinedCamera.prototype.toBottomView = function() {
    
this.rotation.Math.PI 2;
    
this.rotation.0;
    
this.rotation.0;
    
this.rotationAutoUpdate false
};
THREE.FirstPersonControls = function(ab) {
    function 
c(ab) {
        return function() {
            
b.apply(aarguments)
        }
    }
    
this.object a;
    
this.target = new THREE.Vector3(000);
    
this.domElement !== void 0 document;
    
this.movementSpeed 1;
    
this.lookSpeed 0.0050;
    
this.lookVertical true;
    
this.autoForward false;
    
this.activeLook true;
    
this.heightSpeed false;
    
this.heightCoef 1;
    
this.heightMin 0;
    
this.heightMax 1;
    
this.constrainVertical false;
    
this.verticalMin 0;
    
this.verticalMax Math.PI;
    
this.theta this.phi this.lon this.lat this.mouseY this.mouseX =
        
this.autoSpeedFactor 0;
    
this.mouseDragOn this.freeze this.moveRight this.moveLeft this.moveBackward this.moveForward false;
    
this.viewHalfY this.viewHalfX 0;
    
this.domElement !== document && this.domElement.setAttribute("tabindex", -1);
    
this.handleResize = function() {
        if (
this.domElement === document) {
            
this.viewHalfX window.innerWidth 2;
            
this.viewHalfY window.innerHeight 2
        
} else {
            
this.viewHalfX this.domElement.offsetWidth 2;
            
this.viewHalfY this.domElement.offsetHeight 2
        
}
    };
    
this.onMouseDown = function(a) {
        
this.domElement !==
            
document && this.domElement.focus();
        
a.preventDefault();
        
a.stopPropagation();
        if (
this.activeLook) switch (a.button) {
            case 
0:
                
this.moveForward true;
                break;
            case 
2:
                
this.moveBackward true
        
}
        
this.mouseDragOn true
    
};
    
this.onMouseUp = function(a) {
        
a.preventDefault();
        
a.stopPropagation();
        if (
this.activeLook) switch (a.button) {
            case 
0:
                
this.moveForward false;
                break;
            case 
2:
                
this.moveBackward false
        
}
        
this.mouseDragOn false
    
};
    
this.onMouseMove = function(a) {
        if (
this.domElement === document) {
            
this.mouseX a.pageX this.viewHalfX;
            
this.mouseY a.pageY -
                
this.viewHalfY
        
} else {
            
this.mouseX a.pageX this.domElement.offsetLeft this.viewHalfX;
            
this.mouseY a.pageY this.domElement.offsetTop this.viewHalfY
        
}
    };
    
this.onKeyDown = function(a) {
        switch (
a.keyCode) {
            case 
38:
            case 
87:
                
this.moveForward true;
                break;
            case 
37:
            case 
65:
                
this.moveLeft true;
                break;
            case 
40:
            case 
83:
                
this.moveBackward true;
                break;
            case 
39:
            case 
68:
                
this.moveRight true;
                break;
            case 
82:
                
this.moveUp true;
                break;
            case 
70:
                
this.moveDown true;
                break;
            case 
81:
                
this.freeze = !this.freeze
        
}
    };
    
this.onKeyUp = function(a) {
        switch (
a.keyCode) {
            case 
38:
            case 
87:
                
this.moveForward =
                    
false;
                break;
            case 
37:
            case 
65:
                
this.moveLeft false;
                break;
            case 
40:
            case 
83:
                
this.moveBackward false;
                break;
            case 
39:
            case 
68:
                
this.moveRight false;
                break;
            case 
82:
                
this.moveUp false;
                break;
            case 
70:
                
this.moveDown false
        
}
    };
    
this.update = function(a) {
        var 
0;
        if (!
this.freeze) {
            if (
this.heightSpeed) {
                
THREE.Math.clamp(this.object.position.ythis.heightMinthis.heightMax) - this.heightMin;
                
this.autoSpeedFactor this.heightCoef
            
} else this.autoSpeedFactor 0;
            
this.movementSpeed;
            (
this.moveForward || this.autoForward && !this.moveBackward) &&
            
this.object.translateZ(-(this.autoSpeedFactor));
            
this.moveBackward && this.object.translateZ(b);
            
this.moveLeft && this.object.translateX(-b);
            
this.moveRight && this.object.translateX(b);
            
this.moveUp && this.object.translateY(b);
            
this.moveDown && this.object.translateY(-b);
            
this.lookSpeed;
            
this.activeLook || (0);
            
this.lon this.lon this.mouseX a;
            if (
this.lookVerticalthis.lat this.lat this.mouseY a;
            
this.lat Math.max(-85Math.min(85this.lat));
            
this.phi = (90 this.lat) * Math.PI 180;
            
this.theta this.lon Math.PI 180;
            var 
=
                
this.target,
                
this.object.position;
            
b.c.100 Math.sin(this.phi) * Math.cos(this.theta);
            
b.c.100 Math.cos(this.phi);
            
b.c.100 Math.sin(this.phi) * Math.sin(this.theta);
            
1;
            
this.constrainVertical && (Math.PI / (this.verticalMax this.verticalMin));
            
this.lon this.lon this.mouseX a;
            if (
this.lookVerticalthis.lat this.lat this.mouseY b;
            
this.lat Math.max(-85Math.min(85this.lat));
            
this.phi = (90 this.lat) * Math.PI 180;
            
this.theta this.lon Math.PI 180;
            if (
this.constrainVerticalthis.phi THREE.Math.mapLinear(this.phi,
                
0Math.PIthis.verticalMinthis.verticalMax);
            
this.target;
            
this.object.position;
            
b.c.100 Math.sin(this.phi) * Math.cos(this.theta);
            
b.c.100 Math.cos(this.phi);
            
b.c.100 Math.sin(this.phi) * Math.sin(this.theta);
            
this.object.lookAt(b)
        }
    };
    
this.domElement.addEventListener("contextmenu", function(a) {
        
a.preventDefault()
    }, 
false);
    
this.domElement.addEventListener("mousemove"c(thisthis.onMouseMove), false);
    
this.domElement.addEventListener("mousedown"c(thisthis.onMouseDown), false);
    
this.domElement.addEventListener("mouseup",
        
c(thisthis.onMouseUp), false);
    
this.domElement.addEventListener("keydown"c(thisthis.onKeyDown), false);
    
this.domElement.addEventListener("keyup"c(thisthis.onKeyUp), false);
    
this.handleResize()
};
THREE.PathControls = function(ab) {
    function 
c(a) {
        return (
2) < 0.5 : -0.5 * (--* (2) - 1)
    }

    function 
d(ab) {
        return function() {
            
b.apply(aarguments)
        }
    }

    function 
e(abcd) {
        var 
= {
                
namec,
                
fps0.6,
                
lengthd,
                
hierarchy: []
            },
            
fb.getControlPointsArray(),
            
b.getLength(),
            
g.length,
            
0;
        
1;
        
= {
            
parent: -1,
            
keys: []
        };
        
b.keys[0] = {
            
time0,
            
posg[0],
            
rot: [0001],
            
scl: [111]
        };
        
b.keys[f] = {
            
timed,
            
posg[f],
            
rot: [0001],
            
scl: [111]
        };
        for (
11f++) {
            
h.chunks[f] / h.total;
            
b.keys[f] = {
                
times,
                
posg[f]
            }
        }
        
e.hierarchy[0] = b;
        
THREE.AnimationHandler.add(e);
        return new 
THREE.Animation(acTHREE.AnimationHandler.CATMULLROM_FORWARDfalse)
    }

    function 
f(ab) {
        var 
cd= new THREE.Geometry;
        for (
0a.points.length bc++) {
            
/ (a.points.length b);
            
a.getPoint(d);
            
e.vertices[c] = new THREE.Vector3(d.xd.yd.z)
        }
        return 
e
    
}
    
this.object a;
    
this.domElement !== void 0 document;
    
this.id "PathControls" THREE.PathControlsIdCounter++;
    
this.duration 1E4;
    
this.waypoints = [];
    
this.useConstantSpeed true;
    
this.resamplingCoef 50;
    
this.debugPath = new THREE.Object3D;
    
this.debugDummy = new THREE.Object3D;
    
this.animationParent = new THREE.Object3D;
    
this.lookSpeed 0.0050;
    
this.lookHorizontal this.lookVertical true;
    
this.verticalAngleMap = {
        
srcRange: [0Math.PI],
        
dstRange: [0Math.PI]
    };
    
this.horizontalAngleMap = {
        
srcRange: [0Math.PI],
        
dstRange: [0Math.PI]
    };
    
this.target = new THREE.Object3D;
    
this.theta this.phi this.lon this.lat this.mouseY this.mouseX 0;
    var 
Math.PI 2,
        
Math.PI 180;
    
this.viewHalfY this.viewHalfX 0;
    
this.domElement !== document && this.domElement.setAttribute("tabindex", -1);
    
this.handleResize = function() {
        if (
this.domElement ===
            
document) {
            
this.viewHalfX window.innerWidth 2;
            
this.viewHalfY window.innerHeight 2
        
} else {
            
this.viewHalfX this.domElement.offsetWidth 2;
            
this.viewHalfY this.domElement.offsetHeight 2
        
}
    };
    
this.update = function(a) {
        var 
b;
        if (
this.lookHorizontalthis.lon this.lon this.mouseX this.lookSpeed a;
        if (
this.lookVerticalthis.lat this.lat this.mouseY this.lookSpeed a;
        
this.lon Math.max(0Math.min(360this.lon));
        
this.lat Math.max(-85Math.min(85this.lat));
        
this.phi = (90 this.lat) * h;
        
this.theta this.lon h;
        
this.phi g;
        
this.phi =
            
>= g;
        
this.verticalAngleMap.srcRange;
        
this.verticalAngleMap.dstRange;
        
THREE.Math.mapLinear(this.phib[0], b[1], a[0], a[1]);
        var 
a[1] - a[0];
        
this.phi c((a[0]) / d) * a[0];
        
this.horizontalAngleMap.srcRange;
        
this.horizontalAngleMap.dstRange;
        
THREE.Math.mapLinear(this.thetab[0], b[1], a[0], a[1]);
        
a[1] - a[0];
        
this.theta c((a[0]) / d) * a[0];
        
this.target.position;
        
a.100 Math.sin(this.phi) * Math.cos(this.theta);
        
a.100 Math.cos(this.phi);
        
a.100 Math.sin(this.phi) * Math.sin(this.theta);
        
this.object.lookAt(this.target.position)
    };
    
this.onMouseMove = function(a) {
        if (
this.domElement === document) {
            
this.mouseX a.pageX this.viewHalfX;
            
this.mouseY a.pageY this.viewHalfY
        
} else {
            
this.mouseX a.pageX this.domElement.offsetLeft this.viewHalfX;
            
this.mouseY a.pageY this.domElement.offsetTop this.viewHalfY
        
}
    };
    
this.init = function() {
        
this.spline = new THREE.Spline;
        
this.spline.initFromArray(this.waypoints);
        
this.useConstantSpeed && this.spline.reparametrizeByArcLength(this.resamplingCoef);
        if (
this.createDebugDummy) {
            var 
= new THREE.MeshLambertMaterial({
                    
color30719
                
}),
                
= new THREE.MeshLambertMaterial({
                    
color65280
                
}),
                
= new THREE.CubeGeometry(101020),
                
= new THREE.CubeGeometry(2210);
            
this.animationParent = new THREE.Mesh(ca);
            
= new THREE.Mesh(gb);
            
a.position.set(0100);
            
this.animation e(this.animationParentthis.splinethis.idthis.duration);
            
this.animationParent.add(this.object);
            
this.animationParent.add(this.target);
            
this.animationParent.add(a)
        } else {
            
this.animation e(this.animationParentthis.splinethis.idthis.duration);
            
this.animationParent.add(this.target);
            
this.animationParent.add(this.object)
        }
        if (
this.createDebugPath) {
            var 
=
                
this.debugPath,
                
this.spline,
                
f(b10),
                
f(b10),
                
= new THREE.LineBasicMaterial({
                    
color16711680,
                    
linewidth3
                
}),
                
= new THREE.Line(gh),
                
= new THREE.ParticleSystem(c, new THREE.ParticleBasicMaterial({
                    
color16755200,
                    
size3
                
}));
            
g.scale.set(111);
            
a.add(g);
            
c.scale.set(111);
            
a.add(c);
            for (var 
= new THREE.SphereGeometry(1168), = new THREE.MeshBasicMaterial({
                    
color65280
                
}), 0b.points.lengthp++) {
                
= new THREE.Mesh(gh);
                
c.position.copy(b.points[p]);
                
a.add(c)
            }
        }
        
this.domElement.addEventListener("mousemove"d(this,
            
this.onMouseMove), false)
    };
    
this.handleResize()
};
THREE.PathControlsIdCounter 0;
THREE.FlyControls = function(ab) {
    function 
c(ab) {
        return function() {
            
b.apply(aarguments)
        }
    }
    
this.object a;
    
this.domElement !== void 0 document;
    
&& this.domElement.setAttribute("tabindex", -1);
    
this.movementSpeed 1;
    
this.rollSpeed 0.0050;
    
this.autoForward this.dragToLook false;
    
this.object.useQuaternion true;
    
this.tmpQuaternion = new THREE.Quaternion;
    
this.mouseStatus 0;
    
this.moveState = {
        
up0,
        
down0,
        
left0,
        
right0,
        
forward0,
        
back0,
        
pitchUp0,
        
pitchDown0,
        
yawLeft0,
        
yawRight0,
        
rollLeft0,
        
rollRight0
    
};
    
this.moveVector =
        new 
THREE.Vector3(000);
    
this.rotationVector = new THREE.Vector3(000);
    
this.handleEvent = function(a) {
        if (
typeof this[a.type] == "function"this[a.type](a)
    };
    
this.keydown = function(a) {
        if (!
a.altKey) {
            switch (
a.keyCode) {
                case 
16:
                    
this.movementSpeedMultiplier 0.1;
                    break;
                case 
87:
                    
this.moveState.forward 1;
                    break;
                case 
83:
                    
this.moveState.back 1;
                    break;
                case 
65:
                    
this.moveState.left 1;
                    break;
                case 
68:
                    
this.moveState.right 1;
                    break;
                case 
82:
                    
this.moveState.up 1;
                    break;
                case 
70:
                    
this.moveState.down 1;
                    break;
                case 
38:
                    
this.moveState.pitchUp =
                        
1;
                    break;
                case 
40:
                    
this.moveState.pitchDown 1;
                    break;
                case 
37:
                    
this.moveState.yawLeft 1;
                    break;
                case 
39:
                    
this.moveState.yawRight 1;
                    break;
                case 
81:
                    
this.moveState.rollLeft 1;
                    break;
                case 
69:
                    
this.moveState.rollRight 1
            
}
            
this.updateMovementVector();
            
this.updateRotationVector()
        }
    };
    
this.keyup = function(a) {
        switch (
a.keyCode) {
            case 
16:
                
this.movementSpeedMultiplier 1;
                break;
            case 
87:
                
this.moveState.forward 0;
                break;
            case 
83:
                
this.moveState.back 0;
                break;
            case 
65:
                
this.moveState.left 0;
                break;
            case 
68:
                
this.moveState.right 0;
                break;
            case 
82:
                
this.moveState.up =
                    
0;
                break;
            case 
70:
                
this.moveState.down 0;
                break;
            case 
38:
                
this.moveState.pitchUp 0;
                break;
            case 
40:
                
this.moveState.pitchDown 0;
                break;
            case 
37:
                
this.moveState.yawLeft 0;
                break;
            case 
39:
                
this.moveState.yawRight 0;
                break;
            case 
81:
                
this.moveState.rollLeft 0;
                break;
            case 
69:
                
this.moveState.rollRight 0
        
}
        
this.updateMovementVector();
        
this.updateRotationVector()
    };
    
this.mousedown = function(a) {
        
this.domElement !== document && this.domElement.focus();
        
a.preventDefault();
        
a.stopPropagation();
        if (
this.dragToLookthis.mouseStatus++;
        else switch (
a.button) {
            case 
0:
                
this.object.moveForward =
                    
true;
                break;
            case 
2:
                
this.object.moveBackward true
        
}
    };
    
this.mousemove = function(a) {
        if (!
this.dragToLook || this.mouseStatus 0) {
            var 
this.getContainerDimensions(),
                
b.size[0] / 2,
                
b.size[1] / 2;
            
this.moveState.yawLeft = -(a.pageX b.offset[0] - c) / c;
            
this.moveState.pitchDown = (a.pageY b.offset[1] - g) / g;
            
this.updateRotationVector()
        }
    };
    
this.mouseup = function(a) {
        
a.preventDefault();
        
a.stopPropagation();
        if (
this.dragToLook) {
            
this.mouseStatus--;
            
this.moveState.yawLeft this.moveState.pitchDown 0
        
} else switch (a.button) {
            case 
0:
                
this.moveForward =
                    
false;
                break;
            case 
2:
                
this.moveBackward false
        
}
        
this.updateRotationVector()
    };
    
this.update = function(a) {
        var 
this.movementSpeed,
            
this.rollSpeed;
        
this.object.translateX(this.moveVector.b);
        
this.object.translateY(this.moveVector.b);
        
this.object.translateZ(this.moveVector.b);
        
this.tmpQuaternion.set(this.rotationVector.athis.rotationVector.athis.rotationVector.a1).normalize();
        
this.object.quaternion.multiplySelf(this.tmpQuaternion);
        
this.object.matrix.setPosition(this.object.position);
        
this.object.matrix.setRotationFromQuaternion(this.object.quaternion);
        
this.object.matrixWorldNeedsUpdate true
    
};
    
this.updateMovementVector = function() {
        var 
this.moveState.forward || this.autoForward && !this.moveState.back 0;
        
this.moveVector.= -this.moveState.left this.moveState.right;
        
this.moveVector.= -this.moveState.down this.moveState.up;
        
this.moveVector.= -this.moveState.back
    
};
    
this.updateRotationVector = function() {
        
this.rotationVector.= -this.moveState.pitchDown this.moveState.pitchUp;
        
this.rotationVector.= -this.moveState.yawRight this.moveState.yawLeft;
        
this.rotationVector.= -this.moveState.rollRight this.moveState.rollLeft
    
};
    
this.getContainerDimensions = function() {
        return 
this.domElement != document ? {
            
size: [this.domElement.offsetWidththis.domElement.offsetHeight],
            
offset: [this.domElement.offsetLeftthis.domElement.offsetTop]
        } : {
            
size: [window.innerWidthwindow.innerHeight],
            
offset: [00]
        }
    };
    
this.domElement.addEventListener("mousemove"c(thisthis.mousemove), false);
    
this.domElement.addEventListener("mousedown"c(thisthis.mousedown), false);
    
this.domElement.addEventListener("mouseup",
        
c(thisthis.mouseup), false);
    
this.domElement.addEventListener("keydown"c(thisthis.keydown), false);
    
this.domElement.addEventListener("keyup"c(thisthis.keyup), false);
    
this.updateMovementVector();
    
this.updateRotationVector()
};
THREE.RollControls = function(ab) {
    
this.object a;
    
this.domElement !== void 0 document;
    
this.mouseLook true;
    
this.autoForward false;
    
this.rollSpeed this.movementSpeed this.lookSpeed 1;
    
this.constrainVertical = [-0.90.9];
    
this.object.matrixAutoUpdate false;
    
this.forward = new THREE.Vector3(001);
    
this.roll 0;
    var 
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Matrix4,
        
false,
        
1,
        
0,
        
0,
        
0,
        
0,
        
0,
        
0,
        
0;
    
this.handleResize = function() {
        
window.innerWidth 2;
        
window.innerHeight 2
    
};
    
this.update =
        function(
a) {
            if (
this.mouseLook) {
                var 
this.lookSpeed;
                
this.rotateHorizontally(m);
                
this.rotateVertically(n)
            }
            
this.movementSpeed;
            
this.object.translateZ(-* (|| this.autoForward && !(0) ? i));
            
this.object.translateX(j);
            
this.object.translateY(l);
            if (
gthis.roll this.roll this.rollSpeed h;
            if (
this.forward.this.constrainVertical[1]) {
                
this.forward.this.constrainVertical[1];
                
this.forward.normalize()
            } else if (
this.forward.this.constrainVertical[0]) {
                
this.forward.this.constrainVertical[0];
                
this.forward.normalize()
            }
            
e.copy(this.forward);
            
d.set(010);
            
c.cross(de).normalize();
            
d.cross(ec).normalize();
            
this.object.matrix.elements[0] = c.x;
            
this.object.matrix.elements[4] = d.x;
            
this.object.matrix.elements[8] = e.x;
            
this.object.matrix.elements[1] = c.y;
            
this.object.matrix.elements[5] = d.y;
            
this.object.matrix.elements[9] = e.y;
            
this.object.matrix.elements[2] = c.z;
            
this.object.matrix.elements[6] = d.z;
            
this.object.matrix.elements[10] = e.z;
            
f.identity();
            
f.elements[0] = Math.cos(this.roll);
            
f.elements[4] = -Math.sin(this.roll);
            
f.elements[1] = Math.sin(this.roll);
            
f.elements[5] =
                
Math.cos(this.roll);
            
this.object.matrix.multiplySelf(f);
            
this.object.matrixWorldNeedsUpdate true;
            
this.object.matrix.elements[12] = this.object.position.x;
            
this.object.matrix.elements[13] = this.object.position.y;
            
this.object.matrix.elements[14] = this.object.position.z
        
};
    
this.translateX = function(a) {
        
this.object.position.this.object.position.this.object.matrix.elements[0] * a;
        
this.object.position.this.object.position.this.object.matrix.elements[1] * a;
        
this.object.position.this.object.position.this.object.matrix.elements[2] *
            
a
    
};
    
this.translateY = function(a) {
        
this.object.position.this.object.position.this.object.matrix.elements[4] * a;
        
this.object.position.this.object.position.this.object.matrix.elements[5] * a;
        
this.object.position.this.object.position.this.object.matrix.elements[6] * a
    
};
    
this.translateZ = function(a) {
        
this.object.position.this.object.position.this.object.matrix.elements[8] * a;
        
this.object.position.this.object.position.this.object.matrix.elements[9] * a;
        
this.object.position.this.object.position.-
            
this.object.matrix.elements[10] * a
    
};
    
this.rotateHorizontally = function(a) {
        
c.set(this.object.matrix.elements[0], this.object.matrix.elements[1], this.object.matrix.elements[2]);
        
c.multiplyScalar(a);
        
this.forward.subSelf(c);
        
this.forward.normalize()
    };
    
this.rotateVertically = function(a) {
        
d.set(this.object.matrix.elements[4], this.object.matrix.elements[5], this.object.matrix.elements[6]);
        
d.multiplyScalar(a);
        
this.forward.addSelf(d);
        
this.forward.normalize()
    };
    
this.domElement.addEventListener("contextmenu", function(a) {
            
a.preventDefault()
        },
        
false);
    
this.domElement.addEventListener("mousemove", function(a) {
        
= (a.clientX p) / window.innerWidth;
        
= (a.clientY r) / window.innerHeight
    
}, false);
    
this.domElement.addEventListener("mousedown", function(a) {
        
a.preventDefault();
        
a.stopPropagation();
        switch (
a.button) {
            case 
0:
                
1;
                break;
            case 
2:
                
= -1
        
}
    }, 
false);
    
this.domElement.addEventListener("mouseup", function(a) {
        
a.preventDefault();
        
a.stopPropagation();
        switch (
a.button) {
            case 
0:
                
0;
                break;
            case 
2:
                
0
        
}
    }, 
false);
    
this.domElement.addEventListener("keydown", function(a) {
        switch (
a.keyCode) {
            case 
38:
            case 
87:
                
=
                    
1;
                break;
            case 
37:
            case 
65:
                
= -1;
                break;
            case 
40:
            case 
83:
                
= -1;
                break;
            case 
39:
            case 
68:
                
1;
                break;
            case 
81:
                
true;
                
1;
                break;
            case 
69:
                
true;
                
= -1;
                break;
            case 
82:
                
1;
                break;
            case 
70:
                
= -1
        
}
    }, 
false);
    
this.domElement.addEventListener("keyup", function(a) {
        switch (
a.keyCode) {
            case 
38:
            case 
87:
                
0;
                break;
            case 
37:
            case 
65:
                
0;
                break;
            case 
40:
            case 
83:
                
0;
                break;
            case 
39:
            case 
68:
                
0;
                break;
            case 
81:
                
false;
                break;
            case 
69:
                
false;
                break;
            case 
82:
                
0;
                break;
            case 
70:
                
0
        
}
    }, 
false);
    
this.handleResize()
};
THREE.TrackballControls = function(ab) {
    
THREE.EventTarget.call(this);
    var 
this;
    
this.object a;
    
this.domElement !== void 0 document;
    
this.enabled true;
    
this.screen = {
        
width0,
        
height0,
        
offsetLeft0,
        
offsetTop0
    
};
    
this.radius = (this.screen.width this.screen.height) / 4;
    
this.rotateSpeed 1;
    
this.zoomSpeed 1.2;
    
this.panSpeed 0.3;
    
this.staticMoving this.noPan this.noZoom this.noRotate false;
    
this.dynamicDampingFactor 0.2;
    
this.minDistance 0;
    
this.maxDistance Infinity;
    
this.keys = [658368];
    
this.target = new THREE.Vector3;
    var 
=
        new 
THREE.Vector3,
        
false,
        
= -1,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector3,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= {
            
type"change"
        
};
    
this.handleResize = function() {
        
this.screen.width window.innerWidth;
        
this.screen.height window.innerHeight;
        
this.screen.offsetLeft 0;
        
this.screen.offsetTop 0;
        
this.radius = (this.screen.width this.screen.height) / 4
    
};
    
this.handleEvent = function(a) {
        if (
typeof this[a.type] == "function"this[a.type](a)
    };
    
this.getMouseOnScreen = function(a,
        
b) {
        return new 
THREE.Vector2((c.screen.offsetLeft) / c.radius 0.5, (c.screen.offsetTop) / c.radius 0.5)
    };
    
this.getMouseProjectionOnBall = function(ab) {
        var 
= new THREE.Vector3((c.screen.width 0.5 c.screen.offsetLeft) / c.radius, (c.screen.height 0.5 c.screen.offsetTop b) / c.radius0),
            
d.length();
        
d.normalize() : d.Math.sqrt(e);
        
g.copy(c.object.position).subSelf(c.target);
        
c.object.up.clone().setLength(d.y);
        
e.addSelf(c.object.up.clone().crossSelf(g).setLength(d.x));
        
e.addSelf(g.setLength(d.z));
        return 
e
    
};
    
this.rotateCamera = function() {
        var 
Math.acos(h.dot(i) / h.length() / i.length());
        if (
a) {
            var 
= (new THREE.Vector3).cross(hi).normalize(),
                
= new THREE.Quaternion,
                
c.rotateSpeed;
            
d.setFromAxisAngle(b, -a);
            
d.multiplyVector3(g);
            
d.multiplyVector3(c.object.up);
            
d.multiplyVector3(i);
            if (
c.staticMovingi;
            else {
                
d.setFromAxisAngle(b* (c.dynamicDampingFactor 1));
                
d.multiplyVector3(h)
            }
        }
    };
    
this.zoomCamera = function() {
        var 
+ (l.j.y) * c.zoomSpeed;
        if (
!== && 0) {
            
g.multiplyScalar(a);
            
c.staticMoving j.j.+ (l.j.y) *
                
this.dynamicDampingFactor
        
}
    };
    
this.panCamera = function() {
        var 
n.clone().subSelf(m);
        if (
a.lengthSq()) {
            
a.multiplyScalar(g.length() * c.panSpeed);
            var 
g.clone().crossSelf(c.object.up).setLength(a.x);
            
b.addSelf(c.object.up.clone().setLength(a.y));
            
c.object.position.addSelf(b);
            
c.target.addSelf(b);
            
c.staticMoving m.addSelf(a.sub(nm).multiplyScalar(c.dynamicDampingFactor))
        }
    };
    
this.checkDistances = function() {
        if (!
c.noZoom || !c.noPan) {
            
c.object.position.lengthSq() > c.maxDistance c.maxDistance && c.object.position.setLength(c.maxDistance);
            
g.lengthSq() < c.minDistance c.minDistance && c.object.position.add(c.targetg.setLength(c.minDistance))
        }
    };
    
this.update = function() {
        
g.copy(c.object.position).subSelf(c.target);
        
c.noRotate || c.rotateCamera();
        
c.noZoom || c.zoomCamera();
        
c.noPan || c.panCamera();
        
c.object.position.add(c.targetg);
        
c.checkDistances();
        
c.object.lookAt(c.target);
        if (
d.distanceToSquared(c.object.position) > 0) {
            
c.dispatchEvent(p);
            
d.copy(c.object.position)
        }
    };
    
this.domElement.addEventListener("contextmenu", function(a) {
        
a.preventDefault()
    }, 
false);
    
this.domElement.addEventListener("mousemove", function(a) {
        if (
c.enabled) {
            if (
e) {
                
c.getMouseProjectionOnBall(a.clientXa.clientY);
                
c.getMouseOnScreen(a.clientXa.clientY);
                
c.getMouseOnScreen(a.clientXa.clientY);
                
false
            
}
            
!== -&& (=== && !c.noRotate c.getMouseProjectionOnBall(a.clientXa.clientY) : === && !c.noZoom c.getMouseOnScreen(a.clientXa.clientY) : === && !c.noPan && (c.getMouseOnScreen(a.clientXa.clientY)))
        }
    }, 
false);
    
this.domElement.addEventListener("mousedown", function(a) {
        if (
c.enabled) {
            
a.preventDefault();
            
a.stopPropagation();
            if (
=== -1) {
                
a.button;
                
=== && !c.noRotate c.getMouseProjectionOnBall(a.clientXa.clientY) : === && !c.noZoom c.getMouseOnScreen(a.clientXa.clientY) : this.noPan || (c.getMouseOnScreen(a.clientXa.clientY))
            }
        }
    }, 
false);
    
this.domElement.addEventListener("mouseup", function(a) {
        if (
c.enabled) {
            
a.preventDefault();
            
a.stopPropagation();
            
= -1
        
}
    }, 
false);
    
window.addEventListener("keydown", function(a) {
        if (
c.enabled && === -1) {
            
a.keyCode === c.keys[0] && !c.noRotate a.keyCode === c.keys[1] && !c.noZoom ?
                
a.keyCode === c.keys[2] && !c.noPan && (2);
            
!== -&& (true)
        }
    }, 
false);
    
window.addEventListener("keyup", function() {
        
c.enabled && !== -&& (= -1)
    }, 
false);
    
this.handleResize()
};
THREE.OrbitControls = function(ab) {
    var 
cde;

    function 
f() {
        return 
Math.PI 60 60 i.autoRotateSpeed
    
}

    function 
g(a) {
        
a.preventDefault();
        if (
=== c) {
            
m.set(a.clientXa.clientY);
            
n.sub(ml);
            
i.rotateLeft(Math.PI n.i.userRotateSpeed);
            
i.rotateUp(Math.PI n.i.userRotateSpeed);
            
l.copy(m)
        } else if (
=== d) {
            
r.set(a.clientXa.clientY);
            
o.sub(rp);
            
o.i.zoomIn() : i.zoomOut();
            
p.copy(r)
        }
    }

    function 
h() {
        if (
i.userRotate) {
            
document.removeEventListener("mousemove"gfalse);
            
document.removeEventListener("mouseup"hfalse);
            
e
        
}
    }
    
THREE.EventTarget.call(this);
    
this.object a;
    
this.domElement !== void 0 document;
    
this.center = new THREE.Vector3;
    
this.userZoom true;
    
this.userZoomSpeed 1;
    
this.userRotate true;
    
this.userRotateSpeed 1;
    
this.autoRotate false;
    
this.autoRotateSpeed 2;
    var 
this,
        
1800,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
= new THREE.Vector2,
        
0,
        
0,
        
1,
        
= new THREE.Vector3;
    
= -1;
    
0;
    
1;
    var 
e,
        
= {
            
type"change"
        
};
    
this.rotateLeft = function(a) {
        
=== void 0 && (f());
        
a
    
};
    
this.rotateRight = function(a) {
        
=== void 0 && (f());
        
a
    
};
    
this.rotateUp = function(a) {
        
=== void 0 && (f());
        
a
    
};
    
this.rotateDown = function(a) {
        
=== void 0 && (f());
        
a
    
};
    
this.zoomIn = function(a) {
        
=== void 0 && (Math.pow(0.95i.userZoomSpeed));
        
a
    
};
    
this.zoomOut = function(a) {
        
=== void 0 && (Math.pow(0.95i.userZoomSpeed));
        
a
    
};
    
this.update = function() {
        var 
this.object.position,
            
a.clone().subSelf(this.center),
            
Math.atan2(b.xb.z),
            
Math.atan2(Math.sqrt(b.b.b.b.z), b.y);
        
this.autoRotate && this.rotateLeft(f());
        var 
s,
            
q,
            
Math.max(1.0E-6Math.min(Math.PI 1.0E-6d)),
            
b.length();
        
b.Math.sin(d) * Math.sin(c);
        
b.Math.cos(d);
        
b.Math.sin(d) * Math.cos(c);
        
b.multiplyScalar(w);
        
a.copy(this.center).addSelf(b);
        
this.object.lookAt(this.center);
        
0;
        
1;
        if (
t.distanceTo(this.object.position) > 0) {
            
this.dispatchEvent(x);
            
t.copy(this.object.position)
        }
    };
    
this.domElement.addEventListener("contextmenu", function(a) {
        
a.preventDefault()
    }, 
false);
    
this.domElement.addEventListener("mousedown", function(a) {
        if (
i.userRotate) {
            
a.preventDefault();
            if (
a.button === || a.button === 2) {
                
c;
                
l.set(a.clientXa.clientY)
            } else if (
a.button === 1) {
                
d;
                
p.set(a.clientXa.clientY)
            }
            
document.addEventListener("mousemove"gfalse);
            
document.addEventListener("mouseup"hfalse)
        }
    }, 
false);
    
this.domElement.addEventListener("mousewheel", function(a) {
        
i.userZoom && (a.wheelDelta i.zoomOut() : i.zoomIn())
    }, 
false)
};
THREE.CubeGeometry = function(abcdefgh) {
    function 
i(abcghilm) {
        var 
n|| 1,
            
|| 1,
            
2,
            
2,
            
j.vertices.length;
        if (
=== "x" && === "y" || === "y" && === "x""z";
        else if (
=== "x" && === "z" || === "z" && === "x") {
            
"y";
            
|| 1
        
} else if (=== "z" && === "y" || === "y" && === "z") {
            
"x";
            
|| 1
        
}
        var 
1,
            
1,
            
p,
            
o,
            
= new THREE.Vector3;
        
W[n] = : -1;
        for (
0wh++)
            for (
0ti++) {
                var 
ba = new THREE.Vector3;
                
ba[a] = (q) * c;
                
ba[b] = (r) * g;
                
ba[n] = l;
                
j.vertices.push(ba)
            }
        for (
0oh++)
            for (
0pi++) {
                
= new THREE.Face4(+
                    
s* (1) + s* (1) + ss);
                
a.normal.copy(W);
                
a.vertexNormals.push(W.clone(), W.clone(), W.clone(), W.clone());
                
a.materialIndex m;
                
j.faces.push(a);
                
j.faceVertexUvs[0].push([new THREE.UV(po), new THREE.UV(p- (1) / o), new THREE.UV((1) / p- (1) / o), new THREE.UV((1) / po)])
            }
    }
    
THREE.Geometry.call(this);
    var 
this,
        
2,
        
2,
        
2,
        
proqsw;
    if (
!== void 0) {
        if (
instanceof Array) this.materials g;
        else {
            
this.materials = [];
            for (
06p++) this.materials.push(g)
        }
        
0;
        
1;
        
2;
        
3;
        
4;
        
=
            
5
    
} else this.materials = [];
    
this.sides = {
        
pxtrue,
        
nxtrue,
        
pytrue,
        
nytrue,
        
pztrue,
        
nztrue
    
};
    if (
!= void 0)
        for (var 
t in hthis.sides[t] !== void 0 && (this.sides[t] = h[t]);
    
this.sides.px && i("z""y", -1, -1cblp);
    
this.sides.nx && i("z""y"1, -1cb, -lq);
    
this.sides.py && i("x""z"11acmr);
    
this.sides.ny && i("x""z"1, -1ac, -ms);
    
this.sides.pz && i("x""y"1, -1abno);
    
this.sides.nz && i("x""y", -1, -1ab, -nw);
    
this.computeCentroids();
    
this.mergeVertices()
};
THREE.CubeGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.CylinderGeometry = function(abcdef) {
    
THREE.Geometry.call(this);
    var 
!== void 0 20,
        
!== void 0 20,
        
!== void 0 100,
        
2,
        
|| 8,
        
|| 1,
        
hi= [],
        
= [];
    for (
0<= ei++) {
        var 
= [],
            
= [],
            
e,
            
* (a) + a;
        for (
0<= dh++) {
            var 
d,
                
= new THREE.Vector3;
            
q.Math.sin(Math.PI 2);
            
q.= -g;
            
q.Math.cos(Math.PI 2);
            
this.vertices.push(q);
            
m.push(this.vertices.length 1);
            
n.push(new THREE.UV(op))
        }
        
j.push(m);
        
l.push(n)
    }
    
= (a) / c;
    for (
0dh++) {
        if (
!== 0) {
            
this.vertices[j[0][h]].clone();
            
this.vertices[j[0][+
                
1
            
]].clone()
        } else {
            
this.vertices[j[1][h]].clone();
            
this.vertices[j[1][1]].clone()
        }
        
m.setY(Math.sqrt(m.m.m.m.z) * c).normalize();
        
n.setY(Math.sqrt(n.n.n.n.z) * c).normalize();
        for (
0ei++) {
            var 
j[i][h],
                
j[1][h],
                
j[1][1],
                
j[i][1],
                
m.clone(),
                
m.clone(),
                
n.clone(),
                
n.clone(),
                
l[i][h].clone(),
                
l[1][h].clone(),
                
l[1][1].clone(),
                
l[i][1].clone();
            
this.faces.push(new THREE.Face4(proq, [swtv]));
            
this.faceVertexUvs[0].push([xCDz])
        }
    }
    if (!
&& 0) {
        
this.vertices.push(new THREE.Vector3(0,
            
g0));
        for (
0dh++) {
            
j[0][h];
            
j[0][1];
            
this.vertices.length 1;
            
= new THREE.Vector3(010);
            
= new THREE.Vector3(010);
            
= new THREE.Vector3(010);
            
l[0][h].clone();
            
l[0][1].clone();
            
= new THREE.UV(C.u0);
            
this.faces.push(new THREE.Face3(pro, [swt]));
            
this.faceVertexUvs[0].push([xCD])
        }
    }
    if (!
&& 0) {
        
this.vertices.push(new THREE.Vector3(0, -g0));
        for (
0dh++) {
            
j[i][1];
            
j[i][h];
            
this.vertices.length 1;
            
= new THREE.Vector3(0, -10);
            
= new THREE.Vector3(0, -10);
            
= new THREE.Vector3(0, -10);
            
l[i][1].clone();
            
l[i][h].clone();
            
= new THREE.UV(C.u1);
            
this.faces.push(new THREE.Face3(pro, [swt]));
            
this.faceVertexUvs[0].push([xCD])
        }
    }
    
this.computeCentroids();
    
this.computeFaceNormals()
};
THREE.CylinderGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.ExtrudeGeometry = function(ab) {
    if (
typeof a !== "undefined") {
        
THREE.Geometry.call(this);
        
instanceof Array ? : [a];
        
this.shapebb a[a.length 1].getBoundingBox();
        
this.addShapeList(ab);
        
this.computeCentroids();
        
this.computeFaceNormals()
    }
};
THREE.ExtrudeGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.ExtrudeGeometry.prototype.addShapeList = function(ab) {
    for (var 
a.length0cd++) this.addShape(a[d], b)
};
THREE.ExtrudeGeometry.prototype.addShape = function(ab) {
    function 
c(abc) {
        
|| console.log("die");
        return 
b.clone().multiplyScalar(c).addSelf(a)
    }

    function 
d(abc) {
        var 
THREE.ExtrudeGeometry.__v1,
            
THREE.ExtrudeGeometry.__v2,
            
THREE.ExtrudeGeometry.__v3,
            
THREE.ExtrudeGeometry.__v4,
            
THREE.ExtrudeGeometry.__v5,
            
THREE.ExtrudeGeometry.__v6;
        
d.set(a.b.xa.b.y);
        
e.set(a.c.xa.c.y);
        
d.normalize();
        
e.normalize();
        
f.set(-d.yd.x);
        
g.set(e.y, -e.x);
        
h.copy(a).addSelf(f);
        
i.copy(a).addSelf(g);
        if (
h.equals(i)) return g.clone();
        
h.copy(b).addSelf(f);
        
i.copy(c).addSelf(g);
        
d.dot(g);
        
i.subSelf(h).dot(g);
        if (
=== 0) {
            
console.log("Either infinite or no solutions!");
            
=== console.log("Its finite solutions.") : console.log("Too bad, no solutions.")
        }
        
f;
        if (
0) {
            
Math.atan2(b.a.yb.a.x);
            
Math.atan2(c.a.yc.a.x);
            
&& (Math.PI 2);
            
= (a) / 2;
            
= -Math.cos(c);
            
= -Math.sin(c);
            return new 
THREE.Vector2(ac)
        }
        return 
d.multiplyScalar(g).addSelf(h).subSelf(a).clone()
    }

    function 
e(cd) {
        var 
ef;
        for (
c.length; -->= 0;) {
            
H;
            
1;
            
&& (=
                
c.length 1);
            for (var 
020hg++) {
                var 
g,
                    
* (1),
                    
i,
                    
i,
                    
j,
                    
j,
                    
c,
                    
g,
                    
h,
                    
e,
                    
f,
                    
M,
                    
M,
                    
M,
                    
M;
                
J.faces.push(new THREE.Face4(mipjnullnullw));
                
t.generateSideWallUV(Jaobmipjqrsu);
                
J.faceVertexUvs[0].push(m)
            }
        }
    }

    function 
f(abc) {
        
J.vertices.push(new THREE.Vector3(abc))
    }

    function 
g(cdef) {
        
M;
        
M;
        
M;
        
J.faces.push(new THREE.Face3(cdenullnulls));
        
t.generateBottomUV(Jabcde) : t.generateTopUV(Jabcde);
        
J.faceVertexUvs[0].push(c)
    }
    var 
b.amount !== void 0 b.amount 100,
        
b.bevelThickness !== void 0 b.bevelThickness 6,
        
b.bevelSize !== void 0 b.bevelSize 2,
        
b.bevelSegments !== void 0 b.bevelSegments 3,
        
b.bevelEnabled !== void 0 b.bevelEnabled true,
        
b.steps !== void 0 b.steps 1,
        
b.bendPath,
        
b.extrudePath,
        
ofalse,
        
b.material,
        
b.extrudeMaterial,
        
b.UVGenerator !== void 0 b.UVGenerator THREE.ExtrudeGeometry.WorldUVGenerator,
        
vxCD;
    if (
r) {
        
r.getSpacedPoints(n);
        
true;
        
false;
        
b.frames !== void 0 b.frames : new THREE.TubeGeometry.FrenetFrames(r,
            
nfalse);
        
= new THREE.Vector3;
        
= new THREE.Vector3;
        
= new THREE.Vector3
    
}
    if (!
m0;
    var 
zuGthis,
        
this.vertices.length;
    
&& a.addWrapPath(p);
    var 
a.extractPoints(),
        
r.shape,
        
r.holes;
    if (
= !THREE.Shape.Utils.isClockWise(p)) {
        
p.reverse();
        
0;
        for (
O.lengthGu++) {
            
O[u];
            
THREE.Shape.Utils.isClockWise(z) && (O[u] = z.reverse())
        }
        
false
    
}
    var 
THREE.Shape.Utils.triangulateShape(pO),
        
p;
    
0;
    for (
O.lengthGu++) {
        
O[u];
        
p.concat(z)
    }
    var 
FQEaaTp.length,
        
Wba X.length,
        
= [],
        
0;
    
B.length;
    
1;
    for (
1EH++, F++, Q++) {
        
=== && (0);
        
=== && (0);
        
r[H] = d(B[H], B[F], B[Q])
    }
    var 
ca = [],
        
iar.concat();
    
0;
    for (
O.lengthGu++) {
        
O[u];
        
ia = [];
        
0;
        
z.length;
        
1;
        for (
1EH++, F++, Q++) {
            
=== && (0);
            
=== && (0);
            
ia[H] = d(z[H], z[F], z[Q])
        }
        
ca.push(ia);
        
S.concat(ia)
    }
    for (
0lF++) {
        
l;
        
aa * (E);
        
Math.sin(Math.PI 2);
        
0;
        for (
B.lengthEH++) {
            
c(B[H], r[H], Q);
            
f(T.xT.y, -aa)
        }
        
0;
        for (
O.lengthGu++) {
            
O[u];
            
ia ca[u];
            
0;
            for (
z.lengthEH++) {
                
c(z[H], ia[H], Q);
                
f(T.xT.y, -aa)
            }
        }
    }
    
j;
    for (
=
        
0NH++) {
        
c(p[H], S[H], Q) : p[H];
        if (
q) {
            
C.copy(v.normals[0]).multiplyScalar(T.x);
            
x.copy(v.binormals[0]).multiplyScalar(T.y);
            
D.copy(o[0]).addSelf(C).addSelf(x);
            
f(D.xD.yD.z)
        } else 
f(T.xT.y0)
    }
    for (
1<= nE++)
        for (
0NH++) {
            
c(p[H], S[H], Q) : p[H];
            if (
q) {
                
C.copy(v.normals[E]).multiplyScalar(T.x);
                
x.copy(v.binormals[E]).multiplyScalar(T.y);
                
D.copy(o[E]).addSelf(C).addSelf(x);
                
f(D.xD.yD.z)
            } else 
f(T.xT.yE)
        }
    for (
1>= 0F--) {
        
l;
        
aa * (E);
        
Math.sin(Math.PI 2);
        
0;
        for (
B.lengthEH++) {
            
=
                
c(B[H], r[H], Q);
            
f(T.xT.yaa)
        }
        
0;
        for (
O.lengthGu++) {
            
O[u];
            
ia ca[u];
            
0;
            for (
z.lengthEH++) {
                
c(z[H], ia[H], Q);
                
f(T.xT.o[1].yo[1].aa) : f(T.xT.yaa)
            }
        }
    }(function() {
        if (
m) {
            var 
a;
            
0;
            for (
0baH++) {
                
X[H];
                
g(W[2] + aW[1] + aW[0] + atrue)
            }
            
2;
            
a;
            for (
0baH++) {
                
X[H];
                
g(W[0] + aW[1] + aW[2] + afalse)
            }
        } else {
            for (
0baH++) {
                
X[H];
                
g(W[2], W[1], W[0], true)
            }
            for (
0baH++) {
                
X[H];
                
g(W[0] + nW[1] + nW[2] + nfalse)
            }
        }
    })();
    (function() {
        var 
0;
        
e(Ba);
        
B.length;
        
0;
        for (
O.length<
            
Gu++) {
            
O[u];
            
e(za);
            
z.length
        
}
    })()
};
THREE.ExtrudeGeometry.WorldUVGenerator = {
    
generateTopUV: function(abcdef) {
        
a.vertices[e].x;
        
a.vertices[e].y;
        
a.vertices[f].x;
        
a.vertices[f].y;
        return [new 
THREE.UV(a.vertices[d].xa.vertices[d].y), new THREE.UV(be), new THREE.UV(cf)]
    },
    
generateBottomUV: function(abcdef) {
        return 
this.generateTopUV(abcdef)
    },
    
generateSideWallUV: function(abcdefgh) {
        var 
a.vertices[e].x,
            
a.vertices[e].y,
            
a.vertices[e].z,
            
a.vertices[f].x,
            
a.vertices[f].y,
            
a.vertices[f].z,
            
a.vertices[g].x,
            
=
            
a.vertices[g].y,
            
a.vertices[g].z,
            
a.vertices[h].x,
            
a.vertices[h].y,
            
a.vertices[h].z;
        return 
Math.abs(i) < 0.01 ? [new THREE.UV(be), new THREE.UV(df), new THREE.UV(jg), new THREE.UV(ma)] : [new THREE.UV(ce), new THREE.UV(if), new THREE.UV(lg), new THREE.UV(na)]
    }
};
THREE.ExtrudeGeometry.__v1 = new THREE.Vector2;
THREE.ExtrudeGeometry.__v2 = new THREE.Vector2;
THREE.ExtrudeGeometry.__v3 = new THREE.Vector2;
THREE.ExtrudeGeometry.__v4 = new THREE.Vector2;
THREE.ExtrudeGeometry.__v5 = new THREE.Vector2;
THREE.ExtrudeGeometry.__v6 = new THREE.Vector2;
THREE.LatheGeometry = function(abc) {
    
THREE.Geometry.call(this);
    for (var 
|| 12|| Math.PI= [], = (new THREE.Matrix4).makeRotationZ(b), 0a.lengthf++) {
        
d[f] = a[f].clone();
        
this.vertices.push(d[f])
    }
    for (var 
10gc++)
        for (
0d.lengthf++) {
            
d[f] = e.multiplyVector3(d[f].clone());
            
this.vertices.push(d[f])
        }
    for (
0bc++) {
        
0;
        for (
a.length1d++) {
            
this.faces.push(new THREE.Face4(d, (1) % d, (1) % + (1) % e+ (1) % e));
            
this.faceVertexUvs[0].push([new THREE.UV(be), new THREE.UV(-
                (
1) / be), new THREE.UV(- (1) / b, (1) / e), new THREE.UV(b, (1) / e)])
        }
    }
    
this.computeCentroids();
    
this.computeFaceNormals();
    
this.computeVertexNormals()
};
THREE.LatheGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.PlaneGeometry = function(abcd) {
    
THREE.Geometry.call(this);
    for (var 
22|| 1|| 111cd= new THREE.Vector3(010), 0ha++)
        for (
0gb++) this.vertices.push(new THREE.Vector3(e0f));
    for (
0da++)
        for (
0cb++) {
            
= new THREE.Face4(a* (1), * (1), a);
            
e.normal.copy(l);
            
e.vertexNormals.push(l.clone(), l.clone(), l.clone(), l.clone());
            
this.faces.push(e);
            
this.faceVertexUvs[0].push([new THREE.UV(cd), new THREE.UV(c- (1) / d), new THREE.UV((+
                
1) / c- (1) / d), new THREE.UV((1) / cd)])
        }
    
this.computeCentroids()
};
THREE.PlaneGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.SphereGeometry = function(abcdefg) {
    
THREE.Geometry.call(this);
    var 
|| 50,
        
!== void 0 0,
        
!== void 0 Math.PI 2,
        
!== void 0 0,
        
!== void 0 Math.PI,
        
Math.max(3Math.floor(b) || 8),
        
Math.max(2Math.floor(c) || 6),
        
hi= [],
        
= [];
    for (
0<= ci++) {
        var 
= [],
            
= [];
        for (
0<= bh++) {
            var 
b,
                
c,
                
= new THREE.Vector3;
            
o.= -Math.cos(e) * Math.sin(g);
            
o.Math.cos(g);
            
o.Math.sin(e) * Math.sin(g);
            
this.vertices.push(o);
            
m.push(this.vertices.length 1);
            
n.push(new THREE.UV(p,
                
r))
        }
        
j.push(m);
        
l.push(n)
    }
    for (
0ci++)
        for (
0bh++) {
            var 
j[i][1],
                
j[i][h],
                
j[1][h],
                
j[1][1],
                
this.vertices[d].clone().normalize(),
                
this.vertices[e].clone().normalize(),
                
this.vertices[f].clone().normalize(),
                
this.vertices[g].clone().normalize(),
                
l[i][1].clone(),
                
l[i][h].clone(),
                
l[1][h].clone(),
                
l[1][1].clone();
            if (
Math.abs(this.vertices[d].y) == a) {
                
this.faces.push(new THREE.Face3(dfg, [mpr]));
                
this.faceVertexUvs[0].push([osw])
            } else if (
Math.abs(this.vertices[f].y) ==
                
a) {
                
this.faces.push(new THREE.Face3(def, [mnp]));
                
this.faceVertexUvs[0].push([oqs])
            } else {
                
this.faces.push(new THREE.Face4(defg, [mnpr]));
                
this.faceVertexUvs[0].push([oqsw])
            }
        }
    
this.computeCentroids();
    
this.computeFaceNormals();
    
this.boundingSphere = {
        
radiusa
    
}
};
THREE.SphereGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.TextGeometry = function(ab) {
    var 
THREE.FontUtils.generateShapes(ab);
    
b.amount b.height !== void 0 b.height 50;
    if (
b.bevelThickness === void 0b.bevelThickness 10;
    if (
b.bevelSize === void 0b.bevelSize 8;
    if (
b.bevelEnabled === void 0b.bevelEnabled false;
    if (
b.bend) {
        var 
c[c.length 1].getBoundingBox().maxX;
        
b.bendPath = new THREE.QuadraticBezierCurve(new THREE.Vector2(00), new THREE.Vector2(2120), new THREE.Vector2(d0))
    }
    
THREE.ExtrudeGeometry.call(thiscb)
};
THREE.TextGeometry.prototype Object.create(THREE.ExtrudeGeometry.prototype);
THREE.TorusGeometry = function(abcde) {
    
THREE.Geometry.call(this);
    
this.radius || 100;
    
this.tube || 40;
    
this.segmentsR || 8;
    
this.segmentsT || 6;
    
this.arc || Math.PI 2;
    
= new THREE.Vector3;
    
= [];
    
= [];
    for (
0<= this.segmentsRc++)
        for (
0<= this.segmentsTd++) {
            var 
this.segmentsT this.arc,
                
this.segmentsR Math.PI 2;
            
e.this.radius Math.cos(f);
            
e.this.radius Math.sin(f);
            var 
= new THREE.Vector3;
            
h.= (this.radius this.tube Math.cos(g)) * Math.cos(f);
            
h.= (this.radius this.tube Math.cos(g)) * Math.sin(f);
            
h.=
                
this.tube Math.sin(g);
            
this.vertices.push(h);
            
a.push(new THREE.UV(this.segmentsTthis.segmentsR));
            
b.push(h.clone().subSelf(e).normalize())
        }
    for (
1<= this.segmentsRc++)
        for (
1<= this.segmentsTd++) {
            var 
= (this.segmentsT 1) * 1,
                
= (this.segmentsT 1) * (1) + 1,
                
= (this.segmentsT 1) * (1) + d,
                
= (this.segmentsT 1) * d,
                
= new THREE.Face4(efgh, [b[e], b[f], b[g], b[h]]);
            
i.normal.addSelf(b[e]);
            
i.normal.addSelf(b[f]);
            
i.normal.addSelf(b[g]);
            
i.normal.addSelf(b[h]);
            
i.normal.normalize();
            
this.faces.push(i);
            
this.faceVertexUvs[0].push([a[e].clone(), a[f].clone(), a[g].clone(), a[h].clone()])
        }
    
this.computeCentroids()
};
THREE.TorusGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.TorusKnotGeometry = function(abcdefg) {
    function 
h(abcdef) {
        var 
Math.cos(a);
        
Math.cos(b);
        
Math.sin(a);
        
a;
        
Math.cos(a);
        
* (c) * 0.5 g;
        
* (c) * 0.5;
        
Math.sin(a) * 0.5;
        return new 
THREE.Vector3(gbe)
    }
    
THREE.Geometry.call(this);
    
this.radius || 200;
    
this.tube || 40;
    
this.segmentsR || 64;
    
this.segmentsT || 8;
    
this.|| 2;
    
this.|| 3;
    
this.heightScale || 1;
    
this.grid = Array(this.segmentsR);
    
= new THREE.Vector3;
    
= new THREE.Vector3;
    
= new THREE.Vector3;
    for (
0this.segmentsR; ++a) {
        
this.grid[a] =
            Array(
this.segmentsT);
        for (
0this.segmentsT; ++b) {
            var 
this.segmentsR this.Math.PI,
                
this.segmentsT Math.PI,
                
h(igthis.qthis.pthis.radiusthis.heightScale),
                
h(0.01gthis.qthis.pthis.radiusthis.heightScale);
            
c.sub(if);
            
d.add(if);
            
e.cross(cd);
            
d.cross(ec);
            
e.normalize();
            
d.normalize();
            
= -this.tube Math.cos(g);
            
this.tube Math.sin(g);
            
f.f.+ (d.e.x);
            
f.f.+ (d.e.y);
            
f.f.+ (d.e.z);
            
this.grid[a][b] = this.vertices.push(new THREE.Vector3(f.xf.yf.z)) - 1
        
}
    }
    for (
0<
        
this.segmentsR; ++a)
        for (
0this.segmentsT; ++b) {
            var 
= (1) % this.segmentsR,
                
= (1) % this.segmentsT,
                
this.grid[a][b],
                
this.grid[e][b],
                
this.grid[e][f],
                
this.grid[a][f],
                
= new THREE.UV(this.segmentsRthis.segmentsT),
                
= new THREE.UV((1) / this.segmentsRthis.segmentsT),
                
= new THREE.UV((1) / this.segmentsR, (1) / this.segmentsT),
                
= new THREE.UV(this.segmentsR, (1) / this.segmentsT);
            
this.faces.push(new THREE.Face4(cdef));
            
this.faceVertexUvs[0].push([gijl])
        }
    
this.computeCentroids();
    
this.computeFaceNormals();
    
this.computeVertexNormals()
};
THREE.TorusKnotGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.TubeGeometry = function(abcdef) {
    
THREE.Geometry.call(this);
    
this.path a;
    
this.segments || 64;
    
this.radius || 1;
    
this.segmentsRadius || 8;
    
this.closed || false;
    if (
fthis.debug = new THREE.Object3D;
    
this.grid = [];
    var 
ghthis.segments 1,
        
ijl= new THREE.Vector3,
        
npr= new THREE.TubeGeometry.FrenetFrames(abe);
    
b.tangents;
    
b.normals;
    
b.binormals;
    
this.tangents n;
    
this.normals p;
    
this.binormals r;
    for (
0fb++) {
        
this.grid[b] = [];
        
/ (1);
        
a.getPointAt(d);
        
n[b];
        
p[b];
        
r[b];
        if (
this.debug) {
            
this.debug.add(new THREE.ArrowHelper(d,
                
lc255));
            
this.debug.add(new THREE.ArrowHelper(glc16711680));
            
this.debug.add(new THREE.ArrowHelper(hlc65280))
        }
        for (
0this.segmentsRadiusd++) {
            
this.segmentsRadius Math.PI;
            
= -this.radius Math.cos(i);
            
this.radius Math.sin(i);
            
m.copy(l);
            
m.m.+ (g.h.x);
            
m.m.+ (g.h.y);
            
m.m.+ (g.h.z);
            
this.grid[b][d] = this.vertices.push(new THREE.Vector3(m.xm.ym.z)) - 1
        
}
    }
    for (
0this.segmentsb++)
        for (
0this.segmentsRadiusd++) {
            
? (1) % this.segments 1;
            
= (1) % this.segmentsRadius;
            
this.grid[b][d];
            
this.grid[f][d];
            
this.grid[f][m];
            
this.grid[b][m];
            
= new THREE.UV(this.segmentsthis.segmentsRadius);
            
= new THREE.UV((1) / this.segmentsthis.segmentsRadius);
            
= new THREE.UV((1) / this.segments, (1) / this.segmentsRadius);
            
= new THREE.UV(this.segments, (1) / this.segmentsRadius);
            
this.faces.push(new THREE.Face4(acfm));
            
this.faceVertexUvs[0].push([nprg])
        }
    
this.computeCentroids();
    
this.computeFaceNormals();
    
this.computeVertexNormals()
};
THREE.TubeGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.TubeGeometry.FrenetFrames = function(abc) {
    new 
THREE.Vector3;
    var 
= new THREE.Vector3;
    new 
THREE.Vector3;
    var 
= [],
        
= [],
        
= [],
        
= new THREE.Vector3,
        
= new THREE.Matrix4,
        
1,
        
jlm;
    
this.tangents e;
    
this.normals f;
    
this.binormals g;
    for (
0bj++) {
        
/ (1);
        
e[j] = a.getTangentAt(l);
        
e[j].normalize()
    }
    
f[0] = new THREE.Vector3;
    
g[0] = new THREE.Vector3;
    
Number.MAX_VALUE;
    
Math.abs(e[0].x);
    
Math.abs(e[0].y);
    
Math.abs(e[0].z);
    if (
<= a) {
        
j;
        
d.set(100)
    }
    if (
<= a) {
        
l;
        
d.set(010)
    }
    
<= && d.set(001);
    
h.cross(e[0], d).normalize();
    
f[0].cross(e[0], h);
    
g[0].cross(e[0], f[0]);
    for (
1bj++) {
        
f[j] = f[1].clone();
        
g[j] = g[1].clone();
        
h.cross(e[1], e[j]);
        if (
h.length() > 1.0E-4) {
            
h.normalize();
            
Math.acos(e[1].dot(e[j]));
            
i.makeRotationAxis(hd).multiplyVector3(f[j])
        }
        
g[j].cross(e[j], f[j])
    }
    if (
c) {
        
Math.acos(f[0].dot(f[1]));
        
/ (1);
        
e[0].dot(h.cross(f[0], f[1])) > && (= -d);
        for (
1bj++) {
            
i.makeRotationAxis(e[j], j).multiplyVector3(f[j]);
            
g[j].cross(e[j], f[j])
        }
    }
};
THREE.PolyhedronGeometry = function(abcd) {
    function 
e(a) {
        var 
a.normalize().clone();
        
b.index i.vertices.push(b) - 1;
        var 
Math.atan2(a.z, -a.x) / Math.PI 0.5,
            
Math.atan2(-a.yMath.sqrt(a.a.a.a.z)) / Math.PI 0.5;
        
b.uv = new THREE.UV(ca);
        return 
b
    
}

    function 
f(abcd) {
        if (
1) {
            
= new THREE.Face3(a.indexb.indexc.index, [a.clone(), b.clone(), c.clone()]);
            
d.centroid.addSelf(a).addSelf(b).addSelf(c).divideScalar(3);
            
d.normal d.centroid.clone().normalize();
            
i.faces.push(d);
            
Math.atan2(d.centroid.z, -d.centroid.x);
            
i.faceVertexUvs[0].push([h(a.uvad), h(b.uvbd), h(c.uvcd)])
        } else {
            
1;
            
f(ag(ab), g(ac), d);
            
f(g(ab), bg(bc), d);
            
f(g(ac), g(bc), cd);
            
f(g(ab), g(bc), g(ac), d)
        }
    }

    function 
g(ab) {
        
m[a.index] || (m[a.index] = []);
        
m[b.index] || (m[b.index] = []);
        var 
m[a.index][b.index];
        
=== void 0 && (m[a.index][b.index] = m[b.index][a.index] = e((new THREE.Vector3).add(ab).divideScalar(2)));
        return 
c
    
}

    function 
h(abc) {
        
&& a.=== && (= new THREE.UV(a.1a.v));
        
b.=== && b.=== && (= new THREE.UV(Math.PI 0.5a.v));
        return 
a
    
}
    
THREE.Geometry.call(this);
    for (var 
|| 1|| 0this0a.lengthlj++) e(new THREE.Vector3(a[j][0], a[j][1], a[j][2]));
    for (var 
= [], this.vertices0b.lengthlj++) f(a[b[j][0]], a[b[j][1]], a[b[j][2]], d);
    
this.mergeVertices();
    
0;
    for (
this.vertices.lengthlj++) this.vertices[j].multiplyScalar(c);
    
this.computeCentroids();
    
this.boundingSphere = {
        
radiusc
    
}
};
THREE.PolyhedronGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.IcosahedronGeometry = function(ab) {
    var 
= (Math.sqrt(5)) / 2;
    
THREE.PolyhedronGeometry.call(this, [
        [-
1c0],
        [
1c0],
        [-
1, -c0],
        [
1, -c0],
        [
0, -1c],
        [
01c],
        [
0, -1, -c],
        [
01, -c],
        [
c0, -1],
        [
c01],
        [-
c0, -1],
        [-
c01]
    ], [
        [
0115],
        [
051],
        [
017],
        [
0710],
        [
01011],
        [
159],
        [
5114],
        [
11102],
        [
1076],
        [
718],
        [
394],
        [
342],
        [
326],
        [
368],
        [
389],
        [
495],
        [
2411],
        [
6210],
        [
867],
        [
981]
    ], 
ab)
};
THREE.IcosahedronGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.OctahedronGeometry = function(ab) {
    
THREE.PolyhedronGeometry.call(this, [
        [
100],
        [-
100],
        [
010],
        [
0, -10],
        [
001],
        [
00, -1]
    ], [
        [
024],
        [
043],
        [
035],
        [
052],
        [
125],
        [
153],
        [
134],
        [
142]
    ], 
ab)
};
THREE.OctahedronGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.TetrahedronGeometry = function(ab) {
    
THREE.PolyhedronGeometry.call(this, [
        [
111],
        [-
1, -11],
        [-
11, -1],
        [
1, -1, -1]
    ], [
        [
210],
        [
032],
        [
130],
        [
231]
    ], 
ab)
};
THREE.TetrahedronGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.ParametricGeometry = function(abcd) {
    
THREE.Geometry.call(this);
    var 
this.vertices,
        
this.faces,
        
this.faceVertexUvs[0],
        
=== void 0 false d,
        
hijl1;
    for (
0<= ch++) {
        
c;
        for (
0<= bi++) {
            
b;
            
a(jl);
            
e.push(j)
        }
    }
    var 
npro;
    for (
0ch++)
        for (
0bi++) {
            
i;
            
1;
            
= (1) * i;
            
= (1) * 1;
            
= new THREE.UV(bc);
            
= new THREE.UV((1) / bc);
            
= new THREE.UV(b, (1) / c);
            
= new THREE.UV((1) / b, (1) / c);
            if (
d) {
                
f.push(new THREE.Face3(ael));
                
f.push(new THREE.Face3(ejl));
                
g.push([n,
                    
pr
                
]);
                
g.push([por])
            } else {
                
f.push(new THREE.Face4(aejl));
                
g.push([npor])
            }
        }
    
this.computeCentroids();
    
this.computeFaceNormals();
    
this.computeVertexNormals()
};
THREE.ParametricGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.ConvexGeometry = function(a) {
    function 
b(b) {
        var 
a[b].clone(),
            
d.length();
        
d.d.c();
        
d.d.c();
        
d.d.c();
        for (var 
= [], 0e.length;) {
            var 
e[g],
                
d,
                
a[h[0]],
                
s;
            
j;
            var 
a[h[1]],
                
a[h[2]],
                
= new THREE.Vector3,
                
= new THREE.Vector3;
            
v.sub(tw);
            
x.sub(sw);
            
v.crossSelf(x);
            
v.isZero() || v.normalize();
            
v;
            
s.dot(j);
            if (
s.dot(i) >= j) {
                for (
03i++) {
                    
= [h[i], h[(1) % 3]];
                    
true;
                    for (
0f.lengthw++)
                        if (
f[w][0] === j[1] && f[w][1] === j[0]) {
                            
f[w] = f[f.length 1];
                            
f.pop();
                            
false;
                            break
                        }
                    
&& f.push(j)
                }
                
e[g] =
                    
e[e.length 1];
                
e.pop()
            } else 
g++
        }
        for (
0f.lengthw++) e.push([f[w][0], f[w][1], b])
    }

    function 
c() {
        return (
Math.random() - 0.5) * 2.0E-6
    
}

    function 
d(a) {
        var 
a.length();
        return new 
THREE.UV(a.ba.b)
    }
    
THREE.Geometry.call(this);
    for (var 
= [
            [
012],
            [
021]
        ], 
3a.lengthf++) b(f);
    for (var 
0= Array(a.length), 0e.lengthf++)
        for (var 
e[f], 03j++) {
            if (
h[i[j]] === void 0) {
                
h[i[j]] = g++;
                
this.vertices.push(a[i[j]])
            }
            
i[j] = h[i[j]]
        }
    for (
0e.lengthf++) this.faces.push(new THREE.Face3(e[f][0], e[f][1], e[f][2]));
    for (
0this.faces.lengthf++) {
        
this.faces[f];
        
this.faceVertexUvs[0].push([d(this.vertices[i.a]), d(this.vertices[i.b]), d(this.vertices[i.c])])
    }
    
this.computeCentroids();
    
this.computeFaceNormals();
    
this.computeVertexNormals()
};
THREE.ConvexGeometry.prototype Object.create(THREE.Geometry.prototype);
THREE.AxisHelper = function() {
    
THREE.Object3D.call(this);
    var 
= new THREE.Geometry;
    
a.vertices.push(new THREE.Vector3);
    
a.vertices.push(new THREE.Vector3(01000));
    var 
= new THREE.CylinderGeometry(052551),
        
c;
    
= new THREE.Line(a, new THREE.LineBasicMaterial({
        
color16711680
    
}));
    
c.rotation.= -Math.PI 2;
    
this.add(c);
    
= new THREE.Mesh(b, new THREE.MeshBasicMaterial({
        
color16711680
    
}));
    
c.position.100;
    
c.rotation.= -Math.PI 2;
    
this.add(c);
    
= new THREE.Line(a, new THREE.LineBasicMaterial({
        
color65280
    
}));
    
this.add(c);
    
= new THREE.Mesh(b, new THREE.MeshBasicMaterial({
        
color65280
    
}));
    
c.position.100;
    
this.add(c);
    
= new THREE.Line(a, new THREE.LineBasicMaterial({
        
color255
    
}));
    
c.rotation.Math.PI 2;
    
this.add(c);
    
= new THREE.Mesh(b, new THREE.MeshBasicMaterial({
        
color255
    
}));
    
c.position.100;
    
c.rotation.Math.PI 2;
    
this.add(c)
};
THREE.AxisHelper.prototype Object.create(THREE.Object3D.prototype);
THREE.ArrowHelper = function(abcd) {
    
THREE.Object3D.call(this);
    
=== void 0 && (16776960);
    
=== void 0 && (20);
    var 
= new THREE.Geometry;
    
e.vertices.push(new THREE.Vector3(000));
    
e.vertices.push(new THREE.Vector3(010));
    
this.line = new THREE.Line(e, new THREE.LineBasicMaterial({
        
colord
    
}));
    
this.add(this.line);
    
= new THREE.CylinderGeometry(00.050.2551);
    
this.cone = new THREE.Mesh(e, new THREE.MeshBasicMaterial({
        
colord
    
}));
    
this.cone.position.set(010);
    
this.add(this.cone);
    if (
instanceof THREE.Vector3this.position =
        
b;
    
this.setDirection(a);
    
this.setLength(c)
};
THREE.ArrowHelper.prototype Object.create(THREE.Object3D.prototype);
THREE.ArrowHelper.prototype.setDirection = function(a) {
    var 
= (new THREE.Vector3(010)).crossSelf(a),
        
Math.acos((new THREE.Vector3(010)).dot(a.clone().normalize()));
    
this.matrix = (new THREE.Matrix4).makeRotationAxis(b.normalize(), a);
    
this.rotation.setEulerFromRotationMatrix(this.matrixthis.eulerOrder)
};
THREE.ArrowHelper.prototype.setLength = function(a) {
    
this.scale.set(aaa)
};
THREE.ArrowHelper.prototype.setColor = function(a) {
    
this.line.material.color.setHex(a);
    
this.cone.material.color.setHex(a)
};
THREE.CameraHelper = function(a) {
    function 
b(abd) {
        
c(ad);
        
c(bd)
    }

    function 
c(ab) {
        
d.lineGeometry.vertices.push(new THREE.Vector3);
        
d.lineGeometry.colors.push(new THREE.Color(b));
        
d.pointMap[a] === void 0 && (d.pointMap[a] = []);
        
d.pointMap[a].push(d.lineGeometry.vertices.length 1)
    }
    
THREE.Object3D.call(this);
    var 
this;
    
this.lineGeometry = new THREE.Geometry;
    
this.lineMaterial = new THREE.LineBasicMaterial({
        
color16777215,
        
vertexColorsTHREE.FaceColors
    
});
    
this.pointMap = {};
    
b("n1""n2"16755200);
    
b("n2""n4"16755200);
    
b("n4",
        
"n3"16755200);
    
b("n3""n1"16755200);
    
b("f1""f2"16755200);
    
b("f2""f4"16755200);
    
b("f4""f3"16755200);
    
b("f3""f1"16755200);
    
b("n1""f1"16755200);
    
b("n2""f2"16755200);
    
b("n3""f3"16755200);
    
b("n4""f4"16755200);
    
b("p""n1"16711680);
    
b("p""n2"16711680);
    
b("p""n3"16711680);
    
b("p""n4"16711680);
    
b("u1""u2"43775);
    
b("u2""u3"43775);
    
b("u3""u1"43775);
    
b("c""t"16777215);
    
b("p""c"3355443);
    
b("cn1""cn2"3355443);
    
b("cn3""cn4"3355443);
    
b("cf1""cf2"3355443);
    
b("cf3""cf4"3355443);
    
this.camera a;
    
this.update(a);
    
this.lines = new THREE.Line(this.lineGeometrythis.lineMaterialTHREE.LinePieces);
    
this.add(this.lines)
};
THREE.CameraHelper.prototype Object.create(THREE.Object3D.prototype);
THREE.CameraHelper.prototype.update = function() {
    function 
a(adef) {
        
THREE.CameraHelper.__v.set(def);
        
THREE.CameraHelper.__projector.unprojectVector(THREE.CameraHelper.__vTHREE.CameraHelper.__c);
        
b.pointMap[a];
        if (
!== void 0) {
            
0;
            for (
a.lengthed++) b.lineGeometry.vertices[a[d]].copy(THREE.CameraHelper.__v)
        }
    }
    var 
this;
    
THREE.CameraHelper.__c.projectionMatrix.copy(this.camera.projectionMatrix);
    
a("c"00, -1);
    
a("t"001);
    
a("n1", -1, -1, -1);
    
a("n2"1, -1, -1);
    
a("n3", -11, -1);
    
a("n4"11, -1);
    
a("f1", -1, -1,
        
1);
    
a("f2"1, -11);
    
a("f3", -111);
    
a("f4"111);
    
a("u1"0.71.1, -1);
    
a("u2", -0.71.1, -1);
    
a("u3"02, -1);
    
a("cf1", -101);
    
a("cf2"101);
    
a("cf3"0, -11);
    
a("cf4"011);
    
a("cn1", -10, -1);
    
a("cn2"10, -1);
    
a("cn3"0, -1, -1);
    
a("cn4"01, -1);
    
this.lineGeometry.verticesNeedUpdate true
};
THREE.CameraHelper.__projector = new THREE.Projector;
THREE.CameraHelper.__v = new THREE.Vector3;
THREE.CameraHelper.__c = new THREE.Camera;
THREE.SubdivisionModifier = function(a) {
    
this.subdivisions === void 0 a;
    
this.useOldVertexColors false;
    
this.supportUVs true;
    
this.debug false
};
THREE.SubdivisionModifier.prototype.modify = function(a) {
    for (var 
this.subdivisionsb-- > 0;) this.smooth(a)
};
THREE.SubdivisionModifier.prototype.smooth = function(a) {
    function 
b() {
        
n.debug && console.log.apply(consolearguments)
    }

    function 
c() {
        
console && console.log.apply(consolearguments)
    }

    function 
d(acdeghi) {
        var 
= new THREE.Face4(acdenullg.colorg.materialIndex);
        if (
n.useOldVertexColors) {
            
j.vertexColors = [];
            for (var 
opq04r++) {
                
h[r];
                
= new THREE.Color;
                
o.setRGB(000);
                for (var 
0q.lengths++) {
                    
g.vertexColors[q[s] - 1];
                    
o.o.p.r;
                    
o.o.p.g;
                    
o.o.p.b
                
}
                
o.o.q.length;
                
o.o.q.length;
                
o.o./
                    
q.length;
                
j.vertexColors[r] = o
            
}
        }
        
l.push(j);
        if (
n.supportUVs) {
            
= [f(a""), f(ci), f(di), f(ei)];
            
g[0] ? g[1] ? g[2] ? g[3] ? m.push(g) : b("d :( "":" i) : b("c :( "":" i) : b("b :( "":" i) : b("a :( "":" i)
        }
    }

    function 
e(ab) {
        return 
Math.min(ab) + "_" Math.max(ab)
    }

    function 
f(ad) {
        var 
":" d,
            
w[e];
        if (!
f) {
            
>= && r.length b("face pt") : b("edge pt");
            
c("warning, UV not found for"e);
            return 
null
        
}
        return 
f
    
}

    function 
g(abd) {
        var 
":" b;
        
e in w c("dup vertexNo"a"oldFaceNo"b"value"d"key"ew[e]) : w[e] = d
    
}

    function 
h(a,
        
b) {
        
O[a] === void 0 && (O[a] = []);
        
O[a].push(b)
    }

    function 
i(abc) {
        
X[a] === void 0 && (X[a] = {});
        
X[a][b] = c
    
}
    var 
= [],
        
= [],
        
= [],
        
this,
        
a.vertices,
        
a.faces,
        
p.concat(),
        
= [],
        
= {},
        
= {},
        
= {},
        
p.length,
        
vxCDza.faceVertexUvs[0],
        
G;
    
b("originalFaces, uvs, originalVerticesLength"r.lengthu.lengtht);
    if (
n.supportUVs) {
        
0;
        for (
u.lengthxv++) {
            
0;
            for (
u[v].lengthDC++) {
                
r[v]["abcd".charAt(C)];
                
g(Gvu[v][C])
            }
        }
    }
    if (
u.length == 0n.supportUVs false;
    
0;
    for (
z in wv++;
    if (!
v) {
        
n.supportUVs false;
        
b("no uvs")
    }
    
b("-- Original Faces + Vertices UVs completed",
        
w"vs"u.length);
    
0;
    for (
r.lengthxv++) {
        
r[v];
        
o.push(z.centroid);
        
j.push(z.centroid);
        if (
n.supportUVs) {
            
= new THREE.UV;
            if (
instanceof THREE.Face3) {
                
u.f(z.av).f(z.bv).f(z.cv).u;
                
u.f(z.av).f(z.bv).f(z.cv).v;
                
u.u.3;
                
u.u.3
            
} else if (instanceof THREE.Face4) {
                
u.f(z.av).f(z.bv).f(z.cv).f(z.dv).u;
                
u.f(z.av).f(z.bv).f(z.cv).f(z.dv).v;
                
u.u.4;
                
u.u.4
            
}
            
g(v""u)
        }
    }
    
b("-- added UVs for new Faces"w);
    
= function(a) {
        function 
b(ac) {
            
h[a] === void 0 && (h[a] = []);
            
h[a].push(c)
        }
        var 
cdfg= {};
        
0;
        for (
a.faces.lengthdc++) {
            
a.faces[c];
            if (
instanceof THREE.Face3) {
                
e(f.af.b);
                
b(gc);
                
e(f.bf.c);
                
b(gc);
                
e(f.cf.a);
                
b(gc)
            } else if (
instanceof THREE.Face4) {
                
e(f.af.b);
                
b(gc);
                
e(f.bf.c);
                
b(gc);
                
e(f.cf.d);
                
b(gc);
                
e(f.df.a);
                
b(gc)
            }
        }
        return 
h
    
}(a);
    
0;
    var 
JM= {},
        
= {};
    for (
v in x) {
        
x[v];
        
v.split("_");
        
J[0];
        
J[1];
        
h(M, [MJ]);
        
h(J, [MJ]);
        
0;
        for (
u.lengthDC++) {
            
u[C];
            
i(Mzv);
            
i(Jzv)
        }
        
u.length && (s[v] = true)
    }
    
b("vertexEdgeMap"O"vertexFaceMap"X);
    for (
v in x) {
        
=
            
x[v];
        
u[0];
        
u[1];
        
v.split("_");
        
J[0];
        
J[1];
        
= new THREE.Vector3;
        if (
s[v]) {
            
u.addSelf(p[M]);
            
u.addSelf(p[J]);
            
u.multiplyScalar(0.5)
        } else {
            
u.addSelf(o[z]);
            
u.addSelf(o[D]);
            
u.addSelf(p[M]);
            
u.addSelf(p[J]);
            
u.multiplyScalar(0.25)
        }
        
q[v] = r.length G;
        
j.push(u);
        
G++;
        if (
n.supportUVs) {
            
= new THREE.UV;
            
u.f(Mz).f(Jz).u;
            
u.f(Mz).f(Jz).v;
            
u.u.2;
            
u.u.2;
            
g(q[v], zu);
            if (!
s[v]) {
                
= new THREE.UV;
                
u.f(MD).f(JD).u;
                
u.f(MD).f(JD).v;
                
u.u.2;
                
u.u.2;
                
g(q[v], Du)
            }
        }
    }
    
b("-- Step 2 done");
    var 
BF;
    
= ["123",
        
"12""2""23"
    
];
    
= ["123""23""3""31"];
    var 
= ["123""31""1""12"],
        
= ["1234""12""2""23"],
        
aa = ["1234""23""3""34"],
        
= ["1234""34""4""41"],
        
= ["1234""41""1""12"];
    
0;
    for (
o.lengthxv++) {
        
r[v];
        
v;
        if (
instanceof THREE.Face3) {
            
e(z.az.b);
            
e(z.bz.c);
            
e(z.cz.a);
            
d(uq[G], z.bq[M], zDv);
            
d(uq[M], z.cq[B], zJv);
            
d(uq[B], z.aq[G], zQv)
        } else if (
instanceof THREE.Face4) {
            
e(z.az.b);
            
e(z.bz.c);
            
e(z.cz.d);
            
e(z.dz.a);
            
d(uq[G], z.bq[M], zEv);
            
d(uq[M], z.cq[B], zaav);
            
d(uq[B], z.d,
                
q[F], zTv);
            
d(uq[F], z.aq[G], zNv)
        } else 
b("face should be a face!"z)
    }
    
= new THREE.Vector3;
    
= new THREE.Vector3;
    
0;
    for (
p.lengthxv++)
        if (
O[v] !== void 0) {
            
q.set(000);
            
z.set(000);
            
= new THREE.Vector3(000);
            
0;
            for (
C in X[v]) {
                
q.addSelf(o[C]);
                
u++
            }
            
0;
            
O[v].length;
            for (
0GC++) s[e(O[v][C][0], O[v][C][1])] && D++;
            if (
!= 2) {
                
q.divideScalar(u);
                for (
0GC++) {
                    
O[v][C];
                    
p[u[0]].clone().addSelf(p[u[1]]).divideScalar(2);
                    
z.addSelf(u)
                }
                
z.divideScalar(G);
                
M.addSelf(p[v]);
                
M.multiplyScalar(3);
                
M.addSelf(q);
                
M.addSelf(z.multiplyScalar(2));
                
M.divideScalar(G);
                
j[v] = M
            
}
        }
    
a.vertices j;
    
a.faces l;
    
a.faceVertexUvs[0] = m;
    
delete a.__tmpVertices;
    
a.computeCentroids();
    
a.computeFaceNormals();
    
a.computeVertexNormals()
};
THREE.ImmediateRenderObject = function() {
    
THREE.Object3D.call(this);
    
this.render = function() {}
};
THREE.ImmediateRenderObject.prototype Object.create(THREE.Object3D.prototype);
THREE.LensFlare = function(abcde) {
    
THREE.Object3D.call(this);
    
this.lensFlares = [];
    
this.positionScreen = new THREE.Vector3;
    
this.customUpdateCallback void 0;
    
!== void 0 && this.add(abcde)
};
THREE.LensFlare.prototype Object.create(THREE.Object3D.prototype);
THREE.LensFlare.prototype.add = function(abcdef) {
    
=== void 0 && (= -1);
    
=== void 0 && (0);
    
=== void 0 && (1);
    
=== void 0 && (= new THREE.Color(16777215));
    if (
=== void 0THREE.NormalBlending;
    
Math.min(cMath.max(0c));
    
this.lensFlares.push({
        
texturea,
        
sizeb,
        
distancec,
        
x0,
        
y0,
        
z0,
        
scale1,
        
rotation1,
        
opacityf,
        
colore,
        
blendingd
    
})
};
THREE.LensFlare.prototype.updateLensFlares = function() {
    var 
athis.lensFlares.length,
        
c= -this.positionScreen.2,
        
= -this.positionScreen.2;
    for (
0ba++) {
        
this.lensFlares[a];
        
c.this.positionScreen.c.distance;
        
c.this.positionScreen.c.distance;
        
c.wantedRotation c.Math.PI 0.25;
        
c.rotation c.rotation + (c.wantedRotation c.rotation) * 0.25
    
}
};
THREE.MorphBlendMesh = function(ab) {
    
THREE.Mesh.call(thisab);
    
this.animationsMap = {};
    
this.animationsList = [];
    var 
this.geometry.morphTargets.length;
    
this.createAnimation("__default"011);
    
this.setAnimationWeight("__default"1)
};
THREE.MorphBlendMesh.prototype Object.create(THREE.Mesh.prototype);
THREE.MorphBlendMesh.prototype.createAnimation = function(abcd) {
    
= {
        
startFrameb,
        
endFramec,
        
length1,
        
fpsd,
        
duration: (b) / d,
        
lastFrame0,
        
currentFrame0,
        
activefalse,
        
time0,
        
direction1,
        
weight1,
        
directionBackwardsfalse,
        
mirroredLoopfalse
    
};
    
this.animationsMap[a] = b;
    
this.animationsList.push(b)
};
THREE.MorphBlendMesh.prototype.autoCreateAnimations = function(a) {
    for (var 
= /([a-z]+)(d+)/, c= {}, this.geometry0e.morphTargets.lengthgf++) {
        var 
e.morphTargets[f].name.match(b);
        if (
&& h.length 1) {
            var 
h[1];
            
d[i] || (d[i] = {
                
startInfinity,
                
end: -Infinity
            
});
            
d[i];
            if (
h.starth.start f;
            if (
h.endh.end f;
            
|| (i)
        }
    }
    for (
i in d) {
        
d[i];
        
this.createAnimation(ih.starth.enda)
    }
    
this.firstAnimation c
};
THREE.MorphBlendMesh.prototype.setAnimationDirectionForward = function(a) {
    if (
this.animationsMap[a]) {
        
a.direction 1;
        
a.directionBackwards false
    
}
};
THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward = function(a) {
    if (
this.animationsMap[a]) {
        
a.direction = -1;
        
a.directionBackwards true
    
}
};
THREE.MorphBlendMesh.prototype.setAnimationFPS = function(ab) {
    var 
this.animationsMap[a];
    if (
c) {
        
c.fps b;
        
c.duration = (c.end c.start) / c.fps
    
}
};
THREE.MorphBlendMesh.prototype.setAnimationDuration = function(ab) {
    var 
this.animationsMap[a];
    if (
c) {
        
c.duration b;
        
c.fps = (c.end c.start) / c.duration
    
}
};
THREE.MorphBlendMesh.prototype.setAnimationWeight = function(ab) {
    var 
this.animationsMap[a];
    if (
cc.weight b
};
THREE.MorphBlendMesh.prototype.setAnimationTime = function(ab) {
    var 
this.animationsMap[a];
    if (
cc.time b
};
THREE.MorphBlendMesh.prototype.getAnimationTime = function(a) {
    var 
0;
    if (
this.animationsMap[a]) a.time;
    return 
b
};
THREE.MorphBlendMesh.prototype.getAnimationDuration = function(a) {
    var 
= -1;
    if (
this.animationsMap[a]) a.duration;
    return 
b
};
THREE.MorphBlendMesh.prototype.playAnimation = function(a) {
    var 
this.animationsMap[a];
    if (
b) {
        
b.time 0;
        
b.active true
    
} else console.warn("animation[" "] undefined")
};
THREE.MorphBlendMesh.prototype.stopAnimation = function(a) {
    if (
this.animationsMap[a]) a.active false
};
THREE.MorphBlendMesh.prototype.update = function(a) {
    for (var 
0this.animationsList.lengthcb++) {
        var 
this.animationsList[b];
        if (
d.active) {
            var 
d.duration d.length;
            
d.time d.time d.direction a;
            if (
d.mirroredLoop) {
                if (
d.time d.duration || d.time 0) {
                    
d.direction d.direction * -1;
                    if (
d.time d.duration) {
                        
d.time d.duration;
                        
d.directionBackwards true
                    
}
                    if (
d.time 0) {
                        
d.time 0;
                        
d.directionBackwards false
                    
}
                }
            } else {
                
d.time d.time d.duration;
                if (
d.time 0d.time d.time d.duration
            
}
            var 
d.startFrame THREE.Math.clamp(Math.floor(d.time /
                    
e), 0d.length 1),
                
d.weight;
            if (
!== d.currentFrame) {
                
this.morphTargetInfluences[d.lastFrame] = 0;
                
this.morphTargetInfluences[d.currentFrame] = g;
                
this.morphTargetInfluences[f] = 0;
                
d.lastFrame d.currentFrame;
                
d.currentFrame f
            
}
            
d.time e;
            
d.directionBackwards && (e);
            
this.morphTargetInfluences[d.currentFrame] = g;
            
this.morphTargetInfluences[d.lastFrame] = (e) * g
        
}
    }
};
THREE.LensFlarePlugin = function() {
    function 
a(a) {
        var 
b.createProgram(),
            
b.createShader(b.FRAGMENT_SHADER),
            
b.createShader(b.VERTEX_SHADER);
        
b.shaderSource(da.fragmentShader);
        
b.shaderSource(ea.vertexShader);
        
b.compileShader(d);
        
b.compileShader(e);
        
b.attachShader(cd);
        
b.attachShader(ce);
        
b.linkProgram(c);
        return 
c
    
}
    var 
bcdefghijlmnp;
    
this.init = function(r) {
        
r.context;
        
r;
        
= new Float32Array(16);
        
= new Uint16Array(6);
        
0;
        
d[r++] = -1;
        
d[r++] = -1;
        
d[r++] = 0;
        
d[r++] = 0;
        
d[r++] = 1;
        
d[r++] = -1;
        
d[r++] = 1;
        
d[r++] =
            
0;
        
d[r++] = 1;
        
d[r++] = 1;
        
d[r++] = 1;
        
d[r++] = 1;
        
d[r++] = -1;
        
d[r++] = 1;
        
d[r++] = 0;
        
d[r++] = 1;
        
0;
        
e[r++] = 0;
        
e[r++] = 1;
        
e[r++] = 2;
        
e[r++] = 0;
        
e[r++] = 2;
        
e[r++] = 3;
        
b.createBuffer();
        
b.createBuffer();
        
b.bindBuffer(b.ARRAY_BUFFERf);
        
b.bufferData(b.ARRAY_BUFFERdb.STATIC_DRAW);
        
b.bindBuffer(b.ELEMENT_ARRAY_BUFFERg);
        
b.bufferData(b.ELEMENT_ARRAY_BUFFEReb.STATIC_DRAW);
        
b.createTexture();
        
b.createTexture();
        
b.bindTexture(b.TEXTURE_2Dh);
        
b.texImage2D(b.TEXTURE_2D0b.RGB16160b.RGBb.UNSIGNED_BYTEnull);
        
b.texParameteri(b.TEXTURE_2D,
            
b.TEXTURE_WRAP_Sb.CLAMP_TO_EDGE);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_WRAP_Tb.CLAMP_TO_EDGE);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_MAG_FILTERb.NEAREST);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_MIN_FILTERb.NEAREST);
        
b.bindTexture(b.TEXTURE_2Di);
        
b.texImage2D(b.TEXTURE_2D0b.RGBA16160b.RGBAb.UNSIGNED_BYTEnull);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_WRAP_Sb.CLAMP_TO_EDGE);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_WRAP_Tb.CLAMP_TO_EDGE);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_MAG_FILTERb.NEAREST);
        
b.texParameteri(b.TEXTURE_2Db.TEXTURE_MIN_FILTERb.NEAREST);
        if (
b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS) <= 0) {
            
false;
            
a(THREE.ShaderFlares.lensFlare)
        } else {
            
true;
            
a(THREE.ShaderFlares.lensFlareVertexTexture)
        }
        
= {};
        
= {};
        
m.vertex b.getAttribLocation(l"position");
        
m.uv b.getAttribLocation(l"uv");
        
n.renderType b.getUniformLocation(l"renderType");
        
n.map b.getUniformLocation(l"map");
        
n.occlusionMap b.getUniformLocation(l"occlusionMap");
        
n.opacity b.getUniformLocation(l"opacity");
        
n.color b.getUniformLocation(l,
            
"color");
        
n.scale b.getUniformLocation(l"scale");
        
n.rotation b.getUniformLocation(l"rotation");
        
n.screenPosition b.getUniformLocation(l"screenPosition");
        
false
    
};
    
this.render = function(ades) {
        var 
a.__webglFlares,
            
a.length;
        if (
w) {
            var 
= new THREE.Vector3,
                
e,
                
0.5,
                
0.5,
                
16 s,
                
= new THREE.Vector2(vD),
                
= new THREE.Vector3(110),
                
= new THREE.Vector2(11),
                
n,
                
m;
            
b.useProgram(l);
            if (!
p) {
                
b.enableVertexAttribArray(m.vertex);
                
b.enableVertexAttribArray(m.uv);
                
true
            
}
            
b.uniform1i(J.occlusionMap0);
            
b.uniform1i(J.map,
                
1);
            
b.bindBuffer(b.ARRAY_BUFFERf);
            
b.vertexAttribPointer(D.vertex2b.FLOATfalse160);
            
b.vertexAttribPointer(D.uv2b.FLOATfalse168);
            
b.bindBuffer(b.ELEMENT_ARRAY_BUFFERg);
            
b.disable(b.CULL_FACE);
            
b.depthMask(false);
            var 
MOXBF;
            for (
0wM++) {
                
16 s;
                
z.set(vD);
                
a[M];
                
t.set(B.matrixWorld.elements[12], B.matrixWorld.elements[13], B.matrixWorld.elements[14]);
                
d.matrixWorldInverse.multiplyVector3(t);
                
d.projectionMatrix.multiplyVector3(t);
                
u.copy(t);
                
G.u.x;
                
G.u.C;
                if (
|| G.&& G.&& G.&&
                    
G.s) {
                    
b.activeTexture(b.TEXTURE1);
                    
b.bindTexture(b.TEXTURE_2Dh);
                    
b.copyTexImage2D(b.TEXTURE_2D0b.RGBG.8G.816160);
                    
b.uniform1i(J.renderType0);
                    
b.uniform2f(J.scalez.xz.y);
                    
b.uniform3f(J.screenPositionu.xu.yu.z);
                    
b.disable(b.BLEND);
                    
b.enable(b.DEPTH_TEST);
                    
b.drawElements(b.TRIANGLES6b.UNSIGNED_SHORT0);
                    
b.activeTexture(b.TEXTURE0);
                    
b.bindTexture(b.TEXTURE_2Di);
                    
b.copyTexImage2D(b.TEXTURE_2D0b.RGBAG.8G.816160);
                    
b.uniform1i(J.renderType1);
                    
b.disable(b.DEPTH_TEST);
                    
b.activeTexture(b.TEXTURE1);
                    
b.bindTexture(b.TEXTURE_2Dh);
                    
b.drawElements(b.TRIANGLES6b.UNSIGNED_SHORT0);
                    
B.positionScreen.copy(u);
                    
B.customUpdateCallback B.customUpdateCallback(B) : B.updateLensFlares();
                    
b.uniform1i(J.renderType2);
                    
b.enable(b.BLEND);
                    
0;
                    for (
B.lensFlares.lengthXO++) {
                        
B.lensFlares[O];
                        if (
F.opacity 0.0010 && F.scale 0.0010) {
                            
u.F.x;
                            
u.F.y;
                            
u.F.z;
                            
F.size F.scale s;
                            
z.v;
                            
z.D;
                            
b.uniform3f(J.screenPositionu.xu.yu.z);
                            
b.uniform2f(J.scalez.xz.y);
                            
b.uniform1f(J.rotationF.rotation);
                            
b.uniform1f(J.opacityF.opacity);
                            
b.uniform3f(J.colorF.color.rF.color.gF.color.b);
                            
c.setBlending(F.blendingF.blendEquationF.blendSrcF.blendDst);
                            
c.setTexture(F.texture1);
                            
b.drawElements(b.TRIANGLES6b.UNSIGNED_SHORT0)
                        }
                    }
                }
            }
            
b.enable(b.CULL_FACE);
            
b.enable(b.DEPTH_TEST);
            
b.depthMask(true)
        }
    }
};
THREE.ShadowMapPlugin = function() {
    var 
abcde= new THREE.Frustum,
        
= new THREE.Matrix4,
        
= new THREE.Vector3,
        
= new THREE.Vector3;
    
this.init = function(f) {
        
f.context;
        
f;
        var 
THREE.ShaderLib.depthRGBA,
            
THREE.UniformsUtils.clone(f.uniforms);
        
= new THREE.ShaderMaterial({
            
fragmentShaderf.fragmentShader,
            
vertexShaderf.vertexShader,
            
uniformsg
        
});
        
= new THREE.ShaderMaterial({
            
fragmentShaderf.fragmentShader,
            
vertexShaderf.vertexShader,
            
uniformsg,
            
morphTargetstrue
        
});
        
= new THREE.ShaderMaterial({
            
fragmentShaderf.fragmentShader,
            
vertexShaderf.vertexShader,
            
uniformsg,
            
skinningtrue
        
});
        
c._shadowPass true;
        
d._shadowPass true;
        
e._shadowPass true
    
};
    
this.render = function(ac) {
        
b.shadowMapEnabled && b.shadowMapAutoUpdate && this.update(ac)
    };
    
this.update = function(jl) {
        var 
mnproqswt= [];
        
0;
        
a.clearColor(1111);
        
a.disable(a.BLEND);
        
a.enable(a.CULL_FACE);
        
b.shadowMapCullFrontFaces a.cullFace(a.FRONT) : a.cullFace(a.BACK);
        
b.setDepthTest(true);
        
0;
        for (
j.__lights.lengthnm++) {
            
j.__lights[m];
            if (
p.castShadow)
                if (
instanceof THREE.DirectionalLight &&
                    
p.shadowCascade)
                    for (
0p.shadowCascadeCounto++) {
                        var 
x;
                        if (
p.shadowCascadeArray[o]) p.shadowCascadeArray[o];
                        else {
                            
p;
                            
o;
                            
= new THREE.DirectionalLight;
                            
x.isVirtual true;
                            
x.onlyShadow true;
                            
x.castShadow true;
                            
x.shadowCameraNear t.shadowCameraNear;
                            
x.shadowCameraFar t.shadowCameraFar;
                            
x.shadowCameraLeft t.shadowCameraLeft;
                            
x.shadowCameraRight t.shadowCameraRight;
                            
x.shadowCameraBottom t.shadowCameraBottom;
                            
x.shadowCameraTop t.shadowCameraTop;
                            
x.shadowCameraVisible t.shadowCameraVisible;
                            
x.shadowDarkness t.shadowDarkness;
                            
x.shadowBias t.shadowCascadeBias[s];
                            
x.shadowMapWidth t.shadowCascadeWidth[s];
                            
x.shadowMapHeight t.shadowCascadeHeight[s];
                            
x.pointsWorld = [];
                            
x.pointsFrustum = [];
                            
x.pointsWorld;
                            
x.pointsFrustum;
                            for (var 
08C++) {
                                
w[C] = new THREE.Vector3;
                                
q[C] = new THREE.Vector3
                            
}
                            
t.shadowCascadeNearZ[s];
                            
t.shadowCascadeFarZ[s];
                            
q[0].set(-1, -1w);
                            
q[1].set(1, -1w);
                            
q[2].set(-11w);
                            
q[3].set(11w);
                            
q[4].set(-1, -1t);
                            
q[5].set(1, -1t);
                            
q[6].set(-11t);
                            
q[7].set(11t);
                            
x.originalCamera l;
                            
= new THREE.Gyroscope;
                            
q.position p.shadowCascadeOffset;
                            
q.add(x);
                            
q.add(x.target);
                            
l.add(q);
                            
p.shadowCascadeArray[o] = x;
                            
console.log("Created virtualLight"x)
                        }
                        
p;
                        
o;
                        
s.shadowCascadeArray[w];
                        
t.position.copy(s.position);
                        
t.target.position.copy(s.target.position);
                        
t.lookAt(t.target);
                        
t.shadowCameraVisible s.shadowCameraVisible;
                        
t.shadowDarkness s.shadowDarkness;
                        
t.shadowBias s.shadowCascadeBias[w];
                        
s.shadowCascadeNearZ[w];
                        
s.shadowCascadeFarZ[w];
                        
t.pointsFrustum;
                        
t[0].q;
                        
t[1].q;
                        
t[2].q;
                        
t[3].q;
                        
t[4].s;
                        
t[5].s;
                        
t[6].s;
                        
t[7].s;
                        
v[r] = x;
                        
r++
                    } else {
                        
v[r] = p;
                        
r++
                    }
        }
        
=
            
0;
        for (
v.lengthnm++) {
            
v[m];
            if (!
p.shadowMap) {
                
p.shadowMap = new THREE.WebGLRenderTarget(p.shadowMapWidthp.shadowMapHeight, {
                    
minFilterTHREE.LinearFilter,
                    
magFilterTHREE.LinearFilter,
                    
formatTHREE.RGBAFormat
                
});
                
p.shadowMapSize = new THREE.Vector2(p.shadowMapWidthp.shadowMapHeight);
                
p.shadowMatrix = new THREE.Matrix4
            
}
            if (!
p.shadowCamera) {
                if (
instanceof THREE.SpotLightp.shadowCamera = new THREE.PerspectiveCamera(p.shadowCameraFovp.shadowMapWidth p.shadowMapHeightp.shadowCameraNearp.shadowCameraFar);
                else if (
instanceof THREE.DirectionalLightp.shadowCamera = new THREE.OrthographicCamera(p.shadowCameraLeftp.shadowCameraRightp.shadowCameraTopp.shadowCameraBottomp.shadowCameraNearp.shadowCameraFar);
                else {
                    
console.error("Unsupported light type for shadow");
                    continue
                }
                
j.add(p.shadowCamera);
                
b.autoUpdateScene && j.updateMatrixWorld()
            }
            if (
p.shadowCameraVisible && !p.cameraHelper) {
                
p.cameraHelper = new THREE.CameraHelper(p.shadowCamera);
                
p.shadowCamera.add(p.cameraHelper)
            }
            if (
p.isVirtual && x.originalCamera == l) {
                
l;
                
p.shadowCamera;
                
p.pointsFrustum;
                
p.pointsWorld;
                
h.set(InfinityInfinityInfinity);
                
i.set(-Infinity, -Infinity, -Infinity);
                for (
08s++) {
                    
t[s];
                    
w.copy(q[s]);
                    
THREE.ShadowMapPlugin.__projector.unprojectVector(wo);
                    
r.matrixWorldInverse.multiplyVector3(w);
                    if (
w.h.xh.w.x;
                    if (
w.i.xi.w.x;
                    if (
w.h.yh.w.y;
                    if (
w.i.yi.w.y;
                    if (
w.h.zh.w.z;
                    if (
w.i.zi.w.z
                
}
                
r.left h.x;
                
r.right i.x;
                
r.top i.y;
                
r.bottom h.y;
                
r.updateProjectionMatrix()
            }
            
p.shadowMap;
            
p.shadowMatrix;
            
p.shadowCamera;
            
o.position.copy(p.matrixWorld.getPosition());
            
o.lookAt(p.target.matrixWorld.getPosition());
            
o.updateMatrixWorld();
            
o.matrixWorldInverse.getInverse(o.matrixWorld);
            if (
p.cameraHelperp.cameraHelper.lines.visible p.shadowCameraVisible;
            
p.shadowCameraVisible && p.cameraHelper.update();
            
q.set(0.5000.500.500.5000.50.50001);
            
q.multiplySelf(o.projectionMatrix);
            
q.multiplySelf(o.matrixWorldInverse);
            if (!
o._viewMatrixArrayo._viewMatrixArray = new Float32Array(16);
            if (!
o._projectionMatrixArrayo._projectionMatrixArray = new Float32Array(16);
            
o.matrixWorldInverse.flattenToArray(o._viewMatrixArray);
            
o.projectionMatrix.flattenToArray(o._projectionMatrixArray);
            
g.multiply(o.projectionMatrixo.matrixWorldInverse);
            
f.setFromMatrix(g);
            
b.setRenderTarget(r);
            
b.clear();
            
j.__webglObjects;
            
0;
            for (
t.lengthrp++) {
                
t[p];
                
s.object;
                
s.render false;
                if (
q.visible && q.castShadow && (!(instanceof THREE.Mesh) || !q.frustumCulled || f.contains(q))) {
                    
q._modelViewMatrix.multiply(o.matrixWorldInverseq.matrixWorld);
                    
s.render true
                
}
            }
            
0;
            for (
t.lengthrp++) {
                
t[p];
                if (
s.render) {
                    
s.object;
                    
s.buffer;
                    
q.customDepthMaterial ?
                        
q.customDepthMaterial q.geometry.morphTargets.length instanceof THREE.SkinnedMesh c;
                    
instanceof THREE.BufferGeometry b.renderBufferDirect(oj.__lightsnullwsq) : b.renderBuffer(oj.__lightsnullwsq)
                }
            }
            
j.__webglObjectsImmediate;
            
0;
            for (
t.lengthrp++) {
                
t[p];
                
s.object;
                if (
q.visible && q.castShadow) {
                    
q._modelViewMatrix.multiply(o.matrixWorldInverseq.matrixWorld);
                    
b.renderImmediateObject(oj.__lightsnullcq)
                }
            }
        }
        
b.getClearColor();
        
b.getClearAlpha();
        
a.clearColor(m.rm.gm.bn);
        
a.enable(a.BLEND);
        
b.shadowMapCullFrontFaces && a.cullFace(a.BACK)
    }
};
THREE.ShadowMapPlugin.__projector = new THREE.Projector;
THREE.SpritePlugin = function() {
    function 
a(ab) {
        return 
b.a.z
    
}
    var 
bcdefghijl;
    
this.init = function(a) {
        
a.context;
        
a;
        
= new Float32Array(16);
        
= new Uint16Array(6);
        
0;
        
d[a++] = -1;
        
d[a++] = -1;
        
d[a++] = 0;
        
d[a++] = 0;
        
d[a++] = 1;
        
d[a++] = -1;
        
d[a++] = 1;
        
d[a++] = 0;
        
d[a++] = 1;
        
d[a++] = 1;
        
d[a++] = 1;
        
d[a++] = 1;
        
d[a++] = -1;
        
d[a++] = 1;
        
d[a++] = 0;
        
d[a++] = 1;
        
0;
        
e[a++] = 0;
        
e[a++] = 1;
        
e[a++] = 2;
        
e[a++] = 0;
        
e[a++] = 2;
        
e[a++] = 3;
        
b.createBuffer();
        
b.createBuffer();
        
b.bindBuffer(b.ARRAY_BUFFERf);
        
b.bufferData(b.ARRAY_BUFFERdb.STATIC_DRAW);
        
b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,
            
g);
        
b.bufferData(b.ELEMENT_ARRAY_BUFFEReb.STATIC_DRAW);
        var 
THREE.ShaderSprite.sprite,
            
b.createProgram(),
            
b.createShader(b.FRAGMENT_SHADER),
            
b.createShader(b.VERTEX_SHADER);
        
b.shaderSource(pa.fragmentShader);
        
b.shaderSource(ra.vertexShader);
        
b.compileShader(p);
        
b.compileShader(r);
        
b.attachShader(np);
        
b.attachShader(nr);
        
b.linkProgram(n);
        
n;
        
= {};
        
= {};
        
i.position b.getAttribLocation(h"position");
        
i.uv b.getAttribLocation(h"uv");
        
j.uvOffset b.getUniformLocation(h"uvOffset");
        
j.uvScale b.getUniformLocation(h,
            
"uvScale");
        
j.rotation b.getUniformLocation(h"rotation");
        
j.scale b.getUniformLocation(h"scale");
        
j.alignment b.getUniformLocation(h"alignment");
        
j.color b.getUniformLocation(h"color");
        
j.map b.getUniformLocation(h"map");
        
j.opacity b.getUniformLocation(h"opacity");
        
j.useScreenCoordinates b.getUniformLocation(h"useScreenCoordinates");
        
j.affectedByDistance b.getUniformLocation(h"affectedByDistance");
        
j.screenPosition b.getUniformLocation(h"screenPosition");
        
j.modelViewMatrix b.getUniformLocation(h"modelViewMatrix");
        
j.projectionMatrix b.getUniformLocation(h"projectionMatrix");
        
false
    
};
    
this.render = function(depr) {
        var 
d.__webglSprites,
            
d.length;
        if (
o) {
            var 
i,
                
j,
                
p,
                
0.5,
                
0.5,
                
true;
            
b.useProgram(h);
            if (!
l) {
                
b.enableVertexAttribArray(q.position);
                
b.enableVertexAttribArray(q.uv);
                
true
            
}
            
b.disable(b.CULL_FACE);
            
b.enable(b.BLEND);
            
b.depthMask(true);
            
b.bindBuffer(b.ARRAY_BUFFERf);
            
b.vertexAttribPointer(q.position2b.FLOATfalse160);
            
b.vertexAttribPointer(q.uv2b.FLOATfalse168);
            
b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,
                
g);
            
b.uniformMatrix4fv(s.projectionMatrixfalsee._projectionMatrixArray);
            
b.activeTexture(b.TEXTURE0);
            
b.uniform1i(s.map0);
            for (var 
x= [], 0oq++) {
                
d[q];
                if (
x.visible && x.opacity !== 0)
                    if (
x.useScreenCoordinatesx.= -x.position.z;
                    else {
                        
x._modelViewMatrix.multiply(e.matrixWorldInversex.matrixWorld);
                        
x.= -x._modelViewMatrix.elements[14]
                    }
            }
            
d.sort(a);
            for (
0oq++) {
                
d[q];
                if (
x.visible && x.opacity !== && x.map && x.map.image && x.map.image.width) {
                    if (
x.useScreenCoordinates) {
                        
b.uniform1i(s.useScreenCoordinates1);
                        
b.uniform3f(s.screenPosition, (x.position.p) / p, (x.position.y) / tMath.max(0Math.min(1x.position.z)))
                    } else {
                        
b.uniform1i(s.useScreenCoordinates0);
                        
b.uniform1i(s.affectedByDistancex.affectedByDistance 0);
                        
b.uniformMatrix4fv(s.modelViewMatrixfalsex._modelViewMatrix.elements)
                    }
                    
x.map.image.width / (x.scaleByViewport 1);
                    
C[0] = x.scale.x;
                    
C[1] = x.scale.y;
                    
b.uniform2f(s.uvScalex.uvScale.xx.uvScale.y);
                    
b.uniform2f(s.uvOffsetx.uvOffset.xx.uvOffset.y);
                    
b.uniform2f(s.alignmentx.alignment.xx.alignment.y);
                    
b.uniform1f(s.opacityx.opacity);
                    
b.uniform3f(s.colorx.color.rx.color.gx.color.b);
                    
b.uniform1f(s.rotationx.rotation);
                    
b.uniform2fv(s.scaleC);
                    if (
x.mergeWith3D && !v) {
                        
b.enable(b.DEPTH_TEST);
                        
true
                    
} else if (!x.mergeWith3D && v) {
                        
b.disable(b.DEPTH_TEST);
                        
false
                    
}
                    
c.setBlending(x.blendingx.blendEquationx.blendSrcx.blendDst);
                    
c.setTexture(x.map0);
                    
b.drawElements(b.TRIANGLES6b.UNSIGNED_SHORT0)
                }
            }
            
b.enable(b.CULL_FACE);
            
b.enable(b.DEPTH_TEST);
            
b.depthMask(true)
        }
    }
};
THREE.DepthPassPlugin = function() {
    
this.enabled false;
    
this.renderTarget null;
    var 
abcd= new THREE.Frustum,
        
= new THREE.Matrix4;
    
this.init = function(e) {
        
e.context;
        
e;
        var 
THREE.ShaderLib.depthRGBA,
            
THREE.UniformsUtils.clone(e.uniforms);
        
= new THREE.ShaderMaterial({
            
fragmentShadere.fragmentShader,
            
vertexShadere.vertexShader,
            
uniformsf
        
});
        
= new THREE.ShaderMaterial({
            
fragmentShadere.fragmentShader,
            
vertexShadere.vertexShader,
            
uniformsf,
            
morphTargetstrue
        
});
        
c._shadowPass true;
        
d._shadowPass true
    
};
    
this.render =
        function(
ab) {
            
this.enabled && this.update(ab)
        };
    
this.update = function(gh) {
        var 
ijlmnp;
        
a.clearColor(1111);
        
a.disable(a.BLEND);
        
b.setDepthTest(true);
        
b.autoUpdateScene && g.updateMatrixWorld();
        if (!
h._viewMatrixArrayh._viewMatrixArray = new Float32Array(16);
        if (!
h._projectionMatrixArrayh._projectionMatrixArray = new Float32Array(16);
        
h.matrixWorldInverse.getInverse(h.matrixWorld);
        
h.matrixWorldInverse.flattenToArray(h._viewMatrixArray);
        
h.projectionMatrix.flattenToArray(h._projectionMatrixArray);
        
f.multiply(h.projectionMatrix,
            
h.matrixWorldInverse);
        
e.setFromMatrix(f);
        
b.setRenderTarget(this.renderTarget);
        
b.clear();
        
g.__webglObjects;
        
0;
        for (
p.lengthji++) {
            
p[i];
            
l.object;
            
l.render false;
            if (
n.visible && (!(instanceof THREE.Mesh) || !n.frustumCulled || e.contains(n))) {
                
n._modelViewMatrix.multiply(h.matrixWorldInversen.matrixWorld);
                
l.render true
            
}
        }
        
0;
        for (
p.lengthji++) {
            
p[i];
            if (
l.render) {
                
l.object;
                
l.buffer;
                
b.setObjectFaces(n);
                
n.customDepthMaterial n.customDepthMaterial n.geometry.morphTargets.length c;
                
instanceof
                
THREE.BufferGeometry b.renderBufferDirect(hg.__lightsnullmln) : b.renderBuffer(hg.__lightsnullmln)
            }
        }
        
g.__webglObjectsImmediate;
        
0;
        for (
p.lengthji++) {
            
p[i];
            
l.object;
            if (
n.visible && n.castShadow) {
                
n._modelViewMatrix.multiply(h.matrixWorldInversen.matrixWorld);
                
b.renderImmediateObject(hg.__lightsnullcn)
            }
        }
        
b.getClearColor();
        
b.getClearAlpha();
        
a.clearColor(i.ri.gi.bj);
        
a.enable(a.BLEND)
    }
};
THREE.ShaderFlares = {
    
lensFlareVertexTexture: {
        
vertexShader"uniform vec3 screenPosition;nuniform vec2 scale;nuniform float rotation;nuniform int renderType;nuniform sampler2D occlusionMap;nattribute vec2 position;nattribute vec2 uv;nvarying vec2 vUV;nvarying float vVisibility;nvoid main() {nvUV = uv;nvec2 pos = position;nif( renderType == 2 ) {nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ) +ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );nvVisibility = (       visibility.r / 9.0 ) *n( 1.0 - visibility.g / 9.0 ) *n(       visibility.b / 9.0 ) *n( 1.0 - visibility.a / 9.0 );npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;n}ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );n}",
        
fragmentShader"precision mediump float;nuniform sampler2D map;nuniform float opacity;nuniform int renderType;nuniform vec3 color;nvarying vec2 vUV;nvarying float vVisibility;nvoid main() {nif( renderType == 0 ) {ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );n} else if( renderType == 1 ) {ngl_FragColor = texture2D( map, vUV );n} else {nvec4 texture = texture2D( map, vUV );ntexture.a *= opacity * vVisibility;ngl_FragColor = texture;ngl_FragColor.rgb *= color;n}n}"
    
},
    
lensFlare: {
        
vertexShader"uniform vec3 screenPosition;nuniform vec2 scale;nuniform float rotation;nuniform int renderType;nattribute vec2 position;nattribute vec2 uv;nvarying vec2 vUV;nvoid main() {nvUV = uv;nvec2 pos = position;nif( renderType == 2 ) {npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;n}ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );n}",
        
fragmentShader"precision mediump float;nuniform sampler2D map;nuniform sampler2D occlusionMap;nuniform float opacity;nuniform int renderType;nuniform vec3 color;nvarying vec2 vUV;nvoid main() {nif( renderType == 0 ) {ngl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );n} else if( renderType == 1 ) {ngl_FragColor = texture2D( map, vUV );n} else {nfloat visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a +ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a +ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a +ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;nvisibility = ( 1.0 - visibility / 4.0 );nvec4 texture = texture2D( map, vUV );ntexture.a *= opacity * visibility;ngl_FragColor = texture;ngl_FragColor.rgb *= color;n}n}"
    
}
};
THREE.ShaderSprite = {
    
sprite: {
        
vertexShader"uniform int useScreenCoordinates;nuniform int affectedByDistance;nuniform vec3 screenPosition;nuniform mat4 modelViewMatrix;nuniform mat4 projectionMatrix;nuniform float rotation;nuniform vec2 scale;nuniform vec2 alignment;nuniform vec2 uvOffset;nuniform vec2 uvScale;nattribute vec2 position;nattribute vec2 uv;nvarying vec2 vUV;nvoid main() {nvUV = uvOffset + uv * uvScale;nvec2 alignedPosition = position + alignment;nvec2 rotatedPosition;nrotatedPosition.x = ( cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y ) * scale.x;nrotatedPosition.y = ( sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y ) * scale.y;nvec4 finalPosition;nif( useScreenCoordinates != 0 ) {nfinalPosition = vec4( screenPosition.xy + rotatedPosition, screenPosition.z, 1.0 );n} else {nfinalPosition = projectionMatrix * modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );nfinalPosition.xy += rotatedPosition * ( affectedByDistance == 1 ? 1.0 : finalPosition.z );n}ngl_Position = finalPosition;n}",
        
fragmentShader"precision mediump float;nuniform vec3 color;nuniform sampler2D map;nuniform float opacity;nvarying vec2 vUV;nvoid main() {nvec4 texture = texture2D( map, vUV );ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );n}"
    
}
};
?>
Онлайн: 0
Реклама