diff --git a/examples/15-shadowmaps-simple/fs_smsimple_draw.sc b/examples/15-shadowmaps-simple/fs_smsimple_draw.sc new file mode 100644 index 000000000..176030b30 --- /dev/null +++ b/examples/15-shadowmaps-simple/fs_smsimple_draw.sc @@ -0,0 +1,96 @@ +$input v_view, v_normal, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_lightPos; +SAMPLER2D(u_shadowMap, 4); + +vec2 lit(vec3 _ld, vec3 _n, vec3 _vd, float _exp) +{ + //diff + float ndotl = dot(_n, _ld); + + //spec + vec3 r = 2.0*ndotl*_n - _ld; //reflect(_ld, _n); + float rdotv = dot(r, _vd); + float spec = step(0.0, ndotl) * pow(max(0.0, rdotv), _exp) * (2.0 + _exp)/8.0; + + return max(vec2(ndotl, spec), 0.0); +} + +float hardShadow(sampler2D _sampler, vec4 _shadowCoord, float _bias) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w; + float occluder = unpackRgbaToFloat(texture2D(_sampler, texCoord) ); + + float visibility = step(receiver, occluder); + return visibility; +} + +float PCF(sampler2D _sampler, vec4 _shadowCoord, float _bias, vec2 _texelSize) +{ + float result = 0.0; + vec2 offset = _texelSize * _shadowCoord.w; + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 1.5) * offset, 0.0, 0.0), _bias); + + return result / 16.0; +} + +void main() +{ + const float shadowMapBias = 0.005; + const vec3 color = vec3_splat(1.0); + + vec3 v = v_view; + vec3 vd = -normalize(v); + vec3 n = v_normal; + vec3 l = u_lightPos.xyz; + vec3 ld = -normalize(l); + + vec2 lc = lit(ld, n, vd, 1.0); + + vec2 texelSize = vec2_splat(1.0/512.0); + float visibility = PCF(u_shadowMap, v_shadowcoord, shadowMapBias, texelSize); + + vec3 ambient = 0.1 * color; + vec3 brdf = (lc.x + lc.y) * color * visibility; + + vec3 final = toGamma(abs(ambient + brdf) ); + gl_FragColor.xyz = final; + gl_FragColor.w = 1.0; +} diff --git a/examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc b/examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc new file mode 100644 index 000000000..b77d2972e --- /dev/null +++ b/examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc @@ -0,0 +1,15 @@ +$input v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_position.z/v_position.w * 0.5 + 0.5; + gl_FragColor = packFloatToRgba(depth); +} + diff --git a/examples/15-shadowmaps-simple/hollowcube.obj b/examples/15-shadowmaps-simple/hollowcube.obj new file mode 100644 index 000000000..2980086ba --- /dev/null +++ b/examples/15-shadowmaps-simple/hollowcube.obj @@ -0,0 +1,934 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +g holeycube +v 1.500000 1.211657 0.000000 +v 1.500000 1.211656 1.209338 +v 1.236416 1.211656 1.209338 +v 1.236416 1.211657 0.000000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v 1.500000 -0.000000 1.209337 +v 1.500000 -1.211657 1.209337 +v 1.236416 -1.211657 1.209337 +v 1.236416 -0.000000 1.209337 +v 1.236416 -0.000000 1.500000 +v 1.236416 -1.211657 1.500000 +v 1.500000 -1.211657 1.500000 +v 1.500000 -0.000000 1.500000 +v 1.500000 0.000000 -1.500000 +v 1.500000 -1.211656 -1.500000 +v 1.236416 -1.211656 -1.500000 +v 1.236416 0.000000 -1.500000 +v -1.236416 0.000000 -1.500000 +v -1.236416 -1.211656 -1.500000 +v -1.500000 -1.211656 -1.500000 +v -1.500000 0.000000 -1.500000 +v -1.500000 -0.000000 1.500000 +v -1.500000 -1.211657 1.500000 +v -1.236416 -1.211657 1.500000 +v -1.236416 -0.000000 1.500000 +v -1.236416 -0.000000 1.209337 +v -1.236416 -1.211657 1.209337 +v -1.500000 -1.211657 1.209337 +v -1.500000 -0.000000 1.209337 +v -1.500000 1.211656 1.500000 +v -1.500000 1.211656 1.209338 +v -1.236416 1.211656 1.209338 +v -1.236416 1.211656 1.500000 +v -1.500000 1.211657 -1.500000 +v -1.236416 1.211657 -1.500000 +v 1.236416 1.211657 -1.500000 +v 1.500000 1.211657 -1.500000 +v 1.500000 1.211656 1.500000 +v 1.236416 1.211656 1.500000 +v 0.000000 -1.500000 1.209337 +v -1.236416 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 1.211656 1.209338 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 0.000000 1.211656 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v 0.000000 -1.500000 -1.500000 +v -1.236416 -1.500000 -1.500000 +v 0.000000 -1.211656 -1.500000 +v 0.000000 -1.500000 -1.209338 +v -1.236416 -1.500000 -1.209338 +v 1.236416 -1.211657 -0.000000 +v 1.236416 -1.211656 -1.209338 +v 1.236416 -1.500000 -1.209338 +v 1.236416 -1.500000 -0.000000 +v 1.500000 -1.500000 -0.000000 +v 1.500000 -1.500000 -1.209338 +v 1.500000 -1.211656 -1.209338 +v 1.500000 -1.211657 -0.000000 +v 1.500000 -1.500000 1.209337 +v 1.236416 -1.500000 1.209337 +v -1.236416 -1.500000 -0.000000 +v -1.500000 -1.500000 1.209337 +v -1.500000 -1.500000 -0.000000 +v -1.500000 -1.500000 -1.209338 +v -1.236416 -1.211657 -0.000000 +v -1.236416 -1.211656 -1.209338 +v -1.500000 -1.211656 -1.209338 +v -1.500000 -1.211657 -0.000000 +v -1.500000 1.211657 0.000000 +v -1.500000 1.211657 -1.209337 +v -1.236416 1.211657 -1.209337 +v -1.236416 1.211657 0.000000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 1.236416 1.211657 -1.209337 +v 1.500000 1.211657 -1.209337 +v 1.236416 0.000000 -1.209337 +v 1.500000 0.000000 -1.209337 +v -1.500000 0.000000 -1.209337 +v -1.236416 0.000000 -1.209337 +v 0.000000 -1.211656 -1.209338 +v 0.000000 1.211657 -1.209337 +v 0.000000 1.211657 -1.500000 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v -1.500000 -1.500000 1.500000 +v -1.236416 -1.500000 1.500000 +v 0.000000 -1.211657 1.500000 +v -1.500000 -1.500000 -1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.500000 1.500000 +v 1.500000 -1.500000 1.500000 +v 1.236416 -1.500000 -1.500000 +v 1.500000 -1.500000 -1.500000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v 0.000000 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 -1.211657 1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.211657 1.209337 +v -1.236416 -1.211657 1.209337 +v 0.000000 -1.211657 1.209337 +vn 0.000000 -1.000000 -0.000001 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000001 +vn 0.000000 -0.000001 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 1//1 2//1 3//1 4//1 +f 2//2 1//2 5//2 6//2 +f 4//3 3//3 7//3 8//3 +f 9//4 10//4 11//4 12//4 +f 13//5 14//5 15//5 16//5 +f 17//4 18//4 19//4 20//4 +f 21//4 22//4 23//4 24//4 +f 25//5 26//5 27//5 28//5 +f 29//4 30//4 31//4 32//4 +f 32//3 31//3 26//3 25//3 +f 25//3 33//3 34//3 32//3 +f 32//6 34//6 35//6 29//6 +f 28//5 36//5 33//5 25//5 +f 24//4 37//4 38//4 21//4 +f 20//4 39//4 40//4 17//4 +f 16//5 41//5 42//5 13//5 +f 12//6 3//6 2//6 9//6 +f 9//2 2//2 41//2 16//2 +f 13//3 42//3 3//3 12//3 +f 43//4 44//4 30//4 45//4 +f 46//4 35//4 47//4 48//4 +f 99//7 100//7 133//7 132//7 +f 50//5 49//5 36//5 51//5 +f 51//5 42//5 52//5 50//5 +f 100//7 102//7 135//7 133//7 +f 48//4 7//4 3//4 46//4 +f 46//8 3//8 42//8 51//8 +f 49//5 53//5 33//5 36//5 +f 42//5 41//5 54//5 52//5 +f 86//7 53//7 122//7 128//7 +f 41//2 2//2 6//2 54//2 +f 55//4 56//4 22//4 57//4 +f 58//8 59//8 56//8 55//8 +f 60//3 61//3 62//3 63//3 +f 64//2 65//2 66//2 67//2 +f 67//9 66//9 61//9 60//9 +f 63//8 62//8 65//8 64//8 +f 64//8 68//8 69//8 63//8 +f 70//8 44//8 71//8 72//8 +f 72//8 73//8 59//8 70//8 +f 74//9 75//9 76//9 77//9 +f 78//8 79//8 80//8 81//8 +f 5//7 87//7 129//7 113//7 +f 54//7 6//7 114//7 123//7 +f 48//7 47//7 117//7 118//7 +f 87//7 103//7 136//7 129//7 +f 90//8 1//8 4//8 89//8 +f 1//2 90//2 87//2 5//2 +f 8//3 88//3 89//3 4//3 +f 20//3 19//3 61//3 91//3 +f 92//2 66//2 18//2 17//2 +f 91//10 61//10 66//10 92//10 +f 93//10 76//10 75//10 94//10 +f 24//3 23//3 76//3 93//3 +f 94//2 75//2 22//2 21//2 +f 21//2 38//2 80//2 94//2 +f 57//11 22//11 75//11 95//11 +f 96//8 80//8 38//8 97//8 +f 93//3 79//3 37//3 24//3 +f 94//5 80//5 79//5 93//5 +f 92//5 90//5 89//5 91//5 +f 17//2 40//2 90//2 92//2 +f 91//3 89//3 39//3 20//3 +f 95//5 75//5 59//5 58//5 +f 98//5 83//5 80//5 96//5 +f 103//7 101//7 134//7 136//7 +f 97//4 38//4 100//4 99//4 +f 99//4 101//4 39//4 97//4 +f 6//7 5//7 113//7 114//7 +f 96//5 89//5 88//5 98//5 +f 97//8 39//8 89//8 96//8 +f 38//4 37//4 102//4 100//4 +f 101//4 103//4 40//4 39//4 +f 7//7 48//7 118//7 115//7 +f 103//2 87//2 90//2 40//2 +f 26//3 31//3 71//3 104//3 +f 71//8 44//8 105//8 104//8 +f 28//2 27//2 30//2 29//2 +f 29//2 35//2 36//2 28//2 +f 74//2 30//2 44//2 70//2 +f 72//3 71//3 31//3 77//3 +f 77//11 31//11 30//11 74//11 +f 81//1 35//1 34//1 78//1 +f 78//3 34//3 86//3 85//3 +f 82//2 47//2 35//2 81//2 +f 45//11 30//11 27//11 106//11 +f 51//8 36//8 35//8 46//8 +f 102//7 84//7 126//7 135//7 +f 53//3 86//3 34//3 33//3 +f 107//3 73//3 76//3 23//3 +f 107//8 56//8 59//8 73//8 +f 70//2 59//2 75//2 74//2 +f 77//3 76//3 73//3 72//3 +f 85//3 84//3 79//3 78//3 +f 81//2 80//2 83//2 82//2 +f 88//7 8//7 116//7 130//7 +f 37//3 79//3 84//3 102//3 +f 60//11 11//11 10//11 67//11 +f 67//2 10//2 68//2 64//2 +f 63//3 69//3 11//3 60//3 +f 16//2 15//2 10//2 9//2 +f 12//3 11//3 14//3 13//3 +f 108//8 105//8 44//8 43//8 +f 106//5 27//5 105//5 108//5 +f 108//5 109//5 14//5 106//5 +f 43//8 69//8 109//8 108//8 +f 45//4 11//4 69//4 43//4 +f 106//11 14//11 11//11 45//11 +f 27//5 26//5 104//5 105//5 +f 109//5 110//5 15//5 14//5 +f 110//8 109//8 69//8 68//8 +f 110//2 68//2 10//2 15//2 +f 57//4 19//4 111//4 55//4 +f 55//8 111//8 62//8 58//8 +f 58//5 62//5 61//5 95//5 +f 95//11 61//11 19//11 57//11 +f 56//4 107//4 23//4 22//4 +f 19//4 18//4 112//4 111//4 +f 65//8 62//8 111//8 112//8 +f 18//2 66//2 65//2 112//2 +f 118//11 117//11 119//11 120//11 +f 120//11 121//11 115//11 118//11 +f 114//11 115//11 121//11 123//11 +f 124//11 125//11 126//11 127//11 +f 127//11 128//11 117//11 124//11 +f 116//11 115//11 114//11 113//11 +f 113//11 129//11 130//11 116//11 +f 132//11 133//11 125//11 131//11 +f 131//11 130//11 134//11 132//11 +f 136//11 134//11 130//11 129//11 +f 122//11 119//11 117//11 128//11 +f 126//11 125//11 133//11 135//11 +f 82//7 83//7 125//7 124//7 +f 49//7 50//7 120//7 119//7 +f 84//7 85//7 127//7 126//7 +f 50//7 52//7 121//7 120//7 +f 52//7 54//7 123//7 121//7 +f 53//7 49//7 119//7 122//7 +f 8//7 7//7 115//7 116//7 +f 85//7 86//7 128//7 127//7 +f 83//7 98//7 131//7 125//7 +f 47//7 82//7 124//7 117//7 +f 101//7 99//7 132//7 134//7 +f 98//7 88//7 130//7 131//7 +f 108//7 106//7 139//7 140//7 +f 45//7 43//7 137//7 138//7 +f 106//7 45//7 138//7 139//7 +f 43//7 108//7 140//7 137//7 +f 30//7 45//7 143//7 142//7 +f 45//7 11//7 141//7 143//7 +g holeycube.001 +v 0.037848 0.053616 0.680965 +v 0.414385 -0.152030 0.676229 +v 0.382376 -0.209100 0.609416 +v 0.005839 -0.003453 0.614153 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.558694 0.119124 0.375479 +v 0.703003 0.390278 0.074730 +v 0.670994 0.333208 0.007917 +v 0.526685 0.062054 0.308667 +v 0.617185 0.012627 0.307529 +v 0.761494 0.283781 0.006779 +v 0.793503 0.340851 0.073591 +v 0.649194 0.069697 0.374341 +v -0.284880 0.579845 0.386090 +v -0.140571 0.850998 0.085340 +v -0.172580 0.793929 0.018528 +v -0.316889 0.522775 0.319277 +v -0.617185 -0.012627 -0.307529 +v -0.472876 0.258527 -0.608278 +v -0.504885 0.201457 -0.675091 +v -0.649194 -0.069697 -0.374341 +v 0.284880 -0.579845 -0.386090 +v 0.429189 -0.308690 -0.686840 +v 0.461198 -0.251621 -0.620027 +v 0.316889 -0.522775 -0.319277 +v 0.226389 -0.473348 -0.318139 +v 0.370698 -0.202194 -0.618889 +v 0.338689 -0.259263 -0.685701 +v 0.194380 -0.530418 -0.384952 +v 0.140571 -0.850998 -0.085340 +v 0.050071 -0.801571 -0.084202 +v 0.082080 -0.744502 -0.017389 +v 0.172580 -0.793929 -0.018528 +v -0.793503 -0.340851 -0.073591 +v -0.761494 -0.283781 -0.006779 +v -0.461198 0.251621 0.620027 +v -0.429189 0.308690 0.686840 +v 0.504885 -0.201457 0.675091 +v 0.472876 -0.258527 0.608278 +v 0.555187 0.130035 -0.377057 +v 0.405040 -0.137666 -0.690460 +v 0.520846 0.065507 -0.305486 +v 0.232228 -0.476801 0.296014 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.322728 -0.526228 0.294875 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.288386 0.590756 -0.366446 +v -0.438534 0.323055 -0.679849 +v -0.322728 0.526228 -0.294875 +v -0.197886 0.541329 -0.367584 +v -0.348034 0.273628 -0.680987 +v 0.294457 0.538855 0.012653 +v -0.082080 0.744502 0.017389 +v -0.047738 0.809030 -0.054181 +v 0.328799 0.603383 -0.058918 +v 0.360808 0.660452 0.007895 +v -0.015729 0.866099 0.012631 +v -0.050071 0.801571 0.084202 +v 0.326466 0.595925 0.079466 +v 0.737345 0.454805 0.003159 +v 0.705335 0.397736 -0.063654 +v 0.028503 0.067981 -0.685724 +v 0.373030 -0.194736 -0.757272 +v -0.003506 0.010911 -0.752536 +v -0.380043 0.216558 -0.747800 +v -0.005839 0.003453 -0.614153 +v -0.382376 0.209100 -0.609416 +v -0.414385 0.152030 -0.676229 +v -0.037848 -0.053616 -0.680965 +v -0.326466 -0.595925 -0.079466 +v -0.703003 -0.390278 -0.074730 +v -0.670994 -0.333208 -0.007917 +v -0.294457 -0.538855 -0.012653 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.370698 0.202194 0.618889 +v -0.338689 0.259263 0.685701 +v -0.226389 0.473348 0.318139 +v -0.194380 0.530418 0.384952 +v -0.558694 -0.119124 -0.375479 +v -0.526685 -0.062054 -0.308667 +v -0.232228 0.476801 -0.296014 +v -0.520846 -0.065507 0.305486 +v -0.611346 -0.016080 0.306624 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.463531 -0.244163 -0.758410 +v 0.495540 -0.187093 -0.691598 +v 0.611346 0.016080 -0.306624 +v -0.470543 0.265985 -0.746662 +v 0.645688 0.080608 -0.378195 +v 0.795836 0.348309 -0.064792 +v 0.827845 0.405378 0.002021 +v -0.138238 0.858457 -0.053043 +v -0.106229 0.915526 0.013769 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.555187 0.130035 -0.377057 +v 0.520846 0.065507 -0.305486 +v 0.611346 0.016080 -0.306624 +v 0.645688 0.080608 -0.378195 +v 0.670994 0.333208 0.007917 +v 0.370698 -0.202194 -0.618889 +v 0.520846 0.065507 -0.305486 +vn 0.335692 0.630762 -0.699607 +vn 0.342281 0.610259 0.714442 +vn -0.342282 -0.610259 -0.714442 +vn -0.877584 0.479296 0.011038 +vn 0.877584 -0.479296 -0.011038 +vn -0.877584 0.479295 0.011038 +vn -0.342281 -0.610259 -0.714442 +vn -0.877584 0.479295 0.011039 +vn 0.877584 -0.479295 -0.011038 +vn 0.335693 0.630761 -0.699607 +vn -0.335692 -0.630762 0.699607 +vn 0.342282 0.610259 0.714442 +vn 0.877584 -0.479295 -0.011039 +vn -0.335693 -0.630761 0.699607 +vn -0.877584 0.479296 0.011039 +vn 0.335693 0.630761 -0.699608 +vn 0.877584 -0.479296 -0.011039 +vn -0.335693 -0.630761 0.699608 +s off +f 144//12 145//12 146//12 147//12 +f 145//13 144//13 148//13 149//13 +f 147//14 146//14 150//14 151//14 +f 152//15 153//15 154//15 155//15 +f 156//16 157//16 158//16 159//16 +f 160//15 161//15 162//15 163//15 +f 164//17 165//17 166//17 167//17 +f 168//16 169//16 170//16 171//16 +f 172//15 173//15 174//15 175//15 +f 175//18 174//18 169//18 168//18 +f 168//14 176//14 177//14 175//14 +f 175//19 177//19 178//19 172//19 +f 171//16 179//16 176//16 168//16 +f 167//15 180//15 181//15 164//15 +f 163//15 182//15 183//15 160//15 +f 159//20 184//20 185//20 156//20 +f 155//19 146//19 145//19 152//19 +f 152//13 145//13 184//13 159//13 +f 156//18 185//18 146//18 155//18 +f 186//15 187//15 173//15 188//15 +f 189//15 178//15 190//15 191//15 +f 242//7 243//7 276//7 275//7 +f 193//16 192//16 179//16 194//16 +f 194//16 185//16 195//16 193//16 +f 243//7 245//7 278//7 276//7 +f 191//15 150//15 146//15 189//15 +f 189//21 146//21 185//21 194//21 +f 192//16 196//16 176//16 179//16 +f 185//16 184//16 197//16 195//16 +f 229//7 196//7 265//7 271//7 +f 184//13 145//13 149//13 197//13 +f 198//15 199//15 165//15 200//15 +f 201//21 202//21 199//21 198//21 +f 203//18 204//18 205//18 206//18 +f 207//13 208//13 209//13 210//13 +f 210//22 209//22 204//22 203//22 +f 206//21 205//21 208//21 207//21 +f 207//21 211//21 212//21 206//21 +f 213//21 187//21 214//21 215//21 +f 215//21 216//21 202//21 213//21 +f 217//22 218//22 219//22 220//22 +f 221//21 222//21 223//21 224//21 +f 148//7 230//7 272//7 256//7 +f 197//7 149//7 257//7 266//7 +f 191//7 190//7 260//7 261//7 +f 230//7 246//7 279//7 272//7 +f 233//21 144//21 147//21 232//21 +f 144//13 233//13 230//13 148//13 +f 151//14 231//14 232//14 147//14 +f 163//18 162//18 204//18 234//18 +f 235//23 209//23 161//23 160//23 +f 234//24 204//24 209//24 235//24 +f 236//24 219//24 218//24 237//24 +f 167//18 166//18 219//18 236//18 +f 237//13 218//13 165//13 164//13 +f 164//13 181//13 223//13 237//13 +f 200//25 165//25 218//25 238//25 +f 239//21 223//21 181//21 240//21 +f 236//14 222//14 180//14 167//14 +f 237//16 223//16 222//16 236//16 +f 235//16 233//16 232//16 234//16 +f 160//13 183//13 233//13 235//13 +f 234//18 232//18 182//18 163//18 +f 238//16 218//16 202//16 201//16 +f 241//16 226//16 223//16 239//16 +f 246//7 244//7 277//7 279//7 +f 240//15 181//15 243//15 242//15 +f 242//15 244//15 182//15 240//15 +f 149//7 148//7 256//7 257//7 +f 239//16 232//16 231//16 241//16 +f 240//21 182//21 232//21 239//21 +f 181//26 180//26 245//26 243//26 +f 244//15 246//15 183//15 182//15 +f 150//7 191//7 261//7 258//7 +f 246//13 230//13 233//13 183//13 +f 169//18 174//18 214//18 247//18 +f 214//21 187//21 248//21 247//21 +f 171//13 170//13 173//13 172//13 +f 172//13 178//13 179//13 171//13 +f 217//23 173//23 187//23 213//23 +f 215//18 214//18 174//18 220//18 +f 220//25 174//25 173//25 217//25 +f 224//12 178//12 177//12 221//12 +f 221//18 177//18 229//18 228//18 +f 225//13 190//13 178//13 224//13 +f 188//25 173//25 170//25 249//25 +f 194//21 179//21 178//21 189//21 +f 245//7 227//7 269//7 278//7 +f 196//14 229//14 177//14 176//14 +f 250//18 216//18 219//18 166//18 +f 250//27 199//27 202//27 216//27 +f 213//23 202//23 218//23 217//23 +f 220//18 219//18 216//18 215//18 +f 228//18 227//18 222//18 221//18 +f 224//13 223//13 226//13 225//13 +f 231//7 151//7 259//7 273//7 +f 180//14 222//14 227//14 245//14 +f 203//25 154//25 153//25 210//25 +f 210//13 153//13 211//13 207//13 +f 206//18 212//18 154//18 203//18 +f 159//23 158//23 153//23 152//23 +f 155//18 154//18 157//18 156//18 +f 251//21 248//21 187//21 186//21 +f 249//16 170//16 248//16 251//16 +f 251//16 252//16 157//16 249//16 +f 186//21 212//21 252//21 251//21 +f 188//15 154//15 212//15 186//15 +f 249//25 157//25 154//25 188//25 +f 170//16 169//16 247//16 248//16 +f 252//28 253//28 158//28 157//28 +f 253//21 252//21 212//21 211//21 +f 253//23 211//23 153//23 158//23 +f 200//15 162//15 254//15 198//15 +f 198//21 254//21 205//21 201//21 +f 201//16 205//16 204//16 238//16 +f 238//25 204//25 162//25 200//25 +f 199//15 250//15 166//15 165//15 +f 162//15 161//15 255//15 254//15 +f 208//21 205//21 254//21 255//21 +f 161//23 209//23 208//23 255//23 +f 261//25 260//25 262//25 263//25 +f 263//25 264//25 258//25 261//25 +f 257//29 258//29 264//29 266//29 +f 267//25 268//25 269//25 270//25 +f 270//25 271//25 260//25 267//25 +f 259//25 258//25 257//25 256//25 +f 256//25 272//25 273//25 259//25 +f 275//25 276//25 268//25 274//25 +f 274//25 273//25 277//25 275//25 +f 279//25 277//25 273//25 272//25 +f 265//25 262//25 260//25 271//25 +f 269//25 268//25 276//25 278//25 +f 225//7 226//7 268//7 267//7 +f 192//7 193//7 263//7 262//7 +f 227//7 228//7 270//7 269//7 +f 193//7 195//7 264//7 263//7 +f 195//7 197//7 266//7 264//7 +f 196//7 192//7 262//7 265//7 +f 151//7 150//7 258//7 259//7 +f 228//7 229//7 271//7 270//7 +f 226//7 241//7 274//7 268//7 +f 190//7 225//7 267//7 260//7 +f 244//7 242//7 275//7 277//7 +f 241//7 231//7 273//7 274//7 +f 251//7 249//7 282//7 283//7 +f 188//7 186//7 280//7 281//7 +f 249//7 188//7 281//7 282//7 +f 186//7 251//7 283//7 280//7 +f 173//7 188//7 286//7 285//7 +f 188//7 154//7 284//7 286//7 +g holeycube.002 +v 0.369385 2.003562 1.792544 +v 0.963329 0.880686 2.925211 +v 0.707927 0.635014 2.815589 +v 0.113983 1.757890 1.682922 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v 2.047380 0.275193 1.756502 +v 3.131433 -0.330301 0.587792 +v 2.876031 -0.575973 0.478171 +v 1.791978 0.029521 1.646880 +v 1.934732 -0.240361 1.919116 +v 3.018785 -0.845855 0.750406 +v 3.274187 -0.600183 0.860028 +v 2.190134 0.005311 2.028738 +v 0.716742 2.790825 -0.781068 +v 1.800794 2.185331 -1.949777 +v 1.545392 1.939659 -2.059399 +v 0.461340 2.545153 -0.890690 +v -1.934732 0.240361 -1.919116 +v -0.850680 -0.365133 -3.087824 +v -1.106082 -0.610805 -3.197446 +v -2.190134 -0.005311 -2.028738 +v -0.716742 -2.790825 0.781068 +v 0.367311 -3.396319 -0.387641 +v 0.622713 -3.150647 -0.278019 +v -0.461340 -2.545153 0.890690 +v -0.604093 -2.275271 0.618455 +v 0.479959 -2.880765 -0.550255 +v 0.224557 -3.126437 -0.659877 +v -0.859495 -2.520943 0.508833 +v -1.800794 -2.185331 1.949777 +v -1.943547 -1.915450 1.677542 +v -1.688145 -1.669778 1.787164 +v -1.545392 -1.939659 2.059399 +v -3.274187 0.600183 -0.860028 +v -3.018785 0.845855 -0.750406 +v -0.622713 3.150647 0.278019 +v -0.367311 3.396319 0.387641 +v 1.106082 0.610805 3.197446 +v 0.850680 0.365133 3.087824 +v 1.935972 -1.872461 -0.314165 +v 0.737936 -3.024857 -0.828377 +v 1.677995 -1.728369 -0.036042 +v -0.490109 -0.517382 2.301377 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v -0.347356 -0.787263 2.573611 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v 0.605333 0.643171 -2.851735 +v -0.592703 -0.509225 -3.365948 +v 0.347356 0.787263 -2.573611 +v 0.748086 0.373290 -2.579500 +v -0.449950 -0.779106 -3.093713 +v 2.282089 0.546902 -0.654497 +v 1.688145 1.669778 -1.787164 +v 1.946122 1.525685 -2.065288 +v 2.540065 0.402810 -0.932619 +v 2.795467 0.648482 -0.822998 +v 2.201524 1.771358 -1.955666 +v 1.943547 1.915450 -1.677542 +v 2.537491 0.792574 -0.544875 +v 3.389409 -0.474393 0.309670 +v 3.134007 -0.720065 0.200048 +v 0.143993 -1.901982 -1.961045 +v 0.482534 -3.270529 -0.937999 +v -0.111409 -2.147654 -2.070667 +v -0.705351 -1.024778 -3.203335 +v -0.113983 -1.757890 -1.682922 +v -0.707927 -0.635014 -2.815589 +v -0.963329 -0.880686 -2.925211 +v -0.369385 -2.003562 -1.792544 +v -2.537491 -0.792574 0.544875 +v -3.131433 0.330301 -0.587792 +v -2.876031 0.575973 -0.478171 +v -2.282089 -0.546902 0.654497 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -0.479959 2.880765 0.550255 +v -0.224557 3.126437 0.659877 +v 0.604093 2.275271 -0.618455 +v 0.859495 2.520943 -0.508833 +v -2.047380 -0.275193 -1.756502 +v -1.791978 -0.029521 -1.646880 +v 0.490109 0.517382 -2.301377 +v -1.677995 1.728369 0.036042 +v -1.820749 1.998251 -0.236193 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 0.625287 -3.540411 -0.665764 +v 0.880689 -3.294739 -0.556142 +v 1.820749 -1.998251 0.236193 +v -0.848105 -0.754897 -3.475569 +v 2.078725 -2.142343 -0.041929 +v 3.276761 -0.989947 0.472284 +v 3.532163 -0.744275 0.581905 +v 1.803369 1.795566 -2.337522 +v 2.058771 2.041239 -2.227901 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 1.935972 -1.872461 -0.314165 +v 1.677995 -1.728369 -0.036042 +v 1.820749 -1.998251 0.236193 +v 2.078725 -2.142343 -0.041929 +v 2.876031 -0.575973 0.478171 +v 0.479959 -2.880765 -0.550255 +v 1.677995 -1.728369 -0.036042 +vn 0.635737 -0.355088 -0.685384 +vn 0.688513 0.662283 0.295519 +vn -0.688513 -0.662283 -0.295518 +vn -0.348983 0.659767 -0.665521 +vn 0.348982 -0.659767 0.665521 +vn -0.348982 0.659767 -0.665521 +vn 0.348982 -0.659768 0.665521 +vn -0.688513 -0.662283 -0.295519 +vn 0.348983 -0.659767 0.665521 +vn -0.348982 0.659768 -0.665521 +vn 0.688513 0.662283 0.295518 +vn 0.635737 -0.355089 -0.685383 +vn -0.635737 0.355088 0.685384 +vn 0.688512 0.662283 0.295519 +vn -0.635737 0.355089 0.685383 +vn -0.688512 -0.662283 -0.295519 +vn 0.635737 -0.355089 -0.685384 +vn -0.635737 0.355089 0.685384 +s off +f 287//30 288//30 289//30 290//30 +f 288//31 287//31 291//31 292//31 +f 290//32 289//32 293//32 294//32 +f 295//33 296//33 297//33 298//33 +f 299//34 300//34 301//34 302//34 +f 303//33 304//33 305//33 306//33 +f 307//35 308//35 309//35 310//35 +f 311//36 312//36 313//36 314//36 +f 315//35 316//35 317//35 318//35 +f 318//37 317//37 312//37 311//37 +f 311//37 319//37 320//37 318//37 +f 318//33 320//33 321//33 315//33 +f 314//38 322//38 319//38 311//38 +f 310//35 323//35 324//35 307//35 +f 306//39 325//39 326//39 303//39 +f 302//34 327//34 328//34 299//34 +f 298//33 289//33 288//33 295//33 +f 295//40 288//40 327//40 302//40 +f 299//37 328//37 289//37 298//37 +f 329//33 330//33 316//33 331//33 +f 332//33 321//33 333//33 334//33 +f 385//7 386//7 419//7 418//7 +f 336//38 335//38 322//38 337//38 +f 337//38 328//38 338//38 336//38 +f 386//7 388//7 421//7 419//7 +f 334//33 293//33 289//33 332//33 +f 332//41 289//41 328//41 337//41 +f 335//38 339//38 319//38 322//38 +f 328//38 327//38 340//38 338//38 +f 372//7 339//7 408//7 414//7 +f 327//31 288//31 292//31 340//31 +f 341//33 342//33 308//33 343//33 +f 344//41 345//41 342//41 341//41 +f 346//32 347//32 348//32 349//32 +f 350//40 351//40 352//40 353//40 +f 353//42 352//42 347//42 346//42 +f 349//41 348//41 351//41 350//41 +f 350//41 354//41 355//41 349//41 +f 356//41 330//41 357//41 358//41 +f 358//41 359//41 345//41 356//41 +f 360//42 361//42 362//42 363//42 +f 364//41 365//41 366//41 367//41 +f 291//7 373//7 415//7 399//7 +f 340//7 292//7 400//7 409//7 +f 334//7 333//7 403//7 404//7 +f 373//7 389//7 422//7 415//7 +f 376//41 287//41 290//41 375//41 +f 287//43 376//43 373//43 291//43 +f 294//37 374//37 375//37 290//37 +f 306//37 305//37 347//37 377//37 +f 378//31 352//31 304//31 303//31 +f 377//38 347//38 352//38 378//38 +f 379//38 362//38 361//38 380//38 +f 310//32 309//32 362//32 379//32 +f 380//31 361//31 308//31 307//31 +f 307//31 324//31 366//31 380//31 +f 343//44 308//44 361//44 381//44 +f 382//41 366//41 324//41 383//41 +f 379//32 365//32 323//32 310//32 +f 380//38 366//38 365//38 379//38 +f 378//34 376//34 375//34 377//34 +f 303//31 326//31 376//31 378//31 +f 377//37 375//37 325//37 306//37 +f 381//38 361//38 345//38 344//38 +f 384//38 369//38 366//38 382//38 +f 389//7 387//7 420//7 422//7 +f 383//33 324//33 386//33 385//33 +f 385//33 387//33 325//33 383//33 +f 292//7 291//7 399//7 400//7 +f 382//38 375//38 374//38 384//38 +f 383//41 325//41 375//41 382//41 +f 324//33 323//33 388//33 386//33 +f 387//35 389//35 326//35 325//35 +f 293//7 334//7 404//7 401//7 +f 389//43 373//43 376//43 326//43 +f 312//45 317//45 357//45 390//45 +f 357//46 330//46 391//46 390//46 +f 314//31 313//31 316//31 315//31 +f 315//31 321//31 322//31 314//31 +f 360//31 316//31 330//31 356//31 +f 358//45 357//45 317//45 363//45 +f 363//44 317//44 316//44 360//44 +f 367//30 321//30 320//30 364//30 +f 364//32 320//32 372//32 371//32 +f 368//40 333//40 321//40 367//40 +f 331//44 316//44 313//44 392//44 +f 337//46 322//46 321//46 332//46 +f 388//7 370//7 412//7 421//7 +f 339//32 372//32 320//32 319//32 +f 393//37 359//37 362//37 309//37 +f 393//41 342//41 345//41 359//41 +f 356//40 345//40 361//40 360//40 +f 363//37 362//37 359//37 358//37 +f 371//32 370//32 365//32 364//32 +f 367//40 366//40 369//40 368//40 +f 374//7 294//7 402//7 416//7 +f 323//32 365//32 370//32 388//32 +f 346//44 297//44 296//44 353//44 +f 353//40 296//40 354//40 350//40 +f 349//32 355//32 297//32 346//32 +f 302//40 301//40 296//40 295//40 +f 298//37 297//37 300//37 299//37 +f 394//41 391//41 330//41 329//41 +f 392//38 313//38 391//38 394//38 +f 394//38 395//38 300//38 392//38 +f 329//41 355//41 395//41 394//41 +f 331//33 297//33 355//33 329//33 +f 392//44 300//44 297//44 331//44 +f 313//34 312//34 390//34 391//34 +f 395//38 396//38 301//38 300//38 +f 396//41 395//41 355//41 354//41 +f 396//40 354//40 296//40 301//40 +f 343//33 305//33 397//33 341//33 +f 341//41 397//41 348//41 344//41 +f 344//38 348//38 347//38 381//38 +f 381//47 347//47 305//47 343//47 +f 342//33 393//33 309//33 308//33 +f 305//33 304//33 398//33 397//33 +f 351//41 348//41 397//41 398//41 +f 304//40 352//40 351//40 398//40 +f 404//44 403//44 405//44 406//44 +f 406//44 407//44 401//44 404//44 +f 400//44 401//44 407//44 409//44 +f 410//44 411//44 412//44 413//44 +f 413//44 414//44 403//44 410//44 +f 402//44 401//44 400//44 399//44 +f 399//44 415//44 416//44 402//44 +f 418//44 419//44 411//44 417//44 +f 417//44 416//44 420//44 418//44 +f 422//47 420//47 416//47 415//47 +f 408//44 405//44 403//44 414//44 +f 412//44 411//44 419//44 421//44 +f 368//7 369//7 411//7 410//7 +f 335//7 336//7 406//7 405//7 +f 370//7 371//7 413//7 412//7 +f 336//7 338//7 407//7 406//7 +f 338//7 340//7 409//7 407//7 +f 339//7 335//7 405//7 408//7 +f 294//7 293//7 401//7 402//7 +f 371//7 372//7 414//7 413//7 +f 369//7 384//7 417//7 411//7 +f 333//7 368//7 410//7 403//7 +f 387//7 385//7 418//7 420//7 +f 384//7 374//7 416//7 417//7 +f 394//7 392//7 425//7 426//7 +f 331//7 329//7 423//7 424//7 +f 392//7 331//7 424//7 425//7 +f 329//7 394//7 426//7 423//7 +f 316//7 331//7 429//7 428//7 +f 331//7 297//7 427//7 429//7 diff --git a/examples/15-shadowmaps-simple/makefile b/examples/15-shadowmaps-simple/makefile new file mode 100644 index 000000000..6525ae16a --- /dev/null +++ b/examples/15-shadowmaps-simple/makefile @@ -0,0 +1,22 @@ +# +# Copyright 2013 Dario Manesku. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime +BUILD_DIR=../../.build + +include $(BGFX_DIR)/premake/shader.mk + +geometry: ../runtime/meshes/column.bin + +../runtime/meshes/column.bin: column.obj + ../../tools/bin/geometryc -f column.obj -o ../runtime/meshes/column.bin --packnormal 1 + +rebuild: + @make -s --no-print-directory TARGET=0 clean all + @make -s --no-print-directory TARGET=1 clean all + @make -s --no-print-directory TARGET=2 clean all + @make -s --no-print-directory TARGET=3 clean all + @make -s --no-print-directory TARGET=4 clean all diff --git a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp new file mode 100644 index 000000000..0a22c2d38 --- /dev/null +++ b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp @@ -0,0 +1,670 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include +#include +#include + +#include "common.h" + +#include +#include +#include +#include "entry/entry.h" +#include "fpumath.h" + +#define RENDER_PASS_0 0 +#define RENDER_PASS_1 1 + +uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w) +{ + union + { + uint32_t ui32; + uint8_t arr[4]; + } un; + + un.arr[0] = _x; + un.arr[1] = _y; + un.arr[2] = _z; + un.arr[3] = _w; + + return un.ui32; +} + +uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f) +{ + const uint8_t xx = uint8_t(_x*127.0f + 128.0f); + const uint8_t yy = uint8_t(_y*127.0f + 128.0f); + const uint8_t zz = uint8_t(_z*127.0f + 128.0f); + const uint8_t ww = uint8_t(_w*127.0f + 128.0f); + return packUint32(xx, yy, zz, ww); +} + +struct PosNormalVertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_normal; +}; + +static const float s_texcoord = 5.0f; +static const uint32_t s_numHPlaneVertices = 4; +static PosNormalVertex s_hplaneVertices[s_numHPlaneVertices] = +{ + { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f) }, + { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f) }, + { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f) }, + { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f) }, +}; + +static const uint32_t s_numPlaneIndices = 6; +static const uint16_t s_planeIndices[s_numPlaneIndices] = +{ + 0, 1, 2, + 1, 3, 2, +}; + +static const char* s_shaderPath = NULL; +static bool s_flipV = false; +static float s_texelHalf = 0.0f; +static bgfx::RenderTargetHandle s_rtShadowMap; +static bgfx::UniformHandle u_shadowMap; + +static void shaderFilePath(char* _out, const char* _name) +{ + strcpy(_out, s_shaderPath); + strcat(_out, _name); + strcat(_out, ".bin"); +} + +long int fsize(FILE* _file) +{ + long int pos = ftell(_file); + fseek(_file, 0L, SEEK_END); + long int size = ftell(_file); + fseek(_file, pos, SEEK_SET); + return size; +} + +static const bgfx::Memory* load(const char* _filePath) +{ + FILE* file = fopen(_filePath, "rb"); + if (NULL != file) + { + uint32_t size = (uint32_t)fsize(file); + const bgfx::Memory* mem = bgfx::alloc(size+1); + size_t ignore = fread(mem->data, 1, size, file); + BX_UNUSED(ignore); + fclose(file); + mem->data[mem->size-1] = '\0'; + return mem; + } + + return NULL; +} + +static const bgfx::Memory* loadShader(const char* _name) +{ + char filePath[512]; + shaderFilePath(filePath, _name); + return load(filePath); +} + +static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName) +{ + const bgfx::Memory* mem; + + // Load vertex shader. + mem = loadShader(_vsName); + bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem); + + // Load fragment shader. + mem = loadShader(_fsName); + bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem); + + // Create program from shaders. + bgfx::ProgramHandle program = bgfx::createProgram(vsh, fsh); + + // We can destroy vertex and fragment shader here since + // their reference is kept inside bgfx after calling createProgram. + // Vertex and fragment shader will be destroyed once program is + // destroyed. + bgfx::destroyVertexShader(vsh); + bgfx::destroyFragmentShader(fsh); + + return program; +} + +void mtxScaleRotateTranslate(float* _result + , const float _scaleX + , const float _scaleY + , const float _scaleZ + , const float _rotX + , const float _rotY + , const float _rotZ + , const float _translateX + , const float _translateY + , const float _translateZ + ) +{ + float mtxRotateTranslate[16]; + float mtxScale[16]; + + mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ); + mtxRotateTranslate[12] = _translateX; + mtxRotateTranslate[13] = _translateY; + mtxRotateTranslate[14] = _translateZ; + + memset(mtxScale, 0, sizeof(float)*16); + mtxScale[0] = _scaleX; + mtxScale[5] = _scaleY; + mtxScale[10] = _scaleZ; + mtxScale[15] = 1.0f; + + mtxMul(_result, mtxScale, mtxRotateTranslate); +} + +struct Aabb +{ + float m_min[3]; + float m_max[3]; +}; + +struct Obb +{ + float m_mtx[16]; +}; + +struct Sphere +{ + float m_center[3]; + float m_radius; +}; + +struct Primitive +{ + uint32_t m_startIndex; + uint32_t m_numIndices; + uint32_t m_startVertex; + uint32_t m_numVertices; + + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; +}; + +typedef std::vector PrimitiveArray; + +struct Group +{ + Group() + { + reset(); + } + + void reset() + { + m_vbh.idx = bgfx::invalidHandle; + m_ibh.idx = bgfx::invalidHandle; + m_prims.clear(); + } + + bgfx::VertexBufferHandle m_vbh; + bgfx::IndexBufferHandle m_ibh; + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; + PrimitiveArray m_prims; +}; +; + +struct Mesh +{ + void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) + { + Group group; + const bgfx::Memory* mem; + uint32_t size; + + size = _numVertices*_decl.getStride(); + mem = bgfx::makeRef(_vertices, size); + group.m_vbh = bgfx::createVertexBuffer(mem, _decl); + + size = _numIndices*2; + mem = bgfx::makeRef(_indices, size); + group.m_ibh = bgfx::createIndexBuffer(mem); + + //TODO: + // group.m_sphere = ... + // group.m_aabb = ... + // group.m_obb = ... + // group.m_prims = ... + + m_groups.push_back(group); + } + + void load(const char* _filePath) + { +#define BGFX_CHUNK_MAGIC_VB BX_MAKEFOURCC('V', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) + + bx::CrtFileReader reader; + reader.open(_filePath); + + Group group; + + uint32_t chunk; + while (4 == bx::read(&reader, chunk) ) + { + switch (chunk) + { + case BGFX_CHUNK_MAGIC_VB: + { + bx::read(&reader, group.m_sphere); + bx::read(&reader, group.m_aabb); + bx::read(&reader, group.m_obb); + + bx::read(&reader, m_decl); + uint16_t stride = m_decl.getStride(); + + uint16_t numVertices; + bx::read(&reader, numVertices); + const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); + bx::read(&reader, mem->data, mem->size); + + group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); + } + break; + + case BGFX_CHUNK_MAGIC_IB: + { + uint32_t numIndices; + bx::read(&reader, numIndices); + const bgfx::Memory* mem = bgfx::alloc(numIndices*2); + bx::read(&reader, mem->data, mem->size); + group.m_ibh = bgfx::createIndexBuffer(mem); + } + break; + + case BGFX_CHUNK_MAGIC_PRI: + { + uint16_t len; + bx::read(&reader, len); + + std::string material; + material.resize(len); + bx::read(&reader, const_cast(material.c_str() ), len); + + uint16_t num; + bx::read(&reader, num); + + for (uint32_t ii = 0; ii < num; ++ii) + { + bx::read(&reader, len); + + std::string name; + name.resize(len); + bx::read(&reader, const_cast(name.c_str() ), len); + + Primitive prim; + bx::read(&reader, prim.m_startIndex); + bx::read(&reader, prim.m_numIndices); + bx::read(&reader, prim.m_startVertex); + bx::read(&reader, prim.m_numVertices); + bx::read(&reader, prim.m_sphere); + bx::read(&reader, prim.m_aabb); + bx::read(&reader, prim.m_obb); + + group.m_prims.push_back(prim); + } + + m_groups.push_back(group); + group.reset(); + } + break; + + default: + DBG("%08x at %d", chunk, reader.seek() ); + break; + } + } + + reader.close(); + } + + void unload() + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + bgfx::destroyVertexBuffer(group.m_vbh); + + if (bgfx::isValid(group.m_ibh) ) + { + bgfx::destroyIndexBuffer(group.m_ibh); + } + } + m_groups.clear(); + } + + void submit(uint8_t _view, float* _mtx, bgfx::ProgramHandle _program) + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + + // Set model matrix for rendering. + bgfx::setTransform(_mtx); + bgfx::setProgram(_program); + bgfx::setIndexBuffer(group.m_ibh); + bgfx::setVertexBuffer(group.m_vbh); + + // Set shadow map. + bgfx::setTexture(4, u_shadowMap, s_rtShadowMap); + + // Set render states. + bgfx::setState(0 + |BGFX_STATE_RGB_WRITE + |BGFX_STATE_ALPHA_WRITE + |BGFX_STATE_DEPTH_WRITE + |BGFX_STATE_DEPTH_TEST_LESS + |BGFX_STATE_CULL_CCW + |BGFX_STATE_MSAA + ); + + // Submit primitive for rendering. + bgfx::submit(_view); + } + } + + bgfx::VertexDecl m_decl; + typedef std::vector GroupArray; + GroupArray m_groups; +}; + +int _main_(int /*_argc*/, char** /*_argv*/) +{ + uint32_t width = 1280; + uint32_t height = 720; + uint32_t debug = BGFX_DEBUG_TEXT; + uint32_t reset = BGFX_RESET_VSYNC; + + bgfx::init(); + bgfx::reset(width, height, reset); + + // Enable debug text. + bgfx::setDebug(debug); + + // Setup root path for binary shaders. Shader binaries are different + // for each renderer. + switch (bgfx::getRendererType() ) + { + default: + case bgfx::RendererType::Direct3D9: + s_shaderPath = "shaders/dx9/"; + s_texelHalf = 0.5f; + break; + + case bgfx::RendererType::Direct3D11: + s_shaderPath = "shaders/dx11/"; + break; + + case bgfx::RendererType::OpenGL: + s_shaderPath = "shaders/glsl/"; + s_flipV = true; + break; + + case bgfx::RendererType::OpenGLES2: + case bgfx::RendererType::OpenGLES3: + s_shaderPath = "shaders/gles/"; + s_flipV = true; + break; + } + + // Uniforms. + u_shadowMap = bgfx::createUniform("u_shadowMap", bgfx::UniformType::Uniform1iv); + + bgfx::UniformHandle u_lightPos = bgfx::createUniform("u_lightPos", bgfx::UniformType::Uniform4fv); + bgfx::UniformHandle u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Uniform4x4fv); + + // Programs. + bgfx::ProgramHandle progPackDepth = loadProgram("vs_smsimple_packdepth", "fs_smsimple_packdepth"); + bgfx::ProgramHandle progDraw = loadProgram("vs_smsimple_draw", "fs_smsimple_draw"); + + // Vertex declarations. + bgfx::VertexDecl PosNormalDecl; + PosNormalDecl.begin(); + PosNormalDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + PosNormalDecl.add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true); + PosNormalDecl.end(); + + // Meshes. + Mesh bunnyMesh; + Mesh cubeMesh; + Mesh hollowcubeMesh; + Mesh hplaneMesh; + bunnyMesh.load("meshes/bunny.bin"); + cubeMesh.load("meshes/cube.bin"); + hollowcubeMesh.load("meshes/hollowcube.bin"); + hplaneMesh.load(s_hplaneVertices, s_numHPlaneVertices, PosNormalDecl, s_planeIndices, s_numPlaneIndices); + + // Render targets. + uint16_t shadowMapSize = 512; + s_rtShadowMap = bgfx::createRenderTarget(shadowMapSize, shadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D16); + + // Set view and projection matrices. + float view[16]; + float proj[16]; + + const float eye[3] = { 0.0f, 30.0f, -60.0f }; + const float at[3] = { 0.0f, 5.0f, 0.0f }; + mtxLookAt(view, eye, at); + + const float aspect = float(int32_t(width) ) / float(int32_t(height) ); + mtxProj(proj, 60.0f, aspect, 0.1f, 1000.0f); + + // Time acumulators. + float timeAccumulatorLight = 0.0f; + float timeAccumulatorScene = 0.0f; + + entry::MouseState mouseState; + while (!entry::processEvents(width, height, debug, reset, &mouseState) ) + { + // Time. + int64_t now = bx::getHPCounter(); + static int64_t last = now; + const int64_t frameTime = now - last; + last = now; + const double freq = double(bx::getHPFrequency() ); + const double toMs = 1000.0/freq; + const float deltaTime = float(frameTime/freq); + + // Update time accumulators. + timeAccumulatorLight += deltaTime; + timeAccumulatorScene += deltaTime; + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/15-shadowmaps-simple"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow maps example."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + // Setup lights. + float lightPos[4]; + lightPos[0] = -cos(timeAccumulatorLight); + lightPos[1] = -1.0f; + lightPos[2] = -sin(timeAccumulatorLight); + lightPos[3] = 0.0f; + + bgfx::setUniform(u_lightPos, lightPos); + + // Setup instance matrices. + float mtxFloor[16]; + mtxScaleRotateTranslate(mtxFloor + , 30.0f //scaleX + , 30.0f //scaleY + , 30.0f //scaleZ + , 0.0f //rotX + , 0.0f //rotY + , 0.0f //rotZ + , 0.0f //translateX + , 0.0f //translateY + , 0.0f //translateZ + ); + + float mtxBunny[16]; + mtxScaleRotateTranslate(mtxBunny + , 5.0f + , 5.0f + , 5.0f + , 0.0f + , float(M_PI) - timeAccumulatorScene + , 0.0f + , 15.0f + , 5.0f + , 0.0f + ); + + float mtxHollowcube[16]; + mtxScaleRotateTranslate(mtxHollowcube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , 0.0f + , 10.0f + , 0.0f + ); + + float mtxCube[16]; + mtxScaleRotateTranslate(mtxCube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , -15.0f + , 5.0f + , 0.0f + ); + + // Define matrices. + float screenView[16]; + float screenProj[16]; + mtxIdentity(screenView); + mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f); + + float lightView[16]; + float lightProj[16]; + + const float eye[3] = + { + -lightPos[0], + -lightPos[1], + -lightPos[2], + }; + const float at[3] = { 0.0f, 0.0f, 0.0f }; + mtxLookAt(lightView, eye, at); + + const float area = 30.0f; + mtxOrtho(lightProj, -area, area, -area, area, -100.0f, 100.0f); + + /** + * RENDER_PASS_0 - Craft shadow map. + * RENDER_PASS_1 - Draw scene. + */ + bgfx::setViewRect(RENDER_PASS_0, 0, 0, shadowMapSize, shadowMapSize); + bgfx::setViewRect(RENDER_PASS_1, 0, 0, width, height); + + bgfx::setViewTransform(RENDER_PASS_0, lightView, lightProj); + bgfx::setViewTransform(RENDER_PASS_1, view, proj); + + bgfx::setViewRenderTarget(RENDER_PASS_0, s_rtShadowMap); + + // Clear backbuffer and shadowmap rendertarget at beginning. + bgfx::setViewClearMask(0x3, BGFX_CLEAR_COLOR_BIT | BGFX_CLEAR_DEPTH_BIT, 0x303030ff, 1.0f, 0); + bgfx::submitMask(0x3); + + // Render. + + { // Craft shadow map. + + hplaneMesh.submit(RENDER_PASS_0, mtxFloor, progPackDepth); + bunnyMesh.submit(RENDER_PASS_0, mtxBunny, progPackDepth); + hollowcubeMesh.submit(RENDER_PASS_0, mtxHollowcube, progPackDepth); + cubeMesh.submit(RENDER_PASS_0, mtxCube, progPackDepth); + } + + { // Draw Scene. + + float mtxShadow[16]; //lightviewProjCrop + float lightMtx[16]; //modelLightviewProjCrop + + const float s = (s_flipV) ? 1.0f : -1.0f; //sign + + const float mtxCrop[16] = + { + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.5f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, + }; + + float mtxTmp[16]; + mtxMul(mtxTmp, lightProj, mtxCrop); + mtxMul(mtxShadow, lightView, mtxTmp); + + // Floor. + mtxMul(lightMtx, mtxFloor, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + hplaneMesh.submit(RENDER_PASS_1, mtxFloor, progDraw); + + // Bunny. + mtxMul(lightMtx, mtxBunny, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + bunnyMesh.submit(RENDER_PASS_1, mtxBunny, progDraw); + + // Hollow cube. + mtxMul(lightMtx, mtxHollowcube, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + hollowcubeMesh.submit(RENDER_PASS_1, mtxHollowcube, progDraw); + + // Cube. + mtxMul(lightMtx, mtxCube, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + cubeMesh.submit(RENDER_PASS_1, mtxCube, progDraw); + } + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + + } + + bunnyMesh.unload(); + cubeMesh.unload(); + hollowcubeMesh.unload(); + hplaneMesh.unload(); + + bgfx::destroyProgram(progPackDepth); + bgfx::destroyProgram(progDraw); + + bgfx::destroyRenderTarget(s_rtShadowMap); + + bgfx::destroyUniform(u_shadowMap); + bgfx::destroyUniform(u_lightPos); + bgfx::destroyUniform(u_lightMtx); + + // Shutdown bgfx. + bgfx::shutdown(); + + return 0; +} diff --git a/examples/15-shadowmaps-simple/varying.def.sc b/examples/15-shadowmaps-simple/varying.def.sc new file mode 100644 index 000000000..abd336b22 --- /dev/null +++ b/examples/15-shadowmaps-simple/varying.def.sc @@ -0,0 +1,7 @@ +vec3 v_view : TEXCOORD0 = vec3(0.0, 0.0, 0.0); +vec4 v_shadowcoord : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_position : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); +vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0); + +vec3 a_position : POSITION; +vec4 a_normal : NORMAL; diff --git a/examples/15-shadowmaps-simple/vs_smsimple_draw.sc b/examples/15-shadowmaps-simple/vs_smsimple_draw.sc new file mode 100644 index 000000000..20d6f0943 --- /dev/null +++ b/examples/15-shadowmaps-simple/vs_smsimple_draw.sc @@ -0,0 +1,24 @@ +$input a_position, a_normal +$output v_view, v_normal, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform mat4 u_lightMtx; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + const float shadowMapOffset = 0.001; + vec3 posOffset = a_position + normal.xyz * shadowMapOffset; + v_shadowcoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); +} diff --git a/examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc b/examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc new file mode 100644 index 000000000..dc1024b62 --- /dev/null +++ b/examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc @@ -0,0 +1,15 @@ +$input a_position +$output v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_position = gl_Position; +} diff --git a/examples/16-shadowmaps/common.sh b/examples/16-shadowmaps/common.sh new file mode 100644 index 000000000..29785b94e --- /dev/null +++ b/examples/16-shadowmaps/common.sh @@ -0,0 +1,235 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +float linstep(float _edge0, float _edge1, float _x) +{ + return clamp((_x-_edge0)/(_edge1-_edge0), 0.0, 1.0); +} + +float attenuation(float _dist, vec3 _attn) +{ + return 1.0 / ( _attn.x //const + + _attn.y * _dist //linear + + _attn.z * _dist * _dist //quadrantic + ); +} + +float spot(float _ldotsd, float _inner, float _outer) +{ + float inner = cos(radians(_inner)); + float outer = cos(radians(min(_outer, _inner - 0.001))); + float spot = clamp((_ldotsd - inner) / (outer - inner), 0.0, 1.0); + return spot; +} + +vec2 lit(vec3 _ld, vec3 _n, vec3 _vd, float _exp) +{ + //diff + float ndotl = dot(_n, _ld); + + //spec + vec3 r = 2.0*ndotl*_n - _ld; // reflect(_ld, _n); + float rdotv = dot(r, _vd); + float spec = step(0.0, ndotl) * pow(max(0.0, rdotv), _exp) * (2.0 + _exp)/8.0; + + return max(vec2(ndotl, spec), 0.0); +} + +struct Light +{ + vec3 l; + vec3 ld; + float attn; +}; + +Light evalLight(vec3 _v, vec4 _l, vec3 _spotDirection, float _spotInner, float _spotOuter, vec3 _attnParams) +{ + Light light; + + //directional + light.l = _l.xyz; + light.ld = -normalize(light.l); + light.attn = 1.0; + + if (0.0 != _l.w) //point or spot + { + light.l = _l.xyz - _v; + light.ld = normalize(light.l); + + float ldotsd = max(0.0, dot(-light.ld, normalize(_spotDirection))); + float falloff = spot(ldotsd, _spotOuter, _spotInner); + light.attn = attenuation(length(light.l), _attnParams) * mix(falloff, 1.0, step(90, _spotOuter)); + } + + return light; +} + +float texcoordInRange(vec2 _texcoord) +{ + bool inRange = all(greaterThan(_texcoord, vec2_splat(0.0))) + && all(lessThan (_texcoord, vec2_splat(1.0))) + ; + + return float(inRange); +} + +float hardShadow(sampler2D _sampler, vec4 _shadowCoord, float _bias) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w; + float occluder = unpackRgbaToFloat(texture2D(_sampler, texCoord) ); + + float visibility = step(receiver, occluder); + return visibility; +} + +float PCF(sampler2D _sampler, vec4 _shadowCoord, float _bias, vec4 _pcfParams, vec2 _texelSize) +{ + float result = 0.0; + vec2 offset = _pcfParams.zw * _texelSize * _shadowCoord.w; + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 1.5) * offset, 0.0, 0.0), _bias); + + return result / 16.0; +} + +float VSM(sampler2D _sampler, vec4 _shadowCoord, float _bias, float _depthMultiplier, float _minVariance) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w * _depthMultiplier; + vec4 rgba = texture2D(_sampler, texCoord); + vec2 occluder = vec2(unpackHalfFloat(rgba.rg), unpackHalfFloat(rgba.ba)) * _depthMultiplier; + + if (receiver < occluder.x) + { + return 1.0; + } + + float variance = max(occluder.y - (occluder.x*occluder.x), _minVariance); + float d = receiver - occluder.x; + + float visibility = variance / (variance + d*d); + + return visibility; +} + +float ESM(sampler2D _sampler, vec4 _shadowCoord, float _bias, float _depthMultiplier) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w; + float occluder = unpackRgbaToFloat(texture2D(_sampler, texCoord) ); + + float visibility = clamp(exp(_depthMultiplier * (occluder-receiver) ), 0.0, 1.0); + + return visibility; +} + + +vec4 blur9(sampler2D _sampler, vec2 _uv0, vec4 _uv1, vec4 _uv2, vec4 _uv3, vec4 _uv4) +{ +#define _BLUR9_WEIGHT_0 1.0 +#define _BLUR9_WEIGHT_1 0.9 +#define _BLUR9_WEIGHT_2 0.55 +#define _BLUR9_WEIGHT_3 0.18 +#define _BLUR9_WEIGHT_4 0.1 +#define _BLUR9_NORMALIZE (_BLUR9_WEIGHT_0+2.0*(_BLUR9_WEIGHT_1+_BLUR9_WEIGHT_2+_BLUR9_WEIGHT_3+_BLUR9_WEIGHT_4) ) +#define BLUR9_WEIGHT(_x) (_BLUR9_WEIGHT_##_x/_BLUR9_NORMALIZE) + + float blur; + blur = unpackRgbaToFloat(texture2D(_sampler, _uv0) * BLUR9_WEIGHT(0)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv1.xy) * BLUR9_WEIGHT(1)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv1.zw) * BLUR9_WEIGHT(1)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv2.xy) * BLUR9_WEIGHT(2)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv2.zw) * BLUR9_WEIGHT(2)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv3.xy) * BLUR9_WEIGHT(3)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv3.zw) * BLUR9_WEIGHT(3)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv4.xy) * BLUR9_WEIGHT(4)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv4.zw) * BLUR9_WEIGHT(4)); + return packFloatToRgba(blur); +} + +vec4 blur9VSM(sampler2D _sampler, vec2 _uv0, vec4 _uv1, vec4 _uv2, vec4 _uv3, vec4 _uv4) +{ +#define _BLUR9_WEIGHT_0 1.0 +#define _BLUR9_WEIGHT_1 0.9 +#define _BLUR9_WEIGHT_2 0.55 +#define _BLUR9_WEIGHT_3 0.18 +#define _BLUR9_WEIGHT_4 0.1 +#define _BLUR9_NORMALIZE (_BLUR9_WEIGHT_0+2.0*(_BLUR9_WEIGHT_1+_BLUR9_WEIGHT_2+_BLUR9_WEIGHT_3+_BLUR9_WEIGHT_4) ) +#define BLUR9_WEIGHT(_x) (_BLUR9_WEIGHT_##_x/_BLUR9_NORMALIZE) + + vec2 blur; + vec4 val; + val = texture2D(_sampler, _uv0) * BLUR9_WEIGHT(0); + blur = vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv1.xy) * BLUR9_WEIGHT(1); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv1.zw) * BLUR9_WEIGHT(1); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv2.xy) * BLUR9_WEIGHT(2); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv2.zw) * BLUR9_WEIGHT(2); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv3.xy) * BLUR9_WEIGHT(3); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv3.zw) * BLUR9_WEIGHT(3); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv4.xy) * BLUR9_WEIGHT(4); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv4.zw) * BLUR9_WEIGHT(4); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + + return vec4(packHalfFloat(blur.x), packHalfFloat(blur.y)); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_black.sc b/examples/16-shadowmaps/fs_shadowmaps_color_black.sc new file mode 100644 index 000000000..057b621ba --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_black.sc @@ -0,0 +1,11 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh b/examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh new file mode 100644 index 000000000..c6adfa8b0 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh @@ -0,0 +1,84 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" + +uniform vec4 u_params0; +uniform vec4 u_params1; +uniform vec4 u_params2; +uniform vec4 u_color; + +uniform vec3 u_materialKa; +uniform vec3 u_materialKd; +uniform vec4 u_materialKs; +uniform vec4 u_lightPosition; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_smSamplingParams; +uniform vec4 u_csmFarDistances; + +#if SM_OMNI +uniform vec3 u_tetraNormalGreen; +uniform vec3 u_tetraNormalYellow; +uniform vec3 u_tetraNormalBlue; +uniform vec3 u_tetraNormalRed; +#endif + +SAMPLER2D(u_shadowMap0, 4); +SAMPLER2D(u_shadowMap1, 5); +SAMPLER2D(u_shadowMap2, 6); +SAMPLER2D(u_shadowMap3, 7); + +struct Shader +{ + vec3 ambi; + vec3 diff; + vec3 spec; +}; + +Shader evalShader(float _diff, float _spec) +{ + Shader shader; + + shader.ambi = u_lightAmbientPower.xyz * u_lightAmbientPower.w * u_materialKa; + shader.diff = u_lightDiffusePower.xyz * u_lightDiffusePower.w * u_materialKd * _diff; + shader.spec = u_lightSpecularPower.xyz * u_lightSpecularPower.w * u_materialKs.xyz * _spec; + + return shader; +} + +float computeVisibility(sampler2D _sampler + , vec4 _shadowCoord + , float _bias + , vec4 _samplingParams + , vec2 _texelSize + , float _depthMultiplier + , float _minVariance + , float _hardness + ) +{ + float visibility; + +#if SM_LINEAR + vec4 shadowcoord = vec4(_shadowCoord.xy / _shadowCoord.w, _shadowCoord.z, 1.0); +#else + vec4 shadowcoord = _shadowCoord; +#endif + +#if SM_HARD + visibility = hardShadow(_sampler, shadowcoord, _bias); +#elif SM_PCF + visibility = PCF(_sampler, shadowcoord, _bias, _samplingParams, _texelSize); +#elif SM_VSM + visibility = VSM(_sampler, shadowcoord, _bias, _depthMultiplier, _minVariance); +#elif SM_ESM + visibility = ESM(_sampler, shadowcoord, _bias, _depthMultiplier * _hardness); +#endif + + return visibility; +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc new file mode 100644 index 000000000..1b7644cfe --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc new file mode 100644 index 000000000..fa53a9d0e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc new file mode 100644 index 000000000..8f960b20e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc @@ -0,0 +1,16 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc new file mode 100644 index 000000000..5ca772630 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc @@ -0,0 +1,18 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc new file mode 100644 index 000000000..f578abd7f --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc new file mode 100644 index 000000000..ebeac2cc1 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc new file mode 100644 index 000000000..f06666db5 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_HARD 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc new file mode 100644 index 000000000..27918465d --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_HARD 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc new file mode 100644 index 000000000..b6d7554e9 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_HARD 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc new file mode 100644 index 000000000..05bf3ac50 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_HARD 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc new file mode 100644 index 000000000..90947dbfe --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_HARD 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc new file mode 100644 index 000000000..78ad2baee --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_HARD 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh new file mode 100644 index 000000000..fb8b90971 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh @@ -0,0 +1,151 @@ +#define u_ambientPass u_params0.x +#define u_lightningPass u_params0.y + +#define u_shadowMapBias u_params1.x +#define u_shadowMapParam0 u_params1.z +#define u_shadowMapParam1 u_params1.w + +#define u_shadowMapShowCoverage u_params2.y +#define u_shadowMapTexelSize u_params2.z + +#define u_spotDirection u_lightSpotDirectionInner.xyz +#define u_spotInner u_lightSpotDirectionInner.w +#define u_lightAttnParams u_lightAttenuationSpotOuter.xyz +#define u_spotOuter u_lightAttenuationSpotOuter.w + +// Pcf +#define u_shadowMapPcfMode u_shadowMapParam0 +#define u_shadowMapNoiseAmount u_shadowMapParam1 + +// Vsm +#define u_shadowMapMinVariance u_shadowMapParam0 +#define u_shadowMapDepthMultiplier u_shadowMapParam1 + +// Esm +#define u_shadowMapHardness u_shadowMapParam0 +#define u_shadowMapDepthMultiplier u_shadowMapParam1 + +{ + vec3 colorCoverage; + float visibility; + +#if SM_CSM + vec2 texelSize = vec2_splat(u_shadowMapTexelSize); + + vec2 texcoord1 = v_texcoord1.xy/v_texcoord1.w; + vec2 texcoord2 = v_texcoord2.xy/v_texcoord2.w; + vec2 texcoord3 = v_texcoord3.xy/v_texcoord3.w; + vec2 texcoord4 = v_texcoord4.xy/v_texcoord4.w; + + bool selection0 = all(lessThan(texcoord1, vec2_splat(0.99))) && all(greaterThan(texcoord1, vec2_splat(0.01))); + bool selection1 = all(lessThan(texcoord2, vec2_splat(0.99))) && all(greaterThan(texcoord2, vec2_splat(0.01))); + bool selection2 = all(lessThan(texcoord3, vec2_splat(0.99))) && all(greaterThan(texcoord3, vec2_splat(0.01))); + bool selection3 = all(lessThan(texcoord4, vec2_splat(0.99))) && all(greaterThan(texcoord4, vec2_splat(0.01))); + + if (selection0) + { + vec4 shadowcoord = v_texcoord1; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(-coverage, coverage, -coverage); + visibility = computeVisibility(u_shadowMap0, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } + else if (selection1) + { + vec4 shadowcoord = v_texcoord2; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(coverage, coverage, -coverage); + visibility = computeVisibility(u_shadowMap1, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/2.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } + else if (selection2) + { + vec4 shadowcoord = v_texcoord3; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(-coverage, -coverage, coverage); + visibility = computeVisibility(u_shadowMap2, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/3.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } + else //selection3 + { + vec4 shadowcoord = v_texcoord4; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(coverage, -coverage, -coverage); + visibility = computeVisibility(u_shadowMap3, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/4.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } +#elif SM_OMNI + vec2 texelSize = vec2_splat(u_shadowMapTexelSize/4.0); + + vec4 faceSelection; + vec3 pos = v_position.xyz; + faceSelection.x = dot(u_tetraNormalGreen, pos); + faceSelection.y = dot(u_tetraNormalYellow, pos); + faceSelection.z = dot(u_tetraNormalBlue, pos); + faceSelection.w = dot(u_tetraNormalRed, pos); + + vec4 shadowcoord; + float faceMax = max(max(faceSelection.x, faceSelection.y), max(faceSelection.z, faceSelection.w)); + if (faceSelection.x == faceMax) + { + shadowcoord = v_texcoord1; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(-coverage, coverage, -coverage); + } + else if (faceSelection.y == faceMax) + { + shadowcoord = v_texcoord2; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(coverage, coverage, -coverage); + } + else if (faceSelection.z == faceMax) + { + shadowcoord = v_texcoord3; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(-coverage, -coverage, coverage); + } + else // (faceSelection.w == faceMax) + { + shadowcoord = v_texcoord4; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(coverage, -coverage, -coverage); + } + + visibility = computeVisibility(u_shadowMap0, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); +#else + vec2 texelSize = vec2_splat(u_shadowMapTexelSize); + + float coverage = texcoordInRange(v_shadowcoord.xy/v_shadowcoord.w) * 0.3; + colorCoverage = vec3(coverage, -coverage, -coverage); + + visibility = computeVisibility(u_shadowMap0, v_shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); +#endif + + vec3 v = v_view; + vec3 vd = -normalize(v_view); + vec3 n = v_normal; + Light light = evalLight(v, u_lightPosition, u_spotDirection, u_spotInner, u_spotOuter, u_lightAttnParams); + + vec2 lc = lit(light.ld, n, vd, u_materialKs.w) * light.attn; + Shader shader = evalShader(lc.x, lc.y); + + //Fog. + const vec3 fogColor = vec3_splat(0.0); + const float fogDensity = 0.0035; + const float LOG2 = 1.442695; + float z = length(v); + float fogFactor = clamp(1.0/exp2(fogDensity*fogDensity*z*z*LOG2), 0.0, 1.0); + + vec3 color = u_color.xyz; + + vec3 ambient = shader.ambi * color; + vec3 brdf = (shader.diff + shader.spec) * color * visibility; + + vec3 final = toGamma(abs(ambient + brdf)) + (colorCoverage * u_shadowMapShowCoverage); + gl_FragColor.xyz = mix(fogColor, final, fogFactor); + gl_FragColor.w = 1.0; +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc new file mode 100644 index 000000000..89a7c5011 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc new file mode 100644 index 000000000..f356d0c88 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc new file mode 100644 index 000000000..7b593b75e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc @@ -0,0 +1,16 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc new file mode 100644 index 000000000..182562fc4 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_PCF 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc new file mode 100644 index 000000000..e601ae88f --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_PCF 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc new file mode 100644 index 000000000..f6da783ac --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc new file mode 100644 index 000000000..c3e675df7 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc new file mode 100644 index 000000000..7b5e33ff1 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc new file mode 100644 index 000000000..6078739ff --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc @@ -0,0 +1,16 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc new file mode 100644 index 000000000..9b46fea28 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_VSM 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc new file mode 100644 index 000000000..70027ef14 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_VSM 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc new file mode 100644 index 000000000..ecf3533ea --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_texture.sc b/examples/16-shadowmaps/fs_shadowmaps_color_texture.sc new file mode 100644 index 000000000..5a109e08e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_texture.sc @@ -0,0 +1,22 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +uniform vec4 u_color; +SAMPLER2D(u_texColor, 0); + +void main() +{ + vec4 tcolor = toLinear(texture2D(u_texColor, v_texcoord0)); + + if (tcolor.x < 0.1) //OK for now. + { + discard; + } + + gl_FragColor = toGamma(tcolor + u_color); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_hblur.sc b/examples/16-shadowmaps/fs_shadowmaps_hblur.sc new file mode 100644 index 000000000..401f3f77c --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_hblur.sc @@ -0,0 +1,14 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc new file mode 100644 index 000000000..bccdfe087 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc @@ -0,0 +1,15 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9VSM(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth.sc new file mode 100644 index 000000000..867e92c40 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth.sc @@ -0,0 +1,14 @@ +$input v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_position.z/v_position.w * 0.5 + 0.5; + gl_FragColor = packFloatToRgba(depth); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc new file mode 100644 index 000000000..cc18624c2 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc @@ -0,0 +1,13 @@ +$input v_depth + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_FragColor = packFloatToRgba(v_depth); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc new file mode 100644 index 000000000..b683249b1 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc @@ -0,0 +1,20 @@ +$input v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_position.z/v_position.w * 0.5 + 0.5; + float depthSq = depth*depth; + + //TODO: try this. + //vec2 dxy = vec2(dFdx(depth), dFdy(depth)); + //depthSq += 0.25*dot(dxy, dxy); + + gl_FragColor = vec4(packHalfFloat(depth), packHalfFloat(depthSq)); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc new file mode 100644 index 000000000..d1cd1537a --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc @@ -0,0 +1,20 @@ +$input v_depth + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_depth; + float depthSq = depth*depth; + + //TODO: try this. + //vec2 dxy = vec2(dFdx(depth), dFdy(depth)); + //depthSq += 0.25*dot(dxy, dxy); + + gl_FragColor = vec4(packHalfFloat(depth), packHalfFloat(depthSq)); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_texture.sc b/examples/16-shadowmaps/fs_shadowmaps_texture.sc new file mode 100644 index 000000000..78156e1ca --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_texture.sc @@ -0,0 +1,14 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +SAMPLER2D(u_texColor, 0); + +void main() +{ + gl_FragColor = texture2D(u_texColor, v_texcoord0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc new file mode 100644 index 000000000..1cd1ab49f --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc @@ -0,0 +1,19 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +SAMPLER2D(u_shadowMap0, 4); + +uniform vec4 u_params2; +#define u_depthValuePow u_params2.x + +void main() +{ + float depth = unpackRgbaToFloat(texture2D(u_shadowMap0, v_texcoord0) ); + vec3 rgba = pow(vec3_splat(depth), vec3_splat(u_depthValuePow) ); + gl_FragColor = vec4(rgba, 1.0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc new file mode 100644 index 000000000..ee8f0269e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc @@ -0,0 +1,20 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +SAMPLER2D(u_shadowMap0, 4); + +uniform vec4 u_params2; +#define u_depthValuePow u_params2.x + +void main() +{ + vec4 val = texture2D(u_shadowMap0, v_texcoord0); + float depth = unpackHalfFloat(val.rg); + vec3 rgba = pow(vec3_splat(depth), vec3_splat(u_depthValuePow) ); + gl_FragColor = vec4(rgba, 1.0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_vblur.sc b/examples/16-shadowmaps/fs_shadowmaps_vblur.sc new file mode 100644 index 000000000..401f3f77c --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_vblur.sc @@ -0,0 +1,14 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc new file mode 100644 index 000000000..bccdfe087 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc @@ -0,0 +1,15 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9VSM(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} + diff --git a/examples/16-shadowmaps/hollowcube.obj b/examples/16-shadowmaps/hollowcube.obj new file mode 100644 index 000000000..2980086ba --- /dev/null +++ b/examples/16-shadowmaps/hollowcube.obj @@ -0,0 +1,934 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +g holeycube +v 1.500000 1.211657 0.000000 +v 1.500000 1.211656 1.209338 +v 1.236416 1.211656 1.209338 +v 1.236416 1.211657 0.000000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v 1.500000 -0.000000 1.209337 +v 1.500000 -1.211657 1.209337 +v 1.236416 -1.211657 1.209337 +v 1.236416 -0.000000 1.209337 +v 1.236416 -0.000000 1.500000 +v 1.236416 -1.211657 1.500000 +v 1.500000 -1.211657 1.500000 +v 1.500000 -0.000000 1.500000 +v 1.500000 0.000000 -1.500000 +v 1.500000 -1.211656 -1.500000 +v 1.236416 -1.211656 -1.500000 +v 1.236416 0.000000 -1.500000 +v -1.236416 0.000000 -1.500000 +v -1.236416 -1.211656 -1.500000 +v -1.500000 -1.211656 -1.500000 +v -1.500000 0.000000 -1.500000 +v -1.500000 -0.000000 1.500000 +v -1.500000 -1.211657 1.500000 +v -1.236416 -1.211657 1.500000 +v -1.236416 -0.000000 1.500000 +v -1.236416 -0.000000 1.209337 +v -1.236416 -1.211657 1.209337 +v -1.500000 -1.211657 1.209337 +v -1.500000 -0.000000 1.209337 +v -1.500000 1.211656 1.500000 +v -1.500000 1.211656 1.209338 +v -1.236416 1.211656 1.209338 +v -1.236416 1.211656 1.500000 +v -1.500000 1.211657 -1.500000 +v -1.236416 1.211657 -1.500000 +v 1.236416 1.211657 -1.500000 +v 1.500000 1.211657 -1.500000 +v 1.500000 1.211656 1.500000 +v 1.236416 1.211656 1.500000 +v 0.000000 -1.500000 1.209337 +v -1.236416 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 1.211656 1.209338 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 0.000000 1.211656 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v 0.000000 -1.500000 -1.500000 +v -1.236416 -1.500000 -1.500000 +v 0.000000 -1.211656 -1.500000 +v 0.000000 -1.500000 -1.209338 +v -1.236416 -1.500000 -1.209338 +v 1.236416 -1.211657 -0.000000 +v 1.236416 -1.211656 -1.209338 +v 1.236416 -1.500000 -1.209338 +v 1.236416 -1.500000 -0.000000 +v 1.500000 -1.500000 -0.000000 +v 1.500000 -1.500000 -1.209338 +v 1.500000 -1.211656 -1.209338 +v 1.500000 -1.211657 -0.000000 +v 1.500000 -1.500000 1.209337 +v 1.236416 -1.500000 1.209337 +v -1.236416 -1.500000 -0.000000 +v -1.500000 -1.500000 1.209337 +v -1.500000 -1.500000 -0.000000 +v -1.500000 -1.500000 -1.209338 +v -1.236416 -1.211657 -0.000000 +v -1.236416 -1.211656 -1.209338 +v -1.500000 -1.211656 -1.209338 +v -1.500000 -1.211657 -0.000000 +v -1.500000 1.211657 0.000000 +v -1.500000 1.211657 -1.209337 +v -1.236416 1.211657 -1.209337 +v -1.236416 1.211657 0.000000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 1.236416 1.211657 -1.209337 +v 1.500000 1.211657 -1.209337 +v 1.236416 0.000000 -1.209337 +v 1.500000 0.000000 -1.209337 +v -1.500000 0.000000 -1.209337 +v -1.236416 0.000000 -1.209337 +v 0.000000 -1.211656 -1.209338 +v 0.000000 1.211657 -1.209337 +v 0.000000 1.211657 -1.500000 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v -1.500000 -1.500000 1.500000 +v -1.236416 -1.500000 1.500000 +v 0.000000 -1.211657 1.500000 +v -1.500000 -1.500000 -1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.500000 1.500000 +v 1.500000 -1.500000 1.500000 +v 1.236416 -1.500000 -1.500000 +v 1.500000 -1.500000 -1.500000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v 0.000000 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 -1.211657 1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.211657 1.209337 +v -1.236416 -1.211657 1.209337 +v 0.000000 -1.211657 1.209337 +vn 0.000000 -1.000000 -0.000001 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000001 +vn 0.000000 -0.000001 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 1//1 2//1 3//1 4//1 +f 2//2 1//2 5//2 6//2 +f 4//3 3//3 7//3 8//3 +f 9//4 10//4 11//4 12//4 +f 13//5 14//5 15//5 16//5 +f 17//4 18//4 19//4 20//4 +f 21//4 22//4 23//4 24//4 +f 25//5 26//5 27//5 28//5 +f 29//4 30//4 31//4 32//4 +f 32//3 31//3 26//3 25//3 +f 25//3 33//3 34//3 32//3 +f 32//6 34//6 35//6 29//6 +f 28//5 36//5 33//5 25//5 +f 24//4 37//4 38//4 21//4 +f 20//4 39//4 40//4 17//4 +f 16//5 41//5 42//5 13//5 +f 12//6 3//6 2//6 9//6 +f 9//2 2//2 41//2 16//2 +f 13//3 42//3 3//3 12//3 +f 43//4 44//4 30//4 45//4 +f 46//4 35//4 47//4 48//4 +f 99//7 100//7 133//7 132//7 +f 50//5 49//5 36//5 51//5 +f 51//5 42//5 52//5 50//5 +f 100//7 102//7 135//7 133//7 +f 48//4 7//4 3//4 46//4 +f 46//8 3//8 42//8 51//8 +f 49//5 53//5 33//5 36//5 +f 42//5 41//5 54//5 52//5 +f 86//7 53//7 122//7 128//7 +f 41//2 2//2 6//2 54//2 +f 55//4 56//4 22//4 57//4 +f 58//8 59//8 56//8 55//8 +f 60//3 61//3 62//3 63//3 +f 64//2 65//2 66//2 67//2 +f 67//9 66//9 61//9 60//9 +f 63//8 62//8 65//8 64//8 +f 64//8 68//8 69//8 63//8 +f 70//8 44//8 71//8 72//8 +f 72//8 73//8 59//8 70//8 +f 74//9 75//9 76//9 77//9 +f 78//8 79//8 80//8 81//8 +f 5//7 87//7 129//7 113//7 +f 54//7 6//7 114//7 123//7 +f 48//7 47//7 117//7 118//7 +f 87//7 103//7 136//7 129//7 +f 90//8 1//8 4//8 89//8 +f 1//2 90//2 87//2 5//2 +f 8//3 88//3 89//3 4//3 +f 20//3 19//3 61//3 91//3 +f 92//2 66//2 18//2 17//2 +f 91//10 61//10 66//10 92//10 +f 93//10 76//10 75//10 94//10 +f 24//3 23//3 76//3 93//3 +f 94//2 75//2 22//2 21//2 +f 21//2 38//2 80//2 94//2 +f 57//11 22//11 75//11 95//11 +f 96//8 80//8 38//8 97//8 +f 93//3 79//3 37//3 24//3 +f 94//5 80//5 79//5 93//5 +f 92//5 90//5 89//5 91//5 +f 17//2 40//2 90//2 92//2 +f 91//3 89//3 39//3 20//3 +f 95//5 75//5 59//5 58//5 +f 98//5 83//5 80//5 96//5 +f 103//7 101//7 134//7 136//7 +f 97//4 38//4 100//4 99//4 +f 99//4 101//4 39//4 97//4 +f 6//7 5//7 113//7 114//7 +f 96//5 89//5 88//5 98//5 +f 97//8 39//8 89//8 96//8 +f 38//4 37//4 102//4 100//4 +f 101//4 103//4 40//4 39//4 +f 7//7 48//7 118//7 115//7 +f 103//2 87//2 90//2 40//2 +f 26//3 31//3 71//3 104//3 +f 71//8 44//8 105//8 104//8 +f 28//2 27//2 30//2 29//2 +f 29//2 35//2 36//2 28//2 +f 74//2 30//2 44//2 70//2 +f 72//3 71//3 31//3 77//3 +f 77//11 31//11 30//11 74//11 +f 81//1 35//1 34//1 78//1 +f 78//3 34//3 86//3 85//3 +f 82//2 47//2 35//2 81//2 +f 45//11 30//11 27//11 106//11 +f 51//8 36//8 35//8 46//8 +f 102//7 84//7 126//7 135//7 +f 53//3 86//3 34//3 33//3 +f 107//3 73//3 76//3 23//3 +f 107//8 56//8 59//8 73//8 +f 70//2 59//2 75//2 74//2 +f 77//3 76//3 73//3 72//3 +f 85//3 84//3 79//3 78//3 +f 81//2 80//2 83//2 82//2 +f 88//7 8//7 116//7 130//7 +f 37//3 79//3 84//3 102//3 +f 60//11 11//11 10//11 67//11 +f 67//2 10//2 68//2 64//2 +f 63//3 69//3 11//3 60//3 +f 16//2 15//2 10//2 9//2 +f 12//3 11//3 14//3 13//3 +f 108//8 105//8 44//8 43//8 +f 106//5 27//5 105//5 108//5 +f 108//5 109//5 14//5 106//5 +f 43//8 69//8 109//8 108//8 +f 45//4 11//4 69//4 43//4 +f 106//11 14//11 11//11 45//11 +f 27//5 26//5 104//5 105//5 +f 109//5 110//5 15//5 14//5 +f 110//8 109//8 69//8 68//8 +f 110//2 68//2 10//2 15//2 +f 57//4 19//4 111//4 55//4 +f 55//8 111//8 62//8 58//8 +f 58//5 62//5 61//5 95//5 +f 95//11 61//11 19//11 57//11 +f 56//4 107//4 23//4 22//4 +f 19//4 18//4 112//4 111//4 +f 65//8 62//8 111//8 112//8 +f 18//2 66//2 65//2 112//2 +f 118//11 117//11 119//11 120//11 +f 120//11 121//11 115//11 118//11 +f 114//11 115//11 121//11 123//11 +f 124//11 125//11 126//11 127//11 +f 127//11 128//11 117//11 124//11 +f 116//11 115//11 114//11 113//11 +f 113//11 129//11 130//11 116//11 +f 132//11 133//11 125//11 131//11 +f 131//11 130//11 134//11 132//11 +f 136//11 134//11 130//11 129//11 +f 122//11 119//11 117//11 128//11 +f 126//11 125//11 133//11 135//11 +f 82//7 83//7 125//7 124//7 +f 49//7 50//7 120//7 119//7 +f 84//7 85//7 127//7 126//7 +f 50//7 52//7 121//7 120//7 +f 52//7 54//7 123//7 121//7 +f 53//7 49//7 119//7 122//7 +f 8//7 7//7 115//7 116//7 +f 85//7 86//7 128//7 127//7 +f 83//7 98//7 131//7 125//7 +f 47//7 82//7 124//7 117//7 +f 101//7 99//7 132//7 134//7 +f 98//7 88//7 130//7 131//7 +f 108//7 106//7 139//7 140//7 +f 45//7 43//7 137//7 138//7 +f 106//7 45//7 138//7 139//7 +f 43//7 108//7 140//7 137//7 +f 30//7 45//7 143//7 142//7 +f 45//7 11//7 141//7 143//7 +g holeycube.001 +v 0.037848 0.053616 0.680965 +v 0.414385 -0.152030 0.676229 +v 0.382376 -0.209100 0.609416 +v 0.005839 -0.003453 0.614153 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.558694 0.119124 0.375479 +v 0.703003 0.390278 0.074730 +v 0.670994 0.333208 0.007917 +v 0.526685 0.062054 0.308667 +v 0.617185 0.012627 0.307529 +v 0.761494 0.283781 0.006779 +v 0.793503 0.340851 0.073591 +v 0.649194 0.069697 0.374341 +v -0.284880 0.579845 0.386090 +v -0.140571 0.850998 0.085340 +v -0.172580 0.793929 0.018528 +v -0.316889 0.522775 0.319277 +v -0.617185 -0.012627 -0.307529 +v -0.472876 0.258527 -0.608278 +v -0.504885 0.201457 -0.675091 +v -0.649194 -0.069697 -0.374341 +v 0.284880 -0.579845 -0.386090 +v 0.429189 -0.308690 -0.686840 +v 0.461198 -0.251621 -0.620027 +v 0.316889 -0.522775 -0.319277 +v 0.226389 -0.473348 -0.318139 +v 0.370698 -0.202194 -0.618889 +v 0.338689 -0.259263 -0.685701 +v 0.194380 -0.530418 -0.384952 +v 0.140571 -0.850998 -0.085340 +v 0.050071 -0.801571 -0.084202 +v 0.082080 -0.744502 -0.017389 +v 0.172580 -0.793929 -0.018528 +v -0.793503 -0.340851 -0.073591 +v -0.761494 -0.283781 -0.006779 +v -0.461198 0.251621 0.620027 +v -0.429189 0.308690 0.686840 +v 0.504885 -0.201457 0.675091 +v 0.472876 -0.258527 0.608278 +v 0.555187 0.130035 -0.377057 +v 0.405040 -0.137666 -0.690460 +v 0.520846 0.065507 -0.305486 +v 0.232228 -0.476801 0.296014 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.322728 -0.526228 0.294875 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.288386 0.590756 -0.366446 +v -0.438534 0.323055 -0.679849 +v -0.322728 0.526228 -0.294875 +v -0.197886 0.541329 -0.367584 +v -0.348034 0.273628 -0.680987 +v 0.294457 0.538855 0.012653 +v -0.082080 0.744502 0.017389 +v -0.047738 0.809030 -0.054181 +v 0.328799 0.603383 -0.058918 +v 0.360808 0.660452 0.007895 +v -0.015729 0.866099 0.012631 +v -0.050071 0.801571 0.084202 +v 0.326466 0.595925 0.079466 +v 0.737345 0.454805 0.003159 +v 0.705335 0.397736 -0.063654 +v 0.028503 0.067981 -0.685724 +v 0.373030 -0.194736 -0.757272 +v -0.003506 0.010911 -0.752536 +v -0.380043 0.216558 -0.747800 +v -0.005839 0.003453 -0.614153 +v -0.382376 0.209100 -0.609416 +v -0.414385 0.152030 -0.676229 +v -0.037848 -0.053616 -0.680965 +v -0.326466 -0.595925 -0.079466 +v -0.703003 -0.390278 -0.074730 +v -0.670994 -0.333208 -0.007917 +v -0.294457 -0.538855 -0.012653 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.370698 0.202194 0.618889 +v -0.338689 0.259263 0.685701 +v -0.226389 0.473348 0.318139 +v -0.194380 0.530418 0.384952 +v -0.558694 -0.119124 -0.375479 +v -0.526685 -0.062054 -0.308667 +v -0.232228 0.476801 -0.296014 +v -0.520846 -0.065507 0.305486 +v -0.611346 -0.016080 0.306624 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.463531 -0.244163 -0.758410 +v 0.495540 -0.187093 -0.691598 +v 0.611346 0.016080 -0.306624 +v -0.470543 0.265985 -0.746662 +v 0.645688 0.080608 -0.378195 +v 0.795836 0.348309 -0.064792 +v 0.827845 0.405378 0.002021 +v -0.138238 0.858457 -0.053043 +v -0.106229 0.915526 0.013769 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.555187 0.130035 -0.377057 +v 0.520846 0.065507 -0.305486 +v 0.611346 0.016080 -0.306624 +v 0.645688 0.080608 -0.378195 +v 0.670994 0.333208 0.007917 +v 0.370698 -0.202194 -0.618889 +v 0.520846 0.065507 -0.305486 +vn 0.335692 0.630762 -0.699607 +vn 0.342281 0.610259 0.714442 +vn -0.342282 -0.610259 -0.714442 +vn -0.877584 0.479296 0.011038 +vn 0.877584 -0.479296 -0.011038 +vn -0.877584 0.479295 0.011038 +vn -0.342281 -0.610259 -0.714442 +vn -0.877584 0.479295 0.011039 +vn 0.877584 -0.479295 -0.011038 +vn 0.335693 0.630761 -0.699607 +vn -0.335692 -0.630762 0.699607 +vn 0.342282 0.610259 0.714442 +vn 0.877584 -0.479295 -0.011039 +vn -0.335693 -0.630761 0.699607 +vn -0.877584 0.479296 0.011039 +vn 0.335693 0.630761 -0.699608 +vn 0.877584 -0.479296 -0.011039 +vn -0.335693 -0.630761 0.699608 +s off +f 144//12 145//12 146//12 147//12 +f 145//13 144//13 148//13 149//13 +f 147//14 146//14 150//14 151//14 +f 152//15 153//15 154//15 155//15 +f 156//16 157//16 158//16 159//16 +f 160//15 161//15 162//15 163//15 +f 164//17 165//17 166//17 167//17 +f 168//16 169//16 170//16 171//16 +f 172//15 173//15 174//15 175//15 +f 175//18 174//18 169//18 168//18 +f 168//14 176//14 177//14 175//14 +f 175//19 177//19 178//19 172//19 +f 171//16 179//16 176//16 168//16 +f 167//15 180//15 181//15 164//15 +f 163//15 182//15 183//15 160//15 +f 159//20 184//20 185//20 156//20 +f 155//19 146//19 145//19 152//19 +f 152//13 145//13 184//13 159//13 +f 156//18 185//18 146//18 155//18 +f 186//15 187//15 173//15 188//15 +f 189//15 178//15 190//15 191//15 +f 242//7 243//7 276//7 275//7 +f 193//16 192//16 179//16 194//16 +f 194//16 185//16 195//16 193//16 +f 243//7 245//7 278//7 276//7 +f 191//15 150//15 146//15 189//15 +f 189//21 146//21 185//21 194//21 +f 192//16 196//16 176//16 179//16 +f 185//16 184//16 197//16 195//16 +f 229//7 196//7 265//7 271//7 +f 184//13 145//13 149//13 197//13 +f 198//15 199//15 165//15 200//15 +f 201//21 202//21 199//21 198//21 +f 203//18 204//18 205//18 206//18 +f 207//13 208//13 209//13 210//13 +f 210//22 209//22 204//22 203//22 +f 206//21 205//21 208//21 207//21 +f 207//21 211//21 212//21 206//21 +f 213//21 187//21 214//21 215//21 +f 215//21 216//21 202//21 213//21 +f 217//22 218//22 219//22 220//22 +f 221//21 222//21 223//21 224//21 +f 148//7 230//7 272//7 256//7 +f 197//7 149//7 257//7 266//7 +f 191//7 190//7 260//7 261//7 +f 230//7 246//7 279//7 272//7 +f 233//21 144//21 147//21 232//21 +f 144//13 233//13 230//13 148//13 +f 151//14 231//14 232//14 147//14 +f 163//18 162//18 204//18 234//18 +f 235//23 209//23 161//23 160//23 +f 234//24 204//24 209//24 235//24 +f 236//24 219//24 218//24 237//24 +f 167//18 166//18 219//18 236//18 +f 237//13 218//13 165//13 164//13 +f 164//13 181//13 223//13 237//13 +f 200//25 165//25 218//25 238//25 +f 239//21 223//21 181//21 240//21 +f 236//14 222//14 180//14 167//14 +f 237//16 223//16 222//16 236//16 +f 235//16 233//16 232//16 234//16 +f 160//13 183//13 233//13 235//13 +f 234//18 232//18 182//18 163//18 +f 238//16 218//16 202//16 201//16 +f 241//16 226//16 223//16 239//16 +f 246//7 244//7 277//7 279//7 +f 240//15 181//15 243//15 242//15 +f 242//15 244//15 182//15 240//15 +f 149//7 148//7 256//7 257//7 +f 239//16 232//16 231//16 241//16 +f 240//21 182//21 232//21 239//21 +f 181//26 180//26 245//26 243//26 +f 244//15 246//15 183//15 182//15 +f 150//7 191//7 261//7 258//7 +f 246//13 230//13 233//13 183//13 +f 169//18 174//18 214//18 247//18 +f 214//21 187//21 248//21 247//21 +f 171//13 170//13 173//13 172//13 +f 172//13 178//13 179//13 171//13 +f 217//23 173//23 187//23 213//23 +f 215//18 214//18 174//18 220//18 +f 220//25 174//25 173//25 217//25 +f 224//12 178//12 177//12 221//12 +f 221//18 177//18 229//18 228//18 +f 225//13 190//13 178//13 224//13 +f 188//25 173//25 170//25 249//25 +f 194//21 179//21 178//21 189//21 +f 245//7 227//7 269//7 278//7 +f 196//14 229//14 177//14 176//14 +f 250//18 216//18 219//18 166//18 +f 250//27 199//27 202//27 216//27 +f 213//23 202//23 218//23 217//23 +f 220//18 219//18 216//18 215//18 +f 228//18 227//18 222//18 221//18 +f 224//13 223//13 226//13 225//13 +f 231//7 151//7 259//7 273//7 +f 180//14 222//14 227//14 245//14 +f 203//25 154//25 153//25 210//25 +f 210//13 153//13 211//13 207//13 +f 206//18 212//18 154//18 203//18 +f 159//23 158//23 153//23 152//23 +f 155//18 154//18 157//18 156//18 +f 251//21 248//21 187//21 186//21 +f 249//16 170//16 248//16 251//16 +f 251//16 252//16 157//16 249//16 +f 186//21 212//21 252//21 251//21 +f 188//15 154//15 212//15 186//15 +f 249//25 157//25 154//25 188//25 +f 170//16 169//16 247//16 248//16 +f 252//28 253//28 158//28 157//28 +f 253//21 252//21 212//21 211//21 +f 253//23 211//23 153//23 158//23 +f 200//15 162//15 254//15 198//15 +f 198//21 254//21 205//21 201//21 +f 201//16 205//16 204//16 238//16 +f 238//25 204//25 162//25 200//25 +f 199//15 250//15 166//15 165//15 +f 162//15 161//15 255//15 254//15 +f 208//21 205//21 254//21 255//21 +f 161//23 209//23 208//23 255//23 +f 261//25 260//25 262//25 263//25 +f 263//25 264//25 258//25 261//25 +f 257//29 258//29 264//29 266//29 +f 267//25 268//25 269//25 270//25 +f 270//25 271//25 260//25 267//25 +f 259//25 258//25 257//25 256//25 +f 256//25 272//25 273//25 259//25 +f 275//25 276//25 268//25 274//25 +f 274//25 273//25 277//25 275//25 +f 279//25 277//25 273//25 272//25 +f 265//25 262//25 260//25 271//25 +f 269//25 268//25 276//25 278//25 +f 225//7 226//7 268//7 267//7 +f 192//7 193//7 263//7 262//7 +f 227//7 228//7 270//7 269//7 +f 193//7 195//7 264//7 263//7 +f 195//7 197//7 266//7 264//7 +f 196//7 192//7 262//7 265//7 +f 151//7 150//7 258//7 259//7 +f 228//7 229//7 271//7 270//7 +f 226//7 241//7 274//7 268//7 +f 190//7 225//7 267//7 260//7 +f 244//7 242//7 275//7 277//7 +f 241//7 231//7 273//7 274//7 +f 251//7 249//7 282//7 283//7 +f 188//7 186//7 280//7 281//7 +f 249//7 188//7 281//7 282//7 +f 186//7 251//7 283//7 280//7 +f 173//7 188//7 286//7 285//7 +f 188//7 154//7 284//7 286//7 +g holeycube.002 +v 0.369385 2.003562 1.792544 +v 0.963329 0.880686 2.925211 +v 0.707927 0.635014 2.815589 +v 0.113983 1.757890 1.682922 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v 2.047380 0.275193 1.756502 +v 3.131433 -0.330301 0.587792 +v 2.876031 -0.575973 0.478171 +v 1.791978 0.029521 1.646880 +v 1.934732 -0.240361 1.919116 +v 3.018785 -0.845855 0.750406 +v 3.274187 -0.600183 0.860028 +v 2.190134 0.005311 2.028738 +v 0.716742 2.790825 -0.781068 +v 1.800794 2.185331 -1.949777 +v 1.545392 1.939659 -2.059399 +v 0.461340 2.545153 -0.890690 +v -1.934732 0.240361 -1.919116 +v -0.850680 -0.365133 -3.087824 +v -1.106082 -0.610805 -3.197446 +v -2.190134 -0.005311 -2.028738 +v -0.716742 -2.790825 0.781068 +v 0.367311 -3.396319 -0.387641 +v 0.622713 -3.150647 -0.278019 +v -0.461340 -2.545153 0.890690 +v -0.604093 -2.275271 0.618455 +v 0.479959 -2.880765 -0.550255 +v 0.224557 -3.126437 -0.659877 +v -0.859495 -2.520943 0.508833 +v -1.800794 -2.185331 1.949777 +v -1.943547 -1.915450 1.677542 +v -1.688145 -1.669778 1.787164 +v -1.545392 -1.939659 2.059399 +v -3.274187 0.600183 -0.860028 +v -3.018785 0.845855 -0.750406 +v -0.622713 3.150647 0.278019 +v -0.367311 3.396319 0.387641 +v 1.106082 0.610805 3.197446 +v 0.850680 0.365133 3.087824 +v 1.935972 -1.872461 -0.314165 +v 0.737936 -3.024857 -0.828377 +v 1.677995 -1.728369 -0.036042 +v -0.490109 -0.517382 2.301377 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v -0.347356 -0.787263 2.573611 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v 0.605333 0.643171 -2.851735 +v -0.592703 -0.509225 -3.365948 +v 0.347356 0.787263 -2.573611 +v 0.748086 0.373290 -2.579500 +v -0.449950 -0.779106 -3.093713 +v 2.282089 0.546902 -0.654497 +v 1.688145 1.669778 -1.787164 +v 1.946122 1.525685 -2.065288 +v 2.540065 0.402810 -0.932619 +v 2.795467 0.648482 -0.822998 +v 2.201524 1.771358 -1.955666 +v 1.943547 1.915450 -1.677542 +v 2.537491 0.792574 -0.544875 +v 3.389409 -0.474393 0.309670 +v 3.134007 -0.720065 0.200048 +v 0.143993 -1.901982 -1.961045 +v 0.482534 -3.270529 -0.937999 +v -0.111409 -2.147654 -2.070667 +v -0.705351 -1.024778 -3.203335 +v -0.113983 -1.757890 -1.682922 +v -0.707927 -0.635014 -2.815589 +v -0.963329 -0.880686 -2.925211 +v -0.369385 -2.003562 -1.792544 +v -2.537491 -0.792574 0.544875 +v -3.131433 0.330301 -0.587792 +v -2.876031 0.575973 -0.478171 +v -2.282089 -0.546902 0.654497 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -0.479959 2.880765 0.550255 +v -0.224557 3.126437 0.659877 +v 0.604093 2.275271 -0.618455 +v 0.859495 2.520943 -0.508833 +v -2.047380 -0.275193 -1.756502 +v -1.791978 -0.029521 -1.646880 +v 0.490109 0.517382 -2.301377 +v -1.677995 1.728369 0.036042 +v -1.820749 1.998251 -0.236193 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 0.625287 -3.540411 -0.665764 +v 0.880689 -3.294739 -0.556142 +v 1.820749 -1.998251 0.236193 +v -0.848105 -0.754897 -3.475569 +v 2.078725 -2.142343 -0.041929 +v 3.276761 -0.989947 0.472284 +v 3.532163 -0.744275 0.581905 +v 1.803369 1.795566 -2.337522 +v 2.058771 2.041239 -2.227901 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 1.935972 -1.872461 -0.314165 +v 1.677995 -1.728369 -0.036042 +v 1.820749 -1.998251 0.236193 +v 2.078725 -2.142343 -0.041929 +v 2.876031 -0.575973 0.478171 +v 0.479959 -2.880765 -0.550255 +v 1.677995 -1.728369 -0.036042 +vn 0.635737 -0.355088 -0.685384 +vn 0.688513 0.662283 0.295519 +vn -0.688513 -0.662283 -0.295518 +vn -0.348983 0.659767 -0.665521 +vn 0.348982 -0.659767 0.665521 +vn -0.348982 0.659767 -0.665521 +vn 0.348982 -0.659768 0.665521 +vn -0.688513 -0.662283 -0.295519 +vn 0.348983 -0.659767 0.665521 +vn -0.348982 0.659768 -0.665521 +vn 0.688513 0.662283 0.295518 +vn 0.635737 -0.355089 -0.685383 +vn -0.635737 0.355088 0.685384 +vn 0.688512 0.662283 0.295519 +vn -0.635737 0.355089 0.685383 +vn -0.688512 -0.662283 -0.295519 +vn 0.635737 -0.355089 -0.685384 +vn -0.635737 0.355089 0.685384 +s off +f 287//30 288//30 289//30 290//30 +f 288//31 287//31 291//31 292//31 +f 290//32 289//32 293//32 294//32 +f 295//33 296//33 297//33 298//33 +f 299//34 300//34 301//34 302//34 +f 303//33 304//33 305//33 306//33 +f 307//35 308//35 309//35 310//35 +f 311//36 312//36 313//36 314//36 +f 315//35 316//35 317//35 318//35 +f 318//37 317//37 312//37 311//37 +f 311//37 319//37 320//37 318//37 +f 318//33 320//33 321//33 315//33 +f 314//38 322//38 319//38 311//38 +f 310//35 323//35 324//35 307//35 +f 306//39 325//39 326//39 303//39 +f 302//34 327//34 328//34 299//34 +f 298//33 289//33 288//33 295//33 +f 295//40 288//40 327//40 302//40 +f 299//37 328//37 289//37 298//37 +f 329//33 330//33 316//33 331//33 +f 332//33 321//33 333//33 334//33 +f 385//7 386//7 419//7 418//7 +f 336//38 335//38 322//38 337//38 +f 337//38 328//38 338//38 336//38 +f 386//7 388//7 421//7 419//7 +f 334//33 293//33 289//33 332//33 +f 332//41 289//41 328//41 337//41 +f 335//38 339//38 319//38 322//38 +f 328//38 327//38 340//38 338//38 +f 372//7 339//7 408//7 414//7 +f 327//31 288//31 292//31 340//31 +f 341//33 342//33 308//33 343//33 +f 344//41 345//41 342//41 341//41 +f 346//32 347//32 348//32 349//32 +f 350//40 351//40 352//40 353//40 +f 353//42 352//42 347//42 346//42 +f 349//41 348//41 351//41 350//41 +f 350//41 354//41 355//41 349//41 +f 356//41 330//41 357//41 358//41 +f 358//41 359//41 345//41 356//41 +f 360//42 361//42 362//42 363//42 +f 364//41 365//41 366//41 367//41 +f 291//7 373//7 415//7 399//7 +f 340//7 292//7 400//7 409//7 +f 334//7 333//7 403//7 404//7 +f 373//7 389//7 422//7 415//7 +f 376//41 287//41 290//41 375//41 +f 287//43 376//43 373//43 291//43 +f 294//37 374//37 375//37 290//37 +f 306//37 305//37 347//37 377//37 +f 378//31 352//31 304//31 303//31 +f 377//38 347//38 352//38 378//38 +f 379//38 362//38 361//38 380//38 +f 310//32 309//32 362//32 379//32 +f 380//31 361//31 308//31 307//31 +f 307//31 324//31 366//31 380//31 +f 343//44 308//44 361//44 381//44 +f 382//41 366//41 324//41 383//41 +f 379//32 365//32 323//32 310//32 +f 380//38 366//38 365//38 379//38 +f 378//34 376//34 375//34 377//34 +f 303//31 326//31 376//31 378//31 +f 377//37 375//37 325//37 306//37 +f 381//38 361//38 345//38 344//38 +f 384//38 369//38 366//38 382//38 +f 389//7 387//7 420//7 422//7 +f 383//33 324//33 386//33 385//33 +f 385//33 387//33 325//33 383//33 +f 292//7 291//7 399//7 400//7 +f 382//38 375//38 374//38 384//38 +f 383//41 325//41 375//41 382//41 +f 324//33 323//33 388//33 386//33 +f 387//35 389//35 326//35 325//35 +f 293//7 334//7 404//7 401//7 +f 389//43 373//43 376//43 326//43 +f 312//45 317//45 357//45 390//45 +f 357//46 330//46 391//46 390//46 +f 314//31 313//31 316//31 315//31 +f 315//31 321//31 322//31 314//31 +f 360//31 316//31 330//31 356//31 +f 358//45 357//45 317//45 363//45 +f 363//44 317//44 316//44 360//44 +f 367//30 321//30 320//30 364//30 +f 364//32 320//32 372//32 371//32 +f 368//40 333//40 321//40 367//40 +f 331//44 316//44 313//44 392//44 +f 337//46 322//46 321//46 332//46 +f 388//7 370//7 412//7 421//7 +f 339//32 372//32 320//32 319//32 +f 393//37 359//37 362//37 309//37 +f 393//41 342//41 345//41 359//41 +f 356//40 345//40 361//40 360//40 +f 363//37 362//37 359//37 358//37 +f 371//32 370//32 365//32 364//32 +f 367//40 366//40 369//40 368//40 +f 374//7 294//7 402//7 416//7 +f 323//32 365//32 370//32 388//32 +f 346//44 297//44 296//44 353//44 +f 353//40 296//40 354//40 350//40 +f 349//32 355//32 297//32 346//32 +f 302//40 301//40 296//40 295//40 +f 298//37 297//37 300//37 299//37 +f 394//41 391//41 330//41 329//41 +f 392//38 313//38 391//38 394//38 +f 394//38 395//38 300//38 392//38 +f 329//41 355//41 395//41 394//41 +f 331//33 297//33 355//33 329//33 +f 392//44 300//44 297//44 331//44 +f 313//34 312//34 390//34 391//34 +f 395//38 396//38 301//38 300//38 +f 396//41 395//41 355//41 354//41 +f 396//40 354//40 296//40 301//40 +f 343//33 305//33 397//33 341//33 +f 341//41 397//41 348//41 344//41 +f 344//38 348//38 347//38 381//38 +f 381//47 347//47 305//47 343//47 +f 342//33 393//33 309//33 308//33 +f 305//33 304//33 398//33 397//33 +f 351//41 348//41 397//41 398//41 +f 304//40 352//40 351//40 398//40 +f 404//44 403//44 405//44 406//44 +f 406//44 407//44 401//44 404//44 +f 400//44 401//44 407//44 409//44 +f 410//44 411//44 412//44 413//44 +f 413//44 414//44 403//44 410//44 +f 402//44 401//44 400//44 399//44 +f 399//44 415//44 416//44 402//44 +f 418//44 419//44 411//44 417//44 +f 417//44 416//44 420//44 418//44 +f 422//47 420//47 416//47 415//47 +f 408//44 405//44 403//44 414//44 +f 412//44 411//44 419//44 421//44 +f 368//7 369//7 411//7 410//7 +f 335//7 336//7 406//7 405//7 +f 370//7 371//7 413//7 412//7 +f 336//7 338//7 407//7 406//7 +f 338//7 340//7 409//7 407//7 +f 339//7 335//7 405//7 408//7 +f 294//7 293//7 401//7 402//7 +f 371//7 372//7 414//7 413//7 +f 369//7 384//7 417//7 411//7 +f 333//7 368//7 410//7 403//7 +f 387//7 385//7 418//7 420//7 +f 384//7 374//7 416//7 417//7 +f 394//7 392//7 425//7 426//7 +f 331//7 329//7 423//7 424//7 +f 392//7 331//7 424//7 425//7 +f 329//7 394//7 426//7 423//7 +f 316//7 331//7 429//7 428//7 +f 331//7 297//7 427//7 429//7 diff --git a/examples/16-shadowmaps/makefile b/examples/16-shadowmaps/makefile new file mode 100644 index 000000000..6525ae16a --- /dev/null +++ b/examples/16-shadowmaps/makefile @@ -0,0 +1,22 @@ +# +# Copyright 2013 Dario Manesku. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime +BUILD_DIR=../../.build + +include $(BGFX_DIR)/premake/shader.mk + +geometry: ../runtime/meshes/column.bin + +../runtime/meshes/column.bin: column.obj + ../../tools/bin/geometryc -f column.obj -o ../runtime/meshes/column.bin --packnormal 1 + +rebuild: + @make -s --no-print-directory TARGET=0 clean all + @make -s --no-print-directory TARGET=1 clean all + @make -s --no-print-directory TARGET=2 clean all + @make -s --no-print-directory TARGET=3 clean all + @make -s --no-print-directory TARGET=4 clean all diff --git a/examples/16-shadowmaps/shadowmaps.cpp b/examples/16-shadowmaps/shadowmaps.cpp new file mode 100644 index 000000000..1ba57667c --- /dev/null +++ b/examples/16-shadowmaps/shadowmaps.cpp @@ -0,0 +1,3296 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include +#include +#include + +#include "common.h" + +#include +#include +#include +#include "entry/entry.h" +#include "entry/camera.h" +#include "fpumath.h" +#include "imgui/imgui.h" + +#define RENDER_PASS_0 1 +#define RENDER_PASS_1 2 +#define RENDER_PASS_2 3 +#define RENDER_PASS_3 4 +#define RENDER_PASS_4 5 +#define RENDER_PASS_5 6 +#define RENDER_PASS_6 7 +#define RENDER_PASS_7 8 +#define RENDER_PASS_8 9 +#define RENDER_PASS_9 10 +#define RENDER_PASS_10 11 +#define RENDER_PASS_11 12 +#define RENDER_PASS_12 13 +#define RENDER_PASS_13 14 +#define RENDER_PASS_14 15 +#define RENDER_PASS_15 16 +#define RENDER_PASS_16 17 +#define RENDER_PASS_17 18 +#define RENDER_PASS_18 19 + +uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w) +{ + union + { + uint32_t ui32; + uint8_t arr[4]; + } un; + + un.arr[0] = _x; + un.arr[1] = _y; + un.arr[2] = _z; + un.arr[3] = _w; + + return un.ui32; +} + +uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f) +{ + const uint8_t xx = uint8_t(_x*127.0f + 128.0f); + const uint8_t yy = uint8_t(_y*127.0f + 128.0f); + const uint8_t zz = uint8_t(_z*127.0f + 128.0f); + const uint8_t ww = uint8_t(_w*127.0f + 128.0f); + return packUint32(xx, yy, zz, ww); +} + +struct LightType +{ + enum Enum + { + SpotLight = 0, + PointLight = 1, + DirectionalLight = 2, + + Count + }; + +}; + +struct DepthImpl +{ + enum Enum + { + InvZ = 0, + Linear = 1, + + Count + }; +}; + +struct PackDepth +{ + enum Enum + { + RGBA = 0, + VSM = 1, + + Count + }; +}; + +struct SmImpl +{ + enum Enum + { + Hard = 0, + PCF = 1, + VSM = 2, + ESM = 3, + + Count + }; +}; + +struct SmType +{ + enum Enum + { + Single = 0, + Omni = 1, + Cascade = 2, + + Count + }; +}; + +struct TetrahedronFaces +{ + enum Enum + { + Green = 0, + Yellow = 1, + Blue = 2, + Red = 3, + + Count = 4 + }; +}; + +struct ProjType +{ + enum Enum + { + Horizontal = 0, + Vertical = 1, + + Count + }; +}; + +struct ShadowMapRenderTargets +{ + enum Enum + { + First = 0, + Second = 1, + Third = 2, + Fourth = 3, + + Count + }; +}; + +void imguiEnum(SmImpl::Enum& _enum) +{ + if (imguiCheck("Hard", SmImpl::Hard == _enum) ) + { + _enum = SmImpl::Hard; + } + + if (imguiCheck("PCF", SmImpl::PCF == _enum) ) + { + _enum = SmImpl::PCF; + } + + if (imguiCheck("VSM", SmImpl::VSM == _enum) ) + { + _enum = SmImpl::VSM; + } + + if (imguiCheck("ESM", SmImpl::ESM == _enum) ) + { + _enum = SmImpl::ESM; + } +} + +void imguiEnum(DepthImpl::Enum& _enum) +{ + if (imguiCheck("InvZ", DepthImpl::InvZ == _enum) ) + { + _enum = DepthImpl::InvZ; + } + + if (imguiCheck("Linear", DepthImpl::Linear == _enum) ) + { + _enum = DepthImpl::Linear; + } +} + +void imguiEnum(LightType::Enum& _enum) +{ + if (imguiCheck("Spot light", LightType::SpotLight == _enum) ) + { + _enum = LightType::SpotLight; + } + + if (imguiCheck("Point light", LightType::PointLight == _enum) ) + { + _enum = LightType::PointLight; + } + + if (imguiCheck("Directional light", LightType::DirectionalLight == _enum) ) + { + _enum = LightType::DirectionalLight; + } +} + +void imguiBool(const char* _str, bool& _flag, bool _enabled = true) +{ + if (imguiCheck(_str, _flag, _enabled) ) + { + _flag = !_flag; + } +} + +struct PosNormalTexcoordVertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_normal; + float m_u; + float m_v; +}; + +static const float s_texcoord = 5.0f; +static const uint32_t s_numHPlaneVertices = 4; +static PosNormalTexcoordVertex s_hplaneVertices[s_numHPlaneVertices] = +{ + { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord }, + { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f }, + { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord }, + { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, 0.0f }, +}; + +static const uint32_t s_numVPlaneVertices = 4; +static PosNormalTexcoordVertex s_vplaneVertices[s_numVPlaneVertices] = +{ + { -1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 1.0f }, + { 1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 0.0f }, + { -1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 1.0f }, + { 1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 0.0f }, +}; + +static const uint32_t s_numPlaneIndices = 6; +static const uint16_t s_planeIndices[s_numPlaneIndices] = +{ + 0, 1, 2, + 1, 3, 2, +}; + +static const char* s_shaderPath = NULL; +static bool s_flipV = false; +static float s_texelHalf = 0.0f; + +static bgfx::UniformHandle u_texColor; +static bgfx::UniformHandle u_shadowMap[ShadowMapRenderTargets::Count]; +static bgfx::RenderTargetHandle s_rtShadowMap[ShadowMapRenderTargets::Count]; +static bgfx::RenderTargetHandle s_rtBlur; + +static void shaderFilePath(char* _out, const char* _name) +{ + strcpy(_out, s_shaderPath); + strcat(_out, _name); + strcat(_out, ".bin"); +} + +long int fsize(FILE* _file) +{ + long int pos = ftell(_file); + fseek(_file, 0L, SEEK_END); + long int size = ftell(_file); + fseek(_file, pos, SEEK_SET); + return size; +} + +static const bgfx::Memory* load(const char* _filePath) +{ + FILE* file = fopen(_filePath, "rb"); + if (NULL != file) + { + uint32_t size = (uint32_t)fsize(file); + const bgfx::Memory* mem = bgfx::alloc(size+1); + size_t ignore = fread(mem->data, 1, size, file); + BX_UNUSED(ignore); + fclose(file); + mem->data[mem->size-1] = '\0'; + return mem; + } + + return NULL; +} + +static const bgfx::Memory* loadShader(const char* _name) +{ + char filePath[512]; + shaderFilePath(filePath, _name); + return load(filePath); +} + +static const bgfx::Memory* loadTexture(const char* _name) +{ + char filePath[512]; + strcpy(filePath, "textures/"); + strcat(filePath, _name); + return load(filePath); +} + +static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName) +{ + const bgfx::Memory* mem; + + // Load vertex shader. + mem = loadShader(_vsName); + bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem); + + // Load fragment shader. + mem = loadShader(_fsName); + bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem); + + // Create program from shaders. + bgfx::ProgramHandle program = bgfx::createProgram(vsh, fsh); + + // We can destroy vertex and fragment shader here since + // their reference is kept inside bgfx after calling createProgram. + // Vertex and fragment shader will be destroyed once program is + // destroyed. + bgfx::destroyVertexShader(vsh); + bgfx::destroyFragmentShader(fsh); + + return program; +} + +void mtxScaleRotateTranslate(float* _result + , const float _scaleX + , const float _scaleY + , const float _scaleZ + , const float _rotX + , const float _rotY + , const float _rotZ + , const float _translateX + , const float _translateY + , const float _translateZ + ) +{ + float mtxRotateTranslate[16]; + float mtxScale[16]; + + mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ); + mtxRotateTranslate[12] = _translateX; + mtxRotateTranslate[13] = _translateY; + mtxRotateTranslate[14] = _translateZ; + + memset(mtxScale, 0, sizeof(float)*16); + mtxScale[0] = _scaleX; + mtxScale[5] = _scaleY; + mtxScale[10] = _scaleZ; + mtxScale[15] = 1.0f; + + mtxMul(_result, mtxScale, mtxRotateTranslate); +} + +void mtxBillboard(float* __restrict _result + , const float* __restrict _view + , const float* __restrict _pos + , const float* __restrict _scale) +{ + _result[ 0] = _view[0] * _scale[0]; + _result[ 1] = _view[4] * _scale[0]; + _result[ 2] = _view[8] * _scale[0]; + _result[ 3] = 0.0f; + _result[ 4] = _view[1] * _scale[1]; + _result[ 5] = _view[5] * _scale[1]; + _result[ 6] = _view[9] * _scale[1]; + _result[ 7] = 0.0f; + _result[ 8] = _view[2] * _scale[2]; + _result[ 9] = _view[6] * _scale[2]; + _result[10] = _view[10] * _scale[2]; + _result[11] = 0.0f; + _result[12] = _pos[0]; + _result[13] = _pos[1]; + _result[14] = _pos[2]; + _result[15] = 1.0f; +} + +void mtxYawPitchRoll(float* __restrict _result + , float _yaw + , float _pitch + , float _roll + ) +{ + float sroll = sinf(_roll); + float croll = cosf(_roll); + float spitch = sinf(_pitch); + float cpitch = cosf(_pitch); + float syaw = sinf(_yaw); + float cyaw = cosf(_yaw); + + _result[ 0] = sroll * spitch * syaw + croll * cyaw; + _result[ 1] = sroll * cpitch; + _result[ 2] = sroll * spitch * cyaw - croll * syaw; + _result[ 3] = 0.0f; + _result[ 4] = croll * spitch * syaw - sroll * cyaw; + _result[ 5] = croll * cpitch; + _result[ 6] = croll * spitch * cyaw + sroll * syaw; + _result[ 7] = 0.0f; + _result[ 8] = cpitch * syaw; + _result[ 9] = -spitch; + _result[10] = cpitch * cyaw; + _result[11] = 0.0f; + _result[12] = 0.0f; + _result[13] = 0.0f; + _result[14] = 0.0f; + _result[15] = 1.0f; +} + +struct Material +{ + union Ambient + { + struct + { + float m_r; + float m_g; + float m_b; + float m_unused; + }; + + float m_v[4]; + }; + + union Diffuse + { + struct + { + float m_r; + float m_g; + float m_b; + float m_unused; + }; + + float m_v[4]; + }; + + union Specular + { + struct + { + float m_r; + float m_g; + float m_b; + float m_ns; + }; + + float m_v[4]; + }; + + Ambient m_ka; + Diffuse m_kd; + Specular m_ks; +}; + +struct Light +{ + union Position + { + struct + { + float m_x; + float m_y; + float m_z; + float m_w; + }; + + float m_v[4]; + }; + + union LightRgbPower + { + struct + { + float m_r; + float m_g; + float m_b; + float m_power; + }; + + float m_v[4]; + }; + + union SpotDirectionInner + { + struct + { + float m_x; + float m_y; + float m_z; + float m_inner; + }; + + float m_v[4]; + }; + + union AttenuationSpotOuter + { + struct + { + float m_attnConst; + float m_attnLinear; + float m_attnQuadrantic; + float m_outer; + }; + + float m_v[4]; + }; + + void computeViewSpaceComponents(float* _viewMtx) + { + vec4MulMtx(m_position_viewSpace, m_position.m_v, _viewMtx); + + float tmp[] = + { + m_spotDirectionInner.m_x + , m_spotDirectionInner.m_y + , m_spotDirectionInner.m_z + , 0.0f + }; + vec4MulMtx(m_spotDirectionInner_viewSpace, tmp, _viewMtx); + m_spotDirectionInner_viewSpace[3] = m_spotDirectionInner.m_v[3]; + } + + Position m_position; + float m_position_viewSpace[4]; + LightRgbPower m_ambientPower; + LightRgbPower m_diffusePower; + LightRgbPower m_specularPower; + SpotDirectionInner m_spotDirectionInner; + float m_spotDirectionInner_viewSpace[4]; + AttenuationSpotOuter m_attenuationSpotOuter; +}; + +struct Uniforms +{ + void init() + { + m_ambientPass = 1.0f; + m_lightningPass = 1.0f; + + m_shadowMapBias = 0.003f; + m_shadowMapOffset = 0.0f; + m_shadowMapParam0 = 0.5; + m_shadowMapParam1 = 1.0; + m_depthValuePow = 1.0f; + m_showSmCoverage = 1.0f; + m_shadowMapTexelSize = 1.0f/512.0f; + + m_csmFarDistances[0] = 30.0f; + m_csmFarDistances[1] = 90.0f; + m_csmFarDistances[2] = 180.0f; + m_csmFarDistances[3] = 1000.0f; + + m_tetraNormalGreen[0] = 0.0f; + m_tetraNormalGreen[1] = -0.57735026f; + m_tetraNormalGreen[2] = 0.81649661f; + + m_tetraNormalYellow[0] = 0.0f; + m_tetraNormalYellow[1] = -0.57735026f; + m_tetraNormalYellow[2] = -0.81649661f; + + m_tetraNormalBlue[0] = -0.81649661f; + m_tetraNormalBlue[1] = 0.57735026f; + m_tetraNormalBlue[2] = 0.0f; + + m_tetraNormalRed[0] = 0.81649661f; + m_tetraNormalRed[1] = 0.57735026f; + m_tetraNormalRed[2] = 0.0f; + + m_XNum = 2.0f; + m_YNum = 2.0f; + m_XOffset = 10.0f/512.0f; + m_YOffset = 10.0f/512.0f; + + u_params0 = bgfx::createUniform("u_params0", bgfx::UniformType::Uniform4fv); + u_params1 = bgfx::createUniform("u_params1", bgfx::UniformType::Uniform4fv); + u_params2 = bgfx::createUniform("u_params2", bgfx::UniformType::Uniform4fv); + u_color = bgfx::createUniform("u_color", bgfx::UniformType::Uniform4fv); + u_smSamplingParams = bgfx::createUniform("u_smSamplingParams", bgfx::UniformType::Uniform4fv); + u_csmFarDistances = bgfx::createUniform("u_csmFarDistances", bgfx::UniformType::Uniform4fv); + u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Uniform4x4fv); + + u_tetraNormalGreen = bgfx::createUniform("u_tetraNormalGreen", bgfx::UniformType::Uniform3fv); + u_tetraNormalYellow = bgfx::createUniform("u_tetraNormalYellow", bgfx::UniformType::Uniform3fv); + u_tetraNormalBlue = bgfx::createUniform("u_tetraNormalBlue", bgfx::UniformType::Uniform3fv); + u_tetraNormalRed = bgfx::createUniform("u_tetraNormalRed", bgfx::UniformType::Uniform3fv); + + u_shadowMapMtx0 = bgfx::createUniform("u_shadowMapMtx0", bgfx::UniformType::Uniform4x4fv); + u_shadowMapMtx1 = bgfx::createUniform("u_shadowMapMtx1", bgfx::UniformType::Uniform4x4fv); + u_shadowMapMtx2 = bgfx::createUniform("u_shadowMapMtx2", bgfx::UniformType::Uniform4x4fv); + u_shadowMapMtx3 = bgfx::createUniform("u_shadowMapMtx3", bgfx::UniformType::Uniform4x4fv); + + u_lightPosition = bgfx::createUniform("u_lightPosition", bgfx::UniformType::Uniform4fv); + u_lightAmbientPower = bgfx::createUniform("u_lightAmbientPower", bgfx::UniformType::Uniform4fv); + u_lightDiffusePower = bgfx::createUniform("u_lightDiffusePower", bgfx::UniformType::Uniform4fv); + u_lightSpecularPower = bgfx::createUniform("u_lightSpecularPower", bgfx::UniformType::Uniform4fv); + u_lightSpotDirectionInner = bgfx::createUniform("u_lightSpotDirectionInner", bgfx::UniformType::Uniform4fv); + u_lightAttenuationSpotOuter = bgfx::createUniform("u_lightAttenuationSpotOuter", bgfx::UniformType::Uniform4fv); + + u_materialKa = bgfx::createUniform("u_materialKa", bgfx::UniformType::Uniform4fv); + u_materialKd = bgfx::createUniform("u_materialKd", bgfx::UniformType::Uniform4fv); + u_materialKs = bgfx::createUniform("u_materialKs", bgfx::UniformType::Uniform4fv); + + } + + void setPtrs(Material* _materialPtr, Light* _lightPtr, float* _colorPtr, float* _lightMtxPtr, float* _shadowMapMtx0, float* _shadowMapMtx1, float* _shadowMapMtx2, float* _shadowMapMtx3) + { + m_lightMtxPtr = _lightMtxPtr; + m_colorPtr = _colorPtr; + m_materialPtr = _materialPtr; + m_lightPtr = _lightPtr; + + m_shadowMapMtx0 = _shadowMapMtx0; + m_shadowMapMtx1 = _shadowMapMtx1; + m_shadowMapMtx2 = _shadowMapMtx2; + m_shadowMapMtx3 = _shadowMapMtx3; + } + + // Call this once at initialization. + void submitConstUniforms() + { + bgfx::setUniform(u_tetraNormalGreen, m_tetraNormalGreen); + bgfx::setUniform(u_tetraNormalYellow, m_tetraNormalYellow); + bgfx::setUniform(u_tetraNormalBlue, m_tetraNormalBlue); + bgfx::setUniform(u_tetraNormalRed, m_tetraNormalRed); + } + + // Call this once per frame. + void submitPerFrameUniforms() + { + bgfx::setUniform(u_params1, m_params1); + bgfx::setUniform(u_params2, m_params2); + bgfx::setUniform(u_smSamplingParams, m_paramsBlur); + bgfx::setUniform(u_csmFarDistances, m_csmFarDistances); + + bgfx::setUniform(u_materialKa, &m_materialPtr->m_ka); + bgfx::setUniform(u_materialKd, &m_materialPtr->m_kd); + bgfx::setUniform(u_materialKs, &m_materialPtr->m_ks); + + bgfx::setUniform(u_lightPosition, &m_lightPtr->m_position_viewSpace); + bgfx::setUniform(u_lightAmbientPower, &m_lightPtr->m_ambientPower); + bgfx::setUniform(u_lightDiffusePower, &m_lightPtr->m_diffusePower); + bgfx::setUniform(u_lightSpecularPower, &m_lightPtr->m_specularPower); + bgfx::setUniform(u_lightSpotDirectionInner, &m_lightPtr->m_spotDirectionInner_viewSpace); + bgfx::setUniform(u_lightAttenuationSpotOuter, &m_lightPtr->m_attenuationSpotOuter); + } + + // Call this before each draw call. + void submitPerDrawUniforms() + { + bgfx::setUniform(u_shadowMapMtx0, m_shadowMapMtx0); + bgfx::setUniform(u_shadowMapMtx1, m_shadowMapMtx1); + bgfx::setUniform(u_shadowMapMtx2, m_shadowMapMtx2); + bgfx::setUniform(u_shadowMapMtx3, m_shadowMapMtx3); + + bgfx::setUniform(u_params0, m_params0); + bgfx::setUniform(u_lightMtx, m_lightMtxPtr); + bgfx::setUniform(u_color, m_colorPtr); + } + + void destroy() + { + bgfx::destroyUniform(u_params0); + bgfx::destroyUniform(u_params1); + bgfx::destroyUniform(u_params2); + bgfx::destroyUniform(u_color); + bgfx::destroyUniform(u_smSamplingParams); + bgfx::destroyUniform(u_csmFarDistances); + + bgfx::destroyUniform(u_materialKa); + bgfx::destroyUniform(u_materialKd); + bgfx::destroyUniform(u_materialKs); + + bgfx::destroyUniform(u_tetraNormalGreen); + bgfx::destroyUniform(u_tetraNormalYellow); + bgfx::destroyUniform(u_tetraNormalBlue); + bgfx::destroyUniform(u_tetraNormalRed); + + bgfx::destroyUniform(u_shadowMapMtx0); + bgfx::destroyUniform(u_shadowMapMtx1); + bgfx::destroyUniform(u_shadowMapMtx2); + bgfx::destroyUniform(u_shadowMapMtx3); + + bgfx::destroyUniform(u_lightMtx); + bgfx::destroyUniform(u_lightPosition); + bgfx::destroyUniform(u_lightAmbientPower); + bgfx::destroyUniform(u_lightDiffusePower); + bgfx::destroyUniform(u_lightSpecularPower); + bgfx::destroyUniform(u_lightSpotDirectionInner); + bgfx::destroyUniform(u_lightAttenuationSpotOuter); + } + + union + { + struct + { + float m_ambientPass; + float m_lightningPass; + float m_unused00; + float m_unused01; + }; + + float m_params0[4]; + }; + + union + { + struct + { + float m_shadowMapBias; + float m_shadowMapOffset; + float m_shadowMapParam0; + float m_shadowMapParam1; + }; + + float m_params1[4]; + }; + + union + { + struct + { + float m_depthValuePow; + float m_showSmCoverage; + float m_shadowMapTexelSize; + float m_unused23; + }; + + float m_params2[4]; + }; + + union + { + struct + { + float m_XNum; + float m_YNum; + float m_XOffset; + float m_YOffset; + }; + + float m_paramsBlur[4]; + }; + + float m_tetraNormalGreen[3]; + float m_tetraNormalYellow[3]; + float m_tetraNormalBlue[3]; + float m_tetraNormalRed[3]; + float m_csmFarDistances[4]; + + float* m_lightMtxPtr; + float* m_colorPtr; + Light* m_lightPtr; + float* m_shadowMapMtx0; + float* m_shadowMapMtx1; + float* m_shadowMapMtx2; + float* m_shadowMapMtx3; + Material* m_materialPtr; + +private: + bgfx::UniformHandle u_params0; + bgfx::UniformHandle u_params1; + bgfx::UniformHandle u_params2; + bgfx::UniformHandle u_color; + bgfx::UniformHandle u_smSamplingParams; + bgfx::UniformHandle u_csmFarDistances; + + bgfx::UniformHandle u_materialKa; + bgfx::UniformHandle u_materialKd; + bgfx::UniformHandle u_materialKs; + + bgfx::UniformHandle u_tetraNormalGreen; + bgfx::UniformHandle u_tetraNormalYellow; + bgfx::UniformHandle u_tetraNormalBlue; + bgfx::UniformHandle u_tetraNormalRed; + + bgfx::UniformHandle u_shadowMapMtx0; + bgfx::UniformHandle u_shadowMapMtx1; + bgfx::UniformHandle u_shadowMapMtx2; + bgfx::UniformHandle u_shadowMapMtx3; + + bgfx::UniformHandle u_lightMtx; + bgfx::UniformHandle u_lightPosition; + bgfx::UniformHandle u_lightAmbientPower; + bgfx::UniformHandle u_lightDiffusePower; + bgfx::UniformHandle u_lightSpecularPower; + bgfx::UniformHandle u_lightSpotDirectionInner; + bgfx::UniformHandle u_lightAttenuationSpotOuter; +}; +static Uniforms s_uniforms; + +struct RenderState +{ + enum Enum + { + Default = 0, + + ShadowMap_PackDepth, + ShadowMap_PackDepthHoriz, + ShadowMap_PackDepthVert, + + Custom_BlendLightTexture, + Custom_DrawPlaneBottom, + + Count + }; + + uint64_t m_state; + uint32_t m_blendFactorRgba; + uint32_t m_fstencil; + uint32_t m_bstencil; +}; + +static RenderState s_renderStates[RenderState::Count] = +{ + { // Default + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, + { // ShadowMap_PackDepth + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, + { // ShadowMap_PackDepthHoriz + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_TEST_EQUAL + | BGFX_STENCIL_FUNC_REF(1) + | BGFX_STENCIL_FUNC_RMASK(0xff) + | BGFX_STENCIL_OP_FAIL_S_KEEP + | BGFX_STENCIL_OP_FAIL_Z_KEEP + | BGFX_STENCIL_OP_PASS_Z_KEEP + , BGFX_STENCIL_NONE + }, + { // ShadowMap_PackDepthVert + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_TEST_EQUAL + | BGFX_STENCIL_FUNC_REF(0) + | BGFX_STENCIL_FUNC_RMASK(0xff) + | BGFX_STENCIL_OP_FAIL_S_KEEP + | BGFX_STENCIL_OP_FAIL_Z_KEEP + | BGFX_STENCIL_OP_PASS_Z_KEEP + , BGFX_STENCIL_NONE + }, + { // Custom_BlendLightTexture + BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_COLOR, BGFX_STATE_BLEND_INV_SRC_COLOR) + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, + { // Custom_DrawPlaneBottom + BGFX_STATE_RGB_WRITE + | BGFX_STATE_CULL_CW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, +}; + +struct ViewState +{ + ViewState(uint32_t _width = 1280, uint32_t _height = 720) + : m_width(_width) + , m_height(_height) + { + } + + uint32_t m_width; + uint32_t m_height; + + float m_view[16]; + float m_proj[16]; +}; + +struct ClearValues +{ + ClearValues(uint32_t _clearRgba = 0x30303000 + , float _clearDepth = 1.0f + , uint8_t _clearStencil = 0 + ) + : m_clearRgba(_clearRgba) + , m_clearDepth(_clearDepth) + , m_clearStencil(_clearStencil) + { + } + + uint32_t m_clearRgba; + float m_clearDepth; + uint8_t m_clearStencil; +}; + +struct Aabb +{ + float m_min[3]; + float m_max[3]; +}; + +struct Obb +{ + float m_mtx[16]; +}; + +struct Sphere +{ + float m_center[3]; + float m_radius; +}; + +struct Primitive +{ + uint32_t m_startIndex; + uint32_t m_numIndices; + uint32_t m_startVertex; + uint32_t m_numVertices; + + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; +}; + +typedef std::vector PrimitiveArray; + +struct Group +{ + Group() + { + reset(); + } + + void reset() + { + m_vbh.idx = bgfx::invalidHandle; + m_ibh.idx = bgfx::invalidHandle; + m_prims.clear(); + } + + bgfx::VertexBufferHandle m_vbh; + bgfx::IndexBufferHandle m_ibh; + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; + PrimitiveArray m_prims; +}; + +struct Mesh +{ + void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) + { + Group group; + const bgfx::Memory* mem; + uint32_t size; + + size = _numVertices*_decl.getStride(); + mem = bgfx::makeRef(_vertices, size); + group.m_vbh = bgfx::createVertexBuffer(mem, _decl); + + size = _numIndices*2; + mem = bgfx::makeRef(_indices, size); + group.m_ibh = bgfx::createIndexBuffer(mem); + + //TODO: + // group.m_sphere = ... + // group.m_aabb = ... + // group.m_obb = ... + // group.m_prims = ... + + m_groups.push_back(group); + } + + void load(const char* _filePath) + { +#define BGFX_CHUNK_MAGIC_VB BX_MAKEFOURCC('V', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) + + bx::CrtFileReader reader; + reader.open(_filePath); + + Group group; + + uint32_t chunk; + while (4 == bx::read(&reader, chunk) ) + { + switch (chunk) + { + case BGFX_CHUNK_MAGIC_VB: + { + bx::read(&reader, group.m_sphere); + bx::read(&reader, group.m_aabb); + bx::read(&reader, group.m_obb); + + bx::read(&reader, m_decl); + uint16_t stride = m_decl.getStride(); + + uint16_t numVertices; + bx::read(&reader, numVertices); + const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); + bx::read(&reader, mem->data, mem->size); + + group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); + } + break; + + case BGFX_CHUNK_MAGIC_IB: + { + uint32_t numIndices; + bx::read(&reader, numIndices); + const bgfx::Memory* mem = bgfx::alloc(numIndices*2); + bx::read(&reader, mem->data, mem->size); + group.m_ibh = bgfx::createIndexBuffer(mem); + } + break; + + case BGFX_CHUNK_MAGIC_PRI: + { + uint16_t len; + bx::read(&reader, len); + + std::string material; + material.resize(len); + bx::read(&reader, const_cast(material.c_str() ), len); + + uint16_t num; + bx::read(&reader, num); + + for (uint32_t ii = 0; ii < num; ++ii) + { + bx::read(&reader, len); + + std::string name; + name.resize(len); + bx::read(&reader, const_cast(name.c_str() ), len); + + Primitive prim; + bx::read(&reader, prim.m_startIndex); + bx::read(&reader, prim.m_numIndices); + bx::read(&reader, prim.m_startVertex); + bx::read(&reader, prim.m_numVertices); + bx::read(&reader, prim.m_sphere); + bx::read(&reader, prim.m_aabb); + bx::read(&reader, prim.m_obb); + + group.m_prims.push_back(prim); + } + + m_groups.push_back(group); + group.reset(); + } + break; + + default: + DBG("%08x at %d", chunk, reader.seek() ); + break; + } + } + + reader.close(); + } + + void unload() + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + bgfx::destroyVertexBuffer(group.m_vbh); + + if (bgfx::invalidHandle != group.m_ibh.idx) + { + bgfx::destroyIndexBuffer(group.m_ibh); + } + } + m_groups.clear(); + } + + void submit(uint8_t _viewId, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState) + { + bgfx::TextureHandle texture = BGFX_INVALID_HANDLE; + submit(_viewId, _mtx, _program, _renderState, texture); + } + + void submit(uint8_t _viewId, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState, bgfx::TextureHandle _texture) + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + + // Set uniforms. + s_uniforms.submitPerDrawUniforms(); + + // Set model matrix for rendering. + bgfx::setTransform(_mtx); + bgfx::setProgram(_program); + bgfx::setIndexBuffer(group.m_ibh); + bgfx::setVertexBuffer(group.m_vbh); + + // Set textures. + if (bgfx::invalidHandle != _texture.idx) + { + bgfx::setTexture(0, u_texColor, _texture); + } + + for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii) + { + bgfx::setTexture(4 + ii, u_shadowMap[ii], s_rtShadowMap[ii]); + } + + // Apply render state. + bgfx::setStencil(_renderState.m_fstencil, _renderState.m_bstencil); + bgfx::setState(_renderState.m_state, _renderState.m_blendFactorRgba); + + // Submit. + bgfx::submit(_viewId); + } + } + + bgfx::VertexDecl m_decl; + typedef std::vector GroupArray; + GroupArray m_groups; +}; + +struct PosColorTexCoord0Vertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_rgba; + float m_u; + float m_v; + + static void init() + { + ms_decl.begin(); + ms_decl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + ms_decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true); + ms_decl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float); + ms_decl.end(); + } + + static bgfx::VertexDecl ms_decl; +}; + +bgfx::VertexDecl PosColorTexCoord0Vertex::ms_decl; + +void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBottomLeft = true, float _width = 1.0f, float _height = 1.0f) +{ + if (bgfx::checkAvailTransientVertexBuffer(3, PosColorTexCoord0Vertex::ms_decl) ) + { + bgfx::TransientVertexBuffer vb; + bgfx::allocTransientVertexBuffer(&vb, 3, PosColorTexCoord0Vertex::ms_decl); + PosColorTexCoord0Vertex* vertex = (PosColorTexCoord0Vertex*)vb.data; + + const float zz = 0.0f; + + const float minx = -_width; + const float maxx = _width; + const float miny = 0.0f; + const float maxy = _height*2.0f; + + const float texelHalfW = s_texelHalf/_textureWidth; + const float texelHalfH = s_texelHalf/_textureHeight; + const float minu = -1.0f + texelHalfW; + const float maxu = 1.0f + texelHalfW; + + float minv = texelHalfH; + float maxv = 2.0f + texelHalfH; + + if (_originBottomLeft) + { + std::swap(minv, maxv); + minv -= 1.0f; + maxv -= 1.0f; + } + + vertex[0].m_x = minx; + vertex[0].m_y = miny; + vertex[0].m_z = zz; + vertex[0].m_rgba = 0xffffffff; + vertex[0].m_u = minu; + vertex[0].m_v = minv; + + vertex[1].m_x = maxx; + vertex[1].m_y = miny; + vertex[1].m_z = zz; + vertex[1].m_rgba = 0xffffffff; + vertex[1].m_u = maxu; + vertex[1].m_v = minv; + + vertex[2].m_x = maxx; + vertex[2].m_y = maxy; + vertex[2].m_z = zz; + vertex[2].m_rgba = 0xffffffff; + vertex[2].m_u = maxu; + vertex[2].m_v = maxv; + + bgfx::setVertexBuffer(&vb); + } +} + +void worldSpaceFrustumCorners(float* _corners24f + , float _near + , float _far + , float _projWidth + , float _projHeight + , const float* __restrict _invViewMtx + ) +{ + // Define frustum corners in view space. + const float nw = _near * _projWidth; + const float nh = _near * _projHeight; + const float fw = _far * _projWidth; + const float fh = _far * _projHeight; + + const uint8_t numCorners = 8; + const float corners[numCorners][3] = + { + { -nw, nh, _near }, + { nw, nh, _near }, + { nw, -nh, _near }, + { -nw, -nh, _near }, + { -fw, fh, _far }, + { fw, fh, _far }, + { fw, -fh, _far }, + { -fw, -fh, _far }, + }; + + // Convert them to world space. + float (*out)[3] = (float(*)[3])_corners24f; + for (uint8_t ii = 0; ii < numCorners; ++ii) + { + vec3MulMtx( (float*)&out[ii], (float*)&corners[ii], _invViewMtx); + } +} + +/** + * _splits = { near0, far0, near1, far1... nearN, farN } + * N = _numSplits + */ +void splitFrustum(float* _splits, uint8_t _numSplits, float _near, float _far, float _splitWeight = 0.75f) +{ + const float l = _splitWeight; + const float ratio = _far/_near; + const int8_t numSlices = _numSplits*2; + const float numSlicesf = float(numSlices); + + // First slice. + _splits[0] = _near; + + for (uint8_t nn = 2, ff = 1; nn < numSlices; nn+=2, ff+=2) + { + float si = float(int8_t(ff) ) / numSlicesf; + + const float nearp = l*(_near*powf(ratio, si) ) + (1 - l)*(_near + (_far - _near)*si); + _splits[nn] = nearp; //near + _splits[ff] = nearp * 1.005f; //far from previous split + } + + // Last slice. + _splits[numSlices-1] = _far; +} + +struct Programs +{ + void init() + { + // Misc. + m_black = loadProgram("vs_shadowmaps_color", "fs_shadowmaps_color_black"); + m_texture = loadProgram("vs_shadowmaps_texture", "fs_shadowmaps_texture"); + m_colorTexture = loadProgram("vs_shadowmaps_color_texture", "fs_shadowmaps_color_texture"); + + // Blur. + m_vBlur[PackDepth::RGBA] = loadProgram("vs_shadowmaps_vblur", "fs_shadowmaps_vblur"); + m_hBlur[PackDepth::RGBA] = loadProgram("vs_shadowmaps_hblur", "fs_shadowmaps_hblur"); + m_vBlur[PackDepth::VSM] = loadProgram("vs_shadowmaps_vblur", "fs_shadowmaps_vblur_vsm"); + m_hBlur[PackDepth::VSM] = loadProgram("vs_shadowmaps_hblur", "fs_shadowmaps_hblur_vsm"); + + // Draw depth. + m_drawDepth[PackDepth::RGBA] = loadProgram("vs_shadowmaps_unpackdepth", "fs_shadowmaps_unpackdepth"); + m_drawDepth[PackDepth::VSM] = loadProgram("vs_shadowmaps_unpackdepth", "fs_shadowmaps_unpackdepth_vsm"); + + // Pack depth. + m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] = loadProgram("vs_shadowmaps_packdepth", "fs_shadowmaps_packdepth"); + m_packDepth[DepthImpl::InvZ][PackDepth::VSM] = loadProgram("vs_shadowmaps_packdepth", "fs_shadowmaps_packdepth_vsm"); + + m_packDepth[DepthImpl::Linear][PackDepth::RGBA] = loadProgram("vs_shadowmaps_packdepth_linear", "fs_shadowmaps_packdepth_linear"); + m_packDepth[DepthImpl::Linear][PackDepth::VSM] = loadProgram("vs_shadowmaps_packdepth_linear", "fs_shadowmaps_packdepth_vsm_linear"); + + // Color lightning. + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_hard"); + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_pcf"); + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_vsm"); + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_esm"); + + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_hard_linear"); + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_pcf_linear"); + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_vsm_linear"); + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_esm_linear"); + + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_hard_omni"); + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_pcf_omni"); + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_vsm_omni"); + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_esm_omni"); + + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_hard_linear_omni"); + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_pcf_linear_omni"); + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_vsm_linear_omni"); + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_esm_linear_omni"); + + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_hard_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_pcf_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_vsm_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_esm_csm"); + + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_hard_linear_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_pcf_linear_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_vsm_linear_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_esm_linear_csm"); + } + + void destroy() + { + // Color lightning. + for (uint8_t ii = 0; ii < SmType::Count; ++ii) + { + for (uint8_t jj = 0; jj < DepthImpl::Count; ++jj) + { + for (uint8_t kk = 0; kk < SmImpl::Count; ++kk) + { + bgfx::destroyProgram(m_colorLightning[ii][jj][kk]); + } + } + } + + // Pack depth. + for (uint8_t ii = 0; ii < DepthImpl::Count; ++ii) + { + for (uint8_t jj = 0; jj < PackDepth::Count; ++jj) + { + bgfx::destroyProgram(m_packDepth[ii][jj]); + } + } + + // Draw depth. + for (uint8_t ii = 0; ii < PackDepth::Count; ++ii) + { + bgfx::destroyProgram(m_drawDepth[ii]); + } + + // Hblur. + for (uint8_t ii = 0; ii < PackDepth::Count; ++ii) + { + bgfx::destroyProgram(m_hBlur[ii]); + } + + // Vblur. + for (uint8_t ii = 0; ii < PackDepth::Count; ++ii) + { + bgfx::destroyProgram(m_vBlur[ii]); + } + + // Misc. + bgfx::destroyProgram(m_colorTexture); + bgfx::destroyProgram(m_texture); + bgfx::destroyProgram(m_black); + } + + bgfx::ProgramHandle m_black; + bgfx::ProgramHandle m_texture; + bgfx::ProgramHandle m_colorTexture; + bgfx::ProgramHandle m_vBlur[PackDepth::Count]; + bgfx::ProgramHandle m_hBlur[PackDepth::Count]; + bgfx::ProgramHandle m_drawDepth[PackDepth::Count]; + bgfx::ProgramHandle m_packDepth[DepthImpl::Count][PackDepth::Count]; + bgfx::ProgramHandle m_colorLightning[SmType::Count][DepthImpl::Count][SmImpl::Count]; +}; + +static Programs s_programs; + +struct ShadowMapSettings +{ +#define IMGUI_FLOAT_PARAM(_name) float _name, _name##Min, _name##Max, _name##Step + IMGUI_FLOAT_PARAM(m_sizePwrTwo); + IMGUI_FLOAT_PARAM(m_depthValuePow); + IMGUI_FLOAT_PARAM(m_near); + IMGUI_FLOAT_PARAM(m_far); + IMGUI_FLOAT_PARAM(m_bias); + IMGUI_FLOAT_PARAM(m_normalOffset); + IMGUI_FLOAT_PARAM(m_customParam0); + IMGUI_FLOAT_PARAM(m_customParam1); + IMGUI_FLOAT_PARAM(m_xNum); + IMGUI_FLOAT_PARAM(m_yNum); + IMGUI_FLOAT_PARAM(m_xOffset); + IMGUI_FLOAT_PARAM(m_yOffset); + bool m_doBlur; + bgfx::ProgramHandle* m_progPack; + bgfx::ProgramHandle* m_progDraw; +#undef IMGUI_FLOAT_PARAM +}; + +int _main_(int /*_argc*/, char** /*_argv*/) +{ + uint32_t debug = BGFX_DEBUG_TEXT; + uint32_t reset = BGFX_RESET_VSYNC; + + ViewState viewState(1280, 720); + ClearValues clearValues(0x00000000, 1.0f, 0); + + bgfx::init(); + bgfx::reset(viewState.m_width, viewState.m_height, reset); + + // Enable debug text. + bgfx::setDebug(debug); + + // Setup root path for binary shaders. Shader binaries are different + // for each renderer. + switch (bgfx::getRendererType() ) + { + default: + case bgfx::RendererType::Direct3D9: + s_shaderPath = "shaders/dx9/"; + s_texelHalf = 0.5f; + break; + + case bgfx::RendererType::Direct3D11: + s_shaderPath = "shaders/dx11/"; + break; + + case bgfx::RendererType::OpenGL: + s_shaderPath = "shaders/glsl/"; + s_flipV = true; + break; + + case bgfx::RendererType::OpenGLES2: + case bgfx::RendererType::OpenGLES3: + s_shaderPath = "shaders/gles/"; + s_flipV = true; + break; + } + + // Imgui. + FILE* file = fopen("font/droidsans.ttf", "rb"); + uint32_t size = (uint32_t)fsize(file); + void* data = malloc(size); + size_t ignore = fread(data, 1, size, file); + BX_UNUSED(ignore); + fclose(file); + imguiCreate(data, size); + + // Uniforms. + s_uniforms.init(); + u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv); + u_shadowMap[0] = bgfx::createUniform("u_shadowMap0", bgfx::UniformType::Uniform1iv); + u_shadowMap[1] = bgfx::createUniform("u_shadowMap1", bgfx::UniformType::Uniform1iv); + u_shadowMap[2] = bgfx::createUniform("u_shadowMap2", bgfx::UniformType::Uniform1iv); + u_shadowMap[3] = bgfx::createUniform("u_shadowMap3", bgfx::UniformType::Uniform1iv); + + // Programs. + s_programs.init(); + + // Vertex declarations. + bgfx::VertexDecl PosNormalTexcoordDecl; + PosNormalTexcoordDecl.begin(); + PosNormalTexcoordDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + PosNormalTexcoordDecl.add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true); + PosNormalTexcoordDecl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float); + PosNormalTexcoordDecl.end(); + + bgfx::VertexDecl posDecl; + posDecl.begin(); + posDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + posDecl.end(); + + PosColorTexCoord0Vertex::init(); + + // Textures. + const bgfx::Memory* mem; + + mem = loadTexture("figure-rgba.dds"); + bgfx::TextureHandle texFigure = bgfx::createTexture(mem); + + mem = loadTexture("flare.dds"); + bgfx::TextureHandle texFlare = bgfx::createTexture(mem); + + mem = loadTexture("fieldstone-rgba.dds"); + bgfx::TextureHandle texFieldstone = bgfx::createTexture(mem); + + // Meshes. + Mesh bunnyMesh; + Mesh treeMesh; + Mesh cubeMesh; + Mesh hollowcubeMesh; + Mesh hplaneMesh; + Mesh vplaneMesh; + bunnyMesh.load("meshes/bunny.bin"); + treeMesh.load("meshes/tree.bin"); + cubeMesh.load("meshes/cube.bin"); + hollowcubeMesh.load("meshes/hollowcube.bin"); + hplaneMesh.load(s_hplaneVertices, s_numHPlaneVertices, PosNormalTexcoordDecl, s_planeIndices, s_numPlaneIndices); + vplaneMesh.load(s_vplaneVertices, s_numVPlaneVertices, PosNormalTexcoordDecl, s_planeIndices, s_numPlaneIndices); + + // Materials. + Material defaultMaterial = + { + {{ 1.0f, 1.0f, 1.0f, 0.0f }} //ambient + ,{{ 1.0f, 1.0f, 1.0f, 0.0f }} //diffuse + ,{{ 1.0f, 1.0f, 1.0f, 0.0f }} //specular, exponent + }; + + // Lights. + Light pointLight = + { + {{ 0.0f, 0.0f, 0.0f, 1.0f }}, //position + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 1.0f, 1.0f, 1.0f, 0.0f }}, //ambient + {{ 1.0f, 1.0f, 1.0f, 850.0f }}, //diffuse + {{ 1.0f, 1.0f, 1.0f, 0.0f }}, //specular + {{ 0.0f,-0.4f,-0.6f, 0.0f }}, //spotdirection, spotexponent + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 1.0f, 0.0f, 1.0f, 91.0f }}, //attenuation, spotcutoff + }; + + Light directionalLight = + { + {{ 0.5f,-1.0f, 0.1f, 0.0f }}, //position + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 1.0f, 1.0f, 1.0f, 0.02f }}, //ambient + {{ 1.0f, 1.0f, 1.0f, 0.4f }}, //diffuse + {{ 1.0f, 1.0f, 1.0f, 0.0f }}, //specular + {{ 0.0f, 0.0f, 0.0f, 1.0f }}, //spotdirection, spotexponent + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 0.0f, 0.0f, 0.0f, 1.0f }}, //attenuation, spotcutoff + }; + + // Setup uniforms. + float color[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; + float lightMtx[16]; + float shadowMapMtx[ShadowMapRenderTargets::Count][16]; + s_uniforms.setPtrs(&defaultMaterial + , &pointLight + , color + , lightMtx + , &shadowMapMtx[ShadowMapRenderTargets::First][0] + , &shadowMapMtx[ShadowMapRenderTargets::Second][0] + , &shadowMapMtx[ShadowMapRenderTargets::Third][0] + , &shadowMapMtx[ShadowMapRenderTargets::Fourth][0] + ); + s_uniforms.submitConstUniforms(); + + // Settings. + ShadowMapSettings smSettings[LightType::Count][DepthImpl::Count][SmImpl::Count] = + { + { //LightType::Spot + + { //DepthImpl::InvZ + + { //SmImpl::Hard + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 8.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.045f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 450.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 3.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.02f, 0.0f, 0.3f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw + } + + }, + { //DepthImpl::Linear + + { //SmImpl::Hard + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 2000.0f, 1.0f, 2000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0 + , 300.0f, 1.0f, 1500.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0055f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::ESM] //m_progDraw + } + + } + + }, + { //LightType::Point + + { //DepthImpl::InvZ + + { //SmImpl::Hard + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 8.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.055f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 450.0f, 1.0f, 900.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 3.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.035f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw + } + + }, + { //DepthImpl::Linear + + { //SmImpl::Hard + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.003f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.006f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0 + , 400.0f, 1.0f, 900.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 8000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::ESM] //m_progDraw + } + + } + + }, + { //LightType::Directional + + { //DepthImpl::InvZ + + { //SmImpl::Hard + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw + } + + }, + { //DepthImpl::Linear + + { //SmImpl::Hard + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::ESM] //m_progDraw + } + + } + } + }; + + struct SceneSettings + { + LightType::Enum m_lightType; + DepthImpl::Enum m_depthImpl; + SmImpl::Enum m_smImpl; + float m_spotOuterAngle; + float m_spotInnerAngle; + float m_fovXAdjust; + float m_fovYAdjust; + float m_coverageSpotL; + float m_numSplitsf; + float m_splitDistribution; + uint8_t m_numSplits; + bool m_updateLights; + bool m_updateScene; + bool m_drawDepthBuffer; + bool m_showSmCoverage; + bool m_stencilPack; + bool m_stabilize; + }; + + SceneSettings settings; + settings.m_lightType = LightType::SpotLight; + settings.m_depthImpl = DepthImpl::InvZ; + settings.m_smImpl = SmImpl::Hard; + settings.m_spotOuterAngle = 45.0f; + settings.m_spotInnerAngle = 30.0f; + settings.m_fovXAdjust = 0.0f; + settings.m_fovYAdjust = 0.0f; + settings.m_coverageSpotL = 90.0f; + settings.m_numSplitsf = 4.0f; + settings.m_splitDistribution = 0.6f; + settings.m_numSplits = uint8_t(settings.m_numSplitsf); + settings.m_updateLights = true; + settings.m_updateScene = true; + settings.m_drawDepthBuffer = false; + settings.m_showSmCoverage = false; + settings.m_stencilPack = true; + settings.m_stabilize = true; + + ShadowMapSettings* currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl]; + + // Render targets. + uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo); + uint16_t currentShadowMapSize = shadowMapSize; + float currentShadowMapSizef = float(int16_t(currentShadowMapSize) ); + s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef; + for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii) + { + s_rtShadowMap[ii] = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D24S8); + } + s_rtBlur = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8); + + // Setup camera. + float initialPos[3] = { 0.0f, 60.0f, -105.0f }; + cameraSetPosition(initialPos); + cameraSetVerticalAngle(-0.45f); + + // Set view and projection matrices. + const float camFovy = 60.0f; + const float camAspect = float(int32_t(viewState.m_width) ) / float(int32_t(viewState.m_height) ); + const float camNear = 0.1f; + const float camFar = 2000.0f; + const float projHeight = 1.0f/tanf(camFovy*( (float)M_PI/180.0f)*0.5f); + const float projWidth = projHeight * 1.0f/camAspect; + mtxProj(viewState.m_proj, camFovy, camAspect, camNear, camFar); + cameraGetViewMtx(viewState.m_view); + + float timeAccumulatorLight = 0.0f; + float timeAccumulatorScene = 0.0f; + + entry::MouseState mouseState; + while (!entry::processEvents(viewState.m_width, viewState.m_height, debug, reset, &mouseState) ) + { + // Imgui. + imguiBeginFrame(mouseState.m_mx + , mouseState.m_my + , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0) + | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0) + , 0 + , viewState.m_width + , viewState.m_height + ); + + static int32_t rightScrollArea = 0; + imguiBeginScrollArea("Settings", viewState.m_width - 256 - 10, 10, 256, 660, &rightScrollArea); +#define IMGUI_FLOAT_SLIDER(_name, _val) \ + imguiSlider(_name \ + , &_val \ + , *(((float*)&_val)+1) \ + , *(((float*)&_val)+2) \ + , *(((float*)&_val)+3) \ + ) + + imguiBool("Update lights", settings.m_updateLights); + imguiBool("Update scene", settings.m_updateScene); + + imguiSeparatorLine(); + imguiLabel("Shadow map depth:"); + imguiEnum(settings.m_depthImpl); + currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl]; + + imguiSeparator(); + imguiBool("Draw depth buffer.", settings.m_drawDepthBuffer); + if (settings.m_drawDepthBuffer) + { + IMGUI_FLOAT_SLIDER("Depth value pow:", currentSmSettings->m_depthValuePow); + } + + imguiSeparatorLine(); + imguiLabel("Shadow Map implementation:"); + imguiEnum(settings.m_smImpl); + currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl]; + + imguiSeparator(); + IMGUI_FLOAT_SLIDER("Bias:", currentSmSettings->m_bias); + IMGUI_FLOAT_SLIDER("Normal offset:", currentSmSettings->m_normalOffset); + imguiSeparator(); + if (LightType::DirectionalLight != settings.m_lightType) + { + IMGUI_FLOAT_SLIDER("Near plane:", currentSmSettings->m_near); + } + IMGUI_FLOAT_SLIDER("Far plane:", currentSmSettings->m_far); + + imguiSeparator(); + switch(settings.m_smImpl) + { + case SmImpl::Hard: + //imguiLabel("Hard"); + break; + case SmImpl::PCF: + imguiLabel("PCF"); + IMGUI_FLOAT_SLIDER("X Offset:", currentSmSettings->m_xOffset); + IMGUI_FLOAT_SLIDER("Y Offset:", currentSmSettings->m_yOffset); + break; + case SmImpl::VSM: + imguiLabel("VSM"); + IMGUI_FLOAT_SLIDER("Min variance", currentSmSettings->m_customParam0); + IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1); + imguiBool("Blur shadow map", currentSmSettings->m_doBlur); + if (currentSmSettings->m_doBlur) + { + IMGUI_FLOAT_SLIDER("Blur X Offset:", currentSmSettings->m_xOffset); + IMGUI_FLOAT_SLIDER("Blur Y Offset:", currentSmSettings->m_yOffset); + } + break; + case SmImpl::ESM: + imguiLabel("ESM"); + IMGUI_FLOAT_SLIDER("ESM Hardness", currentSmSettings->m_customParam0); + IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1); + imguiBool("Blur shadow map", currentSmSettings->m_doBlur); + if (currentSmSettings->m_doBlur) + { + IMGUI_FLOAT_SLIDER("Blur X Offset:", currentSmSettings->m_xOffset); + IMGUI_FLOAT_SLIDER("Blur Y Offset:", currentSmSettings->m_yOffset); + } + break; + + case SmImpl::Count: + default: + break; + }; + + imguiEndScrollArea(); + + static int32_t leftScrollArea = 0; + imguiBeginScrollArea("Light", 10, 70, 256, 334, &leftScrollArea); + + const LightType::Enum ltBefore = settings.m_lightType; + imguiEnum(settings.m_lightType); + const LightType::Enum ltAfter = settings.m_lightType; + const bool bLtChanged = (ltAfter != ltBefore); + + imguiSeparator(); + imguiBool("Show shadow map coverage.", settings.m_showSmCoverage); + + imguiSeparator(); + imguiLabel("Shadow map resolution: %ux%u", currentShadowMapSize, currentShadowMapSize); + IMGUI_FLOAT_SLIDER(" ", currentSmSettings->m_sizePwrTwo); + + imguiSeparatorLine(); + if (LightType::SpotLight == settings.m_lightType) + { + imguiLabel("Spot light"); + imguiSlider("Shadow map area:", &settings.m_coverageSpotL, 45.0f, 120.0f, 1.0f); + + imguiSeparator(); + imguiSlider("Spot outer cone:", &settings.m_spotOuterAngle, 0.0f, 91.0f, 0.1f); + imguiSlider("Spot inner cone:", &settings.m_spotInnerAngle, 0.0f, 90.0f, 0.1f); + } + else if (LightType::PointLight == settings.m_lightType) + { + imguiLabel("Point light"); + imguiBool("Stencil pack", settings.m_stencilPack); + + imguiSlider("Fov X adjust:", &settings.m_fovXAdjust, -20.0f, 20.0f, 0.0001f); + imguiSlider("Fov Y adjust:", &settings.m_fovYAdjust, -20.0f, 20.0f, 0.0001f); + } + else if (LightType::DirectionalLight == settings.m_lightType) + { + imguiLabel("Directional light"); + imguiBool("Stabilize cascades", settings.m_stabilize); + imguiSlider("Cascade splits:", &settings.m_numSplitsf, 1.0f, 4.0f, 1.0f); + imguiSlider("Cascade distribution:", &settings.m_splitDistribution, 0.0f, 1.0f, 0.001f); + settings.m_numSplits = uint8_t(settings.m_numSplitsf); + } + +#undef IMGUI_FLOAT_SLIDER + imguiEndScrollArea(); + imguiEndFrame(); + + // Update uniforms. + s_uniforms.m_shadowMapBias = currentSmSettings->m_bias; + s_uniforms.m_shadowMapOffset = currentSmSettings->m_normalOffset; + s_uniforms.m_shadowMapParam0 = currentSmSettings->m_customParam0; + s_uniforms.m_shadowMapParam1 = currentSmSettings->m_customParam1; + s_uniforms.m_depthValuePow = currentSmSettings->m_depthValuePow; + s_uniforms.m_XNum = currentSmSettings->m_xNum; + s_uniforms.m_YNum = currentSmSettings->m_yNum; + s_uniforms.m_XOffset = currentSmSettings->m_xOffset; + s_uniforms.m_YOffset = currentSmSettings->m_yOffset; + s_uniforms.m_showSmCoverage = float(settings.m_showSmCoverage); + s_uniforms.m_lightPtr = (LightType::DirectionalLight == settings.m_lightType) ? &directionalLight : &pointLight; + + if (LightType::SpotLight == settings.m_lightType) + { + pointLight.m_attenuationSpotOuter.m_outer = settings.m_spotOuterAngle; + pointLight.m_spotDirectionInner.m_inner = settings.m_spotInnerAngle; + } + else + { + pointLight.m_attenuationSpotOuter.m_outer = 91.0f; //above 90.0f means point light + } + + s_uniforms.submitPerFrameUniforms(); + + // Time. + int64_t now = bx::getHPCounter(); + static int64_t last = now; + const int64_t frameTime = now - last; + last = now; + const double freq = double(bx::getHPFrequency() ); + const double toMs = 1000.0/freq; + const float deltaTime = float(frameTime/freq); + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/16-shadowmaps"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow maps example."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + // Update camera. + cameraUpdate(deltaTime); + + // Update view mtx. + cameraGetViewMtx(viewState.m_view); + + // Update lights. + pointLight.computeViewSpaceComponents(viewState.m_view); + directionalLight.computeViewSpaceComponents(viewState.m_view); + + // Update time accumulators. + if (settings.m_updateLights) { timeAccumulatorLight += deltaTime; } + if (settings.m_updateScene) { timeAccumulatorScene += deltaTime; } + + // Setup lights. + pointLight.m_position.m_x = cos(timeAccumulatorLight) * 20.0f; + pointLight.m_position.m_y = 26.0f; + pointLight.m_position.m_z = sin(timeAccumulatorLight) * 20.0f; + pointLight.m_spotDirectionInner.m_x = -pointLight.m_position.m_x; + pointLight.m_spotDirectionInner.m_y = -pointLight.m_position.m_y; + pointLight.m_spotDirectionInner.m_z = -pointLight.m_position.m_z; + + directionalLight.m_position.m_x = -cos(timeAccumulatorLight); + directionalLight.m_position.m_y = -1.0f; + directionalLight.m_position.m_z = -sin(timeAccumulatorLight); + + // Setup instance matrices. + float mtxFloor[16]; + const float floorScale = 550.0f; + mtxScaleRotateTranslate(mtxFloor + , floorScale //scaleX + , floorScale //scaleY + , floorScale //scaleZ + , 0.0f //rotX + , 0.0f //rotY + , 0.0f //rotZ + , 0.0f //translateX + , 0.0f //translateY + , 0.0f //translateZ + ); + + float mtxBunny[16]; + mtxScaleRotateTranslate(mtxBunny + , 5.0f + , 5.0f + , 5.0f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , 15.0f + , 5.0f + , 0.0f + ); + + float mtxHollowcube[16]; + mtxScaleRotateTranslate(mtxHollowcube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , 0.0f + , 10.0f + , 0.0f + ); + + float mtxCube[16]; + mtxScaleRotateTranslate(mtxCube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , -15.0f + , 5.0f + , 0.0f + ); + + const uint8_t numTrees = 10; + float mtxTrees[numTrees][16]; + for (uint8_t ii = 0; ii < numTrees; ++ii) + { + mtxScaleRotateTranslate(mtxTrees[ii] + , 2.0f + , 2.0f + , 2.0f + , 0.0f + , float(ii) + , 0.0f + , sin(float(ii)*2.0f*float(M_PI)/float(numTrees) ) * 60.0f + , 0.0f + , cos(float(ii)*2.0f*float(M_PI)/float(numTrees) ) * 60.0f + ); + } + + // Compute transform matrices. + const uint8_t shadowMapPasses = ShadowMapRenderTargets::Count; + float lightView[shadowMapPasses][16]; + float lightProj[shadowMapPasses][16]; + float mtxYpr[TetrahedronFaces::Count][16]; + + float screenProj[16]; + float screenView[16]; + mtxIdentity(screenView); + mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f); + + if (LightType::SpotLight == settings.m_lightType) + { + const float fovy = settings.m_coverageSpotL; + const float aspect = 1.0f; + mtxProj(lightProj[ProjType::Horizontal], fovy, aspect, currentSmSettings->m_near, currentSmSettings->m_far); + + //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane + if (DepthImpl::Linear == settings.m_depthImpl) + { + lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far; + lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far; + } + + float at[3]; + vec3Add(at, pointLight.m_position.m_v, pointLight.m_spotDirectionInner.m_v); + mtxLookAt(lightView[TetrahedronFaces::Green], pointLight.m_position.m_v, at); + } + else if (LightType::PointLight == settings.m_lightType) + { + float ypr[TetrahedronFaces::Count][3] = + { + { toRad( 0.0f), toRad( 27.36780516f), toRad(0.0f) } + ,{ toRad(180.0f), toRad( 27.36780516f), toRad(0.0f) } + ,{ toRad(-90.0f), toRad(-27.36780516f), toRad(0.0f) } + ,{ toRad( 90.0f), toRad(-27.36780516f), toRad(0.0f) } + }; + + + if (settings.m_stencilPack) + { + const float fovx = 143.98570868f + 3.51f + settings.m_fovXAdjust; + const float fovy = 125.26438968f + 9.85f + settings.m_fovYAdjust; + const float aspect = tanf(toRad(fovx*0.5f) )/tanf(toRad(fovy*0.5f) ); + + mtxProj(lightProj[ProjType::Vertical] + , fovx + , aspect + , currentSmSettings->m_near + , currentSmSettings->m_far + ); + + //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane + if (DepthImpl::Linear == settings.m_depthImpl) + { + lightProj[ProjType::Vertical][10] /= currentSmSettings->m_far; + lightProj[ProjType::Vertical][14] /= currentSmSettings->m_far; + } + + ypr[TetrahedronFaces::Green][2] = toRad(180.0f); + ypr[TetrahedronFaces::Yellow][2] = toRad( 0.0f); + ypr[TetrahedronFaces::Blue][2] = toRad( 90.0f); + ypr[TetrahedronFaces::Red][2] = toRad(-90.0f); + } + + const float fovx = 143.98570868f + 7.8f + settings.m_fovXAdjust; + const float fovy = 125.26438968f + 3.0f + settings.m_fovYAdjust; + const float aspect = tanf(toRad(fovx*0.5f) )/tanf(toRad(fovy*0.5f) ); + + mtxProj(lightProj[ProjType::Horizontal], fovy, aspect, currentSmSettings->m_near, currentSmSettings->m_far); + + //For linear depth, prevent depth division by variable w component in shaders and divide here by far plane + if (DepthImpl::Linear == settings.m_depthImpl) + { + lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far; + lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far; + } + + + for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii) + { + float mtxTmp[16]; + mtxYawPitchRoll(mtxTmp, ypr[ii][0], ypr[ii][1], ypr[ii][2]); + + float tmp[3] = + { + -vec3Dot(pointLight.m_position.m_v, &mtxTmp[0]) + , -vec3Dot(pointLight.m_position.m_v, &mtxTmp[4]) + , -vec3Dot(pointLight.m_position.m_v, &mtxTmp[8]) + }; + + mtxTranspose(mtxYpr[ii], mtxTmp); + + memcpy(lightView[ii], mtxYpr[ii], 12*sizeof(float) ); + lightView[ii][12] = tmp[0]; + lightView[ii][13] = tmp[1]; + lightView[ii][14] = tmp[2]; + lightView[ii][15] = 1.0f; + } + } + else // LightType::DirectionalLight == settings.m_lightType + { + // Setup light view mtx. + float eye[3] = + { + -directionalLight.m_position.m_x + , -directionalLight.m_position.m_y + , -directionalLight.m_position.m_z + }; + float at[3] = { 0.0f, 0.0f, 0.0f }; + mtxLookAt(lightView[0], eye, at); + + // Compute camera inverse view mtx. + float mtxViewInv[16]; + mtxInverse(mtxViewInv, viewState.m_view); + + // Compute split distances. + const uint8_t maxNumSplits = 4; + BX_CHECK(maxNumSplits >= settings.m_numSplits, "Error! Max num splits."); + + float splitSlices[maxNumSplits*2]; + splitFrustum(splitSlices, settings.m_numSplits, currentSmSettings->m_near, currentSmSettings->m_far, settings.m_splitDistribution); + + // Update uniforms. + for (uint8_t ii = 0, ff = 1; ii < settings.m_numSplits; ++ii, ff+=2) + { + // This lags for 1 frame, but it's not a problem. + s_uniforms.m_csmFarDistances[ii] = splitSlices[ff]; + } + + float mtxProj[16]; + mtxOrtho(mtxProj, 1.0f, -1.0f, 1.0f, -1.0f, -currentSmSettings->m_far, currentSmSettings->m_far); + + const uint8_t numCorners = 8; + float frustumCorners[maxNumSplits][numCorners][3]; + for (uint8_t ii = 0, nn = 0, ff = 1; ii < settings.m_numSplits; ++ii, nn+=2, ff+=2) + { + // Compute frustum corners for one split in world space. + worldSpaceFrustumCorners( (float*)frustumCorners[ii], splitSlices[nn], splitSlices[ff], projWidth, projHeight, mtxViewInv); + + float min[3] = { 9000.0f, 9000.0f, 9000.0f }; + float max[3] = { -9000.0f, -9000.0f, -9000.0f }; + + for (uint8_t jj = 0; jj < numCorners; ++jj) + { + // Transform to light space. + float lightSpaceFrustumCorner[3]; + vec3MulMtx(lightSpaceFrustumCorner, frustumCorners[ii][jj], lightView[0]); + + // Update bounding box. + min[0] = fminf(min[0], lightSpaceFrustumCorner[0]); + max[0] = fmaxf(max[0], lightSpaceFrustumCorner[0]); + min[1] = fminf(min[1], lightSpaceFrustumCorner[1]); + max[1] = fmaxf(max[1], lightSpaceFrustumCorner[1]); + min[2] = fminf(min[2], lightSpaceFrustumCorner[2]); + max[2] = fmaxf(max[2], lightSpaceFrustumCorner[2]); + } + + float minproj[3]; + float maxproj[3]; + vec3MulMtxH(minproj, min, mtxProj); + vec3MulMtxH(maxproj, max, mtxProj); + + float offsetx, offsety; + float scalex, scaley; + + scalex = 2.0f / (maxproj[0] - minproj[0]); + scaley = 2.0f / (maxproj[1] - minproj[1]); + + if (settings.m_stabilize) + { + const float quantizer = 64.0f; + scalex = quantizer / ceilf(quantizer / scalex); + scaley = quantizer / ceilf(quantizer / scaley); + } + + offsetx = 0.5f * (maxproj[0] + minproj[0]) * scalex; + offsety = 0.5f * (maxproj[1] + minproj[1]) * scaley; + + if (settings.m_stabilize) + { + const float halfSize = currentShadowMapSizef * 0.5f; + offsetx = ceilf(offsetx * halfSize) / halfSize; + offsety = ceilf(offsety * halfSize) / halfSize; + } + + float mtxCrop[16]; + mtxIdentity(mtxCrop); + mtxCrop[ 0] = scalex; + mtxCrop[ 5] = scaley; + mtxCrop[12] = offsetx; + mtxCrop[13] = offsety; + + mtxMul(lightProj[ii], mtxCrop, mtxProj); + } + } + + // Reset render targets. + const uint32_t viewMask = (uint32_t(1) << (RENDER_PASS_18+1) ) - 1; + const bgfx::RenderTargetHandle invalidRt = BGFX_INVALID_HANDLE; + bgfx::setViewRenderTargetMask(viewMask, invalidRt); + + // Determine on-screen rectangle size where depth buffer will be drawn. + const uint16_t depthRectHeight = uint16_t(float(viewState.m_height) / 2.5f); + const uint16_t depthRectWidth = depthRectHeight; + const uint16_t depthRectX = 0; + const uint16_t depthRectY = viewState.m_height - depthRectHeight; + + // Setup views and render targets. + bgfx::setViewRect(0, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewTransform(0, viewState.m_view, viewState.m_proj); + + if (LightType::SpotLight == settings.m_lightType) + { + /** + * RENDER_PASS_0 - Clear shadow map. (used as convenience, otherwise render_pass_1 could be cleared) + * RENDER_PASS_1 - Craft shadow map. + * RENDER_PASS_5 - Vertical blur. + * RENDER_PASS_6 - Horizontal blur. + * RENDER_PASS_13 - Draw scene. + * RENDER_PASS_14 - Draw floor bottom. + * RENDER_PASS_15 - Draw depth buffer. + */ + + bgfx::setViewRect(RENDER_PASS_0, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_1, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_5, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_6, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_13, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_14, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_15, depthRectX, depthRectY, depthRectWidth, depthRectHeight); + + bgfx::setViewTransform(RENDER_PASS_0, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_1, lightView[0], lightProj[ProjType::Horizontal]); + bgfx::setViewTransform(RENDER_PASS_5, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_6, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_13, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_14, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_15, screenView, screenProj); + + bgfx::setViewRenderTarget(RENDER_PASS_0, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_1, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_5, s_rtBlur); + bgfx::setViewRenderTarget(RENDER_PASS_6, s_rtShadowMap[0]); + } + else if (LightType::PointLight == settings.m_lightType) + { + /** + * RENDER_PASS_0 - Clear entire shadow map. + * RENDER_PASS_1 - Craft green tetrahedron shadow face. + * RENDER_PASS_2 - Craft yellow tetrahedron shadow face. + * RENDER_PASS_3 - Craft blue tetrahedron shadow face. + * RENDER_PASS_4 - Craft red tetrahedron shadow face. + * RENDER_PASS_5 - Vertical blur. + * RENDER_PASS_6 - Horizontal blur. + * RENDER_PASS_13 - Draw scene. + * RENDER_PASS_14 - Draw floor bottom. + * RENDER_PASS_15 - Draw depth buffer. + */ + + bgfx::setViewRect(RENDER_PASS_0, 0, 0, currentShadowMapSize, currentShadowMapSize); + if (settings.m_stencilPack) + { + const uint16_t f = currentShadowMapSize; //full size + const uint16_t h = currentShadowMapSize/2; //half size + bgfx::setViewRect(RENDER_PASS_1, 0, 0, f, h); + bgfx::setViewRect(RENDER_PASS_2, 0, h, f, h); + bgfx::setViewRect(RENDER_PASS_3, 0, 0, h, f); + bgfx::setViewRect(RENDER_PASS_4, h, 0, h, f); + } + else + { + const uint16_t h = currentShadowMapSize/2; //half size + bgfx::setViewRect(RENDER_PASS_1, 0, 0, h, h); + bgfx::setViewRect(RENDER_PASS_2, h, 0, h, h); + bgfx::setViewRect(RENDER_PASS_3, 0, h, h, h); + bgfx::setViewRect(RENDER_PASS_4, h, h, h, h); + } + bgfx::setViewRect(RENDER_PASS_5, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_6, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_13, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_14, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_15, depthRectX, depthRectY, depthRectWidth, depthRectHeight); + + bgfx::setViewTransform(RENDER_PASS_0, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_1, lightView[TetrahedronFaces::Green], lightProj[ProjType::Horizontal]); + bgfx::setViewTransform(RENDER_PASS_2, lightView[TetrahedronFaces::Yellow], lightProj[ProjType::Horizontal]); + if(settings.m_stencilPack) + { + bgfx::setViewTransform(RENDER_PASS_3, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Vertical]); + bgfx::setViewTransform(RENDER_PASS_4, lightView[TetrahedronFaces::Red], lightProj[ProjType::Vertical]); + } + else + { + bgfx::setViewTransform(RENDER_PASS_3, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Horizontal]); + bgfx::setViewTransform(RENDER_PASS_4, lightView[TetrahedronFaces::Red], lightProj[ProjType::Horizontal]); + } + bgfx::setViewTransform(RENDER_PASS_5, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_6, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_13, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_14, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_15, screenView, screenProj); + + bgfx::setViewRenderTarget(RENDER_PASS_0, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_1, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_2, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_3, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_4, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_5, s_rtBlur); + bgfx::setViewRenderTarget(RENDER_PASS_6, s_rtShadowMap[0]); + } + else // LightType::DirectionalLight == settings.m_lightType + { + /** + * RENDER_PASS_1 - Craft shadow map for first split. + * RENDER_PASS_2 - Craft shadow map for second split. + * RENDER_PASS_3 - Craft shadow map for third split. + * RENDER_PASS_4 - Craft shadow map for fourth split. + * RENDER_PASS_5 - Vertical blur for first split. + * RENDER_PASS_6 - Horizontal blur for first split. + * RENDER_PASS_7 - Vertical blur for second split. + * RENDER_PASS_8 - Horizontal blur for second split. + * RENDER_PASS_9 - Vertical blur for third split. + * RENDER_PASS_10 - Horizontal blur for third split. + * RENDER_PASS_11 - Vertical blur for fourth split. + * RENDER_PASS_12 - Horizontal blur for fourth split. + * RENDER_PASS_13 - Draw scene. + * RENDER_PASS_14 - Draw floor bottom. + * RENDER_PASS_15 - Draw depth buffer for first split. + * RENDER_PASS_16 - Draw depth buffer for second split. + * RENDER_PASS_17 - Draw depth buffer for third split. + * RENDER_PASS_18 - Draw depth buffer for fourth split. + */ + + const uint16_t depthRectHeight = viewState.m_height / 3; + const uint16_t depthRectWidth = depthRectHeight; + const uint16_t depthRectX = 0; + const uint16_t depthRectY = viewState.m_height - depthRectHeight; + + bgfx::setViewRect(RENDER_PASS_1, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_2, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_3, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_4, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_5, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_6, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_7, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_8, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_9, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_10, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_11, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_12, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_13, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_14, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_15, depthRectX+(0*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + bgfx::setViewRect(RENDER_PASS_16, depthRectX+(1*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + bgfx::setViewRect(RENDER_PASS_17, depthRectX+(2*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + bgfx::setViewRect(RENDER_PASS_18, depthRectX+(3*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + + bgfx::setViewTransform(RENDER_PASS_1, lightView[0], lightProj[0]); + bgfx::setViewTransform(RENDER_PASS_2, lightView[0], lightProj[1]); + bgfx::setViewTransform(RENDER_PASS_3, lightView[0], lightProj[2]); + bgfx::setViewTransform(RENDER_PASS_4, lightView[0], lightProj[3]); + bgfx::setViewTransform(RENDER_PASS_5, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_6, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_7, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_8, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_9, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_10, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_11, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_12, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_13, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_14, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_15, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_16, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_17, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_18, screenView, screenProj); + + bgfx::setViewRenderTarget(RENDER_PASS_1, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_2, s_rtShadowMap[1]); + bgfx::setViewRenderTarget(RENDER_PASS_3, s_rtShadowMap[2]); + bgfx::setViewRenderTarget(RENDER_PASS_4, s_rtShadowMap[3]); + bgfx::setViewRenderTarget(RENDER_PASS_5, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_6, s_rtShadowMap[0]); //hblur + bgfx::setViewRenderTarget(RENDER_PASS_7, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_8, s_rtShadowMap[1]); //hblur + bgfx::setViewRenderTarget(RENDER_PASS_9, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_10, s_rtShadowMap[2]); //hblur + bgfx::setViewRenderTarget(RENDER_PASS_11, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_12, s_rtShadowMap[3]); //hblur + } + + // Clear backbuffer at beginning. + bgfx::setViewClear(0 + , BGFX_CLEAR_COLOR_BIT + | BGFX_CLEAR_DEPTH_BIT + , clearValues.m_clearRgba + , clearValues.m_clearDepth + , clearValues.m_clearStencil + ); + bgfx::submit(0); + + // Clear shadowmap rendertarget at beginning. + const uint8_t flags0 = (LightType::DirectionalLight == settings.m_lightType) + ? 0 + : BGFX_CLEAR_COLOR_BIT | BGFX_CLEAR_DEPTH_BIT | BGFX_CLEAR_STENCIL_BIT + ; + + bgfx::setViewClear(RENDER_PASS_0 + , flags0 + , 0xfefefefe //blur fails on completely white regions + , clearValues.m_clearDepth + , clearValues.m_clearStencil + ); + bgfx::submit(RENDER_PASS_0); + + const uint8_t flags1 = (LightType::DirectionalLight == settings.m_lightType) + ? BGFX_CLEAR_COLOR_BIT | BGFX_CLEAR_DEPTH_BIT + : 0 + ; + + for (uint8_t ii = 0; ii < 4; ++ii) + { + bgfx::setViewClear(RENDER_PASS_1+ii + , flags1 + , 0xfefefefe //blur fails on completely white regions + , clearValues.m_clearDepth + , clearValues.m_clearStencil + ); + bgfx::submit(RENDER_PASS_1+ii); + } + + // Render. + + // Craft shadow map. + { + // Craft stencil mask for point light shadow map packing. + if(LightType::PointLight == settings.m_lightType && settings.m_stencilPack) + { + if (bgfx::checkAvailTransientVertexBuffer(6, posDecl) ) + { + struct Pos + { + float m_x, m_y, m_z; + }; + + bgfx::TransientVertexBuffer vb; + bgfx::allocTransientVertexBuffer(&vb, 6, posDecl); + Pos* vertex = (Pos*)vb.data; + + const float min = 0.0f; + const float max = 1.0f; + const float center = 0.5f; + const float zz = 0.0f; + + vertex[0].m_x = min; + vertex[0].m_y = min; + vertex[0].m_z = zz; + + vertex[1].m_x = max; + vertex[1].m_y = min; + vertex[1].m_z = zz; + + vertex[2].m_x = center; + vertex[2].m_y = center; + vertex[2].m_z = zz; + + vertex[3].m_x = center; + vertex[3].m_y = center; + vertex[3].m_z = zz; + + vertex[4].m_x = max; + vertex[4].m_y = max; + vertex[4].m_z = zz; + + vertex[5].m_x = min; + vertex[5].m_y = max; + vertex[5].m_z = zz; + + bgfx::setProgram(s_programs.m_black); + bgfx::setState(0); + bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS + | BGFX_STENCIL_FUNC_REF(1) + | BGFX_STENCIL_FUNC_RMASK(0xff) + | BGFX_STENCIL_OP_FAIL_S_REPLACE + | BGFX_STENCIL_OP_FAIL_Z_REPLACE + | BGFX_STENCIL_OP_PASS_Z_REPLACE + ); + bgfx::setVertexBuffer(&vb); + bgfx::submit(RENDER_PASS_0); + } + } + + // Draw scene into shadowmap. + uint8_t drawNum; + if (LightType::SpotLight == settings.m_lightType) + { + drawNum = 1; + } + else if (LightType::PointLight == settings.m_lightType) + { + drawNum = 4; + } + else //LightType::DirectionalLight == settings.m_lightType) + { + drawNum = settings.m_numSplits; + } + + for (uint8_t ii = 0; ii < drawNum; ++ii) + { + const uint8_t viewId = RENDER_PASS_1 + ii; + + uint8_t renderStateIndex = RenderState::ShadowMap_PackDepth; + if(LightType::PointLight == settings.m_lightType && settings.m_stencilPack) + { + renderStateIndex = (ii < 2) ? RenderState::ShadowMap_PackDepthHoriz : RenderState::ShadowMap_PackDepthVert; + } + + // Floor. + hplaneMesh.submit(viewId + , mtxFloor + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Bunny. + bunnyMesh.submit(viewId + , mtxBunny + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Hollow cube. + hollowcubeMesh.submit(viewId + , mtxHollowcube + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Cube. + cubeMesh.submit(viewId + , mtxCube + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Trees. + for (uint8_t ii = 0; ii < numTrees; ++ii) + { + treeMesh.submit(viewId + , mtxTrees[ii] + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + } + } + } + + PackDepth::Enum depthType = (SmImpl::VSM == settings.m_smImpl) ? PackDepth::VSM : PackDepth::RGBA; + bool bVsmOrEsm = (SmImpl::VSM == settings.m_smImpl) || (SmImpl::ESM == settings.m_smImpl); + + // Blur shadow map. + if (bVsmOrEsm && currentSmSettings->m_doBlur) + { + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]); + bgfx::setProgram(s_programs.m_vBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_5); + + bgfx::setTexture(4, u_shadowMap[0], s_rtBlur); + bgfx::setProgram(s_programs.m_hBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_6); + + if (LightType::DirectionalLight == settings.m_lightType) + { + for (uint8_t ii = 1, jj = 2; ii < settings.m_numSplits; ++ii, jj+=2) + { + const uint8_t viewId = RENDER_PASS_5 + jj; + + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]); + bgfx::setProgram(s_programs.m_vBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(viewId); + + bgfx::setTexture(4, u_shadowMap[0], s_rtBlur); + bgfx::setProgram(s_programs.m_hBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(viewId+1); + } + } + } + + // Draw scene. + { + // Setup shadow mtx. + float mtxShadow[16]; + + const float ymul = (s_flipV) ? 0.5f : -0.5f; + const float zadd = (DepthImpl::Linear == settings.m_depthImpl) ? 0.0f : 0.5f; + + const float mtxBias[16] = + { + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, ymul, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.5f, zadd, 1.0f, + }; + + if (LightType::SpotLight == settings.m_lightType) + { + float mtxTmp[16]; + mtxMul(mtxTmp, lightProj[ProjType::Horizontal], mtxBias); + mtxMul(mtxShadow, lightView[0], mtxTmp); //lightViewProjBias + } + else if (LightType::PointLight == settings.m_lightType) + { + const float s = (s_flipV) ? 1.0f : -1.0f; //sign + const float zadd = (DepthImpl::Linear == settings.m_depthImpl) ? 0.0f : 0.5f; + + const float mtxCropBias[2][TetrahedronFaces::Count][16] = + { + { // settings.m_stencilPack == false + + { // D3D: Green, OGL: Blue + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.25f, 0.25f, zadd, 1.0f, + }, + { // D3D: Yellow, OGL: Red + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.75f, 0.25f, zadd, 1.0f, + }, + { // D3D: Blue, OGL: Green + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.25f, 0.75f, zadd, 1.0f, + }, + { // D3D: Red, OGL: Yellow + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.75f, 0.75f, zadd, 1.0f, + }, + }, + { // settings.m_stencilPack == true + + { // D3D: Red, OGL: Blue + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.5f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.25f, 0.5f, zadd, 1.0f, + }, + { // D3D: Blue, OGL: Red + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.5f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.75f, 0.5f, zadd, 1.0f, + }, + { // D3D: Green, OGL: Green + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.75f, zadd, 1.0f, + }, + { // D3D: Yellow, OGL: Yellow + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.25f, zadd, 1.0f, + }, + } + }; + + //Use as: [stencilPack][flipV][tetrahedronFace] + static const uint8_t cropBiasIndices[2][2][4] = + { + { // settings.m_stencilPack == false + { 0, 1, 2, 3 }, //flipV == false + { 2, 3, 0, 1 }, //flipV == true + }, + { // settings.m_stencilPack == true + { 3, 2, 0, 1 }, //flipV == false + { 2, 3, 0, 1 }, //flipV == true + }, + }; + + for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii) + { + ProjType::Enum projType = (settings.m_stencilPack) ? ProjType::Enum(ii>1) : ProjType::Horizontal; + uint8_t biasIndex = cropBiasIndices[settings.m_stencilPack][uint8_t(s_flipV)][ii]; + + float mtxTmp[16]; + mtxMul(mtxTmp, mtxYpr[ii], lightProj[projType]); + mtxMul(shadowMapMtx[ii], mtxTmp, mtxCropBias[settings.m_stencilPack][biasIndex]); //mtxYprProjBias + } + + mtxTranslate(mtxShadow //lightInvTranslate + , -pointLight.m_position.m_v[0] + , -pointLight.m_position.m_v[1] + , -pointLight.m_position.m_v[2] + ); + } + else //LightType::DirectionalLight == settings.m_lightType + { + for (uint8_t ii = 0; ii < settings.m_numSplits; ++ii) + { + float mtxTmp[16]; + + mtxMul(mtxTmp, lightProj[ii], mtxBias); + mtxMul(shadowMapMtx[ii], lightView[0], mtxTmp); //lViewProjCropBias + } + } + + // Floor. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxFloor, mtxShadow); //not needed for directional light + } + hplaneMesh.submit(RENDER_PASS_13 + , mtxFloor + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Bunny. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxBunny, mtxShadow); + } + bunnyMesh.submit(RENDER_PASS_13 + , mtxBunny + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Hollow cube. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxHollowcube, mtxShadow); + } + hollowcubeMesh.submit(RENDER_PASS_13 + , mtxHollowcube + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Cube. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxCube, mtxShadow); + } + cubeMesh.submit(RENDER_PASS_13 + , mtxCube + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Trees. + for (uint8_t ii = 0; ii < numTrees; ++ii) + { + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxTrees[ii], mtxShadow); + } + treeMesh.submit(RENDER_PASS_13 + , mtxTrees[ii] + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + } + + // Lights. + if (LightType::SpotLight == settings.m_lightType || LightType::PointLight == settings.m_lightType) + { + const float lightScale[3] = { 1.5f, 1.5f, 1.5f }; + float mtx[16]; + mtxBillboard(mtx, viewState.m_view, pointLight.m_position.m_v, lightScale); + vplaneMesh.submit(RENDER_PASS_13 + , mtx + , s_programs.m_colorTexture + , s_renderStates[RenderState::Custom_BlendLightTexture] + , texFlare + ); + } + + // Draw floor bottom. + float floorBottomMtx[16]; + mtxScaleRotateTranslate(floorBottomMtx + , floorScale //scaleX + , floorScale //scaleY + , floorScale //scaleZ + , 0.0f //rotX + , 0.0f //rotY + , 0.0f //rotZ + , 0.0f //translateX + , -0.1f //translateY + , 0.0f //translateZ + ); + + hplaneMesh.submit(RENDER_PASS_14 + , floorBottomMtx + , s_programs.m_texture + , s_renderStates[RenderState::Custom_DrawPlaneBottom] + , texFigure + ); + } + + // Draw depth rect. + if (settings.m_drawDepthBuffer) + { + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]); + bgfx::setProgram(s_programs.m_drawDepth[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_15); + + if (LightType::DirectionalLight == settings.m_lightType) + { + for (uint8_t ii = 1; ii < settings.m_numSplits; ++ii) + { + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]); + bgfx::setProgram(s_programs.m_drawDepth[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_15+ii); + } + } + } + + // Update render target size. + shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo); + if (bLtChanged || currentShadowMapSize != shadowMapSize) + { + currentShadowMapSize = shadowMapSize; + currentShadowMapSizef = float(int16_t(currentShadowMapSize) ); + s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef; + + bgfx::destroyRenderTarget(s_rtShadowMap[0]); + s_rtShadowMap[0] = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D24S8); + + if (LightType::DirectionalLight == settings.m_lightType) + { + for (uint8_t ii = 1; ii < ShadowMapRenderTargets::Count; ++ii) + { + bgfx::destroyRenderTarget(s_rtShadowMap[ii]); + s_rtShadowMap[ii] = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D24S8); + } + } + + bgfx::destroyRenderTarget(s_rtBlur); + s_rtBlur = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8); + } + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + + } + + bunnyMesh.unload(); + treeMesh.unload(); + cubeMesh.unload(); + hollowcubeMesh.unload(); + hplaneMesh.unload(); + vplaneMesh.unload(); + + bgfx::destroyTexture(texFigure); + bgfx::destroyTexture(texFieldstone); + bgfx::destroyTexture(texFlare); + + for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii) + { + bgfx::destroyRenderTarget(s_rtShadowMap[ii]); + } + bgfx::destroyRenderTarget(s_rtBlur); + + s_programs.destroy(); + + bgfx::destroyUniform(u_texColor); + bgfx::destroyUniform(u_shadowMap[3]); + bgfx::destroyUniform(u_shadowMap[2]); + bgfx::destroyUniform(u_shadowMap[1]); + bgfx::destroyUniform(u_shadowMap[0]); + + s_uniforms.destroy(); + + imguiDestroy(); + + // Shutdown bgfx. + bgfx::shutdown(); + + return 0; +} diff --git a/examples/16-shadowmaps/tree.obj b/examples/16-shadowmaps/tree.obj new file mode 100644 index 000000000..f57befcfb --- /dev/null +++ b/examples/16-shadowmaps/tree.obj @@ -0,0 +1,14156 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +g tree_tree.001 +v -0.528409 0.097456 -0.473664 +v -0.478109 -0.000000 0.533369 +v 0.528409 -0.097456 0.473663 +v 0.478109 0.000000 -0.533369 +v -0.462358 1.211925 -0.307472 +v -0.418346 1.126652 0.573681 +v 0.462358 1.041378 0.521439 +v 0.418346 1.126652 -0.359714 +v -0.161610 2.345739 -0.146935 +v -0.124433 2.269162 0.608021 +v 0.617872 2.115946 0.555926 +v 0.580694 2.192523 -0.199030 +v 0.138871 3.395035 0.012115 +v 0.172703 3.347843 0.642563 +v 0.799581 3.268506 0.602984 +v 0.765749 3.315698 -0.027465 +v 0.252438 4.463923 0.117709 +v 0.281878 4.461236 0.623338 +v 0.787508 4.458720 0.593885 +v 0.758068 4.461408 0.088255 +v 0.280523 5.583565 0.140432 +v 0.302545 5.595459 0.519476 +v 0.681740 5.599979 0.497304 +v 0.659719 5.588085 0.118260 +v 0.355254 6.718205 0.167615 +v 0.370780 6.750537 0.418309 +v 0.622686 6.727806 0.405640 +v 0.607160 6.695473 0.154946 +v 0.599378 7.806367 -0.038032 +v 0.607516 7.826366 0.086737 +v 0.733109 7.811326 0.080956 +v 0.724972 7.791327 -0.043812 +v 0.736643 8.933455 -0.083840 +v 0.736643 8.933455 -0.083840 +v 0.736643 8.933455 -0.083840 +v 0.736643 8.933455 -0.083840 +v -0.043875 1.245991 0.720704 +v 0.625158 1.126652 0.151676 +v 0.043874 1.007312 -0.506737 +v -0.625158 1.126652 0.062291 +v 0.040456 2.345212 0.463796 +v 0.613913 2.242920 -0.023942 +v 0.115669 2.140629 -0.588296 +v -0.457787 2.242920 -0.100557 +v -0.001515 3.470312 0.106235 +v 0.476565 3.375144 -0.297769 +v 0.062834 3.216559 -0.750002 +v -0.415246 3.311727 -0.345997 +v -0.067156 4.515477 -0.372318 +v 0.314097 4.452688 -0.699792 +v -0.013792 4.291711 -1.050663 +v -0.395045 4.354500 -0.723189 +v -0.260558 5.556573 -0.791282 +v 0.022492 5.525999 -1.042776 +v -0.218554 5.377425 -1.296004 +v -0.501603 5.408000 -1.044509 +v -0.520580 6.544024 -1.320909 +v -0.331084 6.520402 -1.487243 +v -0.487913 6.405616 -1.649609 +v -0.677409 6.429238 -1.483274 +v -0.787409 7.514112 -1.862816 +v -0.689601 7.487138 -1.938576 +v -0.768620 7.432738 -2.021221 +v -0.866427 7.459712 -1.945460 +v -0.768813 8.442052 -2.527225 +v -0.768813 8.442052 -2.527225 +v -0.768813 8.442052 -2.527225 +v -0.768813 8.442052 -2.527225 +v 0.110011 1.175972 -0.508065 +v -0.616962 1.126652 -0.003370 +v -0.110011 1.077331 0.722032 +v 0.616962 1.126652 0.217337 +v 0.071790 2.293404 -0.294377 +v -0.551330 2.251130 0.138220 +v -0.116801 2.208855 0.759993 +v 0.506319 2.251130 0.327396 +v 0.047230 3.417485 -0.157068 +v -0.472030 3.381736 0.203388 +v -0.109914 3.345987 0.721492 +v 0.409345 3.381736 0.361036 +v 0.008297 4.548745 0.060599 +v -0.406859 4.505913 0.347559 +v -0.116916 4.463082 0.760637 +v 0.298240 4.505913 0.473677 +v -0.032621 5.681410 0.289360 +v -0.343415 5.628910 0.501379 +v -0.125385 5.576409 0.807986 +v 0.185410 5.628910 0.595967 +v -0.102806 6.774024 0.676786 +v -0.306889 6.704557 0.809670 +v -0.161189 6.665717 1.013132 +v 0.042894 6.735184 0.880248 +v -0.379880 7.796240 1.099022 +v -0.480396 7.753480 1.163067 +v -0.408523 7.739197 1.266332 +v -0.308007 7.781956 1.202287 +v -0.626063 8.834417 1.481314 +v -0.626063 8.834417 1.481314 +v -0.626063 8.834417 1.481314 +v -0.626063 8.834417 1.481314 +v -0.405540 2.413642 -0.222202 +v -0.090634 2.242920 0.447793 +v 0.561666 2.072199 0.097702 +v 0.246759 2.242920 -0.572293 +v -0.002438 3.464207 -0.307356 +v 0.259984 3.321939 0.250973 +v 0.803567 3.179670 -0.040770 +v 0.541145 3.321939 -0.599099 +v 0.437213 4.495812 0.060550 +v 0.612478 4.280862 0.484359 +v 1.057593 4.196939 0.257719 +v 0.882328 4.411890 -0.166090 +v 0.910062 5.444958 0.465193 +v 1.054590 5.317750 0.792654 +v 1.377485 5.226364 0.614640 +v 1.232957 5.353572 0.287179 +v 1.402369 6.446171 0.540025 +v 1.512086 6.396442 0.762787 +v 1.723394 6.325138 0.642793 +v 1.613676 6.374866 0.420031 +v 1.833586 7.488668 0.608838 +v 1.889037 7.465502 0.720291 +v 1.995540 7.432285 0.660399 +v 1.940089 7.455451 0.548945 +v 2.281373 8.530154 0.679686 +v 2.281373 8.530154 0.679686 +v 2.281373 8.530154 0.679686 +v 2.281373 8.530154 0.679686 +v 0.045757 3.472828 0.272978 +v 0.432800 3.331770 0.753746 +v 0.892695 3.190712 0.342120 +v 0.505653 3.331770 -0.138647 +v 0.515805 4.507779 0.235422 +v 0.825438 4.394933 0.620036 +v 1.193355 4.282086 0.290736 +v 0.883721 4.394933 -0.093878 +v 0.921591 5.550832 0.344195 +v 1.151251 5.457928 0.632164 +v 1.434927 5.398242 0.386672 +v 1.205267 5.491146 0.098703 +v 1.315454 6.625363 0.448768 +v 1.462872 6.546413 0.638948 +v 1.648335 6.495693 0.474131 +v 1.500917 6.574642 0.283951 +v 1.892594 7.603518 0.611496 +v 1.961289 7.551551 0.704308 +v 2.056149 7.531493 0.622866 +v 1.987455 7.583460 0.530055 +v 2.337806 8.582873 0.960303 +v 2.337806 8.582873 0.960303 +v 2.337806 8.582873 0.960303 +v 2.337806 8.582873 0.960303 +v 0.075119 3.414347 0.119133 +v 0.700214 3.321939 0.158545 +v 0.726010 3.229530 -0.467260 +v 0.100915 3.321939 -0.506672 +v 0.368823 4.484950 -0.145467 +v 0.868899 4.411023 -0.113937 +v 0.889536 4.337096 -0.614581 +v 0.389460 4.411023 -0.646111 +v 0.549206 5.562881 -0.306934 +v 0.928361 5.548334 -0.288741 +v 0.944583 5.500314 -0.665214 +v 0.565428 5.514861 -0.683407 +v 0.597441 6.679924 -0.543151 +v 0.849305 6.657441 -0.529267 +v 0.859673 6.619125 -0.779383 +v 0.607809 6.641608 -0.793268 +v 0.897027 7.759521 -0.757094 +v 1.022450 7.743809 -0.749626 +v 1.028488 7.732147 -0.875566 +v 0.903066 7.747859 -0.883035 +v 1.018853 8.875552 -0.853471 +v 1.018853 8.875552 -0.853471 +v 1.018853 8.875552 -0.853471 +v 1.018853 8.875552 -0.853471 +v -0.099812 4.508025 -0.374087 +v 0.312258 4.403594 -0.649457 +v 0.018864 4.299163 -1.048894 +v -0.393205 4.403594 -0.773524 +v -0.017385 5.544228 -0.842778 +v 0.291667 5.465904 -1.049305 +v 0.071622 5.387581 -1.348883 +v -0.237430 5.465904 -1.142356 +v 0.042950 6.590305 -1.185851 +v 0.250028 6.565259 -1.329466 +v 0.104374 6.540214 -1.535115 +v -0.102703 6.565259 -1.391500 +v 0.066088 7.704221 -1.318290 +v 0.169526 7.689857 -1.389897 +v 0.097274 7.687843 -1.493863 +v -0.006165 7.702207 -1.422256 +v 0.263418 8.805511 -1.535754 +v 0.263418 8.805511 -1.535754 +v 0.263418 8.805511 -1.535754 +v 0.263418 8.805511 -1.535754 +v 0.586701 4.527606 0.460327 +v 1.066936 4.394933 0.551476 +v 1.122458 4.262259 0.065831 +v 0.642224 4.394933 -0.025318 +v 0.952455 5.563603 0.191010 +v 1.312631 5.464098 0.259372 +v 1.354273 5.364594 -0.104861 +v 0.994097 5.464098 -0.173223 +v 1.395377 6.562186 -0.135079 +v 1.628954 6.477534 -0.085993 +v 1.662767 6.428145 -0.332064 +v 1.429190 6.512798 -0.381150 +v 1.899929 7.566116 -0.211382 +v 2.015583 7.520914 -0.186593 +v 2.037583 7.509125 -0.310732 +v 1.921929 7.554327 -0.335521 +v 2.362276 8.598434 -0.285657 +v 2.362276 8.598434 -0.285657 +v 2.362276 8.598434 -0.285657 +v 2.362276 8.598434 -0.285657 +v 0.234590 5.599739 0.212547 +v 0.374764 5.591772 0.565518 +v 0.727674 5.583805 0.425189 +v 0.587500 5.591772 0.072218 +v 0.463122 6.717524 0.311101 +v 0.556572 6.712213 0.546415 +v 0.791845 6.706901 0.452862 +v 0.698396 6.712213 0.217548 +v 0.460257 7.836196 0.309866 +v 0.506938 7.840132 0.427504 +v 0.624532 7.844068 0.380709 +v 0.577850 7.840132 0.263071 +v 0.536183 8.971832 0.342609 +v 0.536183 8.971832 0.342609 +v 0.536183 8.971832 0.342609 +v 0.536183 8.971832 0.342609 +v 0.908358 5.459203 0.501608 +v 1.100631 5.335661 0.805038 +v 1.379189 5.212119 0.578225 +v 1.186916 5.335661 0.274795 +v 1.582771 6.375226 0.611354 +v 1.710952 6.292865 0.813640 +v 1.896658 6.210504 0.662432 +v 1.768476 6.292865 0.460145 +v 2.085047 7.370366 0.693394 +v 2.155433 7.343212 0.795090 +v 2.250140 7.306163 0.719648 +v 2.179754 7.333317 0.617953 +v 2.558996 8.397515 0.631808 +v 2.558996 8.397515 0.631808 +v 2.558996 8.397515 0.631808 +v 2.558996 8.397515 0.631808 +v 0.942113 5.539180 -0.670418 +v 0.562476 5.531597 -0.681370 +v 0.551676 5.524014 -0.301729 +v 0.931312 5.531597 -0.290778 +v 0.853708 6.667255 -0.564462 +v 0.600617 6.662200 -0.571763 +v 0.593416 6.657146 -0.318669 +v 0.846507 6.662200 -0.311368 +v 0.765387 7.798831 -0.503640 +v 0.639236 7.788551 -0.507357 +v 0.635508 7.788537 -0.380789 +v 0.761659 7.798817 -0.377072 +v 0.540220 8.913995 -0.446709 +v 0.540220 8.913995 -0.446709 +v 0.540220 8.913995 -0.446709 +v 0.540220 8.913995 -0.446709 +v 0.428081 6.744906 0.119655 +v 0.320734 6.723005 0.347977 +v 0.549859 6.701104 0.453600 +v 0.657205 6.723005 0.225278 +v 0.526116 7.835466 0.453931 +v 0.472443 7.824516 0.568092 +v 0.587005 7.813565 0.620903 +v 0.640678 7.824516 0.506743 +v 0.583237 8.955894 0.545132 +v 0.583237 8.955894 0.545132 +v 0.583237 8.955894 0.545132 +v 0.583237 8.955894 0.545132 +v -0.042385 6.759718 0.695130 +v -0.285679 6.719871 0.753041 +v -0.221611 6.680023 0.994788 +v 0.021684 6.719871 0.936876 +v -0.208110 7.846725 0.972215 +v -0.329757 7.826801 1.001170 +v -0.297723 7.806878 1.122043 +v -0.176075 7.826801 1.093088 +v -0.390498 8.926323 1.277159 +v -0.390498 8.926323 1.277159 +v -0.390498 8.926323 1.277159 +v -0.390498 8.926323 1.277159 +v 0.617951 6.663674 -0.521149 +v 0.869114 6.649524 -0.550314 +v 0.839163 6.635374 -0.801385 +v 0.588000 6.649524 -0.772220 +v 0.652161 7.787807 -0.564487 +v 0.777743 7.780732 -0.579070 +v 0.762767 7.773657 -0.704605 +v 0.637185 7.780732 -0.690022 +v 0.838714 8.892449 -0.800817 +v 0.838714 8.892449 -0.800817 +v 0.838714 8.892449 -0.800817 +v 0.838714 8.892449 -0.800817 +v 1.377453 6.589841 -0.244308 +v 1.516423 6.495166 -0.054946 +v 1.680690 6.400490 -0.222835 +v 1.541721 6.495166 -0.412197 +v 1.992822 7.525069 -0.394599 +v 2.062307 7.477731 -0.299918 +v 2.144441 7.430393 -0.383862 +v 2.074956 7.477731 -0.478543 +v 2.702756 8.384189 -0.150461 +v 2.702756 8.384189 -0.150461 +v 2.702756 8.384189 -0.150461 +v 2.702756 8.384189 -0.150461 +v 0.800229 6.671528 -0.280005 +v 0.885343 6.662200 -0.518337 +v 0.646895 6.652873 -0.603127 +v 0.561781 6.662200 -0.364794 +v 0.759049 7.798564 -0.366785 +v 0.801605 7.793900 -0.485951 +v 0.682381 7.789237 -0.528346 +v 0.639824 7.793900 -0.409180 +v 0.673068 8.920150 -0.547972 +v 0.673068 8.920150 -0.547972 +v 0.673068 8.920150 -0.547972 +v 0.673068 8.920150 -0.547972 +v -0.718623 7.521231 -1.895071 +v -0.722490 7.473425 -2.012259 +v -0.837405 7.425619 -1.988966 +v -0.833538 7.473425 -1.871777 +v -1.252052 8.430329 -2.316733 +v -1.252052 8.430329 -2.316733 +v -1.252052 8.430329 -2.316733 +v -1.252052 8.430329 -2.316733 +v 1.897282 7.612772 0.622163 +v 1.980146 7.567505 0.706531 +v 2.051461 7.522239 0.612199 +v 1.968597 7.567505 0.527831 +v 2.545339 8.543940 0.580283 +v 2.545339 8.543940 0.580283 +v 2.545339 8.543940 0.580283 +v 2.545339 8.543940 0.580283 +v 0.040961 7.718984 -1.482443 +v 0.002674 7.696032 -1.363949 +v 0.122400 7.673080 -1.329710 +v 0.160687 7.696032 -1.448204 +v 0.218177 8.789937 -1.150088 +v 0.218177 8.789937 -1.150088 +v 0.218177 8.789937 -1.150088 +v 0.218177 8.789937 -1.150088 +v 2.091922 7.383285 0.722760 +v 2.186380 7.338264 0.794064 +v 2.243265 7.293244 0.690282 +v 2.148807 7.338264 0.618978 +v 2.723973 8.316516 0.587124 +v 2.723973 8.316516 0.587124 +v 2.723973 8.316516 0.587124 +v 2.723973 8.316516 0.587124 +v 0.578359 7.844239 0.452844 +v 0.469858 7.824516 0.515070 +v 0.534762 7.804793 0.621990 +v 0.643263 7.824516 0.559765 +v 0.494338 8.928437 0.778821 +v 0.494338 8.928437 0.778821 +v 0.494338 8.928437 0.778821 +v 0.494338 8.928437 0.778821 +v 2.002199 7.511489 -0.438867 +v 2.015040 7.477731 -0.317504 +v 2.135065 7.443973 -0.339594 +v 2.122223 7.477731 -0.460957 +v 2.410454 8.525929 -0.133832 +v 2.410454 8.525929 -0.133832 +v 2.410454 8.525929 -0.133832 +v 2.410454 8.525929 -0.133832 +v 0.030978 2.218528 0.282723 +v 0.476373 1.789166 0.472171 +v 0.242779 1.359805 0.048259 +v -0.202616 1.789166 -0.141190 +v 0.445634 2.394507 -0.176301 +v 0.846490 2.008082 -0.005797 +v 0.636256 1.621656 -0.387319 +v 0.235399 2.008082 -0.557822 +v 0.849132 2.569747 -0.622973 +v 1.215357 2.232064 -0.482382 +v 1.038391 1.894381 -0.832481 +v 0.672166 2.232064 -0.973071 +v 1.187754 2.756847 -1.030606 +v 1.444959 2.420209 -0.870469 +v 1.479421 2.247960 -1.287921 +v 1.222215 2.584598 -1.448058 +v 1.658881 3.016298 -0.795178 +v 1.789981 2.672174 -0.672317 +v 1.989316 2.630133 -1.002773 +v 1.858217 2.974257 -1.125633 +v 2.183699 3.224029 -0.548596 +v 2.332776 2.964849 -0.425078 +v 2.503755 2.933187 -0.697876 +v 2.354678 3.192366 -0.821394 +v 2.562576 3.648449 -0.376433 +v 2.746550 3.516589 -0.250951 +v 2.869656 3.475306 -0.474825 +v 2.685682 3.607166 -0.600307 +v 2.875487 4.198833 -0.424820 +v 3.029747 4.129629 -0.329476 +v 3.111391 4.079177 -0.498191 +v 2.957130 4.148380 -0.593535 +v 3.196875 4.748547 -0.473247 +v 3.306449 4.717864 -0.411629 +v 3.357811 4.677191 -0.523220 +v 3.248237 4.707875 -0.584838 +v 3.401637 5.320391 -0.666617 +v 3.459148 5.313344 -0.637824 +v 3.483896 5.290167 -0.692929 +v 3.426385 5.297215 -0.721722 +v 3.600776 5.902134 -0.853176 +v 3.600776 5.902134 -0.853176 +v 3.600776 5.902134 -0.853176 +v 3.600776 5.902134 -0.853176 +v 0.564181 3.937667 0.499199 +v 0.868935 3.557681 0.135679 +v 0.394571 3.177695 0.135198 +v 0.089817 3.557681 0.498718 +v 0.346121 4.266285 0.031221 +v 0.620400 3.924297 -0.295947 +v 0.193472 3.582310 -0.296380 +v -0.080806 3.924297 0.030788 +v 0.077598 4.447006 -0.545058 +v 0.335432 4.127666 -0.805763 +v -0.030029 3.808327 -0.776037 +v -0.287863 4.127666 -0.515332 +v -0.157120 4.650384 -1.048788 +v 0.058904 4.381118 -1.297467 +v -0.270456 4.111852 -1.292019 +v -0.486479 4.381118 -1.043340 +v -0.389678 4.891850 -1.527435 +v -0.192695 4.613067 -1.655756 +v -0.494952 4.463249 -1.794259 +v -0.691935 4.742032 -1.665939 +v -0.023962 5.078492 -1.952825 +v 0.107580 4.807671 -1.994122 +v -0.092485 4.743999 -2.213832 +v -0.224027 5.014821 -2.172536 +v 0.329115 5.294895 -2.374830 +v 0.459604 5.098988 -2.435647 +v 0.305490 5.052929 -2.617947 +v 0.175001 5.248836 -2.557129 +v 0.615964 5.661395 -2.719426 +v 0.746423 5.573839 -2.811953 +v 0.625115 5.528870 -2.940441 +v 0.494655 5.616426 -2.847914 +v 0.562531 6.188720 -2.996017 +v 0.652214 6.165949 -3.074852 +v 0.570710 6.127679 -3.156516 +v 0.481028 6.150450 -3.077681 +v 0.522424 6.750989 -3.229042 +v 0.566836 6.745210 -3.270130 +v 0.525547 6.733097 -3.313056 +v 0.481135 6.738876 -3.271967 +v 0.483738 7.354445 -3.334101 +v 0.483738 7.354445 -3.334101 +v 0.483738 7.354445 -3.334101 +v 0.483738 7.354445 -3.334101 +v 0.270573 5.532626 0.407214 +v 0.588518 5.365683 0.594894 +v 0.707227 5.198740 0.245293 +v 0.389282 5.365683 0.057613 +v 0.564536 5.962564 0.298206 +v 0.850686 5.812315 0.467118 +v 0.957524 5.662066 0.152477 +v 0.671374 5.812315 -0.016434 +v 0.923466 6.397952 0.165107 +v 1.149977 6.230562 0.325576 +v 1.217099 6.063172 0.056221 +v 0.990588 6.230562 -0.104248 +v 1.394898 6.710867 -0.018780 +v 1.593808 6.564965 0.121210 +v 1.569436 6.352725 -0.065364 +v 1.370526 6.498627 -0.205354 +v 1.732361 6.817055 -0.467815 +v 1.915066 6.697523 -0.360873 +v 1.836507 6.489503 -0.459170 +v 1.653802 6.609035 -0.566112 +v 2.050285 6.840204 -0.898243 +v 2.202402 6.740556 -0.808934 +v 2.136698 6.567140 -0.890515 +v 1.984580 6.666788 -0.979824 +v 2.350442 6.927353 -1.306278 +v 2.468645 6.846192 -1.230712 +v 2.441736 6.718056 -1.326244 +v 2.323533 6.799217 -1.401809 +v 2.733628 7.136052 -1.559801 +v 2.827574 7.079269 -1.507586 +v 2.836925 7.005977 -1.604112 +v 2.742979 7.062759 -1.656327 +v 3.006976 7.523080 -1.739935 +v 3.082905 7.506373 -1.717065 +v 3.095454 7.467556 -1.787087 +v 3.019526 7.484262 -1.809956 +v 3.088130 7.967063 -2.001718 +v 3.127809 7.966621 -1.993522 +v 3.135410 7.953326 -2.031037 +v 3.095730 7.953768 -2.039232 +v 3.131412 8.486127 -2.098401 +v 3.131412 8.486127 -2.098401 +v 3.131412 8.486127 -2.098401 +v 3.131412 8.486127 -2.098401 +v 0.483662 7.268889 0.228216 +v 0.635827 7.157342 0.302031 +v 0.636097 7.045794 0.132907 +v 0.483932 7.157342 0.059092 +v 0.688479 7.508941 0.100156 +v 0.825427 7.408549 0.166590 +v 0.825670 7.308156 0.014379 +v 0.688722 7.408549 -0.052055 +v 0.954358 7.678635 -0.066081 +v 1.067884 7.582398 -0.001898 +v 1.059895 7.486161 -0.132067 +v 0.946369 7.582398 -0.196250 +v 1.191689 7.858946 -0.214469 +v 1.297306 7.780021 -0.162237 +v 1.296597 7.701096 -0.280062 +v 1.190980 7.780021 -0.332294 +v 1.421492 8.074857 -0.359087 +v 1.525034 8.020116 -0.326546 +v 1.505457 7.933648 -0.409712 +v 1.401915 7.988389 -0.442253 +v 1.534584 8.191300 -0.670799 +v 1.626938 8.152591 -0.655513 +v 1.598554 8.066798 -0.701289 +v 1.506201 8.105508 -0.716576 +v 1.643219 8.306662 -0.972986 +v 1.717352 8.276012 -0.961490 +v 1.695201 8.208086 -0.999735 +v 1.621067 8.238735 -1.011231 +v 1.747877 8.427661 -1.259939 +v 1.806696 8.413178 -1.264906 +v 1.792416 8.368400 -1.303442 +v 1.733597 8.382882 -1.298474 +v 1.713542 8.680011 -1.464676 +v 1.752693 8.678644 -1.475024 +v 1.743105 8.658057 -1.508581 +v 1.703954 8.659424 -1.498233 +v 1.693589 8.987329 -1.609271 +v 1.713202 8.984406 -1.613422 +v 1.708338 8.978333 -1.632127 +v 1.688724 8.981256 -1.627976 +v 1.776800 9.305593 -1.705940 +v 1.776800 9.305593 -1.705940 +v 1.776800 9.305593 -1.705940 +v 1.776800 9.305593 -1.705940 +v 0.215254 3.096841 -0.010823 +v 0.389574 2.683126 -0.498433 +v -0.097051 2.269412 -0.321383 +v -0.271371 2.683126 0.166227 +v -0.210909 3.358126 -0.434604 +v -0.054021 2.985784 -0.873453 +v -0.491984 2.613441 -0.714108 +v -0.648871 2.985784 -0.275259 +v -0.659801 3.645069 -0.880988 +v -0.494363 3.297059 -1.245238 +v -0.857680 2.949050 -1.077760 +v -1.023118 3.297059 -0.713510 +v -1.139512 3.784241 -1.362591 +v -0.936712 3.448618 -1.610565 +v -1.271894 3.153373 -1.485084 +v -1.474694 3.488996 -1.237110 +v -1.383661 3.907599 -1.943588 +v -1.191638 3.608573 -2.122088 +v -1.508300 3.373821 -2.069482 +v -1.700324 3.672846 -1.890982 +v -1.626861 4.072141 -2.518675 +v -1.470019 3.825666 -2.675130 +v -1.736399 3.632169 -2.637340 +v -1.893241 3.878644 -2.480885 +v -1.864952 4.234695 -3.085543 +v -1.762066 4.057687 -3.253984 +v -1.968971 3.897353 -3.211874 +v -2.071856 4.074361 -3.043433 +v -2.246600 4.507585 -3.467844 +v -2.204152 4.414534 -3.638366 +v -2.370815 4.307419 -3.621403 +v -2.413263 4.400470 -3.450882 +v -2.498368 4.990359 -3.728112 +v -2.486661 4.963476 -3.857389 +v -2.613716 4.925848 -3.861070 +v -2.625423 4.952732 -3.731792 +v -2.623986 5.599682 -3.789401 +v -2.619555 5.601023 -3.855519 +v -2.685446 5.606771 -3.859818 +v -2.689877 5.605429 -3.793700 +v -2.448132 6.219825 -3.761762 +v -2.448132 6.219825 -3.761762 +v -2.448132 6.219825 -3.761762 +v -2.448132 6.219825 -3.761762 +v 0.182796 4.498444 -0.693067 +v -0.129190 4.191563 -0.995257 +v -0.235290 3.884681 -0.574072 +v 0.076696 4.191563 -0.271882 +v -0.307591 4.780833 -0.553493 +v -0.588379 4.504640 -0.825464 +v -0.683868 4.228446 -0.446398 +v -0.403081 4.504640 -0.174427 +v -0.768359 5.106679 -0.422350 +v -1.017959 4.861182 -0.664099 +v -1.102850 4.615685 -0.327148 +v -0.853251 4.861182 -0.085399 +v -1.278765 5.402453 -0.277079 +v -1.477119 5.174305 -0.494315 +v -1.531353 4.946158 -0.205188 +v -1.332999 5.174305 0.012048 +v -1.795930 5.636257 -0.130221 +v -1.925755 5.417789 -0.323188 +v -2.006653 5.241852 -0.069573 +v -1.876828 5.460320 0.123394 +v -2.293664 5.867306 -0.207564 +v -2.397005 5.682246 -0.368129 +v -2.513417 5.565999 -0.159222 +v -2.410076 5.751059 0.001343 +v -2.731299 6.202507 -0.271831 +v -2.834881 6.071668 -0.403759 +v -2.941145 5.989480 -0.238817 +v -2.837563 6.120318 -0.106889 +v -3.143533 6.579815 -0.333081 +v -3.245724 6.509654 -0.433526 +v -3.323883 6.446256 -0.309726 +v -3.221692 6.516418 -0.209281 +v -3.439849 7.040773 -0.220347 +v -3.521527 7.018296 -0.284663 +v -3.577186 6.982401 -0.201436 +v -3.495508 7.004879 -0.137119 +v -3.621927 7.573471 -0.156214 +v -3.664697 7.569645 -0.187589 +v -3.695568 7.563377 -0.144741 +v -3.652798 7.567203 -0.113366 +v -3.654834 8.148314 -0.150027 +v -3.654834 8.148314 -0.150027 +v -3.654834 8.148314 -0.150027 +v -3.654834 8.148314 -0.150027 +v -0.504691 5.793649 -1.085307 +v -0.238655 5.668563 -0.887114 +v -0.080297 5.543478 -1.178625 +v -0.346333 5.668563 -1.376818 +v -0.319026 6.269679 -1.126132 +v -0.079594 6.157102 -0.947758 +v 0.062929 6.044524 -1.210117 +v -0.176504 6.157102 -1.388492 +v 0.064719 6.691062 -1.210511 +v 0.245086 6.548011 -1.044818 +v 0.339310 6.404961 -1.270889 +v 0.158943 6.548011 -1.436581 +v 0.474931 7.009770 -1.301599 +v 0.652955 6.904656 -1.164294 +v 0.704082 6.748398 -1.350206 +v 0.526059 6.853513 -1.487512 +v 0.784270 7.325398 -1.594241 +v 0.953355 7.250527 -1.489087 +v 0.963187 7.085212 -1.622604 +v 0.794102 7.160083 -1.727758 +v 1.142637 7.519582 -1.938004 +v 1.278548 7.453396 -1.845413 +v 1.275717 7.307259 -1.945719 +v 1.139806 7.373444 -2.038311 +v 1.474813 7.723254 -2.259379 +v 1.555735 7.649567 -2.169189 +v 1.598867 7.566514 -2.275746 +v 1.517945 7.640202 -2.365935 +v 1.834934 8.016046 -2.095647 +v 1.891590 7.956386 -2.028237 +v 1.960549 7.933952 -2.106049 +v 1.903893 7.993611 -2.173459 +v 2.034887 8.461429 -2.014464 +v 2.083082 8.445204 -1.965047 +v 2.132263 8.437495 -2.015544 +v 2.084067 8.453720 -2.064961 +v 2.116580 8.960448 -2.014332 +v 2.141433 8.962964 -1.989171 +v 2.166472 8.965432 -2.014151 +v 2.141619 8.962916 -2.039311 +v 1.983161 9.454809 -2.016325 +v 1.983161 9.454809 -2.016325 +v 1.983161 9.454809 -2.016325 +v 1.983161 9.454809 -2.016325 +v -0.675641 7.178840 -1.691000 +v -0.543834 7.073983 -1.746296 +v -0.661374 6.969126 -1.827630 +v -0.793180 7.073983 -1.772333 +v -0.648231 7.417481 -1.953491 +v -0.529606 7.323110 -2.003258 +v -0.635391 7.228738 -2.076458 +v -0.754017 7.323110 -2.026691 +v -0.610851 7.553941 -2.311472 +v -0.507690 7.459233 -2.333843 +v -0.604004 7.364525 -2.377043 +v -0.707166 7.459233 -2.354672 +v -0.574421 7.641823 -2.660360 +v -0.484426 7.558088 -2.677329 +v -0.568974 7.474352 -2.712523 +v -0.658968 7.558088 -2.695554 +v -0.542313 7.740645 -2.990953 +v -0.470950 7.661814 -2.988474 +v -0.530673 7.605619 -3.056213 +v -0.602036 7.684450 -3.058692 +v -0.275228 7.871494 -3.146321 +v -0.214629 7.806815 -3.145391 +v -0.239495 7.782346 -3.226873 +v -0.300094 7.847025 -3.227803 +v -0.088034 8.136748 -3.261612 +v -0.029864 8.096497 -3.266527 +v -0.046091 8.081269 -3.333854 +v -0.104260 8.121521 -3.328938 +v 0.099844 8.413099 -3.377527 +v 0.144845 8.385094 -3.381879 +v 0.135813 8.378662 -3.433892 +v 0.090812 8.406668 -3.429541 +v 0.277468 8.712964 -3.414500 +v 0.310975 8.702065 -3.418446 +v 0.306681 8.701608 -3.453636 +v 0.273175 8.712506 -3.449690 +v 0.322983 9.063005 -3.430531 +v 0.340589 9.062873 -3.432592 +v 0.338531 9.063192 -3.450196 +v 0.320924 9.063325 -3.448135 +v 0.298845 9.419161 -3.421915 +v 0.298845 9.419161 -3.421915 +v 0.298845 9.419161 -3.421915 +v 0.298845 9.419161 -3.421915 +v -0.001671 3.185294 0.116325 +v -0.519610 2.703372 0.164287 +v -0.050410 2.221451 0.388814 +v 0.467529 2.703372 0.340852 +v -0.126717 3.368171 0.815430 +v -0.592862 2.934442 0.858596 +v -0.170582 2.500713 1.060671 +v 0.295564 2.934442 1.017505 +v -0.267898 3.507638 1.604745 +v -0.669017 3.108096 1.569138 +v -0.280425 2.708554 1.674783 +v 0.120694 3.108096 1.710390 +v -0.426990 3.411704 2.393897 +v -0.674995 3.065660 2.138703 +v -0.379212 2.714534 2.327383 +v -0.131207 3.060579 2.582576 +v -1.151400 3.243455 2.691069 +v -1.198372 2.992833 2.350491 +v -1.007822 2.674379 2.558552 +v -0.960851 2.925001 2.899131 +v -1.770264 2.849980 2.926359 +v -1.788718 2.649581 2.634465 +v -1.603640 2.394943 2.797585 +v -1.585185 2.595342 3.089478 +v -2.380609 2.551003 3.161944 +v -2.312889 2.420087 2.919612 +v -2.272855 2.177867 3.061655 +v -2.340575 2.308782 3.303987 +v -2.959496 2.454287 2.722028 +v -2.841282 2.367758 2.567784 +v -2.881596 2.173931 2.645622 +v -2.999810 2.260460 2.799865 +v -3.529651 2.360264 2.291184 +v -3.438811 2.301606 2.199425 +v -3.499488 2.175120 2.220214 +v -3.590328 2.233779 2.311973 +v -3.799464 2.605383 1.682211 +v -3.754282 2.576247 1.635975 +v -3.803355 2.528215 1.618288 +v -3.848537 2.557351 1.664525 +v -3.998466 3.138178 1.234311 +v -3.998466 3.138178 1.234311 +v -3.998466 3.138178 1.234311 +v -3.998466 3.138178 1.234311 +v -0.256358 4.577042 0.279489 +v -0.220643 4.281078 0.719898 +v 0.156926 3.985113 0.490384 +v 0.121211 4.281078 0.049976 +v 0.155792 4.909343 0.489806 +v 0.187936 4.642975 0.886173 +v 0.527749 4.376607 0.679611 +v 0.495605 4.642975 0.283243 +v 0.576832 5.214528 0.704658 +v 0.611553 4.983334 1.060123 +v 0.919758 4.752141 0.879650 +v 0.885037 4.983334 0.524185 +v 0.952326 5.554422 0.896269 +v 1.000441 5.370520 1.216350 +v 1.287855 5.186618 1.067485 +v 1.239740 5.370520 0.747404 +v 1.319813 5.962473 1.082592 +v 1.382636 5.826939 1.364555 +v 1.592181 5.631621 1.223981 +v 1.529358 5.767155 0.942019 +v 1.827044 6.258907 1.100334 +v 1.895367 6.158826 1.337026 +v 2.032796 5.966105 1.215868 +v 1.964472 6.066185 0.979175 +v 2.282469 6.553214 1.116304 +v 2.351295 6.485343 1.305802 +v 2.488519 6.354647 1.209152 +v 2.419693 6.422518 1.019654 +v 2.605069 6.960312 1.137319 +v 2.692452 6.962200 1.270793 +v 2.810347 6.886287 1.194684 +v 2.722965 6.884399 1.061209 +v 2.733980 7.405344 0.860235 +v 2.797761 7.426516 0.942679 +v 2.882041 7.396384 0.885214 +v 2.818260 7.375213 0.802771 +v 2.794994 7.965482 0.796350 +v 2.826404 7.969051 0.839117 +v 2.869305 7.965096 0.807938 +v 2.837895 7.961527 0.765171 +v 2.831296 8.533143 0.761145 +v 2.831296 8.533143 0.761145 +v 2.831296 8.533143 0.761145 +v 2.831296 8.533143 0.761145 +v -0.251639 5.952323 0.767691 +v 0.086413 5.847103 0.786452 +v 0.072436 5.741882 0.448169 +v -0.265616 5.847103 0.429408 +v -0.152376 6.369647 0.669823 +v 0.151870 6.274948 0.686708 +v 0.139291 6.180249 0.382253 +v -0.164955 6.274948 0.365368 +v 0.070621 6.782498 0.449959 +v 0.312597 6.640930 0.493033 +v 0.272950 6.499361 0.250472 +v 0.030974 6.640930 0.207398 +v 0.361912 7.042350 0.153082 +v 0.580000 6.927280 0.181206 +v 0.501627 6.742934 0.034685 +v 0.283540 6.858004 0.006561 +v 0.416067 7.181156 -0.284645 +v 0.610962 7.096176 -0.291502 +v 0.528016 6.911130 -0.355773 +v 0.333120 6.996110 -0.348916 +v 0.465855 7.256377 -0.706594 +v 0.629086 7.188687 -0.720716 +v 0.561744 7.041291 -0.792585 +v 0.398514 7.108981 -0.778463 +v 0.506091 7.473518 -1.064455 +v 0.630839 7.406496 -1.056814 +v 0.592503 7.322838 -1.164722 +v 0.467755 7.389861 -1.172363 +v 0.802767 7.743731 -1.244311 +v 0.884152 7.677615 -1.226469 +v 0.871644 7.636019 -1.323559 +v 0.790259 7.702135 -1.341401 +v 1.081797 8.027205 -1.413946 +v 1.146934 7.999429 -1.410240 +v 1.139211 7.972620 -1.475430 +v 1.074074 8.000398 -1.479136 +v 1.144912 8.410880 -1.598435 +v 1.180199 8.408010 -1.600332 +v 1.177706 8.400151 -1.634814 +v 1.142419 8.403021 -1.632917 +v 1.168875 8.848171 -1.642228 +v 1.168875 8.848171 -1.642228 +v 1.168875 8.848171 -1.642228 +v 1.168875 8.848171 -1.642228 +v -0.203288 7.438608 1.061955 +v -0.268675 7.348580 0.923951 +v -0.375352 7.258552 1.033224 +v -0.309965 7.348580 1.171229 +v -0.403382 7.680932 1.028543 +v -0.462230 7.599907 0.904339 +v -0.558239 7.518882 1.002685 +v -0.499391 7.599907 1.126889 +v -0.688586 7.874747 0.980920 +v -0.718123 7.786000 0.874319 +v -0.780694 7.697253 0.965540 +v -0.751156 7.786000 1.072141 +v -1.007886 7.977595 0.927603 +v -1.015229 7.892677 0.837416 +v -1.051475 7.807759 0.920324 +v -1.044132 7.892677 1.010511 +v -1.325128 8.019187 0.876852 +v -1.383144 7.957044 0.812934 +v -1.352048 7.871465 0.867911 +v -1.294032 7.933609 0.931830 +v -1.351216 7.997553 1.177987 +v -1.429660 7.956294 1.178703 +v -1.389313 7.879930 1.198630 +v -1.310868 7.921190 1.197914 +v -1.382329 8.111908 1.452371 +v -1.446144 8.083068 1.463508 +v -1.415827 8.029692 1.499004 +v -1.352012 8.058532 1.487866 +v -1.411998 8.290936 1.700694 +v -1.459053 8.278932 1.722374 +v -1.436242 8.239766 1.750196 +v -1.389187 8.251771 1.728516 +v -1.281395 8.473245 1.912983 +v -1.310240 8.472101 1.933567 +v -1.293535 8.450059 1.955750 +v -1.264691 8.451202 1.935166 +v -1.210995 8.752906 2.035802 +v -1.225652 8.751491 2.045671 +v -1.215985 8.745179 2.059124 +v -1.201328 8.746594 2.049254 +v -1.200470 9.050039 2.147900 +v -1.200470 9.050039 2.147900 +v -1.200470 9.050039 2.147900 +v -1.200470 9.050039 2.147900 +v 0.888303 5.059340 0.257243 +v 0.599456 4.742090 0.411235 +v 0.923599 4.424841 0.365652 +v 1.212446 4.742090 0.211659 +v 1.098516 5.153478 0.902902 +v 0.838554 4.867954 1.041495 +v 1.130283 4.582429 1.000470 +v 1.390245 4.867954 0.861877 +v 1.318901 5.241826 1.579805 +v 1.078177 4.984366 1.673370 +v 1.327845 4.726907 1.607274 +v 1.568569 4.984366 1.513709 +v 1.534666 5.169797 2.246963 +v 1.311598 4.943348 2.274896 +v 1.535468 4.718581 2.240531 +v 1.758536 4.945030 2.212598 +v 1.508629 5.158965 2.921426 +v 1.316179 4.964624 2.920706 +v 1.510252 4.772389 2.934394 +v 1.702702 4.966730 2.935114 +v 1.484555 5.145156 3.568841 +v 1.322759 4.989028 3.606186 +v 1.483080 4.834593 3.655126 +v 1.644876 4.990720 3.617781 +v 1.455294 5.417045 4.123316 +v 1.336647 5.339576 4.238070 +v 1.467504 5.227461 4.297680 +v 1.586152 5.304929 4.182927 +v 1.783682 5.880831 4.426055 +v 1.713172 5.865119 4.542171 +v 1.816268 5.792396 4.594935 +v 1.886778 5.808107 4.478819 +v 1.996839 6.470776 4.638227 +v 1.951771 6.466588 4.717367 +v 2.029778 6.448174 4.760814 +v 2.074845 6.452362 4.681674 +v 1.996371 7.145664 4.665494 +v 1.974119 7.146146 4.705276 +v 2.013800 7.143133 4.727508 +v 2.036052 7.142652 4.687726 +v 2.099106 7.822017 4.731025 +v 2.099106 7.822017 4.731025 +v 2.099106 7.822017 4.731025 +v 2.099106 7.822017 4.731025 +v 1.318795 6.164705 0.597513 +v 1.466097 5.965657 0.773680 +v 1.471681 5.766610 0.544112 +v 1.324379 5.965657 0.367944 +v 1.749373 6.397263 0.447118 +v 1.881945 6.218120 0.605668 +v 1.886970 6.038977 0.399057 +v 1.754398 6.218120 0.240506 +v 2.253746 6.518256 0.270947 +v 2.344070 6.350080 0.421492 +v 2.321019 6.181903 0.247449 +v 2.230695 6.350080 0.096903 +v 2.767833 6.581419 0.091383 +v 2.816403 6.431002 0.233750 +v 2.765771 6.280585 0.092103 +v 2.717201 6.431002 -0.050265 +v 3.290636 6.463255 -0.079418 +v 3.225880 6.354299 0.051663 +v 3.199487 6.222178 -0.071196 +v 3.264243 6.331133 -0.202277 +v 3.638539 6.220067 0.247159 +v 3.525837 6.156766 0.327032 +v 3.533295 6.032878 0.239372 +v 3.645997 6.096179 0.159499 +v 3.964824 6.008798 0.561173 +v 3.881528 5.955002 0.631487 +v 3.900930 5.849714 0.573916 +v 3.984226 5.903510 0.503602 +v 4.328576 5.951036 0.909411 +v 4.257292 5.912837 0.951496 +v 4.286436 5.830314 0.925955 +v 4.357720 5.868513 0.883870 +v 4.479576 5.898323 1.399457 +v 4.427389 5.873000 1.417606 +v 4.452276 5.817816 1.412172 +v 4.504463 5.843139 1.394022 +v 4.628603 5.956516 1.881729 +v 4.602313 5.943697 1.889977 +v 4.616948 5.917870 1.896482 +v 4.643237 5.930689 1.888234 +v 4.606455 6.174267 2.345134 +v 4.606455 6.174267 2.345134 +v 4.606455 6.174267 2.345134 +v 4.606455 6.174267 2.345134 +v 1.807685 7.312833 0.701321 +v 1.940900 7.245513 0.672862 +v 1.880768 7.178193 0.550632 +v 1.747553 7.245513 0.579091 +v 1.890855 7.580706 0.529833 +v 2.010749 7.520118 0.504219 +v 1.956630 7.459530 0.394212 +v 1.836736 7.520118 0.419825 +v 2.000685 7.824964 0.303373 +v 2.101032 7.757078 0.293444 +v 2.046699 7.689191 0.208497 +v 1.946353 7.757078 0.218427 +v 2.131521 7.983274 0.035812 +v 2.204738 7.906878 0.046577 +v 2.165717 7.857405 -0.039114 +v 2.092499 7.933802 -0.049879 +v 2.398950 8.133719 -0.076206 +v 2.448366 8.059171 -0.058536 +v 2.431868 8.028283 -0.142711 +v 2.382452 8.102832 -0.160381 +v 2.676216 8.271239 -0.192681 +v 2.716579 8.208660 -0.177625 +v 2.702492 8.182731 -0.247634 +v 2.662129 8.245310 -0.262690 +v 2.938106 8.406287 -0.304389 +v 2.980219 8.363460 -0.295092 +v 2.982388 8.352616 -0.354856 +v 2.940274 8.395444 -0.364154 +v 3.112005 8.662230 -0.262485 +v 3.152856 8.643281 -0.255415 +v 3.161369 8.644937 -0.300167 +v 3.120517 8.663886 -0.307237 +v 3.204677 8.972840 -0.245652 +v 3.234306 8.968748 -0.240279 +v 3.239781 8.969136 -0.270169 +v 3.210151 8.973228 -0.275542 +v 3.212860 9.300582 -0.251257 +v 3.227808 9.300556 -0.248535 +v 3.230530 9.300519 -0.263484 +v 3.215581 9.300545 -0.266206 +v 3.223598 9.630102 -0.259282 +v 3.223598 9.630102 -0.259282 +v 3.223598 9.630102 -0.259282 +v 3.223598 9.630102 -0.259282 +v 1.410307 5.599770 0.314239 +v 1.120391 5.474537 0.103132 +v 0.946211 5.349304 0.416627 +v 1.236127 5.474537 0.627734 +v 1.159448 6.117548 0.369583 +v 0.898524 6.004838 0.179587 +v 0.741762 5.892128 0.461732 +v 1.002686 6.004838 0.651729 +v 0.812150 6.635890 0.446203 +v 0.605813 6.496907 0.271671 +v 0.492066 6.357924 0.516820 +v 0.698403 6.496907 0.691352 +v 0.333898 7.031605 0.551714 +v 0.186309 6.878866 0.391727 +v 0.119735 6.726127 0.598962 +v 0.267325 6.878866 0.758949 +v -0.177265 7.304986 0.665779 +v -0.334290 7.196167 0.541482 +v -0.347898 7.033782 0.700837 +v -0.190872 7.142601 0.825134 +v -0.488529 7.549577 1.060772 +v -0.653076 7.488842 0.987896 +v -0.655200 7.345329 1.112294 +v -0.490653 7.406064 1.185170 +v -0.757510 7.888221 1.394876 +v -0.897213 7.852334 1.347091 +v -0.917970 7.767537 1.471456 +v -0.778267 7.803423 1.519242 +v -0.924162 8.375962 1.594146 +v -1.034339 8.366439 1.566625 +v -1.056538 8.324195 1.670114 +v -0.946361 8.333718 1.697635 +v -0.983350 8.903073 1.799636 +v -1.057560 8.903519 1.783367 +v -1.073450 8.885119 1.855346 +v -0.999240 8.884674 1.871615 +v -1.021094 9.469335 1.891645 +v -1.058203 9.469692 1.883533 +v -1.066314 9.466308 1.920490 +v -1.029205 9.465950 1.928601 +v -1.039828 10.046574 1.930552 +v -1.039828 10.046574 1.930552 +v -1.039828 10.046574 1.930552 +v -1.039828 10.046574 1.930552 +v 1.429317 6.685497 0.344466 +v 1.318561 6.560528 0.534859 +v 1.534472 6.435558 0.578433 +v 1.645228 6.560528 0.388040 +v 1.566564 6.995203 0.649836 +v 1.466884 6.882730 0.821190 +v 1.661204 6.770257 0.860406 +v 1.760885 6.882730 0.689053 +v 1.705864 7.324919 0.959773 +v 1.611832 7.212953 1.100013 +v 1.779135 7.100987 1.122797 +v 1.873166 7.212953 0.982557 +v 1.871204 7.539141 1.321208 +v 1.791586 7.391662 1.378971 +v 1.934832 7.352199 1.475660 +v 2.014451 7.499678 1.417897 +v 1.477699 7.621879 1.475119 +v 1.444456 7.474857 1.494292 +v 1.499685 7.480813 1.635722 +v 1.532927 7.627835 1.616550 +v 1.070577 7.731249 1.643454 +v 1.039662 7.609668 1.660649 +v 1.085815 7.614593 1.778458 +v 1.116731 7.736175 1.761264 +v 0.693920 7.835646 1.806255 +v 0.638229 7.753254 1.825525 +v 0.646254 7.771077 1.924920 +v 0.701945 7.853469 1.905650 +v 0.437761 8.129720 1.645181 +v 0.372078 8.092354 1.653028 +v 0.365873 8.118207 1.724197 +v 0.431556 8.155573 1.716350 +v 0.247137 8.529601 1.537904 +v 0.199435 8.512829 1.540836 +v 0.199567 8.521188 1.590791 +v 0.247269 8.537960 1.587859 +v 0.110270 8.964600 1.531921 +v 0.085299 8.960515 1.532984 +v 0.086245 8.961311 1.558278 +v 0.111216 8.965396 1.557215 +v 0.076394 9.417916 1.541736 +v 0.076394 9.417916 1.541736 +v 0.076394 9.417916 1.541736 +v 0.076394 9.417916 1.541736 +v 1.953063 7.652110 0.597063 +v 1.912905 7.567505 0.682286 +v 1.995680 7.482901 0.637299 +v 2.035838 7.567505 0.552076 +v 2.174715 7.755487 0.806328 +v 2.138574 7.679343 0.883028 +v 2.213071 7.603199 0.842540 +v 2.249213 7.679343 0.765839 +v 2.409611 7.849170 1.028095 +v 2.367510 7.778204 1.086855 +v 2.423755 7.707239 1.041448 +v 2.465856 7.778204 0.982687 +v 2.661268 7.826357 1.265686 +v 2.607572 7.765424 1.301186 +v 2.639929 7.704490 1.245540 +v 2.693625 7.765424 1.210039 +v 2.880743 7.671767 1.485567 +v 2.812600 7.647707 1.462123 +v 2.845460 7.588950 1.426911 +v 2.913604 7.613010 1.450355 +v 2.619406 7.551706 1.655710 +v 2.584197 7.552951 1.603106 +v 2.600464 7.493016 1.590798 +v 2.635674 7.491770 1.643402 +v 2.363401 7.447348 1.816856 +v 2.335301 7.448368 1.774729 +v 2.345064 7.399269 1.767028 +v 2.373164 7.398249 1.809155 +v 2.096337 7.383096 1.985242 +v 2.081343 7.385016 1.950392 +v 2.083493 7.347209 1.947384 +v 2.098487 7.345289 1.982234 +v 1.781346 7.382764 2.050093 +v 1.775924 7.383759 2.025376 +v 1.770766 7.358966 2.025509 +v 1.776188 7.357971 2.050227 +v 1.487956 7.497610 2.110188 +v 1.487263 7.497464 2.097546 +v 1.482255 7.485841 2.097954 +v 1.482948 7.485987 2.110597 +v 1.193460 7.622901 2.066832 +v 1.193460 7.622901 2.066832 +v 1.193460 7.622901 2.066832 +v 1.193460 7.622901 2.066832 +v 0.927032 5.726316 -0.443819 +v 0.808237 5.531597 -0.747584 +v 0.566756 5.336878 -0.528329 +v 0.685552 5.531597 -0.224563 +v 0.570833 6.142032 -0.527372 +v 0.463918 5.966785 -0.800761 +v 0.246586 5.791538 -0.603431 +v 0.353501 5.966785 -0.330042 +v 0.062993 6.483123 -0.646496 +v 0.017396 6.291497 -0.877912 +v -0.126349 6.099871 -0.690911 +v -0.080752 6.291497 -0.459495 +v -0.502952 6.647663 -0.787357 +v -0.447339 6.442847 -0.947560 +v -0.590739 6.282027 -0.791736 +v -0.646353 6.486844 -0.631533 +v -0.863551 6.661548 -1.249977 +v -0.753903 6.477898 -1.328706 +v -0.899156 6.342969 -1.216258 +v -1.008804 6.526620 -1.137529 +v -1.203743 6.578241 -1.694341 +v -1.108115 6.425484 -1.754306 +v -1.226032 6.313253 -1.656454 +v -1.321661 6.466011 -1.596489 +v -1.528705 6.536723 -2.127865 +v -1.540355 6.421607 -2.226358 +v -1.571389 6.326732 -2.111799 +v -1.559739 6.441848 -2.013306 +v -1.901074 6.656070 -1.768112 +v -1.988328 6.602489 -1.818142 +v -1.980523 6.518366 -1.741659 +v -1.893270 6.571947 -1.691629 +v -2.207097 6.985665 -1.496440 +v -2.281921 6.975761 -1.505119 +v -2.282648 6.928872 -1.445345 +v -2.207824 6.938776 -1.436666 +v -2.099115 7.387449 -1.151923 +v -2.136566 7.393292 -1.149413 +v -2.136953 7.376235 -1.115473 +v -2.099502 7.370391 -1.117984 +v -2.062814 7.916117 -0.986897 +v -2.062814 7.916117 -0.986897 +v -2.062814 7.916117 -0.986897 +v -2.062814 7.916117 -0.986897 +v 0.882148 6.741593 -0.661234 +v 0.728596 6.649524 -0.840340 +v 0.574966 6.557456 -0.661301 +v 0.728518 6.649524 -0.482195 +v 0.690263 7.212148 -0.661276 +v 0.552065 7.129286 -0.822471 +v 0.413799 7.046424 -0.661335 +v 0.551996 7.129286 -0.500140 +v 0.323207 7.601523 -0.661355 +v 0.212128 7.511095 -0.804637 +v 0.100987 7.420666 -0.661403 +v 0.212066 7.511095 -0.518121 +v 0.010534 7.992572 -0.661423 +v -0.092686 7.921489 -0.786796 +v -0.195960 7.850405 -0.661467 +v -0.092740 7.921489 -0.536094 +v -0.281761 8.417666 -0.660948 +v -0.380679 8.371165 -0.766499 +v -0.452878 8.287690 -0.662061 +v -0.353961 8.334191 -0.556510 +v -0.613861 8.753545 -0.448106 +v -0.703995 8.724291 -0.532091 +v -0.750303 8.637641 -0.452210 +v -0.660168 8.666895 -0.368225 +v -0.919385 9.097373 -0.252534 +v -0.994612 9.078263 -0.317627 +v -1.040897 9.021661 -0.247519 +v -0.965670 9.040771 -0.182425 +v -1.126573 9.529469 -0.122677 +v -1.184577 9.518624 -0.170531 +v -1.227870 9.495061 -0.112716 +v -1.169866 9.505906 -0.064862 +v -1.252755 10.017161 -0.096544 +v -1.291806 10.011465 -0.128291 +v -1.322807 10.004334 -0.088877 +v -1.283756 10.010031 -0.057130 +v -1.339077 10.519033 -0.079035 +v -1.358587 10.516074 -0.094908 +v -1.374462 10.515043 -0.075204 +v -1.354953 10.518003 -0.059331 +v -1.406505 11.022470 -0.135415 +v -1.406505 11.022470 -0.135415 +v -1.406505 11.022470 -0.135415 +v -1.406505 11.022470 -0.135415 +v 0.946819 7.783953 -0.895764 +v 0.874971 7.745834 -0.798716 +v 0.978696 7.707715 -0.736897 +v 1.050544 7.745834 -0.833945 +v 0.963115 8.072925 -0.814550 +v 0.898452 8.038618 -0.727207 +v 0.991804 8.004312 -0.671570 +v 1.056467 8.038618 -0.758913 +v 1.001987 8.330740 -0.620822 +v 0.942236 8.282845 -0.554510 +v 1.022944 8.234949 -0.516381 +v 1.082695 8.282845 -0.582693 +v 1.048229 8.530135 -0.392279 +v 0.998167 8.494981 -0.328135 +v 1.064851 8.441104 -0.305619 +v 1.114912 8.476258 -0.369763 +v 1.208482 8.731099 -0.222913 +v 1.169614 8.706317 -0.162521 +v 1.217148 8.647399 -0.156106 +v 1.256016 8.672181 -0.216498 +v 1.405373 8.843890 -0.017204 +v 1.372052 8.822441 0.032172 +v 1.409448 8.771447 0.035258 +v 1.442770 8.792896 -0.014118 +v 1.576995 9.008658 0.162401 +v 1.548611 8.989715 0.199828 +v 1.583823 8.954394 0.208655 +v 1.612207 8.973338 0.171228 +v 1.671997 9.189566 0.377378 +v 1.651044 9.176027 0.406026 +v 1.681245 9.157101 0.419170 +v 1.702197 9.170639 0.390522 +v 1.725197 9.453602 0.498149 +v 1.711750 9.447270 0.518653 +v 1.733110 9.440987 0.530720 +v 1.746556 9.447318 0.510216 +v 1.723698 9.736523 0.595503 +v 1.717067 9.735612 0.606252 +v 1.727854 9.735098 0.612863 +v 1.734485 9.736009 0.602115 +v 1.727321 10.035175 0.563124 +v 1.727321 10.035175 0.563124 +v 1.727321 10.035175 0.563124 +v 1.727321 10.035175 0.563124 +v 0.029698 7.145856 -1.335827 +v 0.173249 7.017569 -1.272730 +v 0.124041 6.889281 -1.421614 +v -0.019509 7.017569 -1.484711 +v 0.358482 7.473966 -1.634795 +v 0.487677 7.358507 -1.578008 +v 0.443390 7.243048 -1.712004 +v 0.314195 7.358507 -1.768791 +v 0.790030 7.615906 -2.027210 +v 0.874791 7.501768 -1.949381 +v 0.805346 7.387630 -2.041137 +v 0.720585 7.501768 -2.118965 +v 1.215653 7.556913 -2.414236 +v 1.274499 7.457312 -2.332206 +v 1.198416 7.357710 -2.398562 +v 1.139569 7.457312 -2.480592 +v 1.637963 7.439081 -2.824273 +v 1.694598 7.346976 -2.768725 +v 1.587883 7.306709 -2.726690 +v 1.531248 7.398815 -2.782238 +v 1.143879 7.156472 -2.964077 +v 1.165209 7.059395 -2.944516 +v 1.135191 7.072125 -2.848608 +v 1.113860 7.169201 -2.868169 +v 0.623843 7.129411 -3.096046 +v 0.605196 7.050758 -3.090270 +v 0.585864 7.061071 -3.012249 +v 0.604511 7.139724 -3.018026 +v 0.141072 7.358492 -3.218096 +v 0.107268 7.307984 -3.217588 +v 0.103446 7.311150 -3.157012 +v 0.137251 7.361659 -3.157520 +v -0.281500 7.711366 -3.162776 +v -0.312181 7.684901 -3.162498 +v -0.310111 7.682925 -3.122080 +v -0.279429 7.709390 -3.122358 +v -0.583876 8.168916 -3.120630 +v -0.602268 8.160424 -3.120326 +v -0.602099 8.160783 -3.100070 +v -0.583707 8.169274 -3.100374 +v -0.755993 8.693449 -3.156226 +v -0.755993 8.693449 -3.156226 +v -0.755993 8.693449 -3.156226 +v -0.755993 8.693449 -3.156226 +v 0.094257 7.966857 -1.385411 +v 0.181835 7.917929 -1.399463 +v 0.141800 7.869000 -1.478613 +v 0.054222 7.917929 -1.464561 +v 0.203973 8.222988 -1.600493 +v 0.282793 8.178952 -1.613140 +v 0.246762 8.134916 -1.684375 +v 0.167941 8.178952 -1.671728 +v 0.319819 8.476004 -1.827593 +v 0.387587 8.432080 -1.834337 +v 0.353265 8.388157 -1.893159 +v 0.285497 8.432080 -1.886415 +v 0.454785 8.667295 -2.092062 +v 0.506842 8.619264 -2.088707 +v 0.483721 8.589992 -2.149011 +v 0.431664 8.638022 -2.152367 +v 0.719864 8.870164 -2.185085 +v 0.759488 8.824440 -2.179309 +v 0.751390 8.810035 -2.237799 +v 0.711766 8.855759 -2.243574 +v 0.977946 9.082851 -2.276656 +v 1.016552 9.050196 -2.273750 +v 1.011564 9.039907 -2.323092 +v 0.972957 9.072563 -2.325998 +v 1.162194 9.361288 -2.343512 +v 1.199976 9.346658 -2.342932 +v 1.200005 9.345127 -2.383423 +v 1.162223 9.359757 -2.384003 +v 1.225974 9.698651 -2.308956 +v 1.255983 9.693899 -2.308307 +v 1.257100 9.696826 -2.338534 +v 1.227091 9.701578 -2.339183 +v 1.278682 10.044031 -2.282729 +v 1.298890 10.045264 -2.281969 +v 1.299590 10.046249 -2.302192 +v 1.279382 10.045016 -2.302952 +v 1.193226 10.384220 -2.286871 +v 1.203143 10.386244 -2.286457 +v 1.203546 10.386343 -2.296578 +v 1.193629 10.384319 -2.296992 +v 1.148583 10.733781 -2.291321 +v 1.148583 10.733781 -2.291321 +v 1.148583 10.733781 -2.291321 +v 1.148583 10.733781 -2.291321 +v 1.689422 6.966218 -0.112815 +v 1.847219 6.912148 -0.227803 +v 1.720469 6.858077 -0.376316 +v 1.562672 6.912148 -0.261329 +v 1.715023 7.389741 -0.330098 +v 1.857041 7.341077 -0.433587 +v 1.742965 7.292414 -0.567249 +v 1.600948 7.341077 -0.463760 +v 1.734649 7.838409 -0.496665 +v 1.860702 7.791464 -0.587087 +v 1.759116 7.744520 -0.704330 +v 1.633064 7.791464 -0.613908 +v 1.764973 8.264867 -0.754035 +v 1.873975 8.204966 -0.822173 +v 1.783794 8.145064 -0.913778 +v 1.674792 8.204966 -0.845641 +v 1.804141 8.605612 -1.096833 +v 1.895765 8.569908 -1.168294 +v 1.821593 8.491507 -1.224223 +v 1.729969 8.527210 -1.152761 +v 1.550384 8.882241 -1.375201 +v 1.616406 8.871729 -1.451306 +v 1.558803 8.798558 -1.491172 +v 1.492780 8.809071 -1.415067 +v 1.337108 9.225039 -1.612843 +v 1.389184 9.217791 -1.674510 +v 1.337935 9.167332 -1.711856 +v 1.285859 9.174580 -1.650189 +v 1.148617 9.590683 -1.826086 +v 1.181483 9.596766 -1.876850 +v 1.138415 9.567541 -1.908236 +v 1.105549 9.561458 -1.857472 +v 0.926484 9.998642 -1.808439 +v 0.947114 10.005916 -1.842547 +v 0.914078 9.997292 -1.864367 +v 0.893449 9.990018 -1.830259 +v 0.890346 10.471495 -1.817919 +v 0.900807 10.474415 -1.835021 +v 0.883635 10.473310 -1.845714 +v 0.873174 10.470390 -1.828611 +v 0.804714 10.933186 -1.747385 +v 0.804714 10.933186 -1.747385 +v 0.804714 10.933186 -1.747385 +v 0.804714 10.933186 -1.747385 +v 2.047802 7.761458 -0.336647 +v 1.975832 7.749784 -0.266324 +v 2.047118 7.738110 -0.195306 +v 2.119088 7.749784 -0.265630 +v 2.047419 8.083793 -0.257494 +v 1.982646 8.073286 -0.194203 +v 2.046803 8.062779 -0.130287 +v 2.111576 8.073286 -0.193578 +v 2.047214 8.407493 -0.215221 +v 1.989635 8.402786 -0.158389 +v 2.046661 8.398080 -0.101003 +v 2.104240 8.402786 -0.157834 +v 2.047155 8.740693 -0.189114 +v 1.996760 8.736007 -0.139450 +v 2.046540 8.726703 -0.089816 +v 2.096934 8.731389 -0.139480 +v 2.078338 9.071297 -0.105906 +v 2.034596 9.061988 -0.064747 +v 2.075778 9.039640 -0.026034 +v 2.119520 9.048949 -0.067193 +v 2.147310 9.348683 0.069060 +v 2.110612 9.339578 0.102759 +v 2.144339 9.317718 0.133582 +v 2.181038 9.326823 0.099882 +v 2.194560 9.643855 0.191252 +v 2.165834 9.641214 0.219707 +v 2.194242 9.634187 0.247733 +v 2.222968 9.636827 0.219278 +v 2.195631 9.972488 0.189283 +v 2.174073 9.970064 0.210564 +v 2.195487 9.968187 0.232045 +v 2.217046 9.970612 0.210764 +v 2.185815 10.294212 0.270957 +v 2.171466 10.293852 0.285255 +v 2.185732 10.292042 0.299526 +v 2.200081 10.292402 0.285227 +v 2.228588 10.621202 0.253039 +v 2.221428 10.620213 0.260137 +v 2.228540 10.620466 0.267346 +v 2.235700 10.621456 0.260248 +v 2.129869 10.931916 0.317966 +v 2.129869 10.931916 0.317966 +v 2.129869 10.931916 0.317966 +v 2.129869 10.931916 0.317966 +v 0.529496 8.316685 0.391202 +v 0.592359 8.292812 0.355841 +v 0.550323 8.268940 0.297230 +v 0.487461 8.292812 0.332592 +v 0.560162 8.646173 0.252839 +v 0.616738 8.624688 0.221014 +v 0.578907 8.603203 0.168265 +v 0.522330 8.624688 0.200090 +v 0.601833 8.963037 0.064823 +v 0.650745 8.934495 0.042752 +v 0.615739 8.905953 0.002082 +v 0.566827 8.934495 0.024153 +v 0.665885 9.181393 -0.224174 +v 0.707440 9.151166 -0.237879 +v 0.675567 9.120939 -0.267858 +v 0.634012 9.151166 -0.254153 +v 0.730270 9.383074 -0.506154 +v 0.763189 9.373034 -0.536046 +v 0.737052 9.340174 -0.553793 +v 0.704133 9.350213 -0.523901 +v 0.441567 9.556203 -0.608087 +v 0.456325 9.560445 -0.642832 +v 0.439186 9.528443 -0.654019 +v 0.424428 9.524201 -0.619274 +v 0.159971 9.749408 -0.709650 +v 0.172390 9.752301 -0.737234 +v 0.154057 9.730477 -0.747777 +v 0.141638 9.727584 -0.720192 +v -0.038994 10.033573 -0.782975 +v -0.030844 10.037202 -0.803948 +v -0.048264 10.025434 -0.812754 +v -0.056414 10.021806 -0.791780 +v -0.220756 10.339454 -0.763543 +v -0.215386 10.342002 -0.777527 +v -0.228679 10.337609 -0.783432 +v -0.234049 10.335061 -0.769449 +v -0.274997 10.693794 -0.761475 +v -0.272054 10.693522 -0.768474 +v -0.279059 10.693478 -0.771417 +v -0.282001 10.693749 -0.764418 +v -0.218810 11.046441 -0.798456 +v -0.218810 11.046441 -0.798456 +v -0.218810 11.046441 -0.798456 +v -0.218810 11.046441 -0.798456 +v 2.302005 7.810725 0.680864 +v 2.334227 7.761965 0.729405 +v 2.346303 7.713205 0.672408 +v 2.314081 7.761965 0.623867 +v 2.597065 7.953778 0.624541 +v 2.626065 7.909894 0.668228 +v 2.636934 7.866009 0.616931 +v 2.607934 7.909894 0.573244 +v 2.900662 8.080722 0.566589 +v 2.925429 8.041254 0.605614 +v 2.934080 8.001786 0.560210 +v 2.909313 8.041254 0.521184 +v 3.202771 8.207875 0.508911 +v 3.208245 8.166563 0.541950 +v 3.232086 8.138839 0.503334 +v 3.226612 8.180151 0.470294 +v 3.432664 8.280716 0.741462 +v 3.422684 8.240501 0.760466 +v 3.454189 8.220362 0.734394 +v 3.464170 8.260576 0.715390 +v 3.664037 8.306132 0.976351 +v 3.658044 8.273344 0.994572 +v 3.685462 8.256923 0.974039 +v 3.691455 8.289711 0.955819 +v 3.871397 8.436835 1.185480 +v 3.871907 8.414977 1.206587 +v 3.899549 8.406547 1.197188 +v 3.899040 8.428405 1.176081 +v 3.925925 8.692723 1.379459 +v 3.927754 8.680120 1.398362 +v 3.950232 8.678370 1.395019 +v 3.948402 8.690973 1.376117 +v 3.973273 8.975332 1.543218 +v 3.974943 8.970798 1.557625 +v 3.990015 8.970377 1.555744 +v 3.988345 8.974911 1.541338 +v 3.974844 9.304403 1.573959 +v 3.975764 9.304647 1.581496 +v 3.983305 9.304594 1.580577 +v 3.982385 9.304350 1.573040 +v 3.983648 9.633586 1.527805 +v 3.983648 9.633586 1.527805 +v 3.983648 9.633586 1.527805 +v 3.983648 9.633586 1.527805 +v 0.659282 8.268538 -0.484583 +v 0.589586 8.241809 -0.470441 +v 0.613431 8.215080 -0.403441 +v 0.683128 8.241809 -0.417583 +v 0.601104 8.595416 -0.381626 +v 0.538377 8.571361 -0.368898 +v 0.559838 8.547305 -0.308598 +v 0.622565 8.571361 -0.321326 +v 0.485500 8.862021 -0.177043 +v 0.431328 8.835809 -0.168535 +v 0.451989 8.809596 -0.117740 +v 0.506161 8.835809 -0.126249 +v 0.386508 9.145262 -0.001860 +v 0.338843 9.123042 0.006054 +v 0.356657 9.100822 0.050967 +v 0.404322 9.123042 0.043054 +v 0.276544 9.421505 0.191593 +v 0.240607 9.393464 0.191995 +v 0.255821 9.374519 0.230564 +v 0.291758 9.402560 0.230162 +v 0.029355 9.597116 0.369884 +v 0.003494 9.569469 0.366741 +v 0.014864 9.555053 0.399996 +v 0.040725 9.582699 0.403139 +v -0.190923 9.810068 0.528775 +v -0.214202 9.790545 0.528105 +v -0.206456 9.780363 0.555671 +v -0.183178 9.799887 0.556341 +v -0.380694 10.063818 0.665707 +v -0.401078 10.053824 0.667741 +v -0.395278 10.046204 0.688424 +v -0.374894 10.056197 0.686390 +v -0.444652 10.368664 0.814281 +v -0.459326 10.365984 0.817174 +v -0.455823 10.362236 0.831476 +v -0.441149 10.364916 0.828584 +v -0.466995 10.710909 0.864362 +v -0.474407 10.710546 0.865992 +v -0.472752 10.709942 0.873383 +v -0.465340 10.710305 0.871753 +v -0.470695 11.058674 0.884086 +v -0.470695 11.058674 0.884086 +v -0.470695 11.058674 0.884086 +v -0.470695 11.058674 0.884086 +v 0.596185 8.523317 0.560098 +v 0.594314 8.503343 0.513591 +v 0.548948 8.483368 0.523994 +v 0.550818 8.503343 0.570501 +v 0.476244 8.825615 0.468427 +v 0.474561 8.807638 0.426571 +v 0.433731 8.789661 0.435934 +v 0.435414 8.807638 0.477790 +v 0.291663 9.079924 0.327352 +v 0.292980 9.059646 0.292297 +v 0.259499 9.039368 0.302770 +v 0.258183 9.059646 0.337825 +v 0.090470 9.299834 0.174807 +v 0.094585 9.275817 0.149054 +v 0.059589 9.270144 0.148752 +v 0.055473 9.294162 0.174505 +v 0.224327 9.485454 -0.068647 +v 0.226493 9.459579 -0.084438 +v 0.199047 9.464625 -0.096472 +v 0.196881 9.490499 -0.080681 +v 0.370896 9.628853 -0.336794 +v 0.373710 9.608617 -0.351758 +v 0.350642 9.612564 -0.361434 +v 0.347828 9.632800 -0.346470 +v 0.483989 9.866977 -0.544896 +v 0.488490 9.856349 -0.561547 +v 0.469081 9.857146 -0.567302 +v 0.464580 9.867774 -0.550651 +v 0.485337 10.181490 -0.664457 +v 0.489184 10.178098 -0.678760 +v 0.474485 10.177311 -0.682527 +v 0.470638 10.180703 -0.668224 +v 0.484580 10.516426 -0.703822 +v 0.487140 10.515536 -0.713582 +v 0.477340 10.515173 -0.716120 +v 0.474780 10.516063 -0.706360 +v 0.473181 10.852963 -0.734048 +v 0.474458 10.852940 -0.738949 +v 0.469557 10.852923 -0.740226 +v 0.468280 10.852947 -0.735325 +v 0.479658 11.190399 -0.713659 +v 0.479658 11.190399 -0.713659 +v 0.479658 11.190399 -0.713659 +v 0.479658 11.190399 -0.713659 +v -0.309383 8.507997 1.197018 +v -0.320630 8.486515 1.152550 +v -0.361548 8.465034 1.173277 +v -0.350301 8.486515 1.217745 +v -0.449703 8.763294 1.133155 +v -0.459825 8.743960 1.093134 +v -0.496652 8.724627 1.111788 +v -0.486530 8.743960 1.151809 +v -0.639906 8.980348 1.046590 +v -0.647598 8.961398 1.011610 +v -0.679027 8.942449 1.028786 +v -0.671335 8.961398 1.063766 +v -0.817986 9.211037 0.965543 +v -0.822107 9.191685 0.936123 +v -0.846999 9.172333 0.952339 +v -0.842877 9.191685 0.981759 +v -1.063148 9.353772 0.853112 +v -1.058425 9.331198 0.833322 +v -1.079586 9.314485 0.847336 +v -1.084310 9.337059 0.867126 +v -1.228797 9.427723 0.614403 +v -1.221423 9.407059 0.601756 +v -1.241366 9.394375 0.610853 +v -1.248739 9.415039 0.623500 +v -1.389268 9.518827 0.382983 +v -1.385029 9.503479 0.370456 +v -1.402002 9.494059 0.376254 +v -1.406241 9.509407 0.388782 +v -1.526435 9.689275 0.184265 +v -1.528674 9.682912 0.170650 +v -1.539309 9.673856 0.176631 +v -1.537070 9.680219 0.190246 +v -1.748999 9.862086 0.276701 +v -1.753703 9.861311 0.267763 +v -1.760104 9.854529 0.271720 +v -1.755399 9.855305 0.280658 +v -1.893280 10.115862 0.335334 +v -1.895284 10.114972 0.330769 +v -1.899206 10.112623 0.332948 +v -1.897202 10.113513 0.337514 +v -2.045922 10.370658 0.302226 +v -2.045922 10.370658 0.302226 +v -2.045922 10.370658 0.302226 +v -2.045922 10.370658 0.302226 +v 0.760364 8.469772 -0.722907 +v 0.800667 8.447762 -0.701540 +v 0.812064 8.425753 -0.745710 +v 0.771761 8.447762 -0.767077 +v 0.946760 8.703380 -0.805118 +v 0.983033 8.683571 -0.785887 +v 0.993291 8.663762 -0.825640 +v 0.957018 8.683571 -0.844871 +v 1.114468 8.954841 -0.879086 +v 1.145820 8.936049 -0.861599 +v 1.154048 8.917258 -0.896543 +v 1.122696 8.936049 -0.914029 +v 1.325203 9.167941 -0.971365 +v 1.343969 9.142981 -0.954577 +v 1.354892 9.130198 -0.985791 +v 1.336125 9.155159 -1.002579 +v 1.584534 9.309825 -0.865660 +v 1.589327 9.282205 -0.853927 +v 1.603063 9.273660 -0.879653 +v 1.598271 9.301280 -0.891386 +v 1.871167 9.352959 -0.747823 +v 1.871616 9.329037 -0.739526 +v 1.881966 9.321636 -0.761422 +v 1.881517 9.345558 -0.769719 +v 2.150855 9.395711 -0.634749 +v 2.149706 9.376191 -0.629447 +v 2.167442 9.372666 -0.638583 +v 2.168591 9.392186 -0.643885 +v 2.105310 9.444156 -0.339102 +v 2.104828 9.430180 -0.333159 +v 2.119864 9.430575 -0.331008 +v 2.120347 9.444551 -0.336951 +v 2.070197 9.623615 -0.092818 +v 2.069180 9.615827 -0.086422 +v 2.078715 9.617165 -0.083276 +v 2.079732 9.624953 -0.089672 +v 1.915945 9.816662 0.091619 +v 1.915205 9.813139 0.095183 +v 1.919578 9.814444 0.097381 +v 1.920318 9.817966 0.093817 +v 1.775589 10.035369 0.260129 +v 1.775589 10.035369 0.260129 +v 1.775589 10.035369 0.260129 +v 1.775589 10.035369 0.260129 +v 2.428249 8.050692 -0.247252 +v 2.446908 8.021605 -0.210222 +v 2.469964 7.992519 -0.244686 +v 2.451305 8.021605 -0.281716 +v 2.688823 8.264523 -0.231225 +v 2.705616 8.238345 -0.197898 +v 2.726366 8.212168 -0.228915 +v 2.709573 8.238345 -0.262242 +v 2.978799 8.438157 -0.213389 +v 2.993343 8.414618 -0.183789 +v 3.011405 8.391078 -0.211384 +v 2.996861 8.414618 -0.240984 +v 3.248831 8.644894 -0.196780 +v 3.259011 8.622743 -0.171037 +v 3.272268 8.600592 -0.195339 +v 3.262089 8.622743 -0.221083 +v 3.571638 8.745097 -0.177025 +v 3.594481 8.733276 -0.160838 +v 3.591310 8.706912 -0.175616 +v 3.568467 8.718733 -0.191803 +v 3.547139 8.778490 -0.507798 +v 3.571764 8.773235 -0.510510 +v 3.566148 8.748819 -0.514205 +v 3.541523 8.754074 -0.511493 +v 3.524899 8.848556 -0.833824 +v 3.544514 8.844712 -0.837127 +v 3.539631 8.826850 -0.845347 +v 3.520015 8.830693 -0.842045 +v 3.507062 9.055272 -1.097330 +v 3.521537 9.050650 -1.097410 +v 3.518380 9.040959 -1.108680 +v 3.503905 9.045582 -1.108600 +v 3.671027 9.296468 -1.266225 +v 3.680238 9.292311 -1.265514 +v 3.679100 9.288217 -1.274710 +v 3.669890 9.292374 -1.275421 +v 3.778123 9.595060 -1.376714 +v 3.783121 9.594244 -1.376790 +v 3.782887 9.593269 -1.381755 +v 3.777889 9.594086 -1.381679 +v 3.777413 9.931176 -1.400665 +v 3.777413 9.931176 -1.400665 +v 3.777413 9.931176 -1.400665 +v 3.777413 9.931176 -1.400665 +v 0.712311 8.493072 -0.525883 +v 0.668236 8.469649 -0.534491 +v 0.671942 8.446227 -0.489736 +v 0.716018 8.469649 -0.481128 +v 0.566221 8.790818 -0.395071 +v 0.526553 8.769738 -0.402818 +v 0.529889 8.748658 -0.362539 +v 0.569557 8.769738 -0.354792 +v 0.362330 9.025316 -0.212504 +v 0.328561 9.004486 -0.220726 +v 0.333018 8.983656 -0.186257 +v 0.366787 9.004486 -0.178035 +v 0.175063 9.277113 -0.044727 +v 0.146854 9.257257 -0.052909 +v 0.148211 9.242128 -0.020873 +v 0.176421 9.261985 -0.012691 +v -0.068662 9.522027 0.045824 +v -0.090819 9.502817 0.037850 +v -0.091451 9.491794 0.066162 +v -0.069294 9.511003 0.074136 +v -0.316205 9.759875 0.137763 +v -0.336056 9.745397 0.131628 +v -0.337379 9.737088 0.155514 +v -0.317528 9.751567 0.161650 +v -0.509524 10.048138 0.209925 +v -0.525928 10.037249 0.205150 +v -0.529022 10.033302 0.224780 +v -0.512618 10.044191 0.229554 +v -0.720255 10.334282 0.194644 +v -0.732770 10.326441 0.191069 +v -0.736151 10.325111 0.205823 +v -0.723636 10.332952 0.209398 +v -0.884620 10.648896 0.183413 +v -0.893502 10.644741 0.180872 +v -0.896702 10.645738 0.190432 +v -0.887821 10.649893 0.192972 +v -0.978511 10.964027 0.047634 +v -0.983148 10.962597 0.046184 +v -0.984928 10.963686 0.050799 +v -0.980291 10.965117 0.052249 +v -1.029498 11.310193 -0.023038 +v -1.029498 11.310193 -0.023038 +v -1.029498 11.310193 -0.023038 +v -1.029498 11.310193 -0.023038 +v 1.184975 2.782948 -1.117181 +v 1.420842 2.502403 -0.851126 +v 1.482200 2.221859 -1.201346 +v 1.246333 2.502403 -1.467400 +v 1.708618 3.115178 -1.265460 +v 1.910790 2.874711 -1.037413 +v 1.963382 2.634244 -1.337601 +v 1.761210 2.874711 -1.565648 +v 2.294968 3.313498 -1.431495 +v 2.469702 3.116829 -1.243228 +v 2.519787 2.920161 -1.495157 +v 2.345052 3.116829 -1.683424 +v 2.747511 3.636513 -1.559641 +v 2.935119 3.522524 -1.422569 +v 3.023008 3.408535 -1.637653 +v 2.835400 3.522524 -1.774725 +v 3.040486 4.158789 -1.642602 +v 3.196022 4.097458 -1.543997 +v 3.276767 4.036127 -1.709510 +v 3.121232 4.097458 -1.808115 +v 3.357188 4.709202 -1.732282 +v 3.461642 4.669943 -1.666762 +v 3.516236 4.630685 -1.777319 +v 3.411782 4.669943 -1.842840 +v 3.644566 5.263365 -1.813658 +v 3.700425 5.255677 -1.781926 +v 3.731354 5.247990 -1.838234 +v 3.675495 5.255677 -1.869966 +v 3.637604 5.894843 -1.811687 +v 3.637604 5.894843 -1.811687 +v 3.637604 5.894843 -1.811687 +v 3.637604 5.894843 -1.811687 +v 2.662767 3.651675 -0.575894 +v 2.543661 3.561877 -0.364402 +v 2.769465 3.472079 -0.275364 +v 2.888571 3.561877 -0.486856 +v 2.818727 4.108343 -0.136611 +v 2.729397 4.040995 0.022008 +v 2.898750 3.973646 0.088787 +v 2.988080 4.040995 -0.069832 +v 2.891797 4.670982 0.069202 +v 2.835645 4.653908 0.184529 +v 2.951949 4.636834 0.238628 +v 3.008101 4.653908 0.123302 +v 2.922423 5.291266 0.157396 +v 2.895657 5.298856 0.215810 +v 2.954220 5.295383 0.243095 +v 2.980986 5.287794 0.184681 +v 3.045599 5.906944 0.047816 +v 3.045599 5.906944 0.047816 +v 3.045599 5.906944 0.047816 +v 3.045599 5.906944 0.047816 +v 3.225182 4.749248 -0.432445 +v 3.349042 4.712869 -0.441386 +v 3.329504 4.676491 -0.564023 +v 3.205644 4.712869 -0.555081 +v 3.445533 5.290963 -0.710364 +v 3.507463 5.272774 -0.714835 +v 3.497694 5.254584 -0.776153 +v 3.435764 5.272774 -0.771682 +v 3.592556 5.883819 -0.895798 +v 3.592556 5.883819 -0.895798 +v 3.592556 5.883819 -0.895798 +v 3.592556 5.883819 -0.895798 +v 2.910038 5.304496 0.166065 +v 2.903074 5.293325 0.229412 +v 2.966606 5.282154 0.234426 +v 2.973569 5.293325 0.171079 +v 3.038156 5.915216 0.320893 +v 3.038156 5.915216 0.320893 +v 3.038156 5.915216 0.320893 +v 3.038156 5.915216 0.320893 +v -0.445736 4.886012 -1.509105 +v -0.184516 4.677549 -1.655035 +v -0.438894 4.469087 -1.812589 +v -0.700114 4.677549 -1.666659 +v -0.432942 5.145362 -2.076605 +v -0.215259 4.971643 -2.198213 +v -0.427241 4.797924 -2.329508 +v -0.644924 4.971643 -2.207900 +v -0.423100 5.502331 -2.513180 +v -0.248164 5.397474 -2.645498 +v -0.416959 5.292617 -2.785565 +v -0.591895 5.397474 -2.653247 +v -0.416029 5.985376 -2.826817 +v -0.284427 5.938011 -2.943797 +v -0.410623 5.890646 -3.066590 +v -0.542226 5.938011 -2.949609 +v -0.411823 6.544295 -3.013387 +v -0.323962 6.535885 -3.096970 +v -0.407967 6.527476 -3.184428 +v -0.495828 6.535885 -3.100845 +v -0.411605 7.150869 -3.023064 +v -0.367670 7.151961 -3.065048 +v -0.409668 7.153052 -3.108969 +v -0.453603 7.151961 -3.066986 +v -0.410601 7.768912 -3.067597 +v -0.410601 7.768912 -3.067597 +v -0.410601 7.768912 -3.067597 +v -0.410601 7.768912 -3.067597 +v 0.573046 5.714266 -2.843167 +v 0.585932 5.595132 -2.705733 +v 0.668033 5.475999 -2.816700 +v 0.655147 5.595132 -2.954134 +v 1.157891 5.852644 -2.680204 +v 1.166481 5.773222 -2.588581 +v 1.221215 5.693800 -2.662559 +v 1.212625 5.773222 -2.754182 +v 1.693610 6.102386 -2.530930 +v 1.701855 6.064631 -2.484018 +v 1.733172 6.026877 -2.519906 +v 1.724927 6.064631 -2.566818 +v 2.233703 6.362772 -2.380437 +v 2.233703 6.362772 -2.380437 +v 2.233703 6.362772 -2.380437 +v 2.233703 6.362772 -2.380437 +v 0.501580 6.762317 -3.240487 +v 0.558646 6.742043 -3.245638 +v 0.546391 6.721769 -3.301610 +v 0.489325 6.742043 -3.296459 +v 0.696062 7.286038 -3.505762 +v 0.696062 7.286038 -3.505762 +v 0.696062 7.286038 -3.505762 +v 0.696062 7.286038 -3.505762 +v 1.464608 6.718002 0.030341 +v 1.677080 6.531796 0.005191 +v 1.499726 6.345590 -0.114486 +v 1.287254 6.531796 -0.089335 +v 1.574416 6.967800 -0.422507 +v 1.756535 6.808194 -0.444065 +v 1.604517 6.648589 -0.546645 +v 1.422399 6.808194 -0.525087 +v 1.702347 7.059380 -0.950092 +v 1.851303 6.922204 -0.956471 +v 1.721812 6.785029 -1.030369 +v 1.572856 6.922204 -1.023990 +v 1.817018 7.216823 -1.422995 +v 1.940523 7.114418 -1.445995 +v 1.841270 7.012013 -1.523010 +v 1.717765 7.114418 -1.500010 +v 1.921842 7.462319 -1.855289 +v 2.018889 7.398288 -1.890760 +v 1.948868 7.334256 -1.966743 +v 1.851821 7.398288 -1.931272 +v 2.002957 7.850785 -2.189806 +v 2.069206 7.815069 -2.219852 +v 2.024077 7.779354 -2.276905 +v 1.957828 7.815069 -2.246859 +v 2.086420 8.248537 -2.534007 +v 2.119668 8.231360 -2.549541 +v 2.097228 8.214184 -2.578578 +v 2.063979 8.231360 -2.563044 +v 2.163949 8.667300 -2.853736 +v 2.163949 8.667300 -2.853736 +v 2.163949 8.667300 -2.853736 +v 2.163949 8.667300 -2.853736 +v 2.396074 6.937310 -1.315769 +v 2.510641 6.822705 -1.312716 +v 2.396104 6.708099 -1.316753 +v 2.281538 6.822705 -1.319806 +v 2.412519 6.873796 -1.847148 +v 2.498444 6.787842 -1.844858 +v 2.412542 6.701888 -1.847886 +v 2.326617 6.787842 -1.850176 +v 2.428714 6.884007 -2.370443 +v 2.486237 6.827268 -2.376681 +v 2.429209 6.770528 -2.386465 +v 2.371686 6.827268 -2.380227 +v 2.445713 6.962549 -2.887565 +v 2.473110 6.938450 -2.905186 +v 2.444462 6.910498 -2.911498 +v 2.417066 6.934597 -2.893877 +v 2.220000 7.243277 -3.272301 +v 2.220000 7.243277 -3.272301 +v 2.220000 7.243277 -3.272301 +v 2.220000 7.243277 -3.272301 +v 3.025894 7.531799 -1.727294 +v 3.098179 7.495318 -1.730677 +v 3.076536 7.458837 -1.799727 +v 3.004252 7.495318 -1.796345 +v 3.245503 7.905062 -2.041403 +v 3.281645 7.886821 -2.043094 +v 3.270824 7.868581 -2.077620 +v 3.234682 7.886821 -2.075929 +v 3.439239 8.315601 -2.318506 +v 3.439239 8.315601 -2.318506 +v 3.439239 8.315601 -2.318506 +v 3.439239 8.315601 -2.318506 +v 2.448165 6.964871 -2.902332 +v 2.464372 6.936523 -2.878341 +v 2.442011 6.908175 -2.896731 +v 2.425804 6.936523 -2.920722 +v 2.834857 6.859176 -3.254236 +v 2.834857 6.859176 -3.254236 +v 2.834857 6.859176 -3.254236 +v 2.834857 6.859176 -3.254236 +v 1.382230 8.028999 -0.371169 +v 1.477291 8.004252 -0.299563 +v 1.544719 7.979505 -0.397631 +v 1.449658 8.004252 -0.469237 +v 1.559824 8.324148 -0.400091 +v 1.639042 8.303526 -0.340419 +v 1.695232 8.282904 -0.422143 +v 1.616015 8.303526 -0.481814 +v 1.597120 8.641093 -0.406165 +v 1.662768 8.644842 -0.358798 +v 1.709994 8.648591 -0.424547 +v 1.644346 8.644842 -0.471914 +v 1.541438 8.977038 -0.397096 +v 1.590677 8.979794 -0.361572 +v 1.626100 8.982549 -0.410884 +v 1.576861 8.979794 -0.446409 +v 1.582447 9.322554 -0.403775 +v 1.615292 9.321039 -0.380095 +v 1.638926 9.319525 -0.412973 +v 1.606081 9.321039 -0.436653 +v 1.605646 9.660290 -0.407553 +v 1.621781 9.663257 -0.395666 +v 1.633312 9.666224 -0.412058 +v 1.617176 9.663257 -0.423945 +v 1.474584 9.972515 -0.386211 +v 1.474584 9.972515 -0.386211 +v 1.474584 9.972515 -0.386211 +v 1.474584 9.972515 -0.386211 +v 1.774368 8.440707 -1.278875 +v 1.793990 8.398030 -1.317447 +v 1.765925 8.355353 -1.284505 +v 1.746302 8.398030 -1.245934 +v 1.488498 8.409446 -1.469506 +v 1.501580 8.380995 -1.495220 +v 1.482869 8.352544 -1.473259 +v 1.469788 8.380995 -1.447545 +v 1.216060 8.491385 -1.651179 +v 1.220422 8.477722 -1.665489 +v 1.208888 8.464060 -1.655962 +v 1.204526 8.477722 -1.641652 +v 0.942550 8.586967 -1.833567 +v 0.942550 8.586967 -1.833567 +v 0.942550 8.586967 -1.833567 +v 0.942550 8.586967 -1.833567 +v 1.698394 8.993629 -1.611642 +v 1.714745 8.982831 -1.616790 +v 1.703532 8.972033 -1.629756 +v 1.687181 8.982831 -1.624608 +v 1.771379 9.207788 -1.868949 +v 1.771379 9.207788 -1.868949 +v 1.771379 9.207788 -1.868949 +v 1.771379 9.207788 -1.868949 +v -1.168225 3.794578 -1.433837 +v -1.290278 3.468807 -1.740820 +v -1.243181 3.143036 -1.413838 +v -1.121128 3.468807 -1.106855 +v -1.797948 3.844119 -1.265819 +v -1.902565 3.564887 -1.528948 +v -1.862196 3.285655 -1.248677 +v -1.757580 3.564887 -0.985549 +v -2.390054 3.846509 -1.107838 +v -2.519194 3.623229 -1.315917 +v -2.527513 3.399950 -1.071163 +v -2.398373 3.623229 -0.863084 +v -2.914153 4.114684 -0.968002 +v -3.052567 3.952044 -1.125100 +v -3.094324 3.789404 -0.919931 +v -2.955910 3.952044 -0.762834 +v -3.475673 4.387926 -0.818182 +v -3.590261 4.273058 -0.933130 +v -3.632357 4.158190 -0.776377 +v -3.517768 4.273058 -0.661430 +v -3.956363 4.755729 -0.689929 +v -4.054543 4.701711 -0.760747 +v -4.104394 4.647694 -0.650432 +v -4.006215 4.701711 -0.579614 +v -4.215690 5.316619 -0.620737 +v -4.272609 5.310055 -0.654057 +v -4.305364 5.303490 -0.596811 +v -4.248445 5.310055 -0.563491 +v -4.202446 5.960598 -0.624270 +v -4.202446 5.960598 -0.624270 +v -4.202446 5.960598 -0.624270 +v -4.202446 5.960598 -0.624270 +v -1.876244 4.245808 -3.114578 +v -1.796532 4.066024 -3.292381 +v -1.957679 3.886241 -3.182839 +v -2.037391 4.066024 -3.005037 +v -2.385691 4.249957 -3.541610 +v -2.325907 4.115119 -3.674962 +v -2.446767 3.980282 -3.592807 +v -2.506551 4.115119 -3.459455 +v -2.808492 4.498631 -3.896014 +v -2.795532 4.428032 -4.007460 +v -2.903002 4.357434 -3.975235 +v -2.915962 4.428032 -3.863789 +v -3.120749 4.974898 -4.156797 +v -3.120754 4.951265 -4.218721 +v -3.184263 4.933549 -4.211954 +v -3.184258 4.957182 -4.150031 +v -3.222525 5.575612 -4.373572 +v -3.222525 5.575612 -4.373572 +v -3.222525 5.575612 -4.373572 +v -3.222525 5.575612 -4.373572 +v -2.475121 5.002790 -3.779060 +v -2.538375 4.958104 -3.886645 +v -2.636963 4.913417 -3.810121 +v -2.573710 4.958104 -3.702536 +v -2.905573 5.499219 -3.861674 +v -2.937200 5.476876 -3.915467 +v -2.986494 5.454533 -3.877205 +v -2.954867 5.476876 -3.823412 +v -3.160321 6.092677 -3.910567 +v -3.160321 6.092677 -3.910567 +v -3.160321 6.092677 -3.910567 +v -3.160321 6.092677 -3.910567 +v -3.147961 4.989501 -4.153857 +v -3.106150 4.954224 -4.191279 +v -3.157050 4.918946 -4.214894 +v -3.198862 4.954224 -4.177473 +v -3.224936 5.384332 -4.670773 +v -3.224936 5.384332 -4.670773 +v -3.224936 5.384332 -4.670773 +v -3.224936 5.384332 -4.670773 +v -1.921655 5.633543 -0.212453 +v -2.123318 5.439054 -0.059728 +v -1.880928 5.244566 0.012659 +v -1.679264 5.439054 -0.140066 +v -1.825695 5.857920 0.317947 +v -1.993748 5.695846 0.445218 +v -1.791756 5.533772 0.505541 +v -1.623703 5.695846 0.378270 +v -1.741857 6.136453 0.781348 +v -1.871802 6.025455 0.908023 +v -1.705711 5.914456 0.981139 +v -1.575766 6.025455 0.854464 +v -1.674264 6.535723 1.154959 +v -1.768786 6.471326 1.266194 +v -1.641281 6.406930 1.337261 +v -1.546759 6.471326 1.226025 +v -1.619065 6.997978 1.460058 +v -1.680371 6.974212 1.543664 +v -1.593658 6.950446 1.600491 +v -1.532353 6.974212 1.516885 +v -1.600504 7.552279 1.562649 +v -1.630828 7.549822 1.606270 +v -1.587143 7.547366 1.636500 +v -1.556819 7.549822 1.592880 +v -1.592894 8.129701 1.604714 +v -1.592894 8.129701 1.604714 +v -1.592894 8.129701 1.604714 +v -1.592894 8.129701 1.604714 +v -3.237231 6.593627 -0.242536 +v -3.121005 6.513036 -0.316369 +v -3.230185 6.432445 -0.400271 +v -3.346411 6.513036 -0.326438 +v -3.213631 6.856160 -0.770855 +v -3.136147 6.802432 -0.820077 +v -3.208934 6.748704 -0.876011 +v -3.286418 6.802432 -0.826789 +v -3.199505 7.310511 -1.087107 +v -3.160341 7.298886 -1.121156 +v -3.196313 7.287261 -1.158562 +v -3.235476 7.298886 -1.124512 +v -3.195700 7.876673 -1.172270 +v -3.195700 7.876673 -1.172270 +v -3.195700 7.876673 -1.172270 +v -3.195700 7.876673 -1.172270 +v -3.639195 7.595006 -0.168512 +v -3.684244 7.568424 -0.178119 +v -3.678300 7.541842 -0.132442 +v -3.633251 7.568424 -0.122835 +v -3.960057 7.978616 0.127447 +v -3.960057 7.978616 0.127447 +v -3.960057 7.978616 0.127447 +v -3.960057 7.978616 0.127447 +v 0.580141 7.028418 -1.234203 +v 0.764090 6.879085 -1.308072 +v 0.598872 6.729751 -1.417602 +v 0.414924 6.879085 -1.343734 +v 0.625265 7.292235 -1.676012 +v 0.782935 7.164235 -1.739328 +v 0.641321 7.036234 -1.833211 +v 0.483650 7.164235 -1.769895 +v 0.671643 7.525213 -2.130098 +v 0.803520 7.421649 -2.187616 +v 0.685994 7.318084 -2.270606 +v 0.554116 7.421649 -2.213089 +v 0.713006 7.819535 -2.535080 +v 0.819555 7.744745 -2.591348 +v 0.726581 7.669954 -2.667994 +v 0.620032 7.744745 -2.611726 +v 0.751485 8.160961 -2.911833 +v 0.831843 8.109120 -2.958399 +v 0.762558 8.057280 -3.020249 +v 0.682201 8.109120 -2.973683 +v 0.787875 8.520566 -3.268128 +v 0.842026 8.493211 -3.304836 +v 0.796415 8.465856 -3.351734 +v 0.742264 8.493211 -3.315025 +v 0.811226 8.973371 -3.496754 +v 0.838559 8.964756 -3.517629 +v 0.816011 8.956141 -3.543598 +v 0.788678 8.964756 -3.522723 +v 0.828136 9.461348 -3.662321 +v 0.828136 9.461348 -3.662321 +v 0.828136 9.461348 -3.662321 +v 0.828136 9.461348 -3.662321 +v 1.531830 7.743646 -2.250914 +v 1.632867 7.644884 -2.238666 +v 1.541849 7.546122 -2.284210 +v 1.440813 7.644884 -2.296458 +v 1.681981 7.716473 -2.749892 +v 1.757758 7.642402 -2.740706 +v 1.689495 7.568330 -2.774863 +v 1.613717 7.642402 -2.784050 +v 1.819264 7.866516 -3.206111 +v 1.873455 7.821189 -3.212190 +v 1.831618 7.775862 -3.247164 +v 1.777427 7.821189 -3.241086 +v 1.949846 8.101546 -3.637728 +v 1.978631 8.085237 -3.650472 +v 1.957950 8.063464 -3.669320 +v 1.929165 8.079774 -3.656577 +v 1.849189 8.459961 -3.990544 +v 1.849189 8.459961 -3.990544 +v 1.849189 8.459961 -3.990544 +v 1.849189 8.459961 -3.990544 +v 2.061212 8.481051 -2.046879 +v 2.042529 8.449462 -1.986207 +v 2.105937 8.417872 -1.983129 +v 2.124621 8.449462 -2.043801 +v 2.285981 8.824026 -1.726501 +v 2.276639 8.808231 -1.696164 +v 2.308344 8.792437 -1.694625 +v 2.317685 8.808231 -1.724961 +v 2.454763 9.246087 -1.485923 +v 2.454763 9.246087 -1.485923 +v 2.454763 9.246087 -1.485923 +v 2.454763 9.246087 -1.485923 +v 1.954486 8.107457 -3.651166 +v 1.978222 8.082505 -3.659595 +v 1.953309 8.057553 -3.655883 +v 1.929574 8.082505 -3.647454 +v 1.829368 8.132607 -4.152524 +v 1.829368 8.132607 -4.152524 +v 1.829368 8.132607 -4.152524 +v 1.829368 8.132607 -4.152524 +v -0.524194 7.744465 -3.003163 +v -0.472067 7.673132 -3.062389 +v -0.548793 7.601799 -3.044003 +v -0.600919 7.673132 -2.984776 +v -0.701685 7.844488 -3.297831 +v -0.658246 7.785044 -3.347186 +v -0.722184 7.725600 -3.331864 +v -0.765622 7.785044 -3.282509 +v -0.874973 7.944592 -3.585521 +v -0.843893 7.900042 -3.631099 +v -0.898714 7.855492 -3.624935 +v -0.929794 7.900042 -3.579357 +v -1.023555 8.137906 -3.832193 +v -1.004273 8.109869 -3.873064 +v -1.049417 8.081832 -3.875129 +v -1.068698 8.109869 -3.834258 +v -1.150106 8.388762 -4.042292 +v -1.139316 8.374631 -4.072966 +v -1.171476 8.360499 -4.077769 +v -1.182266 8.374631 -4.047095 +v -1.236847 8.700876 -4.186297 +v -1.231948 8.695484 -4.202458 +v -1.248525 8.690092 -4.205684 +v -1.253423 8.695484 -4.189523 +v -1.319668 9.020874 -4.323794 +v -1.319668 9.020874 -4.323794 +v -1.319668 9.020874 -4.323794 +v -1.319668 9.020874 -4.323794 +v 0.122530 8.429044 -3.388614 +v 0.154087 8.395881 -3.415683 +v 0.113126 8.362718 -3.422805 +v 0.081570 8.395881 -3.395737 +v 0.034494 8.565729 -3.708693 +v 0.055532 8.543620 -3.726739 +v 0.028225 8.521511 -3.731487 +v 0.007187 8.543620 -3.713442 +v -0.047123 8.742347 -4.005433 +v -0.037161 8.732705 -4.016481 +v -0.051372 8.723063 -4.020881 +v -0.061333 8.732705 -4.009833 +v -0.113306 8.996885 -4.246061 +v -0.113306 8.996885 -4.246061 +v -0.113306 8.996885 -4.246061 +v -0.113306 8.996885 -4.246061 +v 0.320277 9.066226 -3.434238 +v 0.337082 9.063099 -3.429541 +v 0.341237 9.059972 -3.446488 +v 0.324432 9.063099 -3.451186 +v 0.407867 9.409742 -3.485430 +v 0.407867 9.409742 -3.485430 +v 0.407867 9.409742 -3.485430 +v 0.407867 9.409742 -3.485430 +v -0.438725 3.411787 2.379346 +v -0.566276 3.063119 2.049895 +v -0.367477 2.714451 2.341933 +v -0.239926 3.063119 2.671384 +v -1.081101 3.302770 2.716665 +v -1.190431 3.003911 2.434278 +v -1.020031 2.705053 2.684596 +v -0.910702 3.003911 2.966983 +v -1.709206 3.145024 3.046489 +v -1.809506 2.894995 2.815994 +v -1.676699 2.644967 3.029419 +v -1.576399 2.894995 3.259915 +v -2.321213 3.095876 3.367861 +v -2.435777 2.896765 3.201488 +v -2.363856 2.697655 3.390253 +v -2.249291 2.896765 3.556625 +v -2.941916 3.216024 3.693798 +v -3.043691 3.069967 3.577343 +v -3.005602 2.923909 3.727241 +v -2.903826 3.069967 3.843696 +v -3.567665 3.339118 4.022386 +v -3.650633 3.247625 3.952688 +v -3.640358 3.156133 4.060558 +v -3.557390 3.247625 4.130256 +v -4.110577 3.698305 4.307475 +v -4.163823 3.661280 4.278802 +v -4.170447 3.624255 4.338914 +v -4.117201 3.661280 4.367587 +v -4.553818 4.227307 4.540226 +v -4.553818 4.227307 4.540226 +v -4.553818 4.227307 4.540226 +v -4.553818 4.227307 4.540226 +v -2.268573 2.502650 3.244987 +v -2.510533 2.364435 3.192061 +v -2.384891 2.226219 2.978613 +v -2.142931 2.364435 3.031538 +v -2.082835 1.931581 3.670330 +v -2.264306 1.827919 3.630636 +v -2.170075 1.724258 3.470550 +v -1.988604 1.827919 3.510244 +v -1.901104 1.386686 4.086501 +v -2.013968 1.301175 4.078626 +v -1.943030 1.215663 3.990490 +v -1.830166 1.301175 3.998365 +v -1.632028 1.134249 4.687912 +v -1.689291 1.096134 4.670698 +v -1.650832 1.036677 4.674414 +v -1.593569 1.074792 4.691628 +v -2.189379 1.198111 5.155898 +v -2.189379 1.198111 5.155898 +v -2.189379 1.198111 5.155898 +v -2.189379 1.198111 5.155898 +v -3.528721 2.366931 2.252950 +v -3.495451 2.267692 2.157258 +v -3.500419 2.168453 2.258447 +v -3.533689 2.267692 2.354140 +v -4.206939 2.091548 2.121228 +v -4.190303 2.041929 2.073382 +v -4.192787 1.992309 2.123977 +v -4.209423 2.041929 2.171823 +v -4.919889 2.059740 1.982761 +v -4.919889 2.059740 1.982761 +v -4.919889 2.059740 1.982761 +v -4.919889 2.059740 1.982761 +v -1.649546 1.129161 4.704372 +v -1.688760 1.085463 4.664612 +v -1.633314 1.041765 4.657954 +v -1.594100 1.085463 4.697714 +v -1.852498 0.725680 5.284750 +v -1.852498 0.725680 5.284750 +v -1.852498 0.725680 5.284750 +v -1.852498 0.725680 5.284750 +v 1.437016 5.881810 0.945045 +v 1.231297 5.797047 1.173769 +v 1.474979 5.712285 1.361528 +v 1.680697 5.797047 1.132805 +v 1.468135 6.346535 1.286442 +v 1.296703 6.275900 1.477045 +v 1.499771 6.205265 1.633511 +v 1.671202 6.275900 1.442909 +v 1.480619 6.853852 1.423408 +v 1.344355 6.834030 1.585556 +v 1.507690 6.814208 1.720395 +v 1.643955 6.834030 1.558247 +v 1.487325 7.394596 1.496980 +v 1.385194 7.402137 1.619320 +v 1.507761 7.409678 1.721177 +v 1.609893 7.402137 1.598838 +v 1.480482 7.962621 1.421907 +v 1.412406 7.960189 1.503595 +v 1.494130 7.957757 1.571628 +v 1.562206 7.960189 1.489940 +v 1.497388 8.511973 1.607375 +v 1.463346 8.509785 1.648175 +v 1.504204 8.507596 1.682148 +v 1.538246 8.509785 1.641348 +v 1.493195 9.072927 1.561370 +v 1.493195 9.072927 1.561370 +v 1.493195 9.072927 1.561370 +v 1.493195 9.072927 1.561370 +v 2.647307 7.007507 1.210589 +v 2.774710 6.923299 1.256765 +v 2.768110 6.839091 1.121413 +v 2.640707 6.923299 1.075237 +v 3.069217 7.252843 0.899137 +v 3.154153 7.196704 0.929921 +v 3.149752 7.140566 0.839686 +v 3.064817 7.196704 0.808902 +v 3.347239 7.679296 0.693902 +v 3.396259 7.661576 0.704458 +v 3.400610 7.643856 0.654504 +v 3.351591 7.661576 0.643948 +v 3.537795 8.193227 0.553235 +v 3.537795 8.193227 0.553235 +v 3.537795 8.193227 0.553235 +v 3.537795 8.193227 0.553235 +v 2.844253 7.966058 0.837740 +v 2.867753 7.965289 0.790038 +v 2.820046 7.964520 0.766548 +v 2.796546 7.965289 0.814250 +v 2.828403 8.534503 0.791126 +v 2.828403 8.534503 0.791126 +v 2.828403 8.534503 0.791126 +v 2.828403 8.534503 0.791126 +v 0.425934 7.030401 0.202444 +v 0.607008 6.892642 0.103303 +v 0.437605 6.754883 -0.014677 +v 0.256532 6.892642 0.084464 +v 0.443805 7.320415 -0.130013 +v 0.599011 7.202335 -0.214991 +v 0.453809 7.084256 -0.316117 +v 0.298603 7.202335 -0.231139 +v 0.464053 7.525328 -0.506691 +v 0.594105 7.439068 -0.590783 +v 0.473817 7.352808 -0.688330 +v 0.343765 7.439068 -0.604239 +v 0.475585 7.864366 -0.721223 +v 0.580695 7.826053 -0.808379 +v 0.485534 7.787739 -0.906302 +v 0.380423 7.826053 -0.819145 +v 0.482965 8.256948 -0.858522 +v 0.562099 8.252988 -0.929483 +v 0.491028 8.249028 -1.008518 +v 0.411895 8.252988 -0.937557 +v 0.480314 8.691339 -0.809194 +v 0.533072 8.690166 -0.856557 +v 0.485695 8.688993 -0.909302 +v 0.432936 8.690166 -0.861939 +v 0.486744 9.123565 -0.928824 +v 0.513124 9.123386 -0.952511 +v 0.489436 9.123208 -0.978890 +v 0.463056 9.123386 -0.955203 +v 0.483335 9.557910 -0.865405 +v 0.483335 9.557910 -0.865405 +v 0.483335 9.557910 -0.865405 +v 0.483335 9.557910 -0.865405 +v 0.558096 7.494945 -1.089790 +v 0.643805 7.398178 -1.148121 +v 0.540498 7.301411 -1.139387 +v 0.454789 7.398178 -1.081055 +v 0.410038 7.550732 -1.507068 +v 0.474320 7.478157 -1.550817 +v 0.396840 7.405581 -1.544266 +v 0.332558 7.478157 -1.500517 +v 0.271237 7.675481 -1.898259 +v 0.311376 7.630078 -1.935076 +v 0.257008 7.584675 -1.938359 +v 0.216869 7.630078 -1.901542 +v 0.141083 7.870992 -2.262905 +v 0.160397 7.850526 -2.284473 +v 0.130781 7.835022 -2.296283 +v 0.111466 7.855487 -2.274715 +v 0.201671 8.214132 -2.528439 +v 0.201671 8.214132 -2.528439 +v 0.201671 8.214132 -2.528439 +v 0.201671 8.214132 -2.528439 +v 1.091745 8.038615 -1.418913 +v 1.151044 7.999913 -1.415183 +v 1.129262 7.961211 -1.470462 +v 1.069964 7.999913 -1.474193 +v 1.335419 8.214531 -1.753723 +v 1.365068 8.195180 -1.751857 +v 1.354177 8.175829 -1.779497 +v 1.324528 8.195180 -1.781362 +v 1.502458 8.548554 -1.983236 +v 1.502458 8.548554 -1.983236 +v 1.502458 8.548554 -1.983236 +v 1.502458 8.548554 -1.983236 +v 0.132037 7.877615 -2.276805 +v 0.150529 7.853007 -2.259212 +v 0.139826 7.828399 -2.282383 +v 0.121335 7.853007 -2.299976 +v 0.489827 7.937741 -2.533042 +v 0.489827 7.937741 -2.533042 +v 0.489827 7.937741 -2.533042 +v 0.489827 7.937741 -2.533042 +v -1.327747 8.012629 0.904154 +v -1.267407 7.945326 0.848094 +v -1.349429 7.878024 0.840609 +v -1.409769 7.945326 0.896670 +v -1.422862 8.133208 0.625400 +v -1.372579 8.077123 0.578683 +v -1.440931 8.021037 0.572446 +v -1.491214 8.077123 0.619163 +v -1.512139 8.268379 0.363755 +v -1.474570 8.228665 0.318595 +v -1.531908 8.188951 0.305819 +v -1.569478 8.228665 0.350979 +v -1.582908 8.483783 0.156353 +v -1.556713 8.459954 0.116675 +v -1.601698 8.436126 0.101286 +v -1.627893 8.459954 0.140963 +v -1.644233 8.728647 -0.023372 +v -1.627962 8.718874 -0.053317 +v -1.659144 8.709101 -0.067071 +v -1.675416 8.718874 -0.037125 +v -1.666347 9.031702 -0.088180 +v -1.658527 9.031128 -0.104079 +v -1.674434 9.030554 -0.111882 +v -1.682254 9.031128 -0.095983 +v -1.660993 9.347371 -0.072491 +v -1.660993 9.347371 -0.072491 +v -1.660993 9.347371 -0.072491 +v -1.660993 9.347371 -0.072491 +v -1.410943 8.299745 1.717854 +v -1.442892 8.265351 1.692861 +v -1.437297 8.230958 1.733036 +v -1.405347 8.265351 1.758029 +v -1.680658 8.372512 1.873241 +v -1.701958 8.349583 1.856579 +v -1.698227 8.326653 1.883363 +v -1.676928 8.349583 1.900025 +v -1.915602 8.529548 2.008595 +v -1.928234 8.519399 2.001407 +v -1.928351 8.509250 2.015941 +v -1.915719 8.519399 2.023129 +v -2.134155 8.721622 2.134507 +v -2.134155 8.721622 2.134507 +v -2.134155 8.721622 2.134507 +v -2.134155 8.721622 2.134507 +v -1.215106 8.757973 2.038816 +v -1.225812 8.749043 2.049765 +v -1.211874 8.740112 2.056109 +v -1.201168 8.749043 2.045161 +v -1.171938 8.971903 2.269866 +v -1.171938 8.971903 2.269866 +v -1.171938 8.971903 2.269866 +v -1.171938 8.971903 2.269866 +v 1.534648 5.169812 2.245611 +v 1.314924 4.944189 2.194286 +v 1.535486 4.718566 2.241882 +v 1.755210 4.944189 2.293208 +v 1.385326 5.207073 2.910216 +v 1.196991 5.013682 2.866223 +v 1.386044 4.820291 2.907020 +v 1.574379 5.013682 2.951013 +v 1.240748 5.092696 3.553707 +v 1.079338 4.932655 3.536916 +v 1.232418 4.772614 3.590783 +v 1.393828 4.932655 3.607574 +v 1.106853 5.289318 4.149652 +v 0.969988 5.170684 4.170652 +v 1.084716 5.052050 4.248179 +v 1.221581 5.170684 4.227179 +v 0.974231 5.542482 4.739928 +v 0.866221 5.468549 4.779541 +v 0.946906 5.394616 4.861549 +v 1.054915 5.468549 4.821937 +v 0.885761 6.056892 5.133695 +v 0.810446 6.026111 5.174828 +v 0.860927 5.995329 5.244224 +v 0.936242 6.026111 5.203091 +v 0.824894 6.674127 5.404601 +v 0.786790 6.663298 5.427156 +v 0.811584 6.652469 5.463843 +v 0.849688 6.663298 5.441288 +v 0.772508 7.315738 5.637762 +v 0.772508 7.315738 5.637762 +v 0.772508 7.315738 5.637762 +v 0.772508 7.315738 5.637762 +v 1.497229 5.436160 4.161867 +v 1.357597 5.322253 4.134022 +v 1.425570 5.208346 4.259130 +v 1.565202 5.322253 4.286974 +v 1.125619 5.716535 4.666256 +v 1.020896 5.631104 4.645373 +v 1.071876 5.545674 4.739204 +v 1.176599 5.631104 4.760087 +v 0.765162 6.017244 5.155509 +v 0.691743 5.963954 5.146478 +v 0.722126 5.910665 5.213923 +v 0.795545 5.963954 5.222954 +v 0.444727 6.420751 5.592375 +v 0.409487 6.392430 5.586542 +v 0.414804 6.377044 5.629120 +v 0.450043 6.405365 5.634954 +v -0.061087 6.876646 5.615006 +v -0.061087 6.876646 5.615006 +v -0.061087 6.876646 5.615006 +v -0.061087 6.876646 5.615006 +v 1.954182 6.483880 4.707542 +v 2.021975 6.459475 4.763402 +v 2.072434 6.435069 4.691499 +v 2.004642 6.459475 4.635640 +v 2.261668 7.096606 4.665825 +v 2.295564 7.084403 4.693755 +v 2.320794 7.072200 4.657804 +v 2.286898 7.084403 4.629874 +v 2.526950 7.726752 4.629835 +v 2.526950 7.726752 4.629835 +v 2.526950 7.726752 4.629835 +v 2.526950 7.726752 4.629835 +v 0.438267 6.429632 5.606050 +v 0.414175 6.398897 5.582536 +v 0.421264 6.368163 5.615446 +v 0.445356 6.398897 5.638959 +v -0.141888 6.605322 5.926658 +v -0.141888 6.605322 5.926658 +v -0.141888 6.605322 5.926658 +v -0.141888 6.605322 5.926658 +v 3.219571 6.469072 -0.078109 +v 3.230975 6.342716 0.052853 +v 3.270551 6.216360 -0.072506 +v 3.259147 6.342716 -0.203468 +v 3.733453 6.487620 -0.021628 +v 3.742956 6.382323 0.087507 +v 3.775936 6.277026 -0.016959 +v 3.766433 6.382323 -0.126094 +v 4.206037 6.624870 0.030313 +v 4.229965 6.545720 0.119416 +v 4.272674 6.466570 0.037637 +v 4.248746 6.545720 -0.051465 +v 4.662807 6.838914 0.080517 +v 4.686213 6.782190 0.147944 +v 4.723703 6.725467 0.087210 +v 4.700298 6.782190 0.019783 +v 5.117904 7.071841 0.130537 +v 5.134051 7.034326 0.175548 +v 5.159589 6.996810 0.135118 +v 5.143442 7.034326 0.090107 +v 5.574172 7.302090 0.180685 +v 5.583283 7.283955 0.203305 +v 5.597089 7.265820 0.183204 +v 5.587978 7.283955 0.160584 +v 5.999984 7.585069 0.227486 +v 5.999984 7.585069 0.227486 +v 5.999984 7.585069 0.227486 +v 5.999984 7.585069 0.227486 +v 4.334825 5.948848 0.922732 +v 4.295790 5.890675 0.981075 +v 4.280187 5.832502 0.912634 +v 4.319222 5.890675 0.854290 +v 4.770383 5.684607 1.003235 +v 4.744359 5.645825 1.042130 +v 4.733958 5.607043 0.996502 +v 4.759982 5.645825 0.957607 +v 5.222106 5.469275 1.086725 +v 5.215028 5.448030 1.107269 +v 5.215760 5.426785 1.085552 +v 5.222838 5.448030 1.065007 +v 5.722395 5.495978 1.179191 +v 5.722395 5.495978 1.179191 +v 5.722395 5.495978 1.179191 +v 5.722395 5.495978 1.179191 +v 4.622640 5.958681 1.889000 +v 4.609538 5.937193 1.906033 +v 4.622910 5.915705 1.889211 +v 4.636013 5.937193 1.872178 +v 5.027837 5.941289 2.205871 +v 5.027837 5.941289 2.205871 +v 5.027837 5.941289 2.205871 +v 5.027837 5.941289 2.205871 +v 2.150409 7.991917 0.021371 +v 2.223603 7.920340 -0.007481 +v 2.146829 7.848762 -0.024673 +v 2.073635 7.920340 0.004179 +v 2.127791 8.141006 -0.269547 +v 2.190529 8.079654 -0.294277 +v 2.124723 8.018301 -0.309014 +v 2.061985 8.079654 -0.284284 +v 2.101800 8.171410 -0.603858 +v 2.154455 8.118974 -0.619669 +v 2.099989 8.066538 -0.627152 +v 2.047335 8.118974 -0.611341 +v 2.077694 8.263039 -0.913933 +v 2.119486 8.222279 -0.930848 +v 2.075581 8.181519 -0.941101 +v 2.033789 8.222279 -0.924186 +v 2.053450 8.357422 -1.225771 +v 2.084577 8.327933 -1.241244 +v 2.051432 8.298445 -1.251721 +v 2.020305 8.327933 -1.236247 +v 2.030896 8.506101 -1.515871 +v 2.051507 8.487343 -1.527988 +v 2.029271 8.468585 -1.536774 +v 2.008659 8.487343 -1.524657 +v 2.008281 8.658614 -1.806756 +v 2.018555 8.649472 -1.813217 +v 2.007406 8.640330 -1.818012 +v 1.997131 8.649472 -1.811551 +v 1.986645 8.833367 -2.085047 +v 1.986645 8.833367 -2.085047 +v 1.986645 8.833367 -2.085047 +v 1.986645 8.833367 -2.085047 +v 2.946494 8.420134 -0.331333 +v 2.954943 8.379452 -0.286974 +v 2.974000 8.338770 -0.327913 +v 2.965551 8.379452 -0.372272 +v 3.272807 8.462414 -0.290752 +v 3.279144 8.431903 -0.257482 +v 3.293437 8.401392 -0.288186 +v 3.287100 8.431903 -0.321455 +v 3.558159 8.606430 -0.255264 +v 3.567969 8.588993 -0.232389 +v 3.583083 8.571556 -0.252164 +v 3.573273 8.588993 -0.275038 +v 3.801141 8.820479 -0.225371 +v 3.806758 8.812475 -0.213741 +v 3.818040 8.807494 -0.222618 +v 3.812422 8.815498 -0.234248 +v 3.925897 9.087750 -0.082086 +v 3.925897 9.087750 -0.082086 +v 3.925897 9.087750 -0.082086 +v 3.925897 9.087750 -0.082086 +v 3.213307 8.972035 -0.277432 +v 3.202684 8.970988 -0.248978 +v 3.231150 8.969941 -0.238389 +v 3.241773 8.970988 -0.266843 +v 3.253091 9.289930 -0.190380 +v 3.247780 9.289407 -0.176154 +v 3.262013 9.288883 -0.170859 +v 3.267324 9.289407 -0.185086 +v 3.235279 9.614585 -0.229355 +v 3.235279 9.614585 -0.229355 +v 3.235279 9.614585 -0.229355 +v 3.235279 9.614585 -0.229355 +v 3.806164 8.824103 -0.222829 +v 3.813049 8.813987 -0.213822 +v 3.813017 8.803870 -0.225159 +v 3.806132 8.813987 -0.234167 +v 4.103378 8.924999 -0.323879 +v 4.103378 8.924999 -0.323879 +v 4.103378 8.924999 -0.323879 +v 4.103378 8.924999 -0.323879 +v -0.238557 7.307096 0.603106 +v -0.416969 7.169384 0.637062 +v -0.286606 7.031672 0.763510 +v -0.108194 7.169384 0.729554 +v -0.384065 7.588102 1.088866 +v -0.532741 7.473342 1.117162 +v -0.424105 7.358582 1.222536 +v -0.275429 7.473342 1.194239 +v -0.529538 7.860610 1.574510 +v -0.649573 7.771229 1.600798 +v -0.563757 7.681849 1.688748 +v -0.443723 7.771229 1.662460 +v -0.666496 8.180132 2.031727 +v -0.757517 8.115544 2.054764 +v -0.694150 8.050957 2.124048 +v -0.603129 8.115544 2.101010 +v -0.802147 8.501809 2.484582 +v -0.864569 8.464027 2.505751 +v -0.824065 8.426246 2.557751 +v -0.761644 8.464027 2.536582 +v -0.905196 8.945080 2.828598 +v -0.937399 8.930491 2.842496 +v -0.918140 8.915903 2.871809 +v -0.885937 8.930491 2.857911 +v -0.993329 9.435052 3.122818 +v -0.993329 9.435052 3.122818 +v -0.993329 9.435052 3.122818 +v -0.993329 9.435052 3.122818 +v -0.918464 8.386487 1.632757 +v -0.989647 8.350079 1.551550 +v -1.062236 8.313670 1.631503 +v -0.991052 8.350079 1.712709 +v -1.250655 8.864816 1.629860 +v -1.298110 8.840544 1.575723 +v -1.346503 8.816272 1.629025 +v -1.299047 8.840544 1.683162 +v -1.485691 9.386496 1.627811 +v -1.511321 9.379251 1.600726 +v -1.537420 9.372007 1.627360 +v -1.511790 9.379251 1.654446 +v -1.609342 9.950221 1.626733 +v -1.609342 9.950221 1.626733 +v -1.609342 9.950221 1.626733 +v -1.609342 9.950221 1.626733 +v -1.024298 9.480569 1.892563 +v -1.059047 9.467821 1.884020 +v -1.063111 9.455073 1.919572 +v -1.028361 9.467821 1.928115 +v -1.269368 9.977707 2.063106 +v -1.269368 9.977707 2.063106 +v -1.269368 9.977707 2.063106 +v -1.269368 9.977707 2.063106 +v 1.859337 7.563104 1.402194 +v 1.913769 7.445670 1.523322 +v 1.946700 7.328237 1.394673 +v 1.892267 7.445670 1.273545 +v 2.255284 7.779741 1.368110 +v 2.301940 7.679084 1.471934 +v 2.330166 7.578427 1.361664 +v 2.283510 7.679084 1.257839 +v 2.716249 7.845561 1.328429 +v 2.747164 7.759115 1.415635 +v 2.762721 7.672670 1.324428 +v 2.731806 7.759115 1.237222 +v 3.128402 7.976531 1.292950 +v 3.171871 7.915480 1.361102 +v 3.203053 7.854429 1.286523 +v 3.159584 7.915480 1.218372 +v 3.456095 8.259929 1.264741 +v 3.502274 8.226090 1.314686 +v 3.539238 8.192252 1.257584 +v 3.493059 8.226090 1.207639 +v 3.697776 8.626657 1.243937 +v 3.734982 8.616221 1.276681 +v 3.766044 8.605786 1.238060 +v 3.728838 8.616221 1.205316 +v 3.736602 9.067736 1.240594 +v 3.755647 9.071175 1.256928 +v 3.771620 9.074614 1.237580 +v 3.752575 9.071175 1.221246 +v 3.562689 9.484170 1.255565 +v 3.562689 9.484170 1.255565 +v 3.562689 9.484170 1.255565 +v 3.562689 9.484170 1.255565 +v 0.677967 7.871062 1.843559 +v 0.602643 7.803361 1.841461 +v 0.662207 7.735661 1.887616 +v 0.737530 7.803361 1.889714 +v 0.527193 7.965059 2.265038 +v 0.470701 7.914284 2.263465 +v 0.515373 7.863508 2.298081 +v 0.571866 7.914284 2.299654 +v 0.387451 8.130353 2.655679 +v 0.347439 8.099792 2.661199 +v 0.374871 8.069232 2.690845 +v 0.414883 8.099792 2.685325 +v 0.265468 8.395876 2.993443 +v 0.244225 8.389061 3.005428 +v 0.257791 8.374807 3.021370 +v 0.279034 8.381622 3.009385 +v 0.462134 8.752385 3.187837 +v 0.462134 8.752385 3.187837 +v 0.462134 8.752385 3.187837 +v 0.462134 8.752385 3.187837 +v 0.253902 8.543679 1.568224 +v 0.227861 8.525394 1.528818 +v 0.192802 8.507110 1.560470 +v 0.218843 8.525394 1.599877 +v -0.004323 8.918598 1.535455 +v -0.017344 8.909456 1.515752 +v -0.034874 8.900314 1.531578 +v -0.021853 8.909456 1.551281 +v -0.237814 9.308322 1.505825 +v -0.237814 9.308322 1.505825 +v -0.237814 9.308322 1.505825 +v -0.237814 9.308322 1.505825 +v 0.264697 8.402979 3.006984 +v 0.259189 8.385342 2.989666 +v 0.258562 8.367704 3.007828 +v 0.264070 8.385342 3.025146 +v -0.182822 8.464095 3.068557 +v -0.182822 8.464095 3.068557 +v -0.182822 8.464095 3.068557 +v -0.182822 8.464095 3.068557 +v 2.864426 7.683589 1.463368 +v 2.810283 7.630359 1.466049 +v 2.861778 7.577128 1.449110 +v 2.915920 7.630359 1.446429 +v 2.921777 7.609552 1.772164 +v 2.876658 7.565194 1.774397 +v 2.919570 7.520835 1.760281 +v 2.964689 7.565194 1.758048 +v 2.979353 7.579463 2.082166 +v 2.944119 7.543648 2.088588 +v 2.979309 7.507834 2.081931 +v 3.014543 7.543648 2.075509 +v 3.036716 7.588958 2.391022 +v 3.011604 7.563054 2.402913 +v 3.039311 7.537149 2.404994 +v 3.064422 7.563054 2.393103 +v 3.088670 7.725881 2.670754 +v 3.072684 7.710330 2.682752 +v 3.091912 7.694778 2.688211 +v 3.107897 7.710330 2.676213 +v 3.139023 7.889030 2.941871 +v 3.131225 7.881968 2.948918 +v 3.141034 7.874906 2.952695 +v 3.148832 7.881968 2.945648 +v 3.182565 8.104200 3.176312 +v 3.182565 8.104200 3.176312 +v 3.182565 8.104200 3.176312 +v 3.182565 8.104200 3.176312 +v 2.091865 7.391906 1.967708 +v 2.074286 7.365153 1.988159 +v 2.087965 7.338399 1.964918 +v 2.105544 7.365153 1.944467 +v 2.344481 7.301280 2.148437 +v 2.332762 7.283445 2.162071 +v 2.341881 7.265609 2.146577 +v 2.353601 7.283445 2.132943 +v 2.603046 7.317315 2.333421 +v 2.599017 7.308480 2.341548 +v 2.605408 7.299645 2.335112 +v 2.609437 7.308480 2.326984 +v 2.858050 7.387529 2.515859 +v 2.858050 7.387529 2.515859 +v 2.858050 7.387529 2.515859 +v 2.858050 7.387529 2.515859 +v 1.484517 7.500579 2.102874 +v 1.477071 7.491725 2.108022 +v 1.485695 7.482872 2.105269 +v 1.493141 7.491725 2.100121 +v 1.625574 7.539714 2.389758 +v 1.625574 7.539714 2.389758 +v 1.625574 7.539714 2.389758 +v 1.625574 7.539714 2.389758 +v -0.536332 6.641325 -0.725530 +v -0.361305 6.464845 -0.820019 +v -0.557359 6.288365 -0.853563 +v -0.732386 6.464845 -0.759075 +v -0.619729 6.849983 -1.233323 +v -0.469706 6.698714 -1.314313 +v -0.637752 6.547446 -1.343065 +v -0.787775 6.698714 -1.262075 +v -0.706528 6.969654 -1.761830 +v -0.583157 6.847816 -1.839355 +v -0.724843 6.725977 -1.873349 +v -0.848214 6.847816 -1.795823 +v -0.780107 7.248173 -2.209843 +v -0.684272 7.161039 -2.289287 +v -0.800482 7.073905 -2.333906 +v -0.896318 7.161039 -2.254462 +v -0.852424 7.553954 -2.650172 +v -0.782478 7.499134 -2.721512 +v -0.871567 7.444314 -2.766734 +v -0.941513 7.499134 -2.695394 +v -0.903589 7.990397 -2.961710 +v -0.858291 7.965486 -3.017384 +v -0.919016 7.940575 -3.055645 +v -0.964314 7.965486 -2.999971 +v -0.941250 8.491078 -3.191021 +v -0.918797 8.481274 -3.220051 +v -0.949355 8.471469 -3.240375 +v -0.971808 8.481274 -3.211345 +v -0.977179 9.002198 -3.409791 +v -0.977179 9.002198 -3.409791 +v -0.977179 9.002198 -3.409791 +v -0.977179 9.002198 -3.409791 +v -1.556515 6.538976 -2.119774 +v -1.551018 6.431727 -2.227271 +v -1.543578 6.324479 -2.119890 +v -1.549075 6.431727 -2.012393 +v -2.085602 6.343698 -2.114989 +v -2.081479 6.263261 -2.195612 +v -2.075899 6.182825 -2.115077 +v -2.080022 6.263261 -2.034453 +v -2.615505 6.418998 -2.110197 +v -2.628341 6.366715 -2.163805 +v -2.640204 6.314433 -2.109973 +v -2.627369 6.366715 -2.056365 +v -3.154730 6.544433 -2.105561 +v -3.168355 6.520375 -2.131611 +v -3.172111 6.493604 -2.104923 +v -3.158486 6.517662 -2.078873 +v -3.642843 6.716395 -1.902148 +v -3.642843 6.716395 -1.902148 +v -3.642843 6.716395 -1.902148 +v -3.642843 6.716395 -1.902148 +v -2.208732 6.993960 -1.486175 +v -2.265796 6.957268 -1.520372 +v -2.281014 6.920577 -1.455610 +v -2.223949 6.957268 -1.421413 +v -2.624077 7.327752 -1.310540 +v -2.652609 7.309406 -1.327638 +v -2.660218 7.291060 -1.295257 +v -2.631686 7.309406 -1.278159 +v -2.939116 7.763378 -1.177320 +v -2.939116 7.763378 -1.177320 +v -2.939116 7.763378 -1.177320 +v -2.939116 7.763378 -1.177320 +v -3.163399 6.545879 -2.105281 +v -3.186952 6.519019 -2.118196 +v -3.163442 6.492158 -2.105203 +v -3.139890 6.519019 -2.092288 +v -3.431953 6.519944 -1.617451 +v -3.431953 6.519944 -1.617451 +v -3.431953 6.519944 -1.617451 +v -3.431953 6.519944 -1.617451 +v -0.276667 8.391029 -0.618431 +v -0.321209 8.352678 -0.758550 +v -0.457973 8.314327 -0.704578 +v -0.413430 8.352678 -0.564459 +v -0.504112 8.838584 -0.726501 +v -0.541231 8.806624 -0.843266 +v -0.655201 8.774665 -0.798289 +v -0.618082 8.806624 -0.681523 +v -0.631499 9.316195 -0.787027 +v -0.664111 9.301667 -0.881826 +v -0.758204 9.287139 -0.847230 +v -0.725592 9.301667 -0.752431 +v -0.718264 9.808708 -0.828253 +v -0.743695 9.806639 -0.899814 +v -0.815238 9.804569 -0.874329 +v -0.789806 9.806639 -0.802768 +v -0.697920 10.313466 -0.818586 +v -0.714801 10.316239 -0.866259 +v -0.762423 10.319013 -0.849235 +v -0.745541 10.316239 -0.801562 +v -0.679102 10.824779 -0.809645 +v -0.687554 10.825981 -0.833487 +v -0.711377 10.827184 -0.824981 +v -0.702925 10.825981 -0.801139 +v -0.668154 11.336308 -0.804443 +v -0.668154 11.336308 -0.804443 +v -0.668154 11.336308 -0.804443 +v -0.668154 11.336308 -0.804443 +v -1.129636 9.536407 -0.123929 +v -1.184198 9.512265 -0.170963 +v -1.224807 9.488124 -0.111464 +v -1.170245 9.512265 -0.064430 +v -1.479326 9.913040 -0.078130 +v -1.515701 9.896946 -0.109486 +v -1.542774 9.880852 -0.069820 +v -1.506399 9.896946 -0.038464 +v -1.600557 10.397405 -0.062253 +v -1.620620 10.396580 -0.077685 +v -1.636031 10.395755 -0.057607 +v -1.615969 10.396580 -0.042174 +v -1.557074 10.904044 -0.067947 +v -1.557074 10.904044 -0.067947 +v -1.557074 10.904044 -0.067947 +v -1.557074 10.904044 -0.067947 +v -1.339763 10.521996 -0.074502 +v -1.354045 10.517038 -0.094818 +v -1.373777 10.512080 -0.079737 +v -1.359494 10.517038 -0.059421 +v -1.496660 11.008261 -0.098652 +v -1.496660 11.008261 -0.098652 +v -1.496660 11.008261 -0.098652 +v -1.496660 11.008261 -0.098652 +v 1.028403 8.520985 -0.392375 +v 1.003940 8.485620 -0.314869 +v 1.084676 8.450254 -0.305523 +v 1.109140 8.485620 -0.383029 +v 1.128492 8.761071 -0.237898 +v 1.107523 8.730759 -0.171464 +v 1.176726 8.700446 -0.163453 +v 1.197694 8.730759 -0.229887 +v 1.218838 8.998705 -0.098455 +v 1.204335 8.984408 -0.038508 +v 1.264975 8.970112 -0.027247 +v 1.279478 8.984408 -0.087194 +v 1.234830 9.286645 -0.073774 +v 1.224240 9.285719 -0.024253 +v 1.273765 9.284793 -0.013680 +v 1.284355 9.285719 -0.063202 +v 1.235822 9.589663 -0.072242 +v 1.227851 9.587805 -0.035147 +v 1.264964 9.585947 -0.027264 +v 1.272936 9.587805 -0.064359 +v 1.267198 9.885398 -0.023816 +v 1.261901 9.886009 0.000941 +v 1.286662 9.886621 0.006223 +v 1.291958 9.886009 -0.018534 +v 1.234563 10.179069 -0.074185 +v 1.231879 10.180190 -0.061862 +v 1.244223 10.181312 -0.059275 +v 1.246907 10.180190 -0.071599 +v 1.235983 10.482296 -0.071993 +v 1.235983 10.482296 -0.071993 +v 1.235983 10.482296 -0.071993 +v 1.235983 10.482296 -0.071993 +v 1.590415 9.015040 0.177823 +v 1.558559 8.981526 0.157151 +v 1.570403 8.948012 0.193233 +v 1.602259 8.981526 0.213905 +v 1.359983 9.099146 0.355255 +v 1.336091 9.074010 0.339750 +v 1.344974 9.048874 0.366812 +v 1.368866 9.074010 0.382316 +v 1.140382 9.209558 0.524346 +v 1.121945 9.194366 0.515942 +v 1.125358 9.179174 0.535914 +v 1.143795 9.194366 0.544319 +v 0.956050 9.396169 0.666041 +v 0.944586 9.391234 0.663908 +v 0.945364 9.384738 0.674749 +v 0.956829 9.389672 0.676882 +v 0.885045 9.645629 0.818319 +v 0.885045 9.645629 0.818319 +v 0.885045 9.645629 0.818319 +v 0.885045 9.645629 0.818319 +v 1.718159 9.460472 0.509322 +v 1.721603 9.447294 0.530672 +v 1.740148 9.434116 0.519547 +v 1.736704 9.447294 0.498197 +v 1.942944 9.635054 0.613847 +v 1.944666 9.628465 0.624523 +v 1.953938 9.621876 0.618960 +v 1.952216 9.628465 0.608285 +v 2.130365 9.854418 0.700999 +v 2.130365 9.854418 0.700999 +v 2.130365 9.854418 0.700999 +v 2.130365 9.854418 0.700999 +v 0.956250 9.397477 0.670053 +v 0.950155 9.390453 0.661458 +v 0.945165 9.383430 0.670737 +v 0.951259 9.390453 0.679331 +v 0.714125 9.577865 0.685009 +v 0.714125 9.577865 0.685009 +v 0.714125 9.577865 0.685009 +v 0.714125 9.577865 0.685009 +v 1.613177 7.458849 -2.775551 +v 1.635639 7.372895 -2.692583 +v 1.612669 7.286941 -2.775412 +v 1.590206 7.372895 -2.858380 +v 2.148275 7.429885 -2.922183 +v 2.166993 7.358256 -2.853042 +v 2.147851 7.286628 -2.922066 +v 2.129132 7.358256 -2.991207 +v 2.678503 7.426578 -3.067481 +v 2.698423 7.369489 -3.013524 +v 2.688055 7.312400 -3.070098 +v 2.668135 7.369489 -3.124055 +v 3.199457 7.494817 -3.210237 +v 3.223725 7.453978 -3.172325 +v 3.225277 7.413138 -3.217312 +v 3.201009 7.453978 -3.255224 +v 3.671907 7.734602 -3.339701 +v 3.694605 7.710624 -3.316213 +v 3.702158 7.686646 -3.347991 +v 3.679461 7.710624 -3.371479 +v 4.095342 8.069823 -3.455735 +v 4.107818 8.058686 -3.444300 +v 4.112722 8.047549 -3.460497 +v 4.100246 8.058686 -3.471932 +v 4.519386 8.408856 -3.571935 +v 4.519386 8.408856 -3.571935 +v 4.519386 8.408856 -3.571935 +v 4.519386 8.408856 -3.571935 +v 0.137700 7.374602 -3.192664 +v 0.108756 7.334821 -3.228355 +v 0.106818 7.295040 -3.182444 +v 0.135763 7.334821 -3.146753 +v -0.353659 7.575346 -3.030046 +v -0.372955 7.548825 -3.053840 +v -0.374247 7.522304 -3.023233 +v -0.354951 7.548825 -2.999439 +v -0.845697 7.766853 -2.867203 +v -0.857733 7.754927 -2.878310 +v -0.860767 7.743001 -2.862216 +v -0.848731 7.754927 -2.851110 +v -1.222645 8.150756 -2.742451 +v -1.222645 8.150756 -2.742451 +v -1.222645 8.150756 -2.742451 +v -1.222645 8.150756 -2.742451 +v -0.582378 8.172772 -3.115818 +v -0.599550 8.164849 -3.123084 +v -0.603597 8.156926 -3.104883 +v -0.586425 8.164849 -3.097616 +v -0.865879 8.627284 -2.969716 +v -0.865879 8.627284 -2.969716 +v -0.865879 8.627284 -2.969716 +v -0.865879 8.627284 -2.969716 +v 0.469981 8.664436 -2.085432 +v 0.519382 8.628643 -2.121576 +v 0.468525 8.592850 -2.155642 +v 0.419123 8.628643 -2.119497 +v 0.464938 8.918494 -2.328645 +v 0.507282 8.887815 -2.359625 +v 0.463690 8.857135 -2.388824 +v 0.421346 8.887815 -2.357843 +v 0.459454 9.141663 -2.593099 +v 0.494654 9.121043 -2.623118 +v 0.458240 9.100424 -2.651653 +v 0.423040 9.121043 -2.621634 +v 0.456717 9.454196 -2.725099 +v 0.484783 9.447922 -2.753643 +v 0.455558 9.441648 -2.780999 +v 0.427492 9.447922 -2.752455 +v 0.456137 9.799319 -2.753071 +v 0.477175 9.799304 -2.775000 +v 0.455246 9.799289 -2.796039 +v 0.434207 9.799304 -2.774109 +v 0.456420 10.152936 -2.739405 +v 0.470450 10.150717 -2.753852 +v 0.455833 10.148498 -2.767705 +v 0.441804 10.150717 -2.753258 +v 0.453626 10.480701 -2.874160 +v 0.460644 10.478839 -2.881223 +v 0.453339 10.476976 -2.887990 +v 0.446321 10.478839 -2.880926 +v 0.452353 10.826634 -2.935567 +v 0.452353 10.826634 -2.935567 +v 0.452353 10.826634 -2.935567 +v 0.452353 10.826634 -2.935567 +v 1.157924 9.370016 -2.364596 +v 1.179706 9.353208 -2.334850 +v 1.204275 9.336399 -2.362339 +v 1.182493 9.353208 -2.392085 +v 1.388200 9.636777 -2.353385 +v 1.404537 9.624170 -2.331076 +v 1.422964 9.611564 -2.351693 +v 1.406627 9.624170 -2.374002 +v 1.579643 9.927840 -2.344065 +v 1.592087 9.922172 -2.329116 +v 1.605925 9.916503 -2.342785 +v 1.593480 9.922172 -2.357734 +v 1.673528 10.264538 -2.339423 +v 1.680401 10.263749 -2.332023 +v 1.687541 10.261608 -2.338883 +v 1.680668 10.262397 -2.346283 +v 1.737723 10.604068 -2.405368 +v 1.737723 10.604068 -2.405368 +v 1.737723 10.604068 -2.405368 +v 1.737723 10.604068 -2.405368 +v 1.275365 10.046433 -2.288728 +v 1.292883 10.045140 -2.278633 +v 1.302907 10.043847 -2.296192 +v 1.285389 10.045140 -2.306288 +v 1.337908 10.393072 -2.305678 +v 1.346666 10.392426 -2.300631 +v 1.351678 10.391779 -2.309410 +v 1.342919 10.392426 -2.314457 +v 1.350312 10.744419 -2.309040 +v 1.350312 10.744419 -2.309040 +v 1.350312 10.744419 -2.309040 +v 1.350312 10.744419 -2.309040 +v 1.678013 10.266879 -2.333633 +v 1.687050 10.263073 -2.336177 +v 1.683056 10.259267 -2.344673 +v 1.674019 10.263073 -2.342129 +v 1.758244 10.561313 -2.509291 +v 1.758244 10.561313 -2.509291 +v 1.758244 10.561313 -2.509291 +v 1.758244 10.561313 -2.509291 +v 1.755687 8.579333 -1.104210 +v 1.873183 8.548559 -1.099288 +v 1.870047 8.517785 -1.216845 +v 1.752551 8.548559 -1.221767 +v 1.933835 8.986765 -1.279671 +v 2.031748 8.961120 -1.275569 +v 2.029135 8.935474 -1.373533 +v 1.931222 8.961120 -1.377635 +v 2.011819 9.423923 -1.356479 +v 2.092825 9.426148 -1.355833 +v 2.093410 9.428374 -1.436839 +v 2.012404 9.426148 -1.437485 +v 1.925505 9.877906 -1.271466 +v 1.986141 9.882025 -1.270866 +v 1.986462 9.886144 -1.331504 +v 1.925826 9.882025 -1.332105 +v 1.968462 10.355076 -1.313776 +v 2.008979 10.355404 -1.313467 +v 2.009286 10.355732 -1.353984 +v 1.968769 10.355404 -1.354293 +v 1.938100 10.828727 -1.283871 +v 1.958328 10.827603 -1.283686 +v 1.958450 10.826480 -1.303915 +v 1.938223 10.827603 -1.304100 +v 2.040976 11.285085 -1.385196 +v 2.040976 11.285085 -1.385196 +v 2.040976 11.285085 -1.385196 +v 2.040976 11.285085 -1.385196 +v 1.140953 9.611976 -1.839585 +v 1.186309 9.579112 -1.863185 +v 1.146078 9.546248 -1.894737 +v 1.100723 9.579112 -1.871137 +v 1.175986 9.900609 -2.216606 +v 1.206223 9.878699 -2.232339 +v 1.179403 9.856790 -2.253374 +v 1.149166 9.878699 -2.237641 +v 1.209866 10.202110 -2.581217 +v 1.225069 10.191995 -2.589992 +v 1.211743 10.181879 -2.601417 +v 1.196540 10.191995 -2.592642 +v 1.239699 10.550719 -2.902284 +v 1.239699 10.550719 -2.902284 +v 1.239699 10.550719 -2.902284 +v 1.239699 10.550719 -2.902284 +v 0.876808 10.473673 -1.841813 +v 0.876954 10.472403 -1.821594 +v 0.897173 10.471132 -1.821819 +v 0.897027 10.472403 -1.842039 +v 0.917075 10.946156 -1.802280 +v 0.917075 10.946156 -1.802280 +v 0.917075 10.946156 -1.802280 +v 0.917075 10.946156 -1.802280 +v 2.090300 8.740697 -0.115445 +v 2.071105 8.733698 -0.183347 +v 2.003395 8.726699 -0.163485 +v 2.022590 8.733698 -0.095583 +v 2.027442 9.064752 -0.150191 +v 2.010990 9.058752 -0.208393 +v 1.952953 9.052752 -0.191368 +v 1.969406 9.058752 -0.133167 +v 1.997164 9.385284 -0.166929 +v 1.983318 9.389032 -0.215505 +v 1.934819 9.392780 -0.201392 +v 1.948665 9.389032 -0.152816 +v 2.073888 9.698226 -0.124517 +v 2.063696 9.706322 -0.162889 +v 2.025781 9.714417 -0.151110 +v 2.035973 9.706322 -0.112738 +v 2.148447 10.021261 -0.083301 +v 2.140305 10.024879 -0.112356 +v 2.111371 10.028498 -0.103797 +v 2.119513 10.024879 -0.074742 +v 2.159279 10.358089 -0.077314 +v 2.153840 10.355746 -0.096689 +v 2.134541 10.353403 -0.090988 +v 2.139979 10.355746 -0.071613 +v 2.043264 10.665133 -0.141445 +v 2.040850 10.662648 -0.150964 +v 2.031505 10.660164 -0.147946 +v 2.033919 10.662648 -0.138427 +v 1.945840 10.977146 -0.195300 +v 1.945840 10.977146 -0.195300 +v 1.945840 10.977146 -0.195300 +v 1.945840 10.977146 -0.195300 +v 2.177366 9.653992 0.201983 +v 2.173865 9.639021 0.239473 +v 2.211436 9.624050 0.237002 +v 2.214937 9.639021 0.199513 +v 2.329728 9.904696 0.358586 +v 2.327103 9.893467 0.386703 +v 2.355281 9.882238 0.384850 +v 2.357907 9.893467 0.356733 +v 2.423821 10.202410 0.455297 +v 2.423105 10.198214 0.475105 +v 2.442924 10.194017 0.474932 +v 2.443640 10.198214 0.455125 +v 2.472154 10.524634 0.505026 +v 2.472070 10.524086 0.515141 +v 2.482101 10.522679 0.515149 +v 2.482186 10.523228 0.505034 +v 2.524934 10.851511 0.501335 +v 2.524934 10.851511 0.501335 +v 2.524934 10.851511 0.501335 +v 2.524934 10.851511 0.501335 +v 2.182521 10.296464 0.271694 +v 2.171844 10.293127 0.288586 +v 2.189026 10.289790 0.298788 +v 2.199703 10.293127 0.281897 +v 2.207651 10.610572 0.376359 +v 2.202312 10.608904 0.384805 +v 2.210903 10.607236 0.389906 +v 2.216242 10.608904 0.381460 +v 2.221721 10.936026 0.434964 +v 2.221721 10.936026 0.434964 +v 2.221721 10.936026 0.434964 +v 2.221721 10.936026 0.434964 +v 2.479354 10.526678 0.503987 +v 2.470399 10.523657 0.507632 +v 2.474901 10.520636 0.516189 +v 2.483857 10.523657 0.512543 +v 2.429203 10.824163 0.641425 +v 2.429203 10.824163 0.641425 +v 2.429203 10.824163 0.641425 +v 2.429203 10.824163 0.641425 +v 0.737849 9.372725 -0.500004 +v 0.765584 9.361624 -0.534434 +v 0.729473 9.350523 -0.559943 +v 0.701738 9.361624 -0.525513 +v 0.710483 9.673780 -0.695844 +v 0.733595 9.664530 -0.724537 +v 0.703503 9.655279 -0.745794 +v 0.680390 9.664530 -0.717102 +v 0.703194 10.018810 -0.748005 +v 0.721508 10.020190 -0.772217 +v 0.697259 10.021570 -0.790481 +v 0.678944 10.020190 -0.766269 +v 0.715414 10.362825 -0.660557 +v 0.729208 10.366649 -0.678294 +v 0.711080 10.370472 -0.691569 +v 0.697286 10.366649 -0.673833 +v 0.725262 10.715909 -0.590081 +v 0.734432 10.717477 -0.602095 +v 0.722320 10.719045 -0.611135 +v 0.713150 10.717477 -0.599121 +v 0.728458 11.074984 -0.567209 +v 0.733037 11.075360 -0.573260 +v 0.726975 11.075737 -0.577824 +v 0.722396 11.075360 -0.571773 +v 0.730765 11.433690 -0.550699 +v 0.730765 11.433690 -0.550699 +v 0.730765 11.433690 -0.550699 +v 0.730765 11.433690 -0.550699 +v -0.030898 10.039152 -0.800005 +v -0.046301 10.029504 -0.813757 +v -0.056359 10.019855 -0.795723 +v -0.040956 10.029504 -0.781971 +v -0.271077 10.303603 -0.759616 +v -0.281346 10.297171 -0.768785 +v -0.288052 10.290738 -0.756762 +v -0.277783 10.297171 -0.747594 +v -0.461234 10.604988 -0.727640 +v -0.466785 10.602432 -0.732154 +v -0.470554 10.599876 -0.726072 +v -0.465004 10.602432 -0.721558 +v -0.615828 10.927654 -0.701643 +v -0.615828 10.927654 -0.701643 +v -0.615828 10.927654 -0.701643 +v -0.615828 10.927654 -0.701643 +v -0.274640 10.694409 -0.771196 +v -0.281828 10.693636 -0.768859 +v -0.279415 10.692863 -0.761696 +v -0.272228 10.693636 -0.764033 +v -0.300229 11.048905 -0.720289 +v -0.300229 11.048905 -0.720289 +v -0.300229 11.048905 -0.720289 +v -0.300229 11.048905 -0.720289 +v 3.219303 8.207003 0.522815 +v 3.254799 8.173357 0.501926 +v 3.215554 8.139711 0.489430 +v 3.180058 8.173357 0.510319 +v 3.186977 8.370264 0.234963 +v 3.217402 8.341425 0.217058 +v 3.183764 8.312586 0.206347 +v 3.153339 8.341425 0.224252 +v 3.152473 8.493961 -0.072288 +v 3.177806 8.470022 -0.087392 +v 3.149754 8.446083 -0.096501 +v 3.124420 8.470022 -0.081397 +v 3.120945 8.658522 -0.353035 +v 3.140702 8.642492 -0.369655 +v 3.117751 8.626463 -0.381480 +v 3.097993 8.642492 -0.364859 +v 3.098258 8.912888 -0.555061 +v 3.112655 8.905855 -0.571270 +v 3.095021 8.898823 -0.583883 +v 3.080623 8.905855 -0.567673 +v 3.088814 9.229940 -0.639147 +v 3.098301 9.228717 -0.650954 +v 3.086432 9.227493 -0.660363 +v 3.076946 9.228717 -0.648556 +v 3.088849 9.561880 -0.638838 +v 3.093590 9.561485 -0.644762 +v 3.087653 9.561090 -0.649487 +v 3.082913 9.561485 -0.643563 +v 3.082192 9.889842 -0.698120 +v 3.082192 9.889842 -0.698120 +v 3.082192 9.889842 -0.698120 +v 3.082192 9.889842 -0.698120 +v 3.890648 8.439417 1.180344 +v 3.866032 8.421691 1.182180 +v 3.880298 8.403965 1.202325 +v 3.904914 8.421691 1.200488 +v 3.758495 8.563079 1.461001 +v 3.740032 8.549785 1.462378 +v 3.750732 8.536490 1.477487 +v 3.769194 8.549785 1.476110 +v 3.659902 8.797234 1.670385 +v 3.646780 8.790044 1.673031 +v 3.653100 8.782854 1.684831 +v 3.666221 8.790044 1.682185 +v 3.566753 9.047389 1.868145 +v 3.559954 9.044630 1.870115 +v 3.563139 9.040944 1.875945 +v 3.569938 9.043703 1.873975 +v 3.555562 9.315310 2.064813 +v 3.555562 9.315310 2.064813 +v 3.555562 9.315310 2.064813 +v 3.555562 9.315310 2.064813 +v 3.983678 8.978368 1.540486 +v 3.971164 8.972855 1.547112 +v 3.979610 8.967341 1.558477 +v 3.992124 8.972855 1.551851 +v 3.945160 9.261699 1.710855 +v 3.938903 9.258943 1.714168 +v 3.943126 9.256186 1.719851 +v 3.949383 9.258943 1.716538 +v 3.906332 9.544190 1.882596 +v 3.906332 9.544190 1.882596 +v 3.906332 9.544190 1.882596 +v 3.906332 9.544190 1.882596 +v 3.568958 9.047722 1.872397 +v 3.565416 9.044167 1.866693 +v 3.560935 9.040611 1.871693 +v 3.564477 9.044167 1.877396 +v 3.345511 9.293653 1.852792 +v 3.345511 9.293653 1.852792 +v 3.345511 9.293653 1.852792 +v 3.345511 9.293653 1.852792 +v 0.293090 9.412202 0.200420 +v 0.254312 9.398012 0.181111 +v 0.239275 9.383822 0.221736 +v 0.278053 9.398012 0.241046 +v 0.120206 9.707664 0.268901 +v 0.087891 9.695839 0.252810 +v 0.075360 9.684013 0.286665 +v 0.107675 9.695839 0.302756 +v 0.001538 10.025928 0.315906 +v -0.025909 10.021418 0.303665 +v -0.037529 10.016908 0.331381 +v -0.010081 10.021418 0.343622 +v -0.021702 10.368191 0.325112 +v -0.042577 10.369421 0.316046 +v -0.051582 10.370651 0.336947 +v -0.030707 10.369421 0.346013 +v 0.041007 10.709604 0.300272 +v 0.027083 10.710316 0.294231 +v 0.021072 10.711027 0.308168 +v 0.034996 10.710316 0.314209 +v 0.010837 11.057919 0.312223 +v 0.003865 11.057842 0.309206 +v 0.000849 11.057766 0.316179 +v 0.007821 11.057842 0.319195 +v 0.021892 11.405996 0.307844 +v 0.021892 11.405996 0.307844 +v 0.021892 11.405996 0.307844 +v 0.021892 11.405996 0.307844 +v -0.379023 10.068360 0.678163 +v -0.386026 10.055011 0.661068 +v -0.396949 10.041661 0.675968 +v -0.389945 10.055011 0.693062 +v -0.694990 10.212516 0.639462 +v -0.699659 10.203616 0.628065 +v -0.706940 10.194716 0.637998 +v -0.702271 10.203616 0.649395 +v -0.949863 10.443878 0.608243 +v -0.953699 10.440978 0.602361 +v -0.958840 10.438078 0.607144 +v -0.955005 10.440978 0.613026 +v -1.062781 10.772000 0.594413 +v -1.062781 10.772000 0.594413 +v -1.062781 10.772000 0.594413 +v -1.062781 10.772000 0.594413 +v -0.465646 10.711315 0.865679 +v -0.473112 10.710425 0.864586 +v -0.474100 10.709536 0.872066 +v -0.466635 10.710425 0.873159 +v -0.515959 11.054188 0.903694 +v -0.515959 11.054188 0.903694 +v -0.515959 11.054188 0.903694 +v -0.515959 11.054188 0.903694 +v 0.082164 9.300700 0.179967 +v 0.098368 9.284989 0.152624 +v 0.067895 9.269279 0.143592 +v 0.051691 9.284989 0.170935 +v 0.000092 9.553864 -0.029254 +v 0.013981 9.540398 -0.052691 +v -0.012139 9.526932 -0.060433 +v -0.026028 9.540398 -0.036996 +v -0.074059 9.820910 -0.218280 +v -0.063058 9.811987 -0.239273 +v -0.085398 9.803064 -0.247188 +v -0.096399 9.811987 -0.226194 +v -0.123184 10.125957 -0.343513 +v -0.114975 10.123110 -0.361815 +v -0.133439 10.120262 -0.369653 +v -0.141648 10.123110 -0.351351 +v -0.123997 10.463672 -0.345585 +v -0.117836 10.461480 -0.359301 +v -0.131680 10.459289 -0.365169 +v -0.137841 10.461480 -0.351454 +v -0.175156 10.773583 -0.475991 +v -0.170952 10.771182 -0.484889 +v -0.180084 10.768781 -0.488556 +v -0.184288 10.771182 -0.479658 +v -0.209210 11.098294 -0.562797 +v -0.207140 11.097377 -0.567328 +v -0.211738 11.096459 -0.569243 +v -0.213808 11.097377 -0.564712 +v -0.240960 11.425291 -0.643731 +v -0.240960 11.425291 -0.643731 +v -0.240960 11.425291 -0.643731 +v -0.240960 11.425291 -0.643731 +v 0.469610 9.873804 -0.551696 +v 0.484222 9.862062 -0.544010 +v 0.483460 9.850319 -0.560503 +v 0.468848 9.862062 -0.568188 +v 0.737637 9.992987 -0.722120 +v 0.748595 9.984179 -0.716355 +v 0.748024 9.975372 -0.728724 +v 0.737065 9.984179 -0.734489 +v 0.926130 10.242570 -0.841972 +v 0.934975 10.238548 -0.839108 +v 0.936134 10.234527 -0.848333 +v 0.927289 10.238548 -0.851197 +v 1.058098 10.540694 -0.925881 +v 1.062963 10.539882 -0.924733 +v 1.063980 10.539054 -0.929625 +v 1.059115 10.539866 -0.930774 +v 1.057361 10.878226 -0.927126 +v 1.057361 10.878226 -0.927126 +v 1.057361 10.878226 -0.927126 +v 1.057361 10.878226 -0.927126 +v 0.475785 10.516756 -0.705112 +v 0.485863 10.515800 -0.704749 +v 0.486135 10.514843 -0.714830 +v 0.476057 10.515800 -0.715193 +v 0.530722 10.846943 -0.756691 +v 0.535761 10.846465 -0.756510 +v 0.535898 10.845987 -0.761550 +v 0.530859 10.846465 -0.761732 +v 0.546614 11.184345 -0.771611 +v 0.546614 11.184345 -0.771611 +v 0.546614 11.184345 -0.771611 +v 0.546614 11.184345 -0.771611 +v 1.060134 10.542244 -0.925225 +v 1.064411 10.539874 -0.926546 +v 1.061944 10.537504 -0.930281 +v 1.057667 10.539874 -0.928960 +v 1.136512 10.793577 -1.138549 +v 1.136512 10.793577 -1.138549 +v 1.136512 10.793577 -1.138549 +v 1.136512 10.793577 -1.138549 +v -1.060618 9.349521 0.839770 +v -1.086349 9.334128 0.834819 +v -1.082117 9.318736 0.860678 +v -1.056386 9.334128 0.865629 +v -1.225165 9.540940 0.999788 +v -1.246608 9.528113 0.995662 +v -1.243081 9.515286 1.017211 +v -1.221639 9.528113 1.021338 +v -1.369816 9.759637 1.140458 +v -1.387392 9.749984 1.137567 +v -1.384993 9.740331 1.155217 +v -1.367417 9.749984 1.158108 +v -1.516620 9.976130 1.283221 +v -1.530111 9.969394 1.281353 +v -1.528621 9.962657 1.294891 +v -1.515130 9.969394 1.296759 +v -1.640628 10.217302 1.403816 +v -1.650239 10.214167 1.403170 +v -1.649862 10.211031 1.412795 +v -1.640252 10.214167 1.413440 +v -1.705305 10.500752 1.466712 +v -1.710269 10.499761 1.466543 +v -1.710239 10.498769 1.471510 +v -1.705275 10.499761 1.471678 +v -1.763811 10.787963 1.523607 +v -1.763811 10.787963 1.523607 +v -1.763811 10.787963 1.523607 +v -1.763811 10.787963 1.523607 +v -1.535122 9.691476 0.183936 +v -1.523843 9.681565 0.186273 +v -1.530622 9.671655 0.176960 +v -1.541901 9.681565 0.174623 +v -1.374451 9.734500 -0.065118 +v -1.366932 9.727893 -0.063560 +v -1.371451 9.721286 -0.069768 +v -1.378970 9.727893 -0.071326 +v -1.244273 9.908098 -0.266905 +v -1.239858 9.905628 -0.267142 +v -1.241461 9.903158 -0.271263 +v -1.245877 9.905628 -0.271025 +v -1.152973 10.153969 -0.408428 +v -1.152973 10.153969 -0.408428 +v -1.152973 10.153969 -0.408428 +v -1.152973 10.153969 -0.408428 +v -1.895065 10.116889 0.332035 +v -1.899369 10.114243 0.332393 +v -1.897421 10.111596 0.336247 +v -1.893117 10.114243 0.335889 +v -2.003948 10.315444 0.526725 +v -2.003948 10.315444 0.526725 +v -2.003948 10.315444 0.526725 +v -2.003948 10.315444 0.526725 +v 1.330240 9.169027 -0.967000 +v 1.359177 9.149070 -0.962375 +v 1.349854 9.129112 -0.990156 +v 1.320917 9.149070 -0.994782 +v 1.479111 9.375711 -1.142759 +v 1.503914 9.358605 -1.138794 +v 1.495923 9.341499 -1.162606 +v 1.471120 9.358605 -1.166571 +v 1.649871 9.535957 -1.344359 +v 1.671115 9.522425 -1.341734 +v 1.665030 9.508892 -1.362257 +v 1.643786 9.522425 -1.364882 +v 1.778362 9.766452 -1.496058 +v 1.797347 9.759385 -1.496307 +v 1.794470 9.752318 -1.515075 +v 1.775484 9.759385 -1.514825 +v 1.844759 10.053540 -1.574447 +v 1.859853 10.052261 -1.575643 +v 1.858549 10.050982 -1.590728 +v 1.843456 10.052261 -1.589532 +v 1.828390 10.360598 -1.555121 +v 1.838485 10.360699 -1.555957 +v 1.837648 10.360800 -1.566052 +v 1.827553 10.360699 -1.565216 +v 1.843722 10.669982 -1.573222 +v 1.848767 10.669826 -1.573638 +v 1.848347 10.669669 -1.578683 +v 1.843302 10.669826 -1.578267 +v 1.850514 10.979530 -1.581241 +v 1.850514 10.979530 -1.581241 +v 1.850514 10.979530 -1.581241 +v 1.850514 10.979530 -1.581241 +v 2.159394 9.398507 -0.636294 +v 2.147189 9.384189 -0.628779 +v 2.158903 9.369870 -0.637038 +v 2.171107 9.384189 -0.644554 +v 2.328664 9.357823 -0.379648 +v 2.319511 9.347084 -0.374012 +v 2.328296 9.336345 -0.380206 +v 2.337449 9.347084 -0.385843 +v 2.498522 9.372134 -0.122111 +v 2.492775 9.364984 -0.117815 +v 2.498987 9.357833 -0.121406 +v 2.504734 9.364984 -0.125702 +v 2.668625 9.387053 0.135442 +v 2.665456 9.383324 0.136745 +v 2.669386 9.380179 0.137306 +v 2.672556 9.383909 0.136003 +v 2.540383 9.508130 0.389193 +v 2.540383 9.508130 0.389193 +v 2.540383 9.508130 0.389193 +v 2.540383 9.508130 0.389193 +v 2.072506 9.625596 -0.092564 +v 2.067879 9.620390 -0.085209 +v 2.076406 9.615184 -0.083530 +v 2.081033 9.620390 -0.090885 +v 2.171505 9.809452 0.136827 +v 2.169191 9.806849 0.140505 +v 2.173454 9.804247 0.141344 +v 2.175768 9.806849 0.137667 +v 2.251782 10.043303 0.322841 +v 2.251782 10.043303 0.322841 +v 2.251782 10.043303 0.322841 +v 2.251782 10.043303 0.322841 +v 2.670309 9.386873 0.137098 +v 2.667266 9.383616 0.139504 +v 2.667703 9.380360 0.135650 +v 2.670745 9.383616 0.133243 +v 2.915206 9.254670 0.273207 +v 2.915206 9.254670 0.273207 +v 2.915206 9.254670 0.273207 +v 2.915206 9.254670 0.273207 +v 3.572619 8.744750 -0.181974 +v 3.569911 8.726005 -0.158208 +v 3.590329 8.707259 -0.170667 +v 3.593037 8.726005 -0.194433 +v 3.843965 8.849008 -0.008740 +v 3.841708 8.833386 0.011065 +v 3.858723 8.817765 0.000682 +v 3.860980 8.833386 -0.019122 +v 4.059721 9.058984 0.129004 +v 4.061701 9.050436 0.147265 +v 4.079100 9.041888 0.141376 +v 4.077119 9.050436 0.123115 +v 4.173482 9.364929 0.201632 +v 4.176025 9.360699 0.216003 +v 4.190131 9.356468 0.212261 +v 4.187588 9.360699 0.197890 +v 4.287796 9.673479 0.274613 +v 4.289691 9.671296 0.284321 +v 4.299296 9.669113 0.281955 +v 4.297400 9.671296 0.272246 +v 4.351613 10.001936 0.315355 +v 4.352631 10.001153 0.320254 +v 4.357503 10.000370 0.319116 +v 4.356485 10.001153 0.314217 +v 4.418037 10.330354 0.357762 +v 4.418037 10.330354 0.357762 +v 4.418037 10.330354 0.357762 +v 4.418037 10.330354 0.357762 +v 3.511603 9.058545 -1.100678 +v 3.522406 9.048116 -1.098352 +v 3.513839 9.037686 -1.105332 +v 3.503036 9.048116 -1.107658 +v 3.655736 9.117075 -1.400675 +v 3.662938 9.110122 -1.399124 +v 3.657227 9.103168 -1.403777 +v 3.650025 9.110122 -1.405328 +v 3.795455 9.213279 -1.691481 +v 3.799401 9.210104 -1.691424 +v 3.796890 9.206929 -1.694470 +v 3.792944 9.210104 -1.694527 +v 3.911547 9.417629 -1.933115 +v 3.911547 9.417629 -1.933115 +v 3.911547 9.417629 -1.933115 +v 3.911547 9.417629 -1.933115 +v 3.781848 9.595761 -1.376323 +v 3.783757 9.594165 -1.380735 +v 3.779162 9.592568 -1.382146 +v 3.777253 9.594165 -1.377735 +v 3.717467 9.896475 -1.515909 +v 3.717467 9.896475 -1.515909 +v 3.717467 9.896475 -1.515909 +v 3.717467 9.896475 -1.515909 +v 0.171890 9.272048 -0.052008 +v 0.139521 9.259621 -0.044606 +v 0.151384 9.247193 -0.013592 +v 0.183754 9.259621 -0.020994 +v 0.085876 9.578842 0.109129 +v 0.058131 9.568191 0.115474 +v 0.068299 9.557539 0.142057 +v 0.096045 9.568191 0.135712 +v 0.002444 9.888045 0.265429 +v -0.020819 9.879718 0.270982 +v -0.012487 9.871390 0.293400 +v 0.010776 9.879718 0.287847 +v -0.072920 10.205236 0.406615 +v -0.091852 10.200076 0.411659 +v -0.085507 10.194916 0.430194 +v -0.066576 10.200076 0.425151 +v -0.120626 10.544279 0.495985 +v -0.135137 10.543186 0.500355 +v -0.130692 10.542093 0.514844 +v -0.116180 10.543186 0.510474 +v -0.109526 10.899957 0.475191 +v -0.119197 10.899158 0.478097 +v -0.116230 10.898358 0.487750 +v -0.106559 10.899158 0.484843 +v -0.160846 11.240652 0.571333 +v -0.165681 11.240242 0.572786 +v -0.164197 11.239832 0.577611 +v -0.159362 11.240242 0.576159 +v -0.150684 11.596360 0.552297 +v -0.150684 11.596360 0.552297 +v -0.150684 11.596360 0.552297 +v -0.150684 11.596360 0.552297 +v -0.506285 10.046764 0.217396 +v -0.519225 10.040720 0.203027 +v -0.532261 10.034676 0.217308 +v -0.519321 10.040720 0.231678 +v -0.734744 10.322257 0.216624 +v -0.744449 10.317724 0.205847 +v -0.754226 10.313191 0.216558 +v -0.744521 10.317724 0.227335 +v -0.804315 10.669603 0.216389 +v -0.811353 10.668406 0.209202 +v -0.818439 10.667208 0.216341 +v -0.811401 10.668406 0.223528 +v -0.860264 11.021862 0.216196 +v -0.863831 11.021633 0.212607 +v -0.867397 11.021210 0.216179 +v -0.863830 11.021439 0.219768 +v -0.876373 11.377794 0.235558 +v -0.876373 11.377794 0.235558 +v -0.876373 11.377794 0.235558 +v -0.876373 11.377794 0.235558 +v -0.886387 10.652804 0.185212 +v -0.893323 10.647317 0.180272 +v -0.894935 10.641829 0.188633 +v -0.888000 10.647317 0.193572 +v -1.156268 10.860498 0.293219 +v -1.159735 10.857755 0.290749 +v -1.160542 10.855011 0.294929 +v -1.157074 10.857755 0.297399 +v -1.397348 11.105169 0.389700 +v -1.397348 11.105169 0.389700 +v -1.397348 11.105169 0.389700 +v -1.397348 11.105169 0.389700 +v -0.860960 11.023273 0.217439 +v -0.862399 11.021536 0.212905 +v -0.866701 11.019798 0.214936 +v -0.865262 11.021536 0.219470 +v -1.022594 11.333711 0.146952 +v -1.022594 11.333711 0.146952 +v -1.022594 11.333711 0.146952 +v -1.022594 11.333711 0.146952 +vn -0.715323 0.144322 -0.683706 +vn -0.747398 0.209876 -0.630299 +vn 0.696432 0.145238 -0.702719 +vn -0.641804 0.006592 0.766808 +vn -0.680715 0.077944 0.728355 +vn 0.763054 0.017151 0.646077 +vn 0.721091 -0.054994 0.690603 +vn 0.647603 0.086001 -0.757073 +vn -0.708365 0.288339 -0.644246 +vn 0.668355 0.005982 -0.743797 +vn -0.640828 0.148106 0.753227 +vn 0.739341 -0.135105 0.659597 +vn -0.711783 0.224311 -0.665578 +vn 0.695791 0.036348 -0.717277 +vn -0.621815 0.110111 0.775353 +vn 0.756157 -0.068087 0.650807 +vn -0.744316 0.089022 -0.661824 +vn -0.643727 0.078951 0.761132 +vn 0.745262 0.067629 0.663320 +vn 0.681600 0.077364 -0.727592 +vn -0.749168 0.047731 -0.660604 +vn -0.669362 0.091494 0.737236 +vn 0.739769 0.110324 0.663717 +vn 0.656087 0.066286 -0.751732 +vn -0.775170 0.061434 -0.628742 +vn -0.648091 0.226386 0.727103 +vn 0.711966 0.112552 0.693106 +vn 0.669881 -0.069338 -0.739189 +vn -0.710379 0.041536 -0.702567 +vn 0.658467 -0.121036 -0.742790 +vn -0.649190 0.274636 0.709281 +vn 0.778069 0.097598 0.620502 +vn -0.991424 0.122562 0.044984 +vn -0.050050 -0.034455 -0.998138 +vn 0.062777 0.144810 0.987457 +vn 0.997925 -0.012391 -0.063082 +vn -0.094668 0.233436 0.967742 +vn -0.043580 0.265297 0.963164 +vn -0.985046 0.131474 -0.111148 +vn 0.998505 0.018097 0.051241 +vn 0.994385 0.077090 0.072329 +vn 0.047121 -0.074648 -0.996094 +vn 0.097018 -0.110752 -0.989074 +vn -0.994049 0.083407 -0.069918 +vn -0.069399 0.355174 0.932188 +vn -0.998596 0.014618 -0.050386 +vn 0.986633 0.152287 0.057466 +vn 0.073794 -0.202338 -0.976501 +vn -0.058687 0.388592 0.919523 +vn -0.995392 -0.063875 -0.071261 +vn 0.978912 0.204230 -0.003296 +vn 0.088809 -0.233955 -0.968169 +vn -0.079379 0.406140 0.910337 +vn 0.955077 0.296243 -0.002106 +vn 0.077212 -0.255287 -0.963775 +vn -0.990539 -0.136876 -0.008667 +vn -0.107364 0.455184 0.883877 +vn -0.983062 -0.182440 -0.016968 +vn 0.944762 0.325297 -0.039277 +vn 0.074160 -0.313913 -0.946532 +vn -0.163884 0.511307 0.843593 +vn -0.996124 -0.074099 -0.047304 +vn 0.970031 0.241035 0.029939 +vn 0.039125 -0.388958 -0.920408 +vn 0.621418 0.447798 0.642842 +vn -0.780847 0.373943 0.500412 +vn 0.779260 -0.280740 -0.560259 +vn -0.632221 -0.347301 -0.692557 +vn 0.172826 0.190680 -0.966308 +vn 0.173833 0.158238 -0.971954 +vn 0.982604 0.080294 0.167272 +vn -0.979675 0.080294 -0.183691 +vn -0.984985 0.077364 -0.154210 +vn -0.175939 -0.034059 0.983795 +vn -0.176061 -0.001038 0.984375 +vn 0.977355 0.077395 0.196783 +vn 0.173772 0.156590 -0.972228 +vn 0.982879 0.079653 0.166082 +vn -0.979492 0.080020 -0.184881 +vn -0.176122 0.000519 0.984344 +vn 0.172521 0.196631 -0.965148 +vn -0.982635 0.078127 -0.168279 +vn -0.175817 -0.039796 0.983612 +vn 0.979888 0.079073 0.183020 +vn 0.169836 0.268563 -0.948149 +vn 0.983734 0.083285 0.159093 +vn -0.977874 0.084048 -0.191473 +vn -0.174749 -0.113559 0.978027 +vn 0.189703 0.378002 -0.906125 +vn -0.981780 -0.000610 -0.189856 +vn -0.133580 -0.221229 0.966002 +vn 0.965941 0.161260 0.202307 +vn 0.137516 0.391003 -0.910031 +vn 0.940825 0.229408 0.249306 +vn -0.978271 -0.088137 -0.187536 +vn -0.181005 -0.245216 0.952391 +vn -0.577532 0.157964 -0.800928 +vn 0.785974 0.369030 -0.495987 +vn -0.808405 -0.263833 0.526139 +vn 0.552660 -0.053468 0.831660 +vn -0.917234 0.334391 -0.216468 +vn -0.848109 0.386273 -0.362560 +vn 0.306040 0.074587 -0.949065 +vn -0.199469 0.238197 0.950499 +vn -0.322153 0.092776 0.942106 +vn 0.912839 -0.151982 0.378948 +vn 0.944945 -0.240211 0.222083 +vn 0.314371 -0.109195 -0.942991 +vn -0.836299 0.483779 -0.257942 +vn -0.361675 -0.106693 0.926145 +vn 0.892148 -0.341990 0.295083 +vn 0.387005 0.256813 -0.885556 +vn -0.857418 0.474960 -0.197943 +vn -0.289621 -0.006653 0.957091 +vn 0.873287 -0.339335 0.349559 +vn 0.381359 0.135563 -0.914396 +vn -0.865963 0.411115 -0.284646 +vn 0.322123 0.009156 -0.946623 +vn -0.244026 0.127689 0.961303 +vn 0.920499 -0.264718 0.287301 +vn -0.876797 0.388409 -0.283425 +vn -0.262001 0.131626 0.956023 +vn 0.926511 -0.238899 0.290628 +vn 0.306375 0.019776 -0.951689 +vn -0.819910 0.320231 0.474502 +vn -0.418104 0.239357 -0.876278 +vn 0.453780 -0.133610 0.881008 +vn 0.855922 -0.214576 -0.470443 +vn -0.910123 0.411664 -0.046266 +vn -0.914823 0.389813 -0.105289 +vn 0.114170 0.069124 -0.991028 +vn -0.043733 0.140538 0.989105 +vn -0.045412 0.073733 0.996216 +vn 0.959777 -0.259346 0.107364 +vn 0.969390 -0.240425 0.049562 +vn 0.075503 0.015107 -0.997009 +vn -0.930784 0.358501 -0.071291 +vn -0.073946 0.013153 0.997162 +vn 0.974425 -0.207404 0.086428 +vn 0.126072 0.135289 -0.982727 +vn -0.899197 0.431837 -0.070376 +vn -0.116550 0.011200 0.993103 +vn 0.956389 -0.283517 0.070132 +vn 0.095462 0.165441 -0.981567 +vn -0.873287 0.479659 -0.085269 +vn 0.192999 0.237068 -0.952116 +vn -0.093631 -0.113285 0.989135 +vn 0.944853 -0.324625 0.042848 +vn -0.764000 0.121647 0.633595 +vn -0.508530 0.484634 -0.711661 +vn 0.552873 -0.385235 0.738853 +vn 0.798059 -0.020508 -0.602191 +vn -0.696951 0.346385 0.627888 +vn -0.712058 0.285745 0.641285 +vn -0.633198 0.070925 -0.770714 +vn 0.658437 0.085086 0.747795 +vn 0.700888 0.070650 0.709738 +vn 0.728690 -0.194891 -0.656484 +vn 0.736534 -0.131993 -0.663381 +vn -0.675253 0.085086 -0.732627 +vn -0.710166 0.197058 0.675832 +vn 0.684622 0.136326 0.715995 +vn 0.756005 -0.036866 -0.653493 +vn -0.661458 0.018220 -0.749718 +vn -0.745689 0.242470 0.620594 +vn -0.688833 0.035920 -0.724021 +vn 0.652242 0.131413 0.746483 +vn 0.710807 -0.090060 -0.697562 +vn -0.716514 0.233467 0.657308 +vn -0.622211 0.094272 -0.777123 +vn 0.705039 0.048494 0.707480 +vn 0.745659 -0.078036 -0.661733 +vn -0.047792 0.091098 0.994690 +vn -0.992981 0.103427 -0.057161 +vn 0.998840 0.007477 0.047182 +vn 0.061892 0.019776 -0.997864 +vn -0.157384 0.417341 0.894986 +vn -0.160741 0.368572 0.915586 +vn -0.973388 0.067812 -0.218787 +vn 0.981506 0.083743 0.172002 +vn 0.989593 0.068606 0.126286 +vn 0.166784 -0.269478 -0.948424 +vn 0.169164 -0.217566 -0.961241 +vn -0.981292 0.083743 -0.173162 +vn -0.168371 0.221992 0.960387 +vn -0.971129 0.072207 -0.227302 +vn 0.990417 0.071169 0.118076 +vn 0.173040 -0.065889 -0.982696 +vn -0.196600 0.169836 0.965636 +vn 0.980224 0.014771 0.197272 +vn 0.148350 -0.008667 -0.988891 +vn -0.975372 0.146397 -0.164830 +vn 0.573687 0.058504 0.816950 +vn -0.797082 0.251228 0.549089 +vn 0.814112 -0.142094 -0.563005 +vn -0.563402 0.052828 -0.824458 +vn -0.737480 0.401532 0.543016 +vn -0.722312 0.441389 0.532365 +vn -0.552660 0.066958 -0.830683 +vn 0.629170 0.066958 0.774346 +vn 0.599353 0.081851 0.796258 +vn 0.779107 -0.252663 -0.573687 +vn 0.769677 -0.294137 -0.566576 +vn -0.582659 0.080538 -0.808679 +vn -0.741447 0.451491 0.496323 +vn -0.516190 0.160588 -0.841273 +vn 0.600604 -0.029267 0.798975 +vn 0.745628 -0.297189 -0.596362 +vn -0.734581 0.389935 0.555223 +vn 0.556749 -0.115604 0.822565 +vn 0.797510 -0.245705 -0.550981 +vn -0.485946 0.256142 -0.835597 +vn -0.154973 0.139775 0.977966 +vn -0.900052 0.388958 -0.196448 +vn 0.938994 -0.284341 0.193396 +vn 0.195990 -0.035859 -0.979919 +vn -0.896298 0.217322 -0.386517 +vn -0.912442 0.112125 -0.393475 +vn 0.442274 0.077029 -0.893551 +vn -0.435255 0.085910 0.896176 +vn -0.346263 0.077029 0.934965 +vn 0.916471 -0.062075 0.395215 +vn 0.917325 0.044740 0.395581 +vn 0.352977 0.085879 -0.931669 +vn -0.917722 0.033601 -0.395764 +vn -0.413526 0.078005 0.907102 +vn 0.911161 0.123783 0.392926 +vn 0.375835 0.078005 -0.923368 +vn -0.928831 0.051515 0.366832 +vn -0.370708 0.051515 -0.927305 +vn 0.367321 0.060121 0.928129 +vn 0.927091 0.060121 -0.369884 +vn -0.791131 0.597888 -0.128727 +vn -0.836238 0.531144 -0.136143 +vn 0.228919 0.052431 -0.972015 +vn -0.154241 0.089480 0.983947 +vn -0.090976 0.052370 0.994446 +vn 0.873836 -0.464919 0.142186 +vn 0.908109 -0.391705 0.147801 +vn 0.165685 0.089480 -0.982086 +vn -0.893399 0.433271 -0.118748 +vn -0.097079 0.122196 0.987732 +vn 0.943358 -0.283242 0.172613 +vn 0.176214 0.016449 -0.984191 +vn -0.716514 0.366192 0.593677 +vn -0.557848 0.209235 -0.803095 +vn 0.594440 -0.104038 0.797357 +vn 0.759087 -0.262764 -0.595538 +vn 0.717551 0.120640 -0.685934 +vn 0.727287 0.107456 -0.677847 +vn 0.688070 0.064760 0.722709 +vn -0.681265 0.093356 -0.726035 +vn -0.690542 0.079348 -0.718894 +vn -0.730796 0.037080 0.681539 +vn -0.721763 0.050233 0.690268 +vn 0.678396 0.078005 0.730522 +vn 0.729545 0.135289 -0.670400 +vn 0.688894 0.135289 0.712088 +vn -0.673299 0.024201 -0.738945 +vn -0.715720 0.024171 0.697928 +vn 0.024842 0.055971 -0.998108 +vn 0.980071 0.196417 0.028871 +vn -0.995849 -0.086032 -0.029328 +vn -0.033906 0.055574 0.997864 +vn -0.319102 0.303842 -0.897671 +vn -0.344371 0.203711 -0.916440 +vn 0.922422 0.108524 -0.370556 +vn -0.949614 0.069735 0.305490 +vn -0.915983 0.071596 0.394757 +vn 0.347240 -0.150761 0.925565 +vn 0.334361 -0.047609 0.941221 +vn 0.955382 0.072848 -0.286142 +vn -0.904996 0.080142 -0.417798 +vn 0.422163 0.052126 -0.904996 +vn -0.413251 0.058901 0.908689 +vn 0.903348 0.031343 0.427717 +vn 0.492050 0.284707 -0.822687 +vn 0.489914 0.298196 -0.819147 +vn 0.849818 0.078341 0.521195 +vn -0.867641 0.075594 -0.491348 +vn -0.861202 0.078341 -0.502152 +vn -0.508896 -0.130436 0.850856 +vn -0.507889 -0.144414 0.849208 +vn 0.843349 0.075594 0.531999 +vn -0.259987 0.221534 -0.939848 +vn 0.951018 0.221534 -0.215522 +vn -0.964904 -0.112796 0.237098 +vn 0.247505 -0.112796 0.962279 +vn -0.618824 0.049043 0.783959 +vn -0.612262 0.153386 0.775628 +vn -0.748527 0.080355 -0.658162 +vn 0.813990 0.080355 0.575243 +vn 0.755120 0.082369 0.650349 +vn 0.615986 0.107669 -0.780328 +vn 0.619587 0.003479 -0.784906 +vn -0.807917 0.082369 -0.583483 +vn 0.123692 0.187567 0.974425 +vn -0.976501 0.187567 0.105899 +vn 0.990509 -0.076998 -0.113804 +vn -0.119266 -0.076998 -0.989837 +vn -0.833949 0.551530 0.017335 +vn -0.796472 0.590411 -0.130314 +vn 0.086764 0.075014 -0.993378 +vn 0.082125 0.197882 0.976775 +vn -0.053041 0.088656 0.994629 +vn 0.911283 -0.389447 0.133610 +vn 0.889492 -0.456587 -0.017273 +vn 0.048341 -0.093387 -0.994446 +vn -0.659169 0.356578 0.662038 +vn -0.419263 0.551408 -0.721183 +vn 0.486770 -0.465773 0.738945 +vn 0.712943 -0.257759 -0.652089 +vn 0.427168 0.084902 0.900174 +vn 0.425123 0.129032 0.895871 +vn -0.910550 0.078707 0.405774 +vn 0.890164 0.078707 -0.448744 +vn 0.907559 0.079806 -0.412244 +vn -0.427564 0.072634 -0.901028 +vn -0.428541 0.028413 -0.903073 +vn -0.893277 0.079806 0.442305 +vn 0.935881 0.124943 0.329325 +vn -0.336741 0.124943 0.933256 +vn 0.335459 -0.013581 -0.941923 +vn -0.941801 -0.013581 -0.335795 +vn 0.628193 0.598926 0.496567 +vn 0.882717 0.424177 -0.202155 +vn 0.007080 0.424177 0.905545 +vn 0.585131 0.066683 -0.808161 +vn -0.053865 -0.329722 -0.942534 +vn -0.694266 -0.465560 -0.548814 +vn -0.929502 -0.329722 0.165166 +vn -0.651204 0.066683 0.755913 +vn -0.818506 0.572008 0.052889 +vn -0.534135 0.405103 0.741966 +vn -0.625202 0.405103 -0.667043 +vn 0.104068 0.068026 0.992218 +vn 0.681570 -0.308725 0.663411 +vn 0.898099 -0.435926 -0.058016 +vn 0.590503 -0.308725 -0.745628 +vn -0.024476 0.068026 -0.997375 +vn -0.443831 0.331767 -0.832392 +vn -0.937315 0.234962 -0.257332 +vn 0.308603 0.234962 -0.921690 +vn -0.870113 0.076205 0.486862 +vn -0.295144 -0.126988 0.946959 +vn 0.462874 -0.179296 0.868068 +vn 0.950774 -0.126988 0.282601 +vn 0.889157 0.076205 -0.451186 +vn -0.803735 0.569414 0.172460 +vn -0.421064 0.403241 0.812433 +vn -0.717338 0.403241 -0.568133 +vn 0.247932 0.068148 0.966369 +vn 0.772271 -0.306681 0.556322 +vn 0.881283 -0.433058 -0.189093 +vn 0.475997 -0.306681 -0.824213 +vn -0.170385 0.068148 -0.983001 +vn 0.238350 0.296518 -0.924772 +vn -0.514817 0.209998 -0.831141 +vn 0.852443 0.209998 -0.478713 +vn -0.969665 0.076907 -0.231971 +vn -0.858608 -0.101016 0.502548 +vn -0.247017 -0.142644 0.958434 +vn 0.508682 -0.101016 0.854976 +vn 0.960997 0.076907 0.265633 +vn -0.715812 0.448897 -0.534837 +vn -0.929533 0.317911 0.186773 +vn -0.084384 0.317911 -0.944334 +vn -0.572832 0.073031 0.816370 +vn 0.118107 -0.214454 0.969543 +vn 0.763451 -0.302805 0.570421 +vn 0.963256 -0.214454 -0.161565 +vn 0.620502 0.073031 -0.780786 +vn -0.183416 0.961821 0.203040 +vn -0.185369 0.960906 0.205512 +vn -0.695120 0.022828 -0.718528 +vn 0.784509 0.026246 0.619526 +vn 0.785485 0.023072 0.618397 +vn 0.273080 -0.913236 -0.302286 +vn 0.275369 -0.911771 -0.304666 +vn -0.695822 0.026246 -0.717704 +vn -0.184729 0.957335 0.222083 +vn -0.676901 0.015290 -0.735893 +vn 0.815821 0.037568 0.577044 +vn 0.313089 -0.884548 -0.345683 +vn -0.471511 0.874477 0.113712 +vn -0.282540 0.230873 -0.931028 +vn 0.498276 -0.355846 0.790613 +vn 0.419477 -0.706809 -0.569597 +vn -0.552171 0.738090 0.387616 +vn -0.097629 -0.511246 0.853847 +vn 0.651814 -0.663839 -0.366619 +vn 0.149937 0.585101 -0.796960 +vn -0.640492 0.645650 0.415754 +vn 0.163121 0.484664 -0.859340 +vn 0.049532 -0.500839 0.864101 +vn 0.739341 -0.623463 -0.254250 +vn -0.778649 0.508469 0.367565 +vn 0.213538 -0.205481 0.955077 +vn 0.883206 -0.436567 -0.171209 +vn -0.102695 0.307138 -0.946104 +vn -0.826838 0.497147 0.262947 +vn -0.234718 0.133427 -0.962828 +vn 0.290933 -0.005890 0.956694 +vn 0.888241 -0.370922 -0.270943 +vn -0.828669 0.459578 0.319468 +vn 0.361003 0.106632 0.926420 +vn 0.918729 -0.322001 -0.228492 +vn -0.264962 0.004578 -0.964232 +vn -0.879452 0.394910 0.265603 +vn -0.336009 -0.111087 -0.935270 +vn 0.378124 0.239845 0.894131 +vn 0.913938 -0.264290 -0.307932 +vn -0.371685 0.396435 0.839442 +vn -0.875820 0.153020 -0.457686 +vn 0.900998 -0.059542 0.429701 +vn 0.396741 -0.302683 -0.866573 +vn 0.226783 0.843593 0.486709 +vn 0.173284 0.911222 0.373669 +vn -0.944090 -0.019318 0.329081 +vn 0.859249 -0.019318 -0.511185 +vn 0.890133 0.090365 -0.446638 +vn -0.273476 -0.761986 -0.586963 +vn -0.223945 -0.847591 -0.481063 +vn -0.914701 0.091891 0.393506 +vn 0.128330 0.951781 0.278542 +vn -0.933866 0.008301 0.357494 +vn 0.874050 0.007263 -0.485733 +vn -0.182287 -0.902097 -0.391095 +vn 0.157659 0.932524 0.324839 +vn 0.855983 0.035035 -0.515763 +vn -0.217170 -0.854213 -0.472335 +vn -0.938597 0.021210 0.344279 +vn -0.025300 0.900754 0.433515 +vn -0.964293 0.253151 -0.077548 +vn 0.959990 -0.262368 -0.097690 +vn -0.388775 -0.729759 -0.562334 +vn 0.197028 0.795007 0.573687 +vn 0.796838 -0.469253 0.380535 +vn -0.126011 -0.758965 -0.638813 +vn -0.747032 0.490036 -0.449141 +vn 0.144780 0.726768 0.671407 +vn -0.786218 0.432722 -0.441084 +vn 0.857845 -0.436354 0.271401 +vn -0.003906 -0.681204 -0.732047 +vn 0.123020 0.545885 0.828761 +vn 0.987487 -0.141850 0.068697 +vn 0.167821 -0.475112 -0.863735 +vn -0.948759 0.200018 -0.244575 +vn -0.059603 0.420118 0.905484 +vn -0.997711 -0.033570 -0.058473 +vn 0.988922 0.145573 -0.028474 +vn 0.038697 -0.293222 -0.955229 +vn -0.043764 0.279031 0.959258 +vn -0.996338 -0.015717 -0.083956 +vn 0.990509 0.130894 -0.041536 +vn 0.029389 -0.143773 -0.989166 +vn 0.681143 0.167730 0.712638 +vn -0.728874 0.071780 0.680837 +vn 0.717002 0.024628 -0.696616 +vn -0.682333 -0.070528 -0.727592 +vn -0.757561 0.589190 0.280923 +vn -0.732231 0.624561 0.271523 +vn -0.302103 0.032868 -0.952696 +vn 0.392041 0.032868 0.919340 +vn 0.362194 0.056215 0.930387 +vn 0.812403 -0.499222 -0.301248 +vn 0.793237 -0.533128 -0.294137 +vn -0.331950 0.056215 -0.941588 +vn -0.606403 0.761803 0.227821 +vn 0.339610 0.088321 0.936399 +vn 0.680563 -0.686148 -0.256905 +vn -0.348094 0.084475 -0.933622 +vn -0.330912 0.925169 0.185705 +vn 0.563372 0.228675 0.793908 +vn 0.552110 -0.833247 -0.029115 +vn -0.536424 -0.066042 -0.841334 +vn -0.266976 0.961913 -0.058382 +vn -0.737510 -0.221931 -0.637806 +vn 0.777062 0.295297 0.555803 +vn 0.338786 -0.940703 -0.016511 +vn -0.273873 0.958678 -0.076937 +vn -0.719321 -0.275185 -0.637806 +vn 0.800165 0.238929 0.550096 +vn 0.326579 -0.944945 -0.020112 +vn -0.413160 0.910398 -0.020814 +vn -0.584765 -0.219031 -0.781060 +vn 0.690451 0.181158 0.700278 +vn 0.381207 -0.907224 -0.177770 +vn -0.570666 0.791681 0.218085 +vn 0.581988 0.055116 0.811304 +vn 0.624439 -0.726371 -0.287118 +vn -0.400403 -0.133152 -0.906583 +vn -0.707938 0.545640 0.448378 +vn 0.610370 0.207099 0.764519 +vn 0.818903 -0.430128 -0.379894 +vn -0.478133 -0.179601 -0.859706 +vn -0.851009 0.278390 0.445235 +vn -0.510849 -0.189215 -0.838557 +vn 0.613819 0.260109 0.745323 +vn 0.799463 -0.203711 -0.565081 +vn -0.196265 0.195318 0.960875 +vn -0.976226 0.041780 -0.212592 +vn 0.981689 0.031098 0.187841 +vn 0.199469 -0.121433 -0.972320 +vn -0.597674 0.709311 0.373669 +vn -0.507065 0.801660 0.316538 +vn -0.460646 -0.017060 -0.887387 +vn 0.596057 -0.017060 0.802728 +vn 0.521012 0.076052 0.850124 +vn 0.645344 -0.648579 -0.403485 +vn 0.560503 -0.750450 -0.350169 +vn -0.535997 0.076968 -0.840663 +vn -0.430891 0.861385 0.268899 +vn -0.492325 0.007050 -0.870357 +vn 0.567827 0.006897 0.823084 +vn 0.488723 -0.817286 -0.305185 +vn -0.493210 0.813105 0.309153 +vn -0.484085 0.010163 -0.874935 +vn 0.569597 0.009186 0.821863 +vn 0.551286 -0.758507 -0.347392 +vn -0.371502 0.859279 0.351512 +vn 0.713614 0.234474 0.660115 +vn 0.610828 -0.761376 -0.217109 +vn -0.719504 -0.107273 -0.686148 +vn -0.433851 0.883419 0.176916 +vn -0.828700 -0.316233 -0.461715 +vn 0.854579 0.342112 0.390667 +vn 0.457045 -0.853603 -0.249886 +vn -0.442061 0.875881 0.193335 +vn -0.822840 -0.315378 -0.472671 +vn 0.855739 0.335398 0.393902 +vn 0.463027 -0.843715 -0.271493 +vn -0.482131 0.731742 0.481704 +vn -0.761315 -0.421003 -0.493057 +vn 0.913938 0.284066 0.289804 +vn 0.538469 -0.659230 -0.524766 +vn -0.552293 0.406842 0.727592 +vn 0.867061 0.355358 0.349071 +vn 0.481735 -0.361095 -0.798425 +vn -0.832636 -0.316446 -0.454482 +vn -0.573077 0.344096 0.743706 +vn 0.852138 0.155522 0.499619 +vn 0.450850 -0.281137 -0.847133 +vn -0.854244 -0.071352 -0.514908 +vn 0.233802 0.226081 0.945616 +vn -0.944304 0.292611 0.150517 +vn 0.955901 -0.238563 -0.171087 +vn -0.228065 -0.168554 -0.958922 +vn 0.282693 0.917081 0.281106 +vn 0.287545 0.914090 0.285867 +vn -0.749168 0.030549 0.661641 +vn 0.659566 0.036439 -0.750755 +vn 0.656362 0.030519 -0.753807 +vn -0.372631 -0.850765 -0.370525 +vn -0.378216 -0.845363 -0.377178 +vn -0.747032 0.036439 0.663747 +vn 0.219520 0.951537 0.215247 +vn 0.663045 0.078829 -0.744377 +vn -0.315867 -0.894528 -0.316263 +vn -0.736930 0.075045 0.671743 +vn 0.093875 0.979430 0.178472 +vn -0.852718 0.073855 0.517106 +vn 0.773461 -0.044069 -0.632252 +vn -0.308267 -0.931578 -0.192663 +vn 0.195654 0.967345 0.161077 +vn 0.873562 -0.106967 -0.474776 +vn -0.245216 -0.927244 -0.282937 +vn -0.929044 0.119785 0.349986 +vn 0.206030 0.960234 0.188299 +vn 0.874355 -0.090243 -0.476791 +vn -0.258156 -0.913419 -0.314615 +vn -0.926908 0.136448 0.349528 +vn 0.309976 0.922849 0.228492 +vn 0.781671 -0.052767 -0.621448 +vn -0.247047 -0.868709 -0.429273 +vn -0.876827 0.033753 0.479598 +vn 0.387494 0.769463 0.507675 +vn -0.818537 -0.067995 0.570360 +vn 0.655690 0.024812 -0.754570 +vn -0.475692 -0.666860 -0.573565 +vn 0.600757 0.418470 0.681143 +vn 0.657613 0.089999 -0.747917 +vn -0.624439 -0.285897 -0.726829 +vn -0.814447 -0.025452 0.579638 +vn 0.607288 0.007538 0.794427 +vn 0.682882 0.038820 -0.729453 +vn -0.686605 0.141697 -0.713065 +vn -0.796655 0.119663 0.592425 +vn 0.959685 -0.274758 0.058718 +vn -0.067263 -0.025361 0.997406 +vn 0.075747 0.128819 -0.988769 +vn -0.928190 0.368053 -0.054720 +vn 0.465987 0.874783 -0.132603 +vn 0.502853 0.852412 -0.143101 +vn 0.232521 0.054048 0.971068 +vn -0.313669 0.054048 -0.947966 +vn -0.335368 0.020539 -0.941832 +vn -0.570635 -0.804956 0.162389 +vn -0.604480 -0.777795 0.172033 +vn 0.210852 0.020539 0.977294 +vn 0.506088 0.850368 -0.144017 +vn 0.233528 0.053804 0.970855 +vn -0.312693 0.053804 -0.948302 +vn -0.607593 -0.775170 0.172918 +vn 0.424116 0.897305 -0.122227 +vn -0.319956 0.054720 -0.945830 +vn -0.535051 -0.830866 0.152715 +vn 0.228339 0.051088 0.972228 +vn 0.418195 0.907254 -0.044557 +vn -0.179388 -0.072390 -0.981079 +vn -0.510147 -0.831141 0.221168 +vn 0.053285 0.108463 0.992645 +vn 0.526078 0.837001 -0.150517 +vn -0.115482 0.179083 0.977020 +vn -0.043703 -0.182531 -0.982208 +vn -0.631794 -0.766991 0.111881 +vn 0.646840 0.752861 -0.121494 +vn -0.069277 0.192602 0.978820 +vn -0.051302 -0.131596 -0.989959 +vn -0.739769 -0.665731 0.097446 +vn 0.745811 0.641224 -0.180456 +vn 0.018555 0.054781 0.998321 +vn -0.176092 -0.009400 -0.984313 +vn -0.839259 -0.542436 0.036775 +vn 0.887417 0.449873 -0.100375 +vn -0.249245 0.126713 -0.960082 +vn -0.931639 -0.333048 0.145299 +vn 0.099429 -0.051271 0.993713 +vn 0.970122 0.202582 -0.133427 +vn 0.088229 0.022309 0.995819 +vn -0.229591 0.088473 -0.969237 +vn -0.982910 -0.075442 0.167852 +vn 0.588488 0.042360 -0.807367 +vn 0.807917 0.039918 0.587909 +vn -0.813807 0.051424 -0.578814 +vn -0.593585 0.048585 0.803278 +vn -0.907010 0.370861 0.199408 +vn -0.824915 0.535295 0.181371 +vn -0.112247 0.015259 -0.993561 +vn 0.314859 0.015259 0.949004 +vn 0.165166 0.084292 0.982635 +vn 0.937346 -0.280892 -0.206091 +vn 0.870632 -0.453108 -0.191412 +vn -0.262246 0.084292 -0.961303 +vn -0.655690 0.741050 0.144505 +vn -0.205512 0.059999 -0.976806 +vn 0.220923 0.059450 0.973449 +vn 0.718772 -0.676778 -0.159093 +vn -0.579272 0.787011 0.212165 +vn 0.396680 0.164006 0.903165 +vn 0.713553 -0.696982 -0.070833 +vn -0.308451 -0.125004 -0.942961 +vn -0.556383 0.826716 0.083224 +vn -0.532151 -0.226691 -0.815699 +vn 0.522416 0.367504 0.769402 +vn 0.638203 -0.762200 -0.108005 +vn -0.493759 0.869533 -0.007721 +vn -0.513688 -0.303781 -0.802362 +vn 0.597888 0.337230 0.727165 +vn 0.563738 -0.823237 -0.066622 +vn -0.602466 0.782159 -0.158727 +vn -0.140843 -0.042055 -0.989135 +vn 0.276925 0.029237 0.960418 +vn 0.605579 -0.744407 -0.281228 +vn -0.813501 0.567553 0.126682 +vn 0.013001 -0.267251 0.963530 +vn 0.849330 -0.527299 -0.023225 +vn 0.185217 0.222205 -0.957213 +vn -0.956969 0.284585 0.056490 +vn 0.054262 -0.053163 0.997101 +vn 0.979858 -0.197638 0.028230 +vn 0.081027 0.119480 -0.989502 +vn -0.998901 -0.046632 -0.002258 +vn 0.093326 0.056764 -0.993988 +vn 0.085543 0.057588 0.994659 +vn 0.989807 0.142125 0.004456 +vn -0.690146 -0.183416 0.700034 +vn -0.684378 -0.187536 -0.704550 +vn 0.670370 0.254189 0.697104 +vn 0.676168 0.250191 -0.692923 +vn -0.069643 0.741722 0.667043 +vn -0.054872 0.852504 0.519791 +vn -0.980651 -0.041078 -0.191229 +vn 0.999023 -0.041078 0.015442 +vn 0.988586 0.088717 0.121555 +vn 0.074770 -0.693899 -0.716147 +vn 0.060335 -0.815699 -0.575274 +vn -0.992218 0.090091 -0.085726 +vn -0.031831 0.954344 0.296945 +vn -0.991272 0.035188 -0.126835 +vn 0.996216 0.034394 0.079409 +vn 0.037843 -0.932340 -0.359508 +vn -0.024842 0.966247 0.256294 +vn -0.989166 0.001495 -0.146641 +vn 0.998321 0.004669 0.057222 +vn 0.035035 -0.940977 -0.336558 +vn -0.231269 0.926450 0.296945 +vn -0.852992 0.125095 -0.506668 +vn 0.895413 -0.208930 0.393139 +vn -0.050172 -0.847835 -0.527818 +vn -0.231056 0.712973 0.662008 +vn 0.720298 -0.367077 0.588549 +vn 0.325999 -0.707266 -0.627247 +vn -0.631550 0.264748 -0.728690 +vn -0.398297 0.579913 0.710654 +vn 0.761345 -0.224677 0.608142 +vn 0.436872 -0.527024 -0.728935 +vn -0.721641 0.273721 -0.635792 +vn -0.476394 0.496078 0.725883 +vn -0.677877 0.294412 -0.673635 +vn 0.759056 -0.278695 0.588336 +vn 0.479781 -0.423719 -0.768273 +vn -0.518021 0.247230 0.818812 +vn 0.797632 -0.190558 0.572222 +vn 0.633442 -0.206610 -0.745659 +vn -0.697043 0.226630 -0.680227 +vn -0.598346 0.028382 0.800714 +vn -0.757347 0.053896 -0.650777 +vn 0.807611 0.015992 0.589465 +vn 0.638722 0.040040 -0.768364 +vn 0.116123 -0.016144 0.993072 +vn -0.990936 -0.069918 0.114597 +vn 0.986419 0.118961 -0.113163 +vn -0.115543 0.065859 -0.991089 +vn 0.043886 0.968383 -0.245460 +vn 0.037324 0.977355 -0.208167 +vn 0.970794 0.035737 0.237159 +vn -0.994385 0.002228 -0.105655 +vn -0.992553 0.036225 -0.116245 +vn -0.066652 -0.925504 0.372753 +vn -0.059755 -0.937956 0.341533 +vn 0.969359 0.002228 0.245582 +vn 0.009522 0.999512 -0.028962 +vn 0.967528 0.075716 0.241096 +vn -0.992889 0.068422 -0.097293 +vn -0.033876 -0.985748 0.164739 +vn 0.064302 0.958281 0.278390 +vn -0.847011 0.010590 -0.531419 +vn 0.196966 -0.974853 0.104190 +vn 0.743004 0.006714 0.669240 +vn -0.293527 0.925596 0.238838 +vn 0.322611 -0.053652 0.944975 +vn -0.461531 0.158483 -0.872829 +vn 0.160527 -0.964751 -0.208472 +vn -0.387219 0.878353 0.280190 +vn 0.354900 -0.159398 0.921201 +vn -0.458449 0.056825 -0.886868 +vn 0.278085 -0.932371 -0.230873 +vn -0.355235 0.822596 0.443953 +vn -0.044740 0.243721 -0.968780 +vn 0.169683 -0.984558 -0.042634 +vn -0.125034 -0.294351 0.947478 +vn -0.305307 0.926481 0.219977 +vn 0.479019 0.351878 -0.804163 +vn 0.211219 -0.934721 -0.285745 +vn -0.566637 -0.361187 0.740532 +vn -0.312326 0.871517 0.377972 +vn -0.782647 -0.374798 0.496933 +vn 0.712851 0.273537 -0.645741 +vn 0.015442 -0.944731 -0.327403 +vn -0.014496 0.804987 0.593066 +vn 0.905271 0.146336 -0.398755 +vn -0.079073 -0.736869 -0.671346 +vn -0.958251 -0.224952 0.176305 +vn 0.736106 0.575030 0.356945 +vn -0.609912 0.363933 0.703909 +vn 0.569292 -0.299783 -0.765496 +vn -0.754509 -0.505112 -0.418989 +vn -0.519578 0.812220 -0.265114 +vn -0.502365 0.825739 -0.256355 +vn 0.505570 0.032685 -0.862148 +vn -0.401440 0.032685 0.915281 +vn -0.413251 0.049135 0.909268 +vn 0.610187 -0.728477 0.311350 +vn 0.594897 -0.744224 0.303568 +vn 0.493759 0.049135 -0.868191 +vn -0.520615 0.811396 -0.265664 +vn 0.512101 0.023988 -0.858577 +vn -0.394696 0.023988 0.918485 +vn 0.611682 -0.726920 0.312113 +vn -0.593188 0.746361 -0.301645 +vn -0.397687 0.033235 0.916898 +vn 0.678426 -0.648946 0.344310 +vn 0.512833 0.033845 -0.857784 +vn -0.580706 0.781793 -0.226936 +vn -0.306253 0.198889 0.930906 +vn 0.618824 -0.671255 0.407941 +vn 0.348216 -0.043397 -0.936399 +vn -0.493362 0.813562 -0.307718 +vn 0.242225 -0.219275 -0.945097 +vn -0.126713 0.274606 0.953154 +vn 0.599536 -0.740989 0.302408 +vn -0.620472 0.710044 -0.332835 +vn 0.320444 -0.200720 -0.925748 +vn -0.126408 0.210120 0.969451 +vn 0.731590 -0.616962 0.289956 +vn -0.886258 0.433302 -0.163610 +vn -0.023469 0.364299 0.930967 +vn 0.916501 -0.249519 0.312632 +vn 0.281594 -0.322184 -0.903806 +vn -0.956420 0.082766 -0.280007 +vn 0.155034 -0.289193 -0.944609 +vn -0.105991 0.401013 0.909909 +vn 0.997589 -0.034913 0.059816 +vn -0.982391 0.068667 -0.173681 +vn -0.143010 0.165899 0.975707 +vn 0.989196 0.058138 0.134526 +vn 0.161077 -0.036744 -0.986236 +vn -0.806330 0.087832 0.584857 +vn -0.588580 -0.012482 -0.808313 +vn 0.590960 0.105411 0.799768 +vn 0.805750 0.005127 -0.592212 +vn -0.675405 0.316813 0.665914 +vn -0.630970 0.464492 0.621357 +vn -0.631489 0.032624 -0.774651 +vn 0.765648 0.032624 0.642384 +vn 0.667623 0.081027 0.740043 +vn 0.696280 -0.209418 -0.686514 +vn 0.663381 -0.360179 -0.655873 +vn -0.729362 0.083285 -0.679006 +vn -0.480087 0.736717 0.476150 +vn -0.709708 0.095492 -0.697958 +vn 0.684744 0.101138 0.721671 +vn 0.532212 -0.657796 -0.532914 +vn -0.256264 0.896054 0.362438 +vn 0.850337 0.237800 0.469405 +vn 0.539720 -0.784417 -0.305551 +vn -0.825404 -0.134404 -0.548296 +vn -0.355907 0.915922 0.185461 +vn -0.925748 -0.294626 -0.236976 +vn 0.916623 0.371960 0.146336 +vn 0.383984 -0.876034 -0.291665 +vn -0.404157 0.873501 0.271371 +vn -0.882839 -0.354503 -0.308023 +vn 0.951537 0.275216 0.137120 +vn 0.365703 -0.840541 -0.399640 +vn -0.538896 0.761437 0.360240 +vn -0.791620 -0.058962 -0.608142 +vn 0.844264 0.111606 0.524125 +vn 0.316935 -0.719657 -0.617725 +vn -0.423017 0.750511 0.507675 +vn 0.661489 -0.136876 0.737327 +vn 0.490402 -0.681753 -0.542833 +vn -0.587573 0.187353 -0.787133 +vn -0.472060 0.591540 0.653584 +vn 0.787011 -0.008850 0.616871 +vn 0.645222 -0.499405 -0.578112 +vn -0.639454 0.007630 -0.768761 +vn -0.677664 0.268593 0.684530 +vn -0.702445 -0.061159 -0.709067 +vn 0.804621 0.137974 0.577502 +vn 0.634266 -0.167150 -0.754784 +vn 0.061220 0.096133 0.993469 +vn -0.996460 0.060427 0.058260 +vn 0.996918 0.018372 -0.076266 +vn -0.055086 -0.017579 -0.998321 +vn 0.756279 0.641896 0.126286 +vn 0.660909 0.742271 0.110355 +vn -0.148350 0.072970 0.986236 +vn 0.086642 -0.010987 -0.996155 +vn 0.180120 0.072970 -0.980926 +vn -0.803369 -0.580126 -0.134129 +vn -0.716697 -0.687033 -0.119663 +vn -0.241707 -0.010987 0.970275 +vn 0.428907 0.900479 0.071596 +vn 0.159490 0.073794 -0.984405 +vn -0.496231 -0.864223 -0.082858 +vn -0.168981 0.073794 0.982849 +vn 0.213507 0.976318 0.034242 +vn 0.131321 0.050356 -0.990051 +vn -0.287576 -0.956633 -0.046358 +vn -0.201697 0.048280 0.978240 +vn -0.102451 0.980865 -0.165410 +vn -0.626545 0.159886 -0.762780 +vn -0.416089 -0.867550 -0.272408 +vn 0.469680 -0.178137 0.864650 +vn 0.333048 0.930509 -0.152318 +vn -0.972991 0.189734 -0.131382 +vn -0.278268 -0.944548 0.174230 +vn 0.916074 -0.366131 0.163549 +vn 0.345164 0.837153 -0.424268 +vn 0.917112 -0.263222 0.299264 +vn -0.957183 0.222877 -0.184637 +vn -0.324107 -0.803461 0.499344 +vn 0.220679 0.744346 -0.630207 +vn 0.911252 -0.379467 0.160039 +vn -0.936216 0.350536 -0.023774 +vn -0.401196 -0.620075 0.674184 +vn 0.326304 0.460463 -0.825526 +vn -0.911069 0.407392 0.062777 +vn -0.173070 -0.459609 0.871059 +vn 0.900784 -0.420118 0.109745 +vn 0.247810 0.335215 -0.908933 +vn 0.974090 -0.161779 0.157903 +vn -0.964476 0.231910 -0.126408 +vn -0.149724 -0.280862 0.947966 +vn -0.551225 0.311502 -0.773980 +vn 0.836146 0.167425 -0.522294 +vn -0.831538 -0.115848 0.543199 +vn 0.556597 -0.258248 0.789605 +vn -0.042512 0.990509 -0.130558 +vn -0.040407 0.991455 -0.124027 +vn 0.964171 0.011078 -0.264931 +vn -0.935301 0.005310 0.353740 +vn -0.935636 0.011444 0.352733 +vn 0.071108 -0.973235 0.218421 +vn 0.069948 -0.974425 0.213385 +vn 0.964293 0.005310 -0.264687 +vn -0.004273 0.999939 -0.009003 +vn 0.962523 0.053224 -0.265816 +vn -0.933195 0.055971 0.354961 +vn 0.034730 -0.994079 0.102786 +vn 0.083987 0.995331 0.046968 +vn -0.981872 -0.026917 0.187506 +vn 0.083560 -0.996307 0.018494 +vn 0.994964 -0.015076 -0.098880 +vn -0.005402 0.999847 0.016541 +vn 0.996368 0.006623 0.084841 +vn -0.999908 -0.004975 0.010010 +vn 0.002319 -0.996704 0.080905 +vn 0.004181 0.977691 -0.209876 +vn -0.994720 -0.093783 0.041566 +vn -0.006714 -0.950377 0.310953 +vn 0.990081 -0.080905 0.114689 +vn -0.186224 0.781518 -0.595386 +vn 0.976287 -0.199774 -0.083254 +vn -0.949767 0.097476 0.297342 +vn -0.046571 -0.691580 0.720786 +vn -0.114261 0.484573 -0.867214 +vn -0.867458 0.304636 0.393292 +vn 0.213599 -0.431806 0.876278 +vn 0.921781 -0.281655 -0.266335 +vn -0.187292 0.217383 -0.957915 +vn -0.918912 0.143132 0.367504 +vn 0.307657 -0.138676 0.941313 +vn 0.976897 -0.080782 -0.197699 +vn -0.294259 0.086428 -0.951781 +vn 0.956481 -0.005310 -0.291635 +vn -0.962127 0.099979 0.253517 +vn 0.244209 0.009644 0.969665 +vn -0.858028 0.177038 -0.482070 +vn 0.489334 0.010132 -0.872005 +vn -0.484725 0.056368 0.872829 +vn 0.866726 -0.111423 0.486129 +vn -0.428846 0.890866 0.149785 +vn -0.322459 0.939909 0.112186 +vn -0.266274 -0.032716 -0.963317 +vn 0.391400 -0.032716 0.919614 +vn 0.344493 0.067660 0.936308 +vn 0.496963 -0.850215 -0.173589 +vn 0.393902 -0.908780 -0.137608 +vn -0.312662 0.068392 -0.947386 +vn -0.159276 0.985687 0.054964 +vn -0.296121 0.031434 -0.954619 +vn 0.364635 0.030580 0.930631 +vn 0.237098 -0.967986 -0.082095 +vn 0.053255 0.998413 -0.017701 +vn 0.386120 0.071932 0.919614 +vn 0.052339 -0.998505 -0.014466 +vn -0.277108 0.074282 -0.957945 +vn 0.399976 0.892483 -0.208441 +vn 0.190588 -0.044465 -0.980651 +vn -0.065371 0.201544 0.977264 +vn -0.278085 -0.937101 -0.210883 +vn 0.519181 0.852718 0.057222 +vn 0.581011 -0.301706 -0.755882 +vn -0.539079 0.257576 0.801874 +vn -0.462233 -0.886654 -0.011322 +vn 0.419935 0.905393 -0.062014 +vn -0.588977 0.221442 0.777184 +vn -0.331095 -0.939543 0.087039 +vn 0.601306 -0.368297 -0.709037 +vn 0.423719 0.893551 -0.148228 +vn 0.806696 -0.316904 -0.498764 +vn -0.739189 0.380139 0.555925 +vn -0.215278 -0.971129 0.102664 +vn 0.346934 0.931272 -0.110935 +vn 0.893338 -0.386944 -0.228431 +vn -0.896664 0.304819 0.321024 +vn -0.290597 -0.939543 0.181036 +vn 0.370434 0.877773 -0.303690 +vn -0.957640 0.269082 0.102451 +vn -0.181494 -0.908719 0.375835 +vn 0.945158 -0.326456 0.008820 +vn -0.499435 0.774651 -0.387860 +vn 0.875057 0.452773 -0.170934 +vn -0.870540 -0.435682 0.228614 +vn 0.501297 -0.746117 0.438124 +vn -0.355541 0.579730 0.733116 +vn -0.331400 0.650472 0.683401 +vn -0.874844 0.003204 -0.484359 +vn 0.922025 0.003204 0.387097 +vn 0.893765 0.051302 0.445540 +vn 0.371197 -0.525651 -0.765404 +vn 0.349834 -0.598865 -0.720359 +vn -0.903562 0.050966 -0.425336 +vn -0.253945 0.810266 0.528123 +vn 0.893490 0.075869 0.442579 +vn 0.281014 -0.764275 -0.580401 +vn -0.901425 0.071993 -0.426832 +vn -0.311380 0.870083 0.382031 +vn -0.723716 0.173345 -0.667959 +vn 0.775750 -0.188147 0.602283 +vn 0.144383 -0.789819 -0.596057 +vn -0.234474 0.831660 0.503311 +vn 0.531022 -0.316263 0.786096 +vn 0.275704 -0.802332 -0.529313 +vn -0.492019 0.358592 -0.793268 +vn -0.213630 0.838130 0.501846 +vn -0.477096 0.351756 -0.805353 +vn 0.535936 -0.327952 0.777917 +vn 0.273141 -0.808191 -0.521683 +vn -0.502029 0.662313 0.556108 +vn -0.364269 0.299600 -0.881771 +vn 0.562212 -0.441023 0.699545 +vn 0.523942 -0.598315 -0.606189 +vn -0.721152 0.280282 0.633534 +vn 0.545701 -0.302561 0.781426 +vn 0.802240 -0.256386 -0.539079 +vn -0.449080 0.337474 -0.827265 +vn -0.782952 0.114231 0.611469 +vn -0.521836 0.134281 -0.842372 +vn 0.595752 -0.077120 0.799432 +vn 0.844508 -0.059999 -0.532151 +vn -0.821589 0.035249 0.568957 +vn -0.570574 0.032014 -0.820582 +vn 0.566881 0.032838 0.823115 +vn 0.822260 0.029603 -0.568316 +vn -0.178991 0.029756 0.983367 +vn -0.983428 0.027680 -0.179113 +vn 0.983642 0.018403 0.179052 +vn 0.179113 0.016297 -0.983673 +vn 0.874752 0.444441 -0.192969 +vn 0.842647 0.505295 -0.185888 +vn 0.221503 0.055788 0.973540 +vn -0.263833 0.028596 -0.964110 +vn -0.208655 0.055788 -0.976379 +vn -0.911069 -0.359844 0.200995 +vn -0.885098 -0.422437 0.195257 +vn 0.166295 0.028596 0.985656 +vn 0.718650 0.677023 -0.158544 +vn 0.234840 0.078280 0.968871 +vn -0.194586 0.078280 -0.977722 +vn -0.778191 -0.604083 0.171667 +vn 0.531846 0.838954 -0.115085 +vn -0.230171 0.063173 -0.971068 +vn -0.609943 -0.781121 0.133274 +vn 0.198431 0.068392 0.977722 +vn 0.427381 0.880398 -0.205420 +vn 0.390576 -0.157353 0.907010 +vn -0.481887 0.172552 -0.859035 +vn -0.614215 -0.788995 0.014405 +vn 0.607593 0.780297 -0.148015 +vn -0.651662 0.296884 -0.697958 +vn -0.629383 -0.742271 0.229896 +vn 0.555773 -0.317179 0.768426 +vn 0.748497 0.591601 -0.299570 +vn -0.634999 0.215094 -0.741935 +vn -0.744346 -0.534440 0.400342 +vn 0.475356 -0.236518 0.847377 +vn 0.799341 0.369823 -0.473525 +vn 0.502304 -0.173803 0.847011 +vn -0.583667 0.230934 -0.778436 +vn -0.837977 -0.278298 0.469375 +vn 0.854579 0.207221 -0.476119 +vn -0.573290 0.216346 -0.790246 +vn -0.821497 -0.129215 0.555315 +vn 0.513718 -0.137120 0.846919 +vn 0.847835 0.102390 -0.520249 +vn 0.523972 -0.025178 0.851344 +vn -0.554765 0.115207 -0.823969 +vn -0.833979 -0.012238 0.551622 +vn 0.213630 0.072573 -0.974181 +vn 0.976257 0.017121 0.215827 +vn -0.976501 0.048189 -0.209906 +vn -0.213599 -0.007172 0.976867 +vn -0.278359 0.734062 -0.619373 +vn -0.282052 0.725883 -0.627277 +vn 0.921018 0.032044 -0.388165 +vn -0.901730 0.032014 0.431043 +vn -0.898434 0.024415 0.438368 +vn 0.301126 -0.678487 0.670003 +vn 0.305368 -0.668264 0.678304 +vn 0.924619 0.024445 -0.380047 +vn -0.244331 0.805109 -0.540452 +vn 0.909055 0.075198 -0.409742 +vn -0.908292 0.081301 0.410321 +vn 0.271493 -0.753105 0.599231 +vn 0.065371 0.869991 -0.488693 +vn -0.851466 -0.523911 0.021607 +vn 0.463607 -0.585955 0.664602 +vn 0.890957 0.402539 0.210089 +vn -0.140690 0.657125 -0.740501 +vn 0.385357 0.711936 0.587024 +vn -0.436476 -0.705191 -0.558702 +vn 0.069948 -0.648122 0.758293 +vn -0.126041 0.662496 -0.738365 +vn -0.467086 -0.697226 -0.543748 +vn 0.044557 -0.642415 0.765038 +vn 0.390606 0.717368 0.576861 +vn 0.285409 0.479476 -0.829798 +vn -0.536790 -0.753197 -0.380108 +vn -0.362133 -0.434309 0.824732 +vn 0.329447 0.618549 0.713309 +vn 0.614093 0.092257 -0.783776 +vn 0.526109 0.613849 0.588488 +vn -0.574816 -0.565477 -0.591388 +vn -0.717215 -0.119816 0.686453 +vn 0.612781 0.133580 -0.778863 +vn -0.669057 -0.314951 -0.673147 +vn -0.714652 -0.101169 0.692099 +vn 0.665670 0.391186 0.635456 +vn 0.629963 0.125034 -0.766472 +vn -0.747185 -0.102084 -0.656697 +vn -0.705954 -0.059877 0.705710 +vn 0.694906 0.173742 0.697775 +vn -0.045473 0.018220 -0.998779 +vn 0.996368 0.075289 -0.039613 +vn -0.999054 -0.020173 0.037996 +vn 0.036439 0.036958 0.998627 +vn -0.233528 0.947020 -0.220466 +vn -0.218696 0.953734 -0.206183 +vn 0.703726 0.017975 -0.710196 +vn -0.664693 0.000244 0.747093 +vn -0.669118 0.018494 0.742912 +vn 0.271432 -0.927702 0.256233 +vn 0.258492 -0.934843 0.243324 +vn 0.707663 0.000244 -0.706534 +vn -0.080325 0.993896 -0.075350 +vn 0.696524 0.081423 -0.712851 +vn -0.670888 0.082217 0.736961 +vn 0.122318 -0.985778 0.114994 +vn 0.191778 0.965819 0.174200 +vn -0.648213 0.071261 0.758110 +vn -0.151097 -0.979736 -0.131413 +vn 0.722953 0.082583 -0.685903 +vn 0.570360 0.640645 0.514023 +vn -0.854488 0.445387 0.267312 +vn 0.048402 -0.856533 -0.513749 +vn 0.959563 -0.276162 -0.054476 +vn 0.196509 0.641713 0.741325 +vn 0.556810 -0.690939 0.461013 +vn -0.593616 0.671010 -0.444227 +vn -0.230903 -0.664235 -0.710929 +vn 0.244453 0.648396 0.720969 +vn -0.556871 0.678060 -0.479690 +vn -0.267037 -0.691946 -0.670705 +vn 0.501206 -0.719199 0.481124 +vn 0.238990 0.601733 0.762078 +vn -0.339671 0.758660 -0.555895 +vn -0.235847 -0.734703 -0.636036 +vn 0.301309 -0.724021 0.620441 +vn 0.267678 0.620441 0.737114 +vn -0.053621 0.683035 -0.728385 +vn -0.319041 -0.697836 -0.641224 +vn -0.031617 -0.747398 0.663594 +vn 0.280648 0.632038 0.722312 +vn -0.251320 -0.602649 0.757347 +vn 0.229347 0.683645 -0.692831 +vn -0.358837 -0.683462 -0.635670 +vn 0.395276 0.917966 -0.032228 +vn -0.110691 0.082461 0.990417 +vn 0.075228 -0.067354 -0.994873 +vn -0.431471 -0.901456 0.033998 +vn 0.730827 0.660665 0.171422 +vn 0.639485 0.753990 0.149998 +vn -0.221137 0.077059 0.972167 +vn 0.147618 -0.004028 -0.989013 +vn 0.234199 0.077059 -0.969115 +vn -0.788842 -0.586047 -0.185034 +vn -0.708182 -0.686178 -0.166112 +vn -0.307566 -0.004028 0.951506 +vn 0.397839 0.912900 0.091189 +vn 0.204688 0.089755 -0.974670 +vn -0.491470 -0.863186 -0.115482 +vn -0.244514 0.084323 0.965941 +vn 0.121281 0.986816 0.106906 +vn 0.493728 -0.047487 -0.868313 +vn -0.361400 -0.926572 0.104038 +vn -0.554277 0.151128 0.818476 +vn 0.082034 0.987915 -0.131443 +vn 0.769860 -0.114597 -0.627796 +vn -0.141057 -0.987152 0.074740 +vn -0.807306 0.186865 0.559740 +vn 0.053194 0.982116 -0.180425 +vn -0.827937 0.133122 0.544755 +vn 0.760643 -0.172460 -0.625813 +vn -0.107517 -0.989074 0.100528 +vn 0.124516 0.889706 -0.439161 +vn 0.039735 -0.106204 -0.993530 +vn -0.225227 -0.940855 -0.252968 +vn -0.245430 0.030000 0.968932 +vn 0.493088 0.860073 -0.130650 +vn -0.646809 0.114048 -0.754051 +vn -0.492813 -0.849300 0.189093 +vn 0.533616 -0.260353 0.804621 +vn 0.574877 0.619556 -0.534440 +vn 0.561174 -0.375683 0.737510 +vn -0.765465 0.319681 -0.558397 +vn -0.779107 -0.455824 0.430311 +vn 0.771294 0.213538 -0.599536 +vn -0.713370 0.461226 -0.527543 +vn -0.639729 -0.200934 0.741844 +vn 0.670797 -0.394513 0.627979 +vn -0.017273 0.298990 -0.954070 +vn 0.997833 -0.062288 -0.019929 +vn -0.990966 0.123936 0.050996 +vn 0.028413 -0.235267 0.971496 +vn 0.925962 0.377575 0.000183 +vn 0.842311 0.538957 0.000153 +vn 0.054476 0.071322 0.995941 +vn -0.096133 0.001679 -0.995361 +vn 0.054903 0.071322 -0.995911 +vn -0.949736 -0.313028 -0.000183 +vn -0.875576 -0.483047 -0.000183 +vn -0.096561 0.001679 0.995300 +vn 0.753075 0.657888 0.000153 +vn -0.037324 0.014557 -0.999176 +vn -0.796411 -0.604724 -0.000153 +vn -0.037751 0.014557 0.999176 +vn 0.802118 0.597156 0.000427 +vn -0.034303 0.021088 0.999176 +vn -0.033296 0.020112 -0.999237 +vn -0.842769 -0.538224 0.000000 +vn 0.761986 0.643239 -0.074801 +vn 0.136906 -0.113376 0.984069 +vn -0.117893 0.215155 -0.969420 +vn -0.826472 -0.554399 -0.097720 +vn 0.741447 0.669668 0.042238 +vn -0.273568 0.336375 -0.901089 +vn -0.780328 -0.625324 -0.004334 +vn 0.215247 -0.303873 0.928068 +vn 0.835383 0.549577 0.007965 +vn -0.272347 0.257820 -0.927000 +vn -0.858150 -0.508377 0.071169 +vn 0.136937 -0.263924 0.954741 +vn 0.936369 0.348613 -0.040620 +vn 0.085269 -0.101474 0.991150 +vn -0.195135 0.135990 -0.971282 +vn -0.945738 -0.294290 0.137516 +vn 0.971282 0.214118 -0.103519 +vn 0.087497 0.010743 0.996094 +vn -0.136967 0.050935 -0.989257 +vn -0.983123 -0.145665 0.110477 +vn 0.985961 0.148198 -0.076479 +vn -0.117832 -0.019196 -0.992828 +vn -0.987793 -0.075259 0.136143 +vn 0.086276 0.086123 0.992523 +vn 0.631306 -0.002289 -0.775506 +vn 0.762688 0.171972 0.623463 +vn -0.769616 -0.122929 -0.626514 +vn -0.634938 0.051363 0.770806 +vn -0.189093 0.275521 -0.942473 +vn -0.176244 0.448744 -0.876095 +vn 0.963897 0.061586 -0.258980 +vn -0.957335 0.006226 0.288797 +vn -0.989135 0.062716 0.132756 +vn 0.191931 -0.219153 0.956603 +vn 0.180670 -0.396954 0.899869 +vn 0.994659 0.006226 -0.102847 +vn -0.142155 0.689352 -0.710288 +vn -0.981780 0.052919 0.182379 +vn 0.150212 -0.644215 0.749931 +vn 0.976318 0.055330 -0.209113 +vn -0.211524 0.740532 -0.637806 +vn 0.944304 -0.145207 -0.295236 +vn -0.920316 0.153844 0.359569 +vn 0.057955 -0.675619 0.734947 +vn -0.085391 0.801752 -0.591510 +vn 0.814142 -0.243049 -0.527329 +vn -0.790521 0.384869 0.476302 +vn 0.074801 -0.750084 0.657063 +vn -0.011719 0.817286 -0.576067 +vn -0.767876 0.308023 0.561632 +vn 0.075961 -0.800317 0.594684 +vn 0.808466 -0.349925 -0.473190 +vn -0.023682 0.759606 -0.649922 +vn 0.899960 -0.209784 -0.382153 +vn -0.873012 0.249428 0.419050 +vn 0.165563 -0.752220 0.637745 +vn -0.144780 0.627064 -0.765374 +vn -0.921842 0.061769 0.382580 +vn 0.191626 -0.584918 0.788079 +vn 0.970946 -0.135258 -0.197302 +vn -0.181616 0.379864 -0.907010 +vn 0.979797 0.017090 -0.199225 +vn -0.961150 0.014924 0.275491 +vn 0.256020 -0.325938 0.910031 +vn -0.261849 0.111698 -0.958586 +vn 0.990234 0.044801 -0.131901 +vn -0.947356 -0.000092 0.320170 +vn 0.209571 -0.053224 0.976318 +vn -0.848323 -0.046876 -0.527360 +vn 0.516617 -0.098453 -0.850520 +vn -0.512619 0.139500 0.847194 +vn 0.844264 0.089084 0.528428 +vn -0.439436 0.804468 0.399579 +vn -0.314432 0.905271 0.285562 +vn -0.611408 -0.059053 -0.789087 +vn 0.727592 -0.059053 0.683432 +vn 0.657063 0.090945 0.748314 +vn 0.468978 -0.773400 -0.426435 +vn 0.347728 -0.882595 -0.316324 +vn -0.682150 0.091494 -0.725455 +vn -0.051119 0.997620 0.045595 +vn -0.657521 0.078799 -0.749290 +vn 0.683950 0.078097 0.725303 +vn 0.087039 -0.993042 -0.079043 +vn 0.114963 0.988708 -0.095981 +vn -0.642842 0.003693 -0.765984 +vn 0.701407 0.018067 0.712485 +vn -0.062288 -0.996979 0.045808 +vn 0.504379 0.658895 -0.558061 +vn 0.979247 -0.201086 -0.025056 +vn 0.189459 -0.849391 0.492538 +vn -0.741844 0.554491 -0.377087 +vn 0.093936 0.511673 -0.853999 +vn -0.357646 0.717429 0.597797 +vn 0.350261 -0.793603 -0.497452 +vn -0.043794 -0.635975 0.770440 +vn 0.303720 0.525834 -0.794488 +vn -0.058016 0.734550 0.676046 +vn -0.034730 -0.804498 -0.592883 +vn -0.351848 -0.649220 0.674306 +vn 0.383892 0.506699 -0.771905 +vn 0.332072 0.647359 0.686026 +vn -0.362774 -0.605457 -0.708365 +vn -0.488968 -0.591815 0.640797 +vn 0.454787 0.495743 -0.739830 +vn -0.609302 -0.431623 -0.665120 +vn -0.536851 -0.494583 0.683493 +vn 0.526811 0.420240 0.738792 +vn 0.609210 0.301248 -0.733543 +vn -0.696463 -0.303140 -0.650380 +vn -0.658132 -0.267861 0.703635 +vn 0.592944 0.313089 0.741844 +vn 0.012848 -0.063478 -0.997894 +vn 0.950316 0.310923 -0.013398 +vn -0.960967 -0.276254 0.012879 +vn -0.028230 0.096713 0.994903 +vn -0.330638 0.685934 0.648183 +vn -0.325510 0.697775 0.638050 +vn -0.881802 0.009949 -0.471480 +vn 0.899350 0.009949 0.437086 +vn 0.894559 0.019990 0.446455 +vn 0.343028 -0.655782 -0.672475 +vn 0.338389 -0.667684 -0.663045 +vn -0.886685 0.019990 -0.461867 +vn -0.283151 0.780480 0.557329 +vn 0.883969 0.052339 0.464583 +vn 0.299783 -0.750542 -0.588885 +vn -0.895108 0.050264 -0.442915 +vn -0.378155 0.802210 0.461959 +vn -0.728294 0.169012 -0.664052 +vn 0.777795 -0.215522 0.590381 +vn 0.205420 -0.730796 -0.650929 +vn -0.350993 0.709098 0.611499 +vn 0.570757 -0.357982 0.738945 +vn 0.381634 -0.689718 -0.615284 +vn -0.539506 0.369732 -0.756432 +vn -0.433393 0.605121 0.667776 +vn -0.564043 0.290323 -0.773003 +vn 0.646962 -0.330271 0.687277 +vn 0.498764 -0.593402 -0.631703 +vn -0.640858 0.298532 0.707205 +vn -0.574175 0.214331 -0.790155 +vn 0.731925 -0.239479 0.637867 +vn 0.673391 -0.268654 -0.688711 +vn -0.714469 0.060854 0.696982 +vn 0.676962 -0.158879 0.718619 +vn 0.733787 -0.024140 -0.678915 +vn -0.667318 0.199011 -0.717673 +vn -0.673421 -0.054903 0.737175 +vn 0.712638 0.031007 0.700797 +vn 0.773705 0.097049 -0.626057 +vn -0.638325 0.017823 -0.769524 +vn -0.735649 -0.131077 0.664510 +vn -0.681753 -0.117710 -0.722007 +vn 0.645131 0.151341 0.748894 +vn 0.703726 0.165777 -0.690817 +vn -0.043184 0.007172 0.999023 +vn -0.991028 -0.127079 -0.040651 +vn 0.986969 0.155492 0.040773 +vn 0.037446 0.021027 -0.999054 +vn -0.103946 0.458937 0.882351 +vn -0.106967 0.405957 0.907590 +vn -0.988067 0.017792 -0.152898 +vn 0.990814 0.039308 0.129246 +vn 0.996551 0.017853 0.080721 +vn 0.106998 -0.404736 -0.908139 +vn 0.109684 -0.349895 -0.930326 +vn -0.993713 0.039308 -0.104556 +vn -0.105289 0.435621 0.893918 +vn 0.988708 0.045198 0.142735 +vn 0.108585 -0.379925 -0.918607 +vn -0.994873 0.044923 -0.090457 +vn -0.091311 0.619037 0.780023 +vn 0.987976 0.057405 0.143406 +vn 0.095706 -0.571306 -0.815088 +vn -0.994140 0.057466 -0.091281 +vn 0.035981 0.714469 0.698691 +vn 0.959166 0.257393 -0.116947 +vn 0.227912 -0.600482 -0.766442 +vn -0.970367 -0.236763 0.047884 +vn -0.097934 0.593310 0.798975 +vn -0.874783 -0.435499 0.212226 +vn 0.849055 0.436689 -0.297189 +vn 0.024567 -0.574053 -0.818415 +vn -0.031922 0.522904 0.851772 +vn 0.887600 0.392773 -0.240455 +vn -0.016572 -0.484695 -0.874508 +vn -0.913755 -0.361827 0.184576 +vn 0.136509 0.313883 0.939573 +vn -0.904965 -0.411664 0.107273 +vn 0.852870 0.405560 -0.328806 +vn -0.108127 -0.235633 -0.965789 +vn 0.117710 0.027131 0.992676 +vn 0.924558 0.309763 -0.221809 +vn -0.311167 -0.020325 -0.950133 +vn -0.945311 -0.250923 0.208289 +vn 0.262246 -0.028565 0.964568 +vn 0.953032 0.170537 -0.250160 +vn -0.208319 0.095798 -0.973327 +vn -0.974944 -0.108310 0.194220 +vn 0.844783 0.075747 0.529649 +vn -0.505173 -0.221137 0.834193 +vn 0.497848 0.262185 -0.826655 +vn -0.850032 -0.033479 -0.525651 +vn 0.004700 0.238472 -0.971129 +vn 0.004730 0.184790 -0.982757 +vn 0.999512 0.026704 -0.015687 +vn -0.999298 0.026704 -0.025361 +vn -0.999573 0.017243 0.023316 +vn -0.004730 -0.196356 0.980499 +vn -0.004822 -0.142308 0.989807 +vn 0.999298 0.017121 0.032929 +vn 0.004730 0.104038 -0.994537 +vn 0.999603 0.020783 0.018372 +vn -0.999725 0.020447 0.008515 +vn -0.004761 -0.060823 0.998108 +vn -0.012665 0.161168 -0.986816 +vn 0.999207 -0.018159 -0.035371 +vn -0.996826 0.072237 -0.032991 +vn -0.026795 -0.115543 0.992920 +vn 0.007111 0.390210 -0.920682 +vn 0.990661 -0.104190 -0.087588 +vn -0.980407 0.195227 -0.025880 +vn -0.057588 -0.341533 0.938078 +vn 0.061434 0.449232 -0.891263 +vn -0.979919 0.180670 0.084078 +vn -0.023133 -0.416547 0.908811 +vn 0.984558 -0.174932 0.002380 +vn 0.045595 0.189123 -0.980865 +vn -0.991211 0.083041 0.102664 +vn 0.024567 -0.151311 0.988159 +vn 0.994476 -0.069735 0.078127 +vn 0.009735 0.119816 -0.992737 +vn 0.998016 0.039125 -0.049226 +vn -0.998108 0.014069 -0.059725 +vn 0.004303 -0.077944 0.996918 +vn -0.035340 0.101016 -0.994232 +vn -0.995514 0.066713 0.066836 +vn -0.034181 -0.053713 0.997955 +vn 0.996826 -0.033235 0.072085 +vn 0.090030 0.078921 -0.992798 +vn 0.993255 0.108310 -0.041200 +vn -0.995544 -0.059755 -0.072878 +vn 0.099246 -0.019501 0.994842 +vn -0.697104 -0.072420 -0.713279 +vn 0.661000 0.348827 -0.664327 +vn -0.668569 -0.320841 0.670827 +vn 0.692953 0.103580 0.713462 +vn -0.198767 0.395093 0.896847 +vn -0.192541 0.457656 0.868007 +vn -0.968078 0.001648 -0.250618 +vn 0.983306 0.001648 0.181860 +vn 0.971221 0.027558 0.236488 +vn 0.201239 -0.367504 -0.907956 +vn 0.195654 -0.429853 -0.881436 +vn -0.980285 0.027619 -0.195502 +vn -0.160222 0.674032 0.721061 +vn 0.960418 0.069094 0.269814 +vn 0.164708 -0.651631 -0.740410 +vn -0.984497 0.069979 -0.160741 +vn -0.127415 0.812860 0.568316 +vn -0.974181 0.014618 -0.225227 +vn 0.978484 0.012329 0.205908 +vn 0.132694 -0.794488 -0.592547 +vn 0.143406 0.748619 0.647267 +vn 0.916562 0.313944 -0.247658 +vn 0.283914 -0.569811 -0.771142 +vn -0.897671 -0.436445 0.060335 +vn 0.026124 0.516526 0.855861 +vn -0.604755 -0.670705 0.429365 +vn 0.582080 0.677206 -0.450026 +vn -0.060549 -0.515061 -0.855007 +vn 0.077303 0.411206 0.908231 +vn -0.730522 -0.584094 0.353710 +vn 0.695944 0.561693 -0.447340 +vn -0.189123 -0.463576 -0.865627 +vn 0.284738 0.269143 0.920011 +vn 0.766442 0.474044 -0.433332 +vn -0.290201 -0.237800 -0.926939 +vn -0.817316 -0.479629 0.319224 +vn 0.287179 0.071688 0.955168 +vn -0.879971 -0.311899 0.358226 +vn 0.853420 0.335643 -0.398663 +vn -0.442274 -0.097995 -0.891476 +vn 0.308817 0.045839 0.949980 +vn 0.924284 -0.005158 -0.381634 +vn -0.444533 -0.013092 -0.895657 +vn -0.926725 0.034577 0.374065 +vn 0.915281 -0.105045 0.388806 +vn -0.383374 0.156529 0.910215 +vn 0.384472 -0.135563 -0.913114 +vn -0.912748 0.126011 -0.388562 +vn -0.422315 0.902829 0.080599 +vn -0.398022 0.914212 0.075961 +vn -0.167730 -0.004151 -0.985809 +vn 0.207160 -0.004151 0.978271 +vn 0.196753 0.017975 0.980285 +vn 0.450697 -0.888485 -0.086032 +vn 0.426801 -0.900662 -0.081454 +vn -0.178137 0.017975 -0.983825 +vn -0.372173 0.925504 0.069796 +vn -0.170446 0.008179 -0.985321 +vn 0.206244 0.005982 0.978454 +vn 0.406354 -0.910520 -0.076022 +vn -0.319254 0.939879 -0.121189 +vn 0.253090 0.185827 -0.949400 +vn -0.227363 -0.177587 0.957457 +vn 0.444258 -0.856563 -0.262459 +vn -0.316324 0.941771 0.113804 +vn 0.643880 0.341960 -0.684408 +vn -0.642109 -0.280557 0.713401 +vn 0.351939 -0.930143 -0.104465 +vn -0.402783 0.912107 0.075961 +vn -0.581286 -0.363231 0.728111 +vn 0.395947 -0.918119 -0.016602 +vn 0.662160 0.239265 -0.710105 +vn -0.622272 0.727378 -0.289254 +vn -0.527390 -0.397534 0.750847 +vn 0.676687 -0.688101 0.261849 +vn 0.714988 0.229835 -0.660268 +vn -0.762810 0.452864 -0.461501 +vn -0.621357 -0.333201 0.709128 +vn 0.745567 -0.437666 0.502518 +vn 0.660207 0.339854 -0.669759 +vn -0.815699 0.234962 -0.528550 +vn 0.693533 0.185766 -0.696036 +vn -0.560076 -0.194037 0.805383 +vn 0.748436 -0.225532 0.623615 +vn -0.814905 0.000000 -0.579577 +vn -0.594775 0.043397 0.802698 +vn 0.760613 0.034516 0.648274 +vn 0.639729 -0.010285 -0.768517 +vn -0.991852 0.043306 0.119724 +vn -0.120823 -0.134648 -0.983490 +vn 0.120579 0.157079 0.980163 +vn 0.992492 -0.020356 -0.120548 +vn 0.462600 0.340190 -0.818659 +vn 0.423231 0.509110 -0.749413 +vn 0.899747 0.054689 0.432936 +vn -0.910489 -0.014130 -0.413221 +vn -0.834925 0.055147 -0.547533 +vn -0.467452 -0.311563 0.827265 +vn -0.430403 -0.483535 0.762169 +vn 0.823756 -0.014130 0.566759 +vn 0.385052 0.621754 -0.681997 +vn -0.883999 -0.002747 -0.467422 +vn -0.393963 -0.598407 0.697623 +vn 0.856288 -0.003021 0.516434 +vn 0.392621 0.603351 -0.694113 +vn 0.871212 0.020936 0.490432 +vn -0.869900 0.020508 -0.492752 +vn -0.401898 -0.577654 0.710440 +vn 0.373577 0.747276 -0.549486 +vn -0.774132 -0.070620 -0.629017 +vn -0.253365 -0.700674 0.666921 +vn 0.804224 0.195166 0.561327 +vn 0.252907 0.789026 -0.559862 +vn -0.710532 -0.261910 -0.653066 +vn -0.285836 -0.777154 0.560625 +vn 0.674490 0.230384 0.701376 +vn 0.343486 0.699759 -0.626331 +vn 0.699179 0.203955 0.685171 +vn -0.742759 -0.230140 -0.628742 +vn -0.377758 -0.682882 0.625233 +vn 0.380444 0.552568 -0.741508 +vn 0.779229 0.056520 0.624165 +vn -0.836970 -0.086032 -0.540391 +vn -0.511765 -0.537950 0.669820 +vn 0.529191 0.313730 -0.788354 +vn -0.883663 0.041963 -0.466201 +vn -0.512223 -0.286355 0.809687 +vn 0.804865 -0.056734 0.590716 +vn 0.535661 0.105533 -0.837794 +vn 0.830531 -0.009247 0.556841 +vn -0.856502 0.035554 -0.514878 +vn -0.535813 -0.075076 0.840968 +vn -0.216956 0.052950 -0.974731 +vn 0.975951 0.022645 -0.216681 +vn -0.975829 -0.000946 0.218421 +vn 0.216132 -0.031220 0.975860 +vn 0.710807 0.446760 0.543260 +vn 0.655080 0.565691 0.500778 +vn -0.569506 0.043458 0.820826 +vn 0.556566 -0.018464 -0.830561 +vn 0.642506 0.043275 -0.765038 +vn -0.718070 -0.427900 -0.548814 +vn -0.664266 -0.548509 -0.507767 +vn -0.655324 -0.018464 0.755089 +vn 0.553819 0.717795 0.421918 +vn -0.601611 0.027192 0.798303 +vn 0.612842 0.029328 -0.789636 +vn -0.570208 -0.697043 -0.434675 +vn 0.401013 0.672903 0.621570 +vn -0.822016 0.329356 0.464522 +vn 0.685903 -0.435163 -0.583209 +vn -0.752098 -0.506485 -0.421644 +vn 0.572497 0.506546 0.644673 +vn 0.703818 -0.705985 -0.078555 +vn -0.605914 -0.459517 -0.649342 +vn -0.676199 0.730674 0.093936 +vn 0.618885 0.413495 0.667806 +vn 0.703665 -0.686728 -0.182165 +vn -0.516312 -0.488784 -0.703177 +vn -0.744438 0.659261 0.105625 +vn 0.610187 0.306253 0.730644 +vn 0.824580 -0.398480 -0.401563 +vn -0.431257 -0.373333 -0.821345 +vn -0.847530 0.397839 0.351268 +vn 0.531816 0.201453 0.822504 +vn -0.886624 0.122227 0.445998 +vn 0.839412 -0.119907 -0.530045 +vn -0.481002 -0.187964 -0.856319 +vn 0.513138 0.097690 0.852718 +vn 0.861721 -0.026460 -0.506638 +vn -0.497452 -0.077395 -0.864009 +vn -0.863796 0.047090 0.501572 +vn 0.512040 0.016633 0.858791 +vn -0.879910 0.011536 0.474960 +vn 0.844386 0.009186 -0.535600 +vn -0.500351 0.004486 -0.865780 +vn 0.967071 -0.033784 0.252174 +vn -0.251625 -0.053529 0.966308 +vn 0.251350 0.068453 -0.965453 +vn -0.966460 0.048769 -0.252083 +vn 0.779107 0.516923 0.354595 +vn 0.722160 0.608600 0.328654 +vn -0.383465 0.039491 0.922697 +vn 0.367687 -0.015748 -0.929807 +vn 0.443861 0.039491 -0.895199 +vn -0.790094 -0.496384 -0.359569 +vn -0.734916 -0.589892 -0.334483 +vn -0.459578 -0.015748 0.887967 +vn 0.675283 0.670431 0.307321 +vn 0.396924 -0.000671 -0.917814 +vn -0.689749 -0.652425 -0.313913 +vn -0.431349 -0.000671 0.902158 +vn 0.569842 0.779839 0.259072 +vn -0.372845 0.074740 0.924863 +vn 0.452406 0.075350 -0.888607 +vn -0.589343 -0.762108 -0.268014 +vn 0.305979 0.927671 0.213874 +vn 0.610187 -0.090152 -0.787072 +vn -0.462447 -0.885617 -0.042268 +vn -0.597217 0.168004 0.784265 +vn 0.347301 0.933561 0.088382 +vn 0.751640 -0.232917 -0.617054 +vn -0.354076 -0.928739 -0.109684 +vn -0.773370 0.212897 0.597125 +vn 0.450453 0.866634 0.214484 +vn -0.774468 0.154149 0.613483 +vn 0.703940 -0.256752 -0.662191 +vn -0.439131 -0.862209 -0.252388 +vn 0.665365 0.736290 0.122868 +vn 0.364666 0.109592 -0.924650 +vn -0.510788 -0.665426 -0.544267 +vn -0.438643 -0.157750 0.884671 +vn 0.758538 0.509384 0.406323 +vn 0.051363 0.386486 -0.920835 +vn -0.786767 -0.539354 -0.300088 +vn -0.174169 -0.443525 0.879147 +vn 0.803644 0.448927 0.390576 +vn -0.252022 -0.182531 0.950316 +vn 0.286843 0.228492 -0.930296 +vn -0.849208 -0.454207 -0.269326 +vn 0.797266 0.421461 -0.432081 +vn 0.315836 0.305918 0.898129 +vn -0.325022 -0.291879 -0.899503 +vn -0.804956 -0.406171 0.432478 +vn -0.689566 0.657247 0.304117 +vn -0.715018 0.623920 0.315348 +vn -0.382611 -0.002869 -0.923887 +vn 0.396283 0.021821 0.917844 +vn 0.424238 -0.002869 0.905515 +vn 0.703269 -0.639668 -0.310160 +vn 0.728202 -0.605396 -0.321177 +vn -0.410565 0.021821 -0.911557 +vn -0.684103 0.664357 0.301004 +vn 0.380749 0.037263 0.923887 +vn 0.698569 -0.646199 -0.307199 +vn -0.426405 0.038270 -0.903714 +vn -0.599780 0.787866 0.139470 +vn -0.157903 0.260506 -0.952452 +vn 0.154393 -0.217750 0.963683 +vn 0.569353 -0.697562 -0.434950 +vn -0.415021 0.858455 0.301218 +vn -0.226661 -0.381420 0.896146 +vn 0.449507 -0.820276 -0.353587 +vn 0.189795 0.499191 -0.845424 +vn -0.290078 0.875790 0.385754 +vn 0.288675 0.461684 -0.838710 +vn -0.263771 -0.459426 0.848109 +vn 0.313883 -0.872463 -0.374523 +vn -0.353130 0.935514 -0.007324 +vn -0.492599 -0.733757 0.467849 +vn 0.692343 -0.689322 -0.213141 +vn 0.728507 0.459487 -0.508042 +vn -0.737907 0.576495 -0.350902 +vn 0.773461 0.619068 -0.135929 +vn -0.680471 -0.702628 0.207923 +vn 0.627094 -0.670675 0.396069 +vn -0.557756 0.491714 -0.668661 +vn -0.681997 -0.668722 0.296060 +vn 0.621570 -0.416761 0.663228 +vn 0.778710 0.605335 -0.164739 +vn -0.528520 0.302225 -0.793268 +vn 0.713248 0.678518 -0.175573 +vn -0.714103 -0.669362 0.204749 +vn 0.486099 -0.316416 0.814570 +vn -0.875942 -0.239570 -0.418653 +vn 0.166326 0.666585 -0.726615 +vn -0.174078 -0.655080 0.735221 +vn 0.868313 0.250618 0.427992 +vn -0.632435 0.773614 -0.038881 +vn -0.574023 0.818049 -0.035279 +vn 0.091128 -0.019135 -0.995636 +vn -0.031556 -0.019135 0.999298 +vn -0.072085 0.033143 0.996826 +vn 0.648640 -0.760033 0.039888 +vn 0.591205 -0.805689 0.036348 +vn 0.050600 0.033143 -0.998138 +vn -0.559679 0.827967 -0.034394 +vn 0.085116 -0.014924 -0.996246 +vn -0.037599 -0.014924 0.999176 +vn 0.577837 -0.815363 0.035524 +vn -0.456832 0.889126 -0.026917 +vn -0.086245 0.077303 0.993255 +vn 0.480483 -0.876522 0.027802 +vn 0.037049 0.074709 -0.996490 +vn -0.198462 0.951933 0.233253 +vn 0.630451 0.297494 0.716941 +vn 0.621906 -0.747337 0.233772 +vn -0.519761 -0.471236 -0.712546 +vn -0.544084 0.821986 0.168096 +vn -0.834773 -0.549089 -0.040345 +vn 0.855251 0.518021 0.013733 +vn 0.519974 -0.832942 -0.189093 +vn -0.567309 0.730430 0.380261 +vn -0.812738 -0.542802 -0.211615 +vn 0.897946 0.422254 0.123905 +vn 0.471297 -0.776269 -0.418592 +vn -0.629749 0.636341 0.445479 +vn 0.812922 0.257912 0.522080 +vn 0.407849 -0.684591 -0.604114 +vn -0.824671 -0.220710 -0.520737 +vn -0.559008 0.584490 0.588061 +vn 0.762230 -0.034791 0.646352 +vn 0.567614 -0.568407 -0.595569 +vn -0.679312 -0.025758 -0.733390 +vn -0.652394 0.261452 0.711325 +vn 0.790918 0.008789 0.611835 +vn 0.674490 -0.240486 -0.697989 +vn -0.661153 -0.035707 -0.749352 +vn 0.026826 0.071108 0.997101 +vn -0.998871 0.001221 0.046999 +vn 0.998657 0.013367 -0.049837 +vn -0.024415 -0.056246 -0.998108 +vn 0.622150 0.550005 -0.557085 +vn 0.559038 0.660878 -0.500687 +vn 0.696371 0.048524 0.715995 +vn -0.710105 -0.026551 -0.703543 +vn -0.634999 0.048677 -0.770959 +vn -0.630177 -0.533311 0.564257 +vn -0.568560 -0.646046 0.509232 +vn 0.621143 -0.026551 0.783197 +vn 0.505997 0.733787 -0.453291 +vn -0.681204 -0.005982 -0.732047 +vn -0.516617 -0.720359 0.462752 +vn 0.652486 -0.006165 0.757744 +vn 0.564013 0.709372 -0.422620 +vn -0.596820 -0.087283 -0.797571 +vn -0.505020 -0.683432 0.527085 +vn 0.583270 0.100314 0.806024 +vn 0.524003 0.710501 -0.469649 +vn 0.496506 0.200568 0.844539 +vn -0.505051 -0.180212 -0.844020 +vn -0.536363 -0.696310 0.476882 +vn 0.577563 0.641621 -0.504685 +vn -0.549883 -0.193884 -0.812403 +vn -0.603046 -0.631123 0.487838 +vn 0.482253 0.149266 0.863186 +vn 0.698752 0.538560 -0.470779 +vn -0.485641 -0.245003 -0.839106 +vn -0.661489 -0.496658 0.561907 +vn 0.446028 0.240120 0.862178 +vn 0.725181 0.429182 -0.538408 +vn 0.397961 0.299203 0.867214 +vn -0.450148 -0.306101 -0.838832 +vn -0.752739 -0.424146 0.503433 +vn 0.859920 0.249794 -0.445082 +vn -0.468398 -0.366894 -0.803705 +vn -0.828639 -0.196112 0.524247 +vn 0.332133 0.351756 0.875149 +vn 0.871364 0.038423 -0.489059 +vn 0.389935 0.361248 0.847011 +vn -0.406690 -0.343181 -0.846644 +vn -0.917203 -0.056520 0.394330 +vn 0.334849 -0.140873 -0.931669 +vn 0.929075 0.200323 0.310923 +vn -0.930601 -0.186743 -0.314737 +vn -0.337962 0.154332 0.928404 +vn -0.501328 0.853511 0.141942 +vn -0.405957 0.906613 0.114933 +vn -0.183142 -0.006104 -0.983062 +vn 0.359416 -0.006104 0.933134 +vn 0.307108 0.079867 0.948302 +vn 0.612110 -0.771508 -0.173315 +vn 0.525742 -0.837489 -0.148869 +vn -0.235664 0.079867 -0.968535 +vn -0.424909 0.897183 0.120304 +vn -0.179052 -0.020936 -0.983612 +vn 0.363201 -0.020936 0.931455 +vn 0.545000 -0.824061 -0.154332 +vn -0.699271 0.686850 0.198004 +vn -0.155889 -0.005768 -0.987732 +vn 0.385113 -0.005768 0.922849 +vn 0.786401 -0.576128 -0.222663 +vn -0.828181 0.509018 0.234504 +vn 0.300699 0.064516 0.951506 +vn 0.888760 -0.383068 -0.251656 +vn -0.242805 0.064516 -0.967895 +vn -0.837001 0.493149 0.237007 +vn -0.232887 0.059603 -0.970672 +vn 0.310587 0.059603 0.948668 +vn 0.895962 -0.364483 -0.253700 +vn -0.931944 0.248604 0.263894 +vn -0.151952 0.052522 -0.986969 +vn 0.388073 0.052522 0.920103 +vn 0.956786 -0.105441 -0.270913 +vn -0.494766 -0.008148 0.868984 +vn -0.876919 -0.008148 -0.480544 +vn 0.877499 0.107974 0.467238 +vn 0.502243 0.107974 -0.857936 +vn -0.234107 0.714316 -0.659474 +vn -0.278024 0.556749 -0.782739 +vn 0.923124 0.124790 -0.363628 +vn -0.945769 0.124790 0.299875 +vn -0.896207 0.015015 0.443342 +vn 0.265023 -0.610279 0.746513 +vn 0.300729 -0.435347 0.848537 +vn 0.974914 0.013855 -0.222083 +vn -0.323069 0.259957 -0.909940 +vn 0.959624 0.061281 -0.274422 +vn -0.917905 0.058443 0.392407 +vn 0.331339 -0.122013 0.935575 +vn -0.394116 0.037843 -0.918241 +vn 0.956542 -0.043428 -0.288308 +vn -0.905057 0.189154 0.380840 +vn 0.306101 0.116306 0.944853 +vn -0.898953 0.104129 -0.425428 +vn 0.398633 -0.237403 -0.885830 +vn -0.382031 0.332408 0.862270 +vn 0.908963 -0.002686 0.416852 +vn -0.519761 0.547746 0.655568 +vn -0.550157 0.464553 0.693899 +vn -0.737541 0.047304 -0.673605 +vn 0.774865 0.086550 0.626148 +vn 0.824061 0.047273 0.564501 +vn 0.562639 -0.424085 -0.709616 +vn 0.585498 -0.334422 -0.738456 +vn -0.786340 0.086550 -0.611682 +vn 0.145848 0.262185 0.953917 +vn -0.962035 0.262185 0.075472 +vn 0.980041 -0.167943 -0.106296 +vn -0.119968 -0.167943 -0.978454 +vn -0.605579 0.312571 -0.731803 +vn -0.972808 0.221290 -0.067904 +vn 0.115329 0.221290 -0.968352 +vn -0.757378 0.069002 0.649281 +vn -0.099643 -0.123569 0.987304 +vn 0.627705 -0.174535 0.758599 +vn 0.988495 -0.123569 0.086856 +vn 0.779534 0.069002 -0.622517 +vn -0.009339 0.909543 0.415448 +vn -0.012604 0.850551 0.525712 +vn -0.993469 -0.005982 -0.113895 +vn 0.995788 0.091281 -0.006897 +vn 0.997681 -0.007355 -0.067537 +vn 0.012085 -0.843776 -0.536485 +vn 0.014008 -0.769127 -0.638905 +vn -0.994446 0.091281 -0.051790 +vn -0.018220 0.669851 0.742241 +vn 0.997101 0.013001 -0.074679 +vn 0.017701 -0.560015 -0.828272 +vn -0.992828 0.012513 -0.118778 +vn -0.021241 0.436659 0.899350 +vn 0.997436 0.043764 -0.056307 +vn 0.020600 -0.308054 -0.951140 +vn -0.993957 0.042817 -0.100803 +vn -0.022828 0.172552 0.984710 +vn 0.996643 0.062838 -0.052278 +vn 0.022034 -0.034669 -0.999146 +vn -0.993378 0.061495 -0.096896 +vn -0.022462 0.043153 0.998810 +vn 0.996918 0.069063 0.036836 +vn 0.022095 0.094852 -0.995239 +vn -0.997589 0.068545 -0.008484 +vn 0.689291 0.050935 0.722648 +vn -0.721152 0.050935 0.690848 +vn 0.722526 0.047426 -0.689688 +vn -0.690695 0.047426 -0.721549 +vn -0.214057 0.974975 -0.059633 +vn -0.302805 0.949278 -0.084353 +vn 0.317606 0.067598 -0.945799 +vn -0.217231 0.067598 0.973754 +vn -0.189428 -0.014710 0.981780 +vn 0.341594 -0.934996 0.095187 +vn 0.426191 -0.896786 0.118748 +vn 0.345561 -0.014710 -0.938261 +vn -0.400159 0.909635 -0.111484 +vn -0.207648 0.030732 0.977691 +vn 0.517716 -0.843287 0.144230 +vn 0.327830 0.030732 -0.944212 +vn -0.476791 0.641957 0.600421 +vn -0.097568 0.641957 -0.760491 +vn 0.180792 -0.594684 0.783349 +vn 0.559832 -0.594653 -0.576983 +vn -0.500687 0.531846 0.682943 +vn 0.215094 0.376507 0.901059 +vn -0.924039 0.376537 0.065920 +vn 0.823908 0.061251 0.563372 +vn 0.951476 -0.289773 -0.103336 +vn 0.539445 -0.409284 -0.735801 +vn -0.187658 -0.289773 -0.938505 +vn -0.785150 0.061251 -0.616260 +vn -0.111332 0.881344 0.459151 +vn -0.077212 0.945280 0.316904 +vn -0.946532 -0.041414 -0.319834 +vn 0.987915 -0.041414 0.149205 +vn 0.972930 0.087741 0.213660 +vn 0.132694 -0.826380 -0.547227 +vn 0.100009 -0.905789 -0.411695 +vn -0.962584 0.088473 -0.256050 +vn -0.055788 0.971831 0.228828 +vn -0.955779 -0.017182 -0.293497 +vn 0.984313 -0.017487 0.175512 +vn 0.079653 -0.941649 -0.326945 +vn -0.092593 0.918088 0.385357 +vn -0.953490 -0.014679 -0.301004 +vn 0.985412 -0.014252 0.169408 +vn 0.116550 -0.869716 -0.479568 +vn -0.145817 0.782983 0.604694 +vn -0.946074 -0.020325 -0.323252 +vn 0.988800 -0.020844 0.147771 +vn 0.165410 -0.711692 -0.682699 +vn -0.176031 0.664174 0.726524 +vn 0.978210 0.042146 0.203192 +vn 0.191351 -0.581225 -0.790918 +vn -0.962676 0.041292 -0.267403 +vn -0.180578 0.642232 0.744896 +vn -0.960112 0.034700 -0.277383 +vn 0.980529 0.034639 0.193213 +vn 0.195807 -0.556291 -0.807550 +vn 0.556047 0.436872 0.707053 +vn -0.818140 0.436872 0.373821 +vn 0.827509 -0.375347 -0.417463 +vn -0.544389 -0.375347 -0.750145 +vn 0.003662 0.992920 -0.118564 +vn 0.001495 0.998657 -0.051241 +vn -0.995911 -0.031037 -0.084811 +vn 0.999207 0.030457 -0.024873 +vn 0.999237 -0.031037 -0.022706 +vn -0.000336 -0.999908 0.011658 +vn 0.001648 -0.998413 -0.056032 +vn -0.995758 0.030457 -0.086612 +vn -0.003143 0.996490 0.083468 +vn 0.999359 -0.022187 -0.027314 +vn 0.006134 -0.981567 -0.190985 +vn -0.995849 -0.021485 -0.088382 +vn 0.131901 0.932707 0.335582 +vn 0.961486 0.008515 -0.274667 +vn 0.059023 -0.877041 -0.476760 +vn -0.984558 -0.149144 0.091617 +vn 0.695425 0.710074 0.110111 +vn -0.587237 0.449934 0.672811 +vn 0.557390 -0.407971 -0.723075 +vn -0.712729 -0.677541 -0.181494 +vn -0.399762 0.716392 0.571795 +vn -0.421125 0.678060 0.602344 +vn -0.787591 0.025666 -0.615619 +vn 0.827631 0.057619 0.558275 +vn 0.848628 0.025666 0.528336 +vn 0.441420 -0.637532 -0.631397 +vn 0.460341 -0.595386 -0.658437 +vn -0.808496 0.057619 -0.585620 +vn 0.266732 0.449507 0.852473 +vn -0.892239 0.449507 0.042146 +vn 0.917325 -0.389599 -0.081668 +vn -0.238258 -0.389599 -0.889615 +vn 0.146519 0.980163 -0.133335 +vn 0.579272 0.693564 0.428205 +vn -0.371868 0.693564 -0.616962 +vn 0.711386 -0.007782 0.702750 +vn 0.427503 -0.704611 0.566332 +vn -0.067934 -0.995758 0.061800 +vn -0.523637 -0.704611 -0.478835 +vn -0.632771 -0.007782 -0.774285 +vn -0.842738 0.520524 0.137242 +vn -0.931242 0.331248 0.151646 +vn -0.058107 0.011322 -0.998230 +vn 0.089572 0.087008 0.992157 +vn 0.261605 0.011322 0.965087 +vn 0.881863 -0.449080 -0.143590 +vn 0.954680 -0.253731 -0.155461 +vn -0.229835 0.087008 -0.969329 +vn -0.986755 -0.021088 0.160680 +vn 0.220496 0.045808 0.974303 +vn 0.981658 0.103732 -0.159856 +vn -0.100009 0.045808 -0.993927 +vn -0.986663 -0.025208 0.160680 +vn 0.094089 0.037477 0.994842 +vn 0.981170 0.108249 -0.159764 +vn -0.226417 0.037477 -0.973296 +vn -0.982604 0.094150 0.160009 +vn -0.146641 0.040559 -0.988342 +vn 0.174505 0.040559 0.983795 +vn 0.986908 -0.011872 -0.160710 +vn -0.974212 -0.160344 0.158635 +vn -0.067202 0.063326 -0.995697 +vn 0.252174 0.063326 0.965575 +vn 0.957213 0.243721 -0.155858 +vn -0.535661 -0.279305 0.796869 +vn -0.760826 -0.279336 -0.585711 +vn 0.741081 0.334941 0.581896 +vn 0.518143 0.334910 -0.786950 +vn -0.075381 0.995880 -0.050264 +vn 0.061251 0.997284 0.040803 +vn -0.594531 -0.069826 0.801019 +vn 0.514481 0.079012 -0.853816 +vn 0.511124 -0.069735 -0.856655 +vn 0.006867 -0.999939 0.004578 +vn -0.129765 -0.987762 -0.086428 +vn -0.590472 0.079012 0.803156 +vn 0.216803 0.965453 0.144475 +vn 0.519059 0.004364 -0.854701 +vn -0.282723 -0.940519 -0.188269 +vn -0.589343 0.003998 0.807855 +vn 0.556505 0.679037 -0.478683 +vn -0.227973 0.679037 0.697745 +vn 0.180883 -0.660726 -0.728477 +vn -0.602985 -0.660726 0.447005 +vn -0.170537 0.780572 0.601306 +vn 0.559282 0.552202 0.618244 +vn -0.800623 0.552202 0.232490 +vn 0.969787 0.027467 0.242317 +vn 0.812769 -0.513321 -0.275399 +vn 0.187750 -0.725639 -0.661946 +vn -0.547136 -0.513321 -0.661153 +vn -0.952605 0.027467 -0.302957 +vn 0.073214 0.997101 -0.019532 +vn 0.042299 0.999054 -0.009919 +vn 0.187750 0.023041 0.981933 +vn -0.327525 -0.003845 -0.944823 +vn -0.324809 0.021180 -0.945524 +vn -0.209937 -0.976104 0.056001 +vn -0.184545 -0.981597 0.048891 +vn 0.186651 -0.003845 0.982391 +vn 0.215705 0.974883 -0.055208 +vn -0.352489 -0.072451 -0.932981 +vn -0.351695 -0.931425 0.093417 +vn 0.161016 -0.070681 0.984405 +vn 0.419935 0.900601 -0.112033 +vn 0.200446 0.036287 0.979003 +vn -0.313883 0.036287 -0.948759 +vn -0.533952 -0.833399 0.142460 +vn 0.493301 0.859828 -0.131596 +vn -0.339152 0.005585 -0.940703 +vn -0.609638 -0.775780 0.162633 +vn 0.174505 0.005585 0.984619 +vn 0.742943 0.639271 -0.198218 +vn -0.379864 -0.003632 -0.925016 +vn -0.823145 -0.523606 0.219611 +vn 0.131382 -0.003632 0.991302 +vn 0.942595 0.219581 -0.251473 +vn 0.146031 0.055239 0.987732 +vn -0.365398 0.055239 -0.929197 +vn -0.963134 -0.079226 0.256966 +vn 0.506424 -0.015137 -0.862117 +vn 0.868587 -0.015137 0.495254 +vn -0.867794 0.115696 -0.483261 +vn -0.511704 0.115696 0.851314 +vn 0.004761 0.999969 0.003998 +vn 0.157994 0.978393 0.133213 +vn -0.711234 -0.069796 0.699454 +vn 0.588855 0.112217 -0.800378 +vn 0.565844 -0.070467 -0.821467 +vn -0.111698 -0.989288 -0.093631 +vn -0.263436 -0.939146 -0.220374 +vn -0.685232 0.112217 0.719596 +vn 0.455428 0.803613 0.383068 +vn 0.547014 -0.026643 -0.836665 +vn -0.539232 -0.711295 -0.450819 +vn -0.727287 -0.027924 0.685720 +vn 0.624683 0.511887 0.589648 +vn 0.594501 -0.032350 -0.803400 +vn -0.716361 -0.379986 -0.585131 +vn -0.744682 0.090091 0.661275 +vn 0.987518 0.147008 -0.056185 +vn 0.005280 0.340220 0.940306 +vn -0.034608 -0.245888 -0.968657 +vn -0.998291 -0.054231 0.020783 +vn 0.736167 0.661855 0.141270 +vn 0.825098 0.542283 0.158330 +vn -0.168676 0.104404 0.980102 +vn 0.206122 0.104404 -0.972930 +vn 0.093661 0.029359 -0.995148 +vn -0.820490 -0.549516 -0.157445 +vn -0.892392 -0.417463 -0.171270 +vn -0.281381 0.029359 0.959136 +vn 0.770470 0.283700 -0.570818 +vn 0.504410 0.283700 0.815516 +vn -0.546190 -0.191412 -0.815455 +vn -0.809290 -0.191412 0.555315 +vn 0.088778 0.797876 0.596210 +vn 0.761345 0.564898 0.318094 +vn -0.635609 0.564898 0.526139 +vn 0.978607 0.047090 -0.200171 +vn 0.624378 -0.498184 -0.601581 +vn -0.104648 -0.703665 -0.702750 +vn -0.772576 -0.498184 -0.393536 +vn -0.994476 0.047090 0.093631 +vn -0.068392 0.923185 -0.378155 +vn -0.078951 0.894620 -0.439711 +vn 0.988769 0.061007 -0.136204 +vn -0.973846 0.061007 0.218848 +vn -0.968627 0.004517 0.248360 +vn 0.088992 -0.865993 0.492019 +vn 0.099734 -0.828852 0.550462 +vn 0.994354 0.005493 -0.105808 +vn -0.109806 0.784143 -0.610767 +vn -0.963897 -0.000946 0.266152 +vn 0.127537 -0.696890 0.705710 +vn 0.995849 -0.002258 -0.090915 +vn -0.138554 0.626240 -0.767205 +vn 0.993469 0.032197 -0.109317 +vn -0.969085 0.029725 0.244911 +vn 0.151555 -0.520005 0.840571 +vn -0.163427 0.383587 -0.908902 +vn -0.958983 0.033784 0.281381 +vn 0.171697 -0.260598 0.950041 +vn 0.996704 0.032319 -0.074007 +vn -0.176427 0.131260 -0.975494 +vn 0.986877 0.062838 -0.148595 +vn -0.976348 0.061800 0.207068 +vn 0.177526 -0.003510 0.984100 +vn -0.821314 0.052187 -0.568041 +vn 0.570238 0.052187 -0.819788 +vn -0.567095 0.039277 0.822687 +vn 0.819391 0.039277 0.571825 +vn -0.019837 0.895688 0.444197 +vn -0.029054 0.762596 0.646199 +vn -0.985046 -0.034883 -0.168676 +vn 0.988464 0.142216 0.051973 +vn 0.996185 -0.035524 -0.079501 +vn 0.024659 -0.833003 -0.552660 +vn 0.032746 -0.673940 -0.738029 +vn -0.989166 0.142216 -0.036317 +vn -0.041810 0.376415 0.925474 +vn 0.996857 0.030122 -0.073000 +vn 0.042665 -0.255104 -0.965941 +vn -0.986511 0.028321 -0.161046 +vn 0.670125 0.105991 0.734611 +vn -0.732963 0.105991 0.671926 +vn 0.723289 -0.016785 -0.690329 +vn -0.658834 -0.016785 -0.752068 +vn 0.485214 0.751152 -0.447554 +vn -0.135441 0.531693 -0.836024 +vn 0.822382 0.531693 0.202399 +vn -0.710196 0.045747 -0.702475 +vn -0.869961 -0.466903 -0.158483 +vn -0.552446 -0.659597 0.509568 +vn 0.087832 -0.466903 0.879910 +vn 0.642933 0.045747 0.764519 +vn -0.051881 0.859737 0.508072 +vn -0.049013 0.875210 0.481216 +vn -0.988556 0.014008 -0.150029 +vn 0.998474 0.014008 0.052889 +vn 0.996979 0.037721 0.067721 +vn 0.060091 -0.806269 -0.588427 +vn 0.057527 -0.824091 -0.563494 +vn -0.990112 0.037507 -0.135075 +vn -0.052828 0.853725 0.517960 +vn -0.986938 -0.001099 -0.160985 +vn 0.999084 -0.001343 0.042543 +vn 0.060915 -0.799188 -0.597949 +vn -0.063967 0.778222 0.624683 +vn 0.998657 0.014283 0.049440 +vn 0.070833 -0.714011 -0.696524 +vn -0.988067 0.013947 -0.153233 +vn -0.069857 0.724479 0.685720 +vn 0.997864 0.027009 0.058992 +vn 0.076724 -0.653951 -0.752586 +vn -0.989257 0.026307 -0.143651 +vn -0.081698 0.588824 0.804071 +vn -0.982482 0.002747 -0.186224 +vn 0.999847 0.002380 0.017029 +vn 0.087405 -0.507523 -0.857173 +vn -0.093570 0.390088 0.915983 +vn 0.997864 0.034577 0.055208 +vn 0.096713 -0.299692 -0.949095 +vn -0.988433 0.034028 -0.147649 +vn 0.635334 0.228278 0.737693 +vn -0.771355 0.228278 0.594012 +vn 0.771111 -0.163121 -0.615406 +vn -0.630787 -0.163121 -0.758599 +vn 0.014985 0.998627 -0.049867 +vn -0.035127 0.992523 0.116703 +vn -0.935667 -0.070467 -0.345744 +vn 0.966826 0.087130 0.240059 +vn 0.970946 -0.070376 0.228675 +vn 0.012452 -0.999054 -0.041444 +vn 0.062075 -0.976318 -0.207129 +vn -0.938749 0.087130 -0.333323 +vn -0.110050 0.924619 0.364635 +vn 0.973266 -0.015198 0.229041 +vn 0.134770 -0.883602 -0.448347 +vn -0.938383 -0.015442 -0.345225 +vn -0.058473 0.799554 0.597736 +vn 0.995544 0.083468 0.043458 +vn 0.241523 -0.718772 -0.651906 +vn -0.964812 -0.143376 -0.220313 +vn 0.583728 0.646901 0.490616 +vn -0.794946 0.297281 0.528794 +vn 0.782189 -0.248329 -0.571368 +vn -0.582751 -0.602039 -0.545793 +vn -0.378521 0.752068 -0.539537 +vn -0.426984 0.668752 -0.608600 +vn 0.812616 0.076144 -0.577746 +vn -0.819819 0.076144 0.567522 +vn -0.774560 0.003143 0.632466 +vn 0.418256 -0.685232 0.596179 +vn 0.462050 -0.593890 0.658589 +vn 0.858303 0.003143 -0.513108 +vn -0.911771 0.404584 -0.070101 +vn 0.244331 0.404584 -0.881222 +vn -0.218055 -0.348918 0.911405 +vn 0.931211 -0.348888 0.105075 +vn 0.011750 0.998810 0.047151 +vn 0.693960 0.706687 -0.137730 +vn -0.677328 0.706687 0.204474 +vn 0.957396 0.004669 -0.288614 +vn 0.660787 -0.700034 -0.270699 +vn -0.035127 -0.989410 -0.140751 +vn -0.710501 -0.700034 0.071505 +vn -0.980773 0.004669 0.195044 +vn 0.144047 0.960204 0.239143 +vn 0.146153 0.959136 0.242164 +vn -0.873623 0.009125 0.486496 +vn 0.839259 0.012970 -0.543535 +vn 0.838374 0.009552 -0.544969 +vn -0.178350 -0.938322 -0.296091 +vn -0.180700 -0.936705 -0.299814 +vn -0.872860 0.012970 0.487747 +vn 0.219337 0.905362 0.363506 +vn -0.886349 -0.043550 0.460952 +vn 0.822382 -0.043397 -0.567217 +vn -0.251686 -0.873165 -0.417341 +vn 0.329264 0.769646 0.546983 +vn 0.825770 -0.011231 -0.563860 +vn -0.356456 -0.723350 -0.591296 +vn -0.884457 -0.011505 0.466445 +vn 0.414869 0.594165 0.689077 +vn 0.817469 -0.006348 -0.575884 +vn -0.435469 -0.536576 -0.722770 +vn -0.891171 -0.006531 0.453536 +vn 0.457717 0.461592 0.759850 +vn 0.845241 0.028687 -0.533586 +vn -0.473251 -0.398724 -0.785485 +vn -0.866909 0.028443 0.497604 +vn 0.931791 0.317057 0.176641 +vn -0.279489 0.317057 0.906278 +vn 0.268349 -0.272195 -0.924039 +vn -0.942289 -0.272195 -0.194800 +vn 0.100955 0.924680 0.367077 +vn 0.116550 0.898312 0.423566 +vn -0.975036 -0.009491 0.221778 +vn 0.958068 0.042787 -0.283212 +vn 0.951292 -0.009369 -0.308115 +vn -0.117832 -0.895840 -0.428419 +vn -0.132878 -0.865352 -0.483169 +vn -0.968169 0.042787 0.246559 +vn 0.161870 0.792413 0.588061 +vn -0.979339 -0.024812 0.200568 +vn 0.944243 -0.024842 -0.328227 +vn -0.176061 -0.747795 -0.640126 +vn 0.814264 0.496323 0.301035 +vn -0.545762 0.496292 0.675100 +vn 0.533036 -0.462203 -0.708670 +vn -0.820460 -0.462203 -0.336406 +vn -0.827998 0.283212 0.483902 +vn -0.228980 0.200323 0.952574 +vn -0.942351 0.200323 -0.267983 +vn 0.511795 0.033876 0.858425 +vn 0.953001 -0.152379 0.261757 +vn 0.843074 -0.215461 -0.492721 +vn 0.239631 -0.152379 -0.958800 +vn -0.496750 0.033876 -0.867214 +vn -0.131535 0.988891 0.069063 +vn -0.160680 0.983367 0.084567 +vn 0.401929 0.007538 0.915616 +vn -0.522691 -0.022401 -0.852199 +vn -0.525254 0.007416 -0.850887 +vn 0.011261 -0.999908 -0.005921 +vn 0.040437 -0.998932 -0.021210 +vn 0.404797 -0.022401 0.914121 +vn -0.128452 0.989349 0.068331 +vn -0.521378 -0.038881 -0.852412 +vn 0.007355 -0.999939 -0.003571 +vn 0.404828 -0.038484 0.913541 +vn 0.041505 0.998901 -0.020936 +vn -0.529557 -0.044862 -0.847072 +vn -0.161138 -0.983276 0.084628 +vn 0.398877 -0.044527 0.915891 +vn 0.151616 0.985229 -0.079196 +vn 0.404187 0.015473 0.914518 +vn -0.522233 0.014252 -0.852657 +vn -0.268990 -0.952788 0.140660 +vn 0.300882 0.940580 -0.157231 +vn -0.547105 -0.044465 -0.835841 +vn -0.412244 -0.884976 0.216407 +vn 0.378643 -0.044313 0.924467 +vn 0.547655 0.785577 -0.287912 +vn 0.380596 -0.001617 0.924711 +vn -0.544755 -0.001709 -0.838557 +vn -0.636311 -0.695273 0.334147 +vn 0.126988 0.486679 -0.864284 +vn 0.783593 0.486679 0.386120 +vn -0.839167 -0.416883 -0.349254 +vn -0.188879 -0.416883 0.889096 +vn 0.310526 0.630696 0.711173 +vn 0.309305 0.636433 0.706565 +vn 0.934294 -0.046571 -0.353404 +vn -0.894253 -0.046571 0.445082 +vn -0.896664 -0.052797 0.439528 +vn -0.273324 -0.730399 -0.625935 +vn -0.270608 -0.737053 -0.619251 +vn 0.932340 -0.052950 -0.357646 +vn 0.234626 0.809107 0.538743 +vn -0.908475 -0.130345 0.397076 +vn -0.187414 -0.882199 -0.431959 +vn 0.908322 -0.131901 -0.396863 +vn 0.439772 0.856227 0.271004 +vn -0.984527 0.132939 -0.113926 +vn 0.052950 -0.998566 -0.007202 +vn 0.934507 -0.248848 0.254402 +vn -0.354869 0.771569 -0.527909 +vn 0.607776 0.434675 0.664541 +vn -0.663289 -0.465651 -0.585772 +vn 0.312296 -0.738884 0.597064 +vn -0.363445 0.928922 -0.070589 +vn -0.211554 0.976501 -0.041078 +vn -0.245064 -0.084353 0.965819 +vn 0.100558 0.059389 -0.993133 +vn 0.134251 -0.084353 -0.987335 +vn 0.237831 -0.970183 0.046175 +vn 0.079928 -0.996673 0.015503 +vn -0.278481 0.059389 0.958586 +vn 0.104007 0.708213 -0.698264 +vn -0.164892 0.708213 0.686453 +vn 0.069094 -0.713920 -0.696768 +vn -0.196722 -0.713920 0.671987 +vn -0.181097 0.836024 0.517869 +vn -0.794885 0.591845 0.133488 +vn 0.538469 0.591845 0.599750 +vn -0.961364 -0.033418 -0.273202 +vn -0.566240 -0.639180 -0.520341 +vn 0.141850 -0.902890 -0.405713 +vn 0.767113 -0.639180 -0.054079 +vn 0.922117 -0.033418 0.385388 +vn -0.073031 0.593616 -0.801416 +vn -0.081515 0.440535 -0.894009 +vn 0.985473 0.105625 -0.132908 +vn -0.993255 0.105625 0.047426 +vn -0.980987 0.029633 0.191687 +vn 0.079379 -0.484573 0.871120 +vn 0.085238 -0.321421 0.943083 +vn 0.999542 0.028169 0.009796 +vn -0.088565 0.200018 -0.975768 +vn 0.996643 0.062227 -0.052614 +vn -0.989837 0.058992 0.129368 +vn 0.089602 -0.071596 0.993378 +vn -0.090243 0.004913 -0.995880 +vn -0.986816 0.070833 0.145421 +vn 0.090487 0.128666 0.987518 +vn 0.996918 0.070040 -0.035279 +vn -0.090670 0.091189 -0.991668 +vn 0.979247 0.069277 -0.190374 +vn -0.997497 0.069613 -0.011109 +vn 0.091403 0.041139 0.994934 +vn -0.090121 0.128971 -0.987518 +vn -0.980865 0.059969 0.185186 +vn 0.090823 0.000977 0.995849 +vn 0.998169 0.059999 0.004944 +vn -0.764977 -0.058321 -0.641377 +vn 0.636402 -0.058321 -0.769127 +vn -0.627216 0.151006 0.764061 +vn 0.754997 0.151006 0.638050 +vn -0.340892 0.905759 0.251656 +vn -0.490738 0.792383 0.362255 +vn -0.496597 -0.032167 -0.867367 +vn 0.590808 0.131596 0.795984 +vn 0.682607 -0.032167 0.730033 +vn 0.431532 -0.843959 -0.318552 +vn 0.569018 -0.706931 -0.420026 +vn -0.586627 0.131596 -0.799066 +vn -0.681570 0.531266 0.503128 +vn 0.656331 0.031648 0.753777 +vn 0.731651 -0.415845 -0.540086 +vn -0.527024 0.031648 -0.849239 +vn -0.097507 0.296213 0.950102 +vn -0.936674 0.296213 -0.186651 +vn 0.964324 -0.211493 0.159001 +vn 0.132054 -0.211493 -0.968383 +vn 0.320719 0.086276 0.943205 +vn 0.895749 0.061068 0.440291 +vn -0.441694 0.061068 0.895077 +vn 0.944243 0.065889 -0.322489 +vn 0.441054 0.032197 -0.896878 +vn -0.321574 0.045473 -0.945769 +vn -0.896359 0.032197 -0.442091 +vn -0.945128 0.065889 0.319926 +vn -0.035249 0.754021 0.655873 +vn -0.029878 0.818720 0.573382 +vn -0.991546 0.002472 -0.129704 +vn 0.999725 0.002472 -0.022675 +vn 0.996551 0.073885 0.037507 +vn 0.039552 -0.675649 -0.736137 +vn 0.035218 -0.746086 -0.664876 +vn -0.994964 0.072024 -0.069460 +vn -0.034669 0.734397 0.677786 +vn -0.984100 -0.035340 -0.173956 +vn 0.997345 -0.035127 -0.063692 +vn 0.039308 -0.651875 -0.757256 +vn -0.047365 0.437544 0.897916 +vn 0.999298 0.033052 -0.016511 +vn 0.049379 -0.335582 -0.940703 +vn -0.991821 0.028901 -0.124058 +vn -0.052004 0.116581 0.991791 +vn -0.986389 0.052126 -0.155736 +vn 0.997559 0.050569 -0.047884 +vn 0.053621 -0.002594 -0.998535 +vn -0.053407 0.074374 0.995788 +vn 0.988739 0.058077 0.137761 +vn 0.053438 0.037080 -0.997864 +vn -0.997833 0.057985 0.030702 +vn -0.053468 0.068392 0.996216 +vn -0.987610 0.055605 -0.146580 +vn 0.997650 0.055574 -0.039766 +vn 0.053591 0.043672 -0.997589 +vn 0.664174 -0.102878 0.740440 +vn -0.739738 -0.102878 0.664968 +vn 0.730979 0.181951 -0.657643 +vn -0.656270 0.181951 -0.732231 +vn 0.041780 0.992126 0.117801 +vn 0.068484 0.978698 0.193396 +vn -0.961821 -0.021485 0.272774 +vn 0.924039 0.050722 -0.378826 +vn 0.918821 -0.021638 -0.393994 +vn -0.078799 -0.971831 -0.222053 +vn -0.105106 -0.949370 -0.295969 +vn -0.956175 0.050722 0.288278 +vn 0.123630 0.929197 0.348247 +vn 0.917081 -0.011658 -0.398450 +vn -0.158238 -0.881252 -0.445357 +vn -0.962889 -0.012452 0.269570 +vn 0.107944 0.766533 0.633045 +vn -0.993744 0.064760 0.090884 +vn 0.936521 -0.144353 -0.319437 +vn -0.273537 -0.673849 -0.686331 +vn 0.826350 0.246040 0.506516 +vn -0.544115 0.571429 0.614307 +vn 0.535691 -0.511551 -0.671804 +vn -0.813013 -0.185827 -0.551744 +vn -0.230079 0.920377 0.316111 +vn -0.345408 0.809564 0.474593 +vn -0.738548 -0.044435 -0.672689 +vn 0.801447 0.128574 0.584063 +vn 0.867183 -0.044404 0.495956 +vn 0.288095 -0.871944 -0.395856 +vn 0.396344 -0.739097 -0.544603 +vn -0.802179 0.128574 -0.583056 +vn 0.247597 0.461501 0.851863 +vn -0.886715 0.461501 0.026276 +vn 0.911466 -0.404218 -0.076113 +vn -0.207770 -0.404218 -0.890713 +vn -0.110050 0.990783 0.078799 +vn 0.333476 0.701132 0.630177 +vn -0.489242 0.701132 -0.518632 +vn 0.626362 0.010773 0.779443 +vn 0.552995 -0.685873 0.472976 +vn 0.200110 -0.969207 -0.143315 +vn -0.269723 -0.685873 -0.675832 +vn -0.536271 0.010773 -0.843959 +vn 0.122349 0.925443 0.358562 +vn 0.132511 0.912381 0.387280 +vn -0.959258 0.003601 0.282479 +vn 0.936186 0.031465 -0.350047 +vn 0.931761 0.004181 -0.363018 +vn -0.145482 -0.892727 -0.426435 +vn -0.155370 -0.876736 -0.455123 +vn -0.954894 0.031465 0.295175 +vn 0.186377 0.817713 0.544603 +vn -0.967589 -0.032411 0.250343 +vn 0.919340 -0.032411 -0.392102 +vn -0.206519 -0.769463 -0.604327 +vn 0.241462 0.665029 0.706687 +vn 0.929411 0.011505 -0.368847 +vn -0.257698 -0.604144 -0.754021 +vn -0.960997 0.010254 0.276254 +vn 0.292062 0.430036 0.854244 +vn -0.975127 -0.001129 0.221564 +vn 0.907559 -0.001495 -0.419874 +vn -0.301828 -0.357067 -0.883938 +vn 0.321696 0.087405 0.942778 +vn 0.923399 0.036470 -0.382061 +vn -0.323130 -0.009491 -0.946287 +vn -0.964415 0.035890 0.261818 +vn 0.896176 -0.037141 0.442122 +vn -0.439009 -0.037141 0.897702 +vn 0.435774 0.092807 -0.895230 +vn -0.892117 0.092807 -0.442122 +vn 0.197241 0.973724 -0.113620 +vn 0.316904 0.930692 -0.182562 +vn 0.481002 0.078921 0.873135 +vn -0.514084 0.078921 -0.854091 +vn -0.552110 -0.044679 -0.832545 +vn -0.262398 -0.953032 0.151158 +vn -0.379192 -0.899136 0.218451 +vn 0.443281 -0.044679 0.895230 +vn 0.479690 0.832759 -0.276345 +vn 0.456679 -0.000122 0.889615 +vn -0.540513 -0.000122 -0.841304 +vn -0.534562 -0.786981 0.307962 +vn 0.018311 0.562609 -0.826472 +vn 0.724174 0.562639 0.398724 +vn -0.761498 -0.528489 -0.375164 +vn -0.057375 -0.528489 0.846980 +vn -0.123600 0.739525 -0.661641 +vn -0.782250 0.523118 -0.338206 +vn 0.607349 0.523118 -0.597858 +vn -0.977050 0.027650 0.211127 +vn -0.600055 -0.483963 0.636921 +vn 0.133915 -0.684194 0.716880 +vn 0.789544 -0.483963 0.377300 +vn 0.987365 0.027650 -0.155889 +vn 0.011963 0.998505 -0.053285 +vn -0.011383 0.998474 0.053713 +vn 0.962584 0.049654 0.266305 +vn -0.984619 -0.048280 -0.167791 +vn -0.983917 0.048616 -0.171850 +vn -0.032350 -0.989044 0.143986 +vn -0.009552 -0.999115 0.040742 +vn 0.961760 -0.048280 0.269478 +vn 0.015625 0.997894 -0.062899 +vn -0.982086 -0.100284 -0.159429 +vn -0.035798 -0.987335 0.154363 +vn 0.956603 -0.098148 0.274300 +vn 0.076968 0.938108 -0.337626 +vn 0.963012 0.000000 0.269417 +vn -0.985534 -0.002930 -0.169378 +vn -0.095767 -0.902036 0.420881 +vn 0.133274 0.798364 -0.587176 +vn -0.992279 -0.055116 -0.110965 +vn -0.148686 -0.737419 0.658834 +vn 0.945158 -0.054750 0.321940 +vn 0.187323 0.520066 -0.833308 +vn 0.957762 0.014832 0.287118 +vn -0.988586 0.013550 -0.149968 +vn -0.197516 -0.439589 0.876186 +vn 0.202704 0.380474 -0.902280 +vn 0.967925 0.039247 0.248054 +vn -0.981048 0.038881 -0.189795 +vn -0.209754 -0.292306 0.933012 +vn -0.544603 0.246803 -0.801538 +vn 0.835139 0.246803 -0.491531 +vn -0.838710 -0.183813 0.512558 +vn 0.538865 -0.183813 0.822077 +vn 0.242286 0.912748 -0.328867 +vn 0.252663 0.904782 -0.342784 +vn 0.781823 0.029725 0.622761 +vn -0.826472 0.029725 -0.562151 +vn -0.831233 0.014130 -0.555681 +vn -0.292032 -0.870357 0.396405 +vn -0.301950 -0.860683 0.409894 +vn 0.776971 0.014283 0.629353 +vn 0.308847 0.853511 -0.419599 +vn -0.840175 -0.006592 -0.542253 +vn -0.355144 -0.800531 0.482650 +vn 0.766778 -0.007202 0.641835 +vn 0.521439 0.736229 -0.431318 +vn -0.697165 -0.212531 -0.684652 +vn -0.408399 -0.614551 0.674886 +vn 0.578509 0.194403 0.792138 +vn 0.065767 0.122135 -0.990326 +vn 0.663015 0.726676 0.179785 +vn -0.712729 -0.683370 -0.157933 +vn -0.105716 -0.072695 0.991729 +vn -0.883999 0.451796 0.119907 +vn -0.898221 0.422285 0.121830 +vn -0.102756 0.037751 -0.993957 +vn 0.138676 0.049501 0.989074 +vn 0.165746 0.037751 0.985412 +vn 0.922117 -0.366070 -0.125095 +vn 0.933531 -0.335307 -0.126621 +vn -0.129856 0.049501 -0.990265 +vn -0.549852 0.276498 0.788141 +vn -0.739982 0.276498 -0.613147 +vn 0.763756 -0.214515 0.608783 +vn 0.573931 -0.214515 -0.790277 +vn 0.224219 0.966613 -0.123905 +vn -0.183172 0.683859 -0.706198 +vn 0.500473 0.683859 0.530869 +vn -0.522355 0.014161 -0.852596 +vn -0.555956 -0.663808 -0.500198 +vn -0.302683 -0.938261 0.167272 +vn 0.127659 -0.663808 0.736869 +vn 0.443892 0.014161 0.895932 +vn -0.035615 0.999329 -0.003906 +vn -0.154363 0.987854 -0.016968 +vn 0.145726 0.062258 -0.987335 +vn -0.072176 0.062258 0.995422 +vn -0.057863 -0.045656 0.997253 +vn 0.117740 -0.992950 0.012940 +vn 0.234901 -0.971648 0.025819 +vn 0.160100 -0.045656 -0.986023 +vn -0.347636 0.936827 -0.038209 +vn -0.057619 -0.015656 0.998199 +vn 0.423566 -0.904630 0.046541 +vn 0.160527 -0.015656 -0.986877 +vn -0.435041 0.899106 -0.047792 +vn -0.068941 0.012970 0.997528 +vn 0.508011 -0.859493 0.055818 +vn 0.149327 0.012970 -0.988678 +vn -0.448347 0.892483 -0.049257 +vn -0.073519 0.021455 0.997040 +vn 0.520798 -0.851741 0.057222 +vn 0.144749 0.021455 -0.989227 +vn -0.496658 0.866207 -0.054567 +vn 0.158422 -0.000122 -0.987365 +vn -0.059786 -0.000122 0.998199 +vn 0.566820 -0.821436 0.062288 +vn -0.464675 0.590014 0.660237 +vn -0.310190 0.590045 -0.745384 +vn 0.358959 -0.556902 0.748985 +vn 0.513047 -0.556902 -0.653127 +vn 0.503769 0.858760 0.093112 +vn 0.461989 0.882748 0.085360 +vn 0.229011 0.001495 -0.973418 +vn -0.134037 0.001495 0.990966 +vn -0.153600 -0.038697 0.987365 +vn -0.431654 -0.898465 -0.079775 +vn -0.386944 -0.919309 -0.071505 +vn 0.209418 -0.038697 -0.977050 +vn 0.192083 0.980712 0.035493 +vn -0.156194 -0.113620 0.981140 +vn -0.111789 -0.993500 -0.020661 +vn 0.204779 -0.113620 -0.972167 +vn -0.163976 0.713431 0.681234 +vn 0.090335 0.713431 -0.694845 +vn -0.031404 -0.714988 0.698386 +vn 0.220283 -0.714988 -0.663472 +vn 0.026612 0.999420 0.020814 +vn -0.416547 0.706992 0.571490 +vn 0.454207 0.706992 -0.542039 +vn -0.582568 0.000305 0.812738 +vn -0.407697 -0.706534 0.578417 +vn 0.039155 -0.998749 0.030610 +vn 0.463088 -0.706534 -0.535081 +vn 0.648366 0.000305 -0.761315 +vn 0.035249 0.890469 0.453597 +vn 0.021393 0.960143 0.278603 +vn -0.997864 -0.064852 0.004456 +vn 0.986572 -0.064852 -0.149785 +vn 0.992492 0.091372 -0.081057 +vn -0.039583 -0.859584 -0.509445 +vn -0.026093 -0.940489 -0.338755 +vn -0.993072 0.091922 0.073061 +vn 0.013977 0.982696 0.184637 +vn -0.998657 -0.036378 0.036714 +vn 0.992309 -0.036866 -0.118046 +vn -0.019013 -0.969054 -0.246071 +vn 0.022248 0.958281 0.284921 +vn 0.993988 0.008850 -0.108860 +vn -0.027070 -0.937712 -0.346294 +vn -0.998871 0.008484 0.046327 +vn 0.028962 0.928098 0.371197 +vn -0.999207 -0.023560 0.031343 +vn 0.992096 -0.023530 -0.123142 +vn -0.033540 -0.901822 -0.430738 +vn 0.035585 0.888394 0.457686 +vn 0.994171 0.014039 -0.106845 +vn -0.040040 -0.856685 -0.514206 +vn -0.998718 0.013886 0.048158 +vn 0.038514 0.867824 0.495346 +vn -0.999146 0.002228 0.040620 +vn 0.993439 0.002228 -0.114231 +vn -0.042787 -0.833613 -0.550645 +vn 0.734031 0.599322 0.319285 +vn -0.675863 0.599322 0.428907 +vn 0.671987 -0.574358 -0.467452 +vn -0.736137 -0.574358 -0.357952 +vn -0.126530 0.991821 -0.015717 +vn -0.286935 0.957274 -0.035676 +vn 0.177404 -0.060884 -0.982238 +vn -0.103793 0.084475 0.990997 +vn -0.068575 -0.060884 0.995758 +vn 0.189489 -0.981597 0.023560 +vn 0.347545 -0.936644 0.043214 +vn 0.142064 0.084475 -0.986236 +vn -0.551561 0.831294 -0.068422 +vn -0.063448 -0.026917 0.997620 +vn 0.604541 -0.792993 0.075167 +vn 0.182714 -0.027192 -0.982757 +vn -0.735252 0.642598 -0.215461 +vn 0.331980 0.122745 -0.935240 +vn -0.173223 -0.165868 0.970794 +vn 0.821345 -0.567400 0.058260 +vn -0.854915 0.129765 0.502243 +vn -0.342936 0.563128 -0.751823 +vn 0.370006 -0.526292 0.765557 +vn 0.870235 -0.092288 -0.483840 +vn -0.397992 0.288278 -0.870876 +vn -0.414197 0.083987 -0.906278 +vn 0.867000 0.057497 -0.494949 +vn -0.941649 0.057497 0.331614 +vn -0.864986 0.027772 0.500992 +vn 0.404828 -0.226722 0.885830 +vn 0.415571 -0.019501 0.909330 +vn 0.944884 0.027772 -0.326151 +vn -0.931608 -0.093265 -0.351238 +vn 0.344096 -0.093265 -0.934263 +vn -0.340739 0.139012 0.929807 +vn 0.926054 0.139012 0.350841 +vn -0.289682 0.952025 0.098483 +vn 0.022645 0.673360 0.738945 +vn -0.432447 0.673360 -0.599628 +vn 0.350749 0.010956 0.936369 +vn 0.473525 -0.657826 0.585650 +vn 0.347789 -0.930082 -0.118229 +vn 0.018433 -0.657826 -0.752922 +vn -0.292673 0.010956 -0.956145 +vn 0.139073 0.874660 -0.464309 +vn 0.137577 0.877621 -0.459120 +vn 0.945921 0.026521 0.323222 +vn -0.968657 0.021760 -0.247353 +vn -0.967834 0.026399 -0.250130 +vn -0.161687 -0.826044 0.539842 +vn -0.160253 -0.829432 0.535081 +vn 0.945128 0.021760 0.325877 +vn 0.147740 0.857326 -0.493057 +vn -0.971221 0.007691 -0.237953 +vn -0.169866 -0.805994 0.567003 +vn 0.942228 0.007599 0.334849 +vn 0.160741 0.828669 -0.536119 +vn 0.945799 0.026429 0.323588 +vn -0.967895 0.025941 -0.249886 +vn -0.182104 -0.773064 0.607593 +vn 0.193976 0.737846 -0.646443 +vn -0.977599 -0.012787 -0.209998 +vn -0.212592 -0.672018 0.709311 +vn 0.932310 -0.012909 0.361339 +vn 0.233222 0.582415 -0.778680 +vn 0.942778 0.024079 0.332530 +vn -0.970336 0.023621 -0.240577 +vn -0.247810 -0.505112 0.826685 +vn -0.505387 0.375561 -0.776849 +vn 0.849239 0.375561 -0.371044 +vn -0.857082 -0.319498 0.404096 +vn 0.493759 -0.319498 0.808740 +vn 0.821284 0.570421 0.007141 +vn 0.869259 0.494247 0.007569 +vn 0.004425 0.062899 0.997986 +vn 0.021821 0.062899 -0.997772 +vn -0.049165 0.022553 -0.998505 +vn -0.870357 -0.492294 -0.007569 +vn -0.911222 -0.411817 -0.007935 +vn -0.066591 0.022553 0.997497 +vn 0.948576 0.316416 0.008240 +vn -0.066073 0.031983 0.997284 +vn -0.048677 0.031983 -0.998291 +vn -0.973754 -0.227302 -0.008484 +vn 0.697378 0.151616 -0.700461 +vn 0.685049 0.151616 0.712516 +vn -0.699454 -0.087771 -0.709250 +vn -0.711692 -0.087771 0.696951 +vn 0.703635 0.514847 -0.489669 +vn 0.094119 0.364238 -0.926511 +vn 0.901486 0.364238 0.233619 +vn -0.588610 0.040773 -0.807367 +vn -0.927030 -0.306558 -0.215857 +vn -0.739738 -0.433302 0.514786 +vn -0.119663 -0.306558 0.944273 +vn 0.552538 0.040773 0.832453 +vn -0.476852 0.878018 0.041047 +vn -0.315012 0.948668 0.027100 +vn -0.007416 -0.054720 -0.998444 +vn 0.163305 -0.054720 0.985046 +vn 0.093783 0.089389 0.991546 +vn 0.542985 -0.838404 -0.046724 +vn 0.387402 -0.921293 -0.033326 +vn -0.077029 0.089389 -0.992981 +vn -0.221686 0.974914 0.019074 +vn -0.038911 -0.027589 -0.998840 +vn 0.132359 -0.027589 0.990814 +vn 0.294626 -0.955260 -0.025361 +vn -0.481643 0.875362 0.041444 +vn -0.004944 -0.055605 -0.998413 +vn 0.165716 -0.055605 0.984588 +vn 0.550249 -0.833644 -0.047365 +vn -0.746971 0.661702 0.064302 +vn 0.158361 -0.008789 0.987335 +vn 0.796167 -0.601123 -0.068514 +vn -0.012665 -0.008789 -0.999878 +vn -0.938719 0.335002 0.080782 +vn 0.031343 0.006073 -0.999481 +vn 0.201697 0.006073 0.979400 +vn 0.962523 -0.258187 -0.082827 +vn -0.985076 -0.149571 0.084780 +vn 0.183142 0.058992 0.981292 +vn 0.970550 0.225806 -0.083529 +vn 0.012726 0.058992 -0.998169 +vn -0.596454 -0.276162 0.753594 +vn -0.716483 -0.276193 -0.640584 +vn 0.698813 0.328593 0.635304 +vn 0.579943 0.328593 -0.745415 +vn 0.069216 0.978637 -0.193487 +vn 0.096744 0.957762 -0.270791 +vn 0.930601 0.049776 0.362590 +vn -0.949431 0.049776 -0.309915 +vn -0.956938 -0.023804 -0.289224 +vn -0.094760 -0.959563 0.264962 +vn -0.121921 -0.932188 0.340770 +vn 0.923368 -0.023988 0.383129 +vn 0.163244 0.874844 -0.456008 +vn 0.917356 -0.028169 0.397015 +vn -0.960875 -0.028779 -0.275460 +vn -0.186407 -0.833094 0.520737 +vn 0.053621 0.648976 -0.758873 +vn 0.932859 -0.257332 0.252022 +vn -0.984252 0.176092 -0.013642 +vn -0.322214 -0.533036 0.782281 +vn -0.528275 0.612201 -0.588275 +vn 0.741234 -0.043672 -0.669790 +vn -0.719626 0.085696 0.689016 +vn 0.535264 -0.566057 0.626911 +vn 0.814875 0.570299 0.103397 +vn 0.832148 0.544359 0.105594 +vn -0.134007 0.041261 0.990112 +vn 0.117527 0.041292 -0.992187 +vn 0.093661 0.026460 -0.995239 +vn -0.856777 -0.504074 -0.108707 +vn -0.871975 -0.476852 -0.110630 +vn -0.157872 0.026460 0.987091 +vn 0.689474 0.365551 -0.625233 +vn 0.511460 0.365551 0.777642 +vn -0.538957 -0.317301 -0.780267 +vn -0.716758 -0.317301 0.620899 +vn 0.132817 0.990966 -0.018250 +vn -0.002380 0.700980 -0.713157 +vn 0.190283 0.700980 0.687277 +vn -0.174505 0.006775 -0.984619 +vn -0.244514 -0.691366 -0.679830 +vn -0.209479 -0.977386 0.028809 +vn -0.051820 -0.691366 0.720603 +vn 0.097842 0.006775 0.995148 +vn 0.041871 0.973296 0.225562 +vn 0.029786 0.986541 0.160649 +vn 0.988433 0.025880 -0.149266 +vn -0.976135 0.025880 0.215583 +vn -0.978027 -0.034181 0.205512 +vn -0.031953 -0.984527 -0.172155 +vn -0.019807 -0.994110 -0.106540 +vn 0.986572 -0.034150 -0.159551 +vn 0.006134 0.999451 0.032075 +vn 0.987548 -0.028504 -0.154637 +vn -0.977294 -0.028871 0.209784 +vn 0.004151 -0.999695 0.023377 +vn -0.042329 0.972045 -0.230811 +vn -0.969085 -0.082308 0.232582 +vn 0.052400 -0.957457 0.283700 +vn 0.987915 -0.081729 -0.131535 +vn -0.085849 0.882015 -0.463271 +vn 0.988739 -0.003204 -0.149449 +vn -0.976501 -0.003723 0.215430 +vn 0.094455 -0.854915 0.510025 +vn -0.107944 0.806269 -0.581591 +vn -0.972747 -0.018250 0.231086 +vn 0.116031 -0.772149 0.624744 +vn 0.990844 -0.018250 -0.133702 +vn -0.780908 0.525620 -0.337382 +vn 0.607685 0.525651 -0.595294 +vn -0.600330 -0.499985 0.624165 +vn 0.784417 -0.499954 0.366985 +vn 0.227790 0.959960 0.162969 +vn 0.096622 0.992889 0.069094 +vn 0.617939 0.069521 -0.783135 +vn -0.541642 0.069521 0.837703 +vn -0.562975 -0.077029 0.822840 +vn -0.184637 -0.973876 -0.132115 +vn -0.051973 -0.997955 -0.037111 +vn 0.596912 -0.076968 -0.798578 +vn -0.108768 0.990997 -0.077853 +vn 0.608509 -0.033204 -0.792840 +vn -0.554033 -0.033357 0.831813 +vn 0.153050 -0.982086 0.109622 +vn -0.536851 0.690573 0.484603 +vn 0.285287 0.690573 -0.664571 +vn -0.253059 -0.682546 0.685598 +vn 0.567156 -0.682546 -0.460860 +vn -0.053591 0.992584 -0.109012 +vn -0.672323 0.701987 0.234809 +vn 0.596484 0.701987 -0.389050 +vn -0.884884 0.004120 0.465712 +vn -0.579333 -0.696127 0.423933 +vn 0.077853 -0.984283 0.158361 +vn 0.689474 -0.696127 -0.199896 +vn 0.909146 0.004120 -0.416395 +vn 0.060884 0.926695 0.370769 +vn 0.048952 0.953856 0.296152 +vn -0.994629 -0.015442 0.102329 +vn 0.975097 -0.015442 -0.221137 +vn 0.979553 0.051393 -0.194464 +vn -0.075014 -0.886380 -0.456801 +vn -0.063631 -0.920042 -0.386578 +vn -0.990295 0.050783 0.129276 +vn 0.060945 0.928037 0.367412 +vn -0.995086 -0.046327 0.087374 +vn 0.971129 -0.045747 -0.234016 +vn -0.075106 -0.887845 -0.453902 +vn 0.088656 0.838893 0.536973 +vn 0.977996 0.018830 -0.207709 +vn -0.101413 -0.783074 -0.613575 +vn -0.993011 0.017060 0.116520 +vn 0.113315 0.718253 0.686453 +vn -0.997162 -0.016297 0.073092 +vn 0.968535 -0.016602 -0.248268 +vn -0.123783 -0.647389 -0.752007 +vn 0.139561 0.507675 0.850154 +vn 0.974914 0.022645 -0.221381 +vn -0.147191 -0.423322 -0.893918 +vn -0.994507 0.021821 0.102084 +vn 0.147801 0.409711 0.900143 +vn 0.981903 0.042787 -0.184454 +vn -0.153630 -0.320231 -0.934782 +vn -0.989319 0.042512 0.139256 +vn 0.802698 0.281442 0.525773 +vn -0.592364 0.281442 0.754875 +vn 0.587970 -0.217811 -0.778985 +vn -0.806238 -0.217811 -0.550005 +vn -0.346202 0.938139 0.003113 +vn -0.112796 0.993591 0.001007 +vn -0.032167 -0.112613 0.993103 +vn -0.091311 0.101382 -0.990631 +vn -0.050111 -0.112613 -0.992370 +vn 0.257118 -0.966369 -0.002319 +vn 0.018097 -0.999817 -0.000153 +vn -0.073397 0.101382 0.992126 +vn 0.182714 0.983154 -0.001465 +vn -0.040834 -0.009247 0.999115 +vn -0.058870 -0.009522 -0.998199 +vn -0.272591 -0.962096 0.002350 +vn 0.260262 0.961699 -0.085665 +vn 0.125675 -0.058748 0.990326 +vn -0.231330 0.044557 -0.971831 +vn -0.380688 -0.922910 -0.057070 +vn -0.019745 0.739616 -0.672719 +vn 0.478866 0.585162 0.654378 +vn -0.536637 -0.556780 -0.634022 +vn -0.044465 -0.722190 0.690237 +vn 0.547960 0.803766 -0.231697 +vn 0.639851 0.719260 -0.270547 +vn 0.391888 0.080935 0.916410 +vn -0.384472 0.080935 -0.919553 +vn -0.459059 -0.005982 -0.888363 +vn -0.616077 -0.743339 0.260506 +vn -0.700430 -0.649342 0.296182 +vn 0.317545 -0.005982 0.948210 +vn 0.238289 0.437483 -0.867061 +vn 0.788049 0.437483 0.433027 +vn -0.825892 -0.384777 -0.412061 +vn -0.279672 -0.384777 0.879574 +vn -0.022431 0.998901 0.040742 +vn -0.634938 0.706748 -0.311960 +vn 0.603198 0.706748 0.369640 +vn -0.898221 0.000061 -0.439467 +vn -0.636067 -0.706626 -0.309915 +vn -0.024018 -0.998749 0.043641 +vn 0.602069 -0.706626 0.371685 +vn 0.851772 0.000061 0.523881 +vn 0.787164 0.490341 0.374004 +vn 0.831324 0.390973 0.394971 +vn -0.399670 0.055727 0.914945 +vn 0.456862 0.055727 -0.887783 +vn 0.374310 0.014557 -0.927152 +vn -0.816065 -0.428571 -0.387738 +vn -0.853908 -0.325846 -0.405713 +vn -0.482345 0.014557 0.875820 +vn 0.877194 0.238319 0.416791 +vn -0.454299 0.029725 0.890316 +vn 0.403272 0.029725 -0.914579 +vn -0.890042 -0.170080 -0.422895 +vn 0.900662 0.075289 0.427931 +vn 0.379345 0.032868 -0.924650 +vn -0.903195 -0.005463 -0.429151 +vn -0.477248 0.032868 0.878140 +vn 0.902402 -0.042665 0.428755 +vn -0.425825 0.034486 0.904111 +vn 0.431959 0.034486 -0.901212 +vn -0.897549 0.111728 -0.426466 +vn 0.902737 -0.032319 0.428907 +vn -0.423292 0.034669 0.905301 +vn 0.434462 0.034669 -0.899991 +vn -0.898495 0.102176 -0.426893 +vn 0.942106 -0.016755 -0.334849 +vn 0.335459 -0.016755 0.941893 +vn -0.332560 0.066164 -0.940733 +vn -0.939390 0.066164 0.336375 +vn 0.723746 0.683493 -0.094760 +vn 0.867977 0.483383 -0.113651 +vn 0.197333 0.106632 0.974487 +vn -0.060274 0.106632 -0.992462 +vn -0.244057 -0.019471 -0.969543 +vn -0.767998 -0.632466 0.100558 +vn -0.898984 -0.421827 0.117740 +vn 0.013825 -0.019471 0.999695 +vn 0.988067 0.083224 -0.129398 +vn 0.053529 0.030732 0.998077 +vn -0.205267 0.030732 -0.978210 +vn -0.991394 -0.014893 0.129826 +vn 0.610126 -0.061220 -0.789911 +vn 0.792962 -0.061220 0.606128 +vn -0.790582 0.110538 -0.602252 +vn -0.608814 0.110538 0.785546 +vn 0.939543 0.310312 0.144597 +vn 0.772088 0.219489 -0.596362 +vn 0.557024 0.219489 0.800928 +vn 0.142430 0.033631 -0.989227 +vn -0.570574 -0.171911 -0.803034 +vn -0.958708 -0.243049 -0.147557 +vn -0.785638 -0.171911 0.594256 +vn -0.161596 0.033631 0.986267 +vn -0.431501 0.608417 -0.666005 +vn -0.438429 0.590075 -0.677877 +vn 0.843043 0.030885 -0.536943 +vn -0.834559 0.030885 0.550005 +vn -0.824274 0.018494 0.565844 +vn 0.450331 -0.560381 0.695059 +vn 0.457686 -0.539079 0.707022 +vn 0.852992 0.019471 -0.521500 +vn -0.507920 0.351390 -0.786431 +vn -0.770501 -0.007233 0.637379 +vn 0.518906 -0.294656 0.802393 +vn 0.895627 -0.007477 -0.444685 +vn -0.542619 0.055177 -0.838160 +vn 0.851039 0.028443 -0.524308 +vn -0.825800 0.027741 0.563219 +vn 0.543260 0.001648 0.839534 +vn -0.541063 0.097720 -0.835261 +vn 0.816523 0.032716 -0.576342 +vn -0.859645 0.032655 0.509781 +vn 0.543321 -0.038057 0.838618 +vn -0.543535 -0.001740 -0.839381 +vn -0.788324 0.032716 0.614338 +vn 0.542589 0.061037 0.837733 +vn 0.882687 0.032624 -0.468795 +vn -0.541093 -0.097446 -0.835261 +vn 0.810480 0.023255 -0.585284 +vn -0.865291 0.023225 0.500687 +vn 0.537004 0.155644 0.829066 +vn -0.976959 0.006104 -0.213324 +vn 0.204505 0.006104 -0.978820 +vn -0.208014 0.035585 0.977447 +vn 0.977142 0.035585 0.209571 +vn 0.220099 0.960631 -0.169469 +vn 0.256691 0.946074 -0.197516 +vn 0.592944 0.031159 0.804621 +vn -0.626331 0.031159 -0.778893 +vn -0.637867 -0.010315 -0.770074 +vn -0.264718 -0.942503 0.203833 +vn -0.300760 -0.925138 0.231574 +vn 0.581378 -0.010132 0.813532 +vn 0.397870 0.864834 -0.306070 +vn -0.656514 -0.040681 -0.753197 +vn -0.437941 -0.833338 0.337199 +vn 0.560564 -0.040529 0.827113 +vn 0.535417 0.666890 -0.518204 +vn 0.617084 -0.117130 0.778100 +vn -0.735588 0.063021 -0.674459 +vn -0.643452 -0.611835 0.459944 +vn -0.058687 0.507889 -0.859401 +vn 0.969878 0.233253 0.070101 +vn -0.978698 -0.199225 -0.049104 +vn 0.040590 -0.474502 0.879299 +vn -0.522080 0.817591 -0.242775 +vn -0.593036 0.756432 -0.275765 +vn 0.468581 -0.013306 -0.883297 +vn -0.425398 0.055849 0.903256 +vn -0.373455 -0.013306 0.927549 +vn 0.564867 -0.782250 0.262642 +vn 0.632527 -0.716483 0.294137 +vn 0.416547 0.055849 -0.907376 +vn -0.765007 0.485519 0.423078 +vn -0.169469 0.485519 -0.857631 +vn 0.196936 -0.455672 0.868068 +vn 0.790704 -0.455672 -0.408795 +vn 0.595569 0.802454 -0.036775 +vn 0.377606 0.567522 -0.731620 +vn 0.464797 0.567522 0.679586 +vn -0.084811 0.018342 -0.996216 +vn -0.497604 -0.541551 -0.677541 +vn -0.641926 -0.765709 0.039644 +vn -0.410413 -0.541551 0.733634 +vn 0.038423 0.018342 0.999084 +vn 0.050264 0.998627 -0.013764 +vn 0.028199 0.999542 -0.007660 +vn -0.239326 -0.010559 -0.970855 +vn 0.289315 0.010224 0.957152 +vn 0.289102 -0.010498 0.957213 +vn -0.000519 -0.999969 0.000122 +vn 0.021638 -0.999725 -0.005921 +vn -0.239021 0.010224 -0.970946 +vn -0.057222 0.998230 0.015900 +vn -0.236579 -0.027528 -0.971191 +vn 0.291574 -0.027284 0.956145 +vn 0.107395 -0.993774 -0.029450 +vn -0.274514 0.958586 0.075442 +vn -0.217689 -0.061861 -0.974029 +vn 0.309000 -0.061647 0.949034 +vn 0.321879 -0.942656 -0.088260 +vn -0.506027 0.851283 0.138646 +vn 0.308054 -0.022950 0.951079 +vn 0.547502 -0.823206 -0.150029 +vn -0.219794 -0.022950 -0.975249 +vn -0.587024 0.793390 0.160863 +vn 0.284188 0.015351 0.958617 +vn 0.625721 -0.760949 -0.171453 +vn -0.244179 0.015351 -0.969604 +vn -0.229621 0.560015 0.795984 +vn -0.603320 0.560015 -0.567736 +vn 0.630665 -0.537034 0.560198 +vn 0.256966 -0.537034 -0.803430 +vn 0.343272 0.932310 -0.113590 +vn 0.336253 0.935148 -0.111270 +vn 0.292428 0.013092 0.956175 +vn -0.337992 0.006623 -0.941099 +vn -0.335734 0.013092 -0.941862 +vn -0.388470 -0.912412 0.128574 +vn -0.382061 -0.915433 0.126438 +vn 0.290170 0.006623 0.956938 +vn 0.503616 0.847652 -0.166662 +vn -0.381603 -0.062624 -0.922178 +vn -0.544145 -0.819391 0.180090 +vn 0.243873 -0.062624 0.967772 +vn 0.250130 0.512528 -0.821406 +vn 0.690756 0.512528 0.509995 +vn -0.716117 -0.489364 -0.497635 +vn -0.277840 -0.489364 0.826594 +vn 0.727622 0.574389 -0.374981 +vn 0.190710 0.406201 -0.893613 +vn 0.838466 0.406201 0.363231 +vn -0.470595 0.021485 -0.882046 +vn -0.856410 -0.375805 -0.353984 +vn -0.752983 -0.531388 0.388043 +vn -0.208655 -0.375805 0.902860 +vn 0.445235 0.021485 0.895138 +vn 0.014954 0.691580 0.722098 +vn 0.014527 0.728172 0.685202 +vn -0.999939 -0.001251 -0.010681 +vn 0.998627 -0.001251 -0.052126 +vn 0.999298 0.031556 -0.019257 +vn -0.015534 -0.661672 -0.749596 +vn -0.015076 -0.698691 -0.715232 +vn -0.999268 0.030976 0.021943 +vn 0.017243 0.594531 0.803858 +vn -0.996094 -0.043123 -0.076662 +vn 0.992187 -0.042817 -0.116977 +vn -0.017579 -0.560686 -0.827815 +vn 0.020234 0.239753 0.970611 +vn 0.995483 0.003784 -0.094607 +vn -0.020600 -0.201361 -0.979278 +vn -0.998535 0.003418 -0.053621 +vn 0.020692 0.021638 0.999542 +vn 0.998627 0.020447 -0.047945 +vn -0.020753 0.018952 -0.999603 +vn -0.999756 0.020173 -0.006500 +vn 0.020264 0.173009 0.984680 +vn 0.996857 0.035035 0.070925 +vn -0.020295 -0.132664 -0.990936 +vn -0.993011 0.035127 0.112552 +vn 0.019776 0.280343 0.959685 +vn -0.999481 0.006897 -0.031098 +vn 0.997314 0.006836 -0.072665 +vn -0.020051 -0.241523 -0.970183 +vn 0.720054 0.123844 0.682760 +vn -0.691122 0.123844 0.712027 +vn 0.689444 -0.095737 -0.717948 +vn -0.718619 -0.095737 -0.688742 +vn -0.755669 0.653859 -0.036775 +vn -0.796411 0.603473 -0.038759 +vn 0.084323 -0.000793 -0.996429 +vn -0.059023 0.035096 0.997620 +vn -0.012818 -0.000793 0.999908 +vn 0.781579 -0.622639 0.038026 +vn 0.820276 -0.570544 0.039918 +vn 0.038118 0.035096 -0.998627 +vn -0.908353 0.415845 -0.044252 +vn 0.120121 -0.008637 -0.992706 +vn 0.023225 -0.008637 0.999664 +vn 0.924558 -0.378307 0.045045 +vn -0.973418 0.228858 0.006165 +vn 0.004608 0.109256 0.993988 +vn 0.980346 -0.180731 0.078860 +vn 0.044710 -0.078036 -0.995941 +vn -0.693106 0.261483 0.671712 +vn -0.694143 -0.008545 -0.719748 +vn 0.698050 0.036531 0.715079 +vn 0.699850 -0.233589 -0.674978 +vn -0.948729 0.183721 0.257118 +vn -0.959197 0.111148 0.259926 +vn -0.227546 0.017212 -0.973601 +vn 0.231727 0.025697 0.972411 +vn 0.295175 0.017212 0.955260 +vn 0.955138 -0.143712 -0.258827 +vn 0.962767 -0.070681 -0.260903 +vn -0.290963 0.025697 -0.956359 +vn -0.497696 0.025849 0.866939 +vn -0.867336 0.025849 -0.497024 +vn 0.868526 0.002838 0.495590 +vn 0.499435 0.002838 -0.866329 +vn -0.347392 0.548418 0.760582 +vn 0.397443 0.387829 0.831629 +vn -0.888791 0.387829 0.244118 +vn 0.913907 0.017212 0.405530 +vn 0.895138 -0.363445 -0.258034 +vn 0.356365 -0.513962 -0.780267 +vn -0.391095 -0.363445 -0.845515 +vn -0.904904 0.017212 -0.425214 +vn -0.607196 0.523057 0.598041 +vn -0.656056 0.388806 0.646809 +vn -0.645924 0.003204 -0.763359 +vn 0.664785 0.062532 0.744377 +vn 0.753349 0.004059 0.657582 +vn 0.628285 -0.471450 -0.618824 +vn 0.672079 -0.331797 -0.661946 +vn -0.734184 0.062532 -0.676015 +vn -0.711844 -0.004486 0.702292 +vn -0.618152 0.034791 -0.785241 +vn 0.775353 0.034120 0.630573 +vn 0.710929 0.065096 -0.700217 +vn -0.710654 -0.069002 0.700125 +vn 0.635395 0.021180 0.771874 +vn 0.706595 0.127995 -0.695914 +vn -0.762047 0.021546 -0.647114 +vn -0.712302 0.019501 0.701559 +vn -0.666066 0.030274 -0.745232 +vn 0.735038 0.030274 0.677328 +vn 0.711875 0.039766 -0.701132 +vn -0.708457 0.105502 0.697775 +vn 0.637257 0.036836 0.769738 +vn 0.711692 -0.045900 -0.700949 +vn -0.759972 0.036836 -0.648885 +vn 0.003052 0.216071 0.976348 +vn -0.976196 0.216071 -0.017914 +vn 0.984527 -0.174383 0.015625 +vn -0.000671 -0.174383 -0.984649 +vn -0.056063 0.795282 0.603626 +vn -0.057405 0.783898 0.618183 +vn -0.992584 0.012909 -0.120823 +vn 0.996857 0.025849 0.074740 +vn 0.997833 0.012940 0.064089 +vn 0.060396 -0.757347 -0.650166 +vn 0.061708 -0.745109 -0.664052 +vn -0.993561 0.025849 -0.110172 +vn -0.063387 0.727775 0.682852 +vn -0.990814 -0.000153 -0.135105 +vn 0.998749 -0.000183 0.049806 +vn 0.067385 -0.685171 -0.725242 +vn 0.655751 0.480300 0.582446 +vn -0.751854 0.480300 0.451643 +vn 0.753105 -0.449171 -0.480667 +vn -0.651631 -0.449171 -0.611194 +vn -0.708518 0.118564 -0.695608 +vn -0.996368 0.083865 0.012452 +vn -0.005829 0.083865 -0.996429 +vn -0.698325 0.029969 0.715110 +vn 0.008545 -0.041444 0.999084 +vn 0.712333 -0.058596 0.699362 +vn 0.999084 -0.041444 -0.009796 +vn 0.702170 0.029969 -0.711356 +vn 0.854427 0.216376 0.472304 +vn 0.863521 0.162664 0.477340 +vn -0.464583 0.026307 0.885098 +vn 0.502396 0.026307 -0.864223 +vn 0.458876 0.018616 -0.888302 +vn -0.861812 -0.174047 -0.476394 +vn -0.869045 -0.118168 -0.480392 +vn -0.508133 0.018616 0.861049 +vn 0.872280 -0.081362 0.482162 +vn 0.410596 0.030213 -0.911283 +vn -0.868404 0.124149 -0.480026 +vn -0.553301 0.030213 0.832423 +vn 0.844478 -0.262551 0.466811 +vn -0.476058 0.019044 0.879177 +vn 0.491287 0.019044 -0.870754 +vn -0.834254 0.302164 -0.461165 +vn 0.865535 -0.147954 0.478439 +vn -0.436995 0.013123 0.899350 +vn 0.529160 0.013123 -0.848415 +vn -0.859066 0.191015 -0.474868 +vn 0.860469 0.182531 0.475631 +vn -0.398419 0.037751 0.916410 +vn 0.564104 0.037751 -0.824824 +vn -0.866604 -0.139561 -0.479049 +vn 0.814020 0.367229 0.449965 +vn 0.464858 0.015107 -0.885250 +vn -0.827113 -0.326731 -0.457228 +vn -0.502365 0.015076 0.864498 +vn 0.924955 0.237587 -0.296609 +vn 0.240791 0.237587 0.941038 +vn -0.249886 -0.208777 -0.945494 +vn -0.933561 -0.208777 0.291269 +vn -0.525681 0.657002 -0.540330 +vn -0.586047 0.541917 -0.602344 +vn 0.687979 0.060274 -0.723167 +vn -0.741783 0.060274 0.667898 +vn -0.668325 -0.015748 0.743675 +vn 0.544786 -0.624165 0.559954 +vn 0.601703 -0.505356 0.618488 +vn 0.761681 -0.015809 -0.647755 +vn -0.661946 0.314402 -0.680380 +vn 0.752098 0.006531 -0.658986 +vn -0.679342 0.006348 0.733787 +vn 0.670675 -0.273446 0.689474 +vn -0.710990 0.160009 -0.684713 +vn 0.726310 -0.041200 -0.686117 +vn -0.686819 0.077395 0.722648 +vn 0.677999 -0.113956 0.726157 +vn -0.987213 0.159398 0.000336 +vn -0.000763 -0.011139 -0.999908 +vn 0.004975 0.041292 0.999115 +vn 0.991607 -0.129093 0.001312 +vn -0.220832 0.324168 -0.919828 +vn -0.225745 0.254524 -0.940336 +vn 0.965453 0.030976 -0.258614 +vn -0.977630 0.030976 0.207892 +vn -0.962920 0.013276 0.269417 +vn 0.223884 -0.283090 0.932554 +vn 0.228095 -0.212561 0.950133 +vn 0.980285 0.013276 -0.197089 +vn -0.849513 0.128819 -0.511551 +vn 0.524644 0.128819 -0.841487 +vn -0.522172 -0.098880 0.847072 +vn 0.849818 -0.098880 0.517655 +vn 0.307596 0.441298 -0.842952 +vn -0.446638 0.312082 -0.838496 +vn 0.881710 0.312082 -0.353771 +vn -0.942289 0.019593 -0.334147 +vn -0.886135 -0.284371 0.365886 +vn -0.313852 -0.402112 0.860103 +vn 0.442213 -0.284371 0.850612 +vn 0.936064 0.019593 0.351238 +vn 0.115665 0.548967 0.827754 +vn 0.129093 0.359661 0.924100 +vn -0.998871 -0.019013 0.043428 +vn 0.995880 0.066469 -0.061647 +vn 0.972533 -0.019166 -0.231910 +vn -0.117832 -0.524308 -0.843318 +vn -0.130589 -0.331919 -0.934202 +vn -0.974609 0.066469 0.213691 +vn 0.138279 -0.048219 0.989196 +vn 0.973998 0.020386 -0.225532 +vn -0.138127 0.077273 -0.987365 +vn -0.998535 0.020295 0.049867 +vn 0.135014 -0.223090 0.965392 +vn 0.992248 0.011536 -0.123692 +vn -0.134068 0.251564 -0.958495 +vn -0.988189 0.011505 0.152776 +vn 0.137150 -0.131565 0.981750 +vn 0.994232 0.010346 -0.106449 +vn -0.136540 0.161199 -0.977416 +vn -0.985351 0.010376 0.170171 +vn 0.138157 -0.055330 0.988861 +vn -0.989563 0.014618 0.143345 +vn 0.990936 0.014618 -0.133396 +vn -0.137883 0.085147 -0.986755 +vn 0.797967 -0.032807 0.601794 +vn -0.602435 -0.032807 0.797479 +vn 0.602710 0.053926 -0.796106 +vn -0.797845 0.053926 -0.600391 +vn 0.725364 0.677419 -0.121952 +vn 0.780633 0.611011 -0.131260 +vn 0.185553 0.038087 0.981872 +vn -0.145756 0.038087 -0.988556 +vn -0.205603 -0.011567 -0.978545 +vn -0.744957 -0.655202 0.125248 +vn -0.798303 -0.587085 0.134220 +vn 0.125736 -0.011567 0.991974 +vn 0.860103 0.489151 -0.144627 +vn 0.135899 0.000580 0.990692 +vn -0.195563 0.000580 -0.980682 +vn -0.874111 -0.462905 0.146977 +vn 0.510269 0.309122 -0.802484 +vn 0.744682 0.309122 0.591449 +vn -0.753960 -0.290231 -0.589251 +vn -0.519761 -0.290231 0.803461 +vn 0.443403 0.158666 -0.882138 +vn -0.318186 0.112186 -0.941343 +vn 0.945311 0.112186 -0.306253 +vn -0.894345 0.014801 -0.447096 +vn -0.946654 -0.091250 0.308969 +vn -0.445326 -0.129063 0.885983 +vn 0.316813 -0.091250 0.944060 +vn 0.892392 0.014801 0.451003 +vn 0.054781 0.871151 0.487930 +vn 0.048280 0.901578 0.429884 +vn -0.996429 -0.018281 0.082308 +vn 0.989868 -0.018281 -0.140721 +vn 0.993042 0.033906 -0.112644 +vn -0.057894 -0.854885 -0.515549 +vn -0.051485 -0.887143 -0.458571 +vn -0.993286 0.033876 0.110416 +vn 0.049043 0.898801 0.435560 +vn -0.996368 -0.022309 0.082034 +vn 0.989746 -0.022095 -0.140965 +vn -0.052217 -0.883969 -0.464583 +vn 0.072939 0.757744 0.648427 +vn -0.997711 -0.050539 0.044374 +vn 0.982757 -0.050508 -0.177709 +vn -0.075625 -0.735923 -0.672781 +vn 0.099460 0.452101 0.886380 +vn 0.979339 -0.025788 -0.200476 +vn -0.101169 -0.423353 -0.900266 +vn -0.999420 -0.025819 0.021729 +vn 0.110660 0.130680 0.985198 +vn 0.985168 0.009186 -0.171178 +vn -0.111118 -0.099063 -0.988830 +vn -0.998627 0.009033 0.051424 +vn 0.111148 0.088778 0.989807 +vn 0.997192 0.019013 -0.072390 +vn -0.111423 -0.056703 -0.992126 +vn -0.988403 0.019013 0.150548 +vn 0.778527 0.126896 0.614612 +vn -0.622822 0.126896 0.771966 +vn 0.623554 -0.104251 -0.774773 +vn -0.779870 -0.104251 -0.617176 +vn 0.157750 0.928892 -0.335002 +vn 0.234748 0.834529 -0.498398 +vn 0.909848 0.094913 0.403882 +vn -0.890957 0.094913 -0.444044 +vn -0.928495 -0.066805 -0.365184 +vn -0.170171 -0.916745 0.361400 +vn -0.245888 -0.816675 0.522050 +vn 0.873104 -0.066775 0.482925 +vn 0.311991 0.681112 -0.662343 +vn 0.895535 0.002564 0.444929 +vn -0.913511 0.002319 -0.406781 +vn -0.321085 -0.657460 0.681600 +vn 0.284677 0.616596 -0.733970 +vn 0.916532 -0.089846 0.389691 +vn -0.939451 0.083621 -0.332255 +vn -0.383160 -0.582385 0.716910 +vn -0.426252 0.523637 -0.737602 +vn 0.906217 0.274087 -0.321848 +vn -0.907224 -0.255196 0.334330 +vn 0.423109 -0.505783 0.751732 +vn 0.187689 0.524766 -0.830256 +vn 0.187414 0.526841 -0.829005 +vn 0.973632 0.014405 0.227638 +vn -0.977264 0.013276 -0.211463 +vn -0.976867 0.014405 -0.213324 +vn -0.191321 -0.497024 0.846370 +vn -0.191076 -0.499130 0.845180 +vn 0.973205 0.013276 0.229499 +vn -0.557268 0.374065 -0.741264 +vn 0.821955 0.374065 -0.429426 +vn -0.824580 -0.354472 0.440870 +vn 0.554704 -0.354472 0.752739 +vn 0.736015 0.673849 0.064577 +vn 0.582263 0.476516 -0.658650 +vn 0.458693 0.476547 0.749992 +vn 0.076754 0.012085 -0.996948 +vn -0.473739 -0.459426 -0.751305 +vn -0.757286 -0.649678 -0.066408 +vn -0.597339 -0.459426 0.657338 +vn -0.097995 0.012085 0.995086 +vn 0.786828 0.532640 -0.311655 +vn 0.827937 0.454878 -0.327952 +vn 0.393689 0.034883 0.918546 +vn -0.342082 0.034883 -0.938994 +vn -0.408216 -0.003845 -0.912839 +vn -0.801660 -0.506424 0.317545 +vn -0.840754 -0.426832 0.333018 +vn 0.327586 -0.003845 0.944792 +vn 0.905667 0.225898 -0.358745 +vn -0.433027 0.000549 -0.901364 +vn -0.911679 -0.195868 0.361126 +vn 0.301645 0.000549 0.953398 +vn 0.928037 -0.060030 -0.367595 +vn 0.312845 0.019807 0.949583 +vn -0.422224 0.019807 -0.906247 +vn -0.925901 0.090487 0.366741 +vn 0.928434 -0.051943 -0.367748 +vn 0.428327 0.011017 0.903531 +vn -0.306558 0.011017 -0.951781 +vn -0.926542 0.082492 0.366985 +vn 0.929289 0.029969 -0.368084 +vn -0.394879 0.014985 -0.918577 +vn -0.929716 0.000793 0.368267 +vn 0.341227 0.014985 0.939848 +vn 0.397137 -0.024140 -0.917417 +vn 0.917661 -0.024140 0.396619 +vn -0.917020 0.045930 -0.396100 +vn -0.397046 0.045930 0.916623 +vn 0.409436 0.910916 0.050142 +vn 0.542558 0.837367 0.066439 +vn -0.104709 0.071352 0.991913 +vn 0.137761 0.071352 -0.987884 +vn 0.070162 -0.048647 -0.996338 +vn -0.436781 -0.897946 -0.053499 +vn -0.567797 -0.820215 -0.069521 +vn -0.172369 -0.048647 0.983825 +vn 0.826075 0.554369 0.101169 +vn -0.222694 -0.047304 0.973724 +vn 0.018891 -0.047304 -0.998688 +vn -0.842769 -0.528275 -0.103214 +vn 0.757164 0.234870 -0.609485 +vn 0.587664 0.234870 0.774224 +vn -0.597186 -0.215339 -0.772637 +vn -0.766015 -0.215339 0.605640 +vn 0.784692 0.180853 -0.592883 +vn 0.128636 0.127903 -0.983398 +vn 0.981140 0.127903 0.144841 +vn -0.604755 0.015198 -0.796228 +vn -0.984008 -0.106388 -0.142674 +vn -0.788751 -0.150487 0.595965 +vn -0.131535 -0.106418 0.985565 +vn 0.600757 0.015198 0.799280 +vn 0.273080 0.663869 0.696158 +vn 0.282113 0.635090 0.719047 +vn -0.938047 -0.002472 0.346416 +vn 0.933012 0.019440 -0.359294 +vn 0.923399 -0.002411 -0.383740 +vn -0.278146 -0.647908 -0.709098 +vn -0.286966 -0.618458 -0.731498 +vn -0.928434 0.019440 0.370891 +vn 0.314646 0.508133 0.801721 +vn -0.948271 -0.016968 0.316965 +vn 0.910947 -0.016846 -0.412152 +vn -0.318522 -0.489395 -0.811792 +vn 0.357128 0.210273 0.910062 +vn -0.960418 -0.007599 0.278420 +vn 0.893643 -0.007599 -0.448683 +vn -0.358623 -0.189276 -0.914060 +vn 0.356731 0.213141 0.909543 +vn 0.959410 0.029237 -0.280435 +vn -0.358257 -0.192785 -0.913480 +vn -0.894162 0.029298 0.446760 +vn 0.342631 0.345317 0.873684 +vn -0.942869 -0.001099 0.333079 +vn 0.917814 -0.001160 -0.396954 +vn -0.345195 -0.325724 -0.880184 +vn 0.351970 0.266518 0.897244 +vn 0.928281 0.009064 -0.371685 +vn -0.353954 -0.246101 -0.902280 +vn -0.933439 0.009033 0.358592 +vn 0.907804 0.181677 0.377941 +vn -0.408673 0.181677 0.894375 +vn 0.407239 -0.167180 -0.897855 +vn -0.909116 -0.167180 -0.381481 +vn -0.296457 0.936247 0.188482 +vn -0.475478 0.826106 0.302316 +vn -0.474471 -0.081973 -0.876400 +vn 0.507248 0.108341 0.854915 +vn 0.592364 -0.081973 0.801447 +vn 0.312632 -0.928831 -0.198767 +vn 0.489639 -0.814417 -0.311319 +vn -0.559008 0.108341 -0.822016 +vn -0.692862 0.570788 0.440565 +vn 0.579577 -0.022370 0.814600 +vn 0.702963 -0.553148 -0.446974 +vn -0.491806 -0.022370 -0.870388 +vn -0.818262 0.240303 0.522141 +vn 0.624287 -0.012299 0.781060 +vn 0.823420 -0.219916 -0.523026 +vn -0.443770 -0.016419 -0.895962 +vn -0.229255 0.003082 0.973327 +vn -0.979156 -0.002869 -0.202979 +vn 0.979492 0.017609 0.200568 +vn 0.231605 0.011658 -0.972716 +vn -0.710746 0.222480 0.667287 +vn -0.721397 0.144322 0.677267 +vn -0.656972 0.005676 -0.753868 +vn 0.659505 0.018097 0.751457 +vn 0.710959 0.005676 0.703177 +vn 0.714011 -0.201880 -0.670370 +vn 0.723472 -0.123386 -0.679220 +vn -0.708426 0.018097 -0.705527 +vn -0.031648 0.045625 0.998444 +vn -0.998444 0.045625 -0.031312 +vn 0.999054 -0.030732 0.029908 +vn 0.033082 -0.030732 -0.998962 +vn -0.250343 0.669576 0.699240 +vn 0.488662 0.473464 0.732810 +vn -0.842738 0.473464 0.256111 +vn 0.943754 0.007904 0.330454 +vn 0.846065 -0.462233 -0.265419 +vn 0.255074 -0.653706 -0.712424 +vn -0.485336 -0.462233 -0.742119 +vn -0.939055 0.007935 -0.343638 +vn 0.459151 0.767968 -0.446516 +vn 0.493881 0.724815 -0.480270 +vn 0.704215 0.030549 0.709311 +vn -0.689383 0.030549 -0.723716 +vn -0.717643 -0.012665 -0.696280 +vn -0.472182 -0.752403 0.459181 +vn -0.506180 -0.708152 0.492203 +vn 0.675985 -0.012635 0.736778 +vn 0.523911 0.682607 -0.509445 +vn 0.692770 0.010712 0.721030 +vn -0.701437 0.010651 -0.712607 +vn -0.535478 -0.664907 0.520707 +vn 0.552843 0.636647 -0.537553 +vn -0.719260 -0.009735 -0.694662 +vn -0.563707 -0.617847 0.548143 +vn 0.674337 -0.009674 0.738304 +vn 0.640492 0.449324 -0.622761 +vn -0.744469 -0.019959 -0.667318 +vn -0.648000 -0.427747 0.630146 +vn 0.646352 -0.019898 0.762749 +vn 0.686422 0.288461 -0.667501 +vn 0.689840 0.009400 0.723869 +vn -0.704367 0.009461 -0.709738 +vn -0.691122 -0.265633 0.672109 +vn -0.005341 0.193243 -0.981109 +vn 0.980590 0.193243 0.032716 +vn -0.983764 -0.176916 -0.029450 +vn 0.001953 -0.176916 0.984191 +vn -0.077853 0.989624 0.120701 +vn -0.202826 0.927335 0.314432 +vn -0.806970 -0.094333 -0.582965 +vn 0.831843 0.112918 0.543382 +vn 0.863765 -0.094333 0.494919 +vn 0.090335 -0.985992 -0.140049 +vn 0.214637 -0.918241 -0.332743 +vn -0.837977 0.112888 -0.533860 +vn -0.387707 0.698843 0.601032 +vn 0.872463 -0.044527 0.486618 +vn 0.396558 -0.681722 -0.614795 +vn -0.803003 -0.044649 -0.594256 +vn 0.272042 0.402142 0.874203 +vn -0.908597 0.402142 0.112522 +vn 0.913083 -0.388958 -0.122166 +vn -0.265084 -0.388958 -0.882260 +vn 0.324534 0.746940 -0.580279 +vn -0.387616 0.528184 -0.755455 +vn 0.846614 0.528184 -0.065188 +vn -0.877041 0.008057 -0.480331 +vn -0.852718 -0.516739 0.076113 +vn -0.333171 -0.730796 0.595752 +vn 0.381512 -0.516739 0.766411 +vn 0.868374 0.008057 0.495804 +vn -0.431654 0.744255 0.509598 +vn -0.385327 0.802759 0.455000 +vn -0.738151 -0.023591 -0.674184 +vn 0.786431 -0.023591 0.617176 +vn 0.752007 0.040315 0.657888 +vn 0.442610 -0.728690 -0.522538 +vn 0.397320 -0.788629 -0.469161 +vn -0.772637 0.040193 -0.633534 +vn -0.417066 0.763878 0.492447 +vn -0.725608 -0.045442 -0.686575 +vn 0.796533 -0.045412 0.602832 +vn 0.428510 -0.748558 -0.505966 +vn -0.558184 0.504257 0.658834 +vn 0.810419 -0.030519 0.585009 +vn 0.565539 -0.484085 -0.667684 +vn -0.710471 -0.030457 -0.703055 +vn -0.640706 0.131504 0.756401 +vn 0.821345 0.000061 0.570421 +vn 0.642445 -0.108860 -0.758538 +vn -0.697745 0.000031 -0.716300 +vn -0.646260 -0.003082 0.763085 +vn 0.739372 0.010865 0.673177 +vn 0.646046 0.025819 -0.762841 +vn -0.785546 0.010865 -0.618671 +vn -0.645314 0.055330 0.761864 +vn -0.756432 0.011109 -0.653951 +vn 0.769494 0.011109 0.638539 +vn 0.645985 -0.032258 -0.762658 +vn 0.082766 0.023988 0.996277 +vn -0.996307 0.023988 0.082247 +vn 0.996521 -0.007630 -0.082766 +vn -0.082278 -0.007630 -0.996551 +vn 0.072207 0.991333 0.109500 +vn 0.023713 0.999054 0.035951 +vn 0.843013 0.039155 -0.536424 +vn -0.825007 0.039155 0.563738 +vn -0.828394 -0.040315 0.558672 +vn -0.059633 -0.994110 -0.090426 +vn -0.011048 -0.999786 -0.016724 +vn 0.839686 -0.040284 -0.541520 +vn -0.026124 0.998871 -0.039369 +vn 0.841151 0.000000 -0.540757 +vn -0.828272 0.000275 0.560259 +vn 0.038942 -0.997497 0.058840 +vn 0.139286 0.954344 -0.264168 +vn -0.964721 -0.213355 0.154241 +vn 0.285714 -0.925718 0.247688 +vn 0.997131 0.012116 -0.074648 +vn -0.717521 0.413984 -0.560137 +vn 0.628346 0.776116 -0.052767 +vn -0.629200 -0.773980 0.070894 +vn 0.713004 -0.406171 0.571490 +vn -0.234840 0.805414 -0.544176 +vn -0.268624 0.735069 -0.622486 +vn 0.908322 0.047792 -0.415509 +vn -0.925413 0.047792 0.375866 +vn -0.899991 -0.028382 0.434919 +vn 0.242134 -0.791589 0.561022 +vn 0.275277 -0.719230 0.637898 +vn 0.933836 -0.028382 -0.356487 +vn -0.859859 0.464156 -0.212439 +vn 0.435255 0.464156 -0.771386 +vn -0.429975 -0.452315 0.781335 +vn 0.863491 -0.452315 0.223121 +vn 0.372997 0.904355 0.207282 +vn -0.079745 0.639454 0.764641 +vn 0.607227 0.639454 -0.471480 +vn -0.476547 -0.004761 0.879116 +vn -0.594256 -0.646260 0.478683 +vn -0.354595 -0.913999 -0.197089 +vn 0.092746 -0.646260 -0.757408 +vn 0.494949 -0.004761 -0.868892 +vn -0.259682 0.951353 -0.165777 +vn -0.403394 0.878018 -0.257546 +vn 0.521287 0.085452 -0.849086 +vn -0.550798 0.085452 0.830226 +vn -0.493789 -0.067721 0.866909 +vn 0.276315 -0.944700 0.176397 +vn 0.419202 -0.867519 0.267617 +vn 0.578570 -0.067721 -0.812799 +vn -0.670736 0.605579 -0.428205 +vn -0.459700 -0.053957 0.886410 +vn 0.680868 -0.589435 0.434675 +vn 0.610614 -0.053957 -0.790063 +vn -0.771233 0.403424 -0.492355 +vn -0.534104 0.009522 0.845332 +vn 0.778252 -0.383953 0.496841 +vn 0.542039 0.009522 -0.840297 +vn -0.799860 0.315317 -0.510636 +vn 0.574114 -0.002686 -0.818751 +vn -0.501053 -0.002686 0.865383 +vn 0.805322 -0.295083 0.514115 +vn -0.820429 0.228980 -0.523820 +vn -0.537797 0.010773 0.842982 +vn 0.824335 -0.208289 0.526322 +vn 0.538408 0.010773 -0.842586 +vn -0.960051 0.165014 0.225867 +vn -0.199103 0.164983 -0.965972 +vn 0.201880 -0.150365 0.967772 +vn 0.962859 -0.150365 -0.224097 +vn -0.074984 0.984863 0.156102 +vn -0.099399 0.973266 0.206977 +vn -0.893796 -0.022767 -0.447829 +vn 0.903378 0.028016 0.427869 +vn 0.908170 -0.022706 0.417920 +vn 0.083987 -0.980987 -0.174871 +vn 0.108371 -0.968169 -0.225562 +vn -0.898587 0.028047 -0.437880 +vn -0.195959 0.891690 0.407971 +vn -0.878048 -0.066744 -0.473830 +vn 0.918638 -0.066652 0.389416 +vn 0.204138 -0.881893 -0.424909 +vn 0.445692 0.566424 0.693167 +vn -0.819697 0.566393 0.085177 +vn 0.823908 -0.558306 -0.097079 +vn -0.439039 -0.558336 -0.703879 +vn 0.372906 0.455153 0.808527 +vn 0.905759 0.321848 0.275582 +vn -0.378368 0.321848 0.867885 +vn 0.906003 0.009461 -0.423109 +vn 0.375561 -0.308420 -0.873959 +vn -0.376873 -0.436140 -0.817133 +vn -0.908567 -0.308420 -0.281655 +vn -0.910001 0.009461 0.414472 +vn 0.404614 0.511551 -0.757988 +vn 0.406598 0.504410 -0.761711 +vn 0.881283 0.010559 0.472396 +vn -0.882931 0.010559 -0.469314 +vn -0.885983 0.006836 -0.463607 +vn -0.409345 -0.494217 0.766900 +vn -0.411267 -0.486953 0.770501 +vn 0.878231 0.006836 0.478133 +vn 0.414655 0.474013 -0.776727 +vn -0.889248 0.003327 -0.457350 +vn -0.419050 -0.456191 0.784997 +vn 0.874874 0.003357 0.484298 +vn 0.437513 0.370067 -0.819483 +vn -0.900662 -0.004883 -0.434462 +vn -0.440931 -0.351115 0.825983 +vn 0.862239 -0.004822 0.506424 +vn 0.467971 0.112583 -0.876522 +vn -0.917142 0.001953 -0.398480 +vn -0.468886 -0.092502 0.878384 +vn 0.841548 0.001953 0.540147 +vn 0.467452 0.120640 -0.875729 +vn 0.917814 0.019318 0.396496 +vn -0.840205 0.019318 -0.541917 +vn -0.468490 -0.100833 0.877682 +vn 0.467177 0.125095 -0.875240 +vn -0.918363 0.000458 -0.395672 +vn -0.468276 -0.105319 0.877255 +vn 0.839808 0.000458 0.542833 +vn -0.284036 -0.043123 -0.957823 +vn 0.953887 -0.043123 -0.297037 +vn -0.952849 0.057253 0.297922 +vn 0.282723 0.057253 0.957457 +vn 0.769738 0.638325 0.002594 +vn 0.901914 0.431867 0.003021 +vn 0.079653 0.080325 0.993561 +vn 0.086367 0.080325 -0.993011 +vn -0.100528 -0.037355 -0.994201 +vn -0.782006 -0.623218 -0.002625 +vn -0.910306 -0.413923 -0.003052 +vn -0.107242 -0.037355 0.993500 +vn 0.984222 0.176733 0.003296 +vn -0.014069 0.007904 0.999847 +vn -0.007324 0.007904 -0.999939 +vn -0.987426 -0.157842 -0.003327 +vn 0.994751 0.101749 -0.010132 +vn -0.026399 -0.019227 0.999451 +vn -0.025727 0.034608 -0.999054 +vn -0.996582 -0.081088 -0.013855 +vn 0.705191 0.070284 -0.705466 +vn 0.708029 -0.006348 0.706107 +vn -0.708731 0.020478 -0.705161 +vn -0.706290 -0.056124 0.705649 +vn 0.539720 0.813654 -0.215979 +vn 0.589312 0.772698 -0.235847 +vn 0.380779 0.030915 0.924131 +vn -0.361919 0.030915 -0.931669 +vn -0.396649 -0.016846 -0.917814 +vn -0.554735 -0.801843 0.221992 +vn -0.603565 -0.759819 0.241554 +vn 0.346049 -0.016846 0.938047 +vn 0.188055 0.515061 -0.836238 +vn 0.713065 0.515061 0.475600 +vn -0.722678 -0.505570 -0.471236 +vn -0.198035 -0.505570 0.839717 +vn 0.797021 0.493881 0.347575 +vn 0.846217 0.349223 -0.402356 +vn 0.280923 0.349223 0.893918 +vn 0.395245 0.008759 -0.918516 +vn -0.287240 -0.336833 -0.896664 +vn -0.805933 -0.476333 -0.351451 +vn -0.852535 -0.336833 0.399579 +vn -0.404157 0.008759 0.914609 +s 1 +f 1//1 5//2 4//3 +f 2//4 6//5 5//2 +f 3//6 7//7 2//4 +f 4//3 8//8 7//7 +f 5//2 9//9 12//10 +f 6//5 10//11 9//9 +f 7//7 11//12 10//11 +f 8//8 12//10 11//12 +f 9//9 13//13 16//14 +f 10//11 14//15 9//9 +f 11//12 15//16 14//15 +f 12//10 16//14 11//12 +f 13//13 17//17 16//14 +f 14//15 18//18 13//13 +f 15//16 19//19 14//15 +f 16//14 20//20 15//16 +f 17//17 21//21 20//20 +f 18//18 22//22 21//21 +f 19//19 23//23 18//18 +f 20//20 24//24 23//23 +f 21//21 25//25 24//24 +f 22//22 26//26 21//21 +f 23//23 27//27 22//22 +f 24//24 28//28 23//23 +f 25//25 29//29 32//30 +f 26//26 30//31 29//29 +f 27//27 31//32 30//31 +f 28//28 32//30 31//32 +f 29//29 33//33 36//34 +f 30//31 34//35 33//33 +f 31//32 35//36 34//35 +f 32//30 36//34 35//36 +f 37//37 41//38 40//39 +f 38//40 42//41 41//38 +f 39//42 43//43 38//40 +f 40//39 44//44 43//43 +f 41//38 45//45 48//46 +f 42//41 46//47 41//38 +f 43//43 47//48 46//47 +f 44//44 48//46 43//43 +f 45//45 49//49 52//50 +f 46//47 50//51 49//49 +f 47//48 51//52 50//51 +f 48//46 52//50 51//52 +f 49//49 53//53 52//50 +f 50//51 54//54 49//49 +f 51//52 55//55 50//51 +f 52//50 56//56 51//52 +f 53//53 57//57 60//58 +f 54//54 58//59 57//57 +f 55//55 59//60 58//59 +f 56//56 60//58 59//60 +f 57//57 61//61 64//62 +f 58//59 62//63 57//57 +f 59//60 63//64 62//63 +f 60//58 64//62 59//60 +f 61//61 65//65 68//66 +f 62//63 66//67 65//65 +f 63//64 67//68 66//67 +f 64//62 68//66 67//68 +f 69//69 73//70 72//71 +f 70//72 74//73 69//69 +f 71//74 75//75 70//72 +f 72//71 76//76 71//74 +f 73//70 77//77 80//78 +f 74//73 78//79 77//77 +f 75//75 79//80 78//79 +f 76//76 80//78 79//80 +f 77//77 81//81 80//78 +f 78//79 82//82 77//77 +f 79//80 83//83 78//79 +f 80//78 84//84 79//80 +f 81//81 85//85 88//86 +f 82//82 86//87 85//85 +f 83//83 87//88 86//87 +f 84//84 88//86 87//88 +f 85//85 89//89 88//86 +f 86//87 90//90 89//89 +f 87//88 91//91 86//87 +f 88//86 92//92 91//91 +f 89//89 93//93 96//94 +f 90//90 94//95 89//89 +f 91//91 95//96 94//95 +f 92//92 96//94 91//91 +f 93//93 97//97 100//98 +f 94//95 98//99 97//97 +f 95//96 99//100 98//99 +f 96//94 100//98 99//100 +f 101//101 105//102 108//103 +f 102//104 106//105 105//102 +f 103//106 107//107 106//105 +f 104//108 108//103 107//107 +f 105//102 109//109 108//103 +f 106//105 110//110 105//102 +f 107//107 111//111 106//105 +f 108//103 112//112 107//107 +f 109//109 113//113 112//112 +f 110//110 114//114 109//109 +f 111//111 115//115 110//110 +f 112//112 116//116 111//111 +f 113//113 117//117 120//118 +f 114//114 118//119 117//117 +f 115//115 119//120 118//119 +f 116//116 120//118 119//120 +f 117//117 121//121 120//118 +f 118//119 122//122 121//121 +f 119//120 123//123 118//119 +f 120//118 124//124 123//123 +f 121//121 125//125 128//126 +f 122//122 126//127 125//125 +f 123//123 127//128 126//127 +f 124//124 128//126 127//128 +f 129//129 133//130 136//131 +f 130//132 134//133 133//130 +f 131//134 135//135 134//133 +f 132//136 136//131 135//135 +f 133//130 137//137 136//131 +f 134//133 138//138 133//130 +f 135//135 139//139 134//133 +f 136//131 140//140 135//135 +f 137//137 141//141 140//140 +f 138//138 142//142 141//141 +f 139//139 143//143 138//138 +f 140//140 144//144 143//143 +f 141//141 145//145 148//146 +f 142//142 146//147 141//141 +f 143//143 147//148 146//147 +f 144//144 148//146 143//143 +f 145//145 149//149 152//150 +f 146//147 150//151 149//149 +f 147//148 151//152 150//151 +f 148//146 152//150 151//152 +f 153//153 157//154 160//155 +f 154//156 158//157 153//153 +f 155//158 159//159 158//157 +f 156//160 160//155 155//158 +f 157//154 161//161 160//155 +f 158//157 162//162 161//161 +f 159//159 163//163 158//157 +f 160//155 164//164 163//163 +f 161//161 165//165 168//166 +f 162//162 166//167 165//165 +f 163//163 167//168 166//167 +f 164//164 168//166 167//168 +f 165//165 169//169 172//170 +f 166//167 170//171 165//165 +f 167//168 171//172 170//171 +f 168//166 172//170 167//168 +f 169//169 173//173 176//174 +f 170//171 174//175 173//173 +f 171//172 175//176 174//175 +f 172//170 176//174 175//176 +f 177//177 181//178 184//179 +f 178//180 182//181 181//178 +f 179//182 183//183 182//181 +f 180//184 184//179 183//183 +f 181//178 185//185 188//186 +f 182//181 186//187 185//185 +f 183//183 187//188 186//187 +f 184//179 188//186 187//188 +f 185//185 189//189 188//186 +f 186//187 190//190 185//185 +f 187//188 191//191 186//187 +f 188//186 192//192 187//188 +f 189//189 193//193 196//194 +f 190//190 194//195 193//193 +f 191//191 195//196 194//195 +f 192//192 196//194 195//196 +f 197//197 201//198 200//199 +f 198//200 202//201 201//198 +f 199//202 203//203 198//200 +f 200//199 204//204 203//203 +f 201//198 205//205 208//206 +f 202//201 206//207 201//198 +f 203//203 207//208 206//207 +f 204//204 208//206 203//203 +f 205//205 209//209 208//206 +f 206//207 210//210 205//205 +f 207//208 211//211 206//207 +f 208//206 212//212 207//208 +f 209//209 213//213 216//214 +f 210//210 214//215 213//213 +f 211//211 215//216 214//215 +f 212//212 216//214 215//216 +f 217//217 221//218 224//219 +f 218//220 222//221 217//217 +f 219//222 223//223 222//221 +f 220//224 224//219 219//222 +f 221//218 225//225 224//219 +f 222//221 226//226 225//225 +f 223//223 227//227 222//221 +f 224//219 228//228 227//227 +f 225//225 229//229 232//230 +f 226//226 230//231 229//229 +f 227//227 231//232 230//231 +f 228//228 232//230 231//232 +f 233//233 237//234 240//235 +f 234//236 238//237 233//233 +f 235//238 239//239 238//237 +f 236//240 240//235 235//238 +f 237//234 241//241 240//235 +f 238//237 242//242 241//241 +f 239//239 243//243 238//237 +f 240//235 244//244 243//243 +f 241//241 245//245 248//246 +f 242//242 246//247 245//245 +f 243//243 247//248 246//247 +f 244//244 248//246 247//248 +f 249//249 253//250 252//251 +f 250//252 254//253 249//249 +f 251//254 255//255 250//252 +f 252//251 256//256 251//254 +f 253//250 257//257 260//258 +f 254//253 258//259 253//250 +f 255//255 259//260 258//259 +f 256//256 260//258 255//255 +f 257//257 261//261 264//262 +f 258//259 262//263 261//261 +f 259//260 263//264 262//263 +f 260//258 264//262 263//264 +f 265//265 269//266 268//267 +f 266//268 270//269 265//265 +f 267//270 271//271 266//268 +f 268//267 272//272 267//270 +f 269//266 273//273 276//274 +f 270//269 274//275 273//273 +f 271//271 275//276 274//275 +f 272//272 276//274 275//276 +f 277//277 281//278 284//279 +f 278//280 282//281 281//278 +f 279//282 283//283 282//281 +f 280//284 284//279 283//283 +f 281//278 285//285 288//286 +f 282//281 286//287 285//285 +f 283//283 287//288 286//287 +f 284//279 288//286 287//288 +f 289//289 293//290 292//291 +f 290//292 294//293 289//289 +f 291//294 295//295 290//292 +f 292//291 296//296 291//294 +f 293//290 297//297 300//298 +f 294//293 298//299 297//297 +f 295//295 299//300 298//299 +f 296//296 300//298 299//300 +f 301//301 305//302 308//303 +f 302//304 306//305 305//302 +f 303//306 307//307 306//305 +f 304//308 308//303 307//307 +f 305//302 309//309 312//310 +f 306//305 310//311 309//309 +f 307//307 311//312 310//311 +f 308//303 312//310 311//312 +f 313//313 317//314 316//315 +f 314//316 318//317 313//313 +f 315//318 319//319 314//316 +f 316//315 320//320 315//318 +f 317//314 321//321 324//322 +f 318//317 322//323 321//321 +f 319//319 323//324 322//323 +f 320//320 324//322 323//324 +f 325//325 329//326 332//327 +f 326//328 330//329 329//326 +f 327//330 331//331 330//329 +f 328//332 332//327 331//331 +f 333//333 337//334 340//335 +f 334//336 338//337 337//334 +f 335//338 339//339 338//337 +f 336//340 340//335 339//339 +f 341//341 345//342 348//343 +f 342//344 346//345 345//342 +f 343//346 347//347 346//345 +f 344//348 348//343 347//347 +f 349//349 353//350 356//351 +f 350//352 354//353 353//350 +f 351//354 355//355 354//353 +f 352//356 356//351 355//355 +f 357//357 361//358 364//359 +f 358//360 362//361 361//358 +f 359//362 363//363 362//361 +f 360//364 364//359 363//363 +f 365//365 369//366 372//367 +f 366//368 370//369 369//366 +f 367//370 371//371 370//369 +f 368//372 372//367 371//371 +f 373//373 377//374 380//375 +f 374//376 378//377 377//374 +f 375//378 379//379 378//377 +f 376//380 380//375 379//379 +f 377//374 381//381 384//382 +f 378//377 382//383 381//381 +f 379//379 383//384 382//383 +f 380//375 384//382 383//384 +f 381//381 385//385 388//386 +f 382//383 386//387 381//381 +f 383//384 387//388 386//387 +f 384//382 388//386 383//384 +f 385//385 389//389 388//386 +f 386//387 390//390 385//385 +f 387//388 391//391 386//387 +f 388//386 392//392 387//388 +f 389//389 393//393 396//394 +f 390//390 394//395 389//389 +f 391//391 395//396 394//395 +f 392//392 396//394 391//391 +f 393//393 397//397 396//394 +f 394//395 398//398 397//397 +f 395//396 399//399 394//395 +f 396//394 400//400 399//399 +f 397//397 401//401 404//402 +f 398//398 402//403 401//401 +f 399//399 403//404 402//403 +f 400//400 404//402 403//404 +f 401//401 405//405 404//402 +f 402//403 406//406 401//401 +f 403//404 407//407 402//403 +f 404//402 408//408 403//404 +f 405//405 409//409 412//410 +f 406//406 410//411 409//409 +f 407//407 411//412 410//411 +f 408//408 412//410 411//412 +f 409//409 413//413 416//414 +f 410//411 414//415 413//413 +f 411//412 415//416 414//415 +f 412//410 416//414 415//416 +f 417//417 421//418 420//419 +f 418//420 422//421 417//417 +f 419//422 423//423 418//420 +f 420//419 424//424 419//422 +f 421//418 425//425 428//426 +f 422//421 426//427 425//425 +f 423//423 427//428 426//427 +f 424//424 428//426 427//428 +f 425//425 429//429 428//426 +f 426//427 430//430 425//425 +f 427//428 431//431 426//427 +f 428//426 432//432 427//428 +f 429//429 433//433 436//434 +f 430//430 434//435 429//429 +f 431//431 435//436 434//435 +f 432//432 436//434 431//431 +f 433//433 437//437 436//434 +f 434//435 438//438 437//437 +f 435//436 439//439 434//435 +f 436//434 440//440 439//439 +f 437//437 441//441 444//442 +f 438//438 442//443 441//441 +f 439//439 443//444 442//443 +f 440//440 444//442 443//444 +f 441//441 445//445 444//442 +f 442//443 446//446 445//445 +f 443//444 447//447 442//443 +f 444//442 448//448 447//447 +f 445//445 449//449 452//450 +f 446//446 450//451 445//445 +f 447//447 451//452 450//451 +f 448//448 452//450 447//447 +f 449//449 453//453 456//454 +f 450//451 454//455 453//453 +f 451//452 455//456 454//455 +f 452//450 456//454 455//456 +f 453//453 457//457 460//458 +f 454//455 458//459 457//457 +f 455//456 459//460 458//459 +f 456//454 460//458 459//460 +f 461//461 465//462 464//463 +f 462//464 466//465 465//462 +f 463//466 467//467 462//464 +f 464//463 468//468 467//467 +f 465//462 469//469 468//468 +f 466//465 470//470 469//469 +f 467//467 471//471 466//465 +f 468//468 472//472 471//471 +f 469//469 473//473 472//472 +f 470//470 474//474 469//469 +f 471//471 475//475 470//470 +f 472//472 476//476 471//471 +f 473//473 477//477 480//478 +f 474//474 478//479 473//473 +f 475//475 479//480 478//479 +f 476//476 480//478 475//475 +f 477//477 481//481 484//482 +f 478//479 482//483 481//481 +f 479//480 483//484 482//483 +f 480//478 484//482 483//484 +f 481//481 485//485 488//486 +f 482//483 486//487 481//481 +f 483//484 487//488 486//487 +f 484//482 488//486 483//484 +f 485//485 489//489 488//486 +f 486//487 490//490 489//489 +f 487//488 491//491 486//487 +f 488//486 492//492 491//491 +f 489//489 493//493 492//492 +f 490//490 494//494 489//489 +f 491//491 495//495 490//490 +f 492//492 496//496 491//491 +f 493//493 497//497 500//498 +f 494//494 498//499 497//497 +f 495//495 499//500 498//499 +f 496//496 500//498 499//500 +f 497//497 501//501 504//502 +f 498//499 502//503 501//501 +f 499//500 503//504 502//503 +f 500//498 504//502 503//504 +f 505//505 509//506 508//507 +f 506//508 510//509 509//506 +f 507//510 511//511 506//508 +f 508//507 512//512 511//511 +f 509//506 513//513 516//514 +f 510//509 514//515 513//513 +f 511//511 515//516 514//515 +f 512//512 516//514 515//516 +f 513//513 517//517 520//518 +f 514//515 518//519 517//517 +f 515//516 519//520 518//519 +f 516//514 520//518 519//520 +f 517//517 521//521 520//518 +f 518//519 522//522 521//521 +f 519//520 523//523 518//519 +f 520//518 524//524 519//520 +f 521//521 525//525 528//526 +f 522//522 526//527 521//521 +f 523//523 527//528 526//527 +f 524//524 528//526 523//523 +f 525//525 529//529 532//530 +f 526//527 530//531 529//529 +f 527//528 531//532 530//531 +f 528//526 532//530 531//532 +f 529//529 533//533 536//534 +f 530//531 534//535 533//533 +f 531//532 535//536 534//535 +f 532//530 536//534 535//536 +f 533//533 537//537 536//534 +f 534//535 538//538 533//533 +f 535//536 539//539 534//535 +f 536//534 540//540 535//536 +f 537//537 541//541 540//540 +f 538//538 542//542 537//537 +f 539//539 543//543 538//538 +f 540//540 544//544 539//539 +f 541//541 545//545 548//546 +f 542//542 546//547 545//545 +f 543//543 547//548 546//547 +f 544//544 548//546 547//548 +f 549//549 553//550 556//551 +f 550//552 554//553 553//550 +f 551//554 555//555 554//553 +f 552//556 556//551 555//555 +f 553//550 557//557 556//551 +f 554//553 558//558 553//550 +f 555//555 559//559 554//553 +f 556//551 560//560 555//555 +f 557//557 561//561 564//562 +f 558//558 562//563 557//557 +f 559//559 563//564 562//563 +f 560//560 564//562 559//559 +f 561//561 565//565 564//562 +f 562//563 566//566 565//565 +f 563//564 567//567 562//563 +f 564//562 568//568 567//567 +f 565//565 569//569 568//568 +f 566//566 570//570 565//565 +f 567//567 571//571 566//566 +f 568//568 572//572 567//567 +f 569//569 573//573 572//572 +f 570//570 574//574 573//573 +f 571//571 575//575 570//570 +f 572//572 576//576 575//575 +f 573//573 577//577 580//578 +f 574//574 578//579 573//573 +f 575//575 579//580 578//579 +f 576//576 580//578 575//575 +f 577//577 581//581 580//578 +f 578//579 582//582 577//577 +f 579//580 583//583 578//579 +f 580//578 584//584 579//580 +f 581//581 585//585 584//584 +f 582//582 586//586 581//581 +f 583//583 587//587 582//582 +f 584//584 588//588 583//583 +f 585//585 589//589 592//590 +f 586//586 590//591 589//589 +f 587//587 591//592 590//591 +f 588//588 592//590 591//592 +f 593//593 597//594 596//595 +f 594//596 598//597 597//594 +f 595//598 599//599 594//596 +f 596//595 600//600 599//599 +f 597//594 601//601 604//602 +f 598//597 602//603 597//594 +f 599//599 603//604 602//603 +f 600//600 604//602 599//599 +f 601//601 605//605 604//602 +f 602//603 606//606 605//605 +f 603//604 607//607 602//603 +f 604//602 608//608 607//607 +f 605//605 609//609 608//608 +f 606//606 610//610 605//605 +f 607//607 611//611 606//606 +f 608//608 612//612 607//607 +f 609//609 613//613 616//614 +f 610//610 614//615 613//613 +f 611//611 615//616 614//615 +f 612//612 616//614 615//616 +f 613//613 617//617 620//618 +f 614//615 618//619 613//613 +f 615//616 619//620 618//619 +f 616//614 620//618 615//616 +f 617//617 621//621 624//622 +f 618//619 622//623 621//621 +f 619//620 623//624 622//623 +f 620//618 624//622 623//624 +f 621//621 625//625 624//622 +f 622//623 626//626 621//621 +f 623//624 627//627 622//623 +f 624//622 628//628 623//624 +f 625//625 629//629 632//630 +f 626//626 630//631 625//625 +f 627//627 631//632 630//631 +f 628//628 632//630 627//627 +f 629//629 633//633 636//634 +f 630//631 634//635 633//633 +f 631//632 635//636 634//635 +f 632//630 636//634 635//636 +f 637//637 641//638 640//639 +f 638//640 642//641 641//638 +f 639//642 643//643 638//640 +f 640//639 644//644 643//643 +f 641//638 645//645 648//646 +f 642//641 646//647 641//638 +f 643//643 647//648 646//647 +f 644//644 648//646 643//643 +f 645//645 649//649 648//646 +f 646//647 650//650 645//645 +f 647//648 651//651 646//647 +f 648//646 652//652 647//648 +f 649//649 653//653 656//654 +f 650//650 654//655 653//653 +f 651//651 655//656 654//655 +f 652//652 656//654 655//656 +f 653//653 657//657 660//658 +f 654//655 658//659 657//657 +f 655//656 659//660 658//659 +f 656//654 660//658 659//660 +f 657//657 661//661 664//662 +f 658//659 662//663 657//657 +f 659//660 663//664 662//663 +f 660//658 664//662 663//664 +f 661//661 665//665 664//662 +f 662//663 666//666 661//661 +f 663//664 667//667 662//663 +f 664//662 668//668 663//664 +f 665//665 669//669 668//668 +f 666//666 670//670 669//669 +f 667//667 671//671 666//666 +f 668//668 672//672 671//671 +f 669//669 673//673 676//674 +f 670//670 674//675 673//673 +f 671//671 675//676 674//675 +f 672//672 676//674 675//676 +f 673//673 677//677 680//678 +f 674//675 678//679 677//677 +f 675//676 679//680 678//679 +f 676//674 680//678 679//680 +f 681//681 685//682 684//683 +f 682//684 686//685 681//681 +f 683//686 687//687 682//684 +f 684//683 688//688 683//686 +f 685//682 689//689 692//690 +f 686//685 690//691 689//689 +f 687//687 691//692 690//691 +f 688//688 692//690 691//692 +f 689//689 693//693 696//694 +f 690//691 694//695 693//693 +f 691//692 695//696 694//695 +f 692//690 696//694 695//696 +f 693//693 697//697 700//698 +f 694//695 698//699 693//693 +f 695//696 699//700 698//699 +f 696//694 700//698 695//696 +f 697//697 701//701 700//698 +f 698//699 702//702 701//701 +f 699//700 703//703 698//699 +f 700//698 704//704 703//703 +f 701//701 705//705 704//704 +f 702//702 706//706 701//701 +f 703//703 707//707 702//702 +f 704//704 708//708 703//703 +f 705//705 709//709 712//710 +f 706//706 710//711 709//709 +f 707//707 711//712 710//711 +f 708//708 712//710 711//712 +f 709//709 713//713 712//710 +f 710//711 714//714 713//713 +f 711//712 715//715 710//711 +f 712//710 716//716 715//715 +f 713//713 717//717 720//718 +f 714//714 718//719 713//713 +f 715//715 719//720 718//719 +f 716//716 720//718 715//715 +f 717//717 721//721 724//722 +f 718//719 722//723 721//721 +f 719//720 723//724 722//723 +f 720//718 724//722 723//724 +f 725//725 729//726 732//727 +f 726//728 730//729 729//726 +f 727//730 731//731 730//729 +f 728//732 732//727 731//731 +f 729//726 733//733 736//734 +f 730//729 734//735 733//733 +f 731//731 735//736 734//735 +f 732//727 736//734 735//736 +f 733//733 737//737 736//734 +f 734//735 738//738 737//737 +f 735//736 739//739 734//735 +f 736//734 740//740 739//739 +f 737//737 741//741 744//742 +f 738//738 742//743 737//737 +f 739//739 743//744 742//743 +f 740//740 744//742 739//739 +f 741//741 745//745 748//746 +f 742//743 746//747 741//741 +f 743//744 747//748 742//743 +f 744//742 748//746 743//744 +f 745//745 749//749 748//746 +f 746//747 750//750 749//749 +f 747//748 751//751 746//747 +f 748//746 752//752 751//751 +f 749//749 753//753 752//752 +f 750//750 754//754 753//753 +f 751//751 755//755 750//750 +f 752//752 756//756 755//755 +f 753//753 757//757 760//758 +f 754//754 758//759 753//753 +f 755//755 759//760 758//759 +f 756//756 760//758 755//755 +f 757//757 761//761 760//758 +f 758//759 762//762 761//761 +f 759//760 763//763 758//759 +f 760//758 764//764 763//763 +f 761//761 765//765 768//766 +f 762//762 766//767 765//765 +f 763//763 767//768 766//767 +f 764//764 768//766 767//768 +f 769//769 773//770 772//771 +f 770//772 774//773 773//770 +f 771//774 775//775 770//772 +f 772//771 776//776 775//775 +f 773//770 777//777 780//778 +f 774//773 778//779 773//770 +f 775//775 779//780 778//779 +f 776//776 780//778 775//775 +f 777//777 781//781 780//778 +f 778//779 782//782 781//781 +f 779//780 783//783 778//779 +f 780//778 784//784 783//783 +f 781//781 785//785 784//784 +f 782//782 786//786 781//781 +f 783//783 787//787 782//782 +f 784//784 788//788 783//783 +f 785//785 789//789 792//790 +f 786//786 790//791 789//789 +f 787//787 791//792 790//791 +f 788//788 792//790 791//792 +f 789//789 793//793 796//794 +f 790//791 794//795 789//789 +f 791//792 795//796 794//795 +f 792//790 796//794 791//792 +f 793//793 797//797 796//794 +f 794//795 798//798 793//793 +f 795//796 799//799 794//795 +f 796//794 800//800 795//796 +f 797//797 801//801 804//802 +f 798//798 802//803 801//801 +f 799//799 803//804 802//803 +f 800//800 804//802 803//804 +f 801//801 805//805 804//802 +f 802//803 806//806 801//801 +f 803//804 807//807 802//803 +f 804//802 808//808 803//804 +f 805//805 809//809 812//810 +f 806//806 810//811 809//809 +f 807//807 811//812 810//811 +f 808//808 812//810 811//812 +f 813//813 817//814 816//815 +f 814//816 818//817 813//813 +f 815//818 819//819 814//816 +f 816//815 820//820 819//819 +f 817//814 821//821 824//822 +f 818//817 822//823 821//821 +f 819//819 823//824 822//823 +f 820//820 824//822 823//824 +f 821//821 825//825 824//822 +f 822//823 826//826 825//825 +f 823//824 827//827 822//823 +f 824//822 828//828 827//827 +f 825//825 829//829 832//830 +f 826//826 830//831 825//825 +f 827//827 831//832 830//831 +f 828//828 832//830 827//827 +f 829//829 833//833 836//834 +f 830//831 834//835 833//833 +f 831//832 835//836 834//835 +f 832//830 836//834 835//836 +f 833//833 837//837 840//838 +f 834//835 838//839 833//833 +f 835//836 839//840 838//839 +f 836//834 840//838 835//836 +f 837//837 841//841 840//838 +f 838//839 842//842 841//841 +f 839//840 843//843 838//839 +f 840//838 844//844 843//843 +f 841//841 845//845 844//844 +f 842//842 846//846 845//845 +f 843//843 847//847 842//842 +f 844//844 848//848 847//847 +f 845//845 849//849 852//850 +f 846//846 850//851 845//845 +f 847//847 851//852 850//851 +f 848//848 852//850 847//847 +f 849//849 853//853 856//854 +f 850//851 854//855 853//853 +f 851//852 855//856 854//855 +f 852//850 856//854 855//856 +f 857//857 861//858 864//859 +f 858//860 862//861 857//857 +f 859//862 863//863 862//861 +f 860//864 864//859 859//862 +f 861//858 865//865 864//859 +f 862//861 866//866 865//865 +f 863//863 867//867 862//861 +f 864//859 868//868 867//867 +f 865//865 869//869 868//868 +f 866//866 870//870 869//869 +f 867//867 871//871 866//866 +f 868//868 872//872 871//871 +f 869//869 873//873 872//872 +f 870//870 874//874 873//873 +f 871//871 875//875 870//870 +f 872//872 876//876 875//875 +f 873//873 877//877 876//876 +f 874//874 878//878 877//877 +f 875//875 879//879 874//874 +f 876//876 880//880 879//879 +f 877//877 881//881 884//882 +f 878//878 882//883 881//881 +f 879//879 883//884 882//883 +f 880//880 884//882 883//884 +f 881//881 885//885 888//886 +f 882//883 886//887 881//881 +f 883//884 887//888 886//887 +f 884//882 888//886 883//884 +f 885//885 889//889 888//886 +f 886//887 890//890 889//889 +f 887//888 891//891 886//887 +f 888//886 892//892 891//891 +f 889//889 893//893 896//894 +f 890//890 894//895 893//893 +f 891//891 895//896 894//895 +f 892//892 896//894 895//896 +f 893//893 897//897 900//898 +f 894//895 898//899 897//897 +f 895//896 899//900 898//899 +f 896//894 900//898 899//900 +f 901//901 905//902 908//903 +f 902//904 906//905 905//902 +f 903//906 907//907 906//905 +f 904//908 908//903 907//907 +f 905//902 909//909 912//910 +f 906//905 910//911 909//909 +f 907//907 911//912 910//911 +f 908//903 912//910 911//912 +f 909//909 913//913 912//910 +f 910//911 914//914 909//909 +f 911//912 915//915 910//911 +f 912//910 916//916 911//912 +f 913//913 917//917 920//918 +f 914//914 918//919 913//913 +f 915//915 919//920 918//919 +f 916//916 920//918 915//915 +f 917//917 921//921 920//918 +f 918//919 922//922 917//917 +f 919//920 923//923 918//919 +f 920//918 924//924 919//920 +f 921//921 925//925 928//926 +f 922//922 926//927 921//921 +f 923//923 927//928 926//927 +f 924//924 928//926 923//923 +f 925//925 929//929 928//926 +f 926//927 930//930 929//929 +f 927//928 931//931 926//927 +f 928//926 932//932 931//931 +f 929//929 933//933 932//932 +f 930//930 934//934 933//933 +f 931//931 935//935 930//930 +f 932//932 936//936 935//935 +f 933//933 937//937 940//938 +f 934//934 938//939 937//937 +f 935//935 939//940 938//939 +f 936//936 940//938 939//940 +f 937//937 941//941 944//942 +f 938//939 942//943 941//941 +f 939//940 943//944 942//943 +f 940//938 944//942 943//944 +f 945//945 949//946 948//947 +f 946//948 950//949 949//946 +f 947//950 951//951 946//948 +f 948//947 952//952 951//951 +f 949//946 953//953 956//954 +f 950//949 954//955 953//953 +f 951//951 955//956 954//955 +f 952//952 956//954 955//956 +f 953//953 957//957 956//954 +f 954//955 958//958 953//953 +f 955//956 959//959 954//955 +f 956//954 960//960 955//956 +f 957//957 961//961 964//962 +f 958//958 962//963 957//957 +f 959//959 963//964 962//963 +f 960//960 964//962 959//959 +f 961//961 965//965 968//966 +f 962//963 966//967 961//961 +f 963//964 967//968 966//967 +f 964//962 968//966 963//964 +f 965//965 969//969 968//966 +f 966//967 970//970 965//965 +f 967//968 971//971 966//967 +f 968//966 972//972 967//968 +f 969//969 973//973 976//974 +f 970//970 974//975 973//973 +f 971//971 975//976 974//975 +f 972//972 976//974 975//976 +f 973//973 977//977 980//978 +f 974//975 978//979 973//973 +f 975//976 979//980 978//979 +f 976//974 980//978 975//976 +f 977//977 981//981 980//978 +f 978//979 982//982 981//981 +f 979//980 983//983 978//979 +f 980//978 984//984 983//983 +f 981//981 985//985 988//986 +f 982//982 986//987 985//985 +f 983//983 987//988 986//987 +f 984//984 988//986 987//988 +f 989//989 993//990 992//991 +f 990//992 994//993 989//989 +f 991//994 995//995 990//992 +f 992//991 996//996 991//994 +f 993//990 997//997 996//996 +f 994//993 998//998 993//990 +f 995//995 999//999 994//993 +f 996//996 1000//1000 995//995 +f 997//997 1001//1001 1004//1002 +f 998//998 1002//1003 997//997 +f 999//999 1003//1004 1002//1003 +f 1000//1000 1004//1002 999//999 +f 1001//1001 1005//1005 1004//1002 +f 1002//1003 1006//1006 1005//1005 +f 1003//1004 1007//1007 1002//1003 +f 1004//1002 1008//1008 1007//1007 +f 1005//1005 1009//1009 1012//1010 +f 1006//1006 1010//1011 1009//1009 +f 1007//1007 1011//1012 1010//1011 +f 1008//1008 1012//1010 1011//1012 +f 1009//1009 1013//1013 1016//1014 +f 1010//1011 1014//1015 1013//1013 +f 1011//1012 1015//1016 1014//1015 +f 1012//1010 1016//1014 1015//1016 +f 1013//1013 1017//1017 1016//1014 +f 1014//1015 1018//1018 1017//1017 +f 1015//1016 1019//1019 1014//1015 +f 1016//1014 1020//1020 1019//1019 +f 1017//1017 1021//1021 1024//1022 +f 1018//1018 1022//1023 1021//1021 +f 1019//1019 1023//1024 1022//1023 +f 1020//1020 1024//1022 1023//1024 +f 1021//1021 1025//1025 1028//1026 +f 1022//1023 1026//1027 1025//1025 +f 1023//1024 1027//1028 1026//1027 +f 1024//1022 1028//1026 1027//1028 +f 1025//1025 1029//1029 1032//1030 +f 1026//1027 1030//1031 1029//1029 +f 1027//1028 1031//1032 1030//1031 +f 1028//1026 1032//1030 1031//1032 +f 1033//1033 1037//1034 1040//1035 +f 1034//1036 1038//1037 1033//1033 +f 1035//1038 1039//1039 1038//1037 +f 1036//1040 1040//1035 1035//1038 +f 1037//1034 1041//1041 1044//1042 +f 1038//1037 1042//1043 1037//1034 +f 1039//1039 1043//1044 1042//1043 +f 1040//1035 1044//1042 1039//1039 +f 1041//1041 1045//1045 1044//1042 +f 1042//1043 1046//1046 1045//1045 +f 1043//1044 1047//1047 1042//1043 +f 1044//1042 1048//1048 1047//1047 +f 1045//1045 1049//1049 1052//1050 +f 1046//1046 1050//1051 1049//1049 +f 1047//1047 1051//1052 1050//1051 +f 1048//1048 1052//1050 1051//1052 +f 1049//1049 1053//1053 1052//1050 +f 1050//1051 1054//1054 1053//1053 +f 1051//1052 1055//1055 1050//1051 +f 1052//1050 1056//1056 1055//1055 +f 1053//1053 1057//1057 1056//1056 +f 1054//1054 1058//1058 1057//1057 +f 1055//1055 1059//1059 1054//1054 +f 1056//1056 1060//1060 1059//1059 +f 1057//1057 1061//1061 1064//1062 +f 1058//1058 1062//1063 1057//1057 +f 1059//1059 1063//1064 1062//1063 +f 1060//1060 1064//1062 1059//1059 +f 1061//1061 1065//1065 1064//1062 +f 1062//1063 1066//1066 1061//1061 +f 1063//1064 1067//1067 1062//1063 +f 1064//1062 1068//1068 1063//1064 +f 1065//1065 1069//1069 1072//1070 +f 1066//1066 1070//1071 1069//1069 +f 1067//1067 1071//1072 1070//1071 +f 1068//1068 1072//1070 1071//1072 +f 1069//1069 1073//1073 1076//1074 +f 1070//1071 1074//1075 1073//1073 +f 1071//1072 1075//1076 1074//1075 +f 1072//1070 1076//1074 1075//1076 +f 1077//1077 1081//1078 1080//1079 +f 1078//1080 1082//1081 1077//1077 +f 1079//1082 1083//1083 1078//1080 +f 1080//1079 1084//1084 1079//1082 +f 1081//1078 1085//1085 1088//1086 +f 1082//1081 1086//1087 1085//1085 +f 1083//1083 1087//1088 1086//1087 +f 1084//1084 1088//1086 1087//1088 +f 1085//1085 1089//1089 1088//1086 +f 1086//1087 1090//1090 1089//1089 +f 1087//1088 1091//1091 1086//1087 +f 1088//1086 1092//1092 1091//1091 +f 1089//1089 1093//1093 1096//1094 +f 1090//1090 1094//1095 1089//1089 +f 1091//1091 1095//1096 1094//1095 +f 1092//1092 1096//1094 1091//1091 +f 1093//1093 1097//1097 1096//1094 +f 1094//1095 1098//1098 1097//1097 +f 1095//1096 1099//1099 1094//1095 +f 1096//1094 1100//1100 1099//1099 +f 1097//1097 1101//1101 1100//1100 +f 1098//1098 1102//1102 1097//1097 +f 1099//1099 1103//1103 1098//1098 +f 1100//1100 1104//1104 1099//1099 +f 1101//1101 1105//1105 1108//1106 +f 1102//1102 1106//1107 1101//1101 +f 1103//1103 1107//1108 1106//1107 +f 1104//1104 1108//1106 1103//1103 +f 1105//1105 1109//1109 1108//1106 +f 1106//1107 1110//1110 1105//1105 +f 1107//1108 1111//1111 1106//1107 +f 1108//1106 1112//1112 1107//1108 +f 1109//1109 1113//1113 1112//1112 +f 1110//1110 1114//1114 1113//1113 +f 1111//1111 1115//1115 1110//1110 +f 1112//1112 1116//1116 1115//1115 +f 1113//1113 1117//1117 1120//1118 +f 1114//1114 1118//1119 1117//1117 +f 1115//1115 1119//1120 1118//1119 +f 1116//1116 1120//1118 1119//1120 +f 1121//1121 1125//1122 1128//1123 +f 1122//1124 1126//1125 1125//1122 +f 1123//1126 1127//1127 1126//1125 +f 1124//1128 1128//1123 1127//1127 +f 1125//1122 1129//1129 1132//1130 +f 1126//1125 1130//1131 1129//1129 +f 1127//1127 1131//1132 1130//1131 +f 1128//1123 1132//1130 1131//1132 +f 1129//1129 1133//1133 1132//1130 +f 1130//1131 1134//1134 1129//1129 +f 1131//1132 1135//1135 1130//1131 +f 1132//1130 1136//1136 1131//1132 +f 1133//1133 1137//1137 1136//1136 +f 1134//1134 1138//1138 1137//1137 +f 1135//1135 1139//1139 1134//1134 +f 1136//1136 1140//1140 1139//1139 +f 1137//1137 1141//1141 1144//1142 +f 1138//1138 1142//1143 1137//1137 +f 1139//1139 1143//1144 1142//1143 +f 1140//1140 1144//1142 1139//1139 +f 1141//1141 1145//1145 1144//1142 +f 1142//1143 1146//1146 1145//1145 +f 1143//1144 1147//1147 1142//1143 +f 1144//1142 1148//1148 1147//1147 +f 1145//1145 1149//1149 1148//1148 +f 1146//1146 1150//1150 1149//1149 +f 1147//1147 1151//1151 1146//1146 +f 1148//1148 1152//1152 1151//1151 +f 1149//1149 1153//1153 1152//1152 +f 1150//1150 1154//1154 1153//1153 +f 1151//1151 1155//1155 1150//1150 +f 1152//1152 1156//1156 1155//1155 +f 1153//1153 1157//1157 1160//1158 +f 1154//1154 1158//1159 1153//1153 +f 1155//1155 1159//1160 1158//1159 +f 1156//1156 1160//1158 1155//1155 +f 1157//1157 1161//1161 1164//1162 +f 1158//1159 1162//1163 1161//1161 +f 1159//1160 1163//1164 1162//1163 +f 1160//1158 1164//1162 1163//1164 +f 1165//1165 1169//1166 1172//1167 +f 1166//1168 1170//1169 1165//1165 +f 1167//1170 1171//1171 1170//1169 +f 1168//1172 1172//1167 1167//1170 +f 1169//1166 1173//1173 1172//1167 +f 1170//1169 1174//1174 1173//1173 +f 1171//1171 1175//1175 1170//1169 +f 1172//1167 1176//1176 1175//1175 +f 1173//1173 1177//1177 1176//1176 +f 1174//1174 1178//1178 1173//1173 +f 1175//1175 1179//1179 1174//1174 +f 1176//1176 1180//1180 1175//1175 +f 1177//1177 1181//1181 1180//1180 +f 1178//1178 1182//1182 1181//1181 +f 1179//1179 1183//1183 1178//1178 +f 1180//1180 1184//1184 1183//1183 +f 1181//1181 1185//1185 1188//1186 +f 1182//1182 1186//1187 1185//1185 +f 1183//1183 1187//1188 1186//1187 +f 1184//1184 1188//1186 1187//1188 +f 1185//1185 1189//1189 1188//1186 +f 1186//1187 1190//1190 1189//1189 +f 1187//1188 1191//1191 1186//1187 +f 1188//1186 1192//1192 1191//1191 +f 1189//1189 1193//1193 1192//1192 +f 1190//1190 1194//1194 1193//1193 +f 1191//1191 1195//1195 1190//1190 +f 1192//1192 1196//1196 1195//1195 +f 1193//1193 1197//1197 1200//1198 +f 1194//1194 1198//1199 1197//1197 +f 1195//1195 1199//1200 1198//1199 +f 1196//1196 1200//1198 1199//1200 +f 1197//1197 1201//1201 1200//1198 +f 1198//1199 1202//1202 1197//1197 +f 1199//1200 1203//1203 1198//1199 +f 1200//1198 1204//1204 1199//1200 +f 1201//1201 1205//1205 1208//1206 +f 1202//1202 1206//1207 1205//1205 +f 1203//1203 1207//1208 1206//1207 +f 1204//1204 1208//1206 1207//1208 +f 1209//1209 1213//1210 1216//1211 +f 1210//1212 1214//1213 1209//1209 +f 1211//1214 1215//1215 1214//1213 +f 1212//1216 1216//1211 1211//1214 +f 1213//1210 1217//1217 1216//1211 +f 1214//1213 1218//1218 1217//1217 +f 1215//1215 1219//1219 1214//1213 +f 1216//1211 1220//1220 1219//1219 +f 1217//1217 1221//1221 1224//1222 +f 1218//1218 1222//1223 1217//1217 +f 1219//1219 1223//1224 1222//1223 +f 1220//1220 1224//1222 1219//1219 +f 1221//1221 1225//1225 1228//1226 +f 1222//1223 1226//1227 1225//1225 +f 1223//1224 1227//1228 1226//1227 +f 1224//1222 1228//1226 1227//1228 +f 1225//1225 1229//1229 1228//1226 +f 1226//1227 1230//1230 1225//1225 +f 1227//1228 1231//1231 1226//1227 +f 1228//1226 1232//1232 1227//1228 +f 1229//1229 1233//1233 1232//1232 +f 1230//1230 1234//1234 1233//1233 +f 1231//1231 1235//1235 1230//1230 +f 1232//1232 1236//1236 1235//1235 +f 1233//1233 1237//1237 1240//1238 +f 1234//1234 1238//1239 1233//1233 +f 1235//1235 1239//1240 1238//1239 +f 1236//1236 1240//1238 1235//1235 +f 1237//1237 1241//1241 1244//1242 +f 1238//1239 1242//1243 1241//1241 +f 1239//1240 1243//1244 1242//1243 +f 1240//1238 1244//1242 1243//1244 +f 1241//1241 1245//1245 1244//1242 +f 1242//1243 1246//1246 1241//1241 +f 1243//1244 1247//1247 1242//1243 +f 1244//1242 1248//1248 1243//1244 +f 1245//1245 1249//1249 1252//1250 +f 1246//1246 1250//1251 1249//1249 +f 1247//1247 1251//1252 1250//1251 +f 1248//1248 1252//1250 1251//1252 +f 1253//1253 1257//1254 1260//1255 +f 1254//1256 1258//1257 1257//1254 +f 1255//1258 1259//1259 1258//1257 +f 1256//1260 1260//1255 1259//1259 +f 1257//1254 1261//1261 1260//1255 +f 1258//1257 1262//1262 1257//1254 +f 1259//1259 1263//1263 1258//1257 +f 1260//1255 1264//1264 1259//1259 +f 1261//1261 1265//1265 1268//1266 +f 1262//1262 1266//1267 1261//1261 +f 1263//1263 1267//1268 1266//1267 +f 1264//1264 1268//1266 1263//1263 +f 1265//1265 1269//1269 1272//1270 +f 1266//1267 1270//1271 1269//1269 +f 1267//1268 1271//1272 1270//1271 +f 1268//1266 1272//1270 1271//1272 +f 1269//1269 1273//1273 1272//1270 +f 1270//1271 1274//1274 1269//1269 +f 1271//1272 1275//1275 1270//1271 +f 1272//1270 1276//1276 1271//1272 +f 1273//1273 1277//1277 1280//1278 +f 1274//1274 1278//1279 1277//1277 +f 1275//1275 1279//1280 1278//1279 +f 1276//1276 1280//1278 1279//1280 +f 1277//1277 1281//1281 1280//1278 +f 1278//1279 1282//1282 1277//1277 +f 1279//1280 1283//1283 1278//1279 +f 1280//1278 1284//1284 1279//1280 +f 1281//1281 1285//1285 1288//1286 +f 1282//1282 1286//1287 1285//1285 +f 1283//1283 1287//1288 1286//1287 +f 1284//1284 1288//1286 1287//1288 +f 1285//1285 1289//1289 1292//1290 +f 1286//1287 1290//1291 1285//1285 +f 1287//1288 1291//1292 1290//1291 +f 1288//1286 1292//1290 1287//1288 +f 1289//1289 1293//1293 1296//1294 +f 1290//1291 1294//1295 1293//1293 +f 1291//1292 1295//1296 1294//1295 +f 1292//1290 1296//1294 1295//1296 +f 1297//1297 1301//1298 1300//1299 +f 1298//1300 1302//1301 1297//1297 +f 1299//1302 1303//1303 1298//1300 +f 1300//1299 1304//1304 1299//1302 +f 1301//1298 1305//1305 1308//1306 +f 1302//1301 1306//1307 1305//1305 +f 1303//1303 1307//1308 1306//1307 +f 1304//1304 1308//1306 1307//1308 +f 1305//1305 1309//1309 1312//1310 +f 1306//1307 1310//1311 1309//1309 +f 1307//1308 1311//1312 1310//1311 +f 1308//1306 1312//1310 1311//1312 +f 1309//1309 1313//1313 1312//1310 +f 1310//1311 1314//1314 1313//1313 +f 1311//1312 1315//1315 1310//1311 +f 1312//1310 1316//1316 1315//1315 +f 1313//1313 1317//1317 1320//1318 +f 1314//1314 1318//1319 1317//1317 +f 1315//1315 1319//1320 1318//1319 +f 1316//1316 1320//1318 1319//1320 +f 1317//1317 1321//1321 1324//1322 +f 1318//1319 1322//1323 1317//1317 +f 1319//1320 1323//1324 1318//1319 +f 1320//1318 1324//1322 1319//1320 +f 1321//1321 1325//1325 1328//1326 +f 1322//1323 1326//1327 1321//1321 +f 1323//1324 1327//1328 1326//1327 +f 1324//1322 1328//1326 1323//1324 +f 1325//1325 1329//1329 1328//1326 +f 1326//1327 1330//1330 1329//1329 +f 1327//1328 1331//1331 1326//1327 +f 1328//1326 1332//1332 1331//1331 +f 1329//1329 1333//1333 1332//1332 +f 1330//1330 1334//1334 1333//1333 +f 1331//1331 1335//1335 1330//1330 +f 1332//1332 1336//1336 1335//1335 +f 1333//1333 1337//1337 1340//1338 +f 1334//1334 1338//1339 1337//1337 +f 1335//1335 1339//1340 1338//1339 +f 1336//1336 1340//1338 1339//1340 +f 1341//1341 1345//1342 1344//1343 +f 1342//1344 1346//1345 1341//1341 +f 1343//1346 1347//1347 1342//1344 +f 1344//1343 1348//1348 1343//1346 +f 1345//1342 1349//1349 1348//1348 +f 1346//1345 1350//1350 1345//1342 +f 1347//1347 1351//1351 1346//1345 +f 1348//1348 1352//1352 1347//1347 +f 1349//1349 1353//1353 1356//1354 +f 1350//1350 1354//1355 1349//1349 +f 1351//1351 1355//1356 1354//1355 +f 1352//1352 1356//1354 1351//1351 +f 1353//1353 1357//1357 1356//1354 +f 1354//1355 1358//1358 1357//1357 +f 1355//1356 1359//1359 1354//1355 +f 1356//1354 1360//1360 1359//1359 +f 1357//1357 1361//1361 1364//1362 +f 1358//1358 1362//1363 1361//1361 +f 1359//1359 1363//1364 1362//1363 +f 1360//1360 1364//1362 1363//1364 +f 1361//1361 1365//1365 1368//1366 +f 1362//1363 1366//1367 1365//1365 +f 1363//1364 1367//1368 1366//1367 +f 1364//1362 1368//1366 1367//1368 +f 1365//1365 1369//1369 1368//1366 +f 1366//1367 1370//1370 1369//1369 +f 1367//1368 1371//1371 1366//1367 +f 1368//1366 1372//1372 1371//1371 +f 1369//1369 1373//1373 1372//1372 +f 1370//1370 1374//1374 1369//1369 +f 1371//1371 1375//1375 1370//1370 +f 1372//1372 1376//1376 1371//1371 +f 1373//1373 1377//1377 1380//1378 +f 1374//1374 1378//1379 1377//1377 +f 1375//1375 1379//1380 1378//1379 +f 1376//1376 1380//1378 1379//1380 +f 1377//1377 1381//1381 1384//1382 +f 1378//1379 1382//1383 1381//1381 +f 1379//1380 1383//1384 1382//1383 +f 1380//1378 1384//1382 1383//1384 +f 1385//1385 1389//1386 1392//1387 +f 1386//1388 1390//1389 1389//1386 +f 1387//1390 1391//1391 1390//1389 +f 1388//1392 1392//1387 1391//1391 +f 1389//1386 1393//1393 1392//1387 +f 1390//1389 1394//1394 1389//1386 +f 1391//1391 1395//1395 1390//1389 +f 1392//1387 1396//1396 1391//1391 +f 1393//1393 1397//1397 1396//1396 +f 1394//1394 1398//1398 1393//1393 +f 1395//1395 1399//1399 1394//1394 +f 1396//1396 1400//1400 1395//1395 +f 1397//1397 1401//1401 1400//1400 +f 1398//1398 1402//1402 1401//1401 +f 1399//1399 1403//1403 1398//1398 +f 1400//1400 1404//1404 1403//1403 +f 1401//1401 1405//1405 1408//1406 +f 1402//1402 1406//1407 1401//1401 +f 1403//1403 1407//1408 1406//1407 +f 1404//1404 1408//1406 1403//1403 +f 1405//1405 1409//1409 1408//1406 +f 1406//1407 1410//1410 1405//1405 +f 1407//1408 1411//1411 1406//1407 +f 1408//1406 1412//1412 1407//1408 +f 1409//1409 1413//1413 1416//1414 +f 1410//1410 1414//1415 1413//1413 +f 1411//1411 1415//1416 1414//1415 +f 1412//1412 1416//1414 1415//1416 +f 1413//1413 1417//1417 1416//1414 +f 1414//1415 1418//1418 1413//1413 +f 1415//1416 1419//1419 1414//1415 +f 1416//1414 1420//1420 1415//1416 +f 1417//1417 1421//1421 1420//1420 +f 1418//1418 1422//1422 1421//1421 +f 1419//1419 1423//1423 1418//1418 +f 1420//1420 1424//1424 1423//1423 +f 1421//1421 1425//1425 1428//1426 +f 1422//1422 1426//1427 1425//1425 +f 1423//1423 1427//1428 1426//1427 +f 1424//1424 1428//1426 1427//1428 +f 1429//1429 1433//1430 1432//1431 +f 1430//1432 1434//1433 1429//1429 +f 1431//1434 1435//1435 1430//1432 +f 1432//1431 1436//1436 1431//1434 +f 1433//1430 1437//1437 1440//1438 +f 1434//1433 1438//1439 1437//1437 +f 1435//1435 1439//1440 1438//1439 +f 1436//1436 1440//1438 1439//1440 +f 1437//1437 1441//1441 1444//1442 +f 1438//1439 1442//1443 1441//1441 +f 1439//1440 1443//1444 1442//1443 +f 1440//1438 1444//1442 1443//1444 +f 1441//1441 1445//1445 1448//1446 +f 1442//1443 1446//1447 1445//1445 +f 1443//1444 1447//1448 1446//1447 +f 1444//1442 1448//1446 1447//1448 +f 1445//1445 1449//1449 1448//1446 +f 1446//1447 1450//1450 1445//1445 +f 1447//1448 1451//1451 1446//1447 +f 1448//1446 1452//1452 1447//1448 +f 1449//1449 1453//1453 1452//1452 +f 1450//1450 1454//1454 1449//1449 +f 1451//1451 1455//1455 1450//1450 +f 1452//1452 1456//1456 1451//1451 +f 1453//1453 1457//1457 1460//1458 +f 1454//1454 1458//1459 1457//1457 +f 1455//1455 1459//1460 1458//1459 +f 1456//1456 1460//1458 1459//1460 +f 1457//1457 1461//1461 1460//1458 +f 1458//1459 1462//1462 1457//1457 +f 1459//1460 1463//1463 1458//1459 +f 1460//1458 1464//1464 1459//1460 +f 1461//1461 1465//1465 1468//1466 +f 1462//1462 1466//1467 1465//1465 +f 1463//1463 1467//1468 1466//1467 +f 1464//1464 1468//1466 1467//1468 +f 1465//1465 1469//1469 1472//1470 +f 1466//1467 1470//1471 1469//1469 +f 1467//1468 1471//1472 1470//1471 +f 1468//1466 1472//1470 1471//1472 +f 1473//1473 1477//1474 1476//1475 +f 1474//1476 1478//1477 1473//1473 +f 1475//1478 1479//1479 1474//1476 +f 1476//1475 1480//1480 1475//1478 +f 1477//1474 1481//1481 1480//1480 +f 1478//1477 1482//1482 1477//1474 +f 1479//1479 1483//1483 1478//1477 +f 1480//1480 1484//1484 1479//1479 +f 1481//1481 1485//1485 1488//1486 +f 1482//1482 1486//1487 1485//1485 +f 1483//1483 1487//1488 1486//1487 +f 1484//1484 1488//1486 1487//1488 +f 1485//1485 1489//1489 1488//1486 +f 1486//1487 1490//1490 1489//1489 +f 1487//1488 1491//1491 1486//1487 +f 1488//1486 1492//1492 1491//1491 +f 1489//1489 1493//1493 1496//1494 +f 1490//1490 1494//1495 1489//1489 +f 1491//1491 1495//1496 1494//1495 +f 1492//1492 1496//1494 1491//1491 +f 1493//1493 1497//1497 1500//1498 +f 1494//1495 1498//1499 1493//1493 +f 1495//1496 1499//1500 1498//1499 +f 1496//1494 1500//1498 1495//1496 +f 1497//1497 1501//1501 1500//1498 +f 1498//1499 1502//1502 1501//1501 +f 1499//1500 1503//1503 1498//1499 +f 1500//1498 1504//1504 1503//1503 +f 1501//1501 1505//1505 1508//1506 +f 1502//1502 1506//1507 1501//1501 +f 1503//1503 1507//1508 1506//1507 +f 1504//1504 1508//1506 1503//1503 +f 1505//1505 1509//1509 1508//1506 +f 1506//1507 1510//1510 1509//1509 +f 1507//1508 1511//1511 1506//1507 +f 1508//1506 1512//1512 1511//1511 +f 1509//1509 1513//1513 1516//1514 +f 1510//1510 1514//1515 1513//1513 +f 1511//1511 1515//1516 1514//1515 +f 1512//1512 1516//1514 1515//1516 +f 1517//1517 1521//1518 1520//1519 +f 1518//1520 1522//1521 1521//1518 +f 1519//1522 1523//1523 1518//1520 +f 1520//1519 1524//1524 1523//1523 +f 1521//1518 1525//1525 1528//1526 +f 1522//1521 1526//1527 1521//1518 +f 1523//1523 1527//1528 1526//1527 +f 1524//1524 1528//1526 1523//1523 +f 1525//1525 1529//1529 1532//1530 +f 1526//1527 1530//1531 1529//1529 +f 1527//1528 1531//1532 1530//1531 +f 1528//1526 1532//1530 1531//1532 +f 1529//1529 1533//1533 1536//1534 +f 1530//1531 1534//1535 1529//1529 +f 1531//1532 1535//1536 1534//1535 +f 1532//1530 1536//1534 1531//1532 +f 1533//1533 1537//1537 1536//1534 +f 1534//1535 1538//1538 1533//1533 +f 1535//1536 1539//1539 1534//1535 +f 1536//1534 1540//1540 1535//1536 +f 1537//1537 1541//1541 1540//1540 +f 1538//1538 1542//1542 1541//1541 +f 1539//1539 1543//1543 1538//1538 +f 1540//1540 1544//1544 1543//1543 +f 1541//1541 1545//1545 1544//1544 +f 1542//1542 1546//1546 1545//1545 +f 1543//1543 1547//1547 1542//1542 +f 1544//1544 1548//1548 1547//1547 +f 1545//1545 1549//1549 1552//1550 +f 1546//1546 1550//1551 1545//1545 +f 1547//1547 1551//1552 1550//1551 +f 1548//1548 1552//1550 1547//1547 +f 1549//1549 1553//1553 1552//1550 +f 1550//1551 1554//1554 1553//1553 +f 1551//1552 1555//1555 1550//1551 +f 1552//1550 1556//1556 1555//1555 +f 1553//1553 1557//1557 1560//1558 +f 1554//1554 1558//1559 1557//1557 +f 1555//1555 1559//1560 1558//1559 +f 1556//1556 1560//1558 1559//1560 +f 1561//1561 1565//1562 1568//1563 +f 1562//1564 1566//1565 1565//1562 +f 1563//1566 1567//1567 1566//1565 +f 1564//1568 1568//1563 1567//1567 +f 1565//1562 1569//1569 1568//1563 +f 1566//1565 1570//1570 1565//1562 +f 1567//1567 1571//1571 1566//1565 +f 1568//1563 1572//1572 1567//1567 +f 1569//1569 1573//1573 1576//1574 +f 1570//1570 1574//1575 1573//1573 +f 1571//1571 1575//1576 1574//1575 +f 1572//1572 1576//1574 1575//1576 +f 1573//1573 1577//1577 1576//1574 +f 1574//1575 1578//1578 1577//1577 +f 1575//1576 1579//1579 1574//1575 +f 1576//1574 1580//1580 1579//1579 +f 1577//1577 1581//1581 1580//1580 +f 1578//1578 1582//1582 1577//1577 +f 1579//1579 1583//1583 1578//1578 +f 1580//1580 1584//1584 1579//1579 +f 1581//1581 1585//1585 1588//1586 +f 1582//1582 1586//1587 1585//1585 +f 1583//1583 1587//1588 1586//1587 +f 1584//1584 1588//1586 1587//1588 +f 1585//1585 1589//1589 1592//1590 +f 1586//1587 1590//1591 1585//1585 +f 1587//1588 1591//1592 1590//1591 +f 1588//1586 1592//1590 1587//1588 +f 1589//1589 1593//1593 1592//1590 +f 1590//1591 1594//1594 1593//1593 +f 1591//1592 1595//1595 1590//1591 +f 1592//1590 1596//1596 1595//1595 +f 1593//1593 1597//1597 1600//1598 +f 1594//1594 1598//1599 1597//1597 +f 1595//1595 1599//1600 1598//1599 +f 1596//1596 1600//1598 1599//1600 +f 1597//1597 1601//1601 1604//1602 +f 1598//1599 1602//1603 1601//1601 +f 1599//1600 1603//1604 1602//1603 +f 1600//1598 1604//1602 1603//1604 +f 1605//1605 1609//1606 1612//1607 +f 1606//1608 1610//1609 1605//1605 +f 1607//1610 1611//1611 1610//1609 +f 1608//1612 1612//1607 1607//1610 +f 1609//1606 1613//1613 1616//1614 +f 1610//1609 1614//1615 1613//1613 +f 1611//1611 1615//1616 1614//1615 +f 1612//1607 1616//1614 1615//1616 +f 1613//1613 1617//1617 1620//1618 +f 1614//1615 1618//1619 1613//1613 +f 1615//1616 1619//1620 1618//1619 +f 1616//1614 1620//1618 1615//1616 +f 1617//1617 1621//1621 1620//1618 +f 1618//1619 1622//1622 1621//1621 +f 1619//1620 1623//1623 1618//1619 +f 1620//1618 1624//1624 1623//1623 +f 1621//1621 1625//1625 1624//1624 +f 1622//1622 1626//1626 1625//1625 +f 1623//1623 1627//1627 1622//1622 +f 1624//1624 1628//1628 1627//1627 +f 1625//1625 1629//1629 1628//1628 +f 1626//1626 1630//1630 1625//1625 +f 1627//1627 1631//1631 1626//1626 +f 1628//1628 1632//1632 1627//1627 +f 1629//1629 1633//1633 1636//1634 +f 1630//1630 1634//1635 1629//1629 +f 1631//1631 1635//1636 1634//1635 +f 1632//1632 1636//1634 1631//1631 +f 1633//1633 1637//1637 1636//1634 +f 1634//1635 1638//1638 1633//1633 +f 1635//1636 1639//1639 1634//1635 +f 1636//1634 1640//1640 1635//1636 +f 1637//1637 1641//1641 1644//1642 +f 1638//1638 1642//1643 1641//1641 +f 1639//1639 1643//1644 1642//1643 +f 1640//1640 1644//1642 1643//1644 +f 1641//1641 1645//1645 1648//1646 +f 1642//1643 1646//1647 1645//1645 +f 1643//1644 1647//1648 1646//1647 +f 1644//1642 1648//1646 1647//1648 +f 1649//1649 1653//1650 1656//1651 +f 1650//1652 1654//1653 1649//1649 +f 1651//1654 1655//1655 1654//1653 +f 1652//1656 1656//1651 1651//1654 +f 1653//1650 1657//1657 1656//1651 +f 1654//1653 1658//1658 1657//1657 +f 1655//1655 1659//1659 1654//1653 +f 1656//1651 1660//1660 1659//1659 +f 1657//1657 1661//1661 1664//1662 +f 1658//1658 1662//1663 1657//1657 +f 1659//1659 1663//1664 1662//1663 +f 1660//1660 1664//1662 1659//1659 +f 1661//1661 1665//1665 1664//1662 +f 1662//1663 1666//1666 1661//1661 +f 1663//1664 1667//1667 1662//1663 +f 1664//1662 1668//1668 1663//1664 +f 1665//1665 1669//1669 1668//1668 +f 1666//1666 1670//1670 1669//1669 +f 1667//1667 1671//1671 1666//1666 +f 1668//1668 1672//1672 1671//1671 +f 1669//1669 1673//1673 1676//1674 +f 1670//1670 1674//1675 1673//1673 +f 1671//1671 1675//1676 1674//1675 +f 1672//1672 1676//1674 1675//1676 +f 1673//1673 1677//1677 1676//1674 +f 1674//1675 1678//1678 1677//1677 +f 1675//1676 1679//1679 1674//1675 +f 1676//1674 1680//1680 1679//1679 +f 1677//1677 1681//1681 1680//1680 +f 1678//1678 1682//1682 1677//1677 +f 1679//1679 1683//1683 1678//1678 +f 1680//1680 1684//1684 1679//1679 +f 1681//1681 1685//1685 1688//1686 +f 1682//1682 1686//1687 1681//1681 +f 1683//1683 1687//1688 1686//1687 +f 1684//1684 1688//1686 1683//1683 +f 1685//1685 1689//1689 1692//1690 +f 1686//1687 1690//1691 1689//1689 +f 1687//1688 1691//1692 1690//1691 +f 1688//1686 1692//1690 1691//1692 +f 1693//1693 1697//1694 1700//1695 +f 1694//1696 1698//1697 1693//1693 +f 1695//1698 1699//1699 1698//1697 +f 1696//1700 1700//1695 1695//1698 +f 1697//1694 1701//1701 1700//1695 +f 1698//1697 1702//1702 1701//1701 +f 1699//1699 1703//1703 1698//1697 +f 1700//1695 1704//1704 1703//1703 +f 1701//1701 1705//1705 1708//1706 +f 1702//1702 1706//1707 1705//1705 +f 1703//1703 1707//1708 1706//1707 +f 1704//1704 1708//1706 1707//1708 +f 1705//1705 1709//1709 1708//1706 +f 1706//1707 1710//1710 1705//1705 +f 1707//1708 1711//1711 1706//1707 +f 1708//1706 1712//1712 1707//1708 +f 1709//1709 1713//1713 1716//1714 +f 1710//1710 1714//1715 1709//1709 +f 1711//1711 1715//1716 1714//1715 +f 1712//1712 1716//1714 1711//1711 +f 1713//1713 1717//1717 1716//1714 +f 1714//1715 1718//1718 1717//1717 +f 1715//1716 1719//1719 1718//1718 +f 1716//1714 1720//1720 1719//1719 +f 1717//1717 1721//1721 1724//1722 +f 1718//1718 1722//1723 1717//1717 +f 1719//1719 1723//1724 1722//1723 +f 1720//1720 1724//1722 1719//1719 +f 1721//1721 1725//1725 1724//1722 +f 1722//1723 1726//1726 1725//1725 +f 1723//1724 1727//1727 1722//1723 +f 1724//1722 1728//1728 1727//1727 +f 1725//1725 1729//1729 1732//1730 +f 1726//1726 1730//1731 1729//1729 +f 1727//1727 1731//1732 1730//1731 +f 1728//1728 1732//1730 1731//1732 +f 1729//1729 1733//1733 1736//1734 +f 1730//1731 1734//1735 1733//1733 +f 1731//1732 1735//1736 1734//1735 +f 1732//1730 1736//1734 1735//1736 +f 1737//1737 1741//1738 1740//1739 +f 1738//1740 1742//1741 1741//1738 +f 1739//1742 1743//1743 1738//1740 +f 1740//1739 1744//1744 1743//1743 +f 1741//1738 1745//1745 1748//1746 +f 1742//1741 1746//1747 1741//1738 +f 1743//1743 1747//1748 1746//1747 +f 1744//1744 1748//1746 1743//1743 +f 1745//1745 1749//1749 1748//1746 +f 1746//1747 1750//1750 1749//1749 +f 1747//1748 1751//1751 1746//1747 +f 1748//1746 1752//1752 1751//1751 +f 1749//1749 1753//1753 1752//1752 +f 1750//1750 1754//1754 1749//1749 +f 1751//1751 1755//1755 1750//1750 +f 1752//1752 1756//1756 1751//1751 +f 1753//1753 1757//1757 1760//1758 +f 1754//1754 1758//1759 1753//1753 +f 1755//1755 1759//1760 1758//1759 +f 1756//1756 1760//1758 1755//1755 +f 1757//1757 1761//1761 1764//1762 +f 1758//1759 1762//1763 1761//1761 +f 1759//1760 1763//1764 1762//1763 +f 1760//1758 1764//1762 1763//1764 +f 1761//1761 1765//1765 1764//1762 +f 1762//1763 1766//1766 1761//1761 +f 1763//1764 1767//1767 1762//1763 +f 1764//1762 1768//1768 1763//1764 +f 1765//1765 1769//1769 1768//1768 +f 1766//1766 1770//1770 1769//1769 +f 1767//1767 1771//1771 1766//1766 +f 1768//1768 1772//1772 1771//1771 +f 1769//1769 1773//1773 1772//1772 +f 1770//1770 1774//1774 1769//1769 +f 1771//1771 1775//1775 1770//1770 +f 1772//1772 1776//1776 1771//1771 +f 1773//1773 1777//1777 1780//1778 +f 1774//1774 1778//1779 1777//1777 +f 1775//1775 1779//1780 1778//1779 +f 1776//1776 1780//1778 1779//1780 +f 1781//1781 1785//1782 1788//1783 +f 1782//1784 1786//1785 1785//1782 +f 1783//1786 1787//1787 1786//1785 +f 1784//1788 1788//1783 1787//1787 +f 1785//1782 1789//1789 1788//1783 +f 1786//1785 1790//1790 1785//1782 +f 1787//1787 1791//1791 1786//1785 +f 1788//1783 1792//1792 1787//1787 +f 1789//1789 1793//1793 1792//1792 +f 1790//1790 1794//1794 1793//1793 +f 1791//1791 1795//1795 1790//1790 +f 1792//1792 1796//1796 1795//1795 +f 1793//1793 1797//1797 1800//1798 +f 1794//1794 1798//1799 1797//1797 +f 1795//1795 1799//1800 1798//1799 +f 1796//1796 1800//1798 1799//1800 +f 1797//1797 1801//1801 1800//1798 +f 1798//1799 1802//1802 1801//1801 +f 1799//1800 1803//1803 1798//1799 +f 1800//1798 1804//1804 1803//1803 +f 1801//1801 1805//1805 1804//1804 +f 1802//1802 1806//1806 1801//1801 +f 1803//1803 1807//1807 1802//1802 +f 1804//1804 1808//1808 1803//1803 +f 1805//1805 1809//1809 1812//1810 +f 1806//1806 1810//1811 1809//1809 +f 1807//1807 1811//1812 1810//1811 +f 1808//1808 1812//1810 1811//1812 +f 1809//1809 1813//1813 1812//1810 +f 1810//1811 1814//1814 1809//1809 +f 1811//1812 1815//1815 1810//1811 +f 1812//1810 1816//1816 1811//1812 +f 1813//1813 1817//1817 1820//1818 +f 1814//1814 1818//1819 1817//1817 +f 1815//1815 1819//1820 1818//1819 +f 1816//1816 1820//1818 1819//1820 +f 1817//1817 1821//1821 1824//1822 +f 1818//1819 1822//1823 1821//1821 +f 1819//1820 1823//1824 1822//1823 +f 1820//1818 1824//1822 1823//1824 +f 1825//1825 1829//1826 1828//1827 +f 1826//1828 1830//1829 1829//1826 +f 1827//1830 1831//1831 1826//1828 +f 1828//1827 1832//1832 1831//1831 +f 1829//1826 1833//1833 1836//1834 +f 1830//1829 1834//1835 1829//1826 +f 1831//1831 1835//1836 1834//1835 +f 1832//1832 1836//1834 1831//1831 +f 1833//1833 1837//1837 1840//1838 +f 1834//1835 1838//1839 1833//1833 +f 1835//1836 1839//1840 1838//1839 +f 1836//1834 1840//1838 1835//1836 +f 1837//1837 1841//1841 1840//1838 +f 1838//1839 1842//1842 1841//1841 +f 1839//1840 1843//1843 1838//1839 +f 1840//1838 1844//1844 1843//1843 +f 1841//1841 1845//1845 1848//1846 +f 1842//1842 1846//1847 1841//1841 +f 1843//1843 1847//1848 1846//1847 +f 1844//1844 1848//1846 1843//1843 +f 1845//1845 1849//1849 1852//1850 +f 1846//1847 1850//1851 1845//1845 +f 1847//1848 1851//1852 1850//1851 +f 1848//1846 1852//1850 1847//1848 +f 1849//1849 1853//1853 1856//1854 +f 1850//1851 1854//1855 1853//1853 +f 1851//1852 1855//1856 1854//1855 +f 1852//1850 1856//1854 1855//1856 +f 1857//1857 1861//1858 1860//1859 +f 1858//1860 1862//1861 1857//1857 +f 1859//1862 1863//1863 1858//1860 +f 1860//1859 1864//1864 1859//1862 +f 1861//1858 1865//1865 1868//1866 +f 1862//1861 1866//1867 1865//1865 +f 1863//1863 1867//1868 1866//1867 +f 1864//1864 1868//1866 1867//1868 +f 1865//1865 1869//1869 1872//1870 +f 1866//1867 1870//1871 1865//1865 +f 1867//1868 1871//1872 1870//1871 +f 1868//1866 1872//1870 1867//1868 +f 1869//1869 1873//1873 1876//1874 +f 1870//1871 1874//1875 1873//1873 +f 1871//1872 1875//1876 1874//1875 +f 1872//1870 1876//1874 1875//1876 +f 1877//1877 1881//1878 1884//1879 +f 1878//1880 1882//1881 1881//1878 +f 1879//1882 1883//1883 1882//1881 +f 1880//1884 1884//1879 1883//1883 +f 1881//1878 1885//1885 1888//1886 +f 1882//1881 1886//1887 1885//1885 +f 1883//1883 1887//1888 1886//1887 +f 1884//1879 1888//1886 1887//1888 +f 1889//1889 1893//1890 1896//1891 +f 1890//1892 1894//1893 1893//1890 +f 1891//1894 1895//1895 1894//1893 +f 1892//1896 1896//1891 1895//1895 +f 1897//1897 1901//1898 1904//1899 +f 1898//1900 1902//1901 1901//1898 +f 1899//1902 1903//1903 1902//1901 +f 1900//1904 1904//1899 1903//1903 +f 1901//1898 1905//1905 1904//1899 +f 1902//1901 1906//1906 1901//1898 +f 1903//1903 1907//1907 1902//1901 +f 1904//1899 1908//1908 1903//1903 +f 1905//1905 1909//1909 1908//1908 +f 1906//1906 1910//1910 1905//1905 +f 1907//1907 1911//1911 1906//1906 +f 1908//1908 1912//1912 1907//1907 +f 1909//1909 1913//1913 1912//1912 +f 1910//1910 1914//1914 1909//1909 +f 1911//1911 1915//1915 1910//1910 +f 1912//1912 1916//1916 1911//1911 +f 1913//1913 1917//1917 1916//1916 +f 1914//1914 1918//1918 1913//1913 +f 1915//1915 1919//1919 1914//1914 +f 1916//1916 1920//1920 1915//1915 +f 1917//1917 1921//1921 1924//1922 +f 1918//1918 1922//1923 1921//1921 +f 1919//1919 1923//1924 1922//1923 +f 1920//1920 1924//1922 1923//1924 +f 1925//1925 1929//1926 1928//1927 +f 1926//1928 1930//1929 1925//1925 +f 1927//1930 1931//1931 1930//1929 +f 1928//1927 1932//1932 1927//1930 +f 1929//1926 1933//1933 1932//1932 +f 1930//1929 1934//1934 1933//1933 +f 1931//1931 1935//1935 1930//1929 +f 1932//1932 1936//1936 1935//1935 +f 1933//1933 1937//1937 1940//1938 +f 1934//1934 1938//1939 1937//1937 +f 1935//1935 1939//1940 1938//1939 +f 1936//1936 1940//1938 1939//1940 +f 1941//1941 1945//1942 1948//1943 +f 1942//1944 1946//1945 1945//1942 +f 1943//1946 1947//1947 1946//1945 +f 1944//1948 1948//1943 1947//1947 +f 1949//1949 1953//1950 1952//1951 +f 1950//1952 1954//1953 1949//1949 +f 1951//1954 1955//1955 1950//1952 +f 1952//1951 1956//1956 1951//1954 +f 1953//1950 1957//1957 1960//1958 +f 1954//1953 1958//1959 1957//1957 +f 1955//1955 1959//1960 1958//1959 +f 1956//1956 1960//1958 1959//1960 +f 1957//1957 1961//1961 1964//1962 +f 1958//1959 1962//1963 1961//1961 +f 1959//1960 1963//1964 1962//1963 +f 1960//1958 1964//1962 1963//1964 +f 1961//1961 1965//1965 1968//1966 +f 1962//1963 1966//1967 1965//1965 +f 1963//1964 1967//1968 1966//1967 +f 1964//1962 1968//1966 1967//1968 +f 1965//1965 1969//1969 1968//1966 +f 1966//1967 1970//1970 1965//1965 +f 1967//1968 1971//1971 1966//1967 +f 1968//1966 1972//1972 1967//1968 +f 1969//1969 1973//1973 1976//1974 +f 1970//1970 1974//1975 1973//1973 +f 1971//1971 1975//1976 1974//1975 +f 1972//1972 1976//1974 1975//1976 +f 1973//1973 1977//1977 1980//1978 +f 1974//1975 1978//1979 1977//1977 +f 1975//1976 1979//1980 1978//1979 +f 1976//1974 1980//1978 1979//1980 +f 1981//1981 1985//1982 1988//1983 +f 1982//1984 1986//1985 1985//1982 +f 1983//1986 1987//1987 1986//1985 +f 1984//1988 1988//1983 1987//1987 +f 1985//1982 1989//1989 1988//1983 +f 1986//1985 1990//1990 1985//1982 +f 1987//1987 1991//1991 1986//1985 +f 1988//1983 1992//1992 1987//1987 +f 1989//1989 1993//1993 1992//1992 +f 1990//1990 1994//1994 1993//1993 +f 1991//1991 1995//1995 1990//1990 +f 1992//1992 1996//1996 1995//1995 +f 1993//1993 1997//1997 2000//1998 +f 1994//1994 1998//1999 1997//1997 +f 1995//1995 1999//2000 1998//1999 +f 1996//1996 2000//1998 1999//2000 +f 2001//2001 2005//2002 2008//2003 +f 2002//2004 2006//2005 2005//2002 +f 2003//2006 2007//2007 2006//2005 +f 2004//2008 2008//2003 2007//2007 +f 2005//2002 2009//2009 2012//2010 +f 2006//2005 2010//2011 2009//2009 +f 2007//2007 2011//2012 2010//2011 +f 2008//2003 2012//2010 2011//2012 +f 2013//2013 2017//2014 2020//2015 +f 2014//2016 2018//2017 2017//2014 +f 2015//2018 2019//2019 2018//2017 +f 2016//2020 2020//2015 2019//2019 +f 2021//2021 2025//2022 2028//2023 +f 2022//2024 2026//2025 2021//2021 +f 2023//2026 2027//2027 2026//2025 +f 2024//2028 2028//2023 2023//2026 +f 2025//2022 2029//2029 2028//2023 +f 2026//2025 2030//2030 2029//2029 +f 2027//2027 2031//2031 2026//2025 +f 2028//2023 2032//2032 2031//2031 +f 2029//2029 2033//2033 2032//2032 +f 2030//2030 2034//2034 2033//2033 +f 2031//2031 2035//2035 2030//2030 +f 2032//2032 2036//2036 2035//2035 +f 2033//2033 2037//2037 2040//2038 +f 2034//2034 2038//2039 2033//2033 +f 2035//2035 2039//2040 2038//2039 +f 2036//2036 2040//2038 2035//2035 +f 2037//2037 2041//2041 2044//2042 +f 2038//2039 2042//2043 2037//2037 +f 2039//2040 2043//2044 2042//2043 +f 2040//2038 2044//2042 2039//2040 +f 2041//2041 2045//2045 2048//2046 +f 2042//2043 2046//2047 2045//2045 +f 2043//2044 2047//2048 2046//2047 +f 2044//2042 2048//2046 2047//2048 +f 2049//2049 2053//2050 2056//2051 +f 2050//2052 2054//2053 2053//2050 +f 2051//2054 2055//2055 2054//2053 +f 2052//2056 2056//2051 2055//2055 +f 2053//2050 2057//2057 2056//2051 +f 2054//2053 2058//2058 2053//2050 +f 2055//2055 2059//2059 2054//2053 +f 2056//2051 2060//2060 2055//2055 +f 2057//2057 2061//2061 2064//2062 +f 2058//2058 2062//2063 2061//2061 +f 2059//2059 2063//2064 2062//2063 +f 2060//2060 2064//2062 2063//2064 +f 2065//2065 2069//2066 2072//2067 +f 2066//2068 2070//2069 2069//2066 +f 2067//2070 2071//2071 2070//2069 +f 2068//2072 2072//2067 2071//2071 +f 2073//2073 2077//2074 2080//2075 +f 2074//2076 2078//2077 2077//2074 +f 2075//2078 2079//2079 2078//2077 +f 2076//2080 2080//2075 2079//2079 +f 2077//2074 2081//2081 2080//2075 +f 2078//2077 2082//2082 2077//2074 +f 2079//2079 2083//2083 2078//2077 +f 2080//2075 2084//2084 2079//2079 +f 2081//2081 2085//2085 2088//2086 +f 2082//2082 2086//2087 2081//2081 +f 2083//2083 2087//2088 2086//2087 +f 2084//2084 2088//2086 2083//2083 +f 2085//2085 2089//2089 2088//2086 +f 2086//2087 2090//2090 2089//2089 +f 2087//2088 2091//2091 2086//2087 +f 2088//2086 2092//2092 2091//2091 +f 2089//2089 2093//2093 2092//2092 +f 2090//2090 2094//2094 2093//2093 +f 2091//2091 2095//2095 2090//2090 +f 2092//2092 2096//2096 2095//2095 +f 2093//2093 2097//2097 2100//2098 +f 2094//2094 2098//2099 2093//2093 +f 2095//2095 2099//2100 2098//2099 +f 2096//2096 2100//2098 2095//2095 +f 2097//2097 2101//2101 2104//2102 +f 2098//2099 2102//2103 2101//2101 +f 2099//2100 2103//2104 2102//2103 +f 2100//2098 2104//2102 2103//2104 +f 2105//2105 2109//2106 2112//2107 +f 2106//2108 2110//2109 2109//2106 +f 2107//2110 2111//2111 2110//2109 +f 2108//2112 2112//2107 2111//2111 +f 2109//2106 2113//2113 2112//2107 +f 2110//2109 2114//2114 2109//2106 +f 2111//2111 2115//2115 2110//2109 +f 2112//2107 2116//2116 2111//2111 +f 2113//2113 2117//2117 2116//2116 +f 2114//2114 2118//2118 2113//2113 +f 2115//2115 2119//2119 2114//2114 +f 2116//2116 2120//2120 2115//2115 +f 2117//2117 2121//2121 2124//2122 +f 2118//2118 2122//2123 2121//2121 +f 2119//2119 2123//2124 2122//2123 +f 2120//2120 2124//2122 2123//2124 +f 2125//2125 2129//2126 2128//2127 +f 2126//2128 2130//2129 2129//2126 +f 2127//2130 2131//2131 2126//2128 +f 2128//2127 2132//2132 2131//2131 +f 2129//2126 2133//2133 2136//2134 +f 2130//2129 2134//2135 2133//2133 +f 2131//2131 2135//2136 2134//2135 +f 2132//2132 2136//2134 2135//2136 +f 2137//2137 2141//2138 2144//2139 +f 2138//2140 2142//2141 2141//2138 +f 2139//2142 2143//2143 2142//2141 +f 2140//2144 2144//2139 2143//2143 +f 2145//2145 2149//2146 2148//2147 +f 2146//2148 2150//2149 2145//2145 +f 2147//2150 2151//2151 2146//2148 +f 2148//2147 2152//2152 2147//2150 +f 2149//2146 2153//2153 2152//2152 +f 2150//2149 2154//2154 2149//2146 +f 2151//2151 2155//2155 2150//2149 +f 2152//2152 2156//2156 2151//2151 +f 2153//2153 2157//2157 2160//2158 +f 2154//2154 2158//2159 2157//2157 +f 2155//2155 2159//2160 2158//2159 +f 2156//2156 2160//2158 2159//2160 +f 2157//2157 2161//2161 2160//2158 +f 2158//2159 2162//2162 2157//2157 +f 2159//2160 2163//2163 2158//2159 +f 2160//2158 2164//2164 2159//2160 +f 2161//2161 2165//2165 2168//2166 +f 2162//2162 2166//2167 2165//2165 +f 2163//2163 2167//2168 2166//2167 +f 2164//2164 2168//2166 2167//2168 +f 2165//2165 2169//2169 2172//2170 +f 2166//2167 2170//2171 2169//2169 +f 2167//2168 2171//2172 2170//2171 +f 2168//2166 2172//2170 2171//2172 +f 2173//2173 2177//2174 2180//2175 +f 2174//2176 2178//2177 2177//2174 +f 2175//2178 2179//2179 2178//2177 +f 2176//2180 2180//2175 2179//2179 +f 2177//2174 2181//2181 2180//2175 +f 2178//2177 2182//2182 2177//2174 +f 2179//2179 2183//2183 2178//2177 +f 2180//2175 2184//2184 2179//2179 +f 2181//2181 2185//2185 2188//2186 +f 2182//2182 2186//2187 2185//2185 +f 2183//2183 2187//2188 2186//2187 +f 2184//2184 2188//2186 2187//2188 +f 2189//2189 2193//2190 2196//2191 +f 2190//2192 2194//2193 2193//2190 +f 2191//2194 2195//2195 2194//2193 +f 2192//2196 2196//2191 2195//2195 +f 2197//2197 2201//2198 2200//2199 +f 2198//2200 2202//2201 2197//2197 +f 2199//2202 2203//2203 2198//2200 +f 2200//2199 2204//2204 2199//2202 +f 2201//2198 2205//2205 2208//2206 +f 2202//2201 2206//2207 2205//2205 +f 2203//2203 2207//2208 2206//2207 +f 2204//2204 2208//2206 2207//2208 +f 2205//2205 2209//2209 2208//2206 +f 2206//2207 2210//2210 2205//2205 +f 2207//2208 2211//2211 2206//2207 +f 2208//2206 2212//2212 2207//2208 +f 2209//2209 2213//2213 2212//2212 +f 2210//2210 2214//2214 2209//2209 +f 2211//2211 2215//2215 2210//2210 +f 2212//2212 2216//2216 2211//2211 +f 2213//2213 2217//2217 2220//2218 +f 2214//2214 2218//2219 2217//2217 +f 2215//2215 2219//2220 2218//2219 +f 2216//2216 2220//2218 2219//2220 +f 2217//2217 2221//2221 2220//2218 +f 2218//2219 2222//2222 2217//2217 +f 2219//2220 2223//2223 2218//2219 +f 2220//2218 2224//2224 2219//2220 +f 2221//2221 2225//2225 2228//2226 +f 2222//2222 2226//2227 2225//2225 +f 2223//2223 2227//2228 2226//2227 +f 2224//2224 2228//2226 2227//2228 +f 2229//2229 2233//2230 2236//2231 +f 2230//2232 2234//2233 2233//2230 +f 2231//2234 2235//2235 2234//2233 +f 2232//2236 2236//2231 2235//2235 +f 2233//2230 2237//2237 2236//2231 +f 2234//2233 2238//2238 2233//2230 +f 2235//2235 2239//2239 2234//2233 +f 2236//2231 2240//2240 2235//2235 +f 2237//2237 2241//2241 2240//2240 +f 2238//2238 2242//2242 2241//2241 +f 2239//2239 2243//2243 2238//2238 +f 2240//2240 2244//2244 2243//2243 +f 2241//2241 2245//2245 2248//2246 +f 2242//2242 2246//2247 2245//2245 +f 2243//2243 2247//2248 2246//2247 +f 2244//2244 2248//2246 2247//2248 +f 2249//2249 2253//2250 2252//2251 +f 2250//2252 2254//2253 2249//2249 +f 2251//2254 2255//2255 2250//2252 +f 2252//2251 2256//2256 2251//2254 +f 2253//2250 2257//2257 2260//2258 +f 2254//2253 2258//2259 2257//2257 +f 2255//2255 2259//2260 2258//2259 +f 2256//2256 2260//2258 2259//2260 +f 2261//2261 2265//2262 2268//2263 +f 2262//2264 2266//2265 2265//2262 +f 2263//2266 2267//2267 2266//2265 +f 2264//2268 2268//2263 2267//2267 +f 2269//2269 2273//2270 2276//2271 +f 2270//2272 2274//2273 2273//2270 +f 2271//2274 2275//2275 2274//2273 +f 2272//2276 2276//2271 2275//2275 +f 2273//2270 2277//2277 2280//2278 +f 2274//2273 2278//2279 2277//2277 +f 2275//2275 2279//2280 2278//2279 +f 2276//2271 2280//2278 2279//2280 +f 2277//2277 2281//2281 2280//2278 +f 2278//2279 2282//2282 2277//2277 +f 2279//2280 2283//2283 2278//2279 +f 2280//2278 2284//2284 2279//2280 +f 2281//2281 2285//2285 2284//2284 +f 2282//2282 2286//2286 2281//2281 +f 2283//2283 2287//2287 2282//2282 +f 2284//2284 2288//2288 2283//2283 +f 2285//2285 2289//2289 2288//2288 +f 2286//2286 2290//2290 2285//2285 +f 2287//2287 2291//2291 2286//2286 +f 2288//2288 2292//2292 2287//2287 +f 2289//2289 2293//2293 2296//2294 +f 2290//2290 2294//2295 2293//2293 +f 2291//2291 2295//2296 2294//2295 +f 2292//2292 2296//2294 2295//2296 +f 2297//2297 2301//2298 2304//2299 +f 2298//2300 2302//2301 2301//2298 +f 2299//2302 2303//2303 2302//2301 +f 2300//2304 2304//2299 2303//2303 +f 2301//2298 2305//2305 2308//2306 +f 2302//2301 2306//2307 2305//2305 +f 2303//2303 2307//2308 2306//2307 +f 2304//2299 2308//2306 2307//2308 +f 2305//2305 2309//2309 2312//2310 +f 2306//2307 2310//2311 2309//2309 +f 2307//2308 2311//2312 2310//2311 +f 2308//2306 2312//2310 2311//2312 +f 2313//2313 2317//2314 2320//2315 +f 2314//2316 2318//2317 2317//2314 +f 2315//2318 2319//2319 2318//2317 +f 2316//2320 2320//2315 2319//2319 +f 2321//2321 2325//2322 2328//2323 +f 2322//2324 2326//2325 2325//2322 +f 2323//2326 2327//2327 2326//2325 +f 2324//2328 2328//2323 2327//2327 +f 2325//2322 2329//2329 2328//2323 +f 2326//2325 2330//2330 2325//2322 +f 2327//2327 2331//2331 2326//2325 +f 2328//2323 2332//2332 2327//2327 +f 2329//2329 2333//2333 2332//2332 +f 2330//2330 2334//2334 2329//2329 +f 2331//2331 2335//2335 2330//2330 +f 2332//2332 2336//2336 2331//2331 +f 2333//2333 2337//2337 2340//2338 +f 2334//2334 2338//2339 2337//2337 +f 2335//2335 2339//2340 2338//2339 +f 2336//2336 2340//2338 2339//2340 +f 2337//2337 2341//2341 2340//2338 +f 2338//2339 2342//2342 2337//2337 +f 2339//2340 2343//2343 2338//2339 +f 2340//2338 2344//2344 2339//2340 +f 2341//2341 2345//2345 2348//2346 +f 2342//2342 2346//2347 2345//2345 +f 2343//2343 2347//2348 2346//2347 +f 2344//2344 2348//2346 2343//2343 +f 2345//2345 2349//2349 2352//2350 +f 2346//2347 2350//2351 2349//2349 +f 2347//2348 2351//2352 2350//2351 +f 2348//2346 2352//2350 2351//2352 +f 2353//2353 2357//2354 2356//2355 +f 2354//2356 2358//2357 2353//2353 +f 2355//2358 2359//2359 2354//2356 +f 2356//2355 2360//2360 2355//2358 +f 2357//2354 2361//2361 2360//2360 +f 2358//2357 2362//2362 2357//2354 +f 2359//2359 2363//2363 2358//2357 +f 2360//2360 2364//2364 2359//2359 +f 2361//2361 2365//2365 2364//2364 +f 2362//2362 2366//2366 2365//2365 +f 2363//2363 2367//2367 2362//2362 +f 2364//2364 2368//2368 2367//2367 +f 2365//2365 2369//2369 2372//2370 +f 2366//2366 2370//2371 2369//2369 +f 2367//2367 2371//2372 2370//2371 +f 2368//2368 2372//2370 2371//2372 +f 2373//2373 2377//2374 2380//2375 +f 2374//2376 2378//2377 2373//2373 +f 2375//2378 2379//2379 2378//2377 +f 2376//2380 2380//2375 2375//2378 +f 2377//2374 2381//2381 2384//2382 +f 2378//2377 2382//2383 2381//2381 +f 2379//2379 2383//2384 2382//2383 +f 2380//2375 2384//2382 2383//2384 +f 2385//2385 2389//2386 2392//2387 +f 2386//2388 2390//2389 2389//2386 +f 2387//2390 2391//2391 2390//2389 +f 2388//2392 2392//2387 2391//2391 +f 2393//2393 2397//2394 2396//2395 +f 2394//2396 2398//2397 2393//2393 +f 2395//2398 2399//2399 2394//2396 +f 2396//2395 2400//2400 2395//2398 +f 2397//2394 2401//2401 2404//2402 +f 2398//2397 2402//2403 2401//2401 +f 2399//2399 2403//2404 2402//2403 +f 2400//2400 2404//2402 2403//2404 +f 2401//2401 2405//2405 2404//2402 +f 2402//2403 2406//2406 2401//2401 +f 2403//2404 2407//2407 2402//2403 +f 2404//2402 2408//2408 2403//2404 +f 2405//2405 2409//2409 2412//2410 +f 2406//2406 2410//2411 2409//2409 +f 2407//2407 2411//2412 2410//2411 +f 2408//2408 2412//2410 2411//2412 +f 2409//2409 2413//2413 2412//2410 +f 2410//2411 2414//2414 2409//2409 +f 2411//2412 2415//2415 2410//2411 +f 2412//2410 2416//2416 2411//2412 +f 2413//2413 2417//2417 2420//2418 +f 2414//2414 2418//2419 2417//2417 +f 2415//2415 2419//2420 2418//2419 +f 2416//2416 2420//2418 2419//2420 +f 2421//2421 2425//2422 2428//2423 +f 2422//2424 2426//2425 2425//2422 +f 2423//2426 2427//2427 2426//2425 +f 2424//2428 2428//2423 2427//2427 +f 2425//2422 2429//2429 2428//2423 +f 2426//2425 2430//2430 2429//2429 +f 2427//2427 2431//2431 2426//2425 +f 2428//2423 2432//2432 2431//2431 +f 2429//2429 2433//2433 2436//2434 +f 2430//2430 2434//2435 2433//2433 +f 2431//2431 2435//2436 2434//2435 +f 2432//2432 2436//2434 2435//2436 +f 2437//2437 2441//2438 2444//2439 +f 2438//2440 2442//2441 2441//2438 +f 2439//2442 2443//2443 2442//2441 +f 2440//2444 2444//2439 2443//2443 +f 2445//2445 2449//2446 2448//2447 +f 2446//2448 2450//2449 2445//2445 +f 2447//2450 2451//2451 2446//2448 +f 2448//2447 2452//2452 2447//2450 +f 2449//2446 2453//2453 2456//2454 +f 2450//2449 2454//2455 2453//2453 +f 2451//2451 2455//2456 2454//2455 +f 2452//2452 2456//2454 2455//2456 +f 2453//2453 2457//2457 2456//2454 +f 2454//2455 2458//2458 2453//2453 +f 2455//2456 2459//2459 2454//2455 +f 2456//2454 2460//2460 2455//2456 +f 2457//2457 2461//2461 2464//2462 +f 2458//2458 2462//2463 2461//2461 +f 2459//2459 2463//2464 2462//2463 +f 2460//2460 2464//2462 2463//2464 +f 2461//2461 2465//2465 2464//2462 +f 2462//2463 2466//2466 2461//2461 +f 2463//2464 2467//2467 2462//2463 +f 2464//2462 2468//2468 2463//2464 +f 2465//2465 2469//2469 2472//2470 +f 2466//2466 2470//2471 2469//2469 +f 2467//2467 2471//2472 2470//2471 +f 2468//2468 2472//2470 2471//2472 +f 2469//2469 2473//2473 2476//2474 +f 2470//2471 2474//2475 2473//2473 +f 2471//2472 2475//2476 2474//2475 +f 2472//2470 2476//2474 2475//2476 +f 2477//2477 2481//2478 2484//2479 +f 2478//2480 2482//2481 2481//2478 +f 2479//2482 2483//2483 2482//2481 +f 2480//2484 2484//2479 2483//2483 +f 2481//2478 2485//2485 2484//2479 +f 2482//2481 2486//2486 2481//2478 +f 2483//2483 2487//2487 2482//2481 +f 2484//2479 2488//2488 2483//2483 +f 2485//2485 2489//2489 2492//2490 +f 2486//2486 2490//2491 2485//2485 +f 2487//2487 2491//2492 2490//2491 +f 2488//2488 2492//2490 2487//2487 +f 2489//2489 2493//2493 2496//2494 +f 2490//2491 2494//2495 2493//2493 +f 2491//2492 2495//2496 2494//2495 +f 2492//2490 2496//2494 2495//2496 +f 2497//2497 2501//2498 2504//2499 +f 2498//2500 2502//2501 2501//2498 +f 2499//2502 2503//2503 2502//2501 +f 2500//2504 2504//2499 2503//2503 +f 2501//2498 2505//2505 2508//2506 +f 2502//2501 2506//2507 2505//2505 +f 2503//2503 2507//2508 2506//2507 +f 2504//2499 2508//2506 2507//2508 +f 2509//2509 2513//2510 2516//2511 +f 2510//2512 2514//2513 2513//2510 +f 2511//2514 2515//2515 2514//2513 +f 2512//2516 2516//2511 2515//2515 +f 2517//2517 2521//2518 2524//2519 +f 2518//2520 2522//2521 2521//2518 +f 2519//2522 2523//2523 2522//2521 +f 2520//2524 2524//2519 2523//2523 +f 2521//2518 2525//2525 2528//2526 +f 2522//2521 2526//2527 2525//2525 +f 2523//2523 2527//2528 2526//2527 +f 2524//2519 2528//2526 2527//2528 +f 2525//2525 2529//2529 2528//2526 +f 2526//2527 2530//2530 2525//2525 +f 2527//2528 2531//2531 2526//2527 +f 2528//2526 2532//2532 2527//2528 +f 2529//2529 2533//2533 2536//2534 +f 2530//2530 2534//2535 2533//2533 +f 2531//2531 2535//2536 2534//2535 +f 2532//2532 2536//2534 2535//2536 +f 2533//2533 2537//2537 2536//2534 +f 2534//2535 2538//2538 2533//2533 +f 2535//2536 2539//2539 2534//2535 +f 2536//2534 2540//2540 2535//2536 +f 2537//2537 2541//2541 2544//2542 +f 2538//2538 2542//2543 2541//2541 +f 2539//2539 2543//2544 2542//2543 +f 2540//2540 2544//2542 2543//2544 +f 2545//2545 2549//2546 2548//2547 +f 2546//2548 2550//2549 2545//2545 +f 2547//2550 2551//2551 2546//2548 +f 2548//2547 2552//2552 2547//2550 +f 2549//2546 2553//2553 2556//2554 +f 2550//2549 2554//2555 2553//2553 +f 2551//2551 2555//2556 2554//2555 +f 2552//2552 2556//2554 2551//2551 +f 2553//2553 2557//2557 2560//2558 +f 2554//2555 2558//2559 2557//2557 +f 2555//2556 2559//2560 2558//2559 +f 2556//2554 2560//2558 2559//2560 +f 2561//2561 2565//2562 2568//2563 +f 2562//2564 2566//2565 2565//2562 +f 2563//2566 2567//2567 2566//2565 +f 2564//2568 2568//2563 2567//2567 +f 2569//2569 2573//2570 2576//2571 +f 2570//2572 2574//2573 2573//2570 +f 2571//2574 2575//2575 2574//2573 +f 2572//2576 2576//2571 2575//2575 +f 2573//2570 2577//2577 2576//2571 +f 2574//2573 2578//2578 2573//2570 +f 2575//2575 2579//2579 2574//2573 +f 2576//2571 2580//2580 2575//2575 +f 2577//2577 2581//2581 2584//2582 +f 2578//2578 2582//2583 2581//2581 +f 2579//2579 2583//2584 2582//2583 +f 2580//2580 2584//2582 2583//2584 +f 2581//2581 2585//2585 2584//2582 +f 2582//2583 2586//2586 2581//2581 +f 2583//2584 2587//2587 2582//2583 +f 2584//2582 2588//2588 2583//2584 +f 2585//2585 2589//2589 2592//2590 +f 2586//2586 2590//2591 2589//2589 +f 2587//2587 2591//2592 2590//2591 +f 2588//2588 2592//2590 2591//2592 +f 2589//2589 2593//2593 2596//2594 +f 2590//2591 2594//2595 2593//2593 +f 2591//2592 2595//2596 2594//2595 +f 2592//2590 2596//2594 2595//2596 +f 2593//2593 2597//2597 2600//2598 +f 2594//2595 2598//2599 2597//2597 +f 2595//2596 2599//2600 2598//2599 +f 2596//2594 2600//2598 2599//2600 +f 2601//2601 2605//2602 2604//2603 +f 2602//2604 2606//2605 2601//2601 +f 2603//2606 2607//2607 2602//2604 +f 2604//2603 2608//2608 2603//2606 +f 2605//2602 2609//2609 2608//2608 +f 2606//2605 2610//2610 2605//2602 +f 2607//2607 2611//2611 2606//2605 +f 2608//2608 2612//2612 2607//2607 +f 2609//2609 2613//2613 2612//2612 +f 2610//2610 2614//2614 2613//2613 +f 2611//2611 2615//2615 2610//2610 +f 2612//2612 2616//2616 2615//2615 +f 2613//2613 2617//2617 2620//2618 +f 2614//2614 2618//2619 2617//2617 +f 2615//2615 2619//2620 2618//2619 +f 2616//2616 2620//2618 2619//2620 +f 2621//2621 2625//2622 2628//2623 +f 2622//2624 2626//2625 2621//2621 +f 2623//2626 2627//2627 2626//2625 +f 2624//2628 2628//2623 2623//2626 +f 2625//2622 2629//2629 2632//2630 +f 2626//2625 2630//2631 2629//2629 +f 2627//2627 2631//2632 2630//2631 +f 2628//2623 2632//2630 2631//2632 +f 2633//2633 2637//2634 2640//2635 +f 2634//2636 2638//2637 2637//2634 +f 2635//2638 2639//2639 2638//2637 +f 2636//2640 2640//2635 2639//2639 +f 2641//2641 2645//2642 2644//2643 +f 2642//2644 2646//2645 2641//2641 +f 2643//2646 2647//2647 2646//2645 +f 2644//2643 2648//2648 2643//2646 +f 2645//2642 2649//2649 2648//2648 +f 2646//2645 2650//2650 2649//2649 +f 2647//2647 2651//2651 2646//2645 +f 2648//2648 2652//2652 2651//2651 +f 2649//2649 2653//2653 2652//2652 +f 2650//2650 2654//2654 2653//2653 +f 2651//2651 2655//2655 2650//2650 +f 2652//2652 2656//2656 2655//2655 +f 2653//2653 2657//2657 2656//2656 +f 2654//2654 2658//2658 2657//2657 +f 2655//2655 2659//2659 2654//2654 +f 2656//2656 2660//2660 2659//2659 +f 2657//2657 2661//2661 2664//2662 +f 2658//2658 2662//2663 2657//2657 +f 2659//2659 2663//2664 2662//2663 +f 2660//2660 2664//2662 2659//2659 +f 2661//2661 2665//2665 2668//2666 +f 2662//2663 2666//2667 2665//2665 +f 2663//2664 2667//2668 2666//2667 +f 2664//2662 2668//2666 2667//2668 +f 2669//2669 2673//2670 2672//2671 +f 2670//2672 2674//2673 2673//2670 +f 2671//2674 2675//2675 2670//2672 +f 2672//2671 2676//2676 2675//2675 +f 2673//2670 2677//2677 2676//2676 +f 2674//2673 2678//2678 2677//2677 +f 2675//2675 2679//2679 2674//2673 +f 2676//2676 2680//2680 2679//2679 +f 2677//2677 2681//2681 2684//2682 +f 2678//2678 2682//2683 2681//2681 +f 2679//2679 2683//2684 2682//2683 +f 2680//2680 2684//2682 2683//2684 +f 2685//2685 2689//2686 2692//2687 +f 2686//2688 2690//2689 2689//2686 +f 2687//2690 2691//2691 2690//2689 +f 2688//2692 2692//2687 2691//2691 +f 2693//2693 2697//2694 2696//2695 +f 2694//2696 2698//2697 2693//2693 +f 2695//2698 2699//2699 2694//2696 +f 2696//2695 2700//2700 2695//2698 +f 2697//2694 2701//2701 2704//2702 +f 2698//2697 2702//2703 2701//2701 +f 2699//2699 2703//2704 2702//2703 +f 2700//2700 2704//2702 2703//2704 +f 2701//2701 2705//2705 2704//2702 +f 2702//2703 2706//2706 2701//2701 +f 2703//2704 2707//2707 2702//2703 +f 2704//2702 2708//2708 2703//2704 +f 2705//2705 2709//2709 2712//2710 +f 2706//2706 2710//2711 2709//2709 +f 2707//2707 2711//2712 2710//2711 +f 2708//2708 2712//2710 2711//2712 +f 2709//2709 2713//2713 2712//2710 +f 2710//2711 2714//2714 2709//2709 +f 2711//2712 2715//2715 2710//2711 +f 2712//2710 2716//2716 2711//2712 +f 2713//2713 2717//2717 2720//2718 +f 2714//2714 2718//2719 2717//2717 +f 2715//2715 2719//2720 2718//2719 +f 2716//2716 2720//2718 2719//2720 +f 2717//2717 2721//2721 2724//2722 +f 2718//2719 2722//2723 2721//2721 +f 2719//2720 2723//2724 2722//2723 +f 2720//2718 2724//2722 2723//2724 +f 2725//2725 2729//2726 2732//2727 +f 2726//2728 2730//2729 2725//2725 +f 2727//2730 2731//2731 2730//2729 +f 2728//2732 2732//2727 2727//2730 +f 2729//2726 2733//2733 2732//2727 +f 2730//2729 2734//2734 2733//2733 +f 2731//2731 2735//2735 2730//2729 +f 2732//2727 2736//2736 2735//2735 +f 2733//2733 2737//2737 2740//2738 +f 2734//2734 2738//2739 2737//2737 +f 2735//2735 2739//2740 2738//2739 +f 2736//2736 2740//2738 2739//2740 +f 2737//2737 2741//2741 2744//2742 +f 2738//2739 2742//2743 2741//2741 +f 2739//2740 2743//2744 2742//2743 +f 2740//2738 2744//2742 2743//2744 +f 2745//2745 2749//2746 2748//2747 +f 2746//2748 2750//2749 2745//2745 +f 2747//2750 2751//2751 2746//2748 +f 2748//2747 2752//2752 2747//2750 +f 2749//2746 2753//2753 2756//2754 +f 2750//2749 2754//2755 2753//2753 +f 2751//2751 2755//2756 2754//2755 +f 2752//2752 2756//2754 2755//2756 +f 2757//2757 2761//2758 2764//2759 +f 2758//2760 2762//2761 2761//2758 +f 2759//2762 2763//2763 2762//2761 +f 2760//2764 2764//2759 2763//2763 +f 2765//2765 2769//2766 2772//2767 +f 2766//2768 2770//2769 2769//2766 +f 2767//2770 2771//2771 2770//2769 +f 2768//2772 2772//2767 2771//2771 +f 2769//2766 2773//2773 2772//2767 +f 2770//2769 2774//2774 2769//2766 +f 2771//2771 2775//2775 2770//2769 +f 2772//2767 2776//2776 2771//2771 +f 2773//2773 2777//2777 2780//2778 +f 2774//2774 2778//2779 2777//2777 +f 2775//2775 2779//2780 2778//2779 +f 2776//2776 2780//2778 2779//2780 +f 2777//2777 2781//2781 2780//2778 +f 2778//2779 2782//2782 2777//2777 +f 2779//2780 2783//2783 2778//2779 +f 2780//2778 2784//2784 2779//2780 +f 2781//2781 2785//2785 2788//2786 +f 2782//2782 2786//2787 2785//2785 +f 2783//2783 2787//2788 2786//2787 +f 2784//2784 2788//2786 2787//2788 +f 2785//2785 2789//2789 2792//2790 +f 2786//2787 2790//2791 2789//2789 +f 2787//2788 2791//2792 2790//2791 +f 2788//2786 2792//2790 2791//2792 +f 2793//2793 2797//2794 2796//2795 +f 2794//2796 2798//2797 2797//2794 +f 2795//2798 2799//2799 2794//2796 +f 2796//2795 2800//2800 2799//2799 +f 2797//2794 2801//2801 2804//2802 +f 2798//2797 2802//2803 2797//2794 +f 2799//2799 2803//2804 2802//2803 +f 2800//2800 2804//2802 2799//2799 +f 2801//2801 2805//2805 2808//2806 +f 2802//2803 2806//2807 2805//2805 +f 2803//2804 2807//2808 2806//2807 +f 2804//2802 2808//2806 2807//2808 +f 2809//2809 2813//2810 2816//2811 +f 2810//2812 2814//2813 2813//2810 +f 2811//2814 2815//2815 2814//2813 +f 2812//2816 2816//2811 2815//2815 +f 2817//2817 2821//2818 2820//2819 +f 2818//2820 2822//2821 2821//2818 +f 2819//2822 2823//2823 2818//2820 +f 2820//2819 2824//2824 2823//2823 +f 2821//2818 2825//2825 2828//2826 +f 2822//2821 2826//2827 2821//2818 +f 2823//2823 2827//2828 2826//2827 +f 2824//2824 2828//2826 2823//2823 +f 2825//2825 2829//2829 2832//2830 +f 2826//2827 2830//2831 2825//2825 +f 2827//2828 2831//2832 2830//2831 +f 2828//2826 2832//2830 2827//2828 +f 2829//2829 2833//2833 2832//2830 +f 2830//2831 2834//2834 2833//2833 +f 2831//2832 2835//2835 2830//2831 +f 2832//2830 2836//2836 2835//2835 +f 2833//2833 2837//2837 2840//2838 +f 2834//2834 2838//2839 2833//2833 +f 2835//2835 2839//2840 2838//2839 +f 2836//2836 2840//2838 2835//2835 +f 2837//2837 2841//2841 2840//2838 +f 2838//2839 2842//2842 2841//2841 +f 2839//2840 2843//2843 2838//2839 +f 2840//2838 2844//2844 2843//2843 +f 2841//2841 2845//2845 2848//2846 +f 2842//2842 2846//2847 2845//2845 +f 2843//2843 2847//2848 2846//2847 +f 2844//2844 2848//2846 2847//2848 +f 2849//2849 2853//2850 2852//2851 +f 2850//2852 2854//2853 2849//2849 +f 2851//2854 2855//2855 2850//2852 +f 2852//2851 2856//2856 2851//2854 +f 2853//2850 2857//2857 2860//2858 +f 2854//2853 2858//2859 2857//2857 +f 2855//2855 2859//2860 2858//2859 +f 2856//2856 2860//2858 2859//2860 +f 2857//2857 2861//2861 2864//2862 +f 2858//2859 2862//2863 2857//2857 +f 2859//2860 2863//2864 2862//2863 +f 2860//2858 2864//2862 2859//2860 +f 2861//2861 2865//2865 2868//2866 +f 2862//2863 2866//2867 2865//2865 +f 2863//2864 2867//2868 2866//2867 +f 2864//2862 2868//2866 2867//2868 +f 2869//2869 2873//2870 2872//2871 +f 2870//2872 2874//2873 2873//2870 +f 2871//2874 2875//2875 2870//2872 +f 2872//2871 2876//2876 2875//2875 +f 2873//2870 2877//2877 2880//2878 +f 2874//2873 2878//2879 2877//2877 +f 2875//2875 2879//2880 2878//2879 +f 2876//2876 2880//2878 2879//2880 +f 2881//2881 2885//2882 2888//2883 +f 2882//2884 2886//2885 2885//2882 +f 2883//2886 2887//2887 2886//2885 +f 2884//2888 2888//2883 2887//2887 +f 2889//2889 2893//2890 2892//2891 +f 2890//2892 2894//2893 2889//2889 +f 2891//2894 2895//2895 2890//2892 +f 2892//2891 2896//2896 2891//2894 +f 2893//2890 2897//2897 2900//2898 +f 2894//2893 2898//2899 2897//2897 +f 2895//2895 2899//2900 2898//2899 +f 2896//2896 2900//2898 2899//2900 +f 2897//2897 2901//2901 2900//2898 +f 2898//2899 2902//2902 2897//2897 +f 2899//2900 2903//2903 2898//2899 +f 2900//2898 2904//2904 2899//2900 +f 2901//2901 2905//2905 2908//2906 +f 2902//2902 2906//2907 2905//2905 +f 2903//2903 2907//2908 2906//2907 +f 2904//2904 2908//2906 2907//2908 +f 2905//2905 2909//2909 2908//2906 +f 2906//2907 2910//2910 2905//2905 +f 2907//2908 2911//2911 2906//2907 +f 2908//2906 2912//2912 2907//2908 +f 2909//2909 2913//2913 2916//2914 +f 2910//2910 2914//2915 2913//2913 +f 2911//2911 2915//2916 2914//2915 +f 2912//2912 2916//2914 2915//2916 +f 2917//2917 2921//2918 2920//2919 +f 2918//2920 2922//2921 2917//2917 +f 2919//2922 2923//2923 2918//2920 +f 2920//2919 2924//2924 2919//2922 +f 2921//2918 2925//2925 2928//2926 +f 2922//2921 2926//2927 2925//2925 +f 2923//2923 2927//2928 2926//2927 +f 2924//2924 2928//2926 2927//2928 +f 2925//2925 2929//2929 2932//2930 +f 2926//2927 2930//2931 2929//2929 +f 2927//2928 2931//2932 2930//2931 +f 2928//2926 2932//2930 2931//2932 +f 2933//2933 2937//2934 2940//2935 +f 2934//2936 2938//2937 2937//2934 +f 2935//2938 2939//2939 2938//2937 +f 2936//2940 2940//2935 2939//2939 +f 2941//2941 2945//2942 2944//2943 +f 2942//2944 2946//2945 2941//2941 +f 2943//2946 2947//2947 2942//2944 +f 2944//2943 2948//2948 2943//2946 +f 2945//2942 2949//2949 2952//2950 +f 2946//2945 2950//2951 2949//2949 +f 2947//2947 2951//2952 2950//2951 +f 2948//2948 2952//2950 2951//2952 +f 2949//2949 2953//2953 2952//2950 +f 2950//2951 2954//2954 2949//2949 +f 2951//2952 2955//2955 2950//2951 +f 2952//2950 2956//2956 2951//2952 +f 2953//2953 2957//2957 2960//2958 +f 2954//2954 2958//2959 2957//2957 +f 2955//2955 2959//2960 2958//2959 +f 2956//2956 2960//2958 2959//2960 +f 2957//2957 2961//2961 2960//2958 +f 2958//2959 2962//2962 2957//2957 +f 2959//2960 2963//2963 2958//2959 +f 2960//2958 2964//2964 2959//2960 +f 2961//2961 2965//2965 2964//2964 +f 2962//2962 2966//2966 2961//2961 +f 2963//2963 2967//2967 2962//2962 +f 2964//2964 2968//2968 2963//2963 +f 2965//2965 2969//2969 2972//2970 +f 2966//2966 2970//2971 2969//2969 +f 2967//2967 2971//2972 2970//2971 +f 2968//2968 2972//2970 2971//2972 +f 2973//2973 2977//2974 2980//2975 +f 2974//2976 2978//2977 2973//2973 +f 2975//2978 2979//2979 2978//2977 +f 2976//2980 2980//2975 2975//2978 +f 2977//2974 2981//2981 2984//2982 +f 2978//2977 2982//2983 2977//2974 +f 2979//2979 2983//2984 2982//2983 +f 2980//2975 2984//2982 2979//2979 +f 2981//2981 2985//2985 2988//2986 +f 2982//2983 2986//2987 2985//2985 +f 2983//2984 2987//2988 2986//2987 +f 2984//2982 2988//2986 2987//2988 +f 2985//2985 2989//2989 2992//2990 +f 2986//2987 2990//2991 2989//2989 +f 2987//2988 2991//2992 2990//2991 +f 2988//2986 2992//2990 2991//2992 +f 2993//2993 2997//2994 2996//2995 +f 2994//2996 2998//2997 2997//2994 +f 2995//2998 2999//2999 2994//2996 +f 2996//2995 3000//3000 2999//2999 +f 2997//2994 3001//3001 3004//3002 +f 2998//2997 3002//3003 3001//3001 +f 2999//2999 3003//3004 3002//3003 +f 3000//3000 3004//3002 3003//3004 +f 3005//3005 3009//3006 3012//3007 +f 3006//3008 3010//3009 3009//3006 +f 3007//3010 3011//3011 3010//3009 +f 3008//3012 3012//3007 3011//3011 +f 3013//3013 3017//3014 3016//3015 +f 3014//3016 3018//3017 3017//3014 +f 3015//3018 3019//3019 3014//3016 +f 3016//3015 3020//3020 3019//3019 +f 3017//3014 3021//3021 3024//3022 +f 3018//3017 3022//3023 3017//3014 +f 3019//3019 3023//3024 3022//3023 +f 3020//3020 3024//3022 3019//3019 +f 3021//3021 3025//3025 3024//3022 +f 3022//3023 3026//3026 3025//3025 +f 3023//3024 3027//3027 3022//3023 +f 3024//3022 3028//3028 3027//3027 +f 3025//3025 3029//3029 3032//3030 +f 3026//3026 3030//3031 3025//3025 +f 3027//3027 3031//3032 3030//3031 +f 3028//3028 3032//3030 3027//3027 +f 3029//3029 3033//3033 3036//3034 +f 3030//3031 3034//3035 3029//3029 +f 3031//3032 3035//3036 3034//3035 +f 3032//3030 3036//3034 3031//3032 +f 3033//3033 3037//3037 3040//3038 +f 3034//3035 3038//3039 3037//3037 +f 3035//3036 3039//3040 3038//3039 +f 3036//3034 3040//3038 3039//3040 +f 3041//3041 3045//3042 3044//3043 +f 3042//3044 3046//3045 3045//3042 +f 3043//3046 3047//3047 3042//3044 +f 3044//3043 3048//3048 3047//3047 +f 3045//3042 3049//3049 3052//3050 +f 3046//3045 3050//3051 3045//3042 +f 3047//3047 3051//3052 3050//3051 +f 3048//3048 3052//3050 3047//3047 +f 3049//3049 3053//3053 3056//3054 +f 3050//3051 3054//3055 3053//3053 +f 3051//3052 3055//3056 3054//3055 +f 3052//3050 3056//3054 3055//3056 +f 3057//3057 3061//3058 3064//3059 +f 3058//3060 3062//3061 3061//3058 +f 3059//3062 3063//3063 3062//3061 +f 3060//3064 3064//3059 3063//3063 +f 3065//3065 3069//3066 3068//3067 +f 3066//3068 3070//3069 3065//3065 +f 3067//3070 3071//3071 3066//3068 +f 3068//3067 3072//3072 3067//3070 +f 3069//3066 3073//3073 3072//3072 +f 3070//3069 3074//3074 3069//3066 +f 3071//3071 3075//3075 3070//3069 +f 3072//3072 3076//3076 3071//3071 +f 3073//3073 3077//3077 3080//3078 +f 3074//3074 3078//3079 3077//3077 +f 3075//3075 3079//3080 3078//3079 +f 3076//3076 3080//3078 3079//3080 +f 3077//3077 3081//3081 3084//3082 +f 3078//3079 3082//3083 3081//3081 +f 3079//3080 3083//3084 3082//3083 +f 3080//3078 3084//3082 3083//3084 +f 3081//3081 3085//3085 3084//3082 +f 3082//3083 3086//3086 3081//3081 +f 3083//3084 3087//3087 3082//3083 +f 3084//3082 3088//3088 3083//3084 +f 3085//3085 3089//3089 3092//3090 +f 3086//3086 3090//3091 3089//3089 +f 3087//3087 3091//3092 3090//3091 +f 3088//3088 3092//3090 3091//3092 +f 3089//3089 3093//3093 3096//3094 +f 3090//3091 3094//3095 3093//3093 +f 3091//3092 3095//3096 3094//3095 +f 3092//3090 3096//3094 3095//3096 +f 3097//3097 3101//3098 3100//3099 +f 3098//3100 3102//3101 3097//3097 +f 3099//3102 3103//3103 3098//3100 +f 3100//3099 3104//3104 3099//3102 +f 3101//3098 3105//3105 3104//3104 +f 3102//3101 3106//3106 3101//3098 +f 3103//3103 3107//3107 3102//3101 +f 3104//3104 3108//3108 3103//3103 +f 3105//3105 3109//3109 3112//3110 +f 3106//3106 3110//3111 3105//3105 +f 3107//3107 3111//3112 3110//3111 +f 3108//3108 3112//3110 3107//3107 +f 3109//3109 3113//3113 3116//3114 +f 3110//3111 3114//3115 3113//3113 +f 3111//3112 3115//3116 3114//3115 +f 3112//3110 3116//3114 3115//3116 +f 3117//3117 3121//3118 3124//3119 +f 3118//3120 3122//3121 3117//3117 +f 3119//3122 3123//3123 3122//3121 +f 3120//3124 3124//3119 3119//3122 +f 3121//3118 3125//3125 3128//3126 +f 3122//3121 3126//3127 3125//3125 +f 3123//3123 3127//3128 3126//3127 +f 3124//3119 3128//3126 3127//3128 +f 3129//3129 3133//3130 3136//3131 +f 3130//3132 3134//3133 3133//3130 +f 3131//3134 3135//3135 3134//3133 +f 3132//3136 3136//3131 3135//3135 +f 3137//3137 3141//3138 3144//3139 +f 3138//3140 3142//3141 3141//3138 +f 3139//3142 3143//3143 3142//3141 +f 3140//3144 3144//3139 3143//3143 +f 3141//3138 3145//3145 3148//3146 +f 3142//3141 3146//3147 3145//3145 +f 3143//3143 3147//3148 3146//3147 +f 3144//3139 3148//3146 3147//3148 +f 3145//3145 3149//3149 3152//3150 +f 3146//3147 3150//3151 3149//3149 +f 3147//3148 3151//3152 3150//3151 +f 3148//3146 3152//3150 3151//3152 +f 3149//3149 3153//3153 3152//3150 +f 3150//3151 3154//3154 3153//3153 +f 3151//3152 3155//3155 3150//3151 +f 3152//3150 3156//3156 3155//3155 +f 3153//3153 3157//3157 3156//3156 +f 3154//3154 3158//3158 3157//3157 +f 3155//3155 3159//3159 3154//3154 +f 3156//3156 3160//3160 3159//3159 +f 3157//3157 3161//3161 3164//3162 +f 3158//3158 3162//3163 3161//3161 +f 3159//3159 3163//3164 3162//3163 +f 3160//3160 3164//3162 3163//3164 +f 3165//3165 3169//3166 3172//3167 +f 3166//3168 3170//3169 3165//3165 +f 3167//3170 3171//3171 3170//3169 +f 3168//3172 3172//3167 3167//3170 +f 3169//3166 3173//3173 3172//3167 +f 3170//3169 3174//3174 3173//3173 +f 3171//3171 3175//3175 3170//3169 +f 3172//3167 3176//3176 3175//3175 +f 3173//3173 3177//3177 3180//3178 +f 3174//3174 3178//3179 3177//3177 +f 3175//3175 3179//3180 3178//3179 +f 3176//3176 3180//3178 3179//3180 +f 3181//3181 3185//3182 3188//3183 +f 3182//3184 3186//3185 3185//3182 +f 3183//3186 3187//3187 3186//3185 +f 3184//3188 3188//3183 3187//3187 +f 3189//3189 3193//3190 3192//3191 +f 3190//3192 3194//3193 3189//3189 +f 3191//3194 3195//3195 3190//3192 +f 3192//3191 3196//3196 3191//3194 +f 3193//3190 3197//3197 3200//3198 +f 3194//3193 3198//3199 3197//3197 +f 3195//3195 3199//3200 3198//3199 +f 3196//3196 3200//3198 3199//3200 +f 3197//3197 3201//3201 3200//3198 +f 3198//3199 3202//3202 3197//3197 +f 3199//3200 3203//3203 3198//3199 +f 3200//3198 3204//3204 3199//3200 +f 3201//3201 3205//3205 3204//3204 +f 3202//3202 3206//3206 3201//3201 +f 3203//3203 3207//3207 3202//3202 +f 3204//3204 3208//3208 3203//3203 +f 3205//3205 3209//3209 3208//3208 +f 3206//3206 3210//3210 3205//3205 +f 3207//3207 3211//3211 3206//3206 +f 3208//3208 3212//3212 3207//3207 +f 3209//3209 3213//3213 3216//3214 +f 3210//3210 3214//3215 3213//3213 +f 3211//3211 3215//3216 3214//3215 +f 3212//3212 3216//3214 3215//3216 +f 3213//3213 3217//3217 3220//3218 +f 3214//3215 3218//3219 3217//3217 +f 3215//3216 3219//3220 3218//3219 +f 3216//3214 3220//3218 3219//3220 +f 3221//3221 3225//3222 3228//3223 +f 3222//3224 3226//3225 3221//3221 +f 3223//3226 3227//3227 3226//3225 +f 3224//3228 3228//3223 3223//3226 +f 3225//3222 3229//3229 3232//3230 +f 3226//3225 3230//3231 3225//3222 +f 3227//3227 3231//3232 3230//3231 +f 3228//3223 3232//3230 3227//3227 +f 3229//3229 3233//3233 3232//3230 +f 3230//3231 3234//3234 3233//3233 +f 3231//3232 3235//3235 3230//3231 +f 3232//3230 3236//3236 3235//3235 +f 3233//3233 3237//3237 3240//3238 +f 3234//3234 3238//3239 3237//3237 +f 3235//3235 3239//3240 3238//3239 +f 3236//3236 3240//3238 3239//3240 +f 3241//3241 3245//3242 3248//3243 +f 3242//3244 3246//3245 3241//3241 +f 3243//3246 3247//3247 3246//3245 +f 3244//3248 3248//3243 3243//3246 +f 3245//3242 3249//3249 3252//3250 +f 3246//3245 3250//3251 3249//3249 +f 3247//3247 3251//3252 3250//3251 +f 3248//3243 3252//3250 3251//3252 +f 3253//3253 3257//3254 3260//3255 +f 3254//3256 3258//3257 3257//3254 +f 3255//3258 3259//3259 3258//3257 +f 3256//3260 3260//3255 3259//3259 +f 3261//3261 3265//3262 3268//3263 +f 3262//3264 3266//3265 3265//3262 +f 3263//3266 3267//3267 3266//3265 +f 3264//3268 3268//3263 3267//3267 +f 3265//3262 3269//3269 3272//3270 +f 3266//3265 3270//3271 3269//3269 +f 3267//3267 3271//3272 3270//3271 +f 3268//3263 3272//3270 3267//3267 +f 3269//3269 3273//3273 3272//3270 +f 3270//3271 3274//3274 3269//3269 +f 3271//3272 3275//3275 3270//3271 +f 3272//3270 3276//3276 3275//3275 +f 3273//3273 3277//3277 3280//3278 +f 3274//3274 3278//3279 3273//3273 +f 3275//3275 3279//3280 3278//3279 +f 3276//3276 3280//3278 3275//3275 +f 3277//3277 3281//3281 3280//3278 +f 3278//3279 3282//3282 3281//3281 +f 3279//3280 3283//3283 3278//3279 +f 3280//3278 3284//3284 3283//3283 +f 3281//3281 3285//3285 3288//3286 +f 3282//3282 3286//3287 3285//3285 +f 3283//3283 3287//3288 3286//3287 +f 3284//3284 3288//3286 3287//3288 +f 3289//3289 3293//3290 3296//3291 +f 3290//3292 3294//3293 3293//3290 +f 3291//3294 3295//3295 3294//3293 +f 3292//3296 3296//3291 3295//3295 +f 3293//3290 3297//3297 3300//3298 +f 3294//3293 3298//3299 3297//3297 +f 3295//3295 3299//3300 3298//3299 +f 3296//3291 3300//3298 3299//3300 +f 3297//3297 3301//3301 3304//3302 +f 3298//3299 3302//3303 3301//3301 +f 3299//3300 3303//3304 3302//3303 +f 3300//3298 3304//3302 3303//3304 +f 3305//3305 3309//3306 3312//3307 +f 3306//3308 3310//3309 3309//3306 +f 3307//3310 3311//3311 3310//3309 +f 3308//3312 3312//3307 3311//3311 +f 3313//3313 3317//3314 3316//3315 +f 3314//3316 3318//3317 3317//3314 +f 3315//3318 3319//3319 3314//3316 +f 3316//3315 3320//3320 3319//3319 +f 3317//3314 3321//3321 3320//3320 +f 3318//3317 3322//3322 3321//3321 +f 3319//3319 3323//3323 3318//3317 +f 3320//3320 3324//3324 3323//3323 +f 3321//3321 3325//3325 3328//3326 +f 3322//3322 3326//3327 3321//3321 +f 3323//3323 3327//3328 3326//3327 +f 3324//3324 3328//3326 3323//3323 +f 3325//3325 3329//3329 3332//3330 +f 3326//3327 3330//3331 3325//3325 +f 3327//3328 3331//3332 3330//3331 +f 3328//3326 3332//3330 3327//3328 +f 3329//3329 3333//3333 3336//3334 +f 3330//3331 3334//3335 3329//3329 +f 3331//3332 3335//3336 3334//3335 +f 3332//3330 3336//3334 3331//3332 +f 3333//3333 3337//3337 3336//3334 +f 3334//3335 3338//3338 3337//3337 +f 3335//3336 3339//3339 3334//3335 +f 3336//3334 3340//3340 3339//3339 +f 3337//3337 3341//3341 3344//3342 +f 3338//3338 3342//3343 3341//3341 +f 3339//3339 3343//3344 3342//3343 +f 3340//3340 3344//3342 3343//3344 +f 3345//3345 3349//3346 3348//3347 +f 3346//3348 3350//3349 3345//3345 +f 3347//3350 3351//3351 3346//3348 +f 3348//3347 3352//3352 3347//3350 +f 3349//3346 3353//3353 3356//3354 +f 3350//3349 3354//3355 3353//3353 +f 3351//3351 3355//3356 3354//3355 +f 3352//3352 3356//3354 3355//3356 +f 3353//3353 3357//3357 3360//3358 +f 3354//3355 3358//3359 3357//3357 +f 3355//3356 3359//3360 3358//3359 +f 3356//3354 3360//3358 3359//3360 +f 3357//3357 3361//3361 3364//3362 +f 3358//3359 3362//3363 3361//3361 +f 3359//3360 3363//3364 3362//3363 +f 3360//3358 3364//3362 3363//3364 +f 3365//3365 3369//3366 3368//3367 +f 3366//3368 3370//3369 3365//3365 +f 3367//3370 3371//3371 3366//3368 +f 3368//3367 3372//3372 3367//3370 +f 3369//3366 3373//3373 3376//3374 +f 3370//3369 3374//3375 3373//3373 +f 3371//3371 3375//3376 3374//3375 +f 3372//3372 3376//3374 3375//3376 +f 3377//3377 3381//3378 3384//3379 +f 3378//3380 3382//3381 3381//3378 +f 3379//3382 3383//3383 3382//3381 +f 3380//3384 3384//3379 3383//3383 +f 3385//3385 3389//3386 3392//3387 +f 3386//3388 3390//3389 3389//3386 +f 3387//3390 3391//3391 3390//3389 +f 3388//3392 3392//3387 3391//3391 +f 3389//3386 3393//3393 3392//3387 +f 3390//3389 3394//3394 3389//3386 +f 3391//3391 3395//3395 3390//3389 +f 3392//3387 3396//3396 3391//3391 +f 3393//3393 3397//3397 3396//3396 +f 3394//3394 3398//3398 3393//3393 +f 3395//3395 3399//3399 3394//3394 +f 3396//3396 3400//3400 3395//3395 +f 3397//3397 3401//3401 3400//3400 +f 3398//3398 3402//3402 3397//3397 +f 3399//3399 3403//3403 3398//3398 +f 3400//3400 3404//3404 3399//3399 +f 3401//3401 3405//3405 3408//3406 +f 3402//3402 3406//3407 3405//3405 +f 3403//3403 3407//3408 3406//3407 +f 3404//3404 3408//3406 3407//3408 +f 3405//3405 3409//3409 3412//3410 +f 3406//3407 3410//3411 3409//3409 +f 3407//3408 3411//3412 3410//3411 +f 3408//3406 3412//3410 3411//3412 +f 3413//3413 3417//3414 3416//3415 +f 3414//3416 3418//3417 3417//3414 +f 3415//3418 3419//3419 3414//3416 +f 3416//3415 3420//3420 3419//3419 +f 3417//3414 3421//3421 3424//3422 +f 3418//3417 3422//3423 3417//3414 +f 3419//3419 3423//3424 3422//3423 +f 3420//3420 3424//3422 3419//3419 +f 3421//3421 3425//3425 3428//3426 +f 3422//3423 3426//3427 3425//3425 +f 3423//3424 3427//3428 3426//3427 +f 3424//3422 3428//3426 3427//3428 +f 3429//3429 3433//3430 3436//3431 +f 3430//3432 3434//3433 3433//3430 +f 3431//3434 3435//3435 3434//3433 +f 3432//3436 3436//3431 3435//3435 +f 3437//3437 3441//3438 3440//3439 +f 3438//3440 3442//3441 3437//3437 +f 3439//3442 3443//3443 3438//3440 +f 3440//3439 3444//3444 3439//3442 +f 3441//3438 3445//3445 3448//3446 +f 3442//3441 3446//3447 3445//3445 +f 3443//3443 3447//3448 3446//3447 +f 3444//3444 3448//3446 3447//3448 +f 3445//3445 3449//3449 3452//3450 +f 3446//3447 3450//3451 3449//3449 +f 3447//3448 3451//3452 3450//3451 +f 3448//3446 3452//3450 3451//3452 +f 3449//3449 3453//3453 3452//3450 +f 3450//3451 3454//3454 3449//3449 +f 3451//3452 3455//3455 3450//3451 +f 3452//3450 3456//3456 3451//3452 +f 3453//3453 3457//3457 3456//3456 +f 3454//3454 3458//3458 3453//3453 +f 3455//3455 3459//3459 3454//3454 +f 3456//3456 3460//3460 3455//3455 +f 3457//3457 3461//3461 3460//3460 +f 3458//3458 3462//3462 3457//3457 +f 3459//3459 3463//3463 3458//3458 +f 3460//3460 3464//3464 3459//3459 +f 3461//3461 3465//3465 3468//3466 +f 3462//3462 3466//3467 3465//3465 +f 3463//3463 3467//3468 3466//3467 +f 3464//3464 3468//3466 3467//3468 +f 3469//3469 3473//3470 3472//3471 +f 3470//3472 3474//3473 3469//3469 +f 3471//3474 3475//3475 3470//3472 +f 3472//3471 3476//3476 3471//3474 +f 3473//3470 3477//3477 3480//3478 +f 3474//3473 3478//3479 3477//3477 +f 3475//3475 3479//3480 3478//3479 +f 3476//3476 3480//3478 3479//3480 +f 3477//3477 3481//3481 3484//3482 +f 3478//3479 3482//3483 3477//3477 +f 3479//3480 3483//3484 3482//3483 +f 3480//3478 3484//3482 3479//3480 +f 3481//3481 3485//3485 3488//3486 +f 3482//3483 3486//3487 3485//3485 +f 3483//3484 3487//3488 3486//3487 +f 3484//3482 3488//3486 3487//3488 +f 3489//3489 3493//3490 3496//3491 +f 3490//3492 3494//3493 3493//3490 +f 3491//3494 3495//3495 3494//3493 +f 3492//3496 3496//3491 3495//3495 +f 3493//3490 3497//3497 3500//3498 +f 3494//3493 3498//3499 3497//3497 +f 3495//3495 3499//3500 3498//3499 +f 3496//3491 3500//3498 3499//3500 +f 3501//3501 3505//3502 3508//3503 +f 3502//3504 3506//3505 3505//3502 +f 3503//3506 3507//3507 3506//3505 +f 3504//3508 3508//3503 3507//3507 +f 3509//3509 3513//3510 3512//3511 +f 3510//3512 3514//3513 3513//3510 +f 3511//3514 3515//3515 3510//3512 +f 3512//3511 3516//3516 3515//3515 +f 3513//3510 3517//3517 3516//3516 +f 3514//3513 3518//3518 3517//3517 +f 3515//3515 3519//3519 3514//3513 +f 3516//3516 3520//3520 3519//3519 +f 3517//3517 3521//3521 3524//3522 +f 3518//3518 3522//3523 3517//3517 +f 3519//3519 3523//3524 3522//3523 +f 3520//3520 3524//3522 3519//3519 +f 3521//3521 3525//3525 3528//3526 +f 3522//3523 3526//3527 3521//3521 +f 3523//3524 3527//3528 3526//3527 +f 3524//3522 3528//3526 3523//3524 +f 3525//3525 3529//3529 3528//3526 +f 3526//3527 3530//3530 3529//3529 +f 3527//3528 3531//3531 3526//3527 +f 3528//3526 3532//3532 3531//3531 +f 3529//3529 3533//3533 3536//3534 +f 3530//3530 3534//3535 3533//3533 +f 3531//3531 3535//3536 3534//3535 +f 3532//3532 3536//3534 3535//3536 +f 3537//3537 3541//3538 3540//3539 +f 3538//3540 3542//3541 3541//3538 +f 3539//3542 3543//3543 3538//3540 +f 3540//3539 3544//3544 3543//3543 +f 3541//3538 3545//3545 3548//3546 +f 3542//3541 3546//3547 3541//3538 +f 3543//3543 3547//3548 3546//3547 +f 3544//3544 3548//3546 3543//3543 +f 3545//3545 3549//3549 3552//3550 +f 3546//3547 3550//3551 3549//3549 +f 3547//3548 3551//3552 3550//3551 +f 3548//3546 3552//3550 3551//3552 +f 3553//3553 3557//3554 3560//3555 +f 3554//3556 3558//3557 3557//3554 +f 3555//3558 3559//3559 3558//3557 +f 3556//3560 3560//3555 3559//3559 +f 3561//3561 3565//3562 3568//3563 +f 3562//3564 3566//3565 3565//3562 +f 3563//3566 3567//3567 3566//3565 +f 3564//3568 3568//3563 3567//3567 +f 3565//3562 3569//3569 3572//3570 +f 3566//3565 3570//3571 3569//3569 +f 3567//3567 3571//3572 3570//3571 +f 3568//3563 3572//3570 3571//3572 +f 3569//3569 3573//3573 3576//3574 +f 3570//3571 3574//3575 3573//3573 +f 3571//3572 3575//3576 3574//3575 +f 3572//3570 3576//3574 3575//3576 +f 3573//3573 3577//3577 3576//3574 +f 3574//3575 3578//3578 3573//3573 +f 3575//3576 3579//3579 3574//3575 +f 3576//3574 3580//3580 3575//3576 +f 3577//3577 3581//3581 3584//3582 +f 3578//3578 3582//3583 3581//3581 +f 3579//3579 3583//3584 3582//3583 +f 3580//3580 3584//3582 3583//3584 +f 3581//3581 3585//3585 3584//3582 +f 3582//3583 3586//3586 3581//3581 +f 3583//3584 3587//3587 3582//3583 +f 3584//3582 3588//3588 3583//3584 +f 3585//3585 3589//3589 3592//3590 +f 3586//3586 3590//3591 3589//3589 +f 3587//3587 3591//3592 3590//3591 +f 3588//3588 3592//3590 3591//3592 +f 3593//3593 3597//3594 3600//3595 +f 3594//3596 3598//3597 3597//3594 +f 3595//3598 3599//3599 3598//3597 +f 3596//3600 3600//3595 3599//3599 +f 3597//3594 3601//3601 3600//3595 +f 3598//3597 3602//3602 3601//3601 +f 3599//3599 3603//3603 3598//3597 +f 3600//3595 3604//3604 3603//3603 +f 3601//3601 3605//3605 3604//3604 +f 3602//3602 3606//3606 3605//3605 +f 3603//3603 3607//3607 3602//3602 +f 3604//3604 3608//3608 3607//3607 +f 3605//3605 3609//3609 3612//3610 +f 3606//3606 3610//3611 3609//3609 +f 3607//3607 3611//3612 3610//3611 +f 3608//3608 3612//3610 3611//3612 +f 3613//3613 3617//3614 3620//3615 +f 3614//3616 3618//3617 3613//3613 +f 3615//3618 3619//3619 3618//3617 +f 3616//3620 3620//3615 3615//3618 +f 3617//3614 3621//3621 3624//3622 +f 3618//3617 3622//3623 3621//3621 +f 3619//3619 3623//3624 3622//3623 +f 3620//3615 3624//3622 3623//3624 +f 3625//3625 3629//3626 3632//3627 +f 3626//3628 3630//3629 3629//3626 +f 3627//3630 3631//3631 3630//3629 +f 3628//3632 3632//3627 3631//3631 +f 3633//3633 3637//3634 3636//3635 +f 3634//3636 3638//3637 3633//3633 +f 3635//3638 3639//3639 3634//3636 +f 3636//3635 3640//3640 3635//3638 +f 3637//3634 3641//3641 3644//3642 +f 3638//3637 3642//3643 3641//3641 +f 3639//3639 3643//3644 3642//3643 +f 3640//3640 3644//3642 3643//3644 +f 3641//3641 3645//3645 3644//3642 +f 3642//3643 3646//3646 3641//3641 +f 3643//3644 3647//3647 3642//3643 +f 3644//3642 3648//3648 3643//3644 +f 3645//3645 3649//3649 3648//3648 +f 3646//3646 3650//3650 3645//3645 +f 3647//3647 3651//3651 3646//3646 +f 3648//3648 3652//3652 3647//3647 +f 3649//3649 3653//3653 3656//3654 +f 3650//3650 3654//3655 3653//3653 +f 3651//3651 3655//3656 3654//3655 +f 3652//3652 3656//3654 3651//3651 +f 3653//3653 3657//3657 3660//3658 +f 3654//3655 3658//3659 3657//3657 +f 3655//3656 3659//3660 3658//3659 +f 3656//3654 3660//3658 3659//3660 +f 3661//3661 3665//3662 3668//3663 +f 3662//3664 3666//3665 3665//3662 +f 3663//3666 3667//3667 3666//3665 +f 3664//3668 3668//3663 3667//3667 +f 3665//3662 3669//3669 3668//3663 +f 3666//3665 3670//3670 3665//3662 +f 3667//3667 3671//3671 3666//3665 +f 3668//3663 3672//3672 3667//3667 +f 3669//3669 3673//3673 3676//3674 +f 3670//3670 3674//3675 3673//3673 +f 3671//3671 3675//3676 3674//3675 +f 3672//3672 3676//3674 3675//3676 +f 3677//3677 3681//3678 3684//3679 +f 3678//3680 3682//3681 3681//3678 +f 3679//3682 3683//3683 3682//3681 +f 3680//3684 3684//3679 3683//3683 +f 3685//3685 3689//3686 3688//3687 +f 3686//3688 3690//3689 3685//3685 +f 3687//3690 3691//3691 3686//3688 +f 3688//3687 3692//3692 3687//3690 +f 3689//3686 3693//3693 3696//3694 +f 3690//3689 3694//3695 3693//3693 +f 3691//3691 3695//3696 3694//3695 +f 3692//3692 3696//3694 3695//3696 +f 3693//3693 3697//3697 3696//3694 +f 3694//3695 3698//3698 3693//3693 +f 3695//3696 3699//3699 3694//3695 +f 3696//3694 3700//3700 3695//3696 +f 3697//3697 3701//3701 3700//3700 +f 3698//3698 3702//3702 3697//3697 +f 3699//3699 3703//3703 3698//3698 +f 3700//3700 3704//3704 3699//3699 +f 3701//3701 3705//3705 3704//3704 +f 3702//3702 3706//3706 3701//3701 +f 3703//3703 3707//3707 3702//3702 +f 3704//3704 3708//3708 3703//3703 +f 3705//3705 3709//3709 3712//3710 +f 3706//3706 3710//3711 3709//3709 +f 3707//3707 3711//3712 3710//3711 +f 3708//3708 3712//3710 3711//3712 +f 3709//3709 3713//3713 3716//3714 +f 3710//3711 3714//3715 3713//3713 +f 3711//3712 3715//3716 3714//3715 +f 3712//3710 3716//3714 3715//3716 +f 3717//3717 3721//3718 3720//3719 +f 3718//3720 3722//3721 3717//3717 +f 3719//3722 3723//3723 3718//3720 +f 3720//3719 3724//3724 3719//3722 +f 3721//3718 3725//3725 3728//3726 +f 3722//3721 3726//3727 3725//3725 +f 3723//3723 3727//3728 3726//3727 +f 3724//3724 3728//3726 3727//3728 +f 3725//3725 3729//3729 3728//3726 +f 3726//3727 3730//3730 3729//3729 +f 3727//3728 3731//3731 3726//3727 +f 3728//3726 3732//3732 3731//3731 +f 3729//3729 3733//3733 3736//3734 +f 3730//3730 3734//3735 3733//3733 +f 3731//3731 3735//3736 3734//3735 +f 3732//3732 3736//3734 3735//3736 +f 3737//3737 3741//3738 3740//3739 +f 3738//3740 3742//3741 3737//3737 +f 3739//3742 3743//3743 3738//3740 +f 3740//3739 3744//3744 3739//3742 +f 3741//3738 3745//3745 3748//3746 +f 3742//3741 3746//3747 3745//3745 +f 3743//3743 3747//3748 3746//3747 +f 3744//3744 3748//3746 3747//3748 +f 3749//3749 3753//3750 3756//3751 +f 3750//3752 3754//3753 3753//3750 +f 3751//3754 3755//3755 3754//3753 +f 3752//3756 3756//3751 3755//3755 +f 3757//3757 3761//3758 3760//3759 +f 3758//3760 3762//3761 3757//3757 +f 3759//3762 3763//3763 3758//3760 +f 3760//3759 3764//3764 3759//3762 +f 3761//3758 3765//3765 3764//3764 +f 3762//3761 3766//3766 3765//3765 +f 3763//3763 3767//3767 3762//3761 +f 3764//3764 3768//3768 3767//3767 +f 3765//3765 3769//3769 3768//3768 +f 3766//3766 3770//3770 3769//3769 +f 3767//3767 3771//3771 3766//3766 +f 3768//3768 3772//3772 3771//3771 +f 3769//3769 3773//3773 3776//3774 +f 3770//3770 3774//3775 3769//3769 +f 3771//3771 3775//3776 3774//3775 +f 3772//3772 3776//3774 3771//3771 +f 3773//3773 3777//3777 3776//3774 +f 3774//3775 3778//3778 3777//3777 +f 3775//3776 3779//3779 3774//3775 +f 3776//3774 3780//3780 3779//3779 +f 3777//3777 3781//3781 3784//3782 +f 3778//3778 3782//3783 3781//3781 +f 3779//3779 3783//3784 3782//3783 +f 3780//3780 3784//3782 3783//3784 +f 3785//3785 3789//3786 3792//3787 +f 3786//3788 3790//3789 3789//3786 +f 3787//3790 3791//3791 3790//3789 +f 3788//3792 3792//3787 3791//3791 +f 3789//3786 3793//3793 3796//3794 +f 3790//3789 3794//3795 3793//3793 +f 3791//3791 3795//3796 3794//3795 +f 3792//3787 3796//3794 3795//3796 +f 3793//3793 3797//3797 3800//3798 +f 3794//3795 3798//3799 3797//3797 +f 3795//3796 3799//3800 3798//3799 +f 3796//3794 3800//3798 3799//3800 +f 3801//3801 3805//3802 3808//3803 +f 3802//3804 3806//3805 3805//3802 +f 3803//3806 3807//3807 3806//3805 +f 3804//3808 3808//3803 3807//3807 +f 3809//3809 3813//3810 3812//3811 +f 3810//3812 3814//3813 3809//3809 +f 3811//3814 3815//3815 3810//3812 +f 3812//3811 3816//3816 3811//3814 +f 3813//3810 3817//3817 3816//3816 +f 3814//3813 3818//3818 3813//3810 +f 3815//3815 3819//3819 3814//3813 +f 3816//3816 3820//3820 3815//3815 +f 3817//3817 3821//3821 3820//3820 +f 3818//3818 3822//3822 3817//3817 +f 3819//3819 3823//3823 3818//3818 +f 3820//3820 3824//3824 3819//3819 +f 3821//3821 3825//3825 3824//3824 +f 3822//3822 3826//3826 3821//3821 +f 3823//3823 3827//3827 3822//3822 +f 3824//3824 3828//3828 3823//3823 +f 3825//3825 3829//3829 3832//3830 +f 3826//3826 3830//3831 3829//3829 +f 3827//3827 3831//3832 3830//3831 +f 3828//3828 3832//3830 3831//3832 +f 3829//3829 3833//3833 3832//3830 +f 3830//3831 3834//3834 3829//3829 +f 3831//3832 3835//3835 3830//3831 +f 3832//3830 3836//3836 3831//3832 +f 3833//3833 3837//3837 3840//3838 +f 3834//3834 3838//3839 3837//3837 +f 3835//3835 3839//3840 3838//3839 +f 3836//3836 3840//3838 3839//3840 +f 3841//3841 3845//3842 3844//3843 +f 3842//3844 3846//3845 3845//3842 +f 3843//3846 3847//3847 3842//3844 +f 3844//3843 3848//3848 3847//3847 +f 3845//3842 3849//3849 3852//3850 +f 3846//3845 3850//3851 3845//3842 +f 3847//3847 3851//3852 3850//3851 +f 3848//3848 3852//3850 3847//3847 +f 3849//3849 3853//3853 3856//3854 +f 3850//3851 3854//3855 3853//3853 +f 3851//3852 3855//3856 3854//3855 +f 3852//3850 3856//3854 3855//3856 +f 3853//3853 3857//3857 3860//3858 +f 3854//3855 3858//3859 3857//3857 +f 3855//3856 3859//3860 3858//3859 +f 3856//3854 3860//3858 3859//3860 +f 3861//3861 3865//3862 3864//3863 +f 3862//3864 3866//3865 3865//3862 +f 3863//3866 3867//3867 3862//3864 +f 3864//3863 3868//3868 3867//3867 +f 3865//3862 3869//3869 3872//3870 +f 3866//3865 3870//3871 3869//3869 +f 3867//3867 3871//3872 3870//3871 +f 3868//3868 3872//3870 3871//3872 +f 3873//3873 3877//3874 3880//3875 +f 3874//3876 3878//3877 3877//3874 +f 3875//3878 3879//3879 3878//3877 +f 3876//3880 3880//3875 3879//3879 +f 5//2 8//8 4//3 +f 1//1 2//4 5//2 +f 7//7 6//5 2//4 +f 3//6 4//3 7//7 +f 8//8 5//2 12//10 +f 5//2 6//5 9//9 +f 6//5 7//7 10//11 +f 7//7 8//8 11//12 +f 12//10 9//9 16//14 +f 14//15 13//13 9//9 +f 10//11 11//12 14//15 +f 16//14 15//16 11//12 +f 17//17 20//20 16//14 +f 18//18 17//17 13//13 +f 19//19 18//18 14//15 +f 20//20 19//19 15//16 +f 21//21 24//24 20//20 +f 17//17 18//18 21//21 +f 23//23 22//22 18//18 +f 19//19 20//20 23//23 +f 25//25 28//28 24//24 +f 26//26 25//25 21//21 +f 27//27 26//26 22//22 +f 28//28 27//27 23//23 +f 28//28 25//25 32//30 +f 25//25 26//26 29//29 +f 26//26 27//27 30//31 +f 27//27 28//28 31//32 +f 32//30 29//29 36//34 +f 29//29 30//31 33//33 +f 30//31 31//32 34//35 +f 31//32 32//30 35//36 +f 41//38 44//44 40//39 +f 37//37 38//40 41//38 +f 43//43 42//41 38//40 +f 39//42 40//39 43//43 +f 44//44 41//38 48//46 +f 46//47 45//45 41//38 +f 42//41 43//43 46//47 +f 48//46 47//48 43//43 +f 48//46 45//45 52//50 +f 45//45 46//47 49//49 +f 46//47 47//48 50//51 +f 47//48 48//46 51//52 +f 53//53 56//56 52//50 +f 54//54 53//53 49//49 +f 55//55 54//54 50//51 +f 56//56 55//55 51//52 +f 56//56 53//53 60//58 +f 53//53 54//54 57//57 +f 54//54 55//55 58//59 +f 55//55 56//56 59//60 +f 60//58 57//57 64//62 +f 62//63 61//61 57//57 +f 58//59 59//60 62//63 +f 64//62 63//64 59//60 +f 64//62 61//61 68//66 +f 61//61 62//63 65//65 +f 62//63 63//64 66//67 +f 63//64 64//62 67//68 +f 73//70 76//76 72//71 +f 74//73 73//70 69//69 +f 75//75 74//73 70//72 +f 76//76 75//75 71//74 +f 76//76 73//70 80//78 +f 73//70 74//73 77//77 +f 74//73 75//75 78//79 +f 75//75 76//76 79//80 +f 81//81 84//84 80//78 +f 82//82 81//81 77//77 +f 83//83 82//82 78//79 +f 84//84 83//83 79//80 +f 84//84 81//81 88//86 +f 81//81 82//82 85//85 +f 82//82 83//83 86//87 +f 83//83 84//84 87//88 +f 89//89 92//92 88//86 +f 85//85 86//87 89//89 +f 91//91 90//90 86//87 +f 87//88 88//86 91//91 +f 92//92 89//89 96//94 +f 94//95 93//93 89//89 +f 90//90 91//91 94//95 +f 96//94 95//96 91//91 +f 96//94 93//93 100//98 +f 93//93 94//95 97//97 +f 94//95 95//96 98//99 +f 95//96 96//94 99//100 +f 104//108 101//101 108//103 +f 101//101 102//104 105//102 +f 102//104 103//106 106//105 +f 103//106 104//108 107//107 +f 109//109 112//112 108//103 +f 110//110 109//109 105//102 +f 111//111 110//110 106//105 +f 112//112 111//111 107//107 +f 113//113 116//116 112//112 +f 114//114 113//113 109//109 +f 115//115 114//114 110//110 +f 116//116 115//115 111//111 +f 116//116 113//113 120//118 +f 113//113 114//114 117//117 +f 114//114 115//115 118//119 +f 115//115 116//116 119//120 +f 121//121 124//124 120//118 +f 117//117 118//119 121//121 +f 123//123 122//122 118//119 +f 119//120 120//118 123//123 +f 124//124 121//121 128//126 +f 121//121 122//122 125//125 +f 122//122 123//123 126//127 +f 123//123 124//124 127//128 +f 132//136 129//129 136//131 +f 129//129 130//132 133//130 +f 130//132 131//134 134//133 +f 131//134 132//136 135//135 +f 137//137 140//140 136//131 +f 138//138 137//137 133//130 +f 139//139 138//138 134//133 +f 140//140 139//139 135//135 +f 141//141 144//144 140//140 +f 137//137 138//138 141//141 +f 143//143 142//142 138//138 +f 139//139 140//140 143//143 +f 144//144 141//141 148//146 +f 146//147 145//145 141//141 +f 142//142 143//143 146//147 +f 148//146 147//148 143//143 +f 148//146 145//145 152//150 +f 145//145 146//147 149//149 +f 146//147 147//148 150//151 +f 147//148 148//146 151//152 +f 156//160 153//153 160//155 +f 158//157 157//154 153//153 +f 154//156 155//158 158//157 +f 160//155 159//159 155//158 +f 161//161 164//164 160//155 +f 157//154 158//157 161//161 +f 163//163 162//162 158//157 +f 159//159 160//155 163//163 +f 164//164 161//161 168//166 +f 161//161 162//162 165//165 +f 162//162 163//163 166//167 +f 163//163 164//164 167//168 +f 168//166 165//165 172//170 +f 170//171 169//169 165//165 +f 166//167 167//168 170//171 +f 172//170 171//172 167//168 +f 172//170 169//169 176//174 +f 169//169 170//171 173//173 +f 170//171 171//172 174//175 +f 171//172 172//170 175//176 +f 180//184 177//177 184//179 +f 177//177 178//180 181//178 +f 178//180 179//182 182//181 +f 179//182 180//184 183//183 +f 184//179 181//178 188//186 +f 181//178 182//181 185//185 +f 182//181 183//183 186//187 +f 183//183 184//179 187//188 +f 189//189 192//192 188//186 +f 190//190 189//189 185//185 +f 191//191 190//190 186//187 +f 192//192 191//191 187//188 +f 192//192 189//189 196//194 +f 189//189 190//190 193//193 +f 190//190 191//191 194//195 +f 191//191 192//192 195//196 +f 201//198 204//204 200//199 +f 197//197 198//200 201//198 +f 203//203 202//201 198//200 +f 199//202 200//199 203//203 +f 204//204 201//198 208//206 +f 206//207 205//205 201//198 +f 202//201 203//203 206//207 +f 208//206 207//208 203//203 +f 209//209 212//212 208//206 +f 210//210 209//209 205//205 +f 211//211 210//210 206//207 +f 212//212 211//211 207//208 +f 212//212 209//209 216//214 +f 209//209 210//210 213//213 +f 210//210 211//211 214//215 +f 211//211 212//212 215//216 +f 220//224 217//217 224//219 +f 222//221 221//218 217//217 +f 218//220 219//222 222//221 +f 224//219 223//223 219//222 +f 225//225 228//228 224//219 +f 221//218 222//221 225//225 +f 227//227 226//226 222//221 +f 223//223 224//219 227//227 +f 228//228 225//225 232//230 +f 225//225 226//226 229//229 +f 226//226 227//227 230//231 +f 227//227 228//228 231//232 +f 236//240 233//233 240//235 +f 238//237 237//234 233//233 +f 234//236 235//238 238//237 +f 240//235 239//239 235//238 +f 241//241 244//244 240//235 +f 237//234 238//237 241//241 +f 243//243 242//242 238//237 +f 239//239 240//235 243//243 +f 244//244 241//241 248//246 +f 241//241 242//242 245//245 +f 242//242 243//243 246//247 +f 243//243 244//244 247//248 +f 253//250 256//256 252//251 +f 254//253 253//250 249//249 +f 255//255 254//253 250//252 +f 256//256 255//255 251//254 +f 256//256 253//250 260//258 +f 258//259 257//257 253//250 +f 254//253 255//255 258//259 +f 260//258 259//260 255//255 +f 260//258 257//257 264//262 +f 257//257 258//259 261//261 +f 258//259 259//260 262//263 +f 259//260 260//258 263//264 +f 269//266 272//272 268//267 +f 270//269 269//266 265//265 +f 271//271 270//269 266//268 +f 272//272 271//271 267//270 +f 272//272 269//266 276//274 +f 269//266 270//269 273//273 +f 270//269 271//271 274//275 +f 271//271 272//272 275//276 +f 280//284 277//277 284//279 +f 277//277 278//280 281//278 +f 278//280 279//282 282//281 +f 279//282 280//284 283//283 +f 284//279 281//278 288//286 +f 281//278 282//281 285//285 +f 282//281 283//283 286//287 +f 283//283 284//279 287//288 +f 293//290 296//296 292//291 +f 294//293 293//290 289//289 +f 295//295 294//293 290//292 +f 296//296 295//295 291//294 +f 296//296 293//290 300//298 +f 293//290 294//293 297//297 +f 294//293 295//295 298//299 +f 295//295 296//296 299//300 +f 304//308 301//301 308//303 +f 301//301 302//304 305//302 +f 302//304 303//306 306//305 +f 303//306 304//308 307//307 +f 308//303 305//302 312//310 +f 305//302 306//305 309//309 +f 306//305 307//307 310//311 +f 307//307 308//303 311//312 +f 317//314 320//320 316//315 +f 318//317 317//314 313//313 +f 319//319 318//317 314//316 +f 320//320 319//319 315//318 +f 320//320 317//314 324//322 +f 317//314 318//317 321//321 +f 318//317 319//319 322//323 +f 319//319 320//320 323//324 +f 328//332 325//325 332//327 +f 325//325 326//328 329//326 +f 326//328 327//330 330//329 +f 327//330 328//332 331//331 +f 336//340 333//333 340//335 +f 333//333 334//336 337//334 +f 334//336 335//338 338//337 +f 335//338 336//340 339//339 +f 344//348 341//341 348//343 +f 341//341 342//344 345//342 +f 342//344 343//346 346//345 +f 343//346 344//348 347//347 +f 352//356 349//349 356//351 +f 349//349 350//352 353//350 +f 350//352 351//354 354//353 +f 351//354 352//356 355//355 +f 360//364 357//357 364//359 +f 357//357 358//360 361//358 +f 358//360 359//362 362//361 +f 359//362 360//364 363//363 +f 368//372 365//365 372//367 +f 365//365 366//368 369//366 +f 366//368 367//370 370//369 +f 367//370 368//372 371//371 +f 376//380 373//373 380//375 +f 373//373 374//376 377//374 +f 374//376 375//378 378//377 +f 375//378 376//380 379//379 +f 380//375 377//374 384//382 +f 377//374 378//377 381//381 +f 378//377 379//379 382//383 +f 379//379 380//375 383//384 +f 384//382 381//381 388//386 +f 386//387 385//385 381//381 +f 382//383 383//384 386//387 +f 388//386 387//388 383//384 +f 389//389 392//392 388//386 +f 390//390 389//389 385//385 +f 391//391 390//390 386//387 +f 392//392 391//391 387//388 +f 392//392 389//389 396//394 +f 394//395 393//393 389//389 +f 390//390 391//391 394//395 +f 396//394 395//396 391//391 +f 397//397 400//400 396//394 +f 393//393 394//395 397//397 +f 399//399 398//398 394//395 +f 395//396 396//394 399//399 +f 400//400 397//397 404//402 +f 397//397 398//398 401//401 +f 398//398 399//399 402//403 +f 399//399 400//400 403//404 +f 405//405 408//408 404//402 +f 406//406 405//405 401//401 +f 407//407 406//406 402//403 +f 408//408 407//407 403//404 +f 408//408 405//405 412//410 +f 405//405 406//406 409//409 +f 406//406 407//407 410//411 +f 407//407 408//408 411//412 +f 412//410 409//409 416//414 +f 409//409 410//411 413//413 +f 410//411 411//412 414//415 +f 411//412 412//410 415//416 +f 421//418 424//424 420//419 +f 422//421 421//418 417//417 +f 423//423 422//421 418//420 +f 424//424 423//423 419//422 +f 424//424 421//418 428//426 +f 421//418 422//421 425//425 +f 422//421 423//423 426//427 +f 423//423 424//424 427//428 +f 429//429 432//432 428//426 +f 430//430 429//429 425//425 +f 431//431 430//430 426//427 +f 432//432 431//431 427//428 +f 432//432 429//429 436//434 +f 434//435 433//433 429//429 +f 430//430 431//431 434//435 +f 436//434 435//436 431//431 +f 437//437 440//440 436//434 +f 433//433 434//435 437//437 +f 439//439 438//438 434//435 +f 435//436 436//434 439//439 +f 440//440 437//437 444//442 +f 437//437 438//438 441//441 +f 438//438 439//439 442//443 +f 439//439 440//440 443//444 +f 445//445 448//448 444//442 +f 441//441 442//443 445//445 +f 447//447 446//446 442//443 +f 443//444 444//442 447//447 +f 448//448 445//445 452//450 +f 450//451 449//449 445//445 +f 446//446 447//447 450//451 +f 452//450 451//452 447//447 +f 452//450 449//449 456//454 +f 449//449 450//451 453//453 +f 450//451 451//452 454//455 +f 451//452 452//450 455//456 +f 456//454 453//453 460//458 +f 453//453 454//455 457//457 +f 454//455 455//456 458//459 +f 455//456 456//454 459//460 +f 465//462 468//468 464//463 +f 461//461 462//464 465//462 +f 467//467 466//465 462//464 +f 463//466 464//463 467//467 +f 469//469 472//472 468//468 +f 465//462 466//465 469//469 +f 471//471 470//470 466//465 +f 467//467 468//468 471//471 +f 473//473 476//476 472//472 +f 474//474 473//473 469//469 +f 475//475 474//474 470//470 +f 476//476 475//475 471//471 +f 476//476 473//473 480//478 +f 478//479 477//477 473//473 +f 474//474 475//475 478//479 +f 480//478 479//480 475//475 +f 480//478 477//477 484//482 +f 477//477 478//479 481//481 +f 478//479 479//480 482//483 +f 479//480 480//478 483//484 +f 484//482 481//481 488//486 +f 486//487 485//485 481//481 +f 482//483 483//484 486//487 +f 488//486 487//488 483//484 +f 489//489 492//492 488//486 +f 485//485 486//487 489//489 +f 491//491 490//490 486//487 +f 487//488 488//486 491//491 +f 493//493 496//496 492//492 +f 494//494 493//493 489//489 +f 495//495 494//494 490//490 +f 496//496 495//495 491//491 +f 496//496 493//493 500//498 +f 493//493 494//494 497//497 +f 494//494 495//495 498//499 +f 495//495 496//496 499//500 +f 500//498 497//497 504//502 +f 497//497 498//499 501//501 +f 498//499 499//500 502//503 +f 499//500 500//498 503//504 +f 509//506 512//512 508//507 +f 505//505 506//508 509//506 +f 511//511 510//509 506//508 +f 507//510 508//507 511//511 +f 512//512 509//506 516//514 +f 509//506 510//509 513//513 +f 510//509 511//511 514//515 +f 511//511 512//512 515//516 +f 516//514 513//513 520//518 +f 513//513 514//515 517//517 +f 514//515 515//516 518//519 +f 515//516 516//514 519//520 +f 521//521 524//524 520//518 +f 517//517 518//519 521//521 +f 523//523 522//522 518//519 +f 524//524 523//523 519//520 +f 524//524 521//521 528//526 +f 526//527 525//525 521//521 +f 522//522 523//523 526//527 +f 528//526 527//528 523//523 +f 528//526 525//525 532//530 +f 525//525 526//527 529//529 +f 526//527 527//528 530//531 +f 527//528 528//526 531//532 +f 532//530 529//529 536//534 +f 529//529 530//531 533//533 +f 530//531 531//532 534//535 +f 531//532 532//530 535//536 +f 537//537 540//540 536//534 +f 538//538 537//537 533//533 +f 539//539 538//538 534//535 +f 540//540 539//539 535//536 +f 541//541 544//544 540//540 +f 542//542 541//541 537//537 +f 543//543 542//542 538//538 +f 544//544 543//543 539//539 +f 544//544 541//541 548//546 +f 541//541 542//542 545//545 +f 542//542 543//543 546//547 +f 543//543 544//544 547//548 +f 552//556 549//549 556//551 +f 549//549 550//552 553//550 +f 550//552 551//554 554//553 +f 551//554 552//556 555//555 +f 557//557 560//560 556//551 +f 558//558 557//557 553//550 +f 559//559 558//558 554//553 +f 560//560 559//559 555//555 +f 560//560 557//557 564//562 +f 562//563 561//561 557//557 +f 558//558 559//559 562//563 +f 564//562 563//564 559//559 +f 565//565 568//568 564//562 +f 561//561 562//563 565//565 +f 567//567 566//566 562//563 +f 563//564 564//562 567//567 +f 569//569 572//572 568//568 +f 570//570 569//569 565//565 +f 571//571 570//570 566//566 +f 572//572 571//571 567//567 +f 573//573 576//576 572//572 +f 569//569 570//570 573//573 +f 575//575 574//574 570//570 +f 571//571 572//572 575//575 +f 576//576 573//573 580//578 +f 578//579 577//577 573//573 +f 574//574 575//575 578//579 +f 580//578 579//580 575//575 +f 581//581 584//584 580//578 +f 582//582 581//581 577//577 +f 583//583 582//582 578//579 +f 584//584 583//583 579//580 +f 585//585 588//588 584//584 +f 586//586 585//585 581//581 +f 587//587 586//586 582//582 +f 588//588 587//587 583//583 +f 588//588 585//585 592//590 +f 585//585 586//586 589//589 +f 586//586 587//587 590//591 +f 587//587 588//588 591//592 +f 597//594 600//600 596//595 +f 593//593 594//596 597//594 +f 599//599 598//597 594//596 +f 595//598 596//595 599//599 +f 600//600 597//594 604//602 +f 602//603 601//601 597//594 +f 598//597 599//599 602//603 +f 604//602 603//604 599//599 +f 605//605 608//608 604//602 +f 601//601 602//603 605//605 +f 607//607 606//606 602//603 +f 603//604 604//602 607//607 +f 609//609 612//612 608//608 +f 610//610 609//609 605//605 +f 611//611 610//610 606//606 +f 612//612 611//611 607//607 +f 612//612 609//609 616//614 +f 609//609 610//610 613//613 +f 610//610 611//611 614//615 +f 611//611 612//612 615//616 +f 616//614 613//613 620//618 +f 618//619 617//617 613//613 +f 614//615 615//616 618//619 +f 620//618 619//620 615//616 +f 620//618 617//617 624//622 +f 617//617 618//619 621//621 +f 618//619 619//620 622//623 +f 619//620 620//618 623//624 +f 625//625 628//628 624//622 +f 626//626 625//625 621//621 +f 627//627 626//626 622//623 +f 628//628 627//627 623//624 +f 628//628 625//625 632//630 +f 630//631 629//629 625//625 +f 626//626 627//627 630//631 +f 632//630 631//632 627//627 +f 632//630 629//629 636//634 +f 629//629 630//631 633//633 +f 630//631 631//632 634//635 +f 631//632 632//630 635//636 +f 641//638 644//644 640//639 +f 637//637 638//640 641//638 +f 643//643 642//641 638//640 +f 639//642 640//639 643//643 +f 644//644 641//638 648//646 +f 646//647 645//645 641//638 +f 642//641 643//643 646//647 +f 648//646 647//648 643//643 +f 649//649 652//652 648//646 +f 650//650 649//649 645//645 +f 651//651 650//650 646//647 +f 652//652 651//651 647//648 +f 652//652 649//649 656//654 +f 649//649 650//650 653//653 +f 650//650 651//651 654//655 +f 651//651 652//652 655//656 +f 656//654 653//653 660//658 +f 653//653 654//655 657//657 +f 654//655 655//656 658//659 +f 655//656 656//654 659//660 +f 660//658 657//657 664//662 +f 662//663 661//661 657//657 +f 658//659 659//660 662//663 +f 659//660 660//658 663//664 +f 665//665 668//668 664//662 +f 666//666 665//665 661//661 +f 667//667 666//666 662//663 +f 668//668 667//667 663//664 +f 669//669 672//672 668//668 +f 665//665 666//666 669//669 +f 671//671 670//670 666//666 +f 667//667 668//668 671//671 +f 672//672 669//669 676//674 +f 669//669 670//670 673//673 +f 670//670 671//671 674//675 +f 671//671 672//672 675//676 +f 676//674 673//673 680//678 +f 673//673 674//675 677//677 +f 674//675 675//676 678//679 +f 675//676 676//674 679//680 +f 685//682 688//688 684//683 +f 686//685 685//682 681//681 +f 687//687 686//685 682//684 +f 688//688 687//687 683//686 +f 688//688 685//682 692//690 +f 685//682 686//685 689//689 +f 686//685 687//687 690//691 +f 687//687 688//688 691//692 +f 692//690 689//689 696//694 +f 689//689 690//691 693//693 +f 690//691 691//692 694//695 +f 691//692 692//690 695//696 +f 696//694 693//693 700//698 +f 698//699 697//697 693//693 +f 694//695 695//696 698//699 +f 700//698 699//700 695//696 +f 701//701 704//704 700//698 +f 697//697 698//699 701//701 +f 703//703 702//702 698//699 +f 699//700 700//698 703//703 +f 705//705 708//708 704//704 +f 706//706 705//705 701//701 +f 707//707 706//706 702//702 +f 708//708 707//707 703//703 +f 708//708 705//705 712//710 +f 705//705 706//706 709//709 +f 706//706 707//707 710//711 +f 707//707 708//708 711//712 +f 713//713 716//716 712//710 +f 709//709 710//711 713//713 +f 715//715 714//714 710//711 +f 711//712 712//710 715//715 +f 716//716 713//713 720//718 +f 718//719 717//717 713//713 +f 714//714 715//715 718//719 +f 720//718 719//720 715//715 +f 720//718 717//717 724//722 +f 717//717 718//719 721//721 +f 718//719 719//720 722//723 +f 719//720 720//718 723//724 +f 728//732 725//725 732//727 +f 725//725 726//728 729//726 +f 726//728 727//730 730//729 +f 727//730 728//732 731//731 +f 732//727 729//726 736//734 +f 729//726 730//729 733//733 +f 730//729 731//731 734//735 +f 731//731 732//727 735//736 +f 737//737 740//740 736//734 +f 733//733 734//735 737//737 +f 739//739 738//738 734//735 +f 735//736 736//734 739//739 +f 740//740 737//737 744//742 +f 742//743 741//741 737//737 +f 738//738 739//739 742//743 +f 744//742 743//744 739//739 +f 744//742 741//741 748//746 +f 746//747 745//745 741//741 +f 747//748 746//747 742//743 +f 748//746 747//748 743//744 +f 749//749 752//752 748//746 +f 745//745 746//747 749//749 +f 751//751 750//750 746//747 +f 747//748 748//746 751//751 +f 753//753 756//756 752//752 +f 749//749 750//750 753//753 +f 755//755 754//754 750//750 +f 751//751 752//752 755//755 +f 756//756 753//753 760//758 +f 758//759 757//757 753//753 +f 754//754 755//755 758//759 +f 760//758 759//760 755//755 +f 761//761 764//764 760//758 +f 757//757 758//759 761//761 +f 763//763 762//762 758//759 +f 759//760 760//758 763//763 +f 764//764 761//761 768//766 +f 761//761 762//762 765//765 +f 762//762 763//763 766//767 +f 763//763 764//764 767//768 +f 773//770 776//776 772//771 +f 769//769 770//772 773//770 +f 775//775 774//773 770//772 +f 771//774 772//771 775//775 +f 776//776 773//770 780//778 +f 778//779 777//777 773//770 +f 774//773 775//775 778//779 +f 780//778 779//780 775//775 +f 781//781 784//784 780//778 +f 777//777 778//779 781//781 +f 783//783 782//782 778//779 +f 779//780 780//778 783//783 +f 785//785 788//788 784//784 +f 786//786 785//785 781//781 +f 787//787 786//786 782//782 +f 788//788 787//787 783//783 +f 788//788 785//785 792//790 +f 785//785 786//786 789//789 +f 786//786 787//787 790//791 +f 787//787 788//788 791//792 +f 792//790 789//789 796//794 +f 794//795 793//793 789//789 +f 790//791 791//792 794//795 +f 796//794 795//796 791//792 +f 797//797 800//800 796//794 +f 798//798 797//797 793//793 +f 799//799 798//798 794//795 +f 800//800 799//799 795//796 +f 800//800 797//797 804//802 +f 797//797 798//798 801//801 +f 798//798 799//799 802//803 +f 799//799 800//800 803//804 +f 805//805 808//808 804//802 +f 806//806 805//805 801//801 +f 807//807 806//806 802//803 +f 808//808 807//807 803//804 +f 808//808 805//805 812//810 +f 805//805 806//806 809//809 +f 806//806 807//807 810//811 +f 807//807 808//808 811//812 +f 817//814 820//820 816//815 +f 818//817 817//814 813//813 +f 819//819 818//817 814//816 +f 815//818 816//815 819//819 +f 820//820 817//814 824//822 +f 817//814 818//817 821//821 +f 818//817 819//819 822//823 +f 819//819 820//820 823//824 +f 825//825 828//828 824//822 +f 821//821 822//823 825//825 +f 827//827 826//826 822//823 +f 823//824 824//822 827//827 +f 828//828 825//825 832//830 +f 830//831 829//829 825//825 +f 826//826 827//827 830//831 +f 832//830 831//832 827//827 +f 832//830 829//829 836//834 +f 829//829 830//831 833//833 +f 830//831 831//832 834//835 +f 831//832 832//830 835//836 +f 836//834 833//833 840//838 +f 838//839 837//837 833//833 +f 834//835 835//836 838//839 +f 840//838 839//840 835//836 +f 841//841 844//844 840//838 +f 837//837 838//839 841//841 +f 843//843 842//842 838//839 +f 839//840 840//838 843//843 +f 845//845 848//848 844//844 +f 841//841 842//842 845//845 +f 847//847 846//846 842//842 +f 843//843 844//844 847//847 +f 848//848 845//845 852//850 +f 850//851 849//849 845//845 +f 846//846 847//847 850//851 +f 852//850 851//852 847//847 +f 852//850 849//849 856//854 +f 849//849 850//851 853//853 +f 850//851 851//852 854//855 +f 851//852 852//850 855//856 +f 860//864 857//857 864//859 +f 862//861 861//858 857//857 +f 858//860 859//862 862//861 +f 864//859 863//863 859//862 +f 865//865 868//868 864//859 +f 861//858 862//861 865//865 +f 867//867 866//866 862//861 +f 863//863 864//859 867//867 +f 869//869 872//872 868//868 +f 865//865 866//866 869//869 +f 871//871 870//870 866//866 +f 867//867 868//868 871//871 +f 873//873 876//876 872//872 +f 869//869 870//870 873//873 +f 875//875 874//874 870//870 +f 871//871 872//872 875//875 +f 877//877 880//880 876//876 +f 873//873 874//874 877//877 +f 879//879 878//878 874//874 +f 875//875 876//876 879//879 +f 880//880 877//877 884//882 +f 877//877 878//878 881//881 +f 878//878 879//879 882//883 +f 879//879 880//880 883//884 +f 884//882 881//881 888//886 +f 886//887 885//885 881//881 +f 882//883 883//884 886//887 +f 888//886 887//888 883//884 +f 889//889 892//892 888//886 +f 885//885 886//887 889//889 +f 891//891 890//890 886//887 +f 887//888 888//886 891//891 +f 892//892 889//889 896//894 +f 889//889 890//890 893//893 +f 890//890 891//891 894//895 +f 891//891 892//892 895//896 +f 896//894 893//893 900//898 +f 893//893 894//895 897//897 +f 894//895 895//896 898//899 +f 895//896 896//894 899//900 +f 904//908 901//901 908//903 +f 901//901 902//904 905//902 +f 902//904 903//906 906//905 +f 903//906 904//908 907//907 +f 908//903 905//902 912//910 +f 905//902 906//905 909//909 +f 906//905 907//907 910//911 +f 907//907 908//903 911//912 +f 913//913 916//916 912//910 +f 914//914 913//913 909//909 +f 915//915 914//914 910//911 +f 916//916 915//915 911//912 +f 916//916 913//913 920//918 +f 918//919 917//917 913//913 +f 914//914 915//915 918//919 +f 920//918 919//920 915//915 +f 921//921 924//924 920//918 +f 922//922 921//921 917//917 +f 923//923 922//922 918//919 +f 924//924 923//923 919//920 +f 924//924 921//921 928//926 +f 926//927 925//925 921//921 +f 922//922 923//923 926//927 +f 928//926 927//928 923//923 +f 929//929 932//932 928//926 +f 925//925 926//927 929//929 +f 931//931 930//930 926//927 +f 927//928 928//926 931//931 +f 933//933 936//936 932//932 +f 929//929 930//930 933//933 +f 935//935 934//934 930//930 +f 931//931 932//932 935//935 +f 936//936 933//933 940//938 +f 933//933 934//934 937//937 +f 934//934 935//935 938//939 +f 935//935 936//936 939//940 +f 940//938 937//937 944//942 +f 937//937 938//939 941//941 +f 938//939 939//940 942//943 +f 939//940 940//938 943//944 +f 949//946 952//952 948//947 +f 945//945 946//948 949//946 +f 951//951 950//949 946//948 +f 947//950 948//947 951//951 +f 952//952 949//946 956//954 +f 949//946 950//949 953//953 +f 950//949 951//951 954//955 +f 951//951 952//952 955//956 +f 957//957 960//960 956//954 +f 958//958 957//957 953//953 +f 959//959 958//958 954//955 +f 960//960 959//959 955//956 +f 960//960 957//957 964//962 +f 962//963 961//961 957//957 +f 958//958 959//959 962//963 +f 964//962 963//964 959//959 +f 964//962 961//961 968//966 +f 966//967 965//965 961//961 +f 962//963 963//964 966//967 +f 968//966 967//968 963//964 +f 969//969 972//972 968//966 +f 970//970 969//969 965//965 +f 971//971 970//970 966//967 +f 972//972 971//971 967//968 +f 972//972 969//969 976//974 +f 969//969 970//970 973//973 +f 970//970 971//971 974//975 +f 971//971 972//972 975//976 +f 976//974 973//973 980//978 +f 978//979 977//977 973//973 +f 974//975 975//976 978//979 +f 980//978 979//980 975//976 +f 981//981 984//984 980//978 +f 977//977 978//979 981//981 +f 983//983 982//982 978//979 +f 979//980 980//978 983//983 +f 984//984 981//981 988//986 +f 981//981 982//982 985//985 +f 982//982 983//983 986//987 +f 983//983 984//984 987//988 +f 993//990 996//996 992//991 +f 994//993 993//990 989//989 +f 995//995 994//993 990//992 +f 996//996 995//995 991//994 +f 997//997 1000//1000 996//996 +f 998//998 997//997 993//990 +f 999//999 998//998 994//993 +f 1000//1000 999//999 995//995 +f 1000//1000 997//997 1004//1002 +f 1002//1003 1001//1001 997//997 +f 998//998 999//999 1002//1003 +f 1004//1002 1003//1004 999//999 +f 1005//1005 1008//1008 1004//1002 +f 1001//1001 1002//1003 1005//1005 +f 1007//1007 1006//1006 1002//1003 +f 1003//1004 1004//1002 1007//1007 +f 1008//1008 1005//1005 1012//1010 +f 1005//1005 1006//1006 1009//1009 +f 1006//1006 1007//1007 1010//1011 +f 1007//1007 1008//1008 1011//1012 +f 1012//1010 1009//1009 1016//1014 +f 1009//1009 1010//1011 1013//1013 +f 1010//1011 1011//1012 1014//1015 +f 1011//1012 1012//1010 1015//1016 +f 1017//1017 1020//1020 1016//1014 +f 1013//1013 1014//1015 1017//1017 +f 1019//1019 1018//1018 1014//1015 +f 1015//1016 1016//1014 1019//1019 +f 1020//1020 1017//1017 1024//1022 +f 1017//1017 1018//1018 1021//1021 +f 1018//1018 1019//1019 1022//1023 +f 1019//1019 1020//1020 1023//1024 +f 1024//1022 1021//1021 1028//1026 +f 1021//1021 1022//1023 1025//1025 +f 1022//1023 1023//1024 1026//1027 +f 1023//1024 1024//1022 1027//1028 +f 1028//1026 1025//1025 1032//1030 +f 1025//1025 1026//1027 1029//1029 +f 1026//1027 1027//1028 1030//1031 +f 1027//1028 1028//1026 1031//1032 +f 1036//1040 1033//1033 1040//1035 +f 1038//1037 1037//1034 1033//1033 +f 1034//1036 1035//1038 1038//1037 +f 1040//1035 1039//1039 1035//1038 +f 1040//1035 1037//1034 1044//1042 +f 1042//1043 1041//1041 1037//1034 +f 1038//1037 1039//1039 1042//1043 +f 1044//1042 1043//1044 1039//1039 +f 1045//1045 1048//1048 1044//1042 +f 1041//1041 1042//1043 1045//1045 +f 1047//1047 1046//1046 1042//1043 +f 1043//1044 1044//1042 1047//1047 +f 1048//1048 1045//1045 1052//1050 +f 1045//1045 1046//1046 1049//1049 +f 1046//1046 1047//1047 1050//1051 +f 1047//1047 1048//1048 1051//1052 +f 1053//1053 1056//1056 1052//1050 +f 1049//1049 1050//1051 1053//1053 +f 1055//1055 1054//1054 1050//1051 +f 1051//1052 1052//1050 1055//1055 +f 1057//1057 1060//1060 1056//1056 +f 1053//1053 1054//1054 1057//1057 +f 1059//1059 1058//1058 1054//1054 +f 1055//1055 1056//1056 1059//1059 +f 1060//1060 1057//1057 1064//1062 +f 1062//1063 1061//1061 1057//1057 +f 1058//1058 1059//1059 1062//1063 +f 1064//1062 1063//1064 1059//1059 +f 1065//1065 1068//1068 1064//1062 +f 1066//1066 1065//1065 1061//1061 +f 1067//1067 1066//1066 1062//1063 +f 1068//1068 1067//1067 1063//1064 +f 1068//1068 1065//1065 1072//1070 +f 1065//1065 1066//1066 1069//1069 +f 1066//1066 1067//1067 1070//1071 +f 1067//1067 1068//1068 1071//1072 +f 1072//1070 1069//1069 1076//1074 +f 1069//1069 1070//1071 1073//1073 +f 1070//1071 1071//1072 1074//1075 +f 1071//1072 1072//1070 1075//1076 +f 1081//1078 1084//1084 1080//1079 +f 1082//1081 1081//1078 1077//1077 +f 1083//1083 1082//1081 1078//1080 +f 1084//1084 1083//1083 1079//1082 +f 1084//1084 1081//1078 1088//1086 +f 1081//1078 1082//1081 1085//1085 +f 1082//1081 1083//1083 1086//1087 +f 1083//1083 1084//1084 1087//1088 +f 1089//1089 1092//1092 1088//1086 +f 1085//1085 1086//1087 1089//1089 +f 1091//1091 1090//1090 1086//1087 +f 1087//1088 1088//1086 1091//1091 +f 1092//1092 1089//1089 1096//1094 +f 1094//1095 1093//1093 1089//1089 +f 1090//1090 1091//1091 1094//1095 +f 1096//1094 1095//1096 1091//1091 +f 1097//1097 1100//1100 1096//1094 +f 1093//1093 1094//1095 1097//1097 +f 1099//1099 1098//1098 1094//1095 +f 1095//1096 1096//1094 1099//1099 +f 1101//1101 1104//1104 1100//1100 +f 1102//1102 1101//1101 1097//1097 +f 1103//1103 1102//1102 1098//1098 +f 1104//1104 1103//1103 1099//1099 +f 1104//1104 1101//1101 1108//1106 +f 1106//1107 1105//1105 1101//1101 +f 1102//1102 1103//1103 1106//1107 +f 1108//1106 1107//1108 1103//1103 +f 1109//1109 1112//1112 1108//1106 +f 1110//1110 1109//1109 1105//1105 +f 1111//1111 1110//1110 1106//1107 +f 1112//1112 1111//1111 1107//1108 +f 1113//1113 1116//1116 1112//1112 +f 1109//1109 1110//1110 1113//1113 +f 1115//1115 1114//1114 1110//1110 +f 1111//1111 1112//1112 1115//1115 +f 1116//1116 1113//1113 1120//1118 +f 1113//1113 1114//1114 1117//1117 +f 1114//1114 1115//1115 1118//1119 +f 1115//1115 1116//1116 1119//1120 +f 1124//1128 1121//1121 1128//1123 +f 1121//1121 1122//1124 1125//1122 +f 1122//1124 1123//1126 1126//1125 +f 1123//1126 1124//1128 1127//1127 +f 1128//1123 1125//1122 1132//1130 +f 1125//1122 1126//1125 1129//1129 +f 1126//1125 1127//1127 1130//1131 +f 1127//1127 1128//1123 1131//1132 +f 1133//1133 1136//1136 1132//1130 +f 1134//1134 1133//1133 1129//1129 +f 1135//1135 1134//1134 1130//1131 +f 1136//1136 1135//1135 1131//1132 +f 1137//1137 1140//1140 1136//1136 +f 1133//1133 1134//1134 1137//1137 +f 1139//1139 1138//1138 1134//1134 +f 1135//1135 1136//1136 1139//1139 +f 1140//1140 1137//1137 1144//1142 +f 1142//1143 1141//1141 1137//1137 +f 1138//1138 1139//1139 1142//1143 +f 1144//1142 1143//1144 1139//1139 +f 1145//1145 1148//1148 1144//1142 +f 1141//1141 1142//1143 1145//1145 +f 1147//1147 1146//1146 1142//1143 +f 1143//1144 1144//1142 1147//1147 +f 1149//1149 1152//1152 1148//1148 +f 1145//1145 1146//1146 1149//1149 +f 1151//1151 1150//1150 1146//1146 +f 1147//1147 1148//1148 1151//1151 +f 1153//1153 1156//1156 1152//1152 +f 1149//1149 1150//1150 1153//1153 +f 1155//1155 1154//1154 1150//1150 +f 1151//1151 1152//1152 1155//1155 +f 1156//1156 1153//1153 1160//1158 +f 1158//1159 1157//1157 1153//1153 +f 1154//1154 1155//1155 1158//1159 +f 1160//1158 1159//1160 1155//1155 +f 1160//1158 1157//1157 1164//1162 +f 1157//1157 1158//1159 1161//1161 +f 1158//1159 1159//1160 1162//1163 +f 1159//1160 1160//1158 1163//1164 +f 1168//1172 1165//1165 1172//1167 +f 1170//1169 1169//1166 1165//1165 +f 1166//1168 1167//1170 1170//1169 +f 1172//1167 1171//1171 1167//1170 +f 1173//1173 1176//1176 1172//1167 +f 1169//1166 1170//1169 1173//1173 +f 1175//1175 1174//1174 1170//1169 +f 1171//1171 1172//1167 1175//1175 +f 1177//1177 1180//1180 1176//1176 +f 1178//1178 1177//1177 1173//1173 +f 1179//1179 1178//1178 1174//1174 +f 1180//1180 1179//1179 1175//1175 +f 1181//1181 1184//1184 1180//1180 +f 1177//1177 1178//1178 1181//1181 +f 1183//1183 1182//1182 1178//1178 +f 1179//1179 1180//1180 1183//1183 +f 1184//1184 1181//1181 1188//1186 +f 1181//1181 1182//1182 1185//1185 +f 1182//1182 1183//1183 1186//1187 +f 1183//1183 1184//1184 1187//1188 +f 1189//1189 1192//1192 1188//1186 +f 1185//1185 1186//1187 1189//1189 +f 1191//1191 1190//1190 1186//1187 +f 1187//1188 1188//1186 1191//1191 +f 1193//1193 1196//1196 1192//1192 +f 1189//1189 1190//1190 1193//1193 +f 1195//1195 1194//1194 1190//1190 +f 1191//1191 1192//1192 1195//1195 +f 1196//1196 1193//1193 1200//1198 +f 1193//1193 1194//1194 1197//1197 +f 1194//1194 1195//1195 1198//1199 +f 1195//1195 1196//1196 1199//1200 +f 1201//1201 1204//1204 1200//1198 +f 1202//1202 1201//1201 1197//1197 +f 1203//1203 1202//1202 1198//1199 +f 1204//1204 1203//1203 1199//1200 +f 1204//1204 1201//1201 1208//1206 +f 1201//1201 1202//1202 1205//1205 +f 1202//1202 1203//1203 1206//1207 +f 1203//1203 1204//1204 1207//1208 +f 1212//1216 1209//1209 1216//1211 +f 1214//1213 1213//1210 1209//1209 +f 1210//1212 1211//1214 1214//1213 +f 1216//1211 1215//1215 1211//1214 +f 1217//1217 1220//1220 1216//1211 +f 1213//1210 1214//1213 1217//1217 +f 1219//1219 1218//1218 1214//1213 +f 1215//1215 1216//1211 1219//1219 +f 1220//1220 1217//1217 1224//1222 +f 1222//1223 1221//1221 1217//1217 +f 1218//1218 1219//1219 1222//1223 +f 1224//1222 1223//1224 1219//1219 +f 1224//1222 1221//1221 1228//1226 +f 1221//1221 1222//1223 1225//1225 +f 1222//1223 1223//1224 1226//1227 +f 1223//1224 1224//1222 1227//1228 +f 1229//1229 1232//1232 1228//1226 +f 1230//1230 1229//1229 1225//1225 +f 1231//1231 1230//1230 1226//1227 +f 1232//1232 1231//1231 1227//1228 +f 1233//1233 1236//1236 1232//1232 +f 1229//1229 1230//1230 1233//1233 +f 1235//1235 1234//1234 1230//1230 +f 1231//1231 1232//1232 1235//1235 +f 1236//1236 1233//1233 1240//1238 +f 1238//1239 1237//1237 1233//1233 +f 1234//1234 1235//1235 1238//1239 +f 1240//1238 1239//1240 1235//1235 +f 1240//1238 1237//1237 1244//1242 +f 1237//1237 1238//1239 1241//1241 +f 1238//1239 1239//1240 1242//1243 +f 1239//1240 1240//1238 1243//1244 +f 1245//1245 1248//1248 1244//1242 +f 1246//1246 1245//1245 1241//1241 +f 1247//1247 1246//1246 1242//1243 +f 1248//1248 1247//1247 1243//1244 +f 1248//1248 1245//1245 1252//1250 +f 1245//1245 1246//1246 1249//1249 +f 1246//1246 1247//1247 1250//1251 +f 1247//1247 1248//1248 1251//1252 +f 1256//1260 1253//1253 1260//1255 +f 1253//1253 1254//1256 1257//1254 +f 1254//1256 1255//1258 1258//1257 +f 1255//1258 1256//1260 1259//1259 +f 1261//1261 1264//1264 1260//1255 +f 1262//1262 1261//1261 1257//1254 +f 1263//1263 1262//1262 1258//1257 +f 1264//1264 1263//1263 1259//1259 +f 1264//1264 1261//1261 1268//1266 +f 1266//1267 1265//1265 1261//1261 +f 1262//1262 1263//1263 1266//1267 +f 1268//1266 1267//1268 1263//1263 +f 1268//1266 1265//1265 1272//1270 +f 1265//1265 1266//1267 1269//1269 +f 1266//1267 1267//1268 1270//1271 +f 1267//1268 1268//1266 1271//1272 +f 1273//1273 1276//1276 1272//1270 +f 1274//1274 1273//1273 1269//1269 +f 1275//1275 1274//1274 1270//1271 +f 1276//1276 1275//1275 1271//1272 +f 1276//1276 1273//1273 1280//1278 +f 1273//1273 1274//1274 1277//1277 +f 1274//1274 1275//1275 1278//1279 +f 1275//1275 1276//1276 1279//1280 +f 1281//1281 1284//1284 1280//1278 +f 1282//1282 1281//1281 1277//1277 +f 1283//1283 1282//1282 1278//1279 +f 1284//1284 1283//1283 1279//1280 +f 1284//1284 1281//1281 1288//1286 +f 1281//1281 1282//1282 1285//1285 +f 1282//1282 1283//1283 1286//1287 +f 1283//1283 1284//1284 1287//1288 +f 1288//1286 1285//1285 1292//1290 +f 1290//1291 1289//1289 1285//1285 +f 1286//1287 1287//1288 1290//1291 +f 1292//1290 1291//1292 1287//1288 +f 1292//1290 1289//1289 1296//1294 +f 1289//1289 1290//1291 1293//1293 +f 1290//1291 1291//1292 1294//1295 +f 1291//1292 1292//1290 1295//1296 +f 1301//1298 1304//1304 1300//1299 +f 1302//1301 1301//1298 1297//1297 +f 1303//1303 1302//1301 1298//1300 +f 1304//1304 1303//1303 1299//1302 +f 1304//1304 1301//1298 1308//1306 +f 1301//1298 1302//1301 1305//1305 +f 1302//1301 1303//1303 1306//1307 +f 1303//1303 1304//1304 1307//1308 +f 1308//1306 1305//1305 1312//1310 +f 1305//1305 1306//1307 1309//1309 +f 1306//1307 1307//1308 1310//1311 +f 1307//1308 1308//1306 1311//1312 +f 1313//1313 1316//1316 1312//1310 +f 1309//1309 1310//1311 1313//1313 +f 1315//1315 1314//1314 1310//1311 +f 1311//1312 1312//1310 1315//1315 +f 1316//1316 1313//1313 1320//1318 +f 1313//1313 1314//1314 1317//1317 +f 1314//1314 1315//1315 1318//1319 +f 1315//1315 1316//1316 1319//1320 +f 1320//1318 1317//1317 1324//1322 +f 1322//1323 1321//1321 1317//1317 +f 1323//1324 1322//1323 1318//1319 +f 1324//1322 1323//1324 1319//1320 +f 1324//1322 1321//1321 1328//1326 +f 1326//1327 1325//1325 1321//1321 +f 1322//1323 1323//1324 1326//1327 +f 1328//1326 1327//1328 1323//1324 +f 1329//1329 1332//1332 1328//1326 +f 1325//1325 1326//1327 1329//1329 +f 1331//1331 1330//1330 1326//1327 +f 1327//1328 1328//1326 1331//1331 +f 1333//1333 1336//1336 1332//1332 +f 1329//1329 1330//1330 1333//1333 +f 1335//1335 1334//1334 1330//1330 +f 1331//1331 1332//1332 1335//1335 +f 1336//1336 1333//1333 1340//1338 +f 1333//1333 1334//1334 1337//1337 +f 1334//1334 1335//1335 1338//1339 +f 1335//1335 1336//1336 1339//1340 +f 1345//1342 1348//1348 1344//1343 +f 1346//1345 1345//1342 1341//1341 +f 1347//1347 1346//1345 1342//1344 +f 1348//1348 1347//1347 1343//1346 +f 1349//1349 1352//1352 1348//1348 +f 1350//1350 1349//1349 1345//1342 +f 1351//1351 1350//1350 1346//1345 +f 1352//1352 1351//1351 1347//1347 +f 1352//1352 1349//1349 1356//1354 +f 1354//1355 1353//1353 1349//1349 +f 1350//1350 1351//1351 1354//1355 +f 1356//1354 1355//1356 1351//1351 +f 1357//1357 1360//1360 1356//1354 +f 1353//1353 1354//1355 1357//1357 +f 1359//1359 1358//1358 1354//1355 +f 1355//1356 1356//1354 1359//1359 +f 1360//1360 1357//1357 1364//1362 +f 1357//1357 1358//1358 1361//1361 +f 1358//1358 1359//1359 1362//1363 +f 1359//1359 1360//1360 1363//1364 +f 1364//1362 1361//1361 1368//1366 +f 1361//1361 1362//1363 1365//1365 +f 1362//1363 1363//1364 1366//1367 +f 1363//1364 1364//1362 1367//1368 +f 1369//1369 1372//1372 1368//1366 +f 1365//1365 1366//1367 1369//1369 +f 1371//1371 1370//1370 1366//1367 +f 1367//1368 1368//1366 1371//1371 +f 1373//1373 1376//1376 1372//1372 +f 1374//1374 1373//1373 1369//1369 +f 1375//1375 1374//1374 1370//1370 +f 1376//1376 1375//1375 1371//1371 +f 1376//1376 1373//1373 1380//1378 +f 1373//1373 1374//1374 1377//1377 +f 1374//1374 1375//1375 1378//1379 +f 1375//1375 1376//1376 1379//1380 +f 1380//1378 1377//1377 1384//1382 +f 1377//1377 1378//1379 1381//1381 +f 1378//1379 1379//1380 1382//1383 +f 1379//1380 1380//1378 1383//1384 +f 1388//1392 1385//1385 1392//1387 +f 1385//1385 1386//1388 1389//1386 +f 1386//1388 1387//1390 1390//1389 +f 1387//1390 1388//1392 1391//1391 +f 1393//1393 1396//1396 1392//1387 +f 1394//1394 1393//1393 1389//1386 +f 1395//1395 1394//1394 1390//1389 +f 1396//1396 1395//1395 1391//1391 +f 1397//1397 1400//1400 1396//1396 +f 1398//1398 1397//1397 1393//1393 +f 1399//1399 1398//1398 1394//1394 +f 1400//1400 1399//1399 1395//1395 +f 1401//1401 1404//1404 1400//1400 +f 1397//1397 1398//1398 1401//1401 +f 1403//1403 1402//1402 1398//1398 +f 1399//1399 1400//1400 1403//1403 +f 1404//1404 1401//1401 1408//1406 +f 1406//1407 1405//1405 1401//1401 +f 1402//1402 1403//1403 1406//1407 +f 1408//1406 1407//1408 1403//1403 +f 1409//1409 1412//1412 1408//1406 +f 1410//1410 1409//1409 1405//1405 +f 1411//1411 1410//1410 1406//1407 +f 1412//1412 1411//1411 1407//1408 +f 1412//1412 1409//1409 1416//1414 +f 1409//1409 1410//1410 1413//1413 +f 1410//1410 1411//1411 1414//1415 +f 1411//1411 1412//1412 1415//1416 +f 1417//1417 1420//1420 1416//1414 +f 1418//1418 1417//1417 1413//1413 +f 1419//1419 1418//1418 1414//1415 +f 1420//1420 1419//1419 1415//1416 +f 1421//1421 1424//1424 1420//1420 +f 1417//1417 1418//1418 1421//1421 +f 1423//1423 1422//1422 1418//1418 +f 1419//1419 1420//1420 1423//1423 +f 1424//1424 1421//1421 1428//1426 +f 1421//1421 1422//1422 1425//1425 +f 1422//1422 1423//1423 1426//1427 +f 1423//1423 1424//1424 1427//1428 +f 1433//1430 1436//1436 1432//1431 +f 1434//1433 1433//1430 1429//1429 +f 1435//1435 1434//1433 1430//1432 +f 1436//1436 1435//1435 1431//1434 +f 1436//1436 1433//1430 1440//1438 +f 1433//1430 1434//1433 1437//1437 +f 1434//1433 1435//1435 1438//1439 +f 1435//1435 1436//1436 1439//1440 +f 1440//1438 1437//1437 1444//1442 +f 1437//1437 1438//1439 1441//1441 +f 1438//1439 1439//1440 1442//1443 +f 1439//1440 1440//1438 1443//1444 +f 1444//1442 1441//1441 1448//1446 +f 1441//1441 1442//1443 1445//1445 +f 1442//1443 1443//1444 1446//1447 +f 1443//1444 1444//1442 1447//1448 +f 1449//1449 1452//1452 1448//1446 +f 1450//1450 1449//1449 1445//1445 +f 1451//1451 1450//1450 1446//1447 +f 1452//1452 1451//1451 1447//1448 +f 1453//1453 1456//1456 1452//1452 +f 1454//1454 1453//1453 1449//1449 +f 1455//1455 1454//1454 1450//1450 +f 1456//1456 1455//1455 1451//1451 +f 1456//1456 1453//1453 1460//1458 +f 1453//1453 1454//1454 1457//1457 +f 1454//1454 1455//1455 1458//1459 +f 1455//1455 1456//1456 1459//1460 +f 1461//1461 1464//1464 1460//1458 +f 1462//1462 1461//1461 1457//1457 +f 1463//1463 1462//1462 1458//1459 +f 1464//1464 1463//1463 1459//1460 +f 1464//1464 1461//1461 1468//1466 +f 1461//1461 1462//1462 1465//1465 +f 1462//1462 1463//1463 1466//1467 +f 1463//1463 1464//1464 1467//1468 +f 1468//1466 1465//1465 1472//1470 +f 1465//1465 1466//1467 1469//1469 +f 1466//1467 1467//1468 1470//1471 +f 1467//1468 1468//1466 1471//1472 +f 1477//1474 1480//1480 1476//1475 +f 1478//1477 1477//1474 1473//1473 +f 1479//1479 1478//1477 1474//1476 +f 1480//1480 1479//1479 1475//1478 +f 1481//1481 1484//1484 1480//1480 +f 1482//1482 1481//1481 1477//1474 +f 1483//1483 1482//1482 1478//1477 +f 1484//1484 1483//1483 1479//1479 +f 1484//1484 1481//1481 1488//1486 +f 1481//1481 1482//1482 1485//1485 +f 1482//1482 1483//1483 1486//1487 +f 1483//1483 1484//1484 1487//1488 +f 1489//1489 1492//1492 1488//1486 +f 1485//1485 1486//1487 1489//1489 +f 1491//1491 1490//1490 1486//1487 +f 1487//1488 1488//1486 1491//1491 +f 1492//1492 1489//1489 1496//1494 +f 1494//1495 1493//1493 1489//1489 +f 1490//1490 1491//1491 1494//1495 +f 1496//1494 1495//1496 1491//1491 +f 1496//1494 1493//1493 1500//1498 +f 1498//1499 1497//1497 1493//1493 +f 1494//1495 1495//1496 1498//1499 +f 1500//1498 1499//1500 1495//1496 +f 1501//1501 1504//1504 1500//1498 +f 1497//1497 1498//1499 1501//1501 +f 1503//1503 1502//1502 1498//1499 +f 1499//1500 1500//1498 1503//1503 +f 1504//1504 1501//1501 1508//1506 +f 1506//1507 1505//1505 1501//1501 +f 1502//1502 1503//1503 1506//1507 +f 1508//1506 1507//1508 1503//1503 +f 1509//1509 1512//1512 1508//1506 +f 1505//1505 1506//1507 1509//1509 +f 1511//1511 1510//1510 1506//1507 +f 1507//1508 1508//1506 1511//1511 +f 1512//1512 1509//1509 1516//1514 +f 1509//1509 1510//1510 1513//1513 +f 1510//1510 1511//1511 1514//1515 +f 1511//1511 1512//1512 1515//1516 +f 1521//1518 1524//1524 1520//1519 +f 1517//1517 1518//1520 1521//1518 +f 1523//1523 1522//1521 1518//1520 +f 1519//1522 1520//1519 1523//1523 +f 1524//1524 1521//1518 1528//1526 +f 1526//1527 1525//1525 1521//1518 +f 1522//1521 1523//1523 1526//1527 +f 1528//1526 1527//1528 1523//1523 +f 1528//1526 1525//1525 1532//1530 +f 1525//1525 1526//1527 1529//1529 +f 1526//1527 1527//1528 1530//1531 +f 1527//1528 1528//1526 1531//1532 +f 1532//1530 1529//1529 1536//1534 +f 1534//1535 1533//1533 1529//1529 +f 1530//1531 1531//1532 1534//1535 +f 1536//1534 1535//1536 1531//1532 +f 1537//1537 1540//1540 1536//1534 +f 1538//1538 1537//1537 1533//1533 +f 1539//1539 1538//1538 1534//1535 +f 1540//1540 1539//1539 1535//1536 +f 1541//1541 1544//1544 1540//1540 +f 1537//1537 1538//1538 1541//1541 +f 1543//1543 1542//1542 1538//1538 +f 1539//1539 1540//1540 1543//1543 +f 1545//1545 1548//1548 1544//1544 +f 1541//1541 1542//1542 1545//1545 +f 1547//1547 1546//1546 1542//1542 +f 1543//1543 1544//1544 1547//1547 +f 1548//1548 1545//1545 1552//1550 +f 1550//1551 1549//1549 1545//1545 +f 1546//1546 1547//1547 1550//1551 +f 1552//1550 1551//1552 1547//1547 +f 1553//1553 1556//1556 1552//1550 +f 1549//1549 1550//1551 1553//1553 +f 1555//1555 1554//1554 1550//1551 +f 1551//1552 1552//1550 1555//1555 +f 1556//1556 1553//1553 1560//1558 +f 1553//1553 1554//1554 1557//1557 +f 1554//1554 1555//1555 1558//1559 +f 1555//1555 1556//1556 1559//1560 +f 1564//1568 1561//1561 1568//1563 +f 1561//1561 1562//1564 1565//1562 +f 1562//1564 1563//1566 1566//1565 +f 1563//1566 1564//1568 1567//1567 +f 1569//1569 1572//1572 1568//1563 +f 1570//1570 1569//1569 1565//1562 +f 1571//1571 1570//1570 1566//1565 +f 1572//1572 1571//1571 1567//1567 +f 1572//1572 1569//1569 1576//1574 +f 1569//1569 1570//1570 1573//1573 +f 1570//1570 1571//1571 1574//1575 +f 1571//1571 1572//1572 1575//1576 +f 1577//1577 1580//1580 1576//1574 +f 1573//1573 1574//1575 1577//1577 +f 1579//1579 1578//1578 1574//1575 +f 1575//1576 1576//1574 1579//1579 +f 1581//1581 1584//1584 1580//1580 +f 1582//1582 1581//1581 1577//1577 +f 1583//1583 1582//1582 1578//1578 +f 1584//1584 1583//1583 1579//1579 +f 1584//1584 1581//1581 1588//1586 +f 1581//1581 1582//1582 1585//1585 +f 1582//1582 1583//1583 1586//1587 +f 1583//1583 1584//1584 1587//1588 +f 1588//1586 1585//1585 1592//1590 +f 1590//1591 1589//1589 1585//1585 +f 1586//1587 1587//1588 1590//1591 +f 1592//1590 1591//1592 1587//1588 +f 1593//1593 1596//1596 1592//1590 +f 1589//1589 1590//1591 1593//1593 +f 1595//1595 1594//1594 1590//1591 +f 1591//1592 1592//1590 1595//1595 +f 1596//1596 1593//1593 1600//1598 +f 1593//1593 1594//1594 1597//1597 +f 1594//1594 1595//1595 1598//1599 +f 1595//1595 1596//1596 1599//1600 +f 1600//1598 1597//1597 1604//1602 +f 1597//1597 1598//1599 1601//1601 +f 1598//1599 1599//1600 1602//1603 +f 1599//1600 1600//1598 1603//1604 +f 1608//1612 1605//1605 1612//1607 +f 1610//1609 1609//1606 1605//1605 +f 1606//1608 1607//1610 1610//1609 +f 1612//1607 1611//1611 1607//1610 +f 1612//1607 1609//1606 1616//1614 +f 1609//1606 1610//1609 1613//1613 +f 1610//1609 1611//1611 1614//1615 +f 1611//1611 1612//1607 1615//1616 +f 1616//1614 1613//1613 1620//1618 +f 1618//1619 1617//1617 1613//1613 +f 1614//1615 1615//1616 1618//1619 +f 1620//1618 1619//1620 1615//1616 +f 1621//1621 1624//1624 1620//1618 +f 1617//1617 1618//1619 1621//1621 +f 1623//1623 1622//1622 1618//1619 +f 1619//1620 1620//1618 1623//1623 +f 1625//1625 1628//1628 1624//1624 +f 1621//1621 1622//1622 1625//1625 +f 1627//1627 1626//1626 1622//1622 +f 1623//1623 1624//1624 1627//1627 +f 1629//1629 1632//1632 1628//1628 +f 1630//1630 1629//1629 1625//1625 +f 1631//1631 1630//1630 1626//1626 +f 1632//1632 1631//1631 1627//1627 +f 1632//1632 1629//1629 1636//1634 +f 1634//1635 1633//1633 1629//1629 +f 1630//1630 1631//1631 1634//1635 +f 1636//1634 1635//1636 1631//1631 +f 1637//1637 1640//1640 1636//1634 +f 1638//1638 1637//1637 1633//1633 +f 1639//1639 1638//1638 1634//1635 +f 1640//1640 1639//1639 1635//1636 +f 1640//1640 1637//1637 1644//1642 +f 1637//1637 1638//1638 1641//1641 +f 1638//1638 1639//1639 1642//1643 +f 1639//1639 1640//1640 1643//1644 +f 1644//1642 1641//1641 1648//1646 +f 1641//1641 1642//1643 1645//1645 +f 1642//1643 1643//1644 1646//1647 +f 1643//1644 1644//1642 1647//1648 +f 1652//1656 1649//1649 1656//1651 +f 1654//1653 1653//1650 1649//1649 +f 1650//1652 1651//1654 1654//1653 +f 1656//1651 1655//1655 1651//1654 +f 1657//1657 1660//1660 1656//1651 +f 1653//1650 1654//1653 1657//1657 +f 1659//1659 1658//1658 1654//1653 +f 1655//1655 1656//1651 1659//1659 +f 1660//1660 1657//1657 1664//1662 +f 1662//1663 1661//1661 1657//1657 +f 1658//1658 1659//1659 1662//1663 +f 1664//1662 1663//1664 1659//1659 +f 1665//1665 1668//1668 1664//1662 +f 1666//1666 1665//1665 1661//1661 +f 1667//1667 1666//1666 1662//1663 +f 1668//1668 1667//1667 1663//1664 +f 1669//1669 1672//1672 1668//1668 +f 1665//1665 1666//1666 1669//1669 +f 1671//1671 1670//1670 1666//1666 +f 1667//1667 1668//1668 1671//1671 +f 1672//1672 1669//1669 1676//1674 +f 1669//1669 1670//1670 1673//1673 +f 1670//1670 1671//1671 1674//1675 +f 1671//1671 1672//1672 1675//1676 +f 1677//1677 1680//1680 1676//1674 +f 1673//1673 1674//1675 1677//1677 +f 1679//1679 1678//1678 1674//1675 +f 1675//1676 1676//1674 1679//1679 +f 1681//1681 1684//1684 1680//1680 +f 1682//1682 1681//1681 1677//1677 +f 1683//1683 1682//1682 1678//1678 +f 1684//1684 1683//1683 1679//1679 +f 1684//1684 1681//1681 1688//1686 +f 1686//1687 1685//1685 1681//1681 +f 1682//1682 1683//1683 1686//1687 +f 1688//1686 1687//1688 1683//1683 +f 1688//1686 1685//1685 1692//1690 +f 1685//1685 1686//1687 1689//1689 +f 1686//1687 1687//1688 1690//1691 +f 1687//1688 1688//1686 1691//1692 +f 1696//1700 1693//1693 1700//1695 +f 1698//1697 1697//1694 1693//1693 +f 1694//1696 1695//1698 1698//1697 +f 1700//1695 1699//1699 1695//1698 +f 1701//1701 1704//1704 1700//1695 +f 1697//1694 1698//1697 1701//1701 +f 1703//1703 1702//1702 1698//1697 +f 1699//1699 1700//1695 1703//1703 +f 1704//1704 1701//1701 1708//1706 +f 1701//1701 1702//1702 1705//1705 +f 1702//1702 1703//1703 1706//1707 +f 1703//1703 1704//1704 1707//1708 +f 1709//1709 1712//1712 1708//1706 +f 1710//1710 1709//1709 1705//1705 +f 1711//1711 1710//1710 1706//1707 +f 1712//1712 1711//1711 1707//1708 +f 1712//1712 1709//1709 1716//1714 +f 1714//1715 1713//1713 1709//1709 +f 1710//1710 1711//1711 1714//1715 +f 1716//1714 1715//1716 1711//1711 +f 1717//1717 1720//1720 1716//1714 +f 1713//1713 1714//1715 1717//1717 +f 1714//1715 1715//1716 1718//1718 +f 1715//1716 1716//1714 1719//1719 +f 1720//1720 1717//1717 1724//1722 +f 1722//1723 1721//1721 1717//1717 +f 1718//1718 1719//1719 1722//1723 +f 1724//1722 1723//1724 1719//1719 +f 1725//1725 1728//1728 1724//1722 +f 1721//1721 1722//1723 1725//1725 +f 1727//1727 1726//1726 1722//1723 +f 1723//1724 1724//1722 1727//1727 +f 1728//1728 1725//1725 1732//1730 +f 1725//1725 1726//1726 1729//1729 +f 1726//1726 1727//1727 1730//1731 +f 1727//1727 1728//1728 1731//1732 +f 1732//1730 1729//1729 1736//1734 +f 1729//1729 1730//1731 1733//1733 +f 1730//1731 1731//1732 1734//1735 +f 1731//1732 1732//1730 1735//1736 +f 1741//1738 1744//1744 1740//1739 +f 1737//1737 1738//1740 1741//1738 +f 1743//1743 1742//1741 1738//1740 +f 1739//1742 1740//1739 1743//1743 +f 1744//1744 1741//1738 1748//1746 +f 1746//1747 1745//1745 1741//1738 +f 1742//1741 1743//1743 1746//1747 +f 1748//1746 1747//1748 1743//1743 +f 1749//1749 1752//1752 1748//1746 +f 1745//1745 1746//1747 1749//1749 +f 1751//1751 1750//1750 1746//1747 +f 1747//1748 1748//1746 1751//1751 +f 1753//1753 1756//1756 1752//1752 +f 1754//1754 1753//1753 1749//1749 +f 1755//1755 1754//1754 1750//1750 +f 1756//1756 1755//1755 1751//1751 +f 1756//1756 1753//1753 1760//1758 +f 1758//1759 1757//1757 1753//1753 +f 1754//1754 1755//1755 1758//1759 +f 1760//1758 1759//1760 1755//1755 +f 1760//1758 1757//1757 1764//1762 +f 1757//1757 1758//1759 1761//1761 +f 1758//1759 1759//1760 1762//1763 +f 1759//1760 1760//1758 1763//1764 +f 1765//1765 1768//1768 1764//1762 +f 1766//1766 1765//1765 1761//1761 +f 1767//1767 1766//1766 1762//1763 +f 1768//1768 1767//1767 1763//1764 +f 1769//1769 1772//1772 1768//1768 +f 1765//1765 1766//1766 1769//1769 +f 1771//1771 1770//1770 1766//1766 +f 1767//1767 1768//1768 1771//1771 +f 1773//1773 1776//1776 1772//1772 +f 1774//1774 1773//1773 1769//1769 +f 1775//1775 1774//1774 1770//1770 +f 1776//1776 1775//1775 1771//1771 +f 1776//1776 1773//1773 1780//1778 +f 1773//1773 1774//1774 1777//1777 +f 1774//1774 1775//1775 1778//1779 +f 1775//1775 1776//1776 1779//1780 +f 1784//1788 1781//1781 1788//1783 +f 1781//1781 1782//1784 1785//1782 +f 1782//1784 1783//1786 1786//1785 +f 1783//1786 1784//1788 1787//1787 +f 1789//1789 1792//1792 1788//1783 +f 1790//1790 1789//1789 1785//1782 +f 1791//1791 1790//1790 1786//1785 +f 1792//1792 1791//1791 1787//1787 +f 1793//1793 1796//1796 1792//1792 +f 1789//1789 1790//1790 1793//1793 +f 1795//1795 1794//1794 1790//1790 +f 1791//1791 1792//1792 1795//1795 +f 1796//1796 1793//1793 1800//1798 +f 1793//1793 1794//1794 1797//1797 +f 1794//1794 1795//1795 1798//1799 +f 1795//1795 1796//1796 1799//1800 +f 1801//1801 1804//1804 1800//1798 +f 1797//1797 1798//1799 1801//1801 +f 1803//1803 1802//1802 1798//1799 +f 1799//1800 1800//1798 1803//1803 +f 1805//1805 1808//1808 1804//1804 +f 1806//1806 1805//1805 1801//1801 +f 1807//1807 1806//1806 1802//1802 +f 1808//1808 1807//1807 1803//1803 +f 1808//1808 1805//1805 1812//1810 +f 1805//1805 1806//1806 1809//1809 +f 1806//1806 1807//1807 1810//1811 +f 1807//1807 1808//1808 1811//1812 +f 1813//1813 1816//1816 1812//1810 +f 1814//1814 1813//1813 1809//1809 +f 1815//1815 1814//1814 1810//1811 +f 1816//1816 1815//1815 1811//1812 +f 1816//1816 1813//1813 1820//1818 +f 1813//1813 1814//1814 1817//1817 +f 1814//1814 1815//1815 1818//1819 +f 1815//1815 1816//1816 1819//1820 +f 1820//1818 1817//1817 1824//1822 +f 1817//1817 1818//1819 1821//1821 +f 1818//1819 1819//1820 1822//1823 +f 1819//1820 1820//1818 1823//1824 +f 1829//1826 1832//1832 1828//1827 +f 1825//1825 1826//1828 1829//1826 +f 1831//1831 1830//1829 1826//1828 +f 1827//1830 1828//1827 1831//1831 +f 1832//1832 1829//1826 1836//1834 +f 1834//1835 1833//1833 1829//1826 +f 1830//1829 1831//1831 1834//1835 +f 1836//1834 1835//1836 1831//1831 +f 1836//1834 1833//1833 1840//1838 +f 1838//1839 1837//1837 1833//1833 +f 1834//1835 1835//1836 1838//1839 +f 1840//1838 1839//1840 1835//1836 +f 1841//1841 1844//1844 1840//1838 +f 1837//1837 1838//1839 1841//1841 +f 1843//1843 1842//1842 1838//1839 +f 1839//1840 1840//1838 1843//1843 +f 1844//1844 1841//1841 1848//1846 +f 1846//1847 1845//1845 1841//1841 +f 1842//1842 1843//1843 1846//1847 +f 1848//1846 1847//1848 1843//1843 +f 1848//1846 1845//1845 1852//1850 +f 1850//1851 1849//1849 1845//1845 +f 1846//1847 1847//1848 1850//1851 +f 1852//1850 1851//1852 1847//1848 +f 1852//1850 1849//1849 1856//1854 +f 1849//1849 1850//1851 1853//1853 +f 1850//1851 1851//1852 1854//1855 +f 1851//1852 1852//1850 1855//1856 +f 1861//1858 1864//1864 1860//1859 +f 1862//1861 1861//1858 1857//1857 +f 1863//1863 1862//1861 1858//1860 +f 1864//1864 1863//1863 1859//1862 +f 1864//1864 1861//1858 1868//1866 +f 1861//1858 1862//1861 1865//1865 +f 1862//1861 1863//1863 1866//1867 +f 1863//1863 1864//1864 1867//1868 +f 1868//1866 1865//1865 1872//1870 +f 1870//1871 1869//1869 1865//1865 +f 1866//1867 1867//1868 1870//1871 +f 1872//1870 1871//1872 1867//1868 +f 1872//1870 1869//1869 1876//1874 +f 1869//1869 1870//1871 1873//1873 +f 1870//1871 1871//1872 1874//1875 +f 1871//1872 1872//1870 1875//1876 +f 1880//1884 1877//1877 1884//1879 +f 1877//1877 1878//1880 1881//1878 +f 1878//1880 1879//1882 1882//1881 +f 1879//1882 1880//1884 1883//1883 +f 1884//1879 1881//1878 1888//1886 +f 1881//1878 1882//1881 1885//1885 +f 1882//1881 1883//1883 1886//1887 +f 1883//1883 1884//1879 1887//1888 +f 1892//1896 1889//1889 1896//1891 +f 1889//1889 1890//1892 1893//1890 +f 1890//1892 1891//1894 1894//1893 +f 1891//1894 1892//1896 1895//1895 +f 1900//1904 1897//1897 1904//1899 +f 1897//1897 1898//1900 1901//1898 +f 1898//1900 1899//1902 1902//1901 +f 1899//1902 1900//1904 1903//1903 +f 1905//1905 1908//1908 1904//1899 +f 1906//1906 1905//1905 1901//1898 +f 1907//1907 1906//1906 1902//1901 +f 1908//1908 1907//1907 1903//1903 +f 1909//1909 1912//1912 1908//1908 +f 1910//1910 1909//1909 1905//1905 +f 1911//1911 1910//1910 1906//1906 +f 1912//1912 1911//1911 1907//1907 +f 1913//1913 1916//1916 1912//1912 +f 1914//1914 1913//1913 1909//1909 +f 1915//1915 1914//1914 1910//1910 +f 1916//1916 1915//1915 1911//1911 +f 1917//1917 1920//1920 1916//1916 +f 1918//1918 1917//1917 1913//1913 +f 1919//1919 1918//1918 1914//1914 +f 1920//1920 1919//1919 1915//1915 +f 1920//1920 1917//1917 1924//1922 +f 1917//1917 1918//1918 1921//1921 +f 1918//1918 1919//1919 1922//1923 +f 1919//1919 1920//1920 1923//1924 +f 1929//1926 1932//1932 1928//1927 +f 1930//1929 1929//1926 1925//1925 +f 1926//1928 1927//1930 1930//1929 +f 1932//1932 1931//1931 1927//1930 +f 1933//1933 1936//1936 1932//1932 +f 1929//1926 1930//1929 1933//1933 +f 1935//1935 1934//1934 1930//1929 +f 1931//1931 1932//1932 1935//1935 +f 1936//1936 1933//1933 1940//1938 +f 1933//1933 1934//1934 1937//1937 +f 1934//1934 1935//1935 1938//1939 +f 1935//1935 1936//1936 1939//1940 +f 1944//1948 1941//1941 1948//1943 +f 1941//1941 1942//1944 1945//1942 +f 1942//1944 1943//1946 1946//1945 +f 1943//1946 1944//1948 1947//1947 +f 1953//1950 1956//1956 1952//1951 +f 1954//1953 1953//1950 1949//1949 +f 1955//1955 1954//1953 1950//1952 +f 1956//1956 1955//1955 1951//1954 +f 1956//1956 1953//1950 1960//1958 +f 1953//1950 1954//1953 1957//1957 +f 1954//1953 1955//1955 1958//1959 +f 1955//1955 1956//1956 1959//1960 +f 1960//1958 1957//1957 1964//1962 +f 1957//1957 1958//1959 1961//1961 +f 1958//1959 1959//1960 1962//1963 +f 1959//1960 1960//1958 1963//1964 +f 1964//1962 1961//1961 1968//1966 +f 1961//1961 1962//1963 1965//1965 +f 1962//1963 1963//1964 1966//1967 +f 1963//1964 1964//1962 1967//1968 +f 1969//1969 1972//1972 1968//1966 +f 1970//1970 1969//1969 1965//1965 +f 1971//1971 1970//1970 1966//1967 +f 1972//1972 1971//1971 1967//1968 +f 1972//1972 1969//1969 1976//1974 +f 1969//1969 1970//1970 1973//1973 +f 1970//1970 1971//1971 1974//1975 +f 1971//1971 1972//1972 1975//1976 +f 1976//1974 1973//1973 1980//1978 +f 1973//1973 1974//1975 1977//1977 +f 1974//1975 1975//1976 1978//1979 +f 1975//1976 1976//1974 1979//1980 +f 1984//1988 1981//1981 1988//1983 +f 1981//1981 1982//1984 1985//1982 +f 1982//1984 1983//1986 1986//1985 +f 1983//1986 1984//1988 1987//1987 +f 1989//1989 1992//1992 1988//1983 +f 1990//1990 1989//1989 1985//1982 +f 1991//1991 1990//1990 1986//1985 +f 1992//1992 1991//1991 1987//1987 +f 1993//1993 1996//1996 1992//1992 +f 1989//1989 1990//1990 1993//1993 +f 1995//1995 1994//1994 1990//1990 +f 1991//1991 1992//1992 1995//1995 +f 1996//1996 1993//1993 2000//1998 +f 1993//1993 1994//1994 1997//1997 +f 1994//1994 1995//1995 1998//1999 +f 1995//1995 1996//1996 1999//2000 +f 2004//2008 2001//2001 2008//2003 +f 2001//2001 2002//2004 2005//2002 +f 2002//2004 2003//2006 2006//2005 +f 2003//2006 2004//2008 2007//2007 +f 2008//2003 2005//2002 2012//2010 +f 2005//2002 2006//2005 2009//2009 +f 2006//2005 2007//2007 2010//2011 +f 2007//2007 2008//2003 2011//2012 +f 2016//2020 2013//2013 2020//2015 +f 2013//2013 2014//2016 2017//2014 +f 2014//2016 2015//2018 2018//2017 +f 2015//2018 2016//2020 2019//2019 +f 2024//2028 2021//2021 2028//2023 +f 2026//2025 2025//2022 2021//2021 +f 2022//2024 2023//2026 2026//2025 +f 2028//2023 2027//2027 2023//2026 +f 2029//2029 2032//2032 2028//2023 +f 2025//2022 2026//2025 2029//2029 +f 2031//2031 2030//2030 2026//2025 +f 2027//2027 2028//2023 2031//2031 +f 2033//2033 2036//2036 2032//2032 +f 2029//2029 2030//2030 2033//2033 +f 2035//2035 2034//2034 2030//2030 +f 2031//2031 2032//2032 2035//2035 +f 2036//2036 2033//2033 2040//2038 +f 2038//2039 2037//2037 2033//2033 +f 2034//2034 2035//2035 2038//2039 +f 2040//2038 2039//2040 2035//2035 +f 2040//2038 2037//2037 2044//2042 +f 2042//2043 2041//2041 2037//2037 +f 2038//2039 2039//2040 2042//2043 +f 2044//2042 2043//2044 2039//2040 +f 2044//2042 2041//2041 2048//2046 +f 2041//2041 2042//2043 2045//2045 +f 2042//2043 2043//2044 2046//2047 +f 2043//2044 2044//2042 2047//2048 +f 2052//2056 2049//2049 2056//2051 +f 2049//2049 2050//2052 2053//2050 +f 2050//2052 2051//2054 2054//2053 +f 2051//2054 2052//2056 2055//2055 +f 2057//2057 2060//2060 2056//2051 +f 2058//2058 2057//2057 2053//2050 +f 2059//2059 2058//2058 2054//2053 +f 2060//2060 2059//2059 2055//2055 +f 2060//2060 2057//2057 2064//2062 +f 2057//2057 2058//2058 2061//2061 +f 2058//2058 2059//2059 2062//2063 +f 2059//2059 2060//2060 2063//2064 +f 2068//2072 2065//2065 2072//2067 +f 2065//2065 2066//2068 2069//2066 +f 2066//2068 2067//2070 2070//2069 +f 2067//2070 2068//2072 2071//2071 +f 2076//2080 2073//2073 2080//2075 +f 2073//2073 2074//2076 2077//2074 +f 2074//2076 2075//2078 2078//2077 +f 2075//2078 2076//2080 2079//2079 +f 2081//2081 2084//2084 2080//2075 +f 2082//2082 2081//2081 2077//2074 +f 2083//2083 2082//2082 2078//2077 +f 2084//2084 2083//2083 2079//2079 +f 2084//2084 2081//2081 2088//2086 +f 2086//2087 2085//2085 2081//2081 +f 2082//2082 2083//2083 2086//2087 +f 2088//2086 2087//2088 2083//2083 +f 2089//2089 2092//2092 2088//2086 +f 2085//2085 2086//2087 2089//2089 +f 2091//2091 2090//2090 2086//2087 +f 2087//2088 2088//2086 2091//2091 +f 2093//2093 2096//2096 2092//2092 +f 2089//2089 2090//2090 2093//2093 +f 2095//2095 2094//2094 2090//2090 +f 2091//2091 2092//2092 2095//2095 +f 2096//2096 2093//2093 2100//2098 +f 2098//2099 2097//2097 2093//2093 +f 2094//2094 2095//2095 2098//2099 +f 2100//2098 2099//2100 2095//2095 +f 2100//2098 2097//2097 2104//2102 +f 2097//2097 2098//2099 2101//2101 +f 2098//2099 2099//2100 2102//2103 +f 2099//2100 2100//2098 2103//2104 +f 2108//2112 2105//2105 2112//2107 +f 2105//2105 2106//2108 2109//2106 +f 2106//2108 2107//2110 2110//2109 +f 2107//2110 2108//2112 2111//2111 +f 2113//2113 2116//2116 2112//2107 +f 2114//2114 2113//2113 2109//2106 +f 2115//2115 2114//2114 2110//2109 +f 2116//2116 2115//2115 2111//2111 +f 2117//2117 2120//2120 2116//2116 +f 2118//2118 2117//2117 2113//2113 +f 2119//2119 2118//2118 2114//2114 +f 2120//2120 2119//2119 2115//2115 +f 2120//2120 2117//2117 2124//2122 +f 2117//2117 2118//2118 2121//2121 +f 2118//2118 2119//2119 2122//2123 +f 2119//2119 2120//2120 2123//2124 +f 2129//2126 2132//2132 2128//2127 +f 2125//2125 2126//2128 2129//2126 +f 2131//2131 2130//2129 2126//2128 +f 2127//2130 2128//2127 2131//2131 +f 2132//2132 2129//2126 2136//2134 +f 2129//2126 2130//2129 2133//2133 +f 2130//2129 2131//2131 2134//2135 +f 2131//2131 2132//2132 2135//2136 +f 2140//2144 2137//2137 2144//2139 +f 2137//2137 2138//2140 2141//2138 +f 2138//2140 2139//2142 2142//2141 +f 2139//2142 2140//2144 2143//2143 +f 2149//2146 2152//2152 2148//2147 +f 2150//2149 2149//2146 2145//2145 +f 2151//2151 2150//2149 2146//2148 +f 2152//2152 2151//2151 2147//2150 +f 2153//2153 2156//2156 2152//2152 +f 2154//2154 2153//2153 2149//2146 +f 2155//2155 2154//2154 2150//2149 +f 2156//2156 2155//2155 2151//2151 +f 2156//2156 2153//2153 2160//2158 +f 2153//2153 2154//2154 2157//2157 +f 2154//2154 2155//2155 2158//2159 +f 2155//2155 2156//2156 2159//2160 +f 2161//2161 2164//2164 2160//2158 +f 2162//2162 2161//2161 2157//2157 +f 2163//2163 2162//2162 2158//2159 +f 2164//2164 2163//2163 2159//2160 +f 2164//2164 2161//2161 2168//2166 +f 2161//2161 2162//2162 2165//2165 +f 2162//2162 2163//2163 2166//2167 +f 2163//2163 2164//2164 2167//2168 +f 2168//2166 2165//2165 2172//2170 +f 2165//2165 2166//2167 2169//2169 +f 2166//2167 2167//2168 2170//2171 +f 2167//2168 2168//2166 2171//2172 +f 2176//2180 2173//2173 2180//2175 +f 2173//2173 2174//2176 2177//2174 +f 2174//2176 2175//2178 2178//2177 +f 2175//2178 2176//2180 2179//2179 +f 2181//2181 2184//2184 2180//2175 +f 2182//2182 2181//2181 2177//2174 +f 2183//2183 2182//2182 2178//2177 +f 2184//2184 2183//2183 2179//2179 +f 2184//2184 2181//2181 2188//2186 +f 2181//2181 2182//2182 2185//2185 +f 2182//2182 2183//2183 2186//2187 +f 2183//2183 2184//2184 2187//2188 +f 2192//2196 2189//2189 2196//2191 +f 2189//2189 2190//2192 2193//2190 +f 2190//2192 2191//2194 2194//2193 +f 2191//2194 2192//2196 2195//2195 +f 2201//2198 2204//2204 2200//2199 +f 2202//2201 2201//2198 2197//2197 +f 2203//2203 2202//2201 2198//2200 +f 2204//2204 2203//2203 2199//2202 +f 2204//2204 2201//2198 2208//2206 +f 2201//2198 2202//2201 2205//2205 +f 2202//2201 2203//2203 2206//2207 +f 2203//2203 2204//2204 2207//2208 +f 2209//2209 2212//2212 2208//2206 +f 2210//2210 2209//2209 2205//2205 +f 2211//2211 2210//2210 2206//2207 +f 2212//2212 2211//2211 2207//2208 +f 2213//2213 2216//2216 2212//2212 +f 2214//2214 2213//2213 2209//2209 +f 2215//2215 2214//2214 2210//2210 +f 2216//2216 2215//2215 2211//2211 +f 2216//2216 2213//2213 2220//2218 +f 2213//2213 2214//2214 2217//2217 +f 2214//2214 2215//2215 2218//2219 +f 2215//2215 2216//2216 2219//2220 +f 2221//2221 2224//2224 2220//2218 +f 2222//2222 2221//2221 2217//2217 +f 2223//2223 2222//2222 2218//2219 +f 2224//2224 2223//2223 2219//2220 +f 2224//2224 2221//2221 2228//2226 +f 2221//2221 2222//2222 2225//2225 +f 2222//2222 2223//2223 2226//2227 +f 2223//2223 2224//2224 2227//2228 +f 2232//2236 2229//2229 2236//2231 +f 2229//2229 2230//2232 2233//2230 +f 2230//2232 2231//2234 2234//2233 +f 2231//2234 2232//2236 2235//2235 +f 2237//2237 2240//2240 2236//2231 +f 2238//2238 2237//2237 2233//2230 +f 2239//2239 2238//2238 2234//2233 +f 2240//2240 2239//2239 2235//2235 +f 2241//2241 2244//2244 2240//2240 +f 2237//2237 2238//2238 2241//2241 +f 2243//2243 2242//2242 2238//2238 +f 2239//2239 2240//2240 2243//2243 +f 2244//2244 2241//2241 2248//2246 +f 2241//2241 2242//2242 2245//2245 +f 2242//2242 2243//2243 2246//2247 +f 2243//2243 2244//2244 2247//2248 +f 2253//2250 2256//2256 2252//2251 +f 2254//2253 2253//2250 2249//2249 +f 2255//2255 2254//2253 2250//2252 +f 2256//2256 2255//2255 2251//2254 +f 2256//2256 2253//2250 2260//2258 +f 2253//2250 2254//2253 2257//2257 +f 2254//2253 2255//2255 2258//2259 +f 2255//2255 2256//2256 2259//2260 +f 2264//2268 2261//2261 2268//2263 +f 2261//2261 2262//2264 2265//2262 +f 2262//2264 2263//2266 2266//2265 +f 2263//2266 2264//2268 2267//2267 +f 2272//2276 2269//2269 2276//2271 +f 2269//2269 2270//2272 2273//2270 +f 2270//2272 2271//2274 2274//2273 +f 2271//2274 2272//2276 2275//2275 +f 2276//2271 2273//2270 2280//2278 +f 2273//2270 2274//2273 2277//2277 +f 2274//2273 2275//2275 2278//2279 +f 2275//2275 2276//2271 2279//2280 +f 2281//2281 2284//2284 2280//2278 +f 2282//2282 2281//2281 2277//2277 +f 2283//2283 2282//2282 2278//2279 +f 2284//2284 2283//2283 2279//2280 +f 2285//2285 2288//2288 2284//2284 +f 2286//2286 2285//2285 2281//2281 +f 2287//2287 2286//2286 2282//2282 +f 2288//2288 2287//2287 2283//2283 +f 2289//2289 2292//2292 2288//2288 +f 2290//2290 2289//2289 2285//2285 +f 2291//2291 2290//2290 2286//2286 +f 2292//2292 2291//2291 2287//2287 +f 2292//2292 2289//2289 2296//2294 +f 2289//2289 2290//2290 2293//2293 +f 2290//2290 2291//2291 2294//2295 +f 2291//2291 2292//2292 2295//2296 +f 2300//2304 2297//2297 2304//2299 +f 2297//2297 2298//2300 2301//2298 +f 2298//2300 2299//2302 2302//2301 +f 2299//2302 2300//2304 2303//2303 +f 2304//2299 2301//2298 2308//2306 +f 2301//2298 2302//2301 2305//2305 +f 2302//2301 2303//2303 2306//2307 +f 2303//2303 2304//2299 2307//2308 +f 2308//2306 2305//2305 2312//2310 +f 2305//2305 2306//2307 2309//2309 +f 2306//2307 2307//2308 2310//2311 +f 2307//2308 2308//2306 2311//2312 +f 2316//2320 2313//2313 2320//2315 +f 2313//2313 2314//2316 2317//2314 +f 2314//2316 2315//2318 2318//2317 +f 2315//2318 2316//2320 2319//2319 +f 2324//2328 2321//2321 2328//2323 +f 2321//2321 2322//2324 2325//2322 +f 2322//2324 2323//2326 2326//2325 +f 2323//2326 2324//2328 2327//2327 +f 2329//2329 2332//2332 2328//2323 +f 2330//2330 2329//2329 2325//2322 +f 2331//2331 2330//2330 2326//2325 +f 2332//2332 2331//2331 2327//2327 +f 2333//2333 2336//2336 2332//2332 +f 2334//2334 2333//2333 2329//2329 +f 2335//2335 2334//2334 2330//2330 +f 2336//2336 2335//2335 2331//2331 +f 2336//2336 2333//2333 2340//2338 +f 2333//2333 2334//2334 2337//2337 +f 2334//2334 2335//2335 2338//2339 +f 2335//2335 2336//2336 2339//2340 +f 2341//2341 2344//2344 2340//2338 +f 2342//2342 2341//2341 2337//2337 +f 2343//2343 2342//2342 2338//2339 +f 2344//2344 2343//2343 2339//2340 +f 2344//2344 2341//2341 2348//2346 +f 2341//2341 2342//2342 2345//2345 +f 2342//2342 2343//2343 2346//2347 +f 2348//2346 2347//2348 2343//2343 +f 2348//2346 2345//2345 2352//2350 +f 2345//2345 2346//2347 2349//2349 +f 2346//2347 2347//2348 2350//2351 +f 2347//2348 2348//2346 2351//2352 +f 2357//2354 2360//2360 2356//2355 +f 2358//2357 2357//2354 2353//2353 +f 2359//2359 2358//2357 2354//2356 +f 2360//2360 2359//2359 2355//2358 +f 2361//2361 2364//2364 2360//2360 +f 2362//2362 2361//2361 2357//2354 +f 2363//2363 2362//2362 2358//2357 +f 2364//2364 2363//2363 2359//2359 +f 2365//2365 2368//2368 2364//2364 +f 2361//2361 2362//2362 2365//2365 +f 2367//2367 2366//2366 2362//2362 +f 2363//2363 2364//2364 2367//2367 +f 2368//2368 2365//2365 2372//2370 +f 2365//2365 2366//2366 2369//2369 +f 2366//2366 2367//2367 2370//2371 +f 2367//2367 2368//2368 2371//2372 +f 2376//2380 2373//2373 2380//2375 +f 2378//2377 2377//2374 2373//2373 +f 2374//2376 2375//2378 2378//2377 +f 2380//2375 2379//2379 2375//2378 +f 2380//2375 2377//2374 2384//2382 +f 2377//2374 2378//2377 2381//2381 +f 2378//2377 2379//2379 2382//2383 +f 2379//2379 2380//2375 2383//2384 +f 2388//2392 2385//2385 2392//2387 +f 2385//2385 2386//2388 2389//2386 +f 2386//2388 2387//2390 2390//2389 +f 2387//2390 2388//2392 2391//2391 +f 2397//2394 2400//2400 2396//2395 +f 2398//2397 2397//2394 2393//2393 +f 2399//2399 2398//2397 2394//2396 +f 2400//2400 2399//2399 2395//2398 +f 2400//2400 2397//2394 2404//2402 +f 2397//2394 2398//2397 2401//2401 +f 2398//2397 2399//2399 2402//2403 +f 2399//2399 2400//2400 2403//2404 +f 2405//2405 2408//2408 2404//2402 +f 2406//2406 2405//2405 2401//2401 +f 2407//2407 2406//2406 2402//2403 +f 2408//2408 2407//2407 2403//2404 +f 2408//2408 2405//2405 2412//2410 +f 2405//2405 2406//2406 2409//2409 +f 2406//2406 2407//2407 2410//2411 +f 2407//2407 2408//2408 2411//2412 +f 2413//2413 2416//2416 2412//2410 +f 2414//2414 2413//2413 2409//2409 +f 2415//2415 2414//2414 2410//2411 +f 2416//2416 2415//2415 2411//2412 +f 2416//2416 2413//2413 2420//2418 +f 2413//2413 2414//2414 2417//2417 +f 2414//2414 2415//2415 2418//2419 +f 2415//2415 2416//2416 2419//2420 +f 2424//2428 2421//2421 2428//2423 +f 2421//2421 2422//2424 2425//2422 +f 2422//2424 2423//2426 2426//2425 +f 2423//2426 2424//2428 2427//2427 +f 2429//2429 2432//2432 2428//2423 +f 2425//2422 2426//2425 2429//2429 +f 2431//2431 2430//2430 2426//2425 +f 2427//2427 2428//2423 2431//2431 +f 2432//2432 2429//2429 2436//2434 +f 2429//2429 2430//2430 2433//2433 +f 2430//2430 2431//2431 2434//2435 +f 2431//2431 2432//2432 2435//2436 +f 2440//2444 2437//2437 2444//2439 +f 2437//2437 2438//2440 2441//2438 +f 2438//2440 2439//2442 2442//2441 +f 2439//2442 2440//2444 2443//2443 +f 2449//2446 2452//2452 2448//2447 +f 2450//2449 2449//2446 2445//2445 +f 2451//2451 2450//2449 2446//2448 +f 2452//2452 2451//2451 2447//2450 +f 2452//2452 2449//2446 2456//2454 +f 2449//2446 2450//2449 2453//2453 +f 2450//2449 2451//2451 2454//2455 +f 2451//2451 2452//2452 2455//2456 +f 2457//2457 2460//2460 2456//2454 +f 2458//2458 2457//2457 2453//2453 +f 2459//2459 2458//2458 2454//2455 +f 2460//2460 2459//2459 2455//2456 +f 2460//2460 2457//2457 2464//2462 +f 2457//2457 2458//2458 2461//2461 +f 2458//2458 2459//2459 2462//2463 +f 2459//2459 2460//2460 2463//2464 +f 2465//2465 2468//2468 2464//2462 +f 2466//2466 2465//2465 2461//2461 +f 2467//2467 2466//2466 2462//2463 +f 2468//2468 2467//2467 2463//2464 +f 2468//2468 2465//2465 2472//2470 +f 2465//2465 2466//2466 2469//2469 +f 2466//2466 2467//2467 2470//2471 +f 2467//2467 2468//2468 2471//2472 +f 2472//2470 2469//2469 2476//2474 +f 2469//2469 2470//2471 2473//2473 +f 2470//2471 2471//2472 2474//2475 +f 2471//2472 2472//2470 2475//2476 +f 2480//2484 2477//2477 2484//2479 +f 2477//2477 2478//2480 2481//2478 +f 2478//2480 2479//2482 2482//2481 +f 2479//2482 2480//2484 2483//2483 +f 2485//2485 2488//2488 2484//2479 +f 2486//2486 2485//2485 2481//2478 +f 2487//2487 2486//2486 2482//2481 +f 2488//2488 2487//2487 2483//2483 +f 2488//2488 2485//2485 2492//2490 +f 2490//2491 2489//2489 2485//2485 +f 2486//2486 2487//2487 2490//2491 +f 2492//2490 2491//2492 2487//2487 +f 2492//2490 2489//2489 2496//2494 +f 2489//2489 2490//2491 2493//2493 +f 2490//2491 2491//2492 2494//2495 +f 2491//2492 2492//2490 2495//2496 +f 2500//2504 2497//2497 2504//2499 +f 2497//2497 2498//2500 2501//2498 +f 2498//2500 2499//2502 2502//2501 +f 2499//2502 2500//2504 2503//2503 +f 2504//2499 2501//2498 2508//2506 +f 2501//2498 2502//2501 2505//2505 +f 2502//2501 2503//2503 2506//2507 +f 2503//2503 2504//2499 2507//2508 +f 2512//2516 2509//2509 2516//2511 +f 2509//2509 2510//2512 2513//2510 +f 2510//2512 2511//2514 2514//2513 +f 2511//2514 2512//2516 2515//2515 +f 2520//2524 2517//2517 2524//2519 +f 2517//2517 2518//2520 2521//2518 +f 2518//2520 2519//2522 2522//2521 +f 2519//2522 2520//2524 2523//2523 +f 2524//2519 2521//2518 2528//2526 +f 2521//2518 2522//2521 2525//2525 +f 2522//2521 2523//2523 2526//2527 +f 2523//2523 2524//2519 2527//2528 +f 2529//2529 2532//2532 2528//2526 +f 2530//2530 2529//2529 2525//2525 +f 2531//2531 2530//2530 2526//2527 +f 2532//2532 2531//2531 2527//2528 +f 2532//2532 2529//2529 2536//2534 +f 2529//2529 2530//2530 2533//2533 +f 2530//2530 2531//2531 2534//2535 +f 2531//2531 2532//2532 2535//2536 +f 2537//2537 2540//2540 2536//2534 +f 2538//2538 2537//2537 2533//2533 +f 2539//2539 2538//2538 2534//2535 +f 2540//2540 2539//2539 2535//2536 +f 2540//2540 2537//2537 2544//2542 +f 2537//2537 2538//2538 2541//2541 +f 2538//2538 2539//2539 2542//2543 +f 2539//2539 2540//2540 2543//2544 +f 2549//2546 2552//2552 2548//2547 +f 2550//2549 2549//2546 2545//2545 +f 2551//2551 2550//2549 2546//2548 +f 2552//2552 2551//2551 2547//2550 +f 2552//2552 2549//2546 2556//2554 +f 2549//2546 2550//2549 2553//2553 +f 2550//2549 2551//2551 2554//2555 +f 2556//2554 2555//2556 2551//2551 +f 2556//2554 2553//2553 2560//2558 +f 2553//2553 2554//2555 2557//2557 +f 2554//2555 2555//2556 2558//2559 +f 2555//2556 2556//2554 2559//2560 +f 2564//2568 2561//2561 2568//2563 +f 2561//2561 2562//2564 2565//2562 +f 2562//2564 2563//2566 2566//2565 +f 2563//2566 2564//2568 2567//2567 +f 2572//2576 2569//2569 2576//2571 +f 2569//2569 2570//2572 2573//2570 +f 2570//2572 2571//2574 2574//2573 +f 2571//2574 2572//2576 2575//2575 +f 2577//2577 2580//2580 2576//2571 +f 2578//2578 2577//2577 2573//2570 +f 2579//2579 2578//2578 2574//2573 +f 2580//2580 2579//2579 2575//2575 +f 2580//2580 2577//2577 2584//2582 +f 2577//2577 2578//2578 2581//2581 +f 2578//2578 2579//2579 2582//2583 +f 2579//2579 2580//2580 2583//2584 +f 2585//2585 2588//2588 2584//2582 +f 2586//2586 2585//2585 2581//2581 +f 2587//2587 2586//2586 2582//2583 +f 2588//2588 2587//2587 2583//2584 +f 2588//2588 2585//2585 2592//2590 +f 2585//2585 2586//2586 2589//2589 +f 2586//2586 2587//2587 2590//2591 +f 2587//2587 2588//2588 2591//2592 +f 2592//2590 2589//2589 2596//2594 +f 2589//2589 2590//2591 2593//2593 +f 2590//2591 2591//2592 2594//2595 +f 2591//2592 2592//2590 2595//2596 +f 2596//2594 2593//2593 2600//2598 +f 2593//2593 2594//2595 2597//2597 +f 2594//2595 2595//2596 2598//2599 +f 2595//2596 2596//2594 2599//2600 +f 2605//2602 2608//2608 2604//2603 +f 2606//2605 2605//2602 2601//2601 +f 2607//2607 2606//2605 2602//2604 +f 2608//2608 2607//2607 2603//2606 +f 2609//2609 2612//2612 2608//2608 +f 2610//2610 2609//2609 2605//2602 +f 2611//2611 2610//2610 2606//2605 +f 2612//2612 2611//2611 2607//2607 +f 2613//2613 2616//2616 2612//2612 +f 2609//2609 2610//2610 2613//2613 +f 2615//2615 2614//2614 2610//2610 +f 2611//2611 2612//2612 2615//2615 +f 2616//2616 2613//2613 2620//2618 +f 2613//2613 2614//2614 2617//2617 +f 2614//2614 2615//2615 2618//2619 +f 2615//2615 2616//2616 2619//2620 +f 2624//2628 2621//2621 2628//2623 +f 2626//2625 2625//2622 2621//2621 +f 2622//2624 2623//2626 2626//2625 +f 2628//2623 2627//2627 2623//2626 +f 2628//2623 2625//2622 2632//2630 +f 2625//2622 2626//2625 2629//2629 +f 2626//2625 2627//2627 2630//2631 +f 2627//2627 2628//2623 2631//2632 +f 2636//2640 2633//2633 2640//2635 +f 2633//2633 2634//2636 2637//2634 +f 2634//2636 2635//2638 2638//2637 +f 2635//2638 2636//2640 2639//2639 +f 2645//2642 2648//2648 2644//2643 +f 2646//2645 2645//2642 2641//2641 +f 2642//2644 2643//2646 2646//2645 +f 2648//2648 2647//2647 2643//2646 +f 2649//2649 2652//2652 2648//2648 +f 2645//2642 2646//2645 2649//2649 +f 2651//2651 2650//2650 2646//2645 +f 2647//2647 2648//2648 2651//2651 +f 2653//2653 2656//2656 2652//2652 +f 2649//2649 2650//2650 2653//2653 +f 2655//2655 2654//2654 2650//2650 +f 2651//2651 2652//2652 2655//2655 +f 2657//2657 2660//2660 2656//2656 +f 2653//2653 2654//2654 2657//2657 +f 2659//2659 2658//2658 2654//2654 +f 2655//2655 2656//2656 2659//2659 +f 2660//2660 2657//2657 2664//2662 +f 2662//2663 2661//2661 2657//2657 +f 2658//2658 2659//2659 2662//2663 +f 2664//2662 2663//2664 2659//2659 +f 2664//2662 2661//2661 2668//2666 +f 2661//2661 2662//2663 2665//2665 +f 2662//2663 2663//2664 2666//2667 +f 2663//2664 2664//2662 2667//2668 +f 2673//2670 2676//2676 2672//2671 +f 2669//2669 2670//2672 2673//2670 +f 2675//2675 2674//2673 2670//2672 +f 2671//2674 2672//2671 2675//2675 +f 2677//2677 2680//2680 2676//2676 +f 2673//2670 2674//2673 2677//2677 +f 2679//2679 2678//2678 2674//2673 +f 2675//2675 2676//2676 2679//2679 +f 2680//2680 2677//2677 2684//2682 +f 2677//2677 2678//2678 2681//2681 +f 2678//2678 2679//2679 2682//2683 +f 2679//2679 2680//2680 2683//2684 +f 2688//2692 2685//2685 2692//2687 +f 2685//2685 2686//2688 2689//2686 +f 2686//2688 2687//2690 2690//2689 +f 2687//2690 2688//2692 2691//2691 +f 2697//2694 2700//2700 2696//2695 +f 2698//2697 2697//2694 2693//2693 +f 2699//2699 2698//2697 2694//2696 +f 2700//2700 2699//2699 2695//2698 +f 2700//2700 2697//2694 2704//2702 +f 2697//2694 2698//2697 2701//2701 +f 2698//2697 2699//2699 2702//2703 +f 2699//2699 2700//2700 2703//2704 +f 2705//2705 2708//2708 2704//2702 +f 2706//2706 2705//2705 2701//2701 +f 2707//2707 2706//2706 2702//2703 +f 2708//2708 2707//2707 2703//2704 +f 2708//2708 2705//2705 2712//2710 +f 2705//2705 2706//2706 2709//2709 +f 2706//2706 2707//2707 2710//2711 +f 2707//2707 2708//2708 2711//2712 +f 2713//2713 2716//2716 2712//2710 +f 2714//2714 2713//2713 2709//2709 +f 2715//2715 2714//2714 2710//2711 +f 2716//2716 2715//2715 2711//2712 +f 2716//2716 2713//2713 2720//2718 +f 2713//2713 2714//2714 2717//2717 +f 2714//2714 2715//2715 2718//2719 +f 2715//2715 2716//2716 2719//2720 +f 2720//2718 2717//2717 2724//2722 +f 2717//2717 2718//2719 2721//2721 +f 2718//2719 2719//2720 2722//2723 +f 2719//2720 2720//2718 2723//2724 +f 2728//2732 2725//2725 2732//2727 +f 2730//2729 2729//2726 2725//2725 +f 2726//2728 2727//2730 2730//2729 +f 2732//2727 2731//2731 2727//2730 +f 2733//2733 2736//2736 2732//2727 +f 2729//2726 2730//2729 2733//2733 +f 2735//2735 2734//2734 2730//2729 +f 2731//2731 2732//2727 2735//2735 +f 2736//2736 2733//2733 2740//2738 +f 2733//2733 2734//2734 2737//2737 +f 2734//2734 2735//2735 2738//2739 +f 2735//2735 2736//2736 2739//2740 +f 2740//2738 2737//2737 2744//2742 +f 2737//2737 2738//2739 2741//2741 +f 2738//2739 2739//2740 2742//2743 +f 2739//2740 2740//2738 2743//2744 +f 2749//2746 2752//2752 2748//2747 +f 2750//2749 2749//2746 2745//2745 +f 2751//2751 2750//2749 2746//2748 +f 2752//2752 2751//2751 2747//2750 +f 2752//2752 2749//2746 2756//2754 +f 2749//2746 2750//2749 2753//2753 +f 2750//2749 2751//2751 2754//2755 +f 2751//2751 2752//2752 2755//2756 +f 2760//2764 2757//2757 2764//2759 +f 2757//2757 2758//2760 2761//2758 +f 2758//2760 2759//2762 2762//2761 +f 2759//2762 2760//2764 2763//2763 +f 2768//2772 2765//2765 2772//2767 +f 2765//2765 2766//2768 2769//2766 +f 2766//2768 2767//2770 2770//2769 +f 2767//2770 2768//2772 2771//2771 +f 2773//2773 2776//2776 2772//2767 +f 2774//2774 2773//2773 2769//2766 +f 2775//2775 2774//2774 2770//2769 +f 2776//2776 2775//2775 2771//2771 +f 2776//2776 2773//2773 2780//2778 +f 2773//2773 2774//2774 2777//2777 +f 2774//2774 2775//2775 2778//2779 +f 2775//2775 2776//2776 2779//2780 +f 2781//2781 2784//2784 2780//2778 +f 2782//2782 2781//2781 2777//2777 +f 2783//2783 2782//2782 2778//2779 +f 2784//2784 2783//2783 2779//2780 +f 2784//2784 2781//2781 2788//2786 +f 2781//2781 2782//2782 2785//2785 +f 2782//2782 2783//2783 2786//2787 +f 2783//2783 2784//2784 2787//2788 +f 2788//2786 2785//2785 2792//2790 +f 2785//2785 2786//2787 2789//2789 +f 2786//2787 2787//2788 2790//2791 +f 2787//2788 2788//2786 2791//2792 +f 2797//2794 2800//2800 2796//2795 +f 2793//2793 2794//2796 2797//2794 +f 2799//2799 2798//2797 2794//2796 +f 2795//2798 2796//2795 2799//2799 +f 2800//2800 2797//2794 2804//2802 +f 2802//2803 2801//2801 2797//2794 +f 2798//2797 2799//2799 2802//2803 +f 2804//2802 2803//2804 2799//2799 +f 2804//2802 2801//2801 2808//2806 +f 2801//2801 2802//2803 2805//2805 +f 2802//2803 2803//2804 2806//2807 +f 2803//2804 2804//2802 2807//2808 +f 2812//2816 2809//2809 2816//2811 +f 2809//2809 2810//2812 2813//2810 +f 2810//2812 2811//2814 2814//2813 +f 2811//2814 2812//2816 2815//2815 +f 2821//2818 2824//2824 2820//2819 +f 2817//2817 2818//2820 2821//2818 +f 2823//2823 2822//2821 2818//2820 +f 2819//2822 2820//2819 2823//2823 +f 2824//2824 2821//2818 2828//2826 +f 2826//2827 2825//2825 2821//2818 +f 2822//2821 2823//2823 2826//2827 +f 2828//2826 2827//2828 2823//2823 +f 2828//2826 2825//2825 2832//2830 +f 2830//2831 2829//2829 2825//2825 +f 2826//2827 2827//2828 2830//2831 +f 2832//2830 2831//2832 2827//2828 +f 2833//2833 2836//2836 2832//2830 +f 2829//2829 2830//2831 2833//2833 +f 2835//2835 2834//2834 2830//2831 +f 2831//2832 2832//2830 2835//2835 +f 2836//2836 2833//2833 2840//2838 +f 2838//2839 2837//2837 2833//2833 +f 2834//2834 2835//2835 2838//2839 +f 2840//2838 2839//2840 2835//2835 +f 2841//2841 2844//2844 2840//2838 +f 2837//2837 2838//2839 2841//2841 +f 2843//2843 2842//2842 2838//2839 +f 2839//2840 2840//2838 2843//2843 +f 2844//2844 2841//2841 2848//2846 +f 2841//2841 2842//2842 2845//2845 +f 2842//2842 2843//2843 2846//2847 +f 2843//2843 2844//2844 2847//2848 +f 2853//2850 2856//2856 2852//2851 +f 2854//2853 2853//2850 2849//2849 +f 2855//2855 2854//2853 2850//2852 +f 2856//2856 2855//2855 2851//2854 +f 2856//2856 2853//2850 2860//2858 +f 2853//2850 2854//2853 2857//2857 +f 2854//2853 2855//2855 2858//2859 +f 2855//2855 2856//2856 2859//2860 +f 2860//2858 2857//2857 2864//2862 +f 2862//2863 2861//2861 2857//2857 +f 2858//2859 2859//2860 2862//2863 +f 2864//2862 2863//2864 2859//2860 +f 2864//2862 2861//2861 2868//2866 +f 2861//2861 2862//2863 2865//2865 +f 2862//2863 2863//2864 2866//2867 +f 2863//2864 2864//2862 2867//2868 +f 2873//2870 2876//2876 2872//2871 +f 2869//2869 2870//2872 2873//2870 +f 2875//2875 2874//2873 2870//2872 +f 2871//2874 2872//2871 2875//2875 +f 2876//2876 2873//2870 2880//2878 +f 2873//2870 2874//2873 2877//2877 +f 2874//2873 2875//2875 2878//2879 +f 2875//2875 2876//2876 2879//2880 +f 2884//2888 2881//2881 2888//2883 +f 2881//2881 2882//2884 2885//2882 +f 2882//2884 2883//2886 2886//2885 +f 2883//2886 2884//2888 2887//2887 +f 2893//2890 2896//2896 2892//2891 +f 2894//2893 2893//2890 2889//2889 +f 2895//2895 2894//2893 2890//2892 +f 2896//2896 2895//2895 2891//2894 +f 2896//2896 2893//2890 2900//2898 +f 2893//2890 2894//2893 2897//2897 +f 2894//2893 2895//2895 2898//2899 +f 2895//2895 2896//2896 2899//2900 +f 2901//2901 2904//2904 2900//2898 +f 2902//2902 2901//2901 2897//2897 +f 2903//2903 2902//2902 2898//2899 +f 2904//2904 2903//2903 2899//2900 +f 2904//2904 2901//2901 2908//2906 +f 2901//2901 2902//2902 2905//2905 +f 2902//2902 2903//2903 2906//2907 +f 2903//2903 2904//2904 2907//2908 +f 2909//2909 2912//2912 2908//2906 +f 2910//2910 2909//2909 2905//2905 +f 2911//2911 2910//2910 2906//2907 +f 2912//2912 2911//2911 2907//2908 +f 2912//2912 2909//2909 2916//2914 +f 2909//2909 2910//2910 2913//2913 +f 2910//2910 2911//2911 2914//2915 +f 2911//2911 2912//2912 2915//2916 +f 2921//2918 2924//2924 2920//2919 +f 2922//2921 2921//2918 2917//2917 +f 2923//2923 2922//2921 2918//2920 +f 2924//2924 2923//2923 2919//2922 +f 2924//2924 2921//2918 2928//2926 +f 2921//2918 2922//2921 2925//2925 +f 2922//2921 2923//2923 2926//2927 +f 2923//2923 2924//2924 2927//2928 +f 2928//2926 2925//2925 2932//2930 +f 2925//2925 2926//2927 2929//2929 +f 2926//2927 2927//2928 2930//2931 +f 2927//2928 2928//2926 2931//2932 +f 2936//2940 2933//2933 2940//2935 +f 2933//2933 2934//2936 2937//2934 +f 2934//2936 2935//2938 2938//2937 +f 2935//2938 2936//2940 2939//2939 +f 2945//2942 2948//2948 2944//2943 +f 2946//2945 2945//2942 2941//2941 +f 2947//2947 2946//2945 2942//2944 +f 2948//2948 2947//2947 2943//2946 +f 2948//2948 2945//2942 2952//2950 +f 2945//2942 2946//2945 2949//2949 +f 2946//2945 2947//2947 2950//2951 +f 2947//2947 2948//2948 2951//2952 +f 2953//2953 2956//2956 2952//2950 +f 2954//2954 2953//2953 2949//2949 +f 2955//2955 2954//2954 2950//2951 +f 2956//2956 2955//2955 2951//2952 +f 2956//2956 2953//2953 2960//2958 +f 2953//2953 2954//2954 2957//2957 +f 2954//2954 2955//2955 2958//2959 +f 2955//2955 2956//2956 2959//2960 +f 2961//2961 2964//2964 2960//2958 +f 2962//2962 2961//2961 2957//2957 +f 2963//2963 2962//2962 2958//2959 +f 2964//2964 2963//2963 2959//2960 +f 2965//2965 2968//2968 2964//2964 +f 2966//2966 2965//2965 2961//2961 +f 2967//2967 2966//2966 2962//2962 +f 2968//2968 2967//2967 2963//2963 +f 2968//2968 2965//2965 2972//2970 +f 2965//2965 2966//2966 2969//2969 +f 2966//2966 2967//2967 2970//2971 +f 2967//2967 2968//2968 2971//2972 +f 2976//2980 2973//2973 2980//2975 +f 2978//2977 2977//2974 2973//2973 +f 2974//2976 2975//2978 2978//2977 +f 2980//2975 2979//2979 2975//2978 +f 2980//2975 2977//2974 2984//2982 +f 2982//2983 2981//2981 2977//2974 +f 2978//2977 2979//2979 2982//2983 +f 2984//2982 2983//2984 2979//2979 +f 2984//2982 2981//2981 2988//2986 +f 2981//2981 2982//2983 2985//2985 +f 2982//2983 2983//2984 2986//2987 +f 2983//2984 2984//2982 2987//2988 +f 2988//2986 2985//2985 2992//2990 +f 2985//2985 2986//2987 2989//2989 +f 2986//2987 2987//2988 2990//2991 +f 2987//2988 2988//2986 2991//2992 +f 2997//2994 3000//3000 2996//2995 +f 2993//2993 2994//2996 2997//2994 +f 2999//2999 2998//2997 2994//2996 +f 2995//2998 2996//2995 2999//2999 +f 3000//3000 2997//2994 3004//3002 +f 2997//2994 2998//2997 3001//3001 +f 2998//2997 2999//2999 3002//3003 +f 2999//2999 3000//3000 3003//3004 +f 3008//3012 3005//3005 3012//3007 +f 3005//3005 3006//3008 3009//3006 +f 3006//3008 3007//3010 3010//3009 +f 3007//3010 3008//3012 3011//3011 +f 3017//3014 3020//3020 3016//3015 +f 3013//3013 3014//3016 3017//3014 +f 3019//3019 3018//3017 3014//3016 +f 3015//3018 3016//3015 3019//3019 +f 3020//3020 3017//3014 3024//3022 +f 3022//3023 3021//3021 3017//3014 +f 3018//3017 3019//3019 3022//3023 +f 3024//3022 3023//3024 3019//3019 +f 3025//3025 3028//3028 3024//3022 +f 3021//3021 3022//3023 3025//3025 +f 3027//3027 3026//3026 3022//3023 +f 3023//3024 3024//3022 3027//3027 +f 3028//3028 3025//3025 3032//3030 +f 3030//3031 3029//3029 3025//3025 +f 3026//3026 3027//3027 3030//3031 +f 3032//3030 3031//3032 3027//3027 +f 3032//3030 3029//3029 3036//3034 +f 3034//3035 3033//3033 3029//3029 +f 3030//3031 3031//3032 3034//3035 +f 3036//3034 3035//3036 3031//3032 +f 3036//3034 3033//3033 3040//3038 +f 3033//3033 3034//3035 3037//3037 +f 3034//3035 3035//3036 3038//3039 +f 3035//3036 3036//3034 3039//3040 +f 3045//3042 3048//3048 3044//3043 +f 3041//3041 3042//3044 3045//3042 +f 3047//3047 3046//3045 3042//3044 +f 3043//3046 3044//3043 3047//3047 +f 3048//3048 3045//3042 3052//3050 +f 3050//3051 3049//3049 3045//3042 +f 3046//3045 3047//3047 3050//3051 +f 3052//3050 3051//3052 3047//3047 +f 3052//3050 3049//3049 3056//3054 +f 3049//3049 3050//3051 3053//3053 +f 3050//3051 3051//3052 3054//3055 +f 3051//3052 3052//3050 3055//3056 +f 3060//3064 3057//3057 3064//3059 +f 3057//3057 3058//3060 3061//3058 +f 3058//3060 3059//3062 3062//3061 +f 3059//3062 3060//3064 3063//3063 +f 3069//3066 3072//3072 3068//3067 +f 3070//3069 3069//3066 3065//3065 +f 3071//3071 3070//3069 3066//3068 +f 3072//3072 3071//3071 3067//3070 +f 3073//3073 3076//3076 3072//3072 +f 3074//3074 3073//3073 3069//3066 +f 3075//3075 3074//3074 3070//3069 +f 3076//3076 3075//3075 3071//3071 +f 3076//3076 3073//3073 3080//3078 +f 3073//3073 3074//3074 3077//3077 +f 3074//3074 3075//3075 3078//3079 +f 3075//3075 3076//3076 3079//3080 +f 3080//3078 3077//3077 3084//3082 +f 3077//3077 3078//3079 3081//3081 +f 3078//3079 3079//3080 3082//3083 +f 3079//3080 3080//3078 3083//3084 +f 3085//3085 3088//3088 3084//3082 +f 3086//3086 3085//3085 3081//3081 +f 3087//3087 3086//3086 3082//3083 +f 3088//3088 3087//3087 3083//3084 +f 3088//3088 3085//3085 3092//3090 +f 3085//3085 3086//3086 3089//3089 +f 3086//3086 3087//3087 3090//3091 +f 3087//3087 3088//3088 3091//3092 +f 3092//3090 3089//3089 3096//3094 +f 3089//3089 3090//3091 3093//3093 +f 3090//3091 3091//3092 3094//3095 +f 3091//3092 3092//3090 3095//3096 +f 3101//3098 3104//3104 3100//3099 +f 3102//3101 3101//3098 3097//3097 +f 3103//3103 3102//3101 3098//3100 +f 3104//3104 3103//3103 3099//3102 +f 3105//3105 3108//3108 3104//3104 +f 3106//3106 3105//3105 3101//3098 +f 3107//3107 3106//3106 3102//3101 +f 3108//3108 3107//3107 3103//3103 +f 3108//3108 3105//3105 3112//3110 +f 3110//3111 3109//3109 3105//3105 +f 3106//3106 3107//3107 3110//3111 +f 3112//3110 3111//3112 3107//3107 +f 3112//3110 3109//3109 3116//3114 +f 3109//3109 3110//3111 3113//3113 +f 3110//3111 3111//3112 3114//3115 +f 3111//3112 3112//3110 3115//3116 +f 3120//3124 3117//3117 3124//3119 +f 3122//3121 3121//3118 3117//3117 +f 3118//3120 3119//3122 3122//3121 +f 3124//3119 3123//3123 3119//3122 +f 3124//3119 3121//3118 3128//3126 +f 3121//3118 3122//3121 3125//3125 +f 3122//3121 3123//3123 3126//3127 +f 3123//3123 3124//3119 3127//3128 +f 3132//3136 3129//3129 3136//3131 +f 3129//3129 3130//3132 3133//3130 +f 3130//3132 3131//3134 3134//3133 +f 3131//3134 3132//3136 3135//3135 +f 3140//3144 3137//3137 3144//3139 +f 3137//3137 3138//3140 3141//3138 +f 3138//3140 3139//3142 3142//3141 +f 3139//3142 3140//3144 3143//3143 +f 3144//3139 3141//3138 3148//3146 +f 3141//3138 3142//3141 3145//3145 +f 3142//3141 3143//3143 3146//3147 +f 3143//3143 3144//3139 3147//3148 +f 3148//3146 3145//3145 3152//3150 +f 3145//3145 3146//3147 3149//3149 +f 3146//3147 3147//3148 3150//3151 +f 3147//3148 3148//3146 3151//3152 +f 3153//3153 3156//3156 3152//3150 +f 3149//3149 3150//3151 3153//3153 +f 3155//3155 3154//3154 3150//3151 +f 3151//3152 3152//3150 3155//3155 +f 3157//3157 3160//3160 3156//3156 +f 3153//3153 3154//3154 3157//3157 +f 3159//3159 3158//3158 3154//3154 +f 3155//3155 3156//3156 3159//3159 +f 3160//3160 3157//3157 3164//3162 +f 3157//3157 3158//3158 3161//3161 +f 3158//3158 3159//3159 3162//3163 +f 3159//3159 3160//3160 3163//3164 +f 3168//3172 3165//3165 3172//3167 +f 3170//3169 3169//3166 3165//3165 +f 3166//3168 3167//3170 3170//3169 +f 3172//3167 3171//3171 3167//3170 +f 3173//3173 3176//3176 3172//3167 +f 3169//3166 3170//3169 3173//3173 +f 3175//3175 3174//3174 3170//3169 +f 3171//3171 3172//3167 3175//3175 +f 3176//3176 3173//3173 3180//3178 +f 3173//3173 3174//3174 3177//3177 +f 3174//3174 3175//3175 3178//3179 +f 3175//3175 3176//3176 3179//3180 +f 3184//3188 3181//3181 3188//3183 +f 3181//3181 3182//3184 3185//3182 +f 3182//3184 3183//3186 3186//3185 +f 3183//3186 3184//3188 3187//3187 +f 3193//3190 3196//3196 3192//3191 +f 3194//3193 3193//3190 3189//3189 +f 3195//3195 3194//3193 3190//3192 +f 3196//3196 3195//3195 3191//3194 +f 3196//3196 3193//3190 3200//3198 +f 3193//3190 3194//3193 3197//3197 +f 3194//3193 3195//3195 3198//3199 +f 3195//3195 3196//3196 3199//3200 +f 3201//3201 3204//3204 3200//3198 +f 3202//3202 3201//3201 3197//3197 +f 3203//3203 3202//3202 3198//3199 +f 3204//3204 3203//3203 3199//3200 +f 3205//3205 3208//3208 3204//3204 +f 3206//3206 3205//3205 3201//3201 +f 3207//3207 3206//3206 3202//3202 +f 3208//3208 3207//3207 3203//3203 +f 3209//3209 3212//3212 3208//3208 +f 3210//3210 3209//3209 3205//3205 +f 3211//3211 3210//3210 3206//3206 +f 3212//3212 3211//3211 3207//3207 +f 3212//3212 3209//3209 3216//3214 +f 3209//3209 3210//3210 3213//3213 +f 3210//3210 3211//3211 3214//3215 +f 3211//3211 3212//3212 3215//3216 +f 3216//3214 3213//3213 3220//3218 +f 3213//3213 3214//3215 3217//3217 +f 3214//3215 3215//3216 3218//3219 +f 3215//3216 3216//3214 3219//3220 +f 3224//3228 3221//3221 3228//3223 +f 3226//3225 3225//3222 3221//3221 +f 3222//3224 3223//3226 3226//3225 +f 3228//3223 3227//3227 3223//3226 +f 3228//3223 3225//3222 3232//3230 +f 3230//3231 3229//3229 3225//3222 +f 3226//3225 3227//3227 3230//3231 +f 3232//3230 3231//3232 3227//3227 +f 3233//3233 3236//3236 3232//3230 +f 3229//3229 3230//3231 3233//3233 +f 3235//3235 3234//3234 3230//3231 +f 3231//3232 3232//3230 3235//3235 +f 3236//3236 3233//3233 3240//3238 +f 3233//3233 3234//3234 3237//3237 +f 3234//3234 3235//3235 3238//3239 +f 3235//3235 3236//3236 3239//3240 +f 3244//3248 3241//3241 3248//3243 +f 3246//3245 3245//3242 3241//3241 +f 3242//3244 3243//3246 3246//3245 +f 3248//3243 3247//3247 3243//3246 +f 3248//3243 3245//3242 3252//3250 +f 3245//3242 3246//3245 3249//3249 +f 3246//3245 3247//3247 3250//3251 +f 3247//3247 3248//3243 3251//3252 +f 3256//3260 3253//3253 3260//3255 +f 3253//3253 3254//3256 3257//3254 +f 3254//3256 3255//3258 3258//3257 +f 3255//3258 3256//3260 3259//3259 +f 3264//3268 3261//3261 3268//3263 +f 3261//3261 3262//3264 3265//3262 +f 3262//3264 3263//3266 3266//3265 +f 3263//3266 3264//3268 3267//3267 +f 3268//3263 3265//3262 3272//3270 +f 3265//3262 3266//3265 3269//3269 +f 3266//3265 3267//3267 3270//3271 +f 3272//3270 3271//3272 3267//3267 +f 3273//3273 3276//3276 3272//3270 +f 3274//3274 3273//3273 3269//3269 +f 3275//3275 3274//3274 3270//3271 +f 3271//3272 3272//3270 3275//3275 +f 3276//3276 3273//3273 3280//3278 +f 3278//3279 3277//3277 3273//3273 +f 3274//3274 3275//3275 3278//3279 +f 3280//3278 3279//3280 3275//3275 +f 3281//3281 3284//3284 3280//3278 +f 3277//3277 3278//3279 3281//3281 +f 3283//3283 3282//3282 3278//3279 +f 3279//3280 3280//3278 3283//3283 +f 3284//3284 3281//3281 3288//3286 +f 3281//3281 3282//3282 3285//3285 +f 3282//3282 3283//3283 3286//3287 +f 3283//3283 3284//3284 3287//3288 +f 3292//3296 3289//3289 3296//3291 +f 3289//3289 3290//3292 3293//3290 +f 3290//3292 3291//3294 3294//3293 +f 3291//3294 3292//3296 3295//3295 +f 3296//3291 3293//3290 3300//3298 +f 3293//3290 3294//3293 3297//3297 +f 3294//3293 3295//3295 3298//3299 +f 3295//3295 3296//3291 3299//3300 +f 3300//3298 3297//3297 3304//3302 +f 3297//3297 3298//3299 3301//3301 +f 3298//3299 3299//3300 3302//3303 +f 3299//3300 3300//3298 3303//3304 +f 3308//3312 3305//3305 3312//3307 +f 3305//3305 3306//3308 3309//3306 +f 3306//3308 3307//3310 3310//3309 +f 3307//3310 3308//3312 3311//3311 +f 3317//3314 3320//3320 3316//3315 +f 3313//3313 3314//3316 3317//3314 +f 3319//3319 3318//3317 3314//3316 +f 3315//3318 3316//3315 3319//3319 +f 3321//3321 3324//3324 3320//3320 +f 3317//3314 3318//3317 3321//3321 +f 3323//3323 3322//3322 3318//3317 +f 3319//3319 3320//3320 3323//3323 +f 3324//3324 3321//3321 3328//3326 +f 3326//3327 3325//3325 3321//3321 +f 3322//3322 3323//3323 3326//3327 +f 3328//3326 3327//3328 3323//3323 +f 3328//3326 3325//3325 3332//3330 +f 3330//3331 3329//3329 3325//3325 +f 3326//3327 3327//3328 3330//3331 +f 3332//3330 3331//3332 3327//3328 +f 3332//3330 3329//3329 3336//3334 +f 3334//3335 3333//3333 3329//3329 +f 3330//3331 3331//3332 3334//3335 +f 3336//3334 3335//3336 3331//3332 +f 3337//3337 3340//3340 3336//3334 +f 3333//3333 3334//3335 3337//3337 +f 3339//3339 3338//3338 3334//3335 +f 3335//3336 3336//3334 3339//3339 +f 3340//3340 3337//3337 3344//3342 +f 3337//3337 3338//3338 3341//3341 +f 3338//3338 3339//3339 3342//3343 +f 3339//3339 3340//3340 3343//3344 +f 3349//3346 3352//3352 3348//3347 +f 3350//3349 3349//3346 3345//3345 +f 3351//3351 3350//3349 3346//3348 +f 3352//3352 3351//3351 3347//3350 +f 3352//3352 3349//3346 3356//3354 +f 3349//3346 3350//3349 3353//3353 +f 3350//3349 3351//3351 3354//3355 +f 3351//3351 3352//3352 3355//3356 +f 3356//3354 3353//3353 3360//3358 +f 3353//3353 3354//3355 3357//3357 +f 3354//3355 3355//3356 3358//3359 +f 3355//3356 3356//3354 3359//3360 +f 3360//3358 3357//3357 3364//3362 +f 3357//3357 3358//3359 3361//3361 +f 3358//3359 3359//3360 3362//3363 +f 3359//3360 3360//3358 3363//3364 +f 3369//3366 3372//3372 3368//3367 +f 3370//3369 3369//3366 3365//3365 +f 3371//3371 3370//3369 3366//3368 +f 3372//3372 3371//3371 3367//3370 +f 3372//3372 3369//3366 3376//3374 +f 3369//3366 3370//3369 3373//3373 +f 3370//3369 3371//3371 3374//3375 +f 3371//3371 3372//3372 3375//3376 +f 3380//3384 3377//3377 3384//3379 +f 3377//3377 3378//3380 3381//3378 +f 3378//3380 3379//3382 3382//3381 +f 3379//3382 3380//3384 3383//3383 +f 3388//3392 3385//3385 3392//3387 +f 3385//3385 3386//3388 3389//3386 +f 3386//3388 3387//3390 3390//3389 +f 3387//3390 3388//3392 3391//3391 +f 3393//3393 3396//3396 3392//3387 +f 3394//3394 3393//3393 3389//3386 +f 3395//3395 3394//3394 3390//3389 +f 3396//3396 3395//3395 3391//3391 +f 3397//3397 3400//3400 3396//3396 +f 3398//3398 3397//3397 3393//3393 +f 3399//3399 3398//3398 3394//3394 +f 3400//3400 3399//3399 3395//3395 +f 3401//3401 3404//3404 3400//3400 +f 3402//3402 3401//3401 3397//3397 +f 3403//3403 3402//3402 3398//3398 +f 3404//3404 3403//3403 3399//3399 +f 3404//3404 3401//3401 3408//3406 +f 3401//3401 3402//3402 3405//3405 +f 3402//3402 3403//3403 3406//3407 +f 3403//3403 3404//3404 3407//3408 +f 3408//3406 3405//3405 3412//3410 +f 3405//3405 3406//3407 3409//3409 +f 3406//3407 3407//3408 3410//3411 +f 3407//3408 3408//3406 3411//3412 +f 3417//3414 3420//3420 3416//3415 +f 3413//3413 3414//3416 3417//3414 +f 3419//3419 3418//3417 3414//3416 +f 3415//3418 3416//3415 3419//3419 +f 3420//3420 3417//3414 3424//3422 +f 3422//3423 3421//3421 3417//3414 +f 3418//3417 3419//3419 3422//3423 +f 3424//3422 3423//3424 3419//3419 +f 3424//3422 3421//3421 3428//3426 +f 3421//3421 3422//3423 3425//3425 +f 3422//3423 3423//3424 3426//3427 +f 3423//3424 3424//3422 3427//3428 +f 3432//3436 3429//3429 3436//3431 +f 3429//3429 3430//3432 3433//3430 +f 3430//3432 3431//3434 3434//3433 +f 3431//3434 3432//3436 3435//3435 +f 3441//3438 3444//3444 3440//3439 +f 3442//3441 3441//3438 3437//3437 +f 3443//3443 3442//3441 3438//3440 +f 3444//3444 3443//3443 3439//3442 +f 3444//3444 3441//3438 3448//3446 +f 3441//3438 3442//3441 3445//3445 +f 3442//3441 3443//3443 3446//3447 +f 3443//3443 3444//3444 3447//3448 +f 3448//3446 3445//3445 3452//3450 +f 3445//3445 3446//3447 3449//3449 +f 3446//3447 3447//3448 3450//3451 +f 3447//3448 3448//3446 3451//3452 +f 3453//3453 3456//3456 3452//3450 +f 3454//3454 3453//3453 3449//3449 +f 3455//3455 3454//3454 3450//3451 +f 3456//3456 3455//3455 3451//3452 +f 3457//3457 3460//3460 3456//3456 +f 3458//3458 3457//3457 3453//3453 +f 3459//3459 3458//3458 3454//3454 +f 3460//3460 3459//3459 3455//3455 +f 3461//3461 3464//3464 3460//3460 +f 3462//3462 3461//3461 3457//3457 +f 3463//3463 3462//3462 3458//3458 +f 3464//3464 3463//3463 3459//3459 +f 3464//3464 3461//3461 3468//3466 +f 3461//3461 3462//3462 3465//3465 +f 3462//3462 3463//3463 3466//3467 +f 3463//3463 3464//3464 3467//3468 +f 3473//3470 3476//3476 3472//3471 +f 3474//3473 3473//3470 3469//3469 +f 3475//3475 3474//3473 3470//3472 +f 3476//3476 3475//3475 3471//3474 +f 3476//3476 3473//3470 3480//3478 +f 3473//3470 3474//3473 3477//3477 +f 3474//3473 3475//3475 3478//3479 +f 3475//3475 3476//3476 3479//3480 +f 3480//3478 3477//3477 3484//3482 +f 3482//3483 3481//3481 3477//3477 +f 3478//3479 3479//3480 3482//3483 +f 3484//3482 3483//3484 3479//3480 +f 3484//3482 3481//3481 3488//3486 +f 3481//3481 3482//3483 3485//3485 +f 3482//3483 3483//3484 3486//3487 +f 3483//3484 3484//3482 3487//3488 +f 3492//3496 3489//3489 3496//3491 +f 3489//3489 3490//3492 3493//3490 +f 3490//3492 3491//3494 3494//3493 +f 3491//3494 3492//3496 3495//3495 +f 3496//3491 3493//3490 3500//3498 +f 3493//3490 3494//3493 3497//3497 +f 3494//3493 3495//3495 3498//3499 +f 3495//3495 3496//3491 3499//3500 +f 3504//3508 3501//3501 3508//3503 +f 3501//3501 3502//3504 3505//3502 +f 3502//3504 3503//3506 3506//3505 +f 3503//3506 3504//3508 3507//3507 +f 3513//3510 3516//3516 3512//3511 +f 3509//3509 3510//3512 3513//3510 +f 3515//3515 3514//3513 3510//3512 +f 3511//3514 3512//3511 3515//3515 +f 3517//3517 3520//3520 3516//3516 +f 3513//3510 3514//3513 3517//3517 +f 3519//3519 3518//3518 3514//3513 +f 3515//3515 3516//3516 3519//3519 +f 3520//3520 3517//3517 3524//3522 +f 3522//3523 3521//3521 3517//3517 +f 3518//3518 3519//3519 3522//3523 +f 3524//3522 3523//3524 3519//3519 +f 3524//3522 3521//3521 3528//3526 +f 3526//3527 3525//3525 3521//3521 +f 3522//3523 3523//3524 3526//3527 +f 3528//3526 3527//3528 3523//3524 +f 3529//3529 3532//3532 3528//3526 +f 3525//3525 3526//3527 3529//3529 +f 3531//3531 3530//3530 3526//3527 +f 3527//3528 3528//3526 3531//3531 +f 3532//3532 3529//3529 3536//3534 +f 3529//3529 3530//3530 3533//3533 +f 3530//3530 3531//3531 3534//3535 +f 3531//3531 3532//3532 3535//3536 +f 3541//3538 3544//3544 3540//3539 +f 3537//3537 3538//3540 3541//3538 +f 3543//3543 3542//3541 3538//3540 +f 3539//3542 3540//3539 3543//3543 +f 3544//3544 3541//3538 3548//3546 +f 3546//3547 3545//3545 3541//3538 +f 3542//3541 3543//3543 3546//3547 +f 3548//3546 3547//3548 3543//3543 +f 3548//3546 3545//3545 3552//3550 +f 3545//3545 3546//3547 3549//3549 +f 3546//3547 3547//3548 3550//3551 +f 3547//3548 3548//3546 3551//3552 +f 3556//3560 3553//3553 3560//3555 +f 3553//3553 3554//3556 3557//3554 +f 3554//3556 3555//3558 3558//3557 +f 3555//3558 3556//3560 3559//3559 +f 3564//3568 3561//3561 3568//3563 +f 3561//3561 3562//3564 3565//3562 +f 3562//3564 3563//3566 3566//3565 +f 3563//3566 3564//3568 3567//3567 +f 3568//3563 3565//3562 3572//3570 +f 3565//3562 3566//3565 3569//3569 +f 3566//3565 3567//3567 3570//3571 +f 3567//3567 3568//3563 3571//3572 +f 3572//3570 3569//3569 3576//3574 +f 3569//3569 3570//3571 3573//3573 +f 3570//3571 3571//3572 3574//3575 +f 3571//3572 3572//3570 3575//3576 +f 3577//3577 3580//3580 3576//3574 +f 3578//3578 3577//3577 3573//3573 +f 3579//3579 3578//3578 3574//3575 +f 3580//3580 3579//3579 3575//3576 +f 3580//3580 3577//3577 3584//3582 +f 3577//3577 3578//3578 3581//3581 +f 3578//3578 3579//3579 3582//3583 +f 3579//3579 3580//3580 3583//3584 +f 3585//3585 3588//3588 3584//3582 +f 3586//3586 3585//3585 3581//3581 +f 3587//3587 3586//3586 3582//3583 +f 3588//3588 3587//3587 3583//3584 +f 3588//3588 3585//3585 3592//3590 +f 3585//3585 3586//3586 3589//3589 +f 3586//3586 3587//3587 3590//3591 +f 3587//3587 3588//3588 3591//3592 +f 3596//3600 3593//3593 3600//3595 +f 3593//3593 3594//3596 3597//3594 +f 3594//3596 3595//3598 3598//3597 +f 3595//3598 3596//3600 3599//3599 +f 3601//3601 3604//3604 3600//3595 +f 3597//3594 3598//3597 3601//3601 +f 3603//3603 3602//3602 3598//3597 +f 3599//3599 3600//3595 3603//3603 +f 3605//3605 3608//3608 3604//3604 +f 3601//3601 3602//3602 3605//3605 +f 3607//3607 3606//3606 3602//3602 +f 3603//3603 3604//3604 3607//3607 +f 3608//3608 3605//3605 3612//3610 +f 3605//3605 3606//3606 3609//3609 +f 3606//3606 3607//3607 3610//3611 +f 3607//3607 3608//3608 3611//3612 +f 3616//3620 3613//3613 3620//3615 +f 3618//3617 3617//3614 3613//3613 +f 3614//3616 3615//3618 3618//3617 +f 3620//3615 3619//3619 3615//3618 +f 3620//3615 3617//3614 3624//3622 +f 3617//3614 3618//3617 3621//3621 +f 3618//3617 3619//3619 3622//3623 +f 3619//3619 3620//3615 3623//3624 +f 3628//3632 3625//3625 3632//3627 +f 3625//3625 3626//3628 3629//3626 +f 3626//3628 3627//3630 3630//3629 +f 3627//3630 3628//3632 3631//3631 +f 3637//3634 3640//3640 3636//3635 +f 3638//3637 3637//3634 3633//3633 +f 3639//3639 3638//3637 3634//3636 +f 3640//3640 3639//3639 3635//3638 +f 3640//3640 3637//3634 3644//3642 +f 3637//3634 3638//3637 3641//3641 +f 3638//3637 3639//3639 3642//3643 +f 3639//3639 3640//3640 3643//3644 +f 3645//3645 3648//3648 3644//3642 +f 3646//3646 3645//3645 3641//3641 +f 3647//3647 3646//3646 3642//3643 +f 3648//3648 3647//3647 3643//3644 +f 3649//3649 3652//3652 3648//3648 +f 3650//3650 3649//3649 3645//3645 +f 3651//3651 3650//3650 3646//3646 +f 3652//3652 3651//3651 3647//3647 +f 3652//3652 3649//3649 3656//3654 +f 3649//3649 3650//3650 3653//3653 +f 3650//3650 3651//3651 3654//3655 +f 3656//3654 3655//3656 3651//3651 +f 3656//3654 3653//3653 3660//3658 +f 3653//3653 3654//3655 3657//3657 +f 3654//3655 3655//3656 3658//3659 +f 3655//3656 3656//3654 3659//3660 +f 3664//3668 3661//3661 3668//3663 +f 3661//3661 3662//3664 3665//3662 +f 3662//3664 3663//3666 3666//3665 +f 3663//3666 3664//3668 3667//3667 +f 3669//3669 3672//3672 3668//3663 +f 3670//3670 3669//3669 3665//3662 +f 3671//3671 3670//3670 3666//3665 +f 3672//3672 3671//3671 3667//3667 +f 3672//3672 3669//3669 3676//3674 +f 3669//3669 3670//3670 3673//3673 +f 3670//3670 3671//3671 3674//3675 +f 3671//3671 3672//3672 3675//3676 +f 3680//3684 3677//3677 3684//3679 +f 3677//3677 3678//3680 3681//3678 +f 3678//3680 3679//3682 3682//3681 +f 3679//3682 3680//3684 3683//3683 +f 3689//3686 3692//3692 3688//3687 +f 3690//3689 3689//3686 3685//3685 +f 3691//3691 3690//3689 3686//3688 +f 3692//3692 3691//3691 3687//3690 +f 3692//3692 3689//3686 3696//3694 +f 3689//3686 3690//3689 3693//3693 +f 3690//3689 3691//3691 3694//3695 +f 3691//3691 3692//3692 3695//3696 +f 3697//3697 3700//3700 3696//3694 +f 3698//3698 3697//3697 3693//3693 +f 3699//3699 3698//3698 3694//3695 +f 3700//3700 3699//3699 3695//3696 +f 3701//3701 3704//3704 3700//3700 +f 3702//3702 3701//3701 3697//3697 +f 3703//3703 3702//3702 3698//3698 +f 3704//3704 3703//3703 3699//3699 +f 3705//3705 3708//3708 3704//3704 +f 3706//3706 3705//3705 3701//3701 +f 3707//3707 3706//3706 3702//3702 +f 3708//3708 3707//3707 3703//3703 +f 3708//3708 3705//3705 3712//3710 +f 3705//3705 3706//3706 3709//3709 +f 3706//3706 3707//3707 3710//3711 +f 3707//3707 3708//3708 3711//3712 +f 3712//3710 3709//3709 3716//3714 +f 3709//3709 3710//3711 3713//3713 +f 3710//3711 3711//3712 3714//3715 +f 3711//3712 3712//3710 3715//3716 +f 3721//3718 3724//3724 3720//3719 +f 3722//3721 3721//3718 3717//3717 +f 3723//3723 3722//3721 3718//3720 +f 3724//3724 3723//3723 3719//3722 +f 3724//3724 3721//3718 3728//3726 +f 3721//3718 3722//3721 3725//3725 +f 3722//3721 3723//3723 3726//3727 +f 3723//3723 3724//3724 3727//3728 +f 3729//3729 3732//3732 3728//3726 +f 3725//3725 3726//3727 3729//3729 +f 3731//3731 3730//3730 3726//3727 +f 3727//3728 3728//3726 3731//3731 +f 3732//3732 3729//3729 3736//3734 +f 3729//3729 3730//3730 3733//3733 +f 3730//3730 3731//3731 3734//3735 +f 3731//3731 3732//3732 3735//3736 +f 3741//3738 3744//3744 3740//3739 +f 3742//3741 3741//3738 3737//3737 +f 3743//3743 3742//3741 3738//3740 +f 3744//3744 3743//3743 3739//3742 +f 3744//3744 3741//3738 3748//3746 +f 3741//3738 3742//3741 3745//3745 +f 3742//3741 3743//3743 3746//3747 +f 3743//3743 3744//3744 3747//3748 +f 3752//3756 3749//3749 3756//3751 +f 3749//3749 3750//3752 3753//3750 +f 3750//3752 3751//3754 3754//3753 +f 3751//3754 3752//3756 3755//3755 +f 3761//3758 3764//3764 3760//3759 +f 3762//3761 3761//3758 3757//3757 +f 3763//3763 3762//3761 3758//3760 +f 3764//3764 3763//3763 3759//3762 +f 3765//3765 3768//3768 3764//3764 +f 3761//3758 3762//3761 3765//3765 +f 3767//3767 3766//3766 3762//3761 +f 3763//3763 3764//3764 3767//3767 +f 3769//3769 3772//3772 3768//3768 +f 3765//3765 3766//3766 3769//3769 +f 3771//3771 3770//3770 3766//3766 +f 3767//3767 3768//3768 3771//3771 +f 3772//3772 3769//3769 3776//3774 +f 3774//3775 3773//3773 3769//3769 +f 3770//3770 3771//3771 3774//3775 +f 3776//3774 3775//3776 3771//3771 +f 3777//3777 3780//3780 3776//3774 +f 3773//3773 3774//3775 3777//3777 +f 3779//3779 3778//3778 3774//3775 +f 3775//3776 3776//3774 3779//3779 +f 3780//3780 3777//3777 3784//3782 +f 3777//3777 3778//3778 3781//3781 +f 3778//3778 3779//3779 3782//3783 +f 3779//3779 3780//3780 3783//3784 +f 3788//3792 3785//3785 3792//3787 +f 3785//3785 3786//3788 3789//3786 +f 3786//3788 3787//3790 3790//3789 +f 3787//3790 3788//3792 3791//3791 +f 3792//3787 3789//3786 3796//3794 +f 3789//3786 3790//3789 3793//3793 +f 3790//3789 3791//3791 3794//3795 +f 3791//3791 3792//3787 3795//3796 +f 3796//3794 3793//3793 3800//3798 +f 3793//3793 3794//3795 3797//3797 +f 3794//3795 3795//3796 3798//3799 +f 3795//3796 3796//3794 3799//3800 +f 3804//3808 3801//3801 3808//3803 +f 3801//3801 3802//3804 3805//3802 +f 3802//3804 3803//3806 3806//3805 +f 3803//3806 3804//3808 3807//3807 +f 3813//3810 3816//3816 3812//3811 +f 3814//3813 3813//3810 3809//3809 +f 3815//3815 3814//3813 3810//3812 +f 3816//3816 3815//3815 3811//3814 +f 3817//3817 3820//3820 3816//3816 +f 3818//3818 3817//3817 3813//3810 +f 3819//3819 3818//3818 3814//3813 +f 3820//3820 3819//3819 3815//3815 +f 3821//3821 3824//3824 3820//3820 +f 3822//3822 3821//3821 3817//3817 +f 3823//3823 3822//3822 3818//3818 +f 3824//3824 3823//3823 3819//3819 +f 3825//3825 3828//3828 3824//3824 +f 3826//3826 3825//3825 3821//3821 +f 3827//3827 3826//3826 3822//3822 +f 3828//3828 3827//3827 3823//3823 +f 3828//3828 3825//3825 3832//3830 +f 3825//3825 3826//3826 3829//3829 +f 3826//3826 3827//3827 3830//3831 +f 3827//3827 3828//3828 3831//3832 +f 3833//3833 3836//3836 3832//3830 +f 3834//3834 3833//3833 3829//3829 +f 3835//3835 3834//3834 3830//3831 +f 3836//3836 3835//3835 3831//3832 +f 3836//3836 3833//3833 3840//3838 +f 3833//3833 3834//3834 3837//3837 +f 3834//3834 3835//3835 3838//3839 +f 3835//3835 3836//3836 3839//3840 +f 3845//3842 3848//3848 3844//3843 +f 3841//3841 3842//3844 3845//3842 +f 3847//3847 3846//3845 3842//3844 +f 3843//3846 3844//3843 3847//3847 +f 3848//3848 3845//3842 3852//3850 +f 3850//3851 3849//3849 3845//3842 +f 3846//3845 3847//3847 3850//3851 +f 3852//3850 3851//3852 3847//3847 +f 3852//3850 3849//3849 3856//3854 +f 3849//3849 3850//3851 3853//3853 +f 3850//3851 3851//3852 3854//3855 +f 3851//3852 3852//3850 3855//3856 +f 3856//3854 3853//3853 3860//3858 +f 3853//3853 3854//3855 3857//3857 +f 3854//3855 3855//3856 3858//3859 +f 3855//3856 3856//3854 3859//3860 +f 3865//3862 3868//3868 3864//3863 +f 3861//3861 3862//3864 3865//3862 +f 3867//3867 3866//3865 3862//3864 +f 3863//3866 3864//3863 3867//3867 +f 3868//3868 3865//3862 3872//3870 +f 3865//3862 3866//3865 3869//3869 +f 3866//3865 3867//3867 3870//3871 +f 3867//3867 3868//3868 3871//3872 +f 3876//3880 3873//3873 3880//3875 +f 3873//3873 3874//3876 3877//3874 +f 3874//3876 3875//3878 3878//3877 +f 3875//3878 3876//3880 3879//3879 diff --git a/examples/16-shadowmaps/varying.def.sc b/examples/16-shadowmaps/varying.def.sc new file mode 100644 index 000000000..a3776d2b0 --- /dev/null +++ b/examples/16-shadowmaps/varying.def.sc @@ -0,0 +1,14 @@ +vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); +vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); +vec3 v_view : TEXCOORD5 = vec3(0.0, 0.0, 0.0); +vec4 v_shadowcoord : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_position : TEXCOORD7 = vec4(0.0, 0.0, 0.0, 0.0); +vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0); +float v_depth : FOG = 0.0; + +vec3 a_position : POSITION; +vec4 a_normal : NORMAL; +vec2 a_texcoord0 : TEXCOORD0; diff --git a/examples/16-shadowmaps/vs_shadowmaps_color.sc b/examples/16-shadowmaps/vs_shadowmaps_color.sc new file mode 100644 index 000000000..8ad767cf8 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color.sc @@ -0,0 +1,13 @@ +$input a_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc new file mode 100644 index 000000000..a898c8ce2 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc @@ -0,0 +1,25 @@ +$input a_position, a_normal +$output v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform mat4 u_lightMtx; +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec3 posOffset = a_position + normal.xyz * u_shadowMapOffset; + v_shadowcoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc new file mode 100644 index 000000000..254e1d767 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc @@ -0,0 +1,36 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_modelView, posOffset); + + vec4 wpos = vec4(mul(u_model[0], posOffset).xyz, 1.0); + v_texcoord1 = mul(u_shadowMapMtx0, wpos); + v_texcoord2 = mul(u_shadowMapMtx1, wpos); + v_texcoord3 = mul(u_shadowMapMtx2, wpos); + v_texcoord4 = mul(u_shadowMapMtx3, wpos); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc new file mode 100644 index 000000000..22a581b8e --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc @@ -0,0 +1,26 @@ +$input a_position, a_normal, a_texcoord0 +$output v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform mat4 u_lightMtx; +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec3 posOffset = a_position + normal.xyz * u_shadowMapOffset; + v_shadowcoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); + v_shadowcoord.z += 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc new file mode 100644 index 000000000..74a0fce88 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc @@ -0,0 +1,41 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_modelView, posOffset); + + vec4 wpos = vec4(mul(u_model[0], posOffset).xyz, 1.0); + v_texcoord1 = mul(u_shadowMapMtx0, wpos); + v_texcoord2 = mul(u_shadowMapMtx1, wpos); + v_texcoord3 = mul(u_shadowMapMtx2, wpos); + v_texcoord4 = mul(u_shadowMapMtx3, wpos); + + v_texcoord1.z += 0.5; + v_texcoord2.z += 0.5; + v_texcoord3.z += 0.5; + v_texcoord4.z += 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc new file mode 100644 index 000000000..6cdb68d77 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc @@ -0,0 +1,40 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_lightMtx, posOffset); + + v_texcoord1 = mul(u_shadowMapMtx0, v_position); + v_texcoord2 = mul(u_shadowMapMtx1, v_position); + v_texcoord3 = mul(u_shadowMapMtx2, v_position); + v_texcoord4 = mul(u_shadowMapMtx3, v_position); + + v_texcoord1.z += 0.5; + v_texcoord2.z += 0.5; + v_texcoord3.z += 0.5; + v_texcoord4.z += 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc new file mode 100644 index 000000000..464bd4664 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc @@ -0,0 +1,35 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_lightMtx, posOffset); + + v_texcoord1 = mul(u_shadowMapMtx0, v_position); + v_texcoord2 = mul(u_shadowMapMtx1, v_position); + v_texcoord3 = mul(u_shadowMapMtx2, v_position); + v_texcoord4 = mul(u_shadowMapMtx3, v_position); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_texture.sc b/examples/16-shadowmaps/vs_shadowmaps_color_texture.sc new file mode 100644 index 000000000..1276312f3 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_texture.sc @@ -0,0 +1,16 @@ +$input a_position, a_texcoord0 +$output v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + v_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_depth.sc b/examples/16-shadowmaps/vs_shadowmaps_depth.sc new file mode 100644 index 000000000..25ccd241f --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_depth.sc @@ -0,0 +1,13 @@ +$input a_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0)); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_hblur.sc b/examples/16-shadowmaps/vs_shadowmaps_hblur.sc new file mode 100644 index 000000000..42d8e2c6a --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_hblur.sc @@ -0,0 +1,32 @@ +$input a_position, a_texcoord0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2011-2013 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_smSamplingParams; +#define u_xOffset u_smSamplingParams.z + +void main() +{ + float offset = u_viewTexel.x*u_xOffset; + + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_texcoord0 = a_texcoord0; + v_texcoord1 = vec4(a_texcoord0.x - offset*1.0, a_texcoord0.y, + a_texcoord0.x + offset*1.0, a_texcoord0.y + ); + v_texcoord2 = vec4(a_texcoord0.x - offset*2.0, a_texcoord0.y, + a_texcoord0.x + offset*2.0, a_texcoord0.y + ); + v_texcoord3 = vec4(a_texcoord0.x - offset*3.0, a_texcoord0.y, + a_texcoord0.x + offset*3.0, a_texcoord0.y + ); + v_texcoord4 = vec4(a_texcoord0.x - offset*4.0, a_texcoord0.y, + a_texcoord0.x + offset*4.0, a_texcoord0.y + ); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_packdepth.sc b/examples/16-shadowmaps/vs_shadowmaps_packdepth.sc new file mode 100644 index 000000000..d6e7c4613 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_packdepth.sc @@ -0,0 +1,15 @@ +$input a_position +$output v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_position = gl_Position; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc b/examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc new file mode 100644 index 000000000..1286d7dca --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc @@ -0,0 +1,15 @@ +$input a_position +$output v_depth + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_depth = gl_Position.z * 0.5 + 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_texture.sc b/examples/16-shadowmaps/vs_shadowmaps_texture.sc new file mode 100644 index 000000000..1276312f3 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_texture.sc @@ -0,0 +1,16 @@ +$input a_position, a_texcoord0 +$output v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + v_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc b/examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc new file mode 100644 index 000000000..1925aa649 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc @@ -0,0 +1,20 @@ +$input a_position, a_normal, a_texcoord0 +$output v_normal, v_view, v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0)); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = mul(u_modelView, vec4(normal.xyz, 0.0)).xyz; + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + v_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc b/examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc new file mode 100644 index 000000000..1276312f3 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc @@ -0,0 +1,16 @@ +$input a_position, a_texcoord0 +$output v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + v_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_vblur.sc b/examples/16-shadowmaps/vs_shadowmaps_vblur.sc new file mode 100644 index 000000000..74915a09e --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_vblur.sc @@ -0,0 +1,32 @@ +$input a_position, a_texcoord0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_smSamplingParams; +#define u_yOffset u_smSamplingParams.w + +void main() +{ + float offset = u_viewTexel.y*u_yOffset; + + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_texcoord0 = a_texcoord0; + v_texcoord1 = vec4(a_texcoord0.x, a_texcoord0.y - offset*1.0, + a_texcoord0.x, a_texcoord0.y + offset*1.0 + ); + v_texcoord2 = vec4(a_texcoord0.x, a_texcoord0.y - offset*2.0, + a_texcoord0.x, a_texcoord0.y + offset*2.0 + ); + v_texcoord3 = vec4(a_texcoord0.x, a_texcoord0.y - offset*3.0, + a_texcoord0.x, a_texcoord0.y + offset*3.0 + ); + v_texcoord4 = vec4(a_texcoord0.x, a_texcoord0.y - offset*4.0, + a_texcoord0.x, a_texcoord0.y + offset*4.0 + ); +} diff --git a/examples/common/entry/entry.cpp b/examples/common/entry/entry.cpp index a2b60ee71..8372abf0f 100644 --- a/examples/common/entry/entry.cpp +++ b/examples/common/entry/entry.cpp @@ -104,6 +104,35 @@ namespace entry return 0; } + int cmdMove(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv) + { + if (_argc > 1) + { + if (0 == strcmp(_argv[1], "forward") ) + { + cameraSetKeyState(CAMERA_KEY_UP, true); + return 0; + } + else if (0 == strcmp(_argv[1], "left") ) + { + cameraSetKeyState(CAMERA_KEY_LEFT, true); + return 0; + } + else if (0 == strcmp(_argv[1], "right") ) + { + cameraSetKeyState(CAMERA_KEY_RIGHT, true); + return 0; + } + else if (0 == strcmp(_argv[1], "backward") ) + { + cameraSetKeyState(CAMERA_KEY_DOWN, true); + return 0; + } + } + + return 1; + } + static const InputBinding s_bindings[] = { { entry::Key::KeyQ, entry::Modifier::LeftCtrl, 1, cmd, "exit" }, @@ -129,7 +158,7 @@ namespace entry int main(int _argc, char** _argv) { - DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME); + //DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME); cmdAdd("mouselock", cmdMouseLock); cmdAdd("graphics", cmdGraphics ); diff --git a/examples/common/fpumath.h b/examples/common/fpumath.h index 68b1cc01b..522fd8b74 100644 --- a/examples/common/fpumath.h +++ b/examples/common/fpumath.h @@ -24,6 +24,16 @@ inline float fmaxf(float _a, float _b) } #endif // BX_COMPILER_MSVC +inline float toRad(float _deg) +{ + return _deg * float(M_PI) / 180.0f; +} + +inline float toDeg(float _rad) +{ + return _rad * 180.0f / float(M_PI); +} + inline float fclamp(float _a, float _min, float _max) { return fminf(fmaxf(_a, _min), _max); diff --git a/examples/runtime/meshes/hollowcube.bin b/examples/runtime/meshes/hollowcube.bin new file mode 100644 index 000000000..81131b486 Binary files /dev/null and b/examples/runtime/meshes/hollowcube.bin differ diff --git a/examples/runtime/meshes/tree.bin b/examples/runtime/meshes/tree.bin new file mode 100644 index 000000000..05631ef7d Binary files /dev/null and b/examples/runtime/meshes/tree.bin differ diff --git a/examples/runtime/meshes/tricube.bin b/examples/runtime/meshes/tricube.bin new file mode 100644 index 000000000..81131b486 Binary files /dev/null and b/examples/runtime/meshes/tricube.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin new file mode 100644 index 000000000..d66f79aaf Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning.bin new file mode 100644 index 000000000..59c31058d Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm.bin new file mode 100644 index 000000000..25cb78341 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_csm.bin new file mode 100644 index 000000000..eb791864a Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_csm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear.bin new file mode 100644 index 000000000..1431106b5 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_csm.bin new file mode 100644 index 000000000..57f010625 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_csm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_omni.bin new file mode 100644 index 000000000..5233d5bbd Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_omni.bin new file mode 100644 index 000000000..941093347 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard.bin new file mode 100644 index 000000000..162c3db65 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_csm.bin new file mode 100644 index 000000000..d2a101a95 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_csm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear.bin new file mode 100644 index 000000000..928ad3d19 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_csm.bin new file mode 100644 index 000000000..353bd6680 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_csm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_omni.bin new file mode 100644 index 000000000..233729e86 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_omni.bin new file mode 100644 index 000000000..a42b93a38 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_omni.bin new file mode 100644 index 000000000..e7e5a789d Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf.bin new file mode 100644 index 000000000..64e30a57c Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_csm.bin new file mode 100644 index 000000000..01c2d4b8e --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_csm.bin @@ -0,0 +1,293 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_smSamplingParams; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + vec2 tmpvar_3; + tmpvar_3 = u_params2.zz; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_4; + tmpvar_4 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_5; + tmpvar_5 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_4, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_4, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_6; + tmpvar_6.x = -(tmpvar_5); + tmpvar_6.y = tmpvar_5; + tmpvar_6.z = -(tmpvar_5); + colorCoverage_2 = tmpvar_6; + vec4 _shadowCoord_7; + _shadowCoord_7 = v_texcoord1; + float _bias_8; + _bias_8 = u_params1.x; + vec4 _pcfParams_9; + _pcfParams_9 = u_smSamplingParams; + vec2 _texelSize_10; + _texelSize_10 = tmpvar_3; + int x_11; + int ynum_12; + int xnum_13; + float result_14; + vec2 tmpvar_15; + tmpvar_15 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_16; + tmpvar_16 = (tmpvar_15.x * tmpvar_15.y); + result_14 = 0.0; + int tmpvar_17; + tmpvar_17 = int(u_smSamplingParams.x); + xnum_13 = tmpvar_17; + ynum_12 = int(u_smSamplingParams.y); + x_11 = -(tmpvar_17); + while (true) { + int y_18; + if ((x_11 > xnum_13)) { + break; + }; + y_18 = -(ynum_12); + while (true) { + if ((y_18 > ynum_12)) { + break; + }; + vec2 tmpvar_19; + tmpvar_19.x = float(x_11); + tmpvar_19.y = float(y_18); + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = ((tmpvar_19 * _pcfParams_9.zw) * _texelSize_10); + vec4 tmpvar_21; + tmpvar_21 = (_shadowCoord_7 + tmpvar_20); + result_14 = (result_14 + float((dot (texture2D (u_shadowMap0, (tmpvar_21.xy / tmpvar_21.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_21.z - _bias_8) / tmpvar_21.w)))); + y_18 = (y_18 + 1); + }; + x_11 = (x_11 + 1); + }; + visibility_1 = (result_14 / max (tmpvar_16, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_22; + tmpvar_22 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_23; + tmpvar_23 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_22, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_22, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_24; + tmpvar_24.x = tmpvar_23; + tmpvar_24.y = tmpvar_23; + tmpvar_24.z = -(tmpvar_23); + colorCoverage_2 = tmpvar_24; + vec4 _shadowCoord_25; + _shadowCoord_25 = v_texcoord2; + float _bias_26; + _bias_26 = u_params1.x; + vec4 _pcfParams_27; + _pcfParams_27 = u_smSamplingParams; + vec2 _texelSize_28; + _texelSize_28 = (u_params2.zz / 2.0); + int x_29; + int ynum_30; + int xnum_31; + float result_32; + vec2 tmpvar_33; + tmpvar_33 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_34; + tmpvar_34 = (tmpvar_33.x * tmpvar_33.y); + result_32 = 0.0; + int tmpvar_35; + tmpvar_35 = int(u_smSamplingParams.x); + xnum_31 = tmpvar_35; + ynum_30 = int(u_smSamplingParams.y); + x_29 = -(tmpvar_35); + while (true) { + int y_36; + if ((x_29 > xnum_31)) { + break; + }; + y_36 = -(ynum_30); + while (true) { + if ((y_36 > ynum_30)) { + break; + }; + vec2 tmpvar_37; + tmpvar_37.x = float(x_29); + tmpvar_37.y = float(y_36); + vec4 tmpvar_38; + tmpvar_38.zw = vec2(0.0, 0.0); + tmpvar_38.xy = ((tmpvar_37 * _pcfParams_27.zw) * _texelSize_28); + vec4 tmpvar_39; + tmpvar_39 = (_shadowCoord_25 + tmpvar_38); + result_32 = (result_32 + float((dot (texture2D (u_shadowMap1, (tmpvar_39.xy / tmpvar_39.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_39.z - _bias_26) / tmpvar_39.w)))); + y_36 = (y_36 + 1); + }; + x_29 = (x_29 + 1); + }; + visibility_1 = (result_32 / max (tmpvar_34, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_40; + tmpvar_40 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_41; + tmpvar_41 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_40, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_40, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_42; + tmpvar_42.x = -(tmpvar_41); + tmpvar_42.y = -(tmpvar_41); + tmpvar_42.z = tmpvar_41; + colorCoverage_2 = tmpvar_42; + vec4 _shadowCoord_43; + _shadowCoord_43 = v_texcoord3; + float _bias_44; + _bias_44 = u_params1.x; + vec4 _pcfParams_45; + _pcfParams_45 = u_smSamplingParams; + vec2 _texelSize_46; + _texelSize_46 = (u_params2.zz / 3.0); + int x_47; + int ynum_48; + int xnum_49; + float result_50; + vec2 tmpvar_51; + tmpvar_51 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_52; + tmpvar_52 = (tmpvar_51.x * tmpvar_51.y); + result_50 = 0.0; + int tmpvar_53; + tmpvar_53 = int(u_smSamplingParams.x); + xnum_49 = tmpvar_53; + ynum_48 = int(u_smSamplingParams.y); + x_47 = -(tmpvar_53); + while (true) { + int y_54; + if ((x_47 > xnum_49)) { + break; + }; + y_54 = -(ynum_48); + while (true) { + if ((y_54 > ynum_48)) { + break; + }; + vec2 tmpvar_55; + tmpvar_55.x = float(x_47); + tmpvar_55.y = float(y_54); + vec4 tmpvar_56; + tmpvar_56.zw = vec2(0.0, 0.0); + tmpvar_56.xy = ((tmpvar_55 * _pcfParams_45.zw) * _texelSize_46); + vec4 tmpvar_57; + tmpvar_57 = (_shadowCoord_43 + tmpvar_56); + result_50 = (result_50 + float((dot (texture2D (u_shadowMap2, (tmpvar_57.xy / tmpvar_57.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_57.z - _bias_44) / tmpvar_57.w)))); + y_54 = (y_54 + 1); + }; + x_47 = (x_47 + 1); + }; + visibility_1 = (result_50 / max (tmpvar_52, 1.0)); + } else { + vec2 tmpvar_58; + tmpvar_58 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_59; + tmpvar_59 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_58, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_58, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_60; + tmpvar_60.x = tmpvar_59; + tmpvar_60.y = -(tmpvar_59); + tmpvar_60.z = -(tmpvar_59); + colorCoverage_2 = tmpvar_60; + vec4 _shadowCoord_61; + _shadowCoord_61 = v_texcoord4; + float _bias_62; + _bias_62 = u_params1.x; + vec4 _pcfParams_63; + _pcfParams_63 = u_smSamplingParams; + vec2 _texelSize_64; + _texelSize_64 = (u_params2.zz / 4.0); + int x_65; + int ynum_66; + int xnum_67; + float result_68; + vec2 tmpvar_69; + tmpvar_69 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_70; + tmpvar_70 = (tmpvar_69.x * tmpvar_69.y); + result_68 = 0.0; + int tmpvar_71; + tmpvar_71 = int(u_smSamplingParams.x); + xnum_67 = tmpvar_71; + ynum_66 = int(u_smSamplingParams.y); + x_65 = -(tmpvar_71); + while (true) { + int y_72; + if ((x_65 > xnum_67)) { + break; + }; + y_72 = -(ynum_66); + while (true) { + if ((y_72 > ynum_66)) { + break; + }; + vec2 tmpvar_73; + tmpvar_73.x = float(x_65); + tmpvar_73.y = float(y_72); + vec4 tmpvar_74; + tmpvar_74.zw = vec2(0.0, 0.0); + tmpvar_74.xy = ((tmpvar_73 * _pcfParams_63.zw) * _texelSize_64); + vec4 tmpvar_75; + tmpvar_75 = (_shadowCoord_61 + tmpvar_74); + result_68 = (result_68 + float((dot (texture2D (u_shadowMap3, (tmpvar_75.xy / tmpvar_75.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_75.z - _bias_62) / tmpvar_75.w)))); + y_72 = (y_72 + 1); + }; + x_65 = (x_65 + 1); + }; + visibility_1 = (result_68 / max (tmpvar_70, 1.0)); + }; + }; + }; + vec3 tmpvar_76; + tmpvar_76 = -(normalize(v_view)); + vec3 tmpvar_77; + float tmpvar_78; + tmpvar_77 = -(normalize(u_lightPosition.xyz)); + tmpvar_78 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_79; + tmpvar_79 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_80; + tmpvar_80 = normalize(tmpvar_79); + tmpvar_77 = tmpvar_80; + float tmpvar_81; + tmpvar_81 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_82; + tmpvar_82 = sqrt(dot (tmpvar_79, tmpvar_79)); + tmpvar_78 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_82)) + ((u_lightAttenuationSpotOuter.z * tmpvar_82) * tmpvar_82)))) * mix (clamp (((max (0.0, dot (-(tmpvar_80), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_81) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_81)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_83; + tmpvar_83 = dot (v_normal, tmpvar_77); + vec2 tmpvar_84; + tmpvar_84.x = tmpvar_83; + tmpvar_84.y = (((float((tmpvar_83 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_83) * v_normal) - tmpvar_77), tmpvar_76)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_85; + tmpvar_85 = (max (tmpvar_84, 0.0) * tmpvar_78); + float tmpvar_86; + tmpvar_86 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_85.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_85.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_86) * tmpvar_86)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear.bin new file mode 100644 index 000000000..c85ba2e17 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin new file mode 100644 index 000000000..881bf86a3 --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin @@ -0,0 +1,321 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_smSamplingParams; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + vec2 tmpvar_3; + tmpvar_3 = u_params2.zz; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_4; + tmpvar_4 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_5; + tmpvar_5 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_4, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_4, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_6; + tmpvar_6.x = -(tmpvar_5); + tmpvar_6.y = tmpvar_5; + tmpvar_6.z = -(tmpvar_5); + colorCoverage_2 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xy = (v_texcoord1.xy / v_texcoord1.w); + tmpvar_7.z = v_texcoord1.z; + vec4 tmpvar_8; + tmpvar_8.xy = u_smSamplingParams.xy; + tmpvar_8.zw = (u_smSamplingParams.zw / v_texcoord1.w); + vec4 _shadowCoord_9; + _shadowCoord_9 = tmpvar_7; + float _bias_10; + _bias_10 = u_params1.x; + vec4 _pcfParams_11; + _pcfParams_11 = tmpvar_8; + vec2 _texelSize_12; + _texelSize_12 = tmpvar_3; + int x_13; + int ynum_14; + int xnum_15; + float result_16; + vec2 tmpvar_17; + tmpvar_17 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_18; + tmpvar_18 = (tmpvar_17.x * tmpvar_17.y); + result_16 = 0.0; + int tmpvar_19; + tmpvar_19 = int(u_smSamplingParams.x); + xnum_15 = tmpvar_19; + ynum_14 = int(u_smSamplingParams.y); + x_13 = -(tmpvar_19); + while (true) { + int y_20; + if ((x_13 > xnum_15)) { + break; + }; + y_20 = -(ynum_14); + while (true) { + if ((y_20 > ynum_14)) { + break; + }; + vec2 tmpvar_21; + tmpvar_21.x = float(x_13); + tmpvar_21.y = float(y_20); + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 0.0); + tmpvar_22.xy = ((tmpvar_21 * _pcfParams_11.zw) * _texelSize_12); + vec4 tmpvar_23; + tmpvar_23 = (_shadowCoord_9 + tmpvar_22); + result_16 = (result_16 + float((dot (texture2D (u_shadowMap0, (tmpvar_23.xy / tmpvar_23.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_23.z - _bias_10) / tmpvar_23.w)))); + y_20 = (y_20 + 1); + }; + x_13 = (x_13 + 1); + }; + visibility_1 = (result_16 / max (tmpvar_18, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_24; + tmpvar_24 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_25; + tmpvar_25 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_24, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_24, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_26; + tmpvar_26.x = tmpvar_25; + tmpvar_26.y = tmpvar_25; + tmpvar_26.z = -(tmpvar_25); + colorCoverage_2 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27.w = 1.0; + tmpvar_27.xy = (v_texcoord2.xy / v_texcoord2.w); + tmpvar_27.z = v_texcoord2.z; + vec4 tmpvar_28; + tmpvar_28.xy = u_smSamplingParams.xy; + tmpvar_28.zw = (u_smSamplingParams.zw / v_texcoord2.w); + vec4 _shadowCoord_29; + _shadowCoord_29 = tmpvar_27; + float _bias_30; + _bias_30 = u_params1.x; + vec4 _pcfParams_31; + _pcfParams_31 = tmpvar_28; + vec2 _texelSize_32; + _texelSize_32 = (u_params2.zz / 2.0); + int x_33; + int ynum_34; + int xnum_35; + float result_36; + vec2 tmpvar_37; + tmpvar_37 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_38; + tmpvar_38 = (tmpvar_37.x * tmpvar_37.y); + result_36 = 0.0; + int tmpvar_39; + tmpvar_39 = int(u_smSamplingParams.x); + xnum_35 = tmpvar_39; + ynum_34 = int(u_smSamplingParams.y); + x_33 = -(tmpvar_39); + while (true) { + int y_40; + if ((x_33 > xnum_35)) { + break; + }; + y_40 = -(ynum_34); + while (true) { + if ((y_40 > ynum_34)) { + break; + }; + vec2 tmpvar_41; + tmpvar_41.x = float(x_33); + tmpvar_41.y = float(y_40); + vec4 tmpvar_42; + tmpvar_42.zw = vec2(0.0, 0.0); + tmpvar_42.xy = ((tmpvar_41 * _pcfParams_31.zw) * _texelSize_32); + vec4 tmpvar_43; + tmpvar_43 = (_shadowCoord_29 + tmpvar_42); + result_36 = (result_36 + float((dot (texture2D (u_shadowMap1, (tmpvar_43.xy / tmpvar_43.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_43.z - _bias_30) / tmpvar_43.w)))); + y_40 = (y_40 + 1); + }; + x_33 = (x_33 + 1); + }; + visibility_1 = (result_36 / max (tmpvar_38, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_44; + tmpvar_44 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_45; + tmpvar_45 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_44, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_44, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_46; + tmpvar_46.x = -(tmpvar_45); + tmpvar_46.y = -(tmpvar_45); + tmpvar_46.z = tmpvar_45; + colorCoverage_2 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 1.0; + tmpvar_47.xy = (v_texcoord3.xy / v_texcoord3.w); + tmpvar_47.z = v_texcoord3.z; + vec4 tmpvar_48; + tmpvar_48.xy = u_smSamplingParams.xy; + tmpvar_48.zw = (u_smSamplingParams.zw / v_texcoord3.w); + vec4 _shadowCoord_49; + _shadowCoord_49 = tmpvar_47; + float _bias_50; + _bias_50 = u_params1.x; + vec4 _pcfParams_51; + _pcfParams_51 = tmpvar_48; + vec2 _texelSize_52; + _texelSize_52 = (u_params2.zz / 3.0); + int x_53; + int ynum_54; + int xnum_55; + float result_56; + vec2 tmpvar_57; + tmpvar_57 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_58; + tmpvar_58 = (tmpvar_57.x * tmpvar_57.y); + result_56 = 0.0; + int tmpvar_59; + tmpvar_59 = int(u_smSamplingParams.x); + xnum_55 = tmpvar_59; + ynum_54 = int(u_smSamplingParams.y); + x_53 = -(tmpvar_59); + while (true) { + int y_60; + if ((x_53 > xnum_55)) { + break; + }; + y_60 = -(ynum_54); + while (true) { + if ((y_60 > ynum_54)) { + break; + }; + vec2 tmpvar_61; + tmpvar_61.x = float(x_53); + tmpvar_61.y = float(y_60); + vec4 tmpvar_62; + tmpvar_62.zw = vec2(0.0, 0.0); + tmpvar_62.xy = ((tmpvar_61 * _pcfParams_51.zw) * _texelSize_52); + vec4 tmpvar_63; + tmpvar_63 = (_shadowCoord_49 + tmpvar_62); + result_56 = (result_56 + float((dot (texture2D (u_shadowMap2, (tmpvar_63.xy / tmpvar_63.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_63.z - _bias_50) / tmpvar_63.w)))); + y_60 = (y_60 + 1); + }; + x_53 = (x_53 + 1); + }; + visibility_1 = (result_56 / max (tmpvar_58, 1.0)); + } else { + vec2 tmpvar_64; + tmpvar_64 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_65; + tmpvar_65 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_64, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_64, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_66; + tmpvar_66.x = tmpvar_65; + tmpvar_66.y = -(tmpvar_65); + tmpvar_66.z = -(tmpvar_65); + colorCoverage_2 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.w = 1.0; + tmpvar_67.xy = (v_texcoord4.xy / v_texcoord4.w); + tmpvar_67.z = v_texcoord4.z; + vec4 tmpvar_68; + tmpvar_68.xy = u_smSamplingParams.xy; + tmpvar_68.zw = (u_smSamplingParams.zw / v_texcoord4.w); + vec4 _shadowCoord_69; + _shadowCoord_69 = tmpvar_67; + float _bias_70; + _bias_70 = u_params1.x; + vec4 _pcfParams_71; + _pcfParams_71 = tmpvar_68; + vec2 _texelSize_72; + _texelSize_72 = (u_params2.zz / 4.0); + int x_73; + int ynum_74; + int xnum_75; + float result_76; + vec2 tmpvar_77; + tmpvar_77 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_78; + tmpvar_78 = (tmpvar_77.x * tmpvar_77.y); + result_76 = 0.0; + int tmpvar_79; + tmpvar_79 = int(u_smSamplingParams.x); + xnum_75 = tmpvar_79; + ynum_74 = int(u_smSamplingParams.y); + x_73 = -(tmpvar_79); + while (true) { + int y_80; + if ((x_73 > xnum_75)) { + break; + }; + y_80 = -(ynum_74); + while (true) { + if ((y_80 > ynum_74)) { + break; + }; + vec2 tmpvar_81; + tmpvar_81.x = float(x_73); + tmpvar_81.y = float(y_80); + vec4 tmpvar_82; + tmpvar_82.zw = vec2(0.0, 0.0); + tmpvar_82.xy = ((tmpvar_81 * _pcfParams_71.zw) * _texelSize_72); + vec4 tmpvar_83; + tmpvar_83 = (_shadowCoord_69 + tmpvar_82); + result_76 = (result_76 + float((dot (texture2D (u_shadowMap3, (tmpvar_83.xy / tmpvar_83.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_83.z - _bias_70) / tmpvar_83.w)))); + y_80 = (y_80 + 1); + }; + x_73 = (x_73 + 1); + }; + visibility_1 = (result_76 / max (tmpvar_78, 1.0)); + }; + }; + }; + vec3 tmpvar_84; + tmpvar_84 = -(normalize(v_view)); + vec3 tmpvar_85; + float tmpvar_86; + tmpvar_85 = -(normalize(u_lightPosition.xyz)); + tmpvar_86 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_87; + tmpvar_87 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_88; + tmpvar_88 = normalize(tmpvar_87); + tmpvar_85 = tmpvar_88; + float tmpvar_89; + tmpvar_89 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_90; + tmpvar_90 = sqrt(dot (tmpvar_87, tmpvar_87)); + tmpvar_86 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_90)) + ((u_lightAttenuationSpotOuter.z * tmpvar_90) * tmpvar_90)))) * mix (clamp (((max (0.0, dot (-(tmpvar_88), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_89) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_89)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_91; + tmpvar_91 = dot (v_normal, tmpvar_85); + vec2 tmpvar_92; + tmpvar_92.x = tmpvar_91; + tmpvar_92.y = (((float((tmpvar_91 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_91) * v_normal) - tmpvar_85), tmpvar_84)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_93; + tmpvar_93 = (max (tmpvar_92, 0.0) * tmpvar_86); + float tmpvar_94; + tmpvar_94 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_93.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_93.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_94) * tmpvar_94)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_omni.bin new file mode 100644 index 000000000..8248ab63b Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_omni.bin new file mode 100644 index 000000000..9473f5f3d Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pfc.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pfc.bin new file mode 100644 index 000000000..e23f13ea4 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pfc.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm.bin new file mode 100644 index 000000000..50460e43a Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin new file mode 100644 index 000000000..ec100c779 --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin @@ -0,0 +1,194 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_3; + tmpvar_3 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_4; + tmpvar_4 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_3, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_3, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_5; + tmpvar_5.x = -(tmpvar_4); + tmpvar_5.y = tmpvar_4; + tmpvar_5.z = -(tmpvar_4); + colorCoverage_2 = tmpvar_5; + float tmpvar_6; + float tmpvar_7; + tmpvar_7 = (((v_texcoord1.z - u_params1.x) / v_texcoord1.w) * u_params1.w); + vec2 tmpvar_8; + tmpvar_8 = (v_texcoord1.xy / v_texcoord1.w); + vec4 tmpvar_9; + tmpvar_9 = texture2D (u_shadowMap0, tmpvar_8); + vec2 tmpvar_10; + tmpvar_10.x = dot (tmpvar_9.xy, vec2(0.00390625, 1.0)); + tmpvar_10.y = dot (tmpvar_9.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_11; + tmpvar_11 = (tmpvar_10 * u_params1.w); + if ((tmpvar_7 < tmpvar_11.x)) { + tmpvar_6 = 1.0; + } else { + float tmpvar_12; + tmpvar_12 = max ((tmpvar_11.y - (tmpvar_11.x * tmpvar_11.x)), u_params1.z); + float tmpvar_13; + tmpvar_13 = (tmpvar_7 - tmpvar_11.x); + tmpvar_6 = mix ((tmpvar_12 / (tmpvar_12 + (tmpvar_13 * tmpvar_13))), 1.0, float(any(greaterThan (tmpvar_8, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_6; + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_14; + tmpvar_14 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_15; + tmpvar_15 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_14, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_14, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_16; + tmpvar_16.x = tmpvar_15; + tmpvar_16.y = tmpvar_15; + tmpvar_16.z = -(tmpvar_15); + colorCoverage_2 = tmpvar_16; + float tmpvar_17; + float tmpvar_18; + tmpvar_18 = (((v_texcoord2.z - u_params1.x) / v_texcoord2.w) * u_params1.w); + vec2 tmpvar_19; + tmpvar_19 = (v_texcoord2.xy / v_texcoord2.w); + vec4 tmpvar_20; + tmpvar_20 = texture2D (u_shadowMap1, tmpvar_19); + vec2 tmpvar_21; + tmpvar_21.x = dot (tmpvar_20.xy, vec2(0.00390625, 1.0)); + tmpvar_21.y = dot (tmpvar_20.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 * u_params1.w); + if ((tmpvar_18 < tmpvar_22.x)) { + tmpvar_17 = 1.0; + } else { + float tmpvar_23; + tmpvar_23 = max ((tmpvar_22.y - (tmpvar_22.x * tmpvar_22.x)), u_params1.z); + float tmpvar_24; + tmpvar_24 = (tmpvar_18 - tmpvar_22.x); + tmpvar_17 = mix ((tmpvar_23 / (tmpvar_23 + (tmpvar_24 * tmpvar_24))), 1.0, float(any(greaterThan (tmpvar_19, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_17; + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_25; + tmpvar_25 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_26; + tmpvar_26 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_25, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_25, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_27; + tmpvar_27.x = -(tmpvar_26); + tmpvar_27.y = -(tmpvar_26); + tmpvar_27.z = tmpvar_26; + colorCoverage_2 = tmpvar_27; + float tmpvar_28; + float tmpvar_29; + tmpvar_29 = (((v_texcoord3.z - u_params1.x) / v_texcoord3.w) * u_params1.w); + vec2 tmpvar_30; + tmpvar_30 = (v_texcoord3.xy / v_texcoord3.w); + vec4 tmpvar_31; + tmpvar_31 = texture2D (u_shadowMap2, tmpvar_30); + vec2 tmpvar_32; + tmpvar_32.x = dot (tmpvar_31.xy, vec2(0.00390625, 1.0)); + tmpvar_32.y = dot (tmpvar_31.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_33; + tmpvar_33 = (tmpvar_32 * u_params1.w); + if ((tmpvar_29 < tmpvar_33.x)) { + tmpvar_28 = 1.0; + } else { + float tmpvar_34; + tmpvar_34 = max ((tmpvar_33.y - (tmpvar_33.x * tmpvar_33.x)), u_params1.z); + float tmpvar_35; + tmpvar_35 = (tmpvar_29 - tmpvar_33.x); + tmpvar_28 = mix ((tmpvar_34 / (tmpvar_34 + (tmpvar_35 * tmpvar_35))), 1.0, float(any(greaterThan (tmpvar_30, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_28; + } else { + vec2 tmpvar_36; + tmpvar_36 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_37; + tmpvar_37 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_36, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_36, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_38; + tmpvar_38.x = tmpvar_37; + tmpvar_38.y = -(tmpvar_37); + tmpvar_38.z = -(tmpvar_37); + colorCoverage_2 = tmpvar_38; + float tmpvar_39; + float tmpvar_40; + tmpvar_40 = (((v_texcoord4.z - u_params1.x) / v_texcoord4.w) * u_params1.w); + vec2 tmpvar_41; + tmpvar_41 = (v_texcoord4.xy / v_texcoord4.w); + vec4 tmpvar_42; + tmpvar_42 = texture2D (u_shadowMap3, tmpvar_41); + vec2 tmpvar_43; + tmpvar_43.x = dot (tmpvar_42.xy, vec2(0.00390625, 1.0)); + tmpvar_43.y = dot (tmpvar_42.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_44; + tmpvar_44 = (tmpvar_43 * u_params1.w); + if ((tmpvar_40 < tmpvar_44.x)) { + tmpvar_39 = 1.0; + } else { + float tmpvar_45; + tmpvar_45 = max ((tmpvar_44.y - (tmpvar_44.x * tmpvar_44.x)), u_params1.z); + float tmpvar_46; + tmpvar_46 = (tmpvar_40 - tmpvar_44.x); + tmpvar_39 = mix ((tmpvar_45 / (tmpvar_45 + (tmpvar_46 * tmpvar_46))), 1.0, float(any(greaterThan (tmpvar_41, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_39; + }; + }; + }; + vec3 tmpvar_47; + tmpvar_47 = -(normalize(v_view)); + vec3 tmpvar_48; + float tmpvar_49; + tmpvar_48 = -(normalize(u_lightPosition.xyz)); + tmpvar_49 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_50; + tmpvar_50 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_51; + tmpvar_51 = normalize(tmpvar_50); + tmpvar_48 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_53; + tmpvar_53 = sqrt(dot (tmpvar_50, tmpvar_50)); + tmpvar_49 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_53)) + ((u_lightAttenuationSpotOuter.z * tmpvar_53) * tmpvar_53)))) * mix (clamp (((max (0.0, dot (-(tmpvar_51), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_52) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_52)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_54; + tmpvar_54 = dot (v_normal, tmpvar_48); + vec2 tmpvar_55; + tmpvar_55.x = tmpvar_54; + tmpvar_55.y = (((float((tmpvar_54 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_54) * v_normal) - tmpvar_48), tmpvar_47)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_56; + tmpvar_56 = (max (tmpvar_55, 0.0) * tmpvar_49); + float tmpvar_57; + tmpvar_57 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_56.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_56.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_57) * tmpvar_57)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear.bin new file mode 100644 index 000000000..28667a5aa Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin new file mode 100644 index 000000000..61d1a468d --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin @@ -0,0 +1,202 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_3; + tmpvar_3 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_4; + tmpvar_4 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_3, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_3, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_5; + tmpvar_5.x = -(tmpvar_4); + tmpvar_5.y = tmpvar_4; + tmpvar_5.z = -(tmpvar_4); + colorCoverage_2 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 1.0; + tmpvar_6.xy = (v_texcoord1.xy / v_texcoord1.w); + tmpvar_6.z = v_texcoord1.z; + float tmpvar_7; + float tmpvar_8; + tmpvar_8 = ((v_texcoord1.z - u_params1.x) * u_params1.w); + vec4 tmpvar_9; + tmpvar_9 = texture2D (u_shadowMap0, tmpvar_6.xy); + vec2 tmpvar_10; + tmpvar_10.x = dot (tmpvar_9.xy, vec2(0.00390625, 1.0)); + tmpvar_10.y = dot (tmpvar_9.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_11; + tmpvar_11 = (tmpvar_10 * u_params1.w); + if ((tmpvar_8 < tmpvar_11.x)) { + tmpvar_7 = 1.0; + } else { + float tmpvar_12; + tmpvar_12 = max ((tmpvar_11.y - (tmpvar_11.x * tmpvar_11.x)), u_params1.z); + float tmpvar_13; + tmpvar_13 = (tmpvar_8 - tmpvar_11.x); + tmpvar_7 = mix ((tmpvar_12 / (tmpvar_12 + (tmpvar_13 * tmpvar_13))), 1.0, float(any(greaterThan (tmpvar_6.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_7; + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_14; + tmpvar_14 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_15; + tmpvar_15 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_14, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_14, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_16; + tmpvar_16.x = tmpvar_15; + tmpvar_16.y = tmpvar_15; + tmpvar_16.z = -(tmpvar_15); + colorCoverage_2 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17.w = 1.0; + tmpvar_17.xy = (v_texcoord2.xy / v_texcoord2.w); + tmpvar_17.z = v_texcoord2.z; + float tmpvar_18; + float tmpvar_19; + tmpvar_19 = ((v_texcoord2.z - u_params1.x) * u_params1.w); + vec4 tmpvar_20; + tmpvar_20 = texture2D (u_shadowMap1, tmpvar_17.xy); + vec2 tmpvar_21; + tmpvar_21.x = dot (tmpvar_20.xy, vec2(0.00390625, 1.0)); + tmpvar_21.y = dot (tmpvar_20.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 * u_params1.w); + if ((tmpvar_19 < tmpvar_22.x)) { + tmpvar_18 = 1.0; + } else { + float tmpvar_23; + tmpvar_23 = max ((tmpvar_22.y - (tmpvar_22.x * tmpvar_22.x)), u_params1.z); + float tmpvar_24; + tmpvar_24 = (tmpvar_19 - tmpvar_22.x); + tmpvar_18 = mix ((tmpvar_23 / (tmpvar_23 + (tmpvar_24 * tmpvar_24))), 1.0, float(any(greaterThan (tmpvar_17.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_18; + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_25; + tmpvar_25 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_26; + tmpvar_26 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_25, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_25, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_27; + tmpvar_27.x = -(tmpvar_26); + tmpvar_27.y = -(tmpvar_26); + tmpvar_27.z = tmpvar_26; + colorCoverage_2 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28.w = 1.0; + tmpvar_28.xy = (v_texcoord3.xy / v_texcoord3.w); + tmpvar_28.z = v_texcoord3.z; + float tmpvar_29; + float tmpvar_30; + tmpvar_30 = ((v_texcoord3.z - u_params1.x) * u_params1.w); + vec4 tmpvar_31; + tmpvar_31 = texture2D (u_shadowMap2, tmpvar_28.xy); + vec2 tmpvar_32; + tmpvar_32.x = dot (tmpvar_31.xy, vec2(0.00390625, 1.0)); + tmpvar_32.y = dot (tmpvar_31.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_33; + tmpvar_33 = (tmpvar_32 * u_params1.w); + if ((tmpvar_30 < tmpvar_33.x)) { + tmpvar_29 = 1.0; + } else { + float tmpvar_34; + tmpvar_34 = max ((tmpvar_33.y - (tmpvar_33.x * tmpvar_33.x)), u_params1.z); + float tmpvar_35; + tmpvar_35 = (tmpvar_30 - tmpvar_33.x); + tmpvar_29 = mix ((tmpvar_34 / (tmpvar_34 + (tmpvar_35 * tmpvar_35))), 1.0, float(any(greaterThan (tmpvar_28.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_29; + } else { + vec2 tmpvar_36; + tmpvar_36 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_37; + tmpvar_37 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_36, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_36, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_38; + tmpvar_38.x = tmpvar_37; + tmpvar_38.y = -(tmpvar_37); + tmpvar_38.z = -(tmpvar_37); + colorCoverage_2 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39.w = 1.0; + tmpvar_39.xy = (v_texcoord4.xy / v_texcoord4.w); + tmpvar_39.z = v_texcoord4.z; + float tmpvar_40; + float tmpvar_41; + tmpvar_41 = ((v_texcoord4.z - u_params1.x) * u_params1.w); + vec4 tmpvar_42; + tmpvar_42 = texture2D (u_shadowMap3, tmpvar_39.xy); + vec2 tmpvar_43; + tmpvar_43.x = dot (tmpvar_42.xy, vec2(0.00390625, 1.0)); + tmpvar_43.y = dot (tmpvar_42.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_44; + tmpvar_44 = (tmpvar_43 * u_params1.w); + if ((tmpvar_41 < tmpvar_44.x)) { + tmpvar_40 = 1.0; + } else { + float tmpvar_45; + tmpvar_45 = max ((tmpvar_44.y - (tmpvar_44.x * tmpvar_44.x)), u_params1.z); + float tmpvar_46; + tmpvar_46 = (tmpvar_41 - tmpvar_44.x); + tmpvar_40 = mix ((tmpvar_45 / (tmpvar_45 + (tmpvar_46 * tmpvar_46))), 1.0, float(any(greaterThan (tmpvar_39.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_40; + }; + }; + }; + vec3 tmpvar_47; + tmpvar_47 = -(normalize(v_view)); + vec3 tmpvar_48; + float tmpvar_49; + tmpvar_48 = -(normalize(u_lightPosition.xyz)); + tmpvar_49 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_50; + tmpvar_50 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_51; + tmpvar_51 = normalize(tmpvar_50); + tmpvar_48 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_53; + tmpvar_53 = sqrt(dot (tmpvar_50, tmpvar_50)); + tmpvar_49 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_53)) + ((u_lightAttenuationSpotOuter.z * tmpvar_53) * tmpvar_53)))) * mix (clamp (((max (0.0, dot (-(tmpvar_51), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_52) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_52)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_54; + tmpvar_54 = dot (v_normal, tmpvar_48); + vec2 tmpvar_55; + tmpvar_55.x = tmpvar_54; + tmpvar_55.y = (((float((tmpvar_54 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_54) * v_normal) - tmpvar_48), tmpvar_47)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_56; + tmpvar_56 = (max (tmpvar_55, 0.0) * tmpvar_49); + float tmpvar_57; + tmpvar_57 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_56.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_56.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_57) * tmpvar_57)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_omni.bin new file mode 100644 index 000000000..2d7695d2e Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_omni.bin new file mode 100644 index 000000000..fbfbe8542 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_omni.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin new file mode 100644 index 000000000..6eb00aced Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin new file mode 100644 index 000000000..88de442d2 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin new file mode 100644 index 000000000..a68bc874a Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin new file mode 100644 index 000000000..dc8f5608b Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin new file mode 100644 index 000000000..5e17307d2 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin new file mode 100644 index 000000000..2e6372096 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin new file mode 100644 index 000000000..0760f2f07 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin new file mode 100644 index 000000000..516d3c5a9 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin new file mode 100644 index 000000000..3ea416c80 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_texture_lightning.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_texture_lightning.bin new file mode 100644 index 000000000..467954381 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_texture_lightning.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin new file mode 100644 index 000000000..2e237bbc9 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin new file mode 100644 index 000000000..fdc3ba085 Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin new file mode 100644 index 000000000..a68bc874a Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin differ diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin new file mode 100644 index 000000000..dc8f5608b Binary files /dev/null and b/examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin new file mode 100644 index 000000000..c08b5667c Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning.bin new file mode 100644 index 000000000..c95465f2a Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_csm.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_csm.bin new file mode 100644 index 000000000..b67c69a3e Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_csm.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear.bin new file mode 100644 index 000000000..031192276 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_csm.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_csm.bin new file mode 100644 index 000000000..899fa17e1 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_csm.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_omni.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_omni.bin new file mode 100644 index 000000000..e421a3b20 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_omni.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_omni.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_omni.bin new file mode 100644 index 000000000..a0689ae9e Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_omni.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin new file mode 100644 index 000000000..82cd38130 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin new file mode 100644 index 000000000..c08b5667c Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin new file mode 100644 index 000000000..21870f0dc Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin new file mode 100644 index 000000000..71bbbc323 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin new file mode 100644 index 000000000..dc0cd079a Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin new file mode 100644 index 000000000..82cd38130 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lightning.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lightning.bin new file mode 100644 index 000000000..3d5205f36 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lightning.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin new file mode 100644 index 000000000..82cd38130 Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin differ diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin new file mode 100644 index 000000000..b0d51f7bc Binary files /dev/null and b/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin differ diff --git a/premake/premake4.lua b/premake/premake4.lua index ecedc718d..94c665a14 100644 --- a/premake/premake4.lua +++ b/premake/premake4.lua @@ -146,21 +146,24 @@ end dofile "bgfx.lua" dofile "example-common.lua" -exampleProject("00-helloworld", "ff2c8450-ebf4-11e0-9572-0800200c9a66") -exampleProject("01-cubes", "fec3bc94-e1e5-11e1-9c59-c7eeec2c1c51") -exampleProject("02-metaballs", "413b2cb4-f7db-11e1-bf5f-a716de6a022f") -exampleProject("03-raymarch", "1cede802-0220-11e2-91ba-e108de6a022f") -exampleProject("04-mesh", "546bbc76-0c4a-11e2-ab09-debcdd6a022f") -exampleProject("05-instancing", "5d3da660-1105-11e2-aece-71e4dd6a022f") -exampleProject("06-bump", "ffb23e6c-167b-11e2-81df-94c4dd6a022f") -exampleProject("07-callback", "acc53bbc-52f0-11e2-9781-ad8edd4b7d02") -exampleProject("08-update", "e011e246-5862-11e2-b202-b7cb257a7926") -exampleProject("09-hdr", "969a4626-67ee-11e2-9726-9023267a7926") -exampleProject("10-font" , "ef6fd5b3-b52a-41c2-a257-9dfe709af9e1") -exampleProject("11-fontsdf", "f4e6f96f-3daa-4c68-8df8-bf2a3ecd9092") -exampleProject("12-lod", "0512e9e6-bfd8-11e2-8e34-0291bd4c8125") -exampleProject("13-stencil", "d12d6522-37bc-11e3-b89c-e46428d43830") -exampleProject("14-shadowvolumes", "d7eb4bcc-37bc-11e3-b7a4-e46428d43830") +exampleProject("00-helloworld", "ff2c8450-ebf4-11e0-9572-0800200c9a66") +exampleProject("01-cubes", "fec3bc94-e1e5-11e1-9c59-c7eeec2c1c51") +exampleProject("02-metaballs", "413b2cb4-f7db-11e1-bf5f-a716de6a022f") +exampleProject("03-raymarch", "1cede802-0220-11e2-91ba-e108de6a022f") +exampleProject("04-mesh", "546bbc76-0c4a-11e2-ab09-debcdd6a022f") +exampleProject("05-instancing", "5d3da660-1105-11e2-aece-71e4dd6a022f") +exampleProject("06-bump", "ffb23e6c-167b-11e2-81df-94c4dd6a022f") +exampleProject("07-callback", "acc53bbc-52f0-11e2-9781-ad8edd4b7d02") +exampleProject("08-update", "e011e246-5862-11e2-b202-b7cb257a7926") +exampleProject("09-hdr", "969a4626-67ee-11e2-9726-9023267a7926") +exampleProject("10-font" , "ef6fd5b3-b52a-41c2-a257-9dfe709af9e1") +exampleProject("11-fontsdf", "f4e6f96f-3daa-4c68-8df8-bf2a3ecd9092") +exampleProject("12-lod", "0512e9e6-bfd8-11e2-8e34-0291bd4c8125") +exampleProject("13-stencil", "d12d6522-37bc-11e3-b89c-e46428d43830") +exampleProject("14-shadowvolumes", "d7eb4bcc-37bc-11e3-b7a4-e46428d43830") +exampleProject("15-shadowmaps-simple", "a10f22ab-e0ee-471a-b2b6-2f6cb1c63fdc") +exampleProject("16-shadowmaps", "f9a91cb0-7b1b-11e3-981f-0800200c9a66") + dofile "makedisttex.lua" dofile "shaderc.lua" dofile "texturec.lua"