More GLSL code:
authorMichal Krol <mjkrol@gmail.org>
Tue, 21 Feb 2006 12:35:06 +0000 (12:35 +0000)
committerMichal Krol <mjkrol@gmail.org>
Tue, 21 Feb 2006 12:35:06 +0000 (12:35 +0000)
- uniforms (only GetLocation, Uniform1f and Uniform4fv for now for demos);
- fix bugs and optimize array size handling;
- 2D texture sampling (needs Enable(TEXTURE_2D) to work);
- decrease built-in library assembly size by 30%.

33 files changed:
progs/demos/arbfslight.c
progs/demos/glslnoise.c
src/mesa/shader/shaderobjects.c
src/mesa/shader/shaderobjects_3dlabs.c
src/mesa/shader/slang/library/slang_common_builtin.gc
src/mesa/shader/slang/library/slang_common_builtin_gc.h
src/mesa/shader/slang/library/slang_core.gc
src/mesa/shader/slang/library/slang_core_gc.h
src/mesa/shader/slang/library/slang_fragment_builtin.gc
src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
src/mesa/shader/slang/library/slang_vertex_builtin.gc
src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
src/mesa/shader/slang/slang_assemble.c
src/mesa/shader/slang/slang_assemble.h
src/mesa/shader/slang/slang_assemble_assignment.c
src/mesa/shader/slang/slang_assemble_conditional.c
src/mesa/shader/slang/slang_assemble_constructor.c
src/mesa/shader/slang/slang_assemble_typeinfo.c
src/mesa/shader/slang/slang_assemble_typeinfo.h
src/mesa/shader/slang/slang_compile.c
src/mesa/shader/slang/slang_compile.h
src/mesa/shader/slang/slang_compile_struct.c
src/mesa/shader/slang/slang_compile_variable.c
src/mesa/shader/slang/slang_compile_variable.h
src/mesa/shader/slang/slang_execute.c
src/mesa/shader/slang/slang_export.c [new file with mode: 0644]
src/mesa/shader/slang/slang_export.h [new file with mode: 0644]
src/mesa/shader/slang/slang_link.c [new file with mode: 0644]
src/mesa/shader/slang/slang_link.h [new file with mode: 0644]
src/mesa/shader/slang/slang_storage.c
src/mesa/shader/slang/slang_storage.h
src/mesa/sources
windows/VC6/mesa/mesa/mesa.dsp

index 2e91139..1164f2d 100644 (file)
@@ -3,7 +3,7 @@
  * simple per-pixel lighting.\r
  *\r
  * Michal Krol\r
- * 17 February 2006
+ * 20 February 2006
  *\r
  * Based on the original demo by:
  * Brian Paul
@@ -34,6 +34,10 @@ static GLfloat delta = 1.0f;
 static GLhandleARB fragShader;
 static GLhandleARB vertShader;\r
 static GLhandleARB program;\r
+\r
+static GLint uLightPos;\r
+static GLint uDiffuse;\r
+static GLint uSpecular;\r
 
 static GLboolean anim = GL_TRUE;
 static GLboolean wire = GL_FALSE;
@@ -50,7 +54,9 @@ static PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
 static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;\r
 static PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;\r
 static PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;\r
-static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;
+static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;\r
+static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL;\r
+static PFNGLUNIFORM4FVARBPROC glUniform4fvARB = NULL;
 
 static void Redisplay (void)
 {
@@ -59,8 +65,7 @@ static void Redisplay (void)
        if (pixelLight)\r
        {\r
                glUseProgramObjectARB (program);\r
-               /* XXX source from uniform lightPos */\r
-               glTexCoord4fv (lightPos);
+               glUniform4fvARB (uLightPos, 1, lightPos);
                glDisable(GL_LIGHTING);
        }
        else\r
@@ -181,21 +186,11 @@ static void SpecialKey (int key, int x, int y)
 
 static void Init (void)
 {
-       static const char *fragShaderText =
+       static const char *fragShaderText =\r
+               "uniform vec4 lightPos;\n"\r
+               "uniform vec4 diffuse;\n"\r
+               "uniform vec4 specular;\n"
                "void main () {\n"\r
-\r
-               /* XXX source from uniform lightPos */\r
-               "       vec4 lightPos;\n"\r
-               "       lightPos = gl_TexCoord[1];\n"\r
-\r
-               /* XXX source from uniform diffuse */\r
-               "       vec4 diffuse;\n"\r
-               "       diffuse = vec4 (0.5, 0.5, 1.0, 1.0);\n"\r
-\r
-               /* XXX source from uniform specular */\r
-               "       vec4 specular;\n"\r
-               "       specular = vec4 (0.8, 0.8, 0.8, 1.0);\n"\r
-\r
                "       // Compute dot product of light direction and normal vector\n"\r
                "       float dotProd;\n"\r
                "       dotProd = clamp (dot (normalize (lightPos).xyz, normalize (gl_TexCoord[0]).xyz), 0.0, 1.0);\n"\r
@@ -207,9 +202,6 @@ static void Init (void)
                "void main () {\n"\r
                "       gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"\r
                "       gl_TexCoord[0] = vec4 (gl_NormalMatrix * gl_Normal, 1.0);\n"\r
-\r
-               /* XXX source from uniform lightPos */\r
-               "       gl_TexCoord[1] = gl_MultiTexCoord0;\n"\r
                "}\n"
        ;
 \r
@@ -241,6 +233,8 @@ static void Init (void)
        glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) GETPROCADDRESS ("glAttachObjectARB");\r
        glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) GETPROCADDRESS ("glLinkProgramARB");\r
        glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) GETPROCADDRESS ("glUseProgramObjectARB");\r
+       glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) GETPROCADDRESS ("glGetUniformLocationARB");\r
+       glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) GETPROCADDRESS ("glUniform4fvARB");\r
 \r
        fragShader = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);\r
        glShaderSourceARB (fragShader, 1, &fragShaderText, NULL);\r
@@ -255,6 +249,13 @@ static void Init (void)
        glAttachObjectARB (program, vertShader);\r
        glLinkProgramARB (program);\r
        glUseProgramObjectARB (program);\r
+\r
+       uLightPos = glGetUniformLocationARB (program, "lightPos");\r
+       uDiffuse = glGetUniformLocationARB (program, "diffuse");\r
+       uSpecular = glGetUniformLocationARB (program, "specular");\r
+\r
+       glUniform4fvARB (uDiffuse, 1, diffuse);\r
+       glUniform4fvARB (uSpecular, 1, specular);\r
 
        glClearColor (0.3f, 0.3f, 0.3f, 0.0f);
        glEnable (GL_DEPTH_TEST);
index 1041439..463af12 100755 (executable)
@@ -2,7 +2,7 @@
  * GLSL noise demo.
  *\r
  * Michal Krol\r
- * 17 February 2006
+ * 20 February 2006
  *\r
  * Based on the original demo by:
  * Stefan Gustavson (stegu@itn.liu.se) 2004, 2005
@@ -28,6 +28,8 @@ static GLhandleARB fragShader;
 static GLhandleARB vertShader;\r
 static GLhandleARB program;\r
 \r
+static GLint uTime;\r
+\r
 static GLfloat u_time = 0.0f;\r
 
 static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL;\r
@@ -36,14 +38,15 @@ static PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
 static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;\r
 static PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;\r
 static PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;\r
-static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;
+static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;\r
+static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL;\r
+static PFNGLUNIFORM1FARBPROC glUniform1fARB = NULL;
 
 static void Redisplay (void)
 {
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r
 \r
-       /* XXX source from uniform time */\r
-       glTexCoord1f (u_time);
+       glUniform1fARB (uTime, u_time);
 
        glPushMatrix ();
        glutSolidSphere (2.0, 20, 10);\r
@@ -85,16 +88,11 @@ static void Key (unsigned char key, int x, int y)
 
 static void Init (void)
 {
-       static const char *fragShaderText =
+       static const char *fragShaderText =\r
+               "uniform float time;\n"
                "void main () {\n"\r
-\r
-               /* XXX source from uniform time */\r
-               "       float time;\n"\r
-               "       time = gl_TexCoord[1].x;\n"\r
-\r
-               "       vec4 v;\n"\r
-               "       v = vec4 (4.0 * gl_TexCoord[0].xyz, 0.5 * time);\n"\r
-               "       gl_FragColor = gl_Color * vec4 ((0.5 + 0.5 * vec3 (noise1 (v))), 1.0);\n"\r
+               "       gl_FragColor = gl_Color * vec4 ((0.5 + 0.5 * vec3 (noise1 (\n"\r
+               "               vec4 (4.0 * gl_TexCoord[0].xyz, 0.5 * time)))), 1.0);\n"\r
                "}\n"
        ;
        static const char *vertShaderText =
@@ -102,9 +100,6 @@ static void Init (void)
                "       gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"\r
                "       gl_TexCoord[0] = gl_Vertex;\n"\r
                "       gl_FrontColor = gl_Color;\n"\r
-\r
-               /* XXX source from uniform time */\r
-               "       gl_TexCoord[1] = gl_MultiTexCoord0;\n"\r
                "}\n"
        ;
 \r
@@ -136,6 +131,8 @@ static void Init (void)
        glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) wglGetProcAddress ("glAttachObjectARB");\r
        glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) wglGetProcAddress ("glLinkProgramARB");\r
        glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) wglGetProcAddress ("glUseProgramObjectARB");\r
+       glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) GETPROCADDRESS ("glGetUniformLocationARB");\r
+       glUniform1fARB = (PFNGLUNIFORM1FARBPROC) GETPROCADDRESS ("glUniform1fARB");\r
 \r
        fragShader = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);\r
        glShaderSourceARB (fragShader, 1, &fragShaderText, NULL);\r
@@ -150,6 +147,8 @@ static void Init (void)
        glAttachObjectARB (program, vertShader);\r
        glLinkProgramARB (program);\r
        glUseProgramObjectARB (program);\r
+\r
+       uTime = glGetUniformLocationARB (program, "time");\r
 
        glClearColor (0.0f, 0.1f, 0.3f, 1.0f);\r
        glEnable (GL_CULL_FACE);
index edd74d0..7b18e10 100644 (file)
@@ -318,7 +318,9 @@ void GLAPIENTRY
 _mesa_UseProgramObjectARB (GLhandleARB programObj)
 {
        GET_CURRENT_CONTEXT(ctx);
-       struct gl2_program_intf **pro;
+       struct gl2_program_intf **pro;\r
+\r
+       FLUSH_VERTICES(ctx, _NEW_PROGRAM);
 
        if (programObj == 0)
        {
@@ -411,18 +413,71 @@ Errors TODO
     Uniform1i{v}ARB is used to load a sampler value.
 
 
-*/
-
+*/\r
+\r
+#define _RELEASE_PROGRAM(obj)\\r
+       (**pro)._container._generic._unknown.Release ((struct gl2_unknown_intf **) pro)\r
+\r
+#define _LOOKUP_PROGRAM(obj, function)\\r
+       struct gl2_unknown_intf **unk;\\r
+       _glthread_LOCK_MUTEX (ctx->Shared->Mutex);\\r
+       unk = (struct gl2_unknown_intf **) _mesa_HashLookup (ctx->Shared->GL2Objects, obj);\\r
+       _glthread_UNLOCK_MUTEX (ctx->Shared->Mutex);\\r
+       if (unk == NULL) {\\r
+               _mesa_error (ctx, GL_INVALID_VALUE, function);\\r
+               break;\\r
+       }\\r
+       pro = (struct gl2_program_intf **) (**unk).QueryInterface (unk, UIID_PROGRAM);\\r
+       if (pro == NULL) {\\r
+               _mesa_error (ctx, GL_INVALID_OPERATION, function);\\r
+               break;\\r
+       }\r
+\r
+#define _CURRENT_PROGRAM(function)\\r
+       if (ctx->ShaderObjects.CurrentProgram == NULL) {\\r
+               _mesa_error (ctx, GL_INVALID_OPERATION, function);\\r
+               break;\\r
+       }\\r
+       pro = ctx->ShaderObjects.CurrentProgram;\r
+\r
+#define _IS_LINKED(function)\\r
+       if ((**pro).GetLinkStatus (pro) == GL_FALSE) {\\r
+               _mesa_error (ctx, GL_INVALID_OPERATION, function);\\r
+               _RELEASE_PROGRAM(obj);\\r
+               break;\\r
+       }\r
+\r
+#define GET_PROGRAM(obj, function)\\r
+       struct gl2_program_intf **pro = NULL;\\r
+       do {\\r
+               _LOOKUP_PROGRAM(obj, function);\\r
+       } while (0)\r
+\r
+#define GET_LINKED_PROGRAM(obj, function)\\r
+       struct gl2_program_intf **pro = NULL;\\r
+       do {\\r
+               _LOOKUP_PROGRAM(obj, function);\\r
+               _IS_LINKED(function);\\r
+       } while (0)\r
+\r
+#define CURRENT_LINKED_PROGRAM(function)\\r
+       struct gl2_program_intf **pro = NULL;\\r
+       do {\\r
+               _CURRENT_PROGRAM(function);\\r
+               _IS_LINKED(function);\\r
+       } while (0)\r
+\r
+/* XXX */\r
+GLboolean _slang_write_uniform (struct gl2_program_intf **, GLint, GLsizei, const GLvoid *, GLenum);\r
+\r
 void GLAPIENTRY
 _mesa_Uniform1fARB (GLint location, GLfloat v0)
-{
-       GET_CURRENT_CONTEXT(ctx);
-
-       if (ctx->ShaderObjects.CurrentProgram == NULL)
-       {
+{\r
+       GET_CURRENT_CONTEXT(ctx);\r
+       CURRENT_LINKED_PROGRAM("glUniform1fARB");\r
+\r
+       if (!_slang_write_uniform (pro, location, 1, &v0, GL_FLOAT))\r
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1fARB");
-               return;
-       }
 }
 
 void GLAPIENTRY
@@ -548,13 +603,11 @@ _mesa_Uniform3fvARB (GLint location, GLsizei count, const GLfloat *value)
 void GLAPIENTRY
 _mesa_Uniform4fvARB (GLint location, GLsizei count, const GLfloat *value)
 {
-       GET_CURRENT_CONTEXT(ctx);
+       GET_CURRENT_CONTEXT(ctx);\r
+       CURRENT_LINKED_PROGRAM("glUniform4fvARB");
 
-       if (ctx->ShaderObjects.CurrentProgram == NULL)
-       {
+       if (!_slang_write_uniform (pro, location, count, value, GL_FLOAT_VEC4_ARB))\r
                _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4fvARB");
-               return;
-       }
 }
 
 void GLAPIENTRY
@@ -900,43 +953,23 @@ _mesa_GetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei
 
        if (count != NULL)
                *count = cnt;
-}
+}\r
+\r
+/* XXX */\r
+GLint _slang_get_uniform_location (struct gl2_program_intf **, const char *);
 
 GLint GLAPIENTRY
 _mesa_GetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name)
 {
-       GET_CURRENT_CONTEXT(ctx);
-       struct gl2_unknown_intf **unk;
-       struct gl2_program_intf **pro;
+       GET_CURRENT_CONTEXT(ctx);\r
        GLint loc = -1;
+       GET_LINKED_PROGRAM(programObj, "glGetUniformLocationARB");
 
-       _glthread_LOCK_MUTEX (ctx->Shared->Mutex);
-       unk = (struct gl2_unknown_intf **) _mesa_HashLookup (ctx->Shared->GL2Objects, programObj);
-       _glthread_UNLOCK_MUTEX (ctx->Shared->Mutex);
-
-       if (unk == NULL)
-       {
-               _mesa_error (ctx, GL_INVALID_VALUE, "glGetUniformLocationARB");
-               return -1;
-       }
-
-       pro = (struct gl2_program_intf **) (**unk).QueryInterface (unk, UIID_PROGRAM);
-       if (pro == NULL)
-       {
-               _mesa_error (ctx, GL_INVALID_OPERATION, "glGetUniformLocationARB");
-               return -1;
-       }
-
-       if ((**pro).GetLinkStatus (pro) == GL_FALSE)
-       {
-               _mesa_error (ctx, GL_INVALID_OPERATION, "glGetUniformLocationARB");
-               (**pro)._container._generic._unknown.Release ((struct gl2_unknown_intf **) pro);
+       if (pro == NULL)\r
                return -1;
-       }
 
-       /* TODO */
-
-       (**pro)._container._generic._unknown.Release ((struct gl2_unknown_intf **) pro);
+       loc = _slang_get_uniform_location (pro, name);
+       _RELEASE_PROGRAM(pro);
        return loc;
 }
 
index 84aba08..6af3322 100755 (executable)
@@ -44,6 +44,7 @@
 #else\r
 #include "slang_utility.h"\r
 #include "slang_compile.h"\r
+#include "slang_link.h"\r
 #endif\r
 \r
 struct gl2_unknown_obj\r
@@ -683,6 +684,7 @@ struct gl2_program_obj
        ShHandle linker;\r
        ShHandle uniforms;\r
 #endif\r
+       slang_program prog;\r
 };\r
 \r
 struct gl2_program_impl\r
@@ -694,13 +696,13 @@ struct gl2_program_impl
 static void\r
 _program_destructor (struct gl2_unknown_intf **intf)\r
 {\r
-#if USE_3DLABS_FRONTEND\r
        struct gl2_program_impl *impl = (struct gl2_program_impl *) intf;\r
-\r
+#if USE_3DLABS_FRONTEND\r
        ShDestruct (impl->_obj.linker);\r
        ShDestruct (impl->_obj.uniforms);\r
 #endif\r
        _container_destructor (intf);\r
+       slang_program_dtr (&impl->_obj.prog);\r
 }\r
 \r
 static struct gl2_unknown_intf **\r
@@ -759,12 +761,15 @@ _program_Link (struct gl2_program_intf **intf)
        struct gl2_program_impl *impl = (struct gl2_program_impl *) intf;\r
 #if USE_3DLABS_FRONTEND\r
        ShHandle *handles;\r
-       GLuint i;\r
 #endif\r
+       GLuint i, count;\r
+       slang_translation_unit *units[2];\r
 \r
        impl->_obj.link_status = GL_FALSE;\r
        _mesa_free ((void *) impl->_obj._container._generic.info_log);\r
        impl->_obj._container._generic.info_log = NULL;\r
+       slang_program_dtr (&impl->_obj.prog);\r
+       slang_program_ctr (&impl->_obj.prog);\r
 \r
 #if USE_3DLABS_FRONTEND\r
        handles = (ShHandle *) _mesa_malloc (impl->_obj._container.attached_count * sizeof (ShHandle));\r
@@ -796,9 +801,30 @@ _program_Link (struct gl2_program_intf **intf)
 \r
        impl->_obj._container._generic.info_log = _mesa_strdup (ShGetInfoLog (impl->_obj.linker));\r
 #else\r
-       /* TODO: do the real linking */\r
-       impl->_obj.link_status = GL_TRUE;\r
-       impl->_obj._container._generic.info_log = _mesa_strdup ("Link OK.\n");\r
+       count = impl->_obj._container.attached_count;\r
+       if (count == 0 || count > 2)\r
+               return;\r
+       for (i = 0; i < count; i++)\r
+       {\r
+               struct gl2_generic_intf **obj;\r
+               struct gl2_unknown_intf **unk;\r
+               struct gl2_shader_impl *sha;\r
+\r
+               obj = impl->_obj._container.attached[i];\r
+               unk = (**obj)._unknown.QueryInterface ((struct gl2_unknown_intf **) obj, UIID_SHADER);\r
+               (**obj)._unknown.Release ((struct gl2_unknown_intf **) obj);\r
+               if (unk == NULL)\r
+                       return;\r
+               sha = (struct gl2_shader_impl *) unk;\r
+               units[i] = &sha->_obj.unit;\r
+               (**unk).Release (unk);\r
+       }\r
+\r
+       impl->_obj.link_status = _slang_link (&impl->_obj.prog, units, count);\r
+       if (impl->_obj.link_status)\r
+               impl->_obj._container._generic.info_log = _mesa_strdup ("Link OK.\n");\r
+       else\r
+               impl->_obj._container._generic.info_log = _mesa_strdup ("Link failed.\n");\r
 #endif\r
 }\r
 \r
@@ -851,6 +877,7 @@ _program_constructor (struct gl2_program_impl *impl)
        impl->_obj.linker = ShConstructLinker (EShExVertexFragment, 0);\r
        impl->_obj.uniforms = ShConstructUniformMap ();\r
 #endif\r
+       slang_program_ctr (&impl->_obj.prog);\r
 }\r
 \r
 struct gl2_fragment_shader_obj\r
@@ -1173,13 +1200,13 @@ void exec_vertex_shader (struct gl2_vertex_shader_intf **vs)
        {\r
                slang_function *f;\r
                slang_assembly_file_restore_point point;\r
-               slang_machine mach;\r
                slang_assemble_ctx A;\r
 \r
                f = &unit->functions.functions[i];\r
                slang_assembly_file_restore_point_save (unit->assembly, &point);\r
-               mach = *unit->machine;\r
-               mach.ip = unit->assembly->count;\r
+\r
+               slang_machine_init (unit->machine);\r
+               unit->machine->ip = unit->assembly->count;\r
 \r
                A.file = unit->assembly;\r
                A.mach = unit->machine;\r
@@ -1192,9 +1219,9 @@ void exec_vertex_shader (struct gl2_vertex_shader_intf **vs)
                _slang_assemble_function_call (&A, f, NULL, 0, GL_FALSE);\r
                slang_assembly_file_push (unit->assembly, slang_asm_exit);\r
 \r
-               _slang_execute2 (unit->assembly, &mach);\r
+               _slang_execute2 (unit->assembly, unit->machine);\r
+\r
                slang_assembly_file_restore_point_load (unit->assembly, &point);\r
-               _mesa_memcpy (unit->machine->mem, mach.mem, SLANG_MACHINE_MEMORY_SIZE * sizeof (slang_machine_slot));\r
        }\r
 }\r
 \r
@@ -1215,14 +1242,13 @@ void exec_fragment_shader (struct gl2_fragment_shader_intf **fs)
        {\r
                slang_function *f;\r
                slang_assembly_file_restore_point point;\r
-               slang_machine mach;\r
                slang_assemble_ctx A;\r
 \r
                f = &unit->functions.functions[i];\r
                slang_assembly_file_restore_point_save (unit->assembly, &point);\r
-               mach = *unit->machine;\r
-               mach.ip = unit->assembly->count;\r
-               mach.kill = 0;\r
+\r
+               slang_machine_init (unit->machine);\r
+               unit->machine->ip = unit->assembly->count;\r
 \r
                A.file = unit->assembly;\r
                A.mach = unit->machine;\r
@@ -1235,13 +1261,57 @@ void exec_fragment_shader (struct gl2_fragment_shader_intf **fs)
                _slang_assemble_function_call (&A, f, NULL, 0, GL_FALSE);\r
                slang_assembly_file_push (unit->assembly, slang_asm_exit);\r
 \r
-               _slang_execute2 (unit->assembly, &mach);\r
+               _slang_execute2 (unit->assembly, unit->machine);\r
+\r
                slang_assembly_file_restore_point_load (unit->assembly, &point);\r
-               _mesa_memcpy (unit->machine->mem, mach.mem, SLANG_MACHINE_MEMORY_SIZE * sizeof (slang_machine_slot));\r
-               unit->machine->kill = mach.kill;\r
        }\r
 }\r
 \r
+GLint _slang_get_uniform_location (struct gl2_program_intf **pro, const char *name)\r
+{\r
+       struct gl2_program_impl *impl;\r
+       slang_uniform_bindings *bind;\r
+       GLuint i;\r
+\r
+       impl = (struct gl2_program_impl *) pro;\r
+       bind = &impl->_obj.prog.uniforms;\r
+       for (i = 0; i < bind->count; i++)\r
+               if (_mesa_strcmp (bind->table[i].name, name) == 0)\r
+                       return i;\r
+       return -1;\r
+}\r
+\r
+GLboolean _slang_write_uniform (struct gl2_program_intf **pro, GLint loc, GLsizei count,\r
+       const GLvoid *data, GLenum type)\r
+{\r
+       struct gl2_program_impl *impl;\r
+       slang_uniform_bindings *bind;\r
+       slang_uniform_binding *b;\r
+       GLuint i;\r
+\r
+       if (loc == -1)\r
+               return GL_TRUE;\r
+\r
+       impl = (struct gl2_program_impl *) pro;\r
+       bind = &impl->_obj.prog.uniforms;\r
+       if (loc >= bind->count)\r
+               return GL_FALSE;\r
+\r
+       b = &bind->table[loc];\r
+       /* TODO: check sizes */\r
+       /* TODO: check if not structure */\r
+       if (b->quant->u.basic_type != type)\r
+               return GL_FALSE;\r
+\r
+       for (i = 0; i < SLANG_UNIFORM_BINDING_MAX; i++)\r
+               if (b->address[i] != ~0)\r
+               {\r
+                       _mesa_memcpy (&impl->_obj.prog.machines[i]->mem[b->address[i] / 4], data,\r
+                               count * b->quant->size);\r
+               }\r
+       return GL_TRUE;\r
+}\r
+\r
 void\r
 _mesa_init_shaderobjects_3dlabs (GLcontext *ctx)\r
 {\r
index c7c2741..4d82d54 100755 (executable)
@@ -1,7 +1,7 @@
 
 //
 // TODO:
-// - implement texture1D, texture2D, texture3D, textureCube,
+// - implement texture1D, texture3D, textureCube,
 // - implement shadow1D, shadow2D,
 //
 
@@ -181,27 +181,27 @@ float sin (float angle) {
 }\r
 
 vec2 sin (vec2 angle) {
-    vec2 u;\r
-    u.x = sin (angle.x);\r
-    u.y = sin (angle.y);\r
-    return u;\r
+    return vec2 (\r
+        sin (angle.x),\r
+        sin (angle.y)\r
+    );\r
 }\r
 
 vec3 sin (vec3 angle) {
-    vec3 u;\r
-    u.x = sin (angle.x);\r
-    u.y = sin (angle.y);\r
-    u.z = sin (angle.z);\r
-    return u;
+    return vec3 (\r
+        sin (angle.x),\r
+        sin (angle.y),\r
+        sin (angle.z)\r
+    );
 }\r
 
 vec4 sin (vec4 angle) {
-    vec4 u;\r
-    u.x = sin (angle.x);\r
-    u.y = sin (angle.y);\r
-    u.z = sin (angle.z);\r
-    u.w = sin (angle.w);\r
-    return u;
+    return vec4 (\r
+        sin (angle.x),\r
+        sin (angle.y),\r
+        sin (angle.z),\r
+        sin (angle.w)\r
+    );
 }
 
 float cos (float angle) {
@@ -209,27 +209,27 @@ float cos (float angle) {
 }\r
 
 vec2 cos (vec2 angle) {
-    vec2 u;\r
-    u.x = cos (angle.x);\r
-    u.y = cos (angle.y);\r
-    return u;
+    return vec2 (\r
+        cos (angle.x),\r
+        cos (angle.y)\r
+    );
 }\r
 
 vec3 cos (vec3 angle) {
-    vec3 u;\r
-    u.x = cos (angle.x);\r
-    u.y = cos (angle.y);\r
-    u.z = cos (angle.z);\r
-    return u;
+    return vec2 (\r
+        cos (angle.x),\r
+        cos (angle.y),\r
+        cos (angle.z)\r
+    );
 }\r
 
 vec4 cos (vec4 angle) {
-    vec4 u;\r
-    u.x = cos (angle.x);\r
-    u.y = cos (angle.y);\r
-    u.z = cos (angle.z);\r
-    u.w = cos (angle.w);\r
-    return u;
+    return vec4 (\r
+        cos (angle.x),\r
+        cos (angle.y),\r
+        cos (angle.z),\r
+        cos (angle.w)\r
+    );
 }
 
 float tan (float angle) {
@@ -237,27 +237,27 @@ float tan (float angle) {
 }\r
 
 vec2 tan (vec2 angle) {
-    vec2 u;\r
-    u.x = tan (angle.x);\r
-    u.y = tan (angle.y);\r
-    return u;
+    return vec2 (\r
+        tan (angle.x),\r
+        tan (angle.y)\r
+    );
 }\r
 
 vec3 tan (vec3 angle) {
-    vec3 u;\r
-    u.x = tan (angle.x);\r
-    u.y = tan (angle.y);\r
-    u.z = tan (angle.z);\r
-    return u;
+    return vec3 (\r
+        tan (angle.x),\r
+        tan (angle.y),\r
+        tan (angle.z)\r
+    );
 }\r
 
 vec4 tan (vec4 angle) {
-    vec4 u;\r
-    u.x = tan (angle.x);\r
-    u.y = tan (angle.y);\r
-    u.z = tan (angle.z);\r
-    u.w = tan (angle.w);\r
-    return u;
+    return vec4 (\r
+        tan (angle.x),\r
+        tan (angle.y),\r
+        tan (angle.z),\r
+        tan (angle.w)\r
+    );
 }
 
 float asin (float x) {
@@ -267,27 +267,27 @@ float asin (float x) {
 }\r
 
 vec2 asin (vec2 v) {
-    vec2 u;\r
-    u.x = asin (v.x);\r
-    u.y = asin (v.y);\r
-    return u;
+    return vec2 (\r
+        asin (v.x),\r
+        asin (v.y)\r
+    );
 }\r
 
 vec3 asin (vec3 v) {
-    vec3 u;\r
-    u.x = asin (v.x);\r
-    u.y = asin (v.y);\r
-    u.z = asin (v.z);\r
-    return u;
+    return vec3 (\r
+        asin (v.x),\r
+        asin (v.y),\r
+        asin (v.z)\r
+    );
 }\r
 
 vec4 asin (vec4 v) {
-    vec4 u;\r
-    u.x = asin (v.x);\r
-    u.y = asin (v.y);\r
-    u.z = asin (v.z);\r
-    u.w = asin (v.w);\r
-    return u;
+    return vec4 (\r
+        asin (v.x),\r
+        asin (v.y),\r
+        asin (v.z),\r
+        asin (v.w)\r
+    );
 }
 
 float acos (float x) {
@@ -295,27 +295,27 @@ float acos (float x) {
 }\r
 
 vec2 acos (vec2 v) {
-    vec2 u;\r
-    u.x = acos (v.x);\r
-    u.y = acos (v.y);\r
-    return u;
+    return vec2 (\r
+        acos (v.x),\r
+        acos (v.y)\r
+    );
 }\r
 
 vec3 acos (vec3 v) {
-    vec3 u;\r
-    u.x = acos (v.x);\r
-    u.y = acos (v.y);\r
-    u.z = acos (v.z);\r
-    return u;
+    return vec3 (\r
+        acos (v.x),\r
+        acos (v.y),\r
+        acos (v.z)\r
+    );
 }\r
 
 vec4 acos (vec4 v) {
-    vec4 u;\r
-    u.x = acos (v.x);\r
-    u.y = acos (v.y);\r
-    u.z = acos (v.z);\r
-    u.w = acos (v.w);\r
-    return u;
+    return vec4 (\r
+        acos (v.x),\r
+        acos (v.y),\r
+        acos (v.z),\r
+        acos (v.w)\r
+    );
 }
 
 float atan (float y_over_x) {\r
@@ -325,27 +325,27 @@ float atan (float y_over_x) {
 }\r
 \r
 vec2 atan (vec2 y_over_x) {\r
-    vec2 u;\r
-    u.x = atan (y_over_x.x);\r
-    u.y = atan (y_over_x.y);\r
-    return u;\r
+    return vec2 (\r
+        atan (y_over_x.x),\r
+        atan (y_over_x.y)\r
+    );\r
 }\r
 \r
 vec3 atan (vec3 y_over_x) {\r
-    vec3 u;\r
-    u.x = atan (y_over_x.x);\r
-    u.y = atan (y_over_x.y);\r
-    u.z = atan (y_over_x.z);\r
-    return u;\r
+    return vec3 (\r
+        atan (y_over_x.x),\r
+        atan (y_over_x.y),\r
+        atan (y_over_x.z)\r
+    );\r
 }\r
 \r
 vec4 atan (vec4 y_over_x) {\r
-    vec4 u;\r
-    u.x = atan (y_over_x.x);\r
-    u.y = atan (y_over_x.y);\r
-    u.z = atan (y_over_x.z);\r
-    u.w = atan (y_over_x.w);\r
-    return u;\r
+    return vec4 (\r
+        atan (y_over_x.x),\r
+        atan (y_over_x.y),\r
+        atan (y_over_x.z),\r
+        atan (y_over_x.w)\r
+    );\r
 }\r
 \r
 float atan (float y, float x) {\r
@@ -361,27 +361,27 @@ float atan (float y, float x) {
 }\r
 
 vec2 atan (vec2 u, vec2 v) {
-    vec2 t;\r
-    t.x = atan (u.x, v.x);\r
-    t.y = atan (u.y, v.y);\r
-    return t;
+    return vec2 (\r
+        atan (u.x, v.x),\r
+        atan (u.y, v.y)\r
+    );
 }\r
 
 vec3 atan (vec3 u, vec3 v) {
-    vec3 t;\r
-    t.x = atan (u.x, v.x);\r
-    t.y = atan (u.y, v.y);\r
-    t.z = atan (u.z, v.z);\r
-    return t;
+    return vec3 (\r
+        atan (u.x, v.x),\r
+        atan (u.y, v.y),\r
+        atan (u.z, v.z)\r
+    );
 }\r
 
 vec4 atan (vec4 u, vec4 v) {
-    vec4 t;\r
-    t.x = atan (u.x, v.x);\r
-    t.y = atan (u.y, v.y);\r
-    t.z = atan (u.z, v.z);\r
-    t.w = atan (u.w, v.w);\r
-    return t;
+    return vec4 (\r
+        atan (u.x, v.x),\r
+        atan (u.y, v.y),\r
+        atan (u.z, v.z),\r
+        atan (u.w, v.w)\r
+    );
 }
 
 //
@@ -395,27 +395,27 @@ float pow (float x, float y) {
 }\r
 
 vec2 pow (vec2 v, vec2 u) {
-    vec2 t;\r
-    t.x = pow (v.x, u.x);\r
-    t.y = pow (v.y, u.y);\r
-    return t;
+    return vec2 (\r
+        pow (v.x, u.x),\r
+        pow (v.y, u.y)\r
+    );
 }\r
 
 vec3 pow (vec3 v, vec3 u) {
-    vec3 t;\r
-    t.x = pow (v.x, u.x);\r
-    t.y = pow (v.y, u.y);\r
-    t.z = pow (v.z, u.z);\r
-    return t;
+    return vec3 (\r
+        pow (v.x, u.x),\r
+        pow (v.y, u.y),\r
+        pow (v.z, u.z)\r
+    );
 }\r
 
 vec4 pow (vec4 v, vec4 u) {
-    vec4 t;\r
-    t.x = pow (v.x, u.x);\r
-    t.y = pow (v.y, u.y);\r
-    t.z = pow (v.z, u.z);\r
-    t.w = pow (v.w, u.w);\r
-    return t;
+    return vec4 (\r
+        pow (v.x, u.x),\r
+        pow (v.y, u.y),\r
+        pow (v.z, u.z),\r
+        pow (v.w, u.w)\r
+    );
 }
 
 float exp (float x) {
@@ -441,27 +441,27 @@ float log2 (float x) {
 }\r
 \r
 vec2 log2 (vec2 v) {\r
-    vec2 u;\r
-    u.x = log2 (v.x);\r
-    u.y = log2 (v.y);\r
-    return u;\r
+    return vec2 (\r
+        log2 (v.x),\r
+        log2 (v.y)\r
+    );\r
 }\r
 \r
 vec3 log2 (vec3 v) {\r
-    vec3 u;\r
-    u.x = log2 (v.x);\r
-    u.y = log2 (v.y);\r
-    u.z = log2 (v.z);\r
-    return u;\r
+    return vec3 (\r
+        log2 (v.x),\r
+        log2 (v.y),\r
+        log2 (v.z)\r
+    );\r
 }\r
 \r
 vec4 log2 (vec4 v) {\r
-    vec4 u;\r
-    u.x = log2 (v.x);\r
-    u.y = log2 (v.y);\r
-    u.z = log2 (v.z);\r
-    u.w = log2 (v.w);\r
-    return u;\r
+    return vec4 (\r
+        log2 (v.x),\r
+        log2 (v.y),\r
+        log2 (v.z),\r
+        log2 (v.w)\r
+    );\r
 }\r
 \r
 float log (float x) {
@@ -537,27 +537,27 @@ float abs (float x) {
 }\r
 
 vec2 abs (vec2 v) {\r
-    vec2 u;\r
-    u.x = abs (v.x);\r
-    u.y = abs (v.y);
-    return u;
+    return vec2 (\r
+        abs (v.x),\r
+        abs (v.y)\r
+    );
 }\r
 
 vec3 abs (vec3 v) {
-    vec3 u;\r
-    u.x = abs (v.x);\r
-    u.y = abs (v.y);\r
-    u.z = abs (v.z);\r
-    return u;
+    return vec3 (\r
+        abs (v.x),\r
+        abs (v.y),\r
+        abs (v.z)\r
+    );
 }\r
 
 vec4 abs (vec4 v) {
-    vec4 u;\r
-    u.x = abs (v.x);\r
-    u.y = abs (v.y);\r
-    u.z = abs (v.z);\r
-    u.w = abs (v.w);\r
-    return u;
+    return vec4 (\r
+        abs (v.x),\r
+        abs (v.y),\r
+        abs (v.z),\r
+        abs (v.w)\r
+    );
 }
 
 float sign (float x) {
@@ -565,27 +565,27 @@ float sign (float x) {
 }\r
 
 vec2 sign (vec2 v) {
-    vec2 u;\r
-    u.x = sign (v.x);\r
-    u.y = sign (v.y);\r
-    return u;
+    return vec2 (\r
+        sign (v.x),\r
+        sign (v.y)\r
+    );
 }\r
 
 vec3 sign (vec3 v) {
-    vec3 u;\r
-    u.x = sign (v.x);\r
-    u.y = sign (v.y);\r
-    u.z = sign (v.z);\r
-    return u;
+    return vec3 (\r
+        sign (v.x),\r
+        sign (v.y),\r
+        sign (v.z)\r
+    );
 }\r
 
 vec4 sign (vec4 v) {
-    vec4 u;\r
-    u.x = sign (v.x);\r
-    u.y = sign (v.y);\r
-    u.z = sign (v.z);\r
-    u.w = sign (v.w);\r
-    return u;
+    return vec4 (\r
+        sign (v.x),\r
+        sign (v.y),\r
+        sign (v.z),\r
+        sign (v.w)\r
+    );
 }
 
 float floor (float x) {\r
@@ -595,27 +595,27 @@ float floor (float x) {
 }\r
 \r
 vec2 floor (vec2 v) {\r
-    vec2 u;\r
-    u.x = floor (v.x);\r
-    u.y = floor (v.y);\r
-    return u;\r
+    return vec2 (\r
+        floor (v.x),\r
+        floor (v.y)\r
+    );\r
 }\r
 \r
 vec3 floor (vec3 v) {\r
-    vec3 u;\r
-    u.x = floor (v.x);\r
-    u.y = floor (v.y);\r
-    u.z = floor (v.z);\r
-    return u;\r
+    return vec3 (\r
+        floor (v.x),\r
+        floor (v.y),\r
+        floor (v.z)\r
+    );\r
 }\r
 \r
 vec4 floor (vec4 v) {\r
-    vec4 u;\r
-    u.x = floor (v.x);\r
-    u.y = floor (v.y);\r
-    u.z = floor (v.z);\r
-    u.w = floor (v.w);\r
-    return u;\r
+    return vec4 (\r
+        floor (v.x),\r
+        floor (v.y),\r
+        floor (v.z),\r
+        floor (v.w)\r
+    );\r
 }\r
 \r
 float ceil (float x) {\r
@@ -625,27 +625,27 @@ float ceil (float x) {
 }\r
 \r
 vec2 ceil (vec2 v) {\r
-    vec2 u;\r
-    u.x = ceil (v.x);\r
-    u.y = ceil (v.y);\r
-    return u;\r
+    return vec2 (\r
+        ceil (v.x),\r
+        ceil (v.y)\r
+    );\r
 }\r
 \r
 vec3 ceil (vec3 v) {\r
-    vec3 u;\r
-    u.x = ceil (v.x);\r
-    u.y = ceil (v.y);\r
-    u.z = ceil (v.z);\r
-    return u;\r
+    return vec3 (\r
+        ceil (v.x),\r
+        ceil (v.y),\r
+        ceil (v.z)\r
+    );\r
 }\r
 \r
 vec4 ceil (vec4 v) {\r
-    vec4 u;\r
-    u.x = ceil (v.x);\r
-    u.y = ceil (v.y);\r
-    u.z = ceil (v.z);\r
-    u.w = ceil (v.w);\r
-    return u;\r
+    return vec4 (\r
+        ceil (v.x),\r
+        ceil (v.y),\r
+        ceil (v.z),\r
+        ceil (v.w)\r
+    );\r
 }
 \r
 float fract (float x) {\r
@@ -697,27 +697,27 @@ float min (float x, float y) {
 }\r
 
 vec2 min (vec2 v, vec2 u) {\r
-    vec2 t;\r
-    t.x = min (v.x, u.x);\r
-    t.y = min (v.y, u.y);\r
-    return t;\r
+    return vec2 (\r
+        min (v.x, u.x),\r
+        min (v.y, u.y)\r
+    );\r
 }\r
 \r
 vec3 min (vec3 v, vec3 u) {\r
-    vec3 t;\r
-    t.x = min (v.x, u.x);\r
-    t.y = min (v.y, u.y);\r
-    t.z = min (v.z, u.z);\r
-    return t;\r
+    return vec2 (\r
+        min (v.x, u.x),\r
+        min (v.y, u.y),\r
+        min (v.z, u.z)\r
+    );\r
 }\r
 \r
 vec4 min (vec4 v, vec4 u) {\r
-    vec4 t;\r
-    t.x = min (v.x, u.x);\r
-    t.y = min (v.y, u.y);\r
-    t.z = min (v.z, u.z);\r
-    t.w = min (v.w, u.w);\r
-    return t;\r
+    return vec4 (\r
+        min (v.x, u.x),\r
+        min (v.y, u.y),\r
+        min (v.z, u.z),\r
+        min (v.w, u.w)\r
+    );\r
 }\r
 \r
 vec2 min (vec2 v, float y) {
@@ -737,27 +737,27 @@ float max (float x, float y) {
 }\r
 
 vec2 max (vec2 v, vec2 u) {\r
-    vec2 t;\r
-    t.x = max (v.x, u.x);\r
-    t.y = max (v.y, u.y);\r
-    return t;\r
+    return vec2 (\r
+        max (v.x, u.x),\r
+        max (v.y, u.y)\r
+    );\r
 }\r
 \r
 vec3 max (vec3 v, vec3 u) {\r
-    vec3 t;\r
-    t.x = max (v.x, u.x);\r
-    t.y = max (v.y, u.y);\r
-    t.z = max (v.z, u.z);\r
-    return t;\r
+    return vec3 (\r
+        max (v.x, u.x),\r
+        max (v.y, u.y),\r
+        max (v.z, u.z)\r
+    );\r
 }\r
 \r
 vec4 max (vec4 v, vec4 u) {\r
-    vec4 t;\r
-    t.x = max (v.x, u.x);\r
-    t.y = max (v.y, u.y);\r
-    t.z = max (v.z, u.z);\r
-    t.w = max (v.w, u.w);\r
-    return t;\r
+    return vec4 (\r
+        max (v.x, u.x),\r
+        max (v.y, u.y),\r
+        max (v.z, u.z),\r
+        max (v.w, u.w)\r
+    );\r
 }\r
 \r
 vec2 max (vec2 v, float y) {
@@ -833,27 +833,27 @@ float step (float edge, float x) {
 }\r
 
 vec2 step (vec2 edge, vec2 v) {\r
-    vec2 u;\r
-    u.x = step (edge.x, v.x);\r
-    u.y = step (edge.y, v.y);\r
-    return u;\r
+    return vec2 (\r
+        step (edge.x, v.x),\r
+        step (edge.y, v.y)\r
+    );\r
 }\r
 \r
 vec3 step (vec3 edge, vec3 v) {\r
-    vec3 u;\r
-    u.x = step (edge.x, v.x);\r
-    u.y = step (edge.y, v.y);\r
-    u.z = step (edge.z, v.z);\r
-    return u;\r
+    return vec3 (\r
+        step (edge.x, v.x),\r
+        step (edge.y, v.y),\r
+        step (edge.z, v.z)\r
+    );\r
 }\r
 \r
 vec4 step (vec4 edge, vec4 v) {\r
-    vec4 u;\r
-    u.x = step (edge.x, v.x);\r
-    u.y = step (edge.y, v.y);\r
-    u.z = step (edge.z, v.z);\r
-    u.w = step (edge.w, v.w);\r
-    return u;\r
+    return vec4 (\r
+        step (edge.x, v.x),\r
+        step (edge.y, v.y),\r
+        step (edge.z, v.z),\r
+        step (edge.w, v.w)\r
+    );\r
 }\r
 \r
 vec2 step (float edge, vec2 v) {
@@ -875,51 +875,51 @@ float smoothstep (float edge0, float edge1, float x) {
 }\r
 
 vec2 smoothstep (vec2 edge0, vec2 edge1, vec2 v) {\r
-    vec2 u;\r
-    u.x = smoothstep (edge0.x, edge1.x, v.x);\r
-    u.y = smoothstep (edge0.y, edge1.y, v.y);\r
-    return u;\r
+    return vec2 (\r
+        smoothstep (edge0.x, edge1.x, v.x),\r
+        smoothstep (edge0.y, edge1.y, v.y)\r
+    );\r
 }\r
 \r
 vec3 smoothstep (vec3 edge0, vec3 edge1, vec3 v) {\r
-    vec3 u;\r
-    u.x = smoothstep (edge0.x, edge1.x, v.x);\r
-    u.y = smoothstep (edge0.y, edge1.y, v.y);\r
-    u.z = smoothstep (edge0.z, edge1.z, v.z);\r
-    return u;\r
+    return vec3 (\r
+        smoothstep (edge0.x, edge1.x, v.x),\r
+        smoothstep (edge0.y, edge1.y, v.y),\r
+        smoothstep (edge0.z, edge1.z, v.z)\r
+    );\r
 }\r
 \r
 vec4 smoothstep (vec4 edge0, vec4 edge1, vec4 v) {\r
-    vec4 u;\r
-    u.x = smoothstep (edge0.x, edge1.x, v.x);\r
-    u.y = smoothstep (edge0.y, edge1.y, v.y);\r
-    u.z = smoothstep (edge0.z, edge1.z, v.z);\r
-    u.w = smoothstep (edge0.w, edge1.w, v.w);\r
-    return u;\r
+    return vec4 (\r
+        smoothstep (edge0.x, edge1.x, v.x),\r
+        smoothstep (edge0.y, edge1.y, v.y),\r
+        smoothstep (edge0.z, edge1.z, v.z),\r
+        smoothstep (edge0.w, edge1.w, v.w)\r
+    );\r
 }\r
 \r
 vec2 smoothstep (float edge0, float edge1, vec2 v) {
-    vec2 u;\r
-    u.x = smoothstep (edge0, edge1, v.x);\r
-    u.y = smoothstep (edge0, edge1, v.y);\r
-    return u;
+    return vec2 (\r
+        smoothstep (edge0, edge1, v.x),\r
+        smoothstep (edge0, edge1, v.y)\r
+    );\r
 }\r
 
 vec3 smoothstep (float edge0, float edge1, vec3 v) {
-    vec3 u;\r
-    u.x = smoothstep (edge0, edge1, v.x);\r
-    u.y = smoothstep (edge0, edge1, v.y);\r
-    u.z = smoothstep (edge0, edge1, v.z);\r
-    return u;
+    return vec3 (\r
+        smoothstep (edge0, edge1, v.x),\r
+        smoothstep (edge0, edge1, v.y),\r
+        smoothstep (edge0, edge1, v.z)\r
+    );\r
 }\r
 
 vec4 smoothstep (float edge0, float edge1, vec4 v) {
-    vec4 u;\r
-    u.x = smoothstep (edge0, edge1, v.x);\r
-    u.y = smoothstep (edge0, edge1, v.y);\r
-    u.z = smoothstep (edge0, edge1, v.z);\r
-    u.w = smoothstep (edge0, edge1, v.w);\r
-    return u;
+    return vec4 (\r
+        smoothstep (edge0, edge1, v.x),\r
+        smoothstep (edge0, edge1, v.y),\r
+        smoothstep (edge0, edge1, v.z),\r
+        smoothstep (edge0, edge1, v.w)\r
+    );\r
 }\r
 
 //
@@ -975,11 +975,11 @@ float distance (vec4 v, vec4 u) {
 }
 
 vec3 cross (vec3 v, vec3 u) {
-    vec3 t;\r
-    t.x = v.y * u.z - u.y * v.z;\r
-    t.y = v.z * u.x - u.z * v.x;\r
-    t.z = v.x * u.y - u.x * v.y;\r
-    return t;
+    return vec3 (\r
+        v.y * u.z - u.y * v.z,\r
+        v.z * u.x - u.z * v.x,\r
+        v.x * u.y - u.x * v.y\r
+    );\r
 }
 
 float normalize (float x) {
@@ -1067,27 +1067,15 @@ vec4 refract (vec4 I, vec4 N, float eta) {
 //
 
 mat2 matrixCompMult (mat2 m, mat2 n) {
-    mat2 o;
-    o[0] = m[0] * n[0];\r
-    o[1] = m[1] * n[1];
-    return o;
+    return mat2 (m[0] * n[0], m[1] * n[1]);
 }\r
 
 mat3 matrixCompMult (mat3 m, mat3 n) {
-    mat3 o;
-    o[0] = m[0] * n[0];\r
-    o[1] = m[1] * n[1];\r
-    o[2] = m[2] * n[2];
-    return o;
+    return mat3 (m[0] * n[0], m[1] * n[1], m[2] * n[2]);
 }\r
 
 mat4 matrixCompMult (mat4 m, mat4 n) {
-    mat4 o;
-    o[0] = m[0] * n[0];\r
-    o[1] = m[1] * n[1];\r
-    o[2] = m[2] * n[2];\r
-    o[3] = m[3] * n[3];
-    return o;
+    return mat4 (m[0] * n[0], m[1] * n[1], m[2] * n[2], m[3] * n[3]);
 }
 
 //
@@ -1095,291 +1083,147 @@ mat4 matrixCompMult (mat4 m, mat4 n) {
 //
 
 bvec2 lessThan (vec2 v, vec2 u) {\r
-    bvec2 b;\r
-    b.x = v.x < u.x;\r
-    b.y = v.y < u.y;\r
-    return b;
+    return bvec2 (v.x < u.x, v.y < u.y);
 }\r
 
 bvec3 lessThan (vec3 v, vec3 u) {
-    bvec3 b;\r
-    b.x = v.x < u.x;\r
-    b.y = v.y < u.y;\r
-    b.z = v.z < u.z;\r
-    return b;
+    return bvec3 (v.x < u.x, v.y < u.y, v.z < u.z);
 }\r
 
 bvec4 lessThan (vec4 v, vec4 u) {
-    bvec4 b;\r
-    b.x = v.x < u.x;\r
-    b.y = v.y < u.y;\r
-    b.z = v.z < u.z;\r
-    b.w = v.w < u.w;\r
-    return b;
+    return bvec4 (v.x < u.x, v.y < u.y, v.z < u.z, v.w < u.w);
 }\r
 
 bvec2 lessThan (ivec2 v, ivec2 u) {
-    bvec2 b;\r
-    b.x = v.x < u.x;\r
-    b.y = v.y < u.y;\r
-    return b;
+    return bvec2 (v.x < u.x, v.y < u.y);
 }\r
 
 bvec3 lessThan (ivec3 v, ivec3 u) {
-    bvec3 b;\r
-    b.x = v.x < u.x;\r
-    b.y = v.y < u.y;\r
-    b.z = v.z < u.z;\r
-    return b;
+    return bvec3 (v.x < u.x, v.y < u.y, v.z < u.z);
 }\r
 
 bvec4 lessThan (ivec4 v, ivec4 u) {
-    bvec4 b;\r
-    b.x = v.x < u.x;\r
-    b.y = v.y < u.y;\r
-    b.z = v.z < u.z;\r
-    b.w = v.w < u.w;\r
-    return b;
+    return bvec4 (v.x < u.x, v.y < u.y, v.z < u.z, v.w < u.w);
 }
 
 bvec2 lessThanEqual (vec2 v, vec2 u) {
-    bvec2 b;\r
-    b.x = v.x <= u.x;\r
-    b.y = v.y <= u.y;\r
-    return b;
+    return bvec2 (v.x <= u.x, v.y <= u.y);
 }\r
 
 bvec3 lessThanEqual (vec3 v, vec3 u) {
-    bvec3 b;\r
-    b.x = v.x <= u.x;\r
-    b.y = v.y <= u.y;\r
-    b.z = v.z <= u.z;\r
-    return b;
+    return bvec3 (v.x <= u.x, v.y <= u.y, v.z <= u.z);
 }\r
 
 bvec4 lessThanEqual (vec4 v, vec4 u) {
-    bvec4 b;\r
-    b.x = v.x <= u.x;\r
-    b.y = v.y <= u.y;\r
-    b.z = v.z <= u.z;\r
-    b.w = v.w <= u.w;\r
-    return b;
+    return bvec4 (v.x <= u.x, v.y <= u.y, v.z <= u.z, v.w <= u.w);
 }\r
 
 bvec2 lessThanEqual (ivec2 v, ivec2 u) {
-    bvec2 b;\r
-    b.x = v.x <= u.x;\r
-    b.y = v.y <= u.y;\r
-    return b;
+    return bvec2 (v.x <= u.x, v.y <= u.y);
 }\r
 
 bvec3 lessThanEqual (ivec3 v, ivec3 u) {
-    bvec3 b;\r
-    b.x = v.x <= u.x;\r
-    b.y = v.y <= u.y;\r
-    b.z = v.z <= u.z;\r
-    return b;
+    return bvec3 (v.x <= u.x, v.y <= u.y, v.z <= u.z);
 }\r
 
 bvec4 lessThanEqual (ivec4 v, ivec4 u) {
-    bvec4 b;\r
-    b.x = v.x <= u.x;\r
-    b.y = v.y <= u.y;\r
-    b.z = v.z <= u.z;\r
-    b.w = v.w <= u.w;\r
-    return b;
+    return bvec4 (v.x <= u.x, v.y <= u.y, v.z <= u.z, v.w <= u.w);
 }
 
 bvec2 greaterThan (vec2 v, vec2 u) {
-    bvec2 b;\r
-    b.x = v.x > u.x;\r
-    b.y = v.y > u.y;\r
-    return b;
+    return bvec2 (v.x > u.x, v.y > u.y);
 }\r
 
 bvec3 greaterThan (vec3 v, vec3 u) {
-    bvec3 b;\r
-    b.x = v.x > u.x;\r
-    b.y = v.y > u.y;\r
-    b.z = v.z > u.z;\r
-    return b;
+    return bvec3 (v.x > u.x, v.y > u.y, v.z > u.z);
 }\r
 
 bvec4 greaterThan (vec4 v, vec4 u) {
-    bvec4 b;\r
-    b.x = v.x > u.x;\r
-    b.y = v.y > u.y;\r
-    b.z = v.z > u.z;\r
-    b.w = v.w > u.w;\r
-    return b;
+    return bvec4 (v.x > u.x, v.y > u.y, v.z > u.z, v.w > u.w);
 }\r
 
 bvec2 greaterThan (ivec2 v, ivec2 u) {
-    bvec2 b;\r
-    b.x = v.x > u.x;\r
-    b.y = v.y > u.y;\r
-    return b;
+    return bvec2 (v.x > u.x, v.y > u.y);
 }\r
 
 bvec3 greaterThan (ivec3 v, ivec3 u) {
-    bvec3 b;\r
-    b.x = v.x > u.x;\r
-    b.y = v.y > u.y;\r
-    b.z = v.z > u.z;\r
-    return b;
+    return bvec3 (v.x > u.x, v.y > u.y, v.z > u.z);
 }\r
 
 bvec4 greaterThan (ivec4 v, ivec4 u) {
-    bvec4 b;\r
-    b.x = v.x > u.x;\r
-    b.y = v.y > u.y;\r
-    b.z = v.z > u.z;\r
-    b.w = v.w > u.w;\r
-    return b;
+   return bvec4 (v.x > u.x, v.y > u.y, v.z > u.z, v.w > u.w);
 }
 
 bvec2 greaterThanEqual (vec2 v, vec2 u) {
-    bvec2 b;\r
-    b.x = v.x >= u.x;\r
-    b.y = v.y >= u.y;\r
-    return b;
+    return bvec2 (v.x >= u.x, v.y >= u.y);
 }\r
 
 bvec3 greaterThanEqual (vec3 v, vec3 u) {
-    bvec3 b;\r
-    b.x = v.x >= u.x;\r
-    b.y = v.y >= u.y;\r
-    b.z = v.z >= u.z;\r
-    return b;
+    return bvec3 (v.x >= u.x, v.y >= u.y, v.z >= u.z);
 }\r
 
 bvec4 greaterThanEqual (vec4 v, vec4 u) {
-    bvec4 b;\r
-    b.x = v.x >= u.x;\r
-    b.y = v.y >= u.y;\r
-    b.z = v.z >= u.z;\r
-    b.w = v.w >= u.w;\r
-    return b;
+    return bvec4 (v.x >= u.x, v.y >= u.y, v.z >= u.z, v.w >= u.w);
 }\r
 
 bvec2 greaterThanEqual (ivec2 v, ivec2 u) {
-    bvec2 b;\r
-    b.x = v.x >= u.x;\r
-    b.y = v.y >= u.y;\r
-    return b;
+    return bvec2 (v.x >= u.x, v.y >= u.y);
 }\r
 
 bvec3 greaterThanEqual (ivec3 v, ivec3 u) {
-    bvec3 b;\r
-    b.x = v.x >= u.x;\r
-    b.y = v.y >= u.y;\r
-    b.z = v.z >= u.z;\r
-    return b;
+    return bvec3 (v.x >= u.x, v.y >= u.y, v.z >= u.z);
 }\r
 
 bvec4 greaterThanEqual (ivec4 v, ivec4 u) {
-    bvec4 b;\r
-    b.x = v.x >= u.x;\r
-    b.y = v.y >= u.y;\r
-    b.z = v.z >= u.z;\r
-    b.w = v.w >= u.w;\r
-    return b;
+    return bvec4 (v.x >= u.x, v.y >= u.y, v.z >= u.z, v.w >= u.w);
 }
 
 bvec2 equal (vec2 v, vec2 u) {
-    bvec2 b;\r
-    b.x = v.x == u.x;\r
-    b.y = v.y == u.y;\r
-    return b;
+    return bvec2 (v.x == u.x, v.y == u.y);
 }\r
 
 bvec3 equal (vec3 v, vec3 u) {
-    bvec3 b;\r
-    b.x = v.x == u.x;\r
-    b.y = v.y == u.y;\r
-    b.z = v.z == u.z;\r
-    return b;
+    return bvec3 (v.x == u.x, v.y == u.y, v.z == u.z);
 }\r
 
 bvec4 equal (vec4 v, vec4 u) {
-    bvec4 b;\r
-    b.x = v.x == u.x;\r
-    b.y = v.y == u.y;\r
-    b.z = v.z == u.z;\r
-    b.w = v.w == u.w;\r
-    return b;
+    return bvec4 (v.x == u.x, v.y == u.y, v.z == u.z, v.w == u.w);
 }\r
 
 bvec2 equal (ivec2 v, ivec2 u) {
-    bvec2 b;\r
-    b.x = v.x == u.x;\r
-    b.y = v.y == u.y;\r
-    return b;
+    return bvec2 (v.x == u.x, v.y == u.y);
 }\r
 
 bvec3 equal (ivec3 v, ivec3 u) {
-    bvec3 b;\r
-    b.x = v.x == u.x;\r
-    b.y = v.y == u.y;\r
-    b.z = v.z == u.z;\r
-    return b;
+    return bvec3 (v.x == u.x, v.y == u.y, v.z == u.z);
 }\r
 
 bvec4 equal (ivec4 v, ivec4 u) {
-    bvec4 b;\r
-    b.x = v.x == u.x;\r
-    b.y = v.y == u.y;\r
-    b.z = v.z == u.z;\r
-    b.w = v.w == u.w;\r
-    return b;
+    return bvec4 (v.x == u.x, v.y == u.y, v.z == u.z, v.w == u.w);
 }
 
 bvec2 notEqual (vec2 v, vec2 u) {
-    bvec2 b;\r
-    b.x = v.x != u.x;\r
-    b.y = v.y != u.y;\r
-    return b;
+    return bvec2 (v.x != u.x, v.y != u.y);
 }\r
 
 bvec3 notEqual (vec3 v, vec3 u) {
-    bvec3 b;\r
-    b.x = v.x != u.x;\r
-    b.y = v.y != u.y;\r
-    b.z = v.z != u.z;\r
-    return b;
+    return bvec3 (v.x != u.x, v.y != u.y, v.z != u.z);
 }\r
 
 bvec4 notEqual (vec4 v, vec4 u) {
-    bvec4 b;\r
-    b.x = v.x != u.x;\r
-    b.y = v.y != u.y;\r
-    b.z = v.z != u.z;\r
-    b.w = v.w != u.w;\r
-    return b;
+    return bvec4 (v.x != u.x, v.y != u.y, v.z != u.z, v.w != u.w);
 }\r
 
 bvec2 notEqual (ivec2 v, ivec2 u) {
-    bvec2 b;\r
-    b.x = v.x != u.x;\r
-    b.y = v.y != u.y;\r
-    return b;
+    return bvec2 (v.x != u.x, v.y != u.y);
 }\r
 
 bvec3 notEqual (ivec3 v, ivec3 u) {
-    bvec3 b;\r
-    b.x = v.x != u.x;\r
-    b.y = v.y != u.y;\r
-    b.z = v.z != u.z;\r
-    return b;
+    return bvec3 (v.x != u.x, v.y != u.y, v.z != u.z);
 }\r
 
 bvec4 notEqual (ivec4 v, ivec4 u) {
-    bvec4 b;\r
-    b.x = v.x != u.x;\r
-    b.y = v.y != u.y;\r
-    b.z = v.z != u.z;\r
-    b.w = v.w != u.w;\r
-    return b;
+    return bvec4 (v.x != u.x, v.y != u.y, v.z != u.z, v.w != u.w);\r
 }
 
 bool any (bvec2 v) {
@@ -1407,27 +1251,15 @@ bool all (bvec4 v) {
 }
 
 bvec2 not (bvec2 v) {\r
-    bvec2 u;\r
-    u.x = !v.x;\r
-    u.y = !v.y;
-    return u;
+    return bvec2 (!v.x, !v.y);\r
 }\r
 
 bvec3 not (bvec3 v) {
-    bvec3 u;\r
-    u.x = !v.x;\r
-    u.y = !v.y;\r
-    u.z = !v.z;\r
-    return u;
+    return bvec3 (!v.x, !v.y, !v.z);
 }\r
 
 bvec4 not (bvec4 v) {
-    bvec4 u;\r
-    u.x = !v.x;\r
-    u.y = !v.y;\r
-    u.z = !v.z;\r
-    u.w = !v.w;\r
-    return u;
+    return bvec4 (!v.x, !v.y, !v.z, !v.w);\r
 }
 
 //
@@ -1448,22 +1280,17 @@ vec4 texture1DProj (sampler1D sampler, vec4 coord) {
 }
 
 vec4 texture2D (sampler2D sampler, vec2 coord) {\r
-    // XXX:
-    return vec4 (0.0);
+    vec4 texel;\r
+    __asm vec4_tex2d texel, sampler, coord;\r
+    return texel;
 }\r
 
 vec4 texture2DProj (sampler2D sampler, vec3 coord) {\r
-    vec2 u;\r
-    u.s = coord.s / coord.p;\r
-    u.t = coord.t / coord.p;
-    return texture2D (sampler, u);
+    return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p));
 }\r
 
 vec4 texture2DProj (sampler2D sampler, vec4 coord) {\r
-    vec2 u;\r
-    u.s = coord.s / coord.q;\r
-    u.t = coord.t / coord.q;
-    return texture2D (sampler, u);
+    return texture2D (sampler, vec2 (coord.s / coord.q, coord.t / coord.q));
 }
 
 vec4 texture3D (sampler3D sampler, vec3 coord) {\r
@@ -1472,11 +1299,7 @@ vec4 texture3D (sampler3D sampler, vec3 coord) {
 }\r
 
 vec4 texture3DProj (sampler3D sampler, vec4 coord) {\r
-    vec3 u;\r
-    u.s = coord.s / coord.q;\r
-    u.t = coord.t / coord.q;\r
-    u.p = coord.p / coord.q;
-    return texture3D (sampler, u);
+    return texture3D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q));
 }
 
 vec4 textureCube (samplerCube sampler, vec3 coord) {\r
@@ -1495,19 +1318,11 @@ vec4 shadow2D (sampler2DShadow sampler, vec3 coord) {
 }\r
 
 vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord) {\r
-    vec3 u;\r
-    u.s = coord.s / coord.q;\r
-    u.t = 0.0;\r
-    u.p = coord.p / coord.q;
-    return shadow1D (sampler, u);
+    return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q));
 }\r
 
 vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord) {\r
-    vec3 u;\r
-    u.s = coord.s / coord.q;\r
-    u.t = coord.t / coord.q;\r
-    u.p = coord.p / coord.q;
-    return shadow2D (sampler, u);
+    return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q));
 }
 
 //
@@ -1541,98 +1356,98 @@ float noise1 (vec4 x) {
 }
 
 vec2 noise2 (float x) {\r
-    vec2 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + 19.34);\r
-    return u;
+    return vec2 (\r
+        noise1 (x),\r
+        noise1 (x + 19.34)\r
+    );
 }
 
 vec2 noise2 (vec2 x) {\r
-    vec2 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec2 (19.34, 7.66));\r
-    return u;
+    return vec2 (\r
+        noise1 (x),\r
+        noise1 (x + vec2 (19.34, 7.66))\r
+    );
 }
 
 vec2 noise2 (vec3 x) {\r
-    vec2 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec3 (19.34, 7.66, 3.23));\r
-    return u;
+    return vec2 (\r
+        noise1 (x),\r
+        noise1 (x + vec3 (19.34, 7.66, 3.23))\r
+    );
 }
 
 vec2 noise2 (vec4 x) {\r
-    vec2 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77));\r
-    return u;
+    return vec2 (\r
+        noise1 (x),\r
+        noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77))\r
+    );
 }
 
 vec3 noise3 (float x) {\r
-    vec3 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + 19.34);\r
-    u.z = noise1 (x + 5.47);\r
-    return u;
+    return vec3 (\r
+        noise1 (x),\r
+        noise1 (x + 19.34),\r
+        noise1 (x + 5.47)\r
+    );\r
 }
 
 vec3 noise3 (vec2 x) {\r
-    vec3 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec2 (19.34, 7.66));\r
-    u.z = noise1 (x + vec2 (5.47, 17.85));\r
-    return u;
+    return vec3 (\r
+        noise1 (x),\r
+        noise1 (x + vec2 (19.34, 7.66)),\r
+        noise1 (x + vec2 (5.47, 17.85))\r
+    );\r
 }
 
 vec3 noise3 (vec3 x) {\r
-    vec3 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec3 (19.34, 7.66, 3.23));\r
-    u.z = noise1 (x + vec3 (5.47, 17.85, 11.04));\r
-    return u;
+    return vec3 (\r
+        noise1 (x),\r
+        noise1 (x + vec3 (19.34, 7.66, 3.23)),\r
+        noise1 (x + vec3 (5.47, 17.85, 11.04))\r
+    );
 }
 
 vec3 noise3 (vec4 x) {\r
-    vec3 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77));\r
-    u.z = noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19));\r
-    return u;
+    return vec3 (\r
+        noise1 (x),\r
+        noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77)),\r
+        noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19))\r
+    );
 }
 
 vec4 noise4 (float x) {\r
-    vec4 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + 19.34);\r
-    u.z = noise1 (x + 5.47);\r
-    u.w = noise1 (x + 23.54);\r
-    return u;
+    return vec4 (\r
+        noise1 (x),\r
+        noise1 (x + 19.34),\r
+        noise1 (x + 5.47),\r
+        noise1 (x + 23.54)\r
+    );\r
 }
 
 vec4 noise4 (vec2 x) {\r
-    vec4 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec2 (19.34, 7.66));\r
-    u.z = noise1 (x + vec2 (5.47, 17.85));\r
-    u.w = noise1 (x + vec2 (23.54, 29.11));\r
-    return u;
+    return vec4 (\r
+        noise1 (x),\r
+        noise1 (x + vec2 (19.34, 7.66)),\r
+        noise1 (x + vec2 (5.47, 17.85)),\r
+        noise1 (x + vec2 (23.54, 29.11))\r
+    );\r
 }
 
 vec4 noise4 (vec3 x) {\r
-    vec4 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec3 (19.34, 7.66, 3.23));\r
-    u.z = noise1 (x + vec3 (5.47, 17.85, 11.04));\r
-    u.w = noise1 (x + vec3 (23.54, 29.11, 31.91));\r
-    return u;
+    return vec4 (\r
+        noise1 (x),\r
+        noise1 (x + vec3 (19.34, 7.66, 3.23)),\r
+        noise1 (x + vec3 (5.47, 17.85, 11.04)),\r
+        noise1 (x + vec3 (23.54, 29.11, 31.91))\r
+    );\r
 }
 
 vec4 noise4 (vec4 x) {\r
-    vec4 u;\r
-    u.x = noise1 (x);\r
-    u.y = noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77));\r
-    u.z = noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19));\r
-    u.w = noise1 (x + vec4 (23.54, 29.11, 31.91, 37.48));\r
-    return u;
+    return vec4 (\r
+        noise1 (x),\r
+        noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77)),\r
+        noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19)),\r
+        noise1 (x + vec4 (23.54, 29.11, 31.91, 37.48))\r
+    );\r
 }
 \r
index 0422790..7198e5f 100644 (file)
 97,100,0,0,0,1,8,58,118,101,99,52,0,17,49,56,48,0,48,0,0,0,0,18,114,97,100,0,48,58,118,101,99,52,0,\r
 17,51,0,49,52,49,53,57,51,0,0,0,0,49,0,0,1,0,9,0,115,105,110,0,1,0,0,9,97,110,103,108,101,0,0,0,1,\r
 3,2,0,9,1,120,0,0,0,4,102,108,111,97,116,95,115,105,110,101,0,18,120,0,0,18,97,110,103,108,101,0,0,\r
-0,8,18,120,0,0,0,1,0,10,0,115,105,110,0,1,0,0,10,97,110,103,108,101,0,0,0,1,3,2,0,10,1,117,0,0,0,9,\r
-18,117,0,59,120,0,58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,\r
-58,115,105,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,105,110,0,1,\r
-0,0,11,97,110,103,108,101,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,110,0,18,97,\r
-110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,105,110,0,18,97,110,103,108,101,0,\r
-59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,105,110,0,18,97,110,103,108,101,0,59,122,0,0,0,20,0,8,\r
-18,117,0,0,0,1,0,12,0,115,105,110,0,1,0,0,12,97,110,103,108,101,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,\r
-117,0,59,120,0,58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,\r
-115,105,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,105,110,0,18,97,\r
-110,103,108,101,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,105,110,0,18,97,110,103,108,101,0,\r
-59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,99,111,115,0,1,0,0,9,97,110,103,108,101,0,0,0,1,8,58,115,\r
-105,110,0,18,97,110,103,108,101,0,17,49,0,53,55,48,56,0,0,46,0,0,0,0,1,0,10,0,99,111,115,0,1,0,0,\r
-10,97,110,103,108,101,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,99,111,115,0,18,97,110,\r
-103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,\r
-0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,99,111,115,0,1,0,0,11,97,110,103,108,101,0,0,0,1,3,2,0,11,1,117,\r
-0,0,0,9,18,117,0,59,120,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,\r
-121,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,99,111,115,\r
-0,18,97,110,103,108,101,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,99,111,115,0,1,0,0,12,97,110,\r
-103,108,101,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,99,111,115,0,18,97,110,103,108,101,\r
-0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,\r
-9,18,117,0,59,122,0,58,99,111,115,0,18,97,110,103,108,101,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,\r
-58,99,111,115,0,18,97,110,103,108,101,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,116,97,110,0,1,0,\r
-0,9,97,110,103,108,101,0,0,0,1,8,58,115,105,110,0,18,97,110,103,108,101,0,0,0,58,99,111,115,0,18,\r
-97,110,103,108,101,0,0,0,49,0,0,1,0,10,0,116,97,110,0,1,0,0,10,97,110,103,108,101,0,0,0,1,3,2,0,10,\r
-1,117,0,0,0,9,18,117,0,59,120,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,\r
-0,59,121,0,58,116,97,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,116,\r
-97,110,0,1,0,0,11,97,110,103,108,101,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,116,97,\r
-110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,116,97,110,0,18,97,110,103,\r
-108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,116,97,110,0,18,97,110,103,108,101,0,59,122,0,0,\r
-0,20,0,8,18,117,0,0,0,1,0,12,0,116,97,110,0,1,0,0,12,97,110,103,108,101,0,0,0,1,3,2,0,12,1,117,0,0,\r
-0,9,18,117,0,59,120,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,\r
-0,58,116,97,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,116,97,110,0,18,\r
-97,110,103,108,101,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,116,97,110,0,18,97,110,103,108,101,0,\r
-59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,97,115,105,110,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,\r
-4,102,108,111,97,116,95,97,114,99,115,105,110,101,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,\r
-0,97,115,105,110,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,115,105,110,\r
-0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,115,105,110,0,18,118,0,59,121,0,0,0,20,0,8,\r
-18,117,0,0,0,1,0,11,0,97,115,105,110,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,\r
-0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,115,105,110,0,18,118,0,\r
-59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,\r
-0,1,0,12,0,97,115,105,110,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,97,\r
-115,105,110,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,115,105,110,0,18,118,0,59,121,0,\r
-0,0,20,0,9,18,117,0,59,122,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,\r
-97,115,105,110,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,97,99,111,115,0,1,0,0,9,120,0,0,\r
-0,1,8,17,49,0,53,55,48,56,0,0,58,97,115,105,110,0,18,120,0,0,0,47,0,0,1,0,10,0,97,99,111,115,0,1,0,\r
-0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,99,111,115,0,18,118,0,59,120,0,0,0,\r
-20,0,9,18,117,0,59,121,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,97,\r
-99,111,115,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,97,99,111,115,0,18,\r
-118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,\r
-0,59,122,0,58,97,99,111,115,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,97,99,111,115,0,1,\r
-0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,97,99,111,115,0,18,118,0,59,120,0,0,\r
-0,20,0,9,18,117,0,59,121,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,97,\r
-99,111,115,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,97,99,111,115,0,18,118,0,59,119,0,0,\r
-0,20,0,8,18,117,0,0,0,1,0,9,0,97,116,97,110,0,1,0,0,9,121,95,111,118,101,114,95,120,0,0,0,1,3,2,0,\r
-9,1,122,0,0,0,4,102,108,111,97,116,95,97,114,99,116,97,110,0,18,122,0,0,18,121,95,111,118,101,114,\r
-95,120,0,0,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,121,95,111,118,101,114,95,120,0,0,0,\r
-1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,\r
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,\r
-0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,121,95,111,118,101,114,95,120,0,0,0,1,\r
-3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,\r
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,0,\r
-0,0,20,0,9,18,117,0,59,122,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,122,0,0,0,20,\r
-0,8,18,117,0,0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,121,95,111,118,101,114,95,120,0,0,0,1,3,2,0,12,\r
-1,117,0,0,0,9,18,117,0,59,120,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,\r
-20,0,9,18,117,0,59,121,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,0,0,0,20,0,9,\r
-18,117,0,59,122,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,122,0,0,0,20,0,9,18,117,\r
-0,59,119,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,119,0,0,0,20,0,8,18,117,0,0,0,\r
-1,0,9,0,97,116,97,110,0,1,0,0,9,121,0,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,122,0,0,0,9,18,122,0,58,97,\r
-116,97,110,0,18,121,0,18,120,0,49,0,0,20,0,10,18,120,0,17,48,0,48,0,0,40,0,2,10,18,121,0,17,48,0,\r
-48,0,0,40,0,8,18,122,0,17,51,0,49,52,49,53,57,51,0,0,47,0,9,14,0,8,18,122,0,17,51,0,49,52,49,53,57,\r
-51,0,0,46,0,0,9,14,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,117,0,0,1,0,0,10,118,0,0,0,1,\r
-3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,\r
-0,0,20,0,9,18,116,0,59,121,0,58,97,116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,8,\r
-18,116,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,117,0,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,116,0,0,0,9,\r
-18,116,0,59,120,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,116,0,59,\r
-121,0,58,97,116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,97,\r
-116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,8,18,116,0,0,0,1,0,12,0,97,116,97,110,\r
-0,1,0,0,12,117,0,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,58,97,116,97,110,\r
-0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,97,116,97,110,0,18,117,0,\r
-59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,97,116,97,110,0,18,117,0,59,122,0,0,\r
-18,118,0,59,122,0,0,0,20,0,9,18,116,0,59,119,0,58,97,116,97,110,0,18,117,0,59,119,0,0,18,118,0,59,\r
-119,0,0,0,20,0,8,18,116,0,0,0,1,0,9,0,112,111,119,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,3,2,0,9,1,\r
-112,0,0,0,4,102,108,111,97,116,95,112,111,119,101,114,0,18,112,0,0,18,120,0,0,18,121,0,0,0,8,18,\r
-112,0,0,0,1,0,10,0,112,111,119,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,\r
-116,0,59,120,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,\r
-58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,8,18,116,0,0,0,1,0,11,0,112,111,\r
-119,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,58,112,111,\r
-119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,112,111,119,0,18,118,0,\r
-59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,112,111,119,0,18,118,0,59,122,0,0,18,\r
-117,0,59,122,0,0,0,20,0,8,18,116,0,0,0,1,0,12,0,112,111,119,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,\r
-1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,\r
-0,0,20,0,9,18,116,0,59,121,0,58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,\r
-116,0,59,122,0,58,112,111,119,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,9,18,116,0,59,119,0,\r
-58,112,111,119,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,20,0,8,18,116,0,0,0,1,0,9,0,101,120,112,\r
+0,8,18,120,0,0,0,1,0,10,0,115,105,110,0,1,0,0,10,97,110,103,108,101,0,0,0,1,8,58,118,101,99,50,0,\r
+58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,\r
+59,121,0,0,0,0,0,0,0,1,0,11,0,115,105,110,0,1,0,0,11,97,110,103,108,101,0,0,0,1,8,58,118,101,99,51,\r
+0,58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,\r
+59,121,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,105,110,\r
+0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,115,105,110,0,18,97,110,103,108,101,\r
+0,59,120,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,115,105,110,0,18,97,\r
+110,103,108,101,0,59,122,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,59,119,0,0,0,0,0,0,0,1,0,\r
+9,0,99,111,115,0,1,0,0,9,97,110,103,108,101,0,0,0,1,8,58,115,105,110,0,18,97,110,103,108,101,0,17,\r
+49,0,53,55,48,56,0,0,46,0,0,0,0,1,0,10,0,99,111,115,0,1,0,0,10,97,110,103,108,101,0,0,0,1,8,58,118,\r
+101,99,50,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,\r
+108,101,0,59,121,0,0,0,0,0,0,0,1,0,11,0,99,111,115,0,1,0,0,11,97,110,103,108,101,0,0,0,1,8,58,118,\r
+101,99,50,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,\r
+108,101,0,59,121,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,122,0,0,0,0,0,0,0,1,0,12,0,99,\r
+111,115,0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,99,111,115,0,18,97,110,103,\r
+108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,99,111,115,0,18,\r
+97,110,103,108,101,0,59,122,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,119,0,0,0,0,0,0,0,1,\r
+0,9,0,116,97,110,0,1,0,0,9,97,110,103,108,101,0,0,0,1,8,58,115,105,110,0,18,97,110,103,108,101,0,0,\r
+0,58,99,111,115,0,18,97,110,103,108,101,0,0,0,49,0,0,1,0,10,0,116,97,110,0,1,0,0,10,97,110,103,108,\r
+101,0,0,0,1,8,58,118,101,99,50,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,116,97,\r
+110,0,18,97,110,103,108,101,0,59,121,0,0,0,0,0,0,0,1,0,11,0,116,97,110,0,1,0,0,11,97,110,103,108,\r
+101,0,0,0,1,8,58,118,101,99,51,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,116,97,\r
+110,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,116,97,110,0,18,97,110,103,108,101,0,59,122,0,0,0,\r
+0,0,0,0,1,0,12,0,116,97,110,0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,116,97,\r
+110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,116,97,110,0,18,97,110,103,108,101,0,59,121,0,0,0,\r
+0,58,116,97,110,0,18,97,110,103,108,101,0,59,122,0,0,0,0,58,116,97,110,0,18,97,110,103,108,101,0,\r
+59,119,0,0,0,0,0,0,0,1,0,9,0,97,115,105,110,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,\r
+111,97,116,95,97,114,99,115,105,110,101,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,97,115,\r
+105,110,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,0,58,\r
+97,115,105,110,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,115,105,110,0,1,0,0,11,118,0,0,0,1,8,58,\r
+118,101,99,51,0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,0,58,97,115,105,110,0,18,118,0,59,121,0,\r
+0,0,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,115,105,110,0,1,0,0,12,118,0,0,\r
+0,1,8,58,118,101,99,52,0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,0,58,97,115,105,110,0,18,118,0,\r
+59,121,0,0,0,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,0,58,97,115,105,110,0,18,118,0,59,119,0,0,\r
+0,0,0,0,0,1,0,9,0,97,99,111,115,0,1,0,0,9,120,0,0,0,1,8,17,49,0,53,55,48,56,0,0,58,97,115,105,110,\r
+0,18,120,0,0,0,47,0,0,1,0,10,0,97,99,111,115,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,97,99,\r
+111,115,0,18,118,0,59,120,0,0,0,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,99,\r
+111,115,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,97,99,111,115,0,18,118,0,59,120,0,0,0,0,58,\r
+97,99,111,115,0,18,118,0,59,121,0,0,0,0,58,97,99,111,115,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,\r
+97,99,111,115,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,97,99,111,115,0,18,118,0,59,120,0,0,0,\r
+0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,0,58,97,99,111,115,0,18,118,0,59,122,0,0,0,0,58,97,99,\r
+111,115,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,97,116,97,110,0,1,0,0,9,121,95,111,118,101,114,95,\r
+120,0,0,0,1,3,2,0,9,1,122,0,0,0,4,102,108,111,97,116,95,97,114,99,116,97,110,0,18,122,0,0,18,121,\r
+95,111,118,101,114,95,120,0,0,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,121,95,111,118,\r
+101,114,95,120,0,0,0,1,8,58,118,101,99,50,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,\r
+59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,0,0,0,0,0,0,0,1,0,11,0,\r
+97,116,97,110,0,1,0,0,11,121,95,111,118,101,114,95,120,0,0,0,1,8,58,118,101,99,51,0,58,97,116,97,\r
+110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,\r
+114,95,120,0,59,121,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,122,0,0,0,0,0,\r
+0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,121,95,111,118,101,114,95,120,0,0,0,1,8,58,118,101,99,52,0,\r
+58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,\r
+111,118,101,114,95,120,0,59,121,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,\r
+122,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,119,0,0,0,0,0,0,0,1,0,9,0,97,\r
+116,97,110,0,1,0,0,9,121,0,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,122,0,0,0,9,18,122,0,58,97,116,97,110,0,\r
+18,121,0,18,120,0,49,0,0,20,0,10,18,120,0,17,48,0,48,0,0,40,0,2,10,18,121,0,17,48,0,48,0,0,40,0,8,\r
+18,122,0,17,51,0,49,52,49,53,57,51,0,0,47,0,9,14,0,8,18,122,0,17,51,0,49,52,49,53,57,51,0,0,46,0,0,\r
+9,14,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,117,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,\r
+99,50,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,117,0,\r
+59,121,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,117,0,0,1,0,0,11,118,0,\r
+0,0,1,8,58,118,101,99,51,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,\r
+116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,\r
+118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,117,0,0,1,0,0,12,118,0,0,0,1,8,58,118,\r
+101,99,52,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,\r
+117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,0,\r
+0,0,0,58,97,116,97,110,0,18,117,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,112,111,119,0,1,\r
+0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,3,2,0,9,1,112,0,0,0,4,102,108,111,97,116,95,112,111,119,101,114,\r
+0,18,112,0,0,18,120,0,0,18,121,0,0,0,8,18,112,0,0,0,1,0,10,0,112,111,119,0,1,0,0,10,118,0,0,1,0,0,\r
+10,117,0,0,0,1,8,58,118,101,99,50,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,\r
+58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,1,0,11,0,112,111,119,0,1,0,0,11,\r
+118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,51,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,\r
+120,0,0,0,0,58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,\r
+59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,112,111,119,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,\r
+0,1,8,58,118,101,99,52,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,112,111,\r
+119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,59,122,0,0,18,117,0,59,\r
+122,0,0,0,0,58,112,111,119,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,0,0,0,0,1,0,9,0,101,120,112,\r
 0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,18,120,0,0,0,0,0,1,\r
 0,10,0,101,120,112,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,55,49,56,\r
 50,56,49,56,51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,101,120,112,0,1,0,0,11,118,0,0,0,1,8,58,112,111,\r
 120,112,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,\r
 51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,108,111,103,50,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,\r
 102,108,111,97,116,95,108,111,103,50,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,108,111,103,\r
-50,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,108,111,103,50,0,18,118,0,59,\r
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,\r
-0,11,0,108,111,103,50,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,108,111,\r
-103,50,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,\r
-20,0,9,18,117,0,59,122,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,\r
-108,111,103,50,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,108,111,103,50,0,\r
-18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,20,0,9,18,\r
-117,0,59,122,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,108,111,103,\r
-50,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,108,111,103,0,1,0,0,9,120,0,0,0,1,8,58,108,\r
-111,103,50,0,18,120,0,0,0,58,108,111,103,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,49,0,0,1,0,\r
-10,0,108,111,103,0,1,0,0,10,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,\r
-118,101,99,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,11,0,108,111,103,0,1,0,0,11,\r
-118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,51,0,17,50,0,55,\r
-49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,12,0,108,111,103,0,1,0,0,12,118,0,0,0,1,8,58,108,111,\r
-103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,\r
-0,0,0,49,0,0,1,0,9,0,101,120,112,50,0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,48,0,0,0,18,\r
-120,0,0,0,0,0,1,0,10,0,101,120,112,50,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,\r
-17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,101,120,112,50,0,1,0,0,11,118,0,0,0,1,8,58,112,111,\r
-119,0,58,118,101,99,51,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,12,0,101,120,112,50,0,1,0,0,12,\r
-118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,52,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,\r
-115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,18,120,0,0,17,48,0,53,0,0,0,0,0,0,1,0,10,\r
-0,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,50,0,17,48,0,\r
-53,0,0,0,0,0,0,0,0,1,0,11,0,115,113,114,116,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,\r
-58,118,101,99,51,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,12,0,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,\r
-112,111,119,0,18,118,0,0,58,118,101,99,52,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,9,0,105,110,118,101,114,\r
-115,101,115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,17,49,0,48,0,0,58,115,113,114,116,0,18,120,0,0,0,\r
-49,0,0,1,0,10,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,\r
-50,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,11,0,105,110,118,101,114,115,\r
-101,115,113,114,116,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,17,49,0,48,0,0,0,0,58,115,113,114,\r
-116,0,18,118,0,0,0,49,0,0,1,0,12,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,12,118,0,0,\r
-0,1,8,58,118,101,99,52,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,9,0,97,98,\r
-115,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,43,18,120,0,18,120,0,54,31,0,0,1,0,10,0,97,98,\r
-115,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,98,115,0,18,118,0,59,120,\r
-0,0,0,20,0,9,18,117,0,59,121,0,58,97,98,115,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,\r
-97,98,115,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,97,98,115,0,18,118,0,\r
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,98,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,\r
-0,58,97,98,115,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,97,98,115,0,1,0,0,12,118,0,0,0,\r
-1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,97,98,115,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,\r
-121,0,58,97,98,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,97,98,115,0,18,118,0,59,122,\r
-0,0,0,20,0,9,18,117,0,59,119,0,58,97,98,115,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,\r
-115,105,103,110,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,41,17,49,0,48,0,0,18,120,0,17,48,0,\r
-48,0,0,40,17,49,0,48,0,0,54,17,48,0,48,0,0,31,31,0,0,1,0,10,0,115,105,103,110,0,1,0,0,10,118,0,0,0,\r
-1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,20,0,9,18,\r
-117,0,59,121,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,105,103,\r
-110,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,103,110,0,18,118,0,\r
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,\r
-59,122,0,58,115,105,103,110,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,115,105,103,110,0,\r
-1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,103,110,0,18,118,0,59,120,\r
-0,0,0,20,0,9,18,117,0,59,121,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,\r
-58,115,105,103,110,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,105,103,110,0,18,118,0,\r
-59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,102,108,111,111,114,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,\r
-0,0,4,102,108,111,97,116,95,102,108,111,111,114,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,\r
-102,108,111,111,114,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,102,108,111,\r
-111,114,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,102,108,111,111,114,0,18,118,0,59,121,\r
-0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,102,108,111,111,114,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,\r
-9,18,117,0,59,120,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,102,\r
-108,111,111,114,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,102,108,111,111,114,0,18,118,0,\r
-59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,102,108,111,111,114,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,\r
-117,0,0,0,9,18,117,0,59,120,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,\r
-121,0,58,102,108,111,111,114,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,102,108,111,111,\r
-114,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,102,108,111,111,114,0,18,118,0,59,119,0,0,\r
-0,20,0,8,18,117,0,0,0,1,0,9,0,99,101,105,108,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,\r
-111,97,116,95,99,101,105,108,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,99,101,105,108,0,1,\r
-0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,99,101,105,108,0,18,118,0,59,120,0,\r
-0,0,20,0,9,18,117,0,59,121,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,\r
-0,99,101,105,108,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,99,101,105,108,\r
-0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,20,0,9,\r
-18,117,0,59,122,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,99,101,\r
-105,108,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,99,101,105,108,0,18,118,\r
-0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,\r
-59,122,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,99,101,105,108,0,18,\r
-118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,102,114,97,99,116,0,1,0,0,9,120,0,0,0,1,8,18,120,0,\r
-58,102,108,111,111,114,0,18,120,0,0,0,47,0,0,1,0,10,0,102,114,97,99,116,0,1,0,0,10,118,0,0,0,1,8,\r
-18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,11,0,102,114,97,99,116,0,1,0,0,11,118,0,\r
-0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,12,0,102,114,97,99,116,0,1,0,0,\r
-12,118,0,0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,9,0,109,111,100,0,1,0,0,\r
-9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,58,102,108,111,111,114,0,18,120,0,18,121,0,49,0,\r
-0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,\r
-108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,109,111,100,0,1,0,0,11,118,0,0,1,0,0,\r
-9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,\r
-12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,\r
-0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,\r
-8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,109,111,\r
-100,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,\r
-18,117,0,49,0,0,48,47,0,0,1,0,12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,\r
-18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,9,0,109,105,110,0,1,0,0,9,\r
-120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,120,0,18,121,0,31,0,0,1,0,10,0,109,105,110,0,\r
-1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,58,109,105,110,0,18,\r
-118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,105,110,0,18,118,0,59,121,0,\r
-0,18,117,0,59,121,0,0,0,20,0,8,18,116,0,0,0,1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,\r
-0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,58,109,105,110,0,18,118,0,59,120,0,0,18,117,0,59,\r
-120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,\r
-9,18,116,0,59,122,0,58,109,105,110,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,8,18,116,0,0,0,\r
-1,0,12,0,109,105,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,\r
-120,0,58,109,105,110,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,\r
-105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,109,105,110,0,18,\r
-118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,9,18,116,0,59,119,0,58,109,105,110,0,18,118,0,59,119,0,\r
-0,18,117,0,59,119,0,0,0,20,0,8,18,116,0,0,0,1,0,10,0,109,105,110,0,1,0,0,10,118,0,0,1,0,0,9,121,0,\r
-0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,105,110,0,\r
-1,0,0,11,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,\r
-0,0,0,0,1,0,12,0,109,105,110,0,1,0,0,12,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,0,0,\r
-58,118,101,99,52,0,18,121,0,0,0,0,0,0,0,1,0,9,0,109,97,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,\r
-18,120,0,18,121,0,40,18,121,0,18,120,0,31,0,0,1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,10,117,\r
-0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,\r
-120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,\r
-8,18,116,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,\r
-18,116,0,59,120,0,58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,\r
-0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,109,97,120,\r
-0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,8,18,116,0,0,0,1,0,12,0,109,97,120,0,1,0,0,12,118,\r
-0,0,1,0,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,58,109,97,120,0,18,118,0,59,120,\r
-0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,\r
-121,0,0,0,20,0,9,18,116,0,59,122,0,58,109,97,120,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,\r
-9,18,116,0,59,119,0,58,109,97,120,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,20,0,8,18,116,0,0,0,\r
-1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,\r
-99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,\r
-97,120,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,0,0,0,0,1,0,12,0,109,97,120,0,1,0,0,12,118,0,0,\r
-1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,99,52,0,18,121,0,0,0,0,0,0,0,1,0,9,0,\r
-99,108,97,109,112,0,1,0,0,9,120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,97,108,\r
-0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,\r
-120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,0,0,10,120,0,0,1,0,0,9,109,105,110,86,97,\r
+50,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,\r
+111,103,50,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,108,111,103,50,0,1,0,0,11,118,0,0,0,1,8,58,118,\r
+101,99,51,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,\r
+0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,108,111,103,50,0,1,0,0,12,118,0,0,0,1,\r
+8,58,118,101,99,52,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,\r
+121,0,0,0,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,58,108,111,103,50,0,18,118,0,59,119,0,0,0,\r
+0,0,0,0,1,0,9,0,108,111,103,0,1,0,0,9,120,0,0,0,1,8,58,108,111,103,50,0,18,120,0,0,0,58,108,111,\r
+103,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,49,0,0,1,0,10,0,108,111,103,0,1,0,0,10,118,0,0,0,\r
+1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,50,0,17,50,0,55,49,56,50,56,\r
+49,56,51,0,0,0,0,0,0,49,0,0,1,0,11,0,108,111,103,0,1,0,0,11,118,0,0,0,1,8,58,108,111,103,50,0,18,\r
+118,0,0,0,58,108,111,103,50,0,58,118,101,99,51,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,\r
+0,1,0,12,0,108,111,103,0,1,0,0,12,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,\r
+0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,9,0,101,120,112,50,0,1,\r
+0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,48,0,0,0,18,120,0,0,0,0,0,1,0,10,0,101,120,112,50,0,1,\r
+0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,\r
+11,0,101,120,112,50,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,51,0,17,50,0,48,0,0,0,\r
+0,0,18,118,0,0,0,0,0,1,0,12,0,101,120,112,50,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,\r
+99,52,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,58,\r
+112,111,119,0,18,120,0,0,17,48,0,53,0,0,0,0,0,0,1,0,10,0,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,\r
+58,112,111,119,0,18,118,0,0,58,118,101,99,50,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,11,0,115,113,114,116,\r
+0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,51,0,17,48,0,53,0,0,0,0,0,0,0,0,\r
+1,0,12,0,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,52,0,\r
+17,48,0,53,0,0,0,0,0,0,0,0,1,0,9,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,9,120,0,0,0,\r
+1,8,17,49,0,48,0,0,58,115,113,114,116,0,18,120,0,0,0,49,0,0,1,0,10,0,105,110,118,101,114,115,101,\r
+115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,17,49,0,48,0,0,0,0,58,115,113,114,116,\r
+0,18,118,0,0,0,49,0,0,1,0,11,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,11,118,0,0,0,1,\r
+8,58,118,101,99,51,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,12,0,105,110,\r
+118,101,114,115,101,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,17,49,0,48,0,0,0,0,\r
+58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,9,0,97,98,115,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,\r
+0,48,0,0,43,18,120,0,18,120,0,54,31,0,0,1,0,10,0,97,98,115,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,\r
+50,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,\r
+97,98,115,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,\r
+98,115,0,18,118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,98,115,0,\r
+1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,\r
+118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,58,97,98,115,0,18,118,0,59,119,0,0,0,0,\r
+0,0,0,1,0,9,0,115,105,103,110,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,41,17,49,0,48,0,0,18,\r
+120,0,17,48,0,48,0,0,40,17,49,0,48,0,0,54,17,48,0,48,0,0,31,31,0,0,1,0,10,0,115,105,103,110,0,1,0,\r
+0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,0,58,115,105,103,\r
+110,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,105,103,110,0,1,0,0,11,118,0,0,0,1,8,58,118,101,\r
+99,51,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,0,\r
+58,115,105,103,110,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,105,103,110,0,1,0,0,12,118,0,0,0,1,\r
+8,58,118,101,99,52,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,0,58,115,105,103,110,0,18,118,0,59,\r
+121,0,0,0,0,58,115,105,103,110,0,18,118,0,59,122,0,0,0,0,58,115,105,103,110,0,18,118,0,59,119,0,0,\r
+0,0,0,0,0,1,0,9,0,102,108,111,111,114,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,111,97,\r
+116,95,102,108,111,111,114,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,102,108,111,111,114,0,\r
+1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,0,58,102,\r
+108,111,111,114,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,102,108,111,111,114,0,1,0,0,11,118,0,0,0,\r
+1,8,58,118,101,99,51,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,0,58,102,108,111,111,114,0,\r
+18,118,0,59,121,0,0,0,0,58,102,108,111,111,114,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,102,108,\r
+111,111,114,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,102,108,111,111,114,0,18,118,0,59,120,0,\r
+0,0,0,58,102,108,111,111,114,0,18,118,0,59,121,0,0,0,0,58,102,108,111,111,114,0,18,118,0,59,122,0,\r
+0,0,0,58,102,108,111,111,114,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,99,101,105,108,0,1,0,0,9,120,\r
+0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,111,97,116,95,99,101,105,108,0,18,121,0,0,18,120,0,0,0,8,18,\r
+121,0,0,0,1,0,10,0,99,101,105,108,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,99,101,105,108,0,\r
+18,118,0,59,120,0,0,0,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,99,101,105,108,\r
+0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,99,101,105,108,0,18,118,0,59,120,0,0,0,0,58,99,101,\r
+105,108,0,18,118,0,59,121,0,0,0,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,99,\r
+101,105,108,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,99,101,105,108,0,18,118,0,59,120,0,0,0,\r
+0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,0,58,99,\r
+101,105,108,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,102,114,97,99,116,0,1,0,0,9,120,0,0,0,1,8,18,\r
+120,0,58,102,108,111,111,114,0,18,120,0,0,0,47,0,0,1,0,10,0,102,114,97,99,116,0,1,0,0,10,118,0,0,0,\r
+1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,11,0,102,114,97,99,116,0,1,0,0,11,\r
+118,0,0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,12,0,102,114,97,99,116,0,1,\r
+0,0,12,118,0,0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,9,0,109,111,100,0,1,\r
+0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,58,102,108,111,111,114,0,18,120,0,18,121,0,\r
+49,0,0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,\r
+58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,109,111,100,0,1,0,0,11,118,0,\r
+0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,\r
+0,0,1,0,12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,\r
+111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,10,117,\r
+0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,\r
+109,111,100,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,\r
+18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,\r
+18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,9,0,109,105,110,\r
+0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,120,0,18,121,0,31,0,0,1,0,10,0,109,\r
+105,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,118,101,99,50,0,58,109,105,110,0,18,118,0,59,\r
+120,0,0,18,117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,\r
+1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,50,0,58,109,105,110,0,\r
+18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,\r
+0,0,0,58,109,105,110,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,109,105,110,0,1,\r
+0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,118,101,99,52,0,58,109,105,110,0,18,118,0,59,120,0,0,18,\r
+117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,109,105,110,0,\r
+18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,58,109,105,110,0,18,118,0,59,119,0,0,18,117,0,59,119,0,\r
+0,0,0,0,0,0,1,0,10,0,109,105,110,0,1,0,0,10,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,\r
+0,0,58,118,101,99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,9,121,0,\r
+0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,0,0,0,0,1,0,12,0,109,105,110,0,\r
+1,0,0,12,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,52,0,18,121,0,0,0,\r
+0,0,0,0,1,0,9,0,109,97,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,121,0,\r
+18,120,0,31,0,0,1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,118,101,99,50,0,\r
+58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,97,120,0,18,118,0,59,121,0,0,18,\r
+117,0,59,121,0,0,0,0,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,\r
+101,99,51,0,58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,97,120,0,18,118,0,\r
+59,121,0,0,18,117,0,59,121,0,0,0,0,58,109,97,120,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,\r
+0,1,0,12,0,109,97,120,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,118,101,99,52,0,58,109,97,120,0,\r
+18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,121,0,\r
+0,0,0,58,109,97,120,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,58,109,97,120,0,18,118,0,59,119,\r
+0,0,18,117,0,59,119,0,0,0,0,0,0,0,1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,9,121,0,0,0,1,8,58,\r
+109,97,120,0,18,118,0,0,58,118,101,99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,\r
+0,0,1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,0,0,0,0,1,0,\r
+12,0,109,97,120,0,1,0,0,12,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,99,\r
+52,0,18,121,0,0,0,0,0,0,0,1,0,9,0,99,108,97,109,112,0,1,0,0,9,120,0,0,1,0,0,9,109,105,110,86,97,\r
 108,0,0,1,0,0,9,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,\r
-105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,11,0,99,108,97,109,112,0,1,0,0,11,\r
+105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,0,0,10,\r
 120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,\r
 58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,\r
-12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,\r
+11,0,99,108,97,109,112,0,1,0,0,11,120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,\r
 97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,\r
-109,97,120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,0,0,10,120,0,0,1,0,0,10,109,105,110,\r
-86,97,108,0,0,1,0,0,10,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,\r
-18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,11,0,99,108,97,109,112,0,1,\r
-0,0,11,120,0,0,1,0,0,11,109,105,110,86,97,108,0,0,1,0,0,11,109,97,120,86,97,108,0,0,0,1,8,58,109,\r
+109,97,120,86,97,108,0,0,0,0,0,1,0,12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,9,109,105,110,\r
+86,97,108,0,0,1,0,0,9,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,\r
+18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,\r
+0,0,10,120,0,0,1,0,0,10,109,105,110,86,97,108,0,0,1,0,0,10,109,97,120,86,97,108,0,0,0,1,8,58,109,\r
 105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,\r
-0,0,0,1,0,12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,12,109,105,110,86,97,108,0,0,1,0,0,12,\r
+0,0,0,1,0,11,0,99,108,97,109,112,0,1,0,0,11,120,0,0,1,0,0,11,109,105,110,86,97,108,0,0,1,0,0,11,\r
 109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,\r
-108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,9,0,109,105,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,\r
-0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,10,0,\r
-109,105,120,0,1,0,0,10,120,0,0,1,0,0,10,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,\r
-0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,1,0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,\r
-9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,12,0,109,105,\r
-120,0,1,0,0,12,120,0,0,1,0,0,12,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,\r
-18,121,0,18,97,0,48,46,0,0,1,0,10,0,109,105,120,0,1,0,0,10,120,0,0,1,0,0,10,121,0,0,1,0,0,10,97,0,\r
-0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,1,\r
-0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,11,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,\r
-0,18,97,0,48,46,0,0,1,0,12,0,109,105,120,0,1,0,0,12,120,0,0,1,0,0,12,121,0,0,1,0,0,12,97,0,0,0,1,8,\r
-18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,9,0,115,116,101,112,0,1,0,0,9,\r
-101,100,103,101,0,0,1,0,0,9,120,0,0,0,1,8,18,120,0,18,101,100,103,101,0,40,17,48,0,48,0,0,17,49,0,\r
-48,0,0,31,0,0,1,0,10,0,115,116,101,112,0,1,0,0,10,101,100,103,101,0,0,1,0,0,10,118,0,0,0,1,3,2,0,\r
-10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,116,101,112,0,18,101,100,103,101,0,59,120,0,0,18,118,0,\r
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,18,118,\r
-0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,116,101,112,0,1,0,0,11,101,100,103,101,0,0,1,0,0,\r
-11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,116,101,112,0,18,101,100,103,101,0,\r
-59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,116,101,112,0,18,101,100,103,101,\r
-0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,116,101,112,0,18,101,100,103,\r
-101,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,115,116,101,112,0,1,0,0,12,101,\r
-100,103,101,0,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,116,101,112,0,\r
-18,101,100,103,101,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,116,101,112,\r
-0,18,101,100,103,101,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,116,101,\r
-112,0,18,101,100,103,101,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,116,\r
-101,112,0,18,101,100,103,101,0,59,119,0,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,10,0,115,\r
+108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,\r
+12,109,105,110,86,97,108,0,0,1,0,0,12,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,\r
+120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,9,0,109,\r
+105,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,\r
+48,18,121,0,18,97,0,48,46,0,0,1,0,10,0,109,105,120,0,1,0,0,10,120,0,0,1,0,0,10,121,0,0,1,0,0,9,97,\r
+0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,\r
+1,0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,\r
+121,0,18,97,0,48,46,0,0,1,0,12,0,109,105,120,0,1,0,0,12,120,0,0,1,0,0,12,121,0,0,1,0,0,9,97,0,0,0,\r
+1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,10,0,109,105,120,0,1,0,0,\r
+10,120,0,0,1,0,0,10,121,0,0,1,0,0,10,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,\r
+18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,1,0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,11,97,0,0,0,1,8,\r
+18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,12,0,109,105,120,0,1,0,0,12,\r
+120,0,0,1,0,0,12,121,0,0,1,0,0,12,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,\r
+97,0,48,46,0,0,1,0,9,0,115,116,101,112,0,1,0,0,9,101,100,103,101,0,0,1,0,0,9,120,0,0,0,1,8,18,120,\r
+0,18,101,100,103,101,0,40,17,48,0,48,0,0,17,49,0,48,0,0,31,0,0,1,0,10,0,115,116,101,112,0,1,0,0,10,\r
+101,100,103,101,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,116,101,112,0,18,101,100,103,\r
+101,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,18,\r
+118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,116,101,112,0,1,0,0,11,101,100,103,101,0,0,1,0,0,11,118,0,\r
+0,0,1,8,58,118,101,99,51,0,58,115,116,101,112,0,18,101,100,103,101,0,59,120,0,0,18,118,0,59,120,0,\r
+0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,116,101,\r
+112,0,18,101,100,103,101,0,59,122,0,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,116,101,112,0,1,0,\r
+0,12,101,100,103,101,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,116,101,112,0,18,101,100,\r
+103,101,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,\r
+18,118,0,59,121,0,0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,122,0,0,18,118,0,59,122,0,0,0,\r
+0,58,115,116,101,112,0,18,101,100,103,101,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,10,0,115,\r
 116,101,112,0,1,0,0,9,101,100,103,101,0,0,1,0,0,10,118,0,0,0,1,8,58,115,116,101,112,0,58,118,101,\r
 99,50,0,18,101,100,103,101,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,115,116,101,112,0,1,0,0,9,101,100,103,\r
 101,0,0,1,0,0,11,118,0,0,0,1,8,58,115,116,101,112,0,58,118,101,99,51,0,18,101,100,103,101,0,0,0,0,\r
 101,48,0,47,18,101,100,103,101,49,0,18,101,100,103,101,48,0,47,49,0,17,48,0,48,0,0,0,17,49,0,48,0,\r
 0,0,0,20,0,8,18,116,0,18,116,0,48,17,51,0,48,0,0,17,50,0,48,0,0,18,116,0,48,47,48,0,0,1,0,10,0,115,\r
 109,111,111,116,104,115,116,101,112,0,1,0,0,10,101,100,103,101,48,0,0,1,0,0,10,101,100,103,101,49,\r
-0,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,115,\r
-116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,\r
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,\r
-48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,\r
-11,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,11,101,100,103,101,48,0,0,1,0,0,11,101,100,\r
-103,101,49,0,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,\r
-116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,\r
-118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,\r
-100,103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,\r
-0,59,122,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,\r
-100,103,101,49,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,115,109,111,111,116,\r
-104,115,116,101,112,0,1,0,0,12,101,100,103,101,48,0,0,1,0,0,12,101,100,103,101,49,0,0,1,0,0,12,118,\r
-0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,115,116,101,112,0,18,\r
-101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,\r
-117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,18,\r
-101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,109,111,111,\r
+0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,\r
+100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,\r
+111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,\r
+121,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,11,\r
+101,100,103,101,48,0,0,1,0,0,11,101,100,103,101,49,0,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,\r
+58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,\r
+49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,\r
+103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,\r
+111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,\r
+0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,12,101,\r
+100,103,101,48,0,0,1,0,0,12,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,\r
+115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,\r
+0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,\r
+101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,\r
 116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,0,18,\r
-118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,\r
-100,103,101,48,0,59,119,0,0,18,101,100,103,101,49,0,59,119,0,0,18,118,0,59,119,0,0,0,20,0,8,18,117,\r
-0,0,0,1,0,10,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,\r
-101,100,103,101,49,0,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,\r
-111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,\r
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,\r
-48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,109,111,\r
-111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,\r
-11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,115,116,101,112,\r
-0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,\r
-0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,\r
-18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,\r
-100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,\r
-115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,\r
-49,0,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,\r
-115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,20,0,9,\r
-18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,\r
-100,103,101,49,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,109,111,111,116,104,115,\r
-116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,20,0,9,18,\r
-117,0,59,119,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,\r
-103,101,49,0,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,100,111,116,0,1,0,0,9,120,0,0,1,0,\r
-0,9,121,0,0,0,1,8,18,120,0,18,121,0,48,0,0,1,0,9,0,100,111,116,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,\r
-0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,0,0,1,0,9,0,\r
-100,111,116,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,\r
-118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,0,0,1,0,9,0,100,\r
-111,116,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,\r
-59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,18,118,0,59,119,0,18,\r
-117,0,59,119,0,48,46,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,9,120,0,0,0,1,8,58,115,113,114,\r
-116,0,58,100,111,116,0,18,120,0,0,18,120,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,10,\r
-118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,108,\r
-101,110,103,116,104,0,1,0,0,11,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,\r
-118,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,12,118,0,0,0,1,8,58,115,113,114,116,0,58,\r
-100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,9,120,\r
-0,0,1,0,0,9,121,0,0,0,1,8,58,108,101,110,103,116,104,0,18,120,0,18,121,0,47,0,0,0,0,1,0,9,0,100,\r
-105,115,116,97,110,99,101,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,108,101,110,103,116,104,0,\r
-18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,11,118,0,0,1,0,0,11,117,\r
-0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,\r
-99,101,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,\r
-0,0,0,0,1,0,11,0,99,114,111,115,115,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,\r
-18,116,0,59,120,0,18,118,0,59,121,0,18,117,0,59,122,0,48,18,117,0,59,121,0,18,118,0,59,122,0,48,47,\r
-20,0,9,18,116,0,59,121,0,18,118,0,59,122,0,18,117,0,59,120,0,48,18,117,0,59,122,0,18,118,0,59,120,\r
-0,48,47,20,0,9,18,116,0,59,122,0,18,118,0,59,120,0,18,117,0,59,121,0,48,18,117,0,59,120,0,18,118,0,\r
-59,121,0,48,47,20,0,8,18,116,0,0,0,1,0,9,0,110,111,114,109,97,108,105,122,101,0,1,0,0,9,120,0,0,0,\r
-1,8,17,49,0,48,0,0,0,0,1,0,10,0,110,111,114,109,97,108,105,122,101,0,1,0,0,10,118,0,0,0,1,8,18,118,\r
-0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,11,0,110,111,114,109,97,108,105,122,101,0,1,\r
-0,0,11,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,12,0,110,111,\r
-114,109,97,108,105,122,101,0,1,0,0,12,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,\r
-0,0,49,0,0,1,0,9,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,9,78,0,0,1,0,0,9,73,0,0,1,0,0,\r
-9,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,\r
-78,0,18,78,0,54,31,0,0,1,0,10,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,10,78,0,0,1,0,0,\r
-10,73,0,0,1,0,0,10,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,\r
-48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,11,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,\r
-11,78,0,0,1,0,0,11,73,0,0,1,0,0,11,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,\r
-18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,12,0,102,97,99,101,102,111,114,119,97,\r
-114,100,0,1,0,0,12,78,0,0,1,0,0,12,73,0,0,1,0,0,12,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,\r
-114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,9,0,114,101,102,108,\r
-101,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,\r
-18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,10,0,114,101,102,108,101,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,\r
-0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,\r
-11,0,114,101,102,108,101,99,116,0,1,0,0,11,73,0,0,1,0,0,11,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,\r
-100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,12,0,114,101,102,108,101,99,116,0,1,0,\r
-0,12,73,0,0,1,0,0,12,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,\r
-18,78,0,48,47,0,0,1,0,9,0,114,101,102,114,97,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,1,0,0,9,101,\r
-116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,\r
-49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,\r
-47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,\r
-101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,\r
-0,48,47,0,0,1,0,10,0,114,101,102,114,97,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,0,0,1,0,0,9,101,116,\r
-97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,\r
-0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,\r
-20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,\r
-116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,\r
-47,0,0,1,0,11,0,114,101,102,114,97,99,116,0,1,0,0,11,73,0,0,1,0,0,11,78,0,0,1,0,0,9,101,116,97,0,0,\r
-0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,\r
-0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,\r
-10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,\r
-97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,\r
-0,0,1,0,12,0,114,101,102,114,97,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,1,0,0,9,101,116,97,0,0,0,\r
-1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,\r
-58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,\r
-18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,\r
-0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,\r
-1,0,13,0,109,97,116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,13,109,0,0,1,0,0,13,110,0,0,\r
-0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,20,\r
-0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,20,0,8,18,111,0,0,0,1,\r
-0,14,0,109,97,116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,14,109,0,0,1,0,0,14,110,0,0,0,\r
-1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,20,0,\r
-9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,\r
-0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,20,0,8,18,111,0,0,0,1,0,15,0,109,97,116,114,\r
-105,120,67,111,109,112,77,117,108,116,0,1,0,0,15,109,0,0,1,0,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,\r
-9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,\r
-57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,\r
-50,0,57,18,110,0,16,10,50,0,57,48,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,\r
-10,51,0,57,48,20,0,8,18,111,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,\r
-10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,\r
-18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,20,0,8,18,98,0,0,0,1,0,3,0,108,101,115,115,\r
-84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,20,\r
-0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,8,18,98,0,0,0,1,0,4,0,108,101,115,\r
-115,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,\r
-118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,\r
-20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,9,18,98,0,59,119,0,18,118,0,59,\r
-119,0,18,117,0,59,119,0,40,20,0,8,18,98,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,6,118,\r
-0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,\r
-40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,20,0,8,18,98,0,0,0,1,0,3,0,108,\r
-101,115,115,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,\r
-120,0,18,118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,\r
-121,0,40,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,8,18,98,0,0,0,1,0,4,0,\r
-108,101,115,115,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,\r
-59,121,0,40,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,9,18,98,0,59,119,0,\r
-18,118,0,59,119,0,18,117,0,59,119,0,40,20,0,8,18,98,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,\r
-113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,\r
-118,0,59,120,0,18,117,0,59,120,0,42,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,\r
-20,0,8,18,98,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,\r
-0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,42,20,0,\r
-9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,122,0,18,118,0,59,122,\r
-0,18,117,0,59,122,0,42,20,0,8,18,98,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,\r
-0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,\r
-117,0,59,120,0,42,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,\r
-122,0,18,118,0,59,122,0,18,117,0,59,122,0,42,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,\r
-119,0,42,20,0,8,18,98,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,\r
-0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,\r
-42,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,8,18,98,0,0,0,1,0,3,0,108,\r
-101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,\r
-0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,42,20,0,9,18,98,0,59,121,0,18,118,0,59,\r
-121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,42,20,0,8,\r
-18,98,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,\r
-0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,42,20,0,9,18,98,\r
-0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,\r
-0,59,122,0,42,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,42,20,0,8,18,98,0,0,0,1,\r
-0,2,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,\r
-98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,\r
-0,59,121,0,18,117,0,59,121,0,41,20,0,8,18,98,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,\r
-110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,\r
-0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,41,20,0,9,18,98,\r
-0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,41,20,0,8,18,98,0,0,0,1,0,4,0,103,114,101,97,116,\r
-101,114,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,\r
-0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,\r
-0,41,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,41,20,0,9,18,98,0,59,119,0,18,118,\r
-0,59,119,0,18,117,0,59,119,0,41,20,0,8,18,98,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,\r
-110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,\r
-18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,41,20,0,8,18,98,0,\r
-0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,\r
-1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,\r
-118,0,59,121,0,18,117,0,59,121,0,41,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,41,\r
-20,0,8,18,98,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,\r
-0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,\r
-0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,41,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,\r
-0,59,122,0,41,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,41,20,0,8,18,98,0,0,0,1,\r
-0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,\r
-0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,0,\r
-59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,8,18,98,0,0,0,1,0,3,0,103,114,101,97,116,101,\r
-114,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,\r
-18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,\r
-18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,43,20,0,8,18,98,0,\r
-0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,\r
-117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,\r
-98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,\r
-117,0,59,122,0,43,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,43,20,0,8,18,98,0,0,\r
-0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,\r
-0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,\r
-0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,8,18,98,0,0,0,1,0,3,0,103,114,101,97,116,\r
-101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,\r
-18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,\r
-18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,43,20,0,8,18,98,0,\r
-0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,\r
-117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,\r
-98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,\r
-117,0,59,122,0,43,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,43,20,0,8,18,98,0,0,\r
-0,1,0,2,0,101,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,\r
-59,121,0,38,20,0,8,18,98,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,\r
-3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,\r
-0,18,118,0,59,121,0,18,117,0,59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,\r
-0,38,20,0,8,18,98,0,0,0,1,0,4,0,101,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,\r
-1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,\r
-118,0,59,121,0,18,117,0,59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,38,\r
-20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,38,20,0,8,18,98,0,0,0,1,0,2,0,101,113,\r
-117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,\r
-120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,38,20,0,8,\r
-18,98,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,\r
-18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,\r
-18,117,0,59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,38,20,0,8,18,98,0,\r
-0,0,1,0,4,0,101,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,\r
-59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,38,20,0,9,18,98,0,59,119,0,\r
-18,118,0,59,119,0,18,117,0,59,119,0,38,20,0,8,18,98,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,\r
-1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,\r
-117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,39,20,0,8,18,98,0,0,\r
-0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,\r
-9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,121,\r
-0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,39,20,0,8,18,98,\r
-0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,\r
-0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,\r
-121,0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,39,20,0,9,\r
-18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,39,20,0,8,18,98,0,0,0,1,0,2,0,110,111,116,69,\r
-113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,39,20,\r
-0,8,18,98,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,\r
-3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,\r
-118,0,59,121,0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,39,\r
-20,0,8,18,98,0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,3,2,\r
-0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,\r
-18,118,0,59,121,0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,\r
-39,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,39,20,0,8,18,98,0,0,0,1,0,1,0,97,\r
-110,121,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,0,0,1,0,1,0,97,110,121,0,1,\r
-0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,0,0,1,0,1,0,97,110,\r
-121,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,18,118,0,\r
-59,119,0,32,0,0,1,0,1,0,97,108,108,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,\r
-0,0,1,0,1,0,97,108,108,0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,\r
-122,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,\r
-118,0,59,122,0,34,18,118,0,59,119,0,34,0,0,1,0,2,0,110,111,116,0,1,0,0,2,118,0,0,0,1,3,2,0,2,1,117,\r
-0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,56,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,56,20,0,\r
-8,18,117,0,0,0,1,0,3,0,110,111,116,0,1,0,0,3,118,0,0,0,1,3,2,0,3,1,117,0,0,0,9,18,117,0,59,120,0,\r
-18,118,0,59,120,0,56,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,56,20,0,9,18,117,0,59,122,0,18,118,\r
-0,59,122,0,56,20,0,8,18,117,0,0,0,1,0,4,0,110,111,116,0,1,0,0,4,118,0,0,0,1,3,2,0,4,1,117,0,0,0,9,\r
-18,117,0,59,120,0,18,118,0,59,120,0,56,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,56,20,0,9,18,117,\r
-0,59,122,0,18,118,0,59,122,0,56,20,0,9,18,117,0,59,119,0,18,118,0,59,119,0,56,20,0,8,18,117,0,0,0,\r
-1,0,12,0,116,101,120,116,117,114,101,49,68,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,9,99,\r
-111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,\r
-114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,\r
-0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,\r
-114,100,0,59,115,0,18,99,111,111,114,100,0,59,116,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,\r
-101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,\r
-0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,\r
-100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,\r
-68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,0,1,8,58,118,101,99,\r
-52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,\r
-115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,\r
-59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,20,0,9,18,117,0,59,\r
-116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,20,0,8,58,116,101,120,\r
-116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,0,0,0,1,0,12,0,116,101,120,\r
-116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,\r
-114,100,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,\r
-111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,\r
-111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,\r
-114,0,0,18,117,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,\r
+118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,119,0,\r
+0,18,101,100,103,101,49,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,10,0,115,109,111,111,116,\r
+104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,10,118,0,\r
+0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,\r
+18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,\r
+101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,\r
+111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,\r
+0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,\r
+103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,\r
+116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,58,115,\r
+109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,\r
+59,122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,\r
+0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,109,111,111,\r
+116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,\r
+0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,\r
+0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,\r
+18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,\r
+101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,100,111,116,\r
+0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,48,0,0,1,0,9,0,100,111,116,0,1,0,0,10,\r
+118,0,0,1,0,0,10,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,\r
+59,121,0,48,46,0,0,1,0,9,0,100,111,116,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,59,120,0,\r
+18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,\r
+48,46,0,0,1,0,9,0,100,111,116,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,\r
+59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,18,\r
+118,0,59,119,0,18,117,0,59,119,0,48,46,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,9,120,0,0,0,1,8,\r
+58,115,113,114,116,0,58,100,111,116,0,18,120,0,0,18,120,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,\r
+104,0,1,0,0,10,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,\r
+1,0,9,0,108,101,110,103,116,104,0,1,0,0,11,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,\r
+118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,12,118,0,0,0,1,8,58,115,113,\r
+114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,\r
+1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,58,108,101,110,103,116,104,0,18,120,0,18,121,0,47,0,0,0,0,1,\r
+0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,108,101,110,103,\r
+116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,11,118,0,0,1,\r
+0,0,11,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,\r
+116,97,110,99,101,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,\r
+18,117,0,47,0,0,0,0,1,0,11,0,99,114,111,115,115,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,\r
+101,99,51,0,18,118,0,59,121,0,18,117,0,59,122,0,48,18,117,0,59,121,0,18,118,0,59,122,0,48,47,0,18,\r
+118,0,59,122,0,18,117,0,59,120,0,48,18,117,0,59,122,0,18,118,0,59,120,0,48,47,0,18,118,0,59,120,0,\r
+18,117,0,59,121,0,48,18,117,0,59,120,0,18,118,0,59,121,0,48,47,0,0,0,0,1,0,9,0,110,111,114,109,97,\r
+108,105,122,101,0,1,0,0,9,120,0,0,0,1,8,17,49,0,48,0,0,0,0,1,0,10,0,110,111,114,109,97,108,105,122,\r
+101,0,1,0,0,10,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,11,0,\r
+110,111,114,109,97,108,105,122,101,0,1,0,0,11,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,\r
+18,118,0,0,0,49,0,0,1,0,12,0,110,111,114,109,97,108,105,122,101,0,1,0,0,12,118,0,0,0,1,8,18,118,0,\r
+58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,9,0,102,97,99,101,102,111,114,119,97,114,100,\r
+0,1,0,0,9,78,0,0,1,0,0,9,73,0,0,1,0,0,9,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,\r
+102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,10,0,102,97,99,101,102,111,114,\r
+119,97,114,100,0,1,0,0,10,78,0,0,1,0,0,10,73,0,0,1,0,0,10,78,114,101,102,0,0,0,1,8,58,100,111,116,\r
+0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,11,0,102,97,99,\r
+101,102,111,114,119,97,114,100,0,1,0,0,11,78,0,0,1,0,0,11,73,0,0,1,0,0,11,78,114,101,102,0,0,0,1,8,\r
+58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,\r
+12,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,12,78,0,0,1,0,0,12,73,0,0,1,0,0,12,78,114,\r
+101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,\r
+78,0,54,31,0,0,1,0,9,0,114,101,102,108,101,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,0,1,8,18,73,0,17,\r
+50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,10,0,114,101,102,108,\r
+101,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,\r
+0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,11,0,114,101,102,108,101,99,116,0,1,0,0,11,73,0,0,1,0,0,11,\r
+78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,\r
+0,12,0,114,101,102,108,101,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,\r
+58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,9,0,114,101,102,114,97,99,116,0,1,\r
+0,0,9,73,0,0,1,0,0,9,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,\r
+0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,\r
+111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,\r
+0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,\r
+115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,10,0,114,101,102,114,97,99,116,0,1,0,0,10,\r
+73,0,0,1,0,0,10,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,\r
+101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,\r
+116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,\r
+14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,\r
+113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,11,0,114,101,102,114,97,99,116,0,1,0,0,11,73,0,\r
+0,1,0,0,11,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,\r
+116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,\r
+18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,\r
+18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,\r
+114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,12,0,114,101,102,114,97,99,116,0,1,0,0,12,73,0,0,1,\r
+0,0,12,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,\r
+97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,\r
+78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,\r
+101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,\r
+116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,13,0,109,97,116,114,105,120,67,111,109,112,77,117,108,\r
+116,0,1,0,0,13,109,0,0,1,0,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,110,0,16,\r
+8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,0,0,0,1,0,14,0,109,97,116,114,\r
+105,120,67,111,109,112,77,117,108,116,0,1,0,0,14,109,0,0,1,0,0,14,110,0,0,0,1,8,58,109,97,116,51,0,\r
+18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,\r
+0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,15,0,109,97,116,114,105,120,67,111,\r
+109,112,77,117,108,116,0,1,0,0,15,109,0,0,1,0,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,\r
+48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,18,109,0,16,\r
+10,50,0,57,18,110,0,16,10,50,0,57,48,0,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,48,0,0,0,0,1,\r
+0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,\r
+0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,0,0,0,1,0,3,0,\r
+108,101,115,115,84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,\r
+118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,0,\r
+18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,\r
+0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,\r
+0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,118,0,59,119,0,18,117,0,59,119,0,40,0,\r
+0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,\r
+99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,0,0,0,1,\r
+0,3,0,108,101,115,115,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,\r
+18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,\r
+0,18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,\r
+0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,\r
+0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,118,0,59,119,0,18,117,0,59,119,0,40,0,\r
+0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,\r
+0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,\r
+121,0,42,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,\r
+11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,\r
+18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,\r
+104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,\r
+118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,\r
+18,117,0,59,122,0,42,0,18,118,0,59,119,0,18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,108,101,115,115,84,\r
+104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,\r
+0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,0,0,0,1,0,3,0,108,101,\r
+115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,\r
+51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,\r
+122,0,18,117,0,59,122,0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,\r
+8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,\r
+118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,18,118,0,59,119,0,\r
+18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,10,118,0,0,1,\r
+0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,\r
+121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,11,118,\r
+0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,\r
+59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,\r
+97,116,101,114,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,\r
+118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,\r
+18,117,0,59,122,0,41,0,18,118,0,59,119,0,18,117,0,59,119,0,41,0,0,0,0,1,0,2,0,103,114,101,97,116,\r
+101,114,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,\r
+120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,\r
+116,101,114,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,\r
+59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,\r
+0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,\r
+117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,18,118,0,59,119,0,18,117,0,59,119,0,\r
+41,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,\r
+0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,\r
+121,0,18,117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,\r
+108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,0,0,0,\r
+1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,\r
+0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,\r
+0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,119,0,18,117,0,59,119,0,43,0,\r
+0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,\r
+117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,\r
+0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,\r
+18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,0,0,0,1,0,4,0,\r
+103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,\r
+58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,\r
+43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,119,0,18,117,0,59,119,0,43,0,0,0,0,1,0,2,\r
+0,101,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,\r
+120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,\r
+108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,\r
+1,0,4,0,101,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,\r
+0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,\r
+117,0,59,122,0,38,0,18,118,0,59,119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,101,113,117,97,108,0,1,\r
+0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,\r
+18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,\r
+7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,\r
+18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,1,0,4,0,101,113,117,97,108,0,\r
+1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,38,\r
+0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,18,118,0,59,\r
+119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,\r
+10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,\r
+18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,\r
+0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,\r
+0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,\r
+108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,\r
+118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,0,0,6,118,0,\r
+0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,\r
+121,0,18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,\r
+117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,\r
+97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,\r
+118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,1,0,97,110,121,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,\r
+120,0,18,118,0,59,121,0,32,0,0,1,0,1,0,97,110,121,0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,\r
+0,59,121,0,32,18,118,0,59,122,0,32,0,0,1,0,1,0,97,110,121,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,\r
+0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,18,118,0,59,119,0,32,0,0,1,0,1,0,97,108,108,0,1,0,0,2,\r
+118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,3,118,0,0,0,1,\r
+8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,122,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,4,118,\r
+0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,122,0,34,18,118,0,59,119,0,34,0,0,1,0,\r
+2,0,110,111,116,0,1,0,0,2,118,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,56,0,18,118,0,59,\r
+121,0,56,0,0,0,0,1,0,3,0,110,111,116,0,1,0,0,3,118,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,\r
+0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,0,0,0,1,0,4,0,110,111,116,0,1,0,0,4,118,0,0,0,\r
+1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,18,\r
+118,0,59,119,0,56,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,0,1,0,0,16,115,97,109,112,108,\r
+101,114,0,0,1,0,0,9,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,\r
+0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,\r
+10,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,\r
+114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,116,0,49,0,0,0,0,1,0,12,0,116,\r
+101,120,116,117,114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,\r
+111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,\r
+18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,1,0,12,0,116,101,120,\r
+116,117,114,101,50,68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,0,\r
+1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,116,101,120,50,100,0,18,116,101,120,101,\r
+108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,8,18,116,101,120,101,108,0,0,\r
+0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,\r
+0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,\r
+108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,\r
+0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,0,0,0,1,0,12,0,\r
+116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,\r
+12,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,\r
+114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,\r
+18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,116,101,\r
+120,116,117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,\r
+0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,\r
+114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,116,\r
+101,120,116,117,114,101,51,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,\r
+114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,\r
+111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,\r
+49,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,\r
 101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,\r
-0,116,101,120,116,117,114,101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,\r
-12,99,111,111,114,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,\r
-115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,\r
-0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,\r
-99,111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,51,68,0,18,115,97,109,112,\r
-108,101,114,0,0,18,117,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,67,117,98,101,0,1,0,0,19,115,\r
-97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,\r
-0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,\r
-99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,\r
-119,50,68,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,\r
-101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,0,0,20,\r
-115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,\r
-59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,\r
-116,0,17,48,0,48,0,0,20,0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,\r
-100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,119,49,68,0,18,115,97,109,112,108,101,114,0,0,18,\r
-117,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,\r
-101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,\r
-111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,\r
-114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,\r
-100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,119,50,68,0,18,115,\r
-97,109,112,108,101,114,0,0,18,117,0,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,9,120,0,0,0,1,3,\r
-2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,49,0,18,97,0,0,18,120,0,0,0,8,18,97,0,\r
-0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,10,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,\r
-95,110,111,105,115,101,50,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,\r
-1,0,0,11,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,51,0,18,97,0,0,\r
-18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,12,120,0,0,0,1,3,2,0,9,1,97,0,0,\r
-0,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,10,0,\r
-110,111,105,115,101,50,0,1,0,0,9,120,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,\r
-105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,\r
-57,0,51,52,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,10,120,0,0,0,1,3,\r
-2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,\r
-121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,\r
-0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,11,120,0,0,0,1,3,2,0,10,\r
-1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,\r
-58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,\r
-17,51,0,50,51,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,12,120,0,\r
-0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,\r
-117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,\r
-55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,\r
-111,105,115,101,51,0,1,0,0,9,120,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,\r
-115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,\r
-51,52,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,\r
-46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,10,120,0,0,0,1,3,2,0,11,1,117,0,\r
-0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,\r
-111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,\r
-0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,\r
-0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,11,\r
-120,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,\r
-9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,\r
-17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,\r
-49,0,18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,\r
-0,46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,12,120,0,0,0,1,3,2,0,11,1,117,\r
-0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,\r
-111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,\r
-0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,\r
-120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,\r
-51,0,49,57,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,9,120,0,0,0,\r
-1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,\r
-0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,117,0,59,122,\r
-0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,20,0,9,18,117,0,59,119,0,58,110,\r
-111,105,115,101,49,0,18,120,0,17,50,51,0,53,52,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,111,105,\r
-115,101,52,0,1,0,0,10,120,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,\r
-49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,\r
-17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,\r
-101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,9,18,\r
-117,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,50,51,0,53,52,0,0,0,17,\r
-50,57,0,49,49,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,11,120,0,\r
-0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,\r
-117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,\r
-55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,\r
-18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,\r
-0,0,20,0,9,18,117,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,\r
-52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,\r
-111,105,115,101,52,0,1,0,0,12,120,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,\r
-115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,\r
-99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,\r
-0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,\r
-0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,20,0,9,18,117,0,\r
-59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,\r
-49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,0\r
+0,115,104,97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
+100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,0,1,\r
+0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,\r
+48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,0,0,20,115,97,109,112,\r
+108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,0,18,115,97,\r
+109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,\r
+0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,\r
+49,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,\r
+101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,115,104,97,100,111,119,50,68,0,18,115,97,109,\r
+112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,\r
+113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,\r
+114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,9,0,110,111,105,115,101,49,\r
+0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,49,0,18,97,0,\r
+0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,10,120,0,0,0,1,3,2,0,9,1,97,0,\r
+0,0,4,102,108,111,97,116,95,110,111,105,115,101,50,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,\r
+110,111,105,115,101,49,0,1,0,0,11,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,\r
+105,115,101,51,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,12,\r
+120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,97,0,0,18,120,0,\r
+0,0,8,18,97,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,50,0,58,\r
+110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,\r
+46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,50,0,58,110,\r
+111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,\r
+57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,11,\r
+120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,\r
+49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,\r
+46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,50,0,58,110,\r
+111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,\r
+57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,0,0,0,1,0,\r
+11,0,110,111,105,115,101,51,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,\r
+18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,\r
+115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,10,\r
+120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,\r
+49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,58,110,111,\r
+105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,0,\r
+0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,11,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,\r
+115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,\r
+52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,\r
+58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,0,0,\r
+0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,\r
+101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,\r
+0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,\r
+49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,\r
+17,49,51,0,49,57,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,9,120,0,0,0,1,8,58,\r
+118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,\r
+49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,58,110,\r
+111,105,115,101,49,0,18,120,0,17,50,51,0,53,52,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,\r
+0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,\r
+105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,\r
+58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,\r
+0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,50,51,0,53,52,0,0,0,17,50,57,\r
+0,49,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,11,120,0,0,0,1,8,58,118,101,\r
+99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,\r
+99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,\r
+115,101,49,0,18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,\r
+52,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,52,0,0,0,\r
+17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,\r
+0,0,12,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,\r
+115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,\r
+0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,\r
+0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,0,58,\r
+110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,\r
+17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0,0,0,0,46,0,0,0,0,0,0,0\r
index 3f976d5..40db02a 100755 (executable)
@@ -104,10 +104,7 @@ float __constructor (const float f) {
 }\r
 \r
 vec2 __constructor (const float f) {\r
-    vec2 u;\r
-    u.x = f;\r
-    u.y = f;\r
-    return u;\r
+    return vec2 (f, f);\r
 }\r
 \r
 vec2 __constructor (const int i) {\r
@@ -121,11 +118,7 @@ vec2 __constructor (const bool b) {
 }\r
 \r
 vec3 __constructor (const float f) {\r
-    vec3 u;\r
-    u.x = f;\r
-    u.y = f;\r
-    u.z = f;\r
-    return u;\r
+    return vec3 (f, f, f);\r
 }\r
 \r
 vec3 __constructor (const int i) {\r
@@ -139,12 +132,7 @@ vec3 __constructor (const bool b) {
 }\r
 \r
 vec4 __constructor (const float f) {\r
-    vec4 u;\r
-    u.x = f;\r
-    u.y = f;\r
-    u.z = f;\r
-    u.w = f;\r
-    return u;\r
+    return vec4 (f, f, f, f);\r
 }\r
 \r
 vec4 __constructor (const int i) {\r
@@ -158,10 +146,7 @@ vec4 __constructor (const bool b) {
 }\r
 \r
 ivec2 __constructor (const int i) {\r
-    ivec2 u;\r
-    u.x = i;\r
-    u.y = i;\r
-    return u;\r
+    return ivec2 (i, i);\r
 }\r
 \r
 ivec2 __constructor (const float f) {\r
@@ -173,11 +158,7 @@ ivec2 __constructor (const bool b) {
 }\r
 \r
 ivec3 __constructor (const int i) {\r
-    ivec3 u;\r
-    u.x = i;\r
-    u.y = i;\r
-    u.z = i;\r
-    return u;\r
+    return ivec3 (i, i, i);\r
 }\r
 \r
 ivec3 __constructor (const float f) {\r
@@ -189,12 +170,7 @@ ivec3 __constructor (const bool b) {
 }\r
 \r
 ivec4 __constructor (const int i) {\r
-    ivec4 u;\r
-    u.x = i;\r
-    u.y = i;\r
-    u.z = i;\r
-    u.w = i;\r
-    return u;\r
+    return ivec4 (i, i, i, i);\r
 }\r
 \r
 ivec4 __constructor (const float f) {\r
@@ -206,10 +182,7 @@ ivec4 __constructor (const bool b) {
 }\r
 \r
 bvec2 __constructor (const bool b) {\r
-    bvec2 u;\r
-    u.x = b;\r
-    u.y = b;\r
-    return u;\r
+    return bvec2 (b, b);\r
 }\r
 \r
 bvec2 __constructor (const float f) {\r
@@ -221,11 +194,7 @@ bvec2 __constructor (const int i) {
 }\r
 \r
 bvec3 __constructor (const bool b) {\r
-    bvec3 u;\r
-    u.x = b;\r
-    u.y = b;\r
-    u.z = b;\r
-    return u;\r
+    return bvec3 (b, b, b);\r
 }\r
 \r
 bvec3 __constructor (const float f) {\r
@@ -237,12 +206,7 @@ bvec3 __constructor (const int i) {
 }\r
 \r
 bvec4 __constructor (const bool b) {\r
-    bvec4 u;\r
-    u.x = b;\r
-    u.y = b;\r
-    u.z = b;\r
-    u.w = b;\r
-    return u;\r
+    return bvec4 (b, b, b, b);\r
 }\r
 \r
 bvec4 __constructor (const float f) {\r
@@ -254,12 +218,7 @@ bvec4 __constructor (const int i) {
 }\r
 \r
 mat2 __constructor (const float f) {\r
-    mat2 m;\r
-    m[0].x = f;\r
-    m[0].y = 0.0;\r
-    m[1].x = 0.0;\r
-    m[1].y = f;\r
-    return m;\r
+    return mat2 (f, 0.0, 0.0, f);\r
 }\r
 \r
 mat2 __constructor (const int i) {\r
@@ -273,17 +232,7 @@ mat2 __constructor (const bool b) {
 }\r
 \r
 mat3 __constructor (const float f) {\r
-    mat3 m;\r
-    m[0].x = f;\r
-    m[0].y = 0.0;\r
-    m[0].z = 0.0;\r
-    m[1].x = 0.0;\r
-    m[1].y = f;\r
-    m[1].z = 0.0;\r
-    m[2].x = 0.0;\r
-    m[2].y = 0.0;\r
-    m[2].z = f;\r
-    return m;\r
+    return mat3 (f, 0.0, 0.0, 0.0, f, 0.0, 0.0, 0.0, f);\r
 }\r
 \r
 mat3 __constructor (const int i) {\r
@@ -297,24 +246,7 @@ mat3 __constructor (const bool b) {
 }\r
 \r
 mat4 __constructor (const float f) {\r
-    mat4 m;\r
-    m[0].x = f;\r
-    m[0].y = 0.0;\r
-    m[0].z = 0.0;\r
-    m[0].w = 0.0;\r
-    m[1].x = 0.0;\r
-    m[1].y = f;\r
-    m[1].z = 0.0;\r
-    m[1].w = 0.0;\r
-    m[2].x = 0.0;\r
-    m[2].y = 0.0;\r
-    m[2].z = f;\r
-    m[2].w = 0.0;\r
-    m[3].x = 0.0;\r
-    m[3].y = 0.0;\r
-    m[3].z = 0.0;\r
-    m[3].w = f;\r
-    return m;\r
+    return mat4 (f, 0.0, 0.0, 0.0, 0.0, f, 0.0, 0.0, 0.0, 0.0, f, 0.0, 0.0, 0.0, 0.0, f);\r
 }\r
 \r
 mat4 __constructor (const int i) {\r
@@ -549,17 +481,14 @@ void __operator -= (inout mat2 m, const mat2 n) {
 }\r
 \r
 vec2 __operator * (const mat2 m, const vec2 v) {\r
-    vec2 u;\r
-    u.x = v.x * m[0].x + v.y * m[1].x;\r
-    u.y = v.x * m[0].y + v.y * m[1].y;\r
-    return u;\r
+    return vec2 (\r
+        v.x * m[0].x + v.y * m[1].x,\r
+        v.x * m[0].y + v.y * m[1].y\r
+    );\r
 }\r
 \r
 mat2 __operator * (const mat2 m, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = m * n[0];\r
-    o[1] = m * n[1];\r
-    return o;\r
+    return mat2 (m * n[0], m * n[1]);\r
 }\r
 \r
 void __operator *= (inout mat2 m, const mat2 n) {\r
@@ -584,19 +513,15 @@ void __operator -= (inout mat3 m, const mat3 n) {
 }\r
 \r
 vec3 __operator * (const mat3 m, const vec3 v) {\r
-    vec3 u;\r
-    u.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x;\r
-    u.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y;\r
-    u.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z;\r
-    return u;\r
+    return vec3 (\r
+        v.x * m[0].x + v.y * m[1].x + v.z * m[2].x,\r
+        v.x * m[0].y + v.y * m[1].y + v.z * m[2].y,\r
+        v.x * m[0].z + v.y * m[1].z + v.z * m[2].z\r
+    );\r
 }\r
 \r
 mat3 __operator * (const mat3 m, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = m * n[0];\r
-    o[1] = m * n[1];\r
-    o[2] = m * n[2];\r
-    return o;\r
+    return mat3 (m * n[0], m * n[1], m * n[2]);\r
 }\r
 \r
 void __operator *= (inout mat3 m, const mat3 n) {\r
@@ -624,21 +549,16 @@ void __operator -= (inout mat4 m, const mat4 n) {
 }\r
 \r
 vec4 __operator * (const mat4 m, const vec4 v) {\r
-    vec4 u;\r
-    u.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x;\r
-    u.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y;\r
-    u.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z;\r
-    u.w = v.x * m[0].w + v.y * m[1].w + v.z * m[2].w + v.w * m[3].w;\r
-    return u;\r
+    return vec4 (\r
+        v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x,\r
+        v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y,\r
+        v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z,\r
+        v.x * m[0].w + v.y * m[1].w + v.z * m[2].w + v.w * m[3].w\r
+    );\r
 }\r
 \r
 mat4 __operator * (const mat4 m, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = m * n[0];\r
-    o[1] = m * n[1];\r
-    o[2] = m * n[2];\r
-    o[3] = m * n[3];\r
-    return o;\r
+    return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);\r
 }\r
 \r
 void __operator *= (inout mat4 m, const mat4 n) {\r
@@ -797,10 +717,10 @@ void __operator /= (inout mat4 m, const float a) {
 }\r
 \r
 vec2 __operator * (const vec2 v, const mat2 m) {\r
-    vec2 u;\r
-    u.x = v.x * m[0].x + v.y * m[0].y;\r
-    u.y = v.x * m[1].x + v.y * m[1].y;\r
-    return u;\r
+    return vec2 (\r
+        v.x * m[0].x + v.y * m[0].y,\r
+        v.x * m[1].x + v.y * m[1].y\r
+    );\r
 }\r
 \r
 void __operator *= (inout vec2 v, const mat2 m) {\r
@@ -808,11 +728,11 @@ void __operator *= (inout vec2 v, const mat2 m) {
 }\r
 \r
 vec3 __operator * (const vec3 v, const mat3 m) {\r
-    vec3 u;\r
-    u.x = v.x * m[0].x + v.y * m[0].y + v.z * m[0].z;\r
-    u.y = v.x * m[1].x + v.y * m[1].y + v.z * m[1].z;\r
-    u.z = v.x * m[2].x + v.y * m[2].y + v.z * m[2].z;\r
-    return u;\r
+    return vec3 (\r
+        v.x * m[0].x + v.y * m[0].y + v.z * m[0].z,\r
+        v.x * m[1].x + v.y * m[1].y + v.z * m[1].z,\r
+        v.x * m[2].x + v.y * m[2].y + v.z * m[2].z\r
+    );\r
 }\r
 \r
 void __operator *= (inout vec3 v, const mat3 m) {\r
@@ -820,12 +740,12 @@ void __operator *= (inout vec3 v, const mat3 m) {
 }\r
 \r
 vec4 __operator * (const vec4 v, const mat4 m) {\r
-    vec4 u;\r
-    u.x = v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w;\r
-    u.y = v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w;\r
-    u.z = v.x * m[2].x + v.y * m[2].y + v.z * m[2].z + v.w * m[2].w;\r
-    u.w = v.x * m[3].x + v.y * m[3].y + v.z * m[3].z + v.w * m[3].w;\r
-    return u;\r
+    return vec4 (\r
+        v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w,\r
+        v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w,\r
+        v.x * m[2].x + v.y * m[2].y + v.z * m[2].z + v.w * m[2].w,\r
+        v.x * m[3].x + v.y * m[3].y + v.z * m[3].z + v.w * m[3].w\r
+    );\r
 }\r
 \r
 void __operator *= (inout vec4 v, const mat4 m) {\r
@@ -881,651 +801,327 @@ int __operator / (const int a, const int b) {
 }\r
 \r
 vec2 __operator + (const vec2 v, const vec2 u) {\r
-    vec2 t;\r
-    t.x = v.x + u.x;\r
-    t.y = v.y + u.y;\r
-    return t;\r
+    return vec2 (v.x + u.x, v.y + u.y);\r
 }\r
 \r
 vec2 __operator - (const vec2 v, const vec2 u) {\r
-    vec2 t;\r
-    t.x = v.x - u.x;\r
-    t.y = v.y - u.y;\r
-    return t;\r
+    return vec2 (v.x - u.x, v.y - u.y);\r
 }\r
 \r
 vec2 __operator * (const vec2 v, const vec2 u) {\r
-    vec2 t;\r
-    t.x = v.x * u.x;\r
-    t.y = v.y * u.y;\r
-    return t;\r
+    return vec2 (v.x * u.x, v.y * u.y);\r
 }\r
 \r
 vec2 __operator / (const vec2 v, const vec2 u) {\r
-    vec2 t;\r
-    t.x = v.x / u.x;\r
-    t.y = v.y / u.y;\r
-    return t;\r
+    return vec2 (v.x / u.x, v.y / u.y);\r
 }\r
 \r
 vec3 __operator + (const vec3 v, const vec3 u) {\r
-    vec3 t;\r
-    t.x = v.x + u.x;\r
-    t.y = v.y + u.y;\r
-    t.z = v.z + u.z;\r
-    return t;\r
+    return vec3 (v.x + u.x, v.y + u.y, v.z + u.z);\r
 }\r
 \r
 vec3 __operator - (const vec3 v, const vec3 u) {\r
-    vec3 t;\r
-    t.x = v.x - u.x;\r
-    t.y = v.y - u.y;\r
-    t.z = v.z - u.z;\r
-    return t;\r
+    return vec3 (v.x - u.x, v.y - u.y, v.z - u.z);\r
 }\r
 \r
 vec3 __operator * (const vec3 v, const vec3 u) {\r
-    vec3 t;\r
-    t.x = v.x * u.x;\r
-    t.y = v.y * u.y;\r
-    t.z = v.z * u.z;\r
-    return t;\r
+    return vec3 (v.x * u.x, v.y * u.y, v.z * u.z);\r
 }\r
 \r
 vec3 __operator / (const vec3 v, const vec3 u) {\r
-    vec3 t;\r
-    t.x = v.x / u.x;\r
-    t.y = v.y / u.y;\r
-    t.z = v.z / u.z;\r
-    return t;\r
+    return vec3 (v.x / u.x, v.y / u.y, v.z / u.z);\r
 }\r
 \r
 vec4 __operator + (const vec4 v, const vec4 u) {\r
-    vec4 t;\r
-    t.x = v.x + u.x;\r
-    t.y = v.y + u.y;\r
-    t.z = v.z + u.z;\r
-    t.w = v.w + u.w;\r
-    return t;\r
+    return vec4 (v.x + u.x, v.y + u.y, v.z + u.z, v.w + u.w);\r
 }\r
 \r
 vec4 __operator - (const vec4 v, const vec4 u) {\r
-    vec4 t;\r
-    t.x = v.x - u.x;\r
-    t.y = v.y - u.y;\r
-    t.z = v.z - u.z;\r
-    t.w = v.w - u.w;\r
-    return t;\r
+    return vec4 (v.x - u.x, v.y - u.y, v.z - u.z, v.w - u.w);\r
 }\r
 \r
 vec4 __operator * (const vec4 v, const vec4 u) {\r
-    vec4 t;\r
-    t.x = v.x * u.x;\r
-    t.y = v.y * u.y;\r
-    t.z = v.z * u.z;\r
-    t.w = v.w * u.w;\r
-    return t;\r
+    return vec4 (v.x * u.x, v.y * u.y, v.z * u.z, v.w * u.w);\r
 }\r
 \r
 vec4 __operator / (const vec4 v, const vec4 u) {\r
-    vec4 t;\r
-    t.x = v.x / u.x;\r
-    t.y = v.y / u.y;\r
-    t.z = v.z / u.z;\r
-    t.w = v.w / u.w;\r
-    return t;\r
+    return vec4 (v.x / u.x, v.y / u.y, v.z / u.z, v.w / u.w);\r
 }\r
 \r
 ivec2 __operator + (const ivec2 v, const ivec2 u) {\r
-    ivec2 t;\r
-    t.x = v.x + u.x;\r
-    t.y = v.y + u.y;\r
-    return t;\r
+    return ivec2 (v.x + u.x, v.y + u.y);\r
 }\r
 \r
 ivec2 __operator - (const ivec2 v, const ivec2 u) {\r
-    ivec2 t;\r
-    t.x = v.x - u.x;\r
-    t.y = v.y - u.y;\r
-    return t;\r
+    return ivec2 (v.x - u.x, v.y - u.y);\r
 }\r
 \r
 ivec2 __operator * (const ivec2 v, const ivec2 u) {\r
-    ivec2 t;\r
-    t.x = v.x * u.x;\r
-    t.y = v.y * u.y;\r
-    return t;\r
+    return ivec2 (v.x * u.x, v.y * u.y);\r
 }\r
 \r
 ivec2 __operator / (const ivec2 v, const ivec2 u) {\r
-    ivec2 t;\r
-    t.x = v.x / u.x;\r
-    t.y = v.y / u.y;\r
-    return t;\r
+    return ivec2 (v.x / u.x, v.y / u.y);\r
 }\r
 \r
 ivec3 __operator + (const ivec3 v, const ivec3 u) {\r
-    ivec3 t;\r
-    t.x = v.x + u.x;\r
-    t.y = v.y + u.y;\r
-    t.z = v.z + u.z;\r
-    return t;\r
+    return ivec3 (v.x + u.x, v.y + u.y, v.z + u.z);\r
 }\r
 \r
 ivec3 __operator - (const ivec3 v, const ivec3 u) {\r
-    ivec3 t;\r
-    t.x = v.x - u.x;\r
-    t.y = v.y - u.y;\r
-    t.z = v.z - u.z;\r
-    return t;\r
+    return ivec3 (v.x - u.x, v.y - u.y, v.z - u.z);\r
 }\r
 \r
 ivec3 __operator * (const ivec3 v, const ivec3 u) {\r
-    ivec3 t;\r
-    t.x = v.x * u.x;\r
-    t.y = v.y * u.y;\r
-    t.z = v.z * u.z;\r
-    return t;\r
+    return ivec3 (v.x * u.x, v.y * u.y, v.z * u.z);\r
 }\r
 \r
 ivec3 __operator / (const ivec3 v, const ivec3 u) {\r
-    ivec3 t;\r
-    t.x = v.x / u.x;\r
-    t.y = v.y / u.y;\r
-    t.z = v.z / u.z;\r
-    return t;\r
+    return ivec3 (v.x / u.x, v.y / u.y, v.z / u.z);\r
 }\r
 \r
 ivec4 __operator + (const ivec4 v, const ivec4 u) {\r
-    ivec4 t;\r
-    t.x = v.x + u.x;\r
-    t.y = v.y + u.y;\r
-    t.z = v.z + u.z;\r
-    t.w = v.w + u.w;\r
-    return t;\r
+    return ivec4 (v.x + u.x, v.y + u.y, v.z + u.z, v.w + u.w);\r
 }\r
 \r
 ivec4 __operator - (const ivec4 v, const ivec4 u) {\r
-    ivec4 t;\r
-    t.x = v.x - u.x;\r
-    t.y = v.y - u.y;\r
-    t.z = v.z - u.z;\r
-    t.w = v.w - u.w;\r
-    return t;\r
+    return ivec4 (v.x - u.x, v.y - u.y, v.z - u.z, v.w - u.w);\r
 }\r
 \r
 ivec4 __operator * (const ivec4 v, const ivec4 u) {\r
-    ivec4 t;\r
-    t.x = v.x * u.x;\r
-    t.y = v.y * u.y;\r
-    t.z = v.z * u.z;\r
-    t.w = v.w * u.w;\r
-    return t;\r
+    return ivec4 (v.x * u.x, v.y * u.y, v.z * u.z, v.w * u.w);\r
 }\r
 \r
 ivec4 __operator / (const ivec4 v, const ivec4 u) {\r
-    ivec4 t;\r
-    t.x = v.x / u.x;\r
-    t.y = v.y / u.y;\r
-    t.z = v.z / u.z;\r
-    t.w = v.w / u.w;\r
-    return t;\r
+    return ivec4 (v.x / u.x, v.y / u.y, v.z / u.z, v.w / u.w);\r
 }\r
 \r
 mat2 __operator + (const mat2 m, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = m[0] + n[0];\r
-    o[1] = m[1] + n[1];\r
-    return o;\r
+    return mat2 (m[0] + n[0], m[1] + n[1]);\r
 }\r
 \r
 mat2 __operator - (const mat2 m, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = m[0] - n[0];\r
-    o[1] = m[1] - n[1];\r
-    return o;\r
+    return mat2 (m[0] - n[0], m[1] - n[1]);\r
 }\r
 \r
 mat2 __operator / (const mat2 m, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = m[0] / n[0];\r
-    o[1] = m[1] / n[1];\r
-    return o;\r
+    return mat2 (m[0] / n[0], m[1] / n[1]);\r
 }\r
 \r
 mat3 __operator + (const mat3 m, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = m[0] + n[0];\r
-    o[1] = m[1] + n[1];\r
-    o[2] = m[2] + n[2];\r
-    return o;\r
+    return mat3 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);\r
 }\r
 \r
 mat3 __operator - (const mat3 m, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = m[0] - n[0];\r
-    o[1] = m[1] - n[1];\r
-    o[2] = m[2] - n[2];\r
-    return o;\r
+    return mat3 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);\r
 }\r
 \r
 mat3 __operator / (const mat3 m, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = m[0] / n[0];\r
-    o[1] = m[1] / n[1];\r
-    o[2] = m[2] / n[2];\r
-    return o;\r
+    return mat3 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);\r
 }\r
 \r
 mat4 __operator + (const mat4 m, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = m[0] + n[0];\r
-    o[1] = m[1] + n[1];\r
-    o[2] = m[2] + n[2];\r
-    o[3] = m[3] + n[3];\r
-    return o;\r
+    return mat4 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);\r
 }\r
 \r
 mat4 __operator - (const mat4 m, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = m[0] - n[0];\r
-    o[1] = m[1] - n[1];\r
-    o[2] = m[2] - n[2];\r
-    o[3] = m[3] - n[3];\r
-    return o;\r
+    return mat4 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);\r
 }\r
 \r
 mat4 __operator / (const mat4 m, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = m[0] / n[0];\r
-    o[1] = m[1] / n[1];\r
-    o[2] = m[2] / n[2];\r
-    o[3] = m[3] / n[3];\r
-    return o;\r
+    return mat4 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);\r
 }\r
 \r
 vec2 __operator + (const float a, const vec2 u) {\r
-    vec2 t;\r
-    t.x = a + u.x;\r
-    t.y = a + u.y;\r
-    return t;\r
+    return vec2 (a + u.x, a + u.y);\r
 }\r
 \r
 vec2 __operator + (const vec2 v, const float b) {\r
-    vec2 t;\r
-    t.x = v.x + b;\r
-    t.y = v.y + b;\r
-    return t;\r
+    return vec2 (v.x + b, v.y + b);\r
 }\r
 \r
 vec2 __operator - (const float a, const vec2 u) {\r
-    vec2 t;\r
-    t.x = a - u.x;\r
-    t.y = a - u.y;\r
-    return t;\r
+    return vec2 (a - u.x, a - u.y);\r
 }\r
 \r
 vec2 __operator - (const vec2 v, const float b) {\r
-    vec2 t;\r
-    t.x = v.x - b;\r
-    t.y = v.y - b;\r
-    return t;\r
+    return vec2 (v.x - b, v.y - b);\r
 }\r
 \r
 vec2 __operator * (const float a, const vec2 u) {\r
-    vec2 t;\r
-    t.x = a * u.x;\r
-    t.y = a * u.y;\r
-    return t;\r
+    return vec2 (a * u.x, a * u.y);\r
 }\r
 \r
 vec2 __operator * (const vec2 v, const float b) {\r
-    vec2 t;\r
-    t.x = v.x * b;\r
-    t.y = v.y * b;\r
-    return t;\r
+    return vec2 (v.x * b, v.y * b);\r
 }\r
 \r
 vec2 __operator / (const float a, const vec2 u) {\r
-    vec2 t;\r
-    t.x = a / u.x;\r
-    t.y = a / u.y;\r
-    return t;\r
+    return vec2 (a / u.x, a / u.y);\r
 }\r
 \r
 vec2 __operator / (const vec2 v, const float b) {\r
-    vec2 t;\r
-    t.x = v.x / b;\r
-    t.y = v.y / b;\r
-    return t;\r
+    return vec2 (v.x / b, v.y / b);\r
 }\r
 \r
 vec3 __operator + (const float a, const vec3 u) {\r
-    vec3 t;\r
-    t.x = a + u.x;\r
-    t.y = a + u.y;\r
-    t.z = a + u.z;\r
-    return t;\r
+    return vec3 (a + u.x, a + u.y, a + u.z);\r
 }\r
 \r
 vec3 __operator + (const vec3 v, const float b) {\r
-    vec3 t;\r
-    t.x = v.x + b;\r
-    t.y = v.y + b;\r
-    t.z = v.z + b;\r
-    return t;\r
+    return vec3 (v.x + b, v.y + b, v.z + b);\r
 }\r
 \r
 vec3 __operator - (const float a, const vec3 u) {\r
-    vec3 t;\r
-    t.x = a - u.x;\r
-    t.y = a - u.y;\r
-    t.z = a - u.z;\r
-    return t;\r
+    return vec3 (a - u.x, a - u.y, a - u.z);\r
 }\r
 \r
 vec3 __operator - (const vec3 v, const float b) {\r
-    vec3 t;\r
-    t.x = v.x - b;\r
-    t.y = v.y - b;\r
-    t.z = v.z - b;\r
-    return t;\r
+    return vec3 (v.x - b, v.y - b, v.z - b);\r
 }\r
 \r
 vec3 __operator * (const float a, const vec3 u) {\r
-    vec3 t;\r
-    t.x = a * u.x;\r
-    t.y = a * u.y;\r
-    t.z = a * u.z;\r
-    return t;\r
+    return vec3 (a * u.x, a * u.y, a * u.z);\r
 }\r
 \r
 vec3 __operator * (const vec3 v, const float b) {\r
-    vec3 t;\r
-    t.x = v.x * b;\r
-    t.y = v.y * b;\r
-    t.z = v.z * b;\r
-    return t;\r
+    return vec3 (v.x * b, v.y * b, v.z * b);\r
 }\r
 \r
 vec3 __operator / (const float a, const vec3 u) {\r
-    vec3 t;\r
-    t.x = a / u.x;\r
-    t.y = a / u.y;\r
-    t.z = a / u.z;\r
-    return t;\r
+    return vec3 (a / u.x, a / u.y, a / u.z);\r
 }\r
 \r
 vec3 __operator / (const vec3 v, const float b) {\r
-    vec3 t;\r
-    t.x = v.x / b;\r
-    t.y = v.y / b;\r
-    t.z = v.z / b;\r
-    return t;\r
+    return vec3 (v.x / b, v.y / b, v.z / b);\r
 }\r
 \r
 vec4 __operator + (const float a, const vec4 u) {\r
-    vec4 t;\r
-    t.x = a + u.x;\r
-    t.y = a + u.y;\r
-    t.z = a + u.z;\r
-    t.w = a + u.w;\r
-    return t;\r
+    return vec4 (a + u.x, a + u.y, a + u.z, a + u.w);\r
 }\r
 \r
 vec4 __operator + (const vec4 v, const float b) {\r
-    vec4 t;\r
-    t.x = v.x + b;\r
-    t.y = v.y + b;\r
-    t.z = v.z + b;\r
-    t.w = v.w + b;\r
-    return t;\r
+    return vec4 (v.x + b, v.y + b, v.z + b, v.w + b);\r
 }\r
 \r
 vec4 __operator - (const float a, const vec4 u) {\r
-    vec4 t;\r
-    t.x = a - u.x;\r
-    t.y = a - u.y;\r
-    t.z = a - u.z;\r
-    t.w = a - u.w;\r
-    return t;\r
+    return vec4 (a - u.x, a - u.y, a - u.z, a - u.w);\r
 }\r
 \r
 vec4 __operator - (const vec4 v, const float b) {\r
-    vec4 t;\r
-    t.x = v.x - b;\r
-    t.y = v.y - b;\r
-    t.z = v.z - b;\r
-    t.w = v.w - b;\r
-    return t;\r
+    return vec4 (v.x - b, v.y - b, v.z - b, v.w - b);\r
 }\r
 \r
 vec4 __operator * (const float a, const vec4 u) {\r
-    vec4 t;\r
-    t.x = a * u.x;\r
-    t.y = a * u.y;\r
-    t.z = a * u.z;\r
-    t.w = a * u.w;\r
-    return t;\r
+    return vec4 (a * u.x, a * u.y, a * u.z, a * u.w);\r
 }\r
 \r
 vec4 __operator * (const vec4 v, const float b) {\r
-    vec4 t;\r
-    t.x = v.x * b;\r
-    t.y = v.y * b;\r
-    t.z = v.z * b;\r
-    t.w = v.w * b;\r
-    return t;\r
+    return vec4 (v.x * b, v.y * b, v.z * b, v.w * b);\r
 }\r
 \r
 vec4 __operator / (const float a, const vec4 u) {\r
-    vec4 t;\r
-    t.x = a / u.x;\r
-    t.y = a / u.y;\r
-    t.z = a / u.z;\r
-    t.w = a / u.w;\r
-    return t;\r
+    return vec4 (a / u.x, a / u.y, a / u.z, a / u.w);\r
 }\r
 \r
 vec4 __operator / (const vec4 v, const float b) {\r
-    vec4 t;\r
-    t.x = v.x / b;\r
-    t.y = v.y / b;\r
-    t.z = v.z / b;\r
-    t.w = v.w / b;\r
-    return t;\r
+    return vec4 (v.x / b, v.y / b, v.z / b, v.w / b);\r
 }\r
 \r
 mat2 __operator + (const float a, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = a + n[0];\r
-    o[1] = a + n[1];\r
-    return o;\r
+    return mat2 (a + n[0], a + n[1]);\r
 }\r
 \r
 mat2 __operator + (const mat2 m, const float b) {\r
-    mat2 o;\r
-    o[0] = m[0] + b;\r
-    o[1] = m[1] + b;\r
-    return o;\r
+    return mat2 (m[0] + b, m[1] + b);\r
 }\r
 \r
 mat2 __operator - (const float a, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = a - n[0];\r
-    o[1] = a - n[1];\r
-    return o;\r
+    return mat2 (a - n[0], a - n[1]);\r
 }\r
 \r
 mat2 __operator - (const mat2 m, const float b) {\r
-    mat2 o;\r
-    o[0] = m[0] - b;\r
-    o[1] = m[1] - b;\r
-    return o;\r
+    return mat2 (m[0] - b, m[1] - b);\r
 }\r
 \r
 mat2 __operator * (const float a, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = a * n[0];\r
-    o[1] = a * n[1];\r
-    return o;\r
+    return mat2 (a * n[0], a * n[1]);\r
 }\r
 \r
 mat2 __operator * (const mat2 m, const float b) {\r
-    mat2 o;\r
-    o[0] = m[0] * b;\r
-    o[1] = m[1] * b;\r
-    return o;\r
+    return mat2 (m[0] * b, m[1] * b);\r
 }\r
 \r
 mat2 __operator / (const float a, const mat2 n) {\r
-    mat2 o;\r
-    o[0] = a / n[0];\r
-    o[1] = a / n[1];\r
-    return o;\r
+    return mat2 (a / n[0], a / n[1]);\r
 }\r
 \r
 mat2 __operator / (const mat2 m, const float b) {\r
-    mat2 o;\r
-    o[0] = m[0] / b;\r
-    o[1] = m[1] / b;\r
-    return o;\r
+    return mat2 (m[0] / b, m[1] / b);\r
 }\r
 \r
 mat3 __operator + (const float a, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = a + n[0];\r
-    o[1] = a + n[1];\r
-    o[2] = a + n[2];\r
-    return o;\r
+    return mat3 (a + n[0], a + n[1], a + n[2]);\r
 }\r
 \r
 mat3 __operator + (const mat3 m, const float b) {\r
-    mat3 o;\r
-    o[0] = m[0] + b;\r
-    o[1] = m[1] + b;\r
-    o[2] = m[2] + b;\r
-    return o;\r
+    return mat3 (m[0] + b, m[1] + b, m[2] + b);\r
 }\r
 \r
 mat3 __operator - (const float a, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = a - n[0];\r
-    o[1] = a - n[1];\r
-    o[2] = a - n[2];\r
-    return o;\r
+    return mat3 (a - n[0], a - n[1], a - n[2]);\r
 }\r
 \r
 mat3 __operator - (const mat3 m, const float b) {\r
-    mat3 o;\r
-    o[0] = m[0] - b;\r
-    o[1] = m[1] - b;\r
-    o[2] = m[2] - b;\r
-    return o;\r
+    return mat3 (m[0] - b, m[1] - b, m[2] - b);\r
 }\r
 \r
 mat3 __operator * (const float a, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = a * n[0];\r
-    o[1] = a * n[1];\r
-    o[2] = a * n[2];\r
-    return o;\r
+    return mat3 (a * n[0], a * n[1], a * n[2]);\r
 }\r
 \r
 mat3 __operator * (const mat3 m, const float b) {\r
-    mat3 o;\r
-    o[0] = m[0] * b;\r
-    o[1] = m[1] * b;\r
-    o[2] = m[2] * b;\r
-    return o;\r
+    return mat3 (m[0] * b, m[1] * b, m[2] * b);\r
 }\r
 \r
 mat3 __operator / (const float a, const mat3 n) {\r
-    mat3 o;\r
-    o[0] = a / n[0];\r
-    o[1] = a / n[1];\r
-    o[2] = a / n[2];\r
-    return o;\r
+    return mat3 (a / n[0], a / n[1], a / n[2]);\r
 }\r
 \r
 mat3 __operator / (const mat3 m, const float b) {\r
-    mat3 o;\r
-    o[0] = m[0] / b;\r
-    o[1] = m[1] / b;\r
-    o[2] = m[2] / b;\r
-    return o;\r
+    return mat3 (m[0] / b, m[1] / b, m[2] / b);\r
 }\r
 \r
 mat4 __operator + (const float a, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = a + n[0];\r
-    o[1] = a + n[1];\r
-    o[2] = a + n[2];\r
-    o[3] = a + n[3];\r
-    return o;\r
+    return mat4 (a + n[0], a + n[1], a + n[2], a + n[3]);\r
 }\r
 \r
 mat4 __operator + (const mat4 m, const float b) {\r
-    mat4 o;\r
-    o[0] = m[0] + b;\r
-    o[1] = m[1] + b;\r
-    o[2] = m[2] + b;\r
-    o[3] = m[3] + b;\r
-    return o;\r
+    return mat4 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);\r
 }\r
 \r
 mat4 __operator - (const float a, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = a - n[0];\r
-    o[1] = a - n[1];\r
-    o[2] = a - n[2];\r
-    o[3] = a - n[3];\r
-    return o;\r
+    return mat4 (a - n[0], a - n[1], a - n[2], a - n[3]);\r
 }\r
 \r
 mat4 __operator - (const mat4 m, const float b) {\r
-    mat4 o;\r
-    o[0] = m[0] - b;\r
-    o[1] = m[1] - b;\r
-    o[2] = m[2] - b;\r
-    o[3] = m[3] - b;\r
-    return o;\r
+    return mat4 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);\r
 }\r
 \r
 mat4 __operator * (const float a, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = a * n[0];\r
-    o[1] = a * n[1];\r
-    o[2] = a * n[2];\r
-    o[3] = a * n[3];\r
-    return o;\r
+    return mat4 (a * n[0], a * n[1], a * n[2], a * n[3]);\r
 }\r
 \r
 mat4 __operator * (const mat4 m, const float b) {\r
-    mat4 o;\r
-    o[0] = m[0] * b;\r
-    o[1] = m[1] * b;\r
-    o[2] = m[2] * b;\r
-    o[3] = m[3] * b;\r
-    return o;\r
+    return mat4 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);\r
 }\r
 \r
 mat4 __operator / (const float a, const mat4 n) {\r
-    mat4 o;\r
-    o[0] = a / n[0];\r
-    o[1] = a / n[1];\r
-    o[2] = a / n[2];\r
-    o[3] = a / n[3];\r
-    return o;\r
+    return mat4 (a / n[0], a / n[1], a / n[2], a / n[3]);\r
 }\r
 \r
 mat4 __operator / (const mat4 m, const float b) {\r
-    mat4 o;\r
-    o[0] = m[0] / b;\r
-    o[1] = m[1] / b;\r
-    o[2] = m[2] / b;\r
-    o[3] = m[3] / b;\r
-    return o;\r
+    return mat4 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);\r
 }\r
 \r
 ivec2 __operator + (const int a, const ivec2 u) {\r
@@ -1625,75 +1221,39 @@ ivec4 __operator / (const ivec4 v, const int b) {
 }\r
 \r
 vec2 __operator - (const vec2 v) {\r
-    vec2 u;\r
-    u.x = -v.x;\r
-    u.y = -v.y;\r
-    return u;\r
+    return vec2 (-v.x, -v.y);\r
 }\r
 \r
 vec3 __operator - (const vec3 v) {\r
-    vec3 u;\r
-    u.x = -v.x;\r
-    u.y = -v.y;\r
-    u.z = -v.z;\r
-    return u;\r
+    return vec3 (-v.x, -v.y, -v.z);\r
 }\r
 \r
 vec4 __operator - (const vec4 v) {\r
-    vec4 u;\r
-    u.x = -v.x;\r
-    u.y = -v.y;\r
-    u.z = -v.z;\r
-    u.w = -v.w;\r
-    return u;\r
+    return vec4 (-v.x, -v.y, -v.z, -v.w);\r
 }\r
 \r
 ivec2 __operator - (const ivec2 v) {\r
-    ivec2 u;\r
-    u.x = -v.x;\r
-    u.y = -v.y;\r
-    return u;\r
+    return ivec2 (-v.x, -v.y);\r
 }\r
 \r
 ivec3 __operator - (const ivec3 v) {\r
-    ivec3 u;\r
-    u.x = -v.x;\r
-    u.y = -v.y;\r
-    u.z = -v.z;\r
-    return u;\r
+    return ivec3 (-v.x, -v.y, -v.z);\r
 }\r
 \r
 ivec4 __operator - (const ivec4 v) {\r
-    ivec4 u;\r
-    u.x = -v.x;\r
-    u.y = -v.y;\r
-    u.z = -v.z;\r
-    u.w = -v.w;\r
-    return u;\r
+    return ivec4 (-v.x, -v.y, -v.z, -v.w);\r
 }\r
 \r
 mat2 __operator - (const mat2 m) {\r
-    mat2 n;\r
-    n[0] = -m[0];\r
-    n[1] = -m[1];\r
-    return n;\r
+    return mat2 (-m[0], -m[1]);\r
 }\r
 \r
 mat3 __operator - (const mat3 m) {\r
-    mat3 n;\r
-    n[0] = -m[0];\r
-    n[1] = -m[1];\r
-    n[2] = -m[2];\r
-    return n;\r
+    return mat3 (-m[0], -m[1], -m[2]);\r
 }\r
 \r
 mat4 __operator - (const mat4 m) {\r
-    mat4 n;\r
-    n[0] = -m[0];\r
-    n[1] = -m[1];\r
-    n[2] = -m[2];\r
-    n[3] = -m[3];\r
-    return n;\r
+    return mat4 (-m[0], -m[1], -m[2], -m[3]);\r
 }\r
 \r
 void __operator -- (inout float a) {\r
@@ -1840,84 +1400,39 @@ int __operator -- (inout int a, const int) {
 }\r
 \r
 vec2 __operator -- (inout vec2 v, const int) {\r
-    vec2 u;\r
-       u = v;\r
-       --v.x;\r
-       --v.y;\r
-       return u;\r
+    return vec2 (v.x--, v.y--);\r
 }\r
 \r
 vec3 __operator -- (inout vec3 v, const int) {\r
-    vec3 u;\r
-       u = v;\r
-       --v.x;\r
-       --v.y;\r
-       --v.z;\r
-       return u;\r
+    return vec3 (v.x--, v.y--, v.z--);\r
 }\r
 \r
 vec4 __operator -- (inout vec4 v, const int) {\r
-    vec4 u;\r
-       u = v;\r
-       --v.x;\r
-       --v.y;\r
-       --v.z;\r
-       --v.w;\r
-       return u;\r
+    return vec4 (v.x--, v.y--, v.z--, v.w--);\r
 }\r
 \r
 ivec2 __operator -- (inout ivec2 v, const int) {\r
-    ivec2 u;\r
-       u = v;\r
-       --v.x;\r
-       --v.y;\r
-       return u;\r
+    return ivec2 (v.x--, v.y--);\r
 }\r
 \r
 ivec3 __operator -- (inout ivec3 v, const int) {\r
-    ivec3 u;\r
-       u = v;\r
-       --v.x;\r
-       --v.y;\r
-       --v.z;\r
-       return u;\r
+    return ivec3 (v.x--, v.y--, v.z--);\r
 }\r
 \r
 ivec4 __operator -- (inout ivec4 v, const int) {\r
-    ivec4 u;\r
-       u = v;\r
-       --v.x;\r
-       --v.y;\r
-       --v.z;\r
-       --v.w;\r
-       return u;\r
+    return ivec4 (v.x--, v.y--, v.z--, v.w--);\r
 }\r
 \r
 mat2 __operator -- (inout mat2 m, const int) {\r
-    mat2 n;\r
-       n = m;\r
-       --m[0];\r
-       --m[1];\r
-       return n;\r
+    return mat2 (m[0]--, m[1]--);\r
 }\r
 \r
 mat3 __operator -- (inout mat3 m, const int) {\r
-    mat3 n;\r
-       n = m;\r
-       --m[0];\r
-       --m[1];\r
-       --m[2];\r
-       return n;\r
+    return mat3 (m[0]--, m[1]--, m[2]--);\r
 }\r
 \r
 mat4 __operator -- (inout mat4 m, const int) {\r
-    mat4 n;\r
-       n = m;\r
-       --m[0];\r
-       --m[1];\r
-       --m[2];\r
-       --m[3];\r
-       return n;\r
+    return mat4 (m[0]--, m[1]--, m[2]--, m[3]--);\r
 }\r
 \r
 float __operator ++ (inout float a, const int) {\r
@@ -1935,84 +1450,39 @@ int __operator ++ (inout int a, const int) {
 }\r
 \r
 vec2 __operator ++ (inout vec2 v, const int) {\r
-    vec2 u;\r
-       u = v;\r
-       ++v.x;\r
-       ++v.y;\r
-       return u;\r
+    return vec2 (v.x++, v.y++);\r
 }\r
 \r
 vec3 __operator ++ (inout vec3 v, const int) {\r
-    vec3 u;\r
-       u = v;\r
-       ++v.x;\r
-       ++v.y;\r
-       ++v.z;\r
-       return u;\r
+    return vec3 (v.x++, v.y++, v.z++);\r
 }\r
 \r
 vec4 __operator ++ (inout vec4 v, const int) {\r
-    vec4 u;\r
-       u = v;\r
-       ++v.x;\r
-       ++v.y;\r
-       ++v.z;\r
-       ++v.w;\r
-       return u;\r
+    return vec4 (v.x++, v.y++, v.z++, v.w++);\r
 }\r
 \r
 ivec2 __operator ++ (inout ivec2 v, const int) {\r
-    ivec2 u;\r
-       u = v;\r
-       ++v.x;\r
-       ++v.y;\r
-       return u;\r
+    return ivec2 (v.x++, v.y++);\r
 }\r
 \r
 ivec3 __operator ++ (inout ivec3 v, const int) {\r
-    ivec3 u;\r
-       u = v;\r
-       ++v.x;\r
-       ++v.y;\r
-       ++v.z;\r
-       return u;\r
+    return ivec3 (v.x++, v.y++, v.z++);\r
 }\r
 \r
 ivec4 __operator ++ (inout ivec4 v, const int) {\r
-    ivec4 u;\r
-       u = v;\r
-       ++v.x;\r
-       ++v.y;\r
-       ++v.z;\r
-       ++v.w;\r
-       return u;\r
+    return ivec4 (v.x++, v.y++, v.z++, v.w++);\r
 }\r
 \r
 mat2 __operator ++ (inout mat2 m, const int) {\r
-    mat2 n;\r
-       n = m;\r
-       --m[0];\r
-       --m[1];\r
-       return n;\r
+    return mat2 (m[0]++, m[1]++);\r
 }\r
 \r
 mat3 __operator ++ (inout mat3 m, const int) {\r
-    mat3 n;\r
-       n = m;\r
-       --m[0];\r
-       --m[1];\r
-       --m[2];\r
-       return n;\r
+    return mat3 (m[0]++, m[1]++, m[2]++);\r
 }\r
 \r
 mat4 __operator ++ (inout mat4 m, const int) {\r
-    mat4 n;\r
-       n = m;\r
-       --m[0];\r
-       --m[1];\r
-       --m[2];\r
-       --m[3];\r
-       return n;\r
+    return mat4 (m[0]++, m[1]++, m[2]++, m[3]++);\r
 }\r
 \r
 bool __operator < (const float a, const float b) {\r
index 9ba155a..8688a22 100644 (file)
 1,0,9,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,102,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,\r
 18,102,0,0,18,105,0,0,0,8,18,102,0,0,0,1,0,1,1,1,1,0,1,98,0,0,0,1,8,18,98,0,0,0,1,0,5,1,1,1,0,5,\r
 105,0,0,0,1,8,18,105,0,0,0,1,0,9,1,1,1,0,9,102,0,0,0,1,8,18,102,0,0,0,1,0,10,1,1,1,0,9,102,0,0,0,1,\r
-3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,18,102,0,20,0,9,18,117,0,59,121,0,18,102,0,20,0,8,18,117,\r
-0,0,0,1,0,10,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,\r
-116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,50,0,18,120,0,0,0,0,0,1,0,10,1,1,1,0,1,98,0,0,0,1,8,\r
-58,118,101,99,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,11,1,1,1,0,9,102,0,0,0,1,3,\r
-2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,18,102,0,20,0,9,18,117,0,59,121,0,18,102,0,20,0,9,18,117,0,\r
-59,122,0,18,102,0,20,0,8,18,117,0,0,0,1,0,11,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,\r
-116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,51,0,18,120,0,0,0,0,\r
-0,1,0,11,1,1,1,0,1,98,0,0,0,1,8,58,118,101,99,51,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,\r
-0,1,0,12,1,1,1,0,9,102,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,18,102,0,20,0,9,18,117,0,\r
-59,121,0,18,102,0,20,0,9,18,117,0,59,122,0,18,102,0,20,0,9,18,117,0,59,119,0,18,102,0,20,0,8,18,\r
-117,0,0,0,1,0,12,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,\r
-97,116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,52,0,18,120,0,0,0,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,\r
-8,58,118,101,99,52,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,\r
-3,2,0,6,1,117,0,0,0,9,18,117,0,59,120,0,18,105,0,20,0,9,18,117,0,59,121,0,18,105,0,20,0,8,18,117,0,\r
-0,0,1,0,6,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,\r
-6,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,7,1,1,1,0,\r
-5,105,0,0,0,1,3,2,0,7,1,117,0,0,0,9,18,117,0,59,120,0,18,105,0,20,0,9,18,117,0,59,121,0,18,105,0,\r
-20,0,9,18,117,0,59,122,0,18,105,0,20,0,8,18,117,0,0,0,1,0,7,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,\r
-99,51,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,7,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,51,0,\r
-58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,8,1,1,1,0,5,105,0,0,0,1,3,2,0,8,1,117,0,0,0,9,18,117,0,59,\r
-120,0,18,105,0,20,0,9,18,117,0,59,121,0,18,105,0,20,0,9,18,117,0,59,122,0,18,105,0,20,0,9,18,117,0,\r
-59,119,0,18,105,0,20,0,8,18,117,0,0,0,1,0,8,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,52,0,58,105,\r
-110,116,0,18,102,0,0,0,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,52,0,58,105,110,116,\r
-0,18,98,0,0,0,0,0,0,0,1,0,2,1,1,1,0,1,98,0,0,0,1,3,2,0,2,1,117,0,0,0,9,18,117,0,59,120,0,18,98,0,\r
-20,0,9,18,117,0,59,121,0,18,98,0,20,0,8,18,117,0,0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,\r
-99,50,0,58,98,111,111,108,0,18,102,0,0,0,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,50,\r
-0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,3,2,0,3,1,117,0,0,0,9,18,117,\r
-0,59,120,0,18,98,0,20,0,9,18,117,0,59,121,0,18,98,0,20,0,9,18,117,0,59,122,0,18,98,0,20,0,8,18,117,\r
-0,0,0,1,0,3,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,102,0,0,0,0,0,0,0,\r
-1,0,3,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,4,\r
-1,1,1,0,1,98,0,0,0,1,3,2,0,4,1,117,0,0,0,9,18,117,0,59,120,0,18,98,0,20,0,9,18,117,0,59,121,0,18,\r
-98,0,20,0,9,18,117,0,59,122,0,18,98,0,20,0,9,18,117,0,59,119,0,18,98,0,20,0,8,18,117,0,0,0,1,0,4,1,\r
-1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,102,0,0,0,0,0,0,0,1,0,4,1,1,1,0,\r
-5,105,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,13,1,1,1,0,9,\r
-102,0,0,0,1,3,2,0,13,1,109,0,0,0,9,18,109,0,16,8,48,0,57,59,120,0,18,102,0,20,0,9,18,109,0,16,8,48,\r
-0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,\r
-16,10,49,0,57,59,121,0,18,102,0,20,0,8,18,109,0,0,0,1,0,13,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,\r
-0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,50,0,18,\r
-120,0,0,0,0,0,1,0,13,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,\r
-0,31,0,0,0,0,1,0,14,1,1,1,0,9,102,0,0,0,1,3,2,0,14,1,109,0,0,0,9,18,109,0,16,8,48,0,57,59,120,0,18,\r
-102,0,20,0,9,18,109,0,16,8,48,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,16,8,48,0,57,59,122,0,\r
-17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,\r
-59,121,0,18,102,0,20,0,9,18,109,0,16,10,49,0,57,59,122,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,50,0,\r
-57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,50,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,\r
-16,10,50,0,57,59,122,0,18,102,0,20,0,8,18,109,0,0,0,1,0,14,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,\r
-0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,51,0,18,\r
-120,0,0,0,0,0,1,0,14,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,51,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,\r
-0,31,0,0,0,0,1,0,15,1,1,1,0,9,102,0,0,0,1,3,2,0,15,1,109,0,0,0,9,18,109,0,16,8,48,0,57,59,120,0,18,\r
-102,0,20,0,9,18,109,0,16,8,48,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,16,8,48,0,57,59,122,0,\r
-17,48,0,48,0,0,20,0,9,18,109,0,16,8,48,0,57,59,119,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,\r
-59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,121,0,18,102,0,20,0,9,18,109,0,16,10,49,0,\r
-57,59,122,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,119,0,17,48,0,48,0,0,20,0,9,18,109,0,\r
-16,10,50,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,50,0,57,59,121,0,17,48,0,48,0,0,20,0,9,\r
-18,109,0,16,10,50,0,57,59,122,0,18,102,0,20,0,9,18,109,0,16,10,50,0,57,59,119,0,17,48,0,48,0,0,20,\r
-0,9,18,109,0,16,10,51,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,51,0,57,59,121,0,17,48,0,\r
-48,0,0,20,0,9,18,109,0,16,10,51,0,57,59,122,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,51,0,57,59,119,\r
-0,18,102,0,20,0,8,18,109,0,0,0,1,0,15,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,\r
-116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,52,0,18,120,0,0,0,0,0,1,0,\r
-15,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,52,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,\r
-0,2,1,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,97,100,100,0,18,97,0,0,18,97,0,0,\r
-18,98,0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,0,1,3,2,0,9,1,98,0,0,0,4,102,108,111,97,116,95,110,101,103,\r
-97,116,101,0,18,98,0,0,18,97,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,\r
-9,1,99,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,102,108,111,\r
-97,116,95,97,100,100,0,18,97,0,0,18,97,0,0,18,99,0,0,0,0,1,0,0,2,3,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,\r
-1,4,102,108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,\r
-0,2,4,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,97,0,\r
-0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,26,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,\r
-108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,0,2,1,1,0,2,5,97,\r
-0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,\r
-111,97,116,0,18,98,0,0,0,46,0,0,20,0,0,1,0,5,2,27,1,1,0,5,97,0,0,0,1,3,2,0,9,1,120,0,0,0,3,2,0,5,1,\r
-98,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,102,108,111,97,\r
-116,95,110,101,103,97,116,101,0,18,120,0,0,18,120,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,\r
-116,0,18,98,0,0,18,120,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,\r
-18,98,0,54,21,0,0,1,0,9,2,21,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,\r
-116,95,109,117,108,116,105,112,108,121,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,0,2,3,1,\r
-0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,97,0,0,0,58,\r
-102,108,111,97,116,0,18,98,0,0,0,48,0,0,20,0,0,1,0,9,2,22,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,\r
-9,1,99,0,0,0,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,\r
-18,99,0,0,0,1,0,0,2,4,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,\r
-97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,49,0,0,20,0,0,1,0,0,2,1,1,0,2,10,118,0,0,\r
-1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,\r
-121,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,\r
-22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,\r
-9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,0,0,2,4,\r
-1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,\r
-0,18,117,0,59,121,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,\r
-117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,122,\r
-0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,\r
-0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,1,0,0,2,\r
-3,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,\r
-121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,11,118,0,\r
-0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,\r
-121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,12,117,0,\r
-0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,\r
-118,0,59,122,0,18,117,0,59,122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,2,1,0,2,\r
-12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,18,\r
-117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,0,59,119,\r
-0,22,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,\r
-0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,18,118,0,\r
-59,119,0,18,117,0,59,119,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,\r
-120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,\r
-0,59,122,0,24,0,9,18,118,0,59,119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,1,0,6,117,\r
-0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,0,1,\r
-0,0,2,2,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,\r
-59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,\r
-0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,0,0,2,4,1,0,2,6,118,0,0,1,\r
-1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,\r
-24,0,0,1,0,0,2,1,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,\r
-18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,122,0,21,0,0,1,0,0,2,2,1,\r
-0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,\r
-18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,1,0,0,2,3,1,0,2,7,118,0,0,1,1,\r
-0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,\r
-23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,\r
-18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,\r
-122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,\r
-18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,\r
-122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,8,117,0,0,\r
-0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,\r
-0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,0,59,119,0,22,0,0,1,0,0,2,3,1,0,2,8,\r
-118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,\r
-0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,18,118,0,59,119,0,18,117,0,59,119,0,\r
-23,0,0,1,0,0,2,4,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,\r
-18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,9,18,118,0,59,\r
-119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,\r
-0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,0,1,0,0,2,2,1,\r
-0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,\r
-16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,0,1,0,10,2,21,1,1,0,13,109,0,0,1,1,0,10,118,0,0,0,1,3,2,\r
-0,10,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,\r
-59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,\r
-16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,20,0,8,18,117,0,0,\r
-0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,\r
-18,109,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,109,0,18,110,0,16,10,49,0,57,48,\r
-20,0,8,18,111,0,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,\r
-48,20,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,\r
-0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,\r
-14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,\r
-0,16,10,49,0,57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,0,1,0,0,2,2,1,0,2,14,109,\r
-0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,\r
-57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,0,1,0,11,2,21,\r
-1,1,0,14,109,0,0,1,1,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,\r
-18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,\r
-59,122,0,18,109,0,16,10,50,0,57,59,120,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,\r
-16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,\r
-18,109,0,16,10,50,0,57,59,121,0,48,46,20,0,9,18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,8,48,\r
-0,57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,122,0,18,109,\r
-0,16,10,50,0,57,59,122,0,48,46,20,0,8,18,117,0,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,\r
-1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,\r
-16,10,49,0,57,18,109,0,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,18,110,0,\r
-16,10,50,0,57,48,20,0,8,18,111,0,0,0,1,0,0,2,3,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,18,\r
-109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,\r
-18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,\r
-50,0,57,18,110,0,16,10,50,0,57,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,\r
-16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,9,18,\r
-109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,21,\r
-0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,\r
-22,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,\r
-50,0,57,22,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,22,0,0,1,0,12,2,21,1,1,0,15,109,0,0,1,\r
-1,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,\r
-57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,59,122,0,18,109,0,\r
-16,10,50,0,57,59,120,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,120,0,48,46,20,0,9,18,117,\r
-0,59,121,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,\r
-0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,119,0,18,\r
-109,0,16,10,51,0,57,59,121,0,48,46,20,0,9,18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,8,48,0,\r
-57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,122,0,18,109,0,\r
-16,10,50,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,122,0,48,46,20,0,9,18,117,\r
-0,59,119,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,119,0,48,18,118,0,59,121,0,18,109,0,16,10,49,\r
-0,57,59,119,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,119,0,48,46,18,118,0,59,119,0,18,\r
-109,0,16,10,51,0,57,59,119,0,48,46,20,0,8,18,117,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,15,110,0,\r
-0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,\r
-0,16,10,49,0,57,18,109,0,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,18,110,0,\r
-16,10,50,0,57,48,20,0,9,18,111,0,16,10,51,0,57,18,109,0,18,110,0,16,10,51,0,57,48,20,0,8,18,111,0,\r
-0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,\r
-4,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,\r
-109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,\r
-0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,24,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,9,97,0,0,\r
-0,1,9,18,118,0,59,120,0,18,97,0,21,0,9,18,118,0,59,121,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,\r
-1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,0,1,0,0,2,3,1,\r
-0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,\r
-0,0,1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,\r
-121,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,\r
-0,9,18,118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,\r
-1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,9,18,118,0,59,\r
-122,0,18,97,0,22,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,\r
-0,9,18,118,0,59,121,0,18,97,0,23,0,9,18,118,0,59,122,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,\r
-1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,\r
-122,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,\r
-0,9,18,118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,9,18,118,0,59,119,0,18,97,0,21,\r
-0,0,1,0,0,2,2,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,\r
-121,0,18,97,0,22,0,9,18,118,0,59,122,0,18,97,0,22,0,9,18,118,0,59,119,0,18,97,0,22,0,0,1,0,0,2,3,1,\r
-0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,\r
-0,9,18,118,0,59,122,0,18,97,0,23,0,9,18,118,0,59,119,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,\r
-1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,\r
-122,0,18,97,0,24,0,9,18,118,0,59,119,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,\r
-1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,13,\r
-109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,\r
-22,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,\r
-0,16,10,49,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,\r
-57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,9,97,0,0,\r
-0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,\r
-0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,\r
-22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,\r
-14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,\r
-0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,\r
-109,0,16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,\r
-97,0,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,\r
-18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,97,0,21,0,9,18,109,0,16,10,51,0,57,\r
-18,97,0,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,\r
-9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,9,18,109,0,16,10,51,0,\r
-57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,\r
-0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,9,18,109,0,16,10,51,\r
-0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,\r
-24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,24,0,9,18,109,0,16,10,\r
-51,0,57,18,97,0,24,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,13,109,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,\r
-117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,\r
-48,0,57,59,121,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,120,0,\r
-48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,20,0,8,18,117,0,0,0,1,0,0,2,3,1,0,2,10,\r
-118,0,0,1,1,0,13,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,\r
-1,0,14,109,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,\r
-57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,\r
-16,8,48,0,57,59,122,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,\r
-120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,\r
-49,0,57,59,122,0,48,46,20,0,9,18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,\r
-48,18,118,0,59,121,0,18,109,0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,\r
-57,59,122,0,48,46,20,0,8,18,117,0,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,118,0,\r
-18,118,0,18,109,0,48,20,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,15,109,0,0,0,1,3,2,0,12,1,117,0,0,0,\r
-9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,\r
-16,8,48,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,8,48,0,57,59,122,0,48,46,18,118,0,59,119,\r
-0,18,109,0,16,8,48,0,57,59,119,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,16,10,\r
-49,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,\r
-109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,49,0,57,59,119,0,48,46,20,0,9,\r
-18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,\r
-16,10,50,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,18,118,0,59,\r
-119,0,18,109,0,16,10,50,0,57,59,119,0,48,46,20,0,9,18,117,0,59,119,0,18,118,0,59,120,0,18,109,0,16,\r
-10,51,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,51,0,57,59,121,0,48,46,18,118,0,59,122,0,\r
-18,109,0,16,10,51,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,119,0,48,46,20,0,\r
-8,18,117,0,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,15,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,\r
-0,0,1,0,9,2,27,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,110,\r
-101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,\r
-0,18,99,0,0,0,8,18,99,0,0,0,1,0,5,2,26,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,\r
-0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,\r
-105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,97,\r
-100,100,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,\r
-99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,27,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,\r
-1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,\r
-0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,\r
-95,110,101,103,97,116,101,0,18,121,0,0,18,121,0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,120,0,\r
-0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,\r
-8,18,99,0,0,0,1,0,5,2,21,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,\r
-1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,\r
-95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,109,117,108,116,\r
-105,112,108,121,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,\r
-116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,22,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,\r
-120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,\r
-0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,\r
-111,97,116,95,100,105,118,105,100,101,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,\r
-116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,\r
-10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,\r
-0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,46,20,0,8,18,116,0,0,0,1,0,10,2,27,1,1,0,\r
-10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,\r
-0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,0,8,18,116,0,0,0,\r
-1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,\r
-0,8,18,116,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,49,20,0,8,18,116,0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,\r
-0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,118,0,\r
-59,121,0,18,117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,46,20,0,\r
-8,18,116,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,8,18,116,0,0,0,\r
-1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,\r
-0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,48,20,0,8,18,116,0,0,0,1,0,11,2,22,1,1,0,\r
-11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,\r
-0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,\r
-122,0,18,118,0,59,122,0,18,117,0,59,122,0,49,20,0,8,18,116,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,\r
-0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,\r
-20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,\r
-59,122,0,18,117,0,59,122,0,46,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,46,20,0,\r
-8,18,116,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,9,18,116,0,59,\r
-119,0,18,118,0,59,119,0,18,117,0,59,119,0,47,20,0,8,18,116,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,\r
-0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,48,\r
-20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,0,18,118,0,\r
-59,122,0,18,117,0,59,122,0,48,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,48,20,0,\r
-8,18,116,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,\r
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,49,20,0,9,18,116,0,59,\r
-119,0,18,118,0,59,119,0,18,117,0,59,119,0,49,20,0,8,18,116,0,0,0,1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,\r
-6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,\r
-9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,46,20,0,8,18,116,0,0,0,1,0,6,2,27,1,1,0,6,\r
-118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,\r
-120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,0,8,18,116,0,0,0,1,0,6,\r
-2,21,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,\r
-18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,0,8,18,116,\r
-0,0,0,1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,\r
-118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,\r
-49,20,0,8,18,116,0,0,0,1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,\r
-0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,\r
-117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,46,20,0,8,18,116,0,\r
-0,0,1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,0,59,120,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,\r
-0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,8,18,116,0,0,0,1,0,7,2,21,1,1,0,\r
-7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,\r
-59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,\r
-0,18,118,0,59,122,0,18,117,0,59,122,0,48,20,0,8,18,116,0,0,0,1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,7,\r
-117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,\r
-18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,\r
-0,18,117,0,59,122,0,49,20,0,8,18,116,0,0,0,1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,\r
-1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,\r
-118,0,59,121,0,18,117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,\r
-46,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,46,20,0,8,18,116,0,0,0,1,0,8,2,27,\r
-1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,\r
-117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,0,9,18,116,0,\r
-59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,\r
-0,59,119,0,47,20,0,8,18,116,0,0,0,1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,116,0,0,\r
-0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,\r
-121,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,48,20,0,9,\r
-18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,48,20,0,8,18,116,0,0,0,1,0,8,2,22,1,1,0,8,\r
-118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,\r
-120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,122,0,\r
-18,118,0,59,122,0,18,117,0,59,122,0,49,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,\r
-0,49,20,0,8,18,116,0,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,\r
-18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,111,0,16,10,49,0,57,\r
-18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,8,18,111,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,\r
-1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,\r
-16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,\r
-0,8,18,111,0,0,0,1,0,13,2,22,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,\r
-16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,111,0,16,10,49,0,57,18,109,0,\r
-16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,8,18,111,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,14,\r
-110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,\r
-57,46,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,9,18,111,\r
-0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,20,0,8,18,111,0,0,0,1,0,14,2,27,1,\r
-1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,\r
-0,57,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,\r
-49,0,57,47,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,0,8,\r
-18,111,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,\r
-8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,\r
-10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,\r
-16,10,50,0,57,49,20,0,8,18,111,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,\r
-111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,111,0,\r
-16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,9,18,111,0,16,10,50,0,57,18,\r
-109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,\r
-18,110,0,16,10,51,0,57,46,20,0,8,18,111,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,3,\r
-2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,20,0,9,\r
-18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,0,9,18,111,0,16,10,50,0,\r
-57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,\r
-51,0,57,18,110,0,16,10,51,0,57,47,20,0,8,18,111,0,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,15,110,0,\r
-0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,\r
-20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,\r
-10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,20,0,9,18,111,0,16,10,51,0,57,18,109,0,\r
-16,10,51,0,57,18,110,0,16,10,51,0,57,49,20,0,8,18,111,0,0,0,1,0,10,2,26,1,1,0,9,97,0,0,1,1,0,10,\r
-117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,46,20,0,9,18,116,0,\r
-59,121,0,18,97,0,18,117,0,59,121,0,46,20,0,8,18,116,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,9,98,\r
-0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,46,20,0,9,18,116,0,59,\r
-121,0,18,118,0,59,121,0,18,98,0,46,20,0,8,18,116,0,0,0,1,0,10,2,27,1,1,0,9,97,0,0,1,1,0,10,117,0,0,\r
-0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,\r
-18,97,0,18,117,0,59,121,0,47,20,0,8,18,116,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,\r
-2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,47,20,0,9,18,116,0,59,121,0,18,\r
-118,0,59,121,0,18,98,0,47,20,0,8,18,116,0,0,0,1,0,10,2,21,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,3,2,\r
-0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,97,0,\r
-18,117,0,59,121,0,48,20,0,8,18,116,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,10,\r
-1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,\r
-121,0,18,98,0,48,20,0,8,18,116,0,0,0,1,0,10,2,22,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,\r
-116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,97,0,18,117,\r
-0,59,121,0,49,20,0,8,18,116,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,10,1,116,0,\r
-0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,\r
-98,0,49,20,0,8,18,116,0,0,0,1,0,11,2,26,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,\r
-18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,121,0,\r
-46,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,46,20,0,8,18,116,0,0,0,1,0,11,2,26,1,1,0,11,\r
-118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,46,\r
-20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,\r
-18,98,0,46,20,0,8,18,116,0,0,0,1,0,11,2,27,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,\r
-0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,\r
-121,0,47,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,47,20,0,8,18,116,0,0,0,1,0,11,2,27,1,1,\r
-0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,\r
-47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,\r
-0,18,98,0,47,20,0,8,18,116,0,0,0,1,0,11,2,21,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,\r
-0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,\r
-121,0,48,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,48,20,0,8,18,116,0,0,0,1,0,11,2,21,1,1,\r
-0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,\r
-48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,48,20,0,9,18,116,0,59,122,0,18,118,0,59,122,\r
-0,18,98,0,48,20,0,8,18,116,0,0,0,1,0,11,2,22,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,\r
-0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,\r
-121,0,49,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,49,20,0,8,18,116,0,0,0,1,0,11,2,22,1,1,\r
-0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,\r
-49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,\r
-0,18,98,0,49,20,0,8,18,116,0,0,0,1,0,12,2,26,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,116,0,\r
-0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,\r
-121,0,46,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,46,20,0,9,18,116,0,59,119,0,18,97,0,18,\r
-117,0,59,119,0,46,20,0,8,18,116,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,12,1,\r
-116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,46,20,0,9,18,116,0,59,121,0,18,118,0,59,\r
-121,0,18,98,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,46,20,0,9,18,116,0,59,119,0,18,\r
-118,0,59,119,0,18,98,0,46,20,0,8,18,116,0,0,0,1,0,12,2,27,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,3,2,\r
-0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,97,0,\r
-18,117,0,59,121,0,47,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,47,20,0,9,18,116,0,59,119,\r
-0,18,97,0,18,117,0,59,119,0,47,20,0,8,18,116,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,\r
-3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,47,20,0,9,18,116,0,59,121,0,18,\r
-118,0,59,121,0,18,98,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,47,20,0,9,18,116,0,59,\r
-119,0,18,118,0,59,119,0,18,98,0,47,20,0,8,18,116,0,0,0,1,0,12,2,21,1,1,0,9,97,0,0,1,1,0,12,117,0,0,\r
-0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,\r
-18,97,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,48,20,0,9,18,116,0,\r
-59,119,0,18,97,0,18,117,0,59,119,0,48,20,0,8,18,116,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,9,98,\r
-0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,48,20,0,9,18,116,0,59,\r
-121,0,18,118,0,59,121,0,18,98,0,48,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,48,20,0,9,18,\r
-116,0,59,119,0,18,118,0,59,119,0,18,98,0,48,20,0,8,18,116,0,0,0,1,0,12,2,22,1,1,0,9,97,0,0,1,1,0,\r
-12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,49,20,0,9,18,116,\r
-0,59,121,0,18,97,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,49,20,0,\r
-9,18,116,0,59,119,0,18,97,0,18,117,0,59,119,0,49,20,0,8,18,116,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,\r
-1,1,0,9,98,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,49,20,0,9,18,\r
-116,0,59,121,0,18,118,0,59,121,0,18,98,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,49,\r
-20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,98,0,49,20,0,8,18,116,0,0,0,1,0,13,2,26,1,1,0,9,97,0,\r
-0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,\r
-46,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,8,18,111,0,0,0,1,0,13,2,26,\r
-1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,\r
-0,57,18,98,0,46,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,8,18,111,0,0,\r
-0,1,0,13,2,27,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,\r
-97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,\r
-8,18,111,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,\r
-8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,\r
-98,0,47,20,0,8,18,111,0,0,0,1,0,13,2,21,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,\r
-18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,\r
-110,0,16,10,49,0,57,48,20,0,8,18,111,0,0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,\r
-13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,111,0,16,10,49,0,\r
-57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,8,18,111,0,0,0,1,0,13,2,22,1,1,0,9,97,0,0,1,1,0,13,110,0,\r
-0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,111,\r
-0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,8,18,111,0,0,0,1,0,13,2,22,1,1,0,13,109,0,0,\r
-1,1,0,9,98,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,\r
-20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,49,20,0,8,18,111,0,0,0,1,0,14,2,26,1,\r
-1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,\r
-8,48,0,57,46,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,9,18,111,0,16,10,\r
-50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,8,18,111,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,9,\r
-98,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,9,18,\r
-111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,\r
-50,0,57,18,98,0,46,20,0,8,18,111,0,0,0,1,0,14,2,27,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,\r
-111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,\r
-18,97,0,18,110,0,16,10,49,0,57,47,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,\r
-20,0,8,18,111,0,0,0,1,0,14,2,27,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,\r
-0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,\r
-57,18,98,0,47,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,47,20,0,8,18,111,0,0,0,\r
-1,0,14,2,21,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,\r
-0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,9,\r
-18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,48,20,0,8,18,111,0,0,0,1,0,14,2,21,1,1,0,14,\r
-109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,\r
-98,0,48,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,9,18,111,0,16,10,50,0,\r
-57,18,109,0,16,10,50,0,57,18,98,0,48,20,0,8,18,111,0,0,0,1,0,14,2,22,1,1,0,9,97,0,0,1,1,0,14,110,0,\r
-0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,111,\r
-0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,\r
-16,10,50,0,57,49,20,0,8,18,111,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,14,1,\r
-111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,111,0,16,10,49,0,57,\r
-18,109,0,16,10,49,0,57,18,98,0,49,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,49,\r
-20,0,8,18,111,0,0,0,1,0,15,2,26,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,\r
-0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,46,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,\r
-10,49,0,57,46,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,9,18,111,0,16,\r
-10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,46,20,0,8,18,111,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,\r
-0,9,98,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,\r
-9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,9,18,111,0,16,10,50,0,57,18,109,0,\r
-16,10,50,0,57,18,98,0,46,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,46,20,0,8,18,\r
-111,0,0,0,1,0,15,2,27,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,\r
-0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,\r
-47,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,20,0,9,18,111,0,16,10,51,0,57,\r
-18,97,0,18,110,0,16,10,51,0,57,47,20,0,8,18,111,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,9,98,0,0,\r
-0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,111,0,\r
-16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,47,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,\r
-57,18,98,0,47,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,47,20,0,8,18,111,0,0,0,\r
-1,0,15,2,21,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,\r
-0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,9,\r
-18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,48,20,0,9,18,111,0,16,10,51,0,57,18,97,0,18,\r
-110,0,16,10,51,0,57,48,20,0,8,18,111,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,\r
-15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,111,0,16,10,49,0,\r
-57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,\r
-48,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,48,20,0,8,18,111,0,0,0,1,0,15,2,22,\r
-1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,\r
-16,8,48,0,57,49,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,\r
-10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,49,20,0,9,18,111,0,16,10,51,0,57,18,97,0,18,110,0,16,10,\r
-51,0,57,49,20,0,8,18,111,0,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,15,1,111,0,0,\r
-0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,111,0,16,10,49,0,57,18,109,0,\r
-16,10,49,0,57,18,98,0,49,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,49,20,0,9,18,\r
-111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,49,20,0,8,18,111,0,0,0,1,0,6,2,26,1,1,0,5,97,0,\r
-0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,46,0,0,1,0,6,2,26,1,1,0,6,118,\r
-0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,46,0,0,1,0,6,2,27,1,1,0,5,97,\r
-0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,47,0,0,1,0,6,2,27,1,1,0,6,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,47,0,0,1,0,6,2,21,1,1,0,5,\r
-97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,48,0,0,1,0,6,2,21,1,1,0,6,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,48,0,0,1,0,6,2,22,1,1,0,5,\r
-97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,49,0,0,1,0,6,2,22,1,1,0,6,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,49,0,0,1,0,7,2,26,1,1,0,5,\r
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,46,0,0,1,0,7,2,26,1,1,0,7,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,46,0,0,1,0,7,2,27,1,1,0,5,\r
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,47,0,0,1,0,7,2,27,1,1,0,7,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,47,0,0,1,0,7,2,21,1,1,0,5,\r
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,48,0,0,1,0,7,2,21,1,1,0,7,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,48,0,0,1,0,7,2,22,1,1,0,5,\r
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,49,0,0,1,0,7,2,22,1,1,0,7,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,49,0,0,1,0,8,2,26,1,1,0,5,\r
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,46,0,0,1,0,8,2,26,1,1,0,8,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,46,0,0,1,0,8,2,27,1,1,0,5,\r
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,47,0,0,1,0,8,2,27,1,1,0,8,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,47,0,0,1,0,8,2,21,1,1,0,5,\r
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,48,0,0,1,0,8,2,21,1,1,0,8,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,48,0,0,1,0,8,2,22,1,1,0,5,\r
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,49,0,0,1,0,8,2,22,1,1,0,8,\r
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,49,0,0,1,0,10,2,27,1,1,0,\r
-10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,\r
-121,0,18,118,0,59,121,0,54,20,0,8,18,117,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,\r
-0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,54,20,0,9,18,\r
-117,0,59,122,0,18,118,0,59,122,0,54,20,0,8,18,117,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,0,1,3,2,0,12,\r
-1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,54,\r
-20,0,9,18,117,0,59,122,0,18,118,0,59,122,0,54,20,0,9,18,117,0,59,119,0,18,118,0,59,119,0,54,20,0,8,\r
-18,117,0,0,0,1,0,6,2,27,1,1,0,6,118,0,0,0,1,3,2,0,6,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,\r
-120,0,54,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,54,20,0,8,18,117,0,0,0,1,0,7,2,27,1,1,0,7,118,\r
-0,0,0,1,3,2,0,7,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,121,0,18,\r
-118,0,59,121,0,54,20,0,9,18,117,0,59,122,0,18,118,0,59,122,0,54,20,0,8,18,117,0,0,0,1,0,8,2,27,1,1,\r
-0,8,118,0,0,0,1,3,2,0,8,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,\r
-121,0,18,118,0,59,121,0,54,20,0,9,18,117,0,59,122,0,18,118,0,59,122,0,54,20,0,9,18,117,0,59,119,0,\r
-18,118,0,59,119,0,54,20,0,8,18,117,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,0,1,3,2,0,13,1,110,0,0,0,9,\r
-18,110,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,110,0,16,10,49,0,57,18,109,0,16,10,49,0,\r
-57,54,20,0,8,18,110,0,0,0,1,0,14,2,27,1,1,0,14,109,0,0,0,1,3,2,0,14,1,110,0,0,0,9,18,110,0,16,8,48,\r
-0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,110,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,0,9,18,\r
-110,0,16,10,50,0,57,18,109,0,16,10,50,0,57,54,20,0,8,18,110,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,0,1,\r
-3,2,0,15,1,110,0,0,0,9,18,110,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,110,0,16,10,49,0,\r
-57,18,109,0,16,10,49,0,57,54,20,0,9,18,110,0,16,10,50,0,57,18,109,0,16,10,50,0,57,54,20,0,9,18,110,\r
-0,16,10,51,0,57,18,109,0,16,10,51,0,57,54,20,0,8,18,110,0,0,0,1,0,0,2,25,1,0,2,9,97,0,0,0,1,9,18,\r
-97,0,17,49,0,48,0,0,22,0,0,1,0,0,2,25,1,0,2,5,97,0,0,0,1,9,18,97,0,16,10,49,0,22,0,0,1,0,0,2,25,1,\r
-0,2,10,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,0,1,0,0,2,25,1,0,2,11,118,0,0,\r
+8,58,118,101,99,50,0,18,102,0,0,18,102,0,0,0,0,0,1,0,10,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,\r
+4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,50,0,18,\r
+120,0,0,0,0,0,1,0,10,1,1,1,0,1,98,0,0,0,1,8,58,118,101,99,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,\r
+0,31,0,0,0,0,1,0,11,1,1,1,0,9,102,0,0,0,1,8,58,118,101,99,51,0,18,102,0,0,18,102,0,0,18,102,0,0,0,\r
+0,0,1,0,11,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,\r
+116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,51,0,18,120,0,0,0,0,0,1,0,11,1,1,1,0,1,98,0,0,0,1,8,\r
+58,118,101,99,51,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,12,1,1,1,0,9,102,0,0,0,1,8,\r
+58,118,101,99,52,0,18,102,0,0,18,102,0,0,18,102,0,0,18,102,0,0,0,0,0,1,0,12,1,1,1,0,5,105,0,0,0,1,\r
+3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,\r
+118,101,99,52,0,18,120,0,0,0,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,8,58,118,101,99,52,0,18,98,0,17,49,0,\r
+48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,8,58,105,118,101,99,50,0,18,105,0,0,\r
+18,105,0,0,0,0,0,1,0,6,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,102,0,0,\r
+0,0,0,0,0,1,0,6,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,\r
+1,0,7,1,1,1,0,5,105,0,0,0,1,8,58,105,118,101,99,51,0,18,105,0,0,18,105,0,0,18,105,0,0,0,0,0,1,0,7,\r
+1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,51,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,7,1,1,1,0,\r
+1,98,0,0,0,1,8,58,105,118,101,99,51,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,8,1,1,1,0,5,105,0,0,\r
+0,1,8,58,105,118,101,99,52,0,18,105,0,0,18,105,0,0,18,105,0,0,18,105,0,0,0,0,0,1,0,8,1,1,1,0,9,102,\r
+0,0,0,1,8,58,105,118,101,99,52,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,\r
+8,58,105,118,101,99,52,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,2,1,1,1,0,1,98,0,0,0,1,8,58,98,\r
+118,101,99,50,0,18,98,0,0,18,98,0,0,0,0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,50,0,58,\r
+98,111,111,108,0,18,102,0,0,0,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,50,0,58,98,\r
+111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,8,58,98,118,101,99,51,0,18,98,0,0,18,\r
+98,0,0,18,98,0,0,0,0,0,1,0,3,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,\r
+102,0,0,0,0,0,0,0,1,0,3,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,105,0,\r
+0,0,0,0,0,0,1,0,4,1,1,1,0,1,98,0,0,0,1,8,58,98,118,101,99,52,0,18,98,0,0,18,98,0,0,18,98,0,0,18,98,\r
+0,0,0,0,0,1,0,4,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,102,0,0,0,0,0,\r
+0,0,1,0,4,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,\r
+0,13,1,1,1,0,9,102,0,0,0,1,8,58,109,97,116,50,0,18,102,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,\r
+102,0,0,0,0,0,1,0,13,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,\r
+111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,50,0,18,120,0,0,0,0,0,1,0,13,1,1,1,0,1,98,0,0,\r
+0,1,8,58,109,97,116,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,14,1,1,1,0,9,102,0,0,\r
+0,1,8,58,109,97,116,51,0,18,102,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,\r
+17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,0,0,0,1,0,14,1,1,1,0,5,105,0,0,0,1,3,\r
+2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,\r
+109,97,116,51,0,18,120,0,0,0,0,0,1,0,14,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,51,0,18,98,0,17,49,0,\r
+48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,15,1,1,1,0,9,102,0,0,0,1,8,58,109,97,116,52,0,18,102,0,0,17,\r
+48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,17,48,0,48,0,0,0,17,48,\r
+0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,\r
+48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,0,0,0,1,0,15,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,\r
+110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,52,0,18,120,0,0,\r
+0,0,0,1,0,15,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,52,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,\r
+0,0,0,1,0,0,2,1,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,97,100,100,0,18,97,0,0,\r
+18,97,0,0,18,98,0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,0,1,3,2,0,9,1,98,0,0,0,4,102,108,111,97,116,95,\r
+110,101,103,97,116,101,0,18,98,0,0,18,97,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,9,97,0,0,1,1,0,9,98,0,\r
+0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,\r
+102,108,111,97,116,95,97,100,100,0,18,97,0,0,18,97,0,0,18,99,0,0,0,0,1,0,0,2,3,1,0,2,9,97,0,0,1,1,\r
+0,9,98,0,0,0,1,4,102,108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,97,0,0,18,97,0,0,18,98,\r
+0,0,0,0,1,0,0,2,4,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,100,105,118,105,100,\r
+101,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,26,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,\r
+0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,0,2,1,\r
+1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,97,0,0,0,\r
+58,102,108,111,97,116,0,18,98,0,0,0,46,0,0,20,0,0,1,0,5,2,27,1,1,0,5,97,0,0,0,1,3,2,0,9,1,120,0,0,\r
+0,3,2,0,5,1,98,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,102,\r
+108,111,97,116,95,110,101,103,97,116,101,0,18,120,0,0,18,120,0,0,0,4,102,108,111,97,116,95,116,111,\r
+95,105,110,116,0,18,98,0,0,18,120,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,\r
+9,18,97,0,18,98,0,54,21,0,0,1,0,9,2,21,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,\r
+108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,\r
+1,0,0,2,3,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,\r
+97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,48,0,0,20,0,0,1,0,9,2,22,1,1,0,9,97,0,0,1,1,0,9,98,0,\r
+0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,99,0,0,18,97,0,0,18,\r
+98,0,0,0,8,18,99,0,0,0,1,0,0,2,4,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,\r
+102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,49,0,0,20,0,0,1,0,0,2,1,1,0,2,\r
+10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,\r
+117,0,59,121,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,\r
+59,120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,10,117,\r
+0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,\r
+0,0,2,4,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,\r
+0,59,121,0,18,117,0,59,121,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,\r
+120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,\r
+0,59,122,0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,\r
+120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,\r
+1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,\r
+118,0,59,121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,\r
+11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,\r
+117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,\r
+12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,\r
+0,9,18,118,0,59,122,0,18,117,0,59,122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,\r
+2,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,\r
+121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,\r
+0,59,119,0,22,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,\r
+120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,\r
+18,118,0,59,119,0,18,117,0,59,119,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,\r
+118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,\r
+0,18,117,0,59,122,0,24,0,9,18,118,0,59,119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,\r
+1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,\r
+21,0,0,1,0,0,2,2,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,\r
+18,118,0,59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,\r
+0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,0,0,2,4,1,0,2,6,\r
+118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,\r
+0,59,121,0,24,0,0,1,0,0,2,1,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,\r
+120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,122,0,21,0,0,\r
+1,0,0,2,2,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,\r
+0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,1,0,0,2,3,1,0,2,7,\r
+118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,\r
+0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,7,118,0,0,1,1,0,7,117,\r
+0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,\r
+118,0,59,122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,\r
+59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,\r
+117,0,59,122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,8,\r
+117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,\r
+9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,0,59,119,0,22,0,0,1,0,0,2,3,\r
+1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,\r
+18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,18,118,0,59,119,0,18,117,0,59,\r
+119,0,23,0,0,1,0,0,2,4,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,\r
+24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,9,18,\r
+118,0,59,119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,\r
+16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,0,1,0,\r
+0,2,2,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,\r
+18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,0,1,0,10,2,21,1,1,0,13,109,0,0,1,1,0,10,118,0,0,\r
+0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,\r
+109,0,16,10,49,0,57,59,120,0,48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,\r
+59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,0,0,0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,13,110,0,\r
+0,0,1,8,58,109,97,116,50,0,18,109,0,18,110,0,16,8,48,0,57,48,0,18,109,0,18,110,0,16,10,49,0,57,48,\r
+0,0,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,\r
+0,2,4,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,\r
+18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,\r
+1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,\r
+57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,14,\r
+110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,110,0,\r
+16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,0,1,0,11,2,21,1,1,0,14,109,\r
+0,0,1,1,0,11,118,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,\r
+18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,\r
+59,120,0,48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,\r
+10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,121,0,48,46,0,18,118,0,59,\r
+120,0,18,109,0,16,8,48,0,57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,\r
+118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,0,0,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,14,\r
+110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,18,110,0,16,8,48,0,57,48,0,18,109,0,18,110,0,16,10,49,0,\r
+57,48,0,18,109,0,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,0,2,3,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,\r
+9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,\r
+16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,\r
+109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,\r
+9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,\r
+21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,\r
+51,0,57,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,\r
+8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,\r
+110,0,16,10,50,0,57,22,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,22,0,0,1,0,12,2,21,1,1,0,\r
+15,109,0,0,1,1,0,12,118,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,\r
+120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,59,122,0,18,109,0,16,10,\r
+50,0,57,59,120,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,120,0,48,46,0,18,118,0,59,120,0,\r
+18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,\r
+59,122,0,18,109,0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,121,0,\r
+48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,\r
+57,59,122,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,\r
+0,16,10,51,0,57,59,122,0,48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,119,0,48,18,118,0,59,\r
+121,0,18,109,0,16,10,49,0,57,59,119,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,119,0,48,\r
+46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,119,0,48,46,0,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,\r
+1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,18,110,0,16,8,48,0,57,48,0,18,109,0,18,110,0,16,\r
+10,49,0,57,48,0,18,109,0,18,110,0,16,10,50,0,57,48,0,18,109,0,18,110,0,16,10,51,0,57,48,0,0,0,0,1,\r
+0,0,2,3,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,\r
+2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,\r
+10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,0,9,18,\r
+109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,24,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,\r
+18,118,0,59,120,0,18,97,0,21,0,9,18,118,0,59,121,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,\r
+9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,0,1,0,0,2,3,1,0,2,\r
+10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,0,0,\r
+1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,\r
+18,97,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,0,9,18,\r
+118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,9,\r
+97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,9,18,118,0,59,122,0,\r
+18,97,0,22,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,\r
+118,0,59,121,0,18,97,0,23,0,9,18,118,0,59,122,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,1,0,9,\r
+97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,122,0,\r
+18,97,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,0,9,18,\r
+118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,9,18,118,0,59,119,0,18,97,0,21,0,0,1,\r
+0,0,2,2,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,\r
+18,97,0,22,0,9,18,118,0,59,122,0,18,97,0,22,0,9,18,118,0,59,119,0,18,97,0,22,0,0,1,0,0,2,3,1,0,2,\r
+12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,0,9,\r
+18,118,0,59,122,0,18,97,0,23,0,9,18,118,0,59,119,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,\r
+9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,122,0,\r
+18,97,0,24,0,9,18,118,0,59,119,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,\r
+109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,13,109,0,0,\r
+1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,0,1,\r
+0,0,2,3,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,\r
+49,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,\r
+0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,\r
+109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,\r
+97,0,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,\r
+18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,14,109,\r
+0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,\r
+9,18,109,0,16,10,50,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,\r
+16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,\r
+24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,\r
+0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,97,0,21,0,9,18,109,0,16,10,51,0,57,18,97,\r
+0,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,\r
+109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,9,18,109,0,16,10,51,0,57,18,\r
+97,0,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,\r
+18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,9,18,109,0,16,10,51,0,57,\r
+18,97,0,23,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,24,0,\r
+9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,24,0,9,18,109,0,16,10,51,0,\r
+57,18,97,0,24,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,13,109,0,0,0,1,8,58,118,101,99,50,0,18,118,0,\r
+59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,\r
+0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,\r
+121,0,48,46,0,0,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,13,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,\r
+48,20,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,14,109,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,\r
+18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,18,118,0,\r
+59,122,0,18,109,0,16,8,48,0,57,59,122,0,48,46,0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,120,0,\r
+48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,49,0,\r
+57,59,122,0,48,46,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,48,18,118,0,59,121,0,18,109,\r
+0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,0,0,0,0,1,0,\r
+0,2,3,1,0,2,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,12,2,21,1,1,\r
+0,12,118,0,0,1,1,0,15,109,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,\r
+120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,8,48,\r
+0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,8,48,0,57,59,119,0,48,46,0,18,118,0,59,120,0,18,\r
+109,0,16,10,49,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,\r
+59,122,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,49,0,57,59,119,0,\r
+48,46,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,50,0,\r
+57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,\r
+0,16,10,50,0,57,59,119,0,48,46,0,18,118,0,59,120,0,18,109,0,16,10,51,0,57,59,120,0,48,18,118,0,59,\r
+121,0,18,109,0,16,10,51,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,51,0,57,59,122,0,48,\r
+46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,119,0,48,46,0,0,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,\r
+0,15,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,9,2,27,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,\r
+1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,102,\r
+108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,0,18,99,0,0,0,8,18,99,0,0,0,1,0,5,2,26,1,1,0,5,97,\r
+0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,\r
+95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,\r
+121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,\r
+108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,27,1,1,0,5,\r
+97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,\r
+111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,\r
+0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,121,0,0,18,121,0,0,0,\r
+4,102,108,111,97,116,95,97,100,100,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,\r
+116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,21,1,1,0,5,97,0,0,1,1,0,5,98,\r
+0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,\r
+97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,\r
+0,0,0,4,102,108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,120,0,0,18,121,0,0,0,\r
+4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,22,1,\r
+1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,\r
+95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,\r
+97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,120,0,0,18,\r
+120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,\r
+99,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,\r
+18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,0,59,121,0,46,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,\r
+1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,\r
+0,18,117,0,59,121,0,47,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,\r
+50,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,0,0,0,1,0,\r
+10,2,22,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,49,0,18,118,0,59,121,0,18,117,0,59,121,0,49,0,0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,11,\r
+117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,\r
+0,59,121,0,46,0,18,118,0,59,122,0,18,117,0,59,122,0,46,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,\r
+11,117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,47,0,18,118,0,59,122,0,18,117,0,59,122,0,47,0,0,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,\r
+1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,\r
+18,117,0,59,121,0,48,0,18,118,0,59,122,0,18,117,0,59,122,0,48,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,\r
+1,1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,\r
+0,18,117,0,59,121,0,49,0,18,118,0,59,122,0,18,117,0,59,122,0,49,0,0,0,0,1,0,12,2,26,1,1,0,12,118,0,\r
+0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,\r
+121,0,18,117,0,59,121,0,46,0,18,118,0,59,122,0,18,117,0,59,122,0,46,0,18,118,0,59,119,0,18,117,0,\r
+59,119,0,46,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,\r
+0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,18,118,0,59,122,0,18,\r
+117,0,59,122,0,47,0,18,118,0,59,119,0,18,117,0,59,119,0,47,0,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,\r
+1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,\r
+18,117,0,59,121,0,48,0,18,118,0,59,122,0,18,117,0,59,122,0,48,0,18,118,0,59,119,0,18,117,0,59,119,\r
+0,48,0,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,\r
+120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,0,18,117,0,59,121,0,49,0,18,118,0,59,122,0,18,117,0,\r
+59,122,0,49,0,18,118,0,59,119,0,18,117,0,59,119,0,49,0,0,0,0,1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,6,\r
+117,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,46,0,0,0,0,1,0,6,2,27,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,\r
+18,118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,0,0,0,1,0,6,2,21,\r
+1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,\r
+48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,0,0,0,1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,\r
+8,58,105,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,0,18,117,0,59,\r
+121,0,49,0,0,0,0,1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,\r
+59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,0,59,121,0,46,0,18,118,0,59,122,0,18,117,\r
+0,59,122,0,46,0,0,0,0,1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,\r
+118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,18,118,0,59,122,0,\r
+18,117,0,59,122,0,47,0,0,0,0,1,0,7,2,21,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,\r
+0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,18,118,0,59,\r
+122,0,18,117,0,59,122,0,48,0,0,0,0,1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,\r
+99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,0,18,117,0,59,121,0,49,0,18,118,0,\r
+59,122,0,18,117,0,59,122,0,49,0,0,0,0,1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,\r
+101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,0,59,121,0,46,0,18,\r
+118,0,59,122,0,18,117,0,59,122,0,46,0,18,118,0,59,119,0,18,117,0,59,119,0,46,0,0,0,0,1,0,8,2,27,1,\r
+1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,47,\r
+0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,18,118,0,59,122,0,18,117,0,59,122,0,47,0,18,118,0,59,\r
+119,0,18,117,0,59,119,0,47,0,0,0,0,1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,\r
+99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,18,118,0,\r
+59,122,0,18,117,0,59,122,0,48,0,18,118,0,59,119,0,18,117,0,59,119,0,48,0,0,0,0,1,0,8,2,22,1,1,0,8,\r
+118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,\r
+118,0,59,121,0,18,117,0,59,121,0,49,0,18,118,0,59,122,0,18,117,0,59,122,0,49,0,18,118,0,59,119,0,\r
+18,117,0,59,119,0,49,0,0,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,50,\r
+0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,\r
+46,0,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,\r
+0,57,18,110,0,16,8,48,0,57,47,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,0,0,0,0,1,0,13,2,\r
+22,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,110,0,16,8,\r
+48,0,57,49,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,0,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,\r
+1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,0,18,109,\r
+0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,0,0,0,\r
+0,1,0,14,2,27,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,\r
+110,0,16,8,48,0,57,47,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,0,18,109,0,16,10,50,0,57,\r
+18,110,0,16,10,50,0,57,47,0,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,\r
+116,51,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,\r
+0,57,49,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,0,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,\r
+1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,0,18,109,0,\r
+16,10,49,0,57,18,110,0,16,10,49,0,57,46,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,0,18,\r
+109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,46,0,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,15,110,0,\r
+0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,0,18,109,0,16,10,49,0,57,\r
+18,110,0,16,10,49,0,57,47,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,0,18,109,0,16,10,51,0,\r
+57,18,110,0,16,10,51,0,57,47,0,0,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,8,58,109,97,\r
+116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,\r
+0,57,49,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,0,18,109,0,16,10,51,0,57,18,110,0,16,10,\r
+51,0,57,49,0,0,0,0,1,0,10,2,26,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,97,0,18,\r
+117,0,59,120,0,46,0,18,97,0,18,117,0,59,121,0,46,0,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,9,98,0,\r
+0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,98,0,46,0,18,118,0,59,121,0,18,98,0,46,0,0,0,0,1,0,\r
+10,2,27,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,97,0,18,117,0,59,120,0,47,0,18,\r
+97,0,18,117,0,59,121,0,47,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,\r
+50,0,18,118,0,59,120,0,18,98,0,47,0,18,118,0,59,121,0,18,98,0,47,0,0,0,0,1,0,10,2,21,1,1,0,9,97,0,\r
+0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,97,0,18,117,0,59,120,0,48,0,18,97,0,18,117,0,59,121,\r
+0,48,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,\r
+0,18,98,0,48,0,18,118,0,59,121,0,18,98,0,48,0,0,0,0,1,0,10,2,22,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,\r
+1,8,58,118,101,99,50,0,18,97,0,18,117,0,59,120,0,49,0,18,97,0,18,117,0,59,121,0,49,0,0,0,0,1,0,10,\r
+2,22,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,98,0,49,0,18,\r
+118,0,59,121,0,18,98,0,49,0,0,0,0,1,0,11,2,26,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,8,58,118,101,99,\r
+51,0,18,97,0,18,117,0,59,120,0,46,0,18,97,0,18,117,0,59,121,0,46,0,18,97,0,18,117,0,59,122,0,46,0,\r
+0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,98,\r
+0,46,0,18,118,0,59,121,0,18,98,0,46,0,18,118,0,59,122,0,18,98,0,46,0,0,0,0,1,0,11,2,27,1,1,0,9,97,\r
+0,0,1,1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,97,0,18,117,0,59,120,0,47,0,18,97,0,18,117,0,59,\r
+121,0,47,0,18,97,0,18,117,0,59,122,0,47,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,\r
+58,118,101,99,51,0,18,118,0,59,120,0,18,98,0,47,0,18,118,0,59,121,0,18,98,0,47,0,18,118,0,59,122,0,\r
+18,98,0,47,0,0,0,0,1,0,11,2,21,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,97,0,18,\r
+117,0,59,120,0,48,0,18,97,0,18,117,0,59,121,0,48,0,18,97,0,18,117,0,59,122,0,48,0,0,0,0,1,0,11,2,\r
+21,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,98,0,48,0,18,118,\r
+0,59,121,0,18,98,0,48,0,18,118,0,59,122,0,18,98,0,48,0,0,0,0,1,0,11,2,22,1,1,0,9,97,0,0,1,1,0,11,\r
+117,0,0,0,1,8,58,118,101,99,51,0,18,97,0,18,117,0,59,120,0,49,0,18,97,0,18,117,0,59,121,0,49,0,18,\r
+97,0,18,117,0,59,122,0,49,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,\r
+51,0,18,118,0,59,120,0,18,98,0,49,0,18,118,0,59,121,0,18,98,0,49,0,18,118,0,59,122,0,18,98,0,49,0,\r
+0,0,0,1,0,12,2,26,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,97,0,18,117,0,59,120,\r
+0,46,0,18,97,0,18,117,0,59,121,0,46,0,18,97,0,18,117,0,59,122,0,46,0,18,97,0,18,117,0,59,119,0,46,\r
+0,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,\r
+98,0,46,0,18,118,0,59,121,0,18,98,0,46,0,18,118,0,59,122,0,18,98,0,46,0,18,118,0,59,119,0,18,98,0,\r
+46,0,0,0,0,1,0,12,2,27,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,97,0,18,117,0,\r
+59,120,0,47,0,18,97,0,18,117,0,59,121,0,47,0,18,97,0,18,117,0,59,122,0,47,0,18,97,0,18,117,0,59,\r
+119,0,47,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,\r
+120,0,18,98,0,47,0,18,118,0,59,121,0,18,98,0,47,0,18,118,0,59,122,0,18,98,0,47,0,18,118,0,59,119,0,\r
+18,98,0,47,0,0,0,0,1,0,12,2,21,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,97,0,18,\r
+117,0,59,120,0,48,0,18,97,0,18,117,0,59,121,0,48,0,18,97,0,18,117,0,59,122,0,48,0,18,97,0,18,117,0,\r
+59,119,0,48,0,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,18,118,0,\r
+59,120,0,18,98,0,48,0,18,118,0,59,121,0,18,98,0,48,0,18,118,0,59,122,0,18,98,0,48,0,18,118,0,59,\r
+119,0,18,98,0,48,0,0,0,0,1,0,12,2,22,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,\r
+97,0,18,117,0,59,120,0,49,0,18,97,0,18,117,0,59,121,0,49,0,18,97,0,18,117,0,59,122,0,49,0,18,97,0,\r
+18,117,0,59,119,0,49,0,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,\r
+18,118,0,59,120,0,18,98,0,49,0,18,118,0,59,121,0,18,98,0,49,0,18,118,0,59,122,0,18,98,0,49,0,18,\r
+118,0,59,119,0,18,98,0,49,0,0,0,0,1,0,13,2,26,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,\r
+50,0,18,97,0,18,110,0,16,8,48,0,57,46,0,18,97,0,18,110,0,16,10,49,0,57,46,0,0,0,0,1,0,13,2,26,1,1,\r
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,46,0,18,109,0,\r
+16,10,49,0,57,18,98,0,46,0,0,0,0,1,0,13,2,27,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,\r
+50,0,18,97,0,18,110,0,16,8,48,0,57,47,0,18,97,0,18,110,0,16,10,49,0,57,47,0,0,0,0,1,0,13,2,27,1,1,\r
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,47,0,18,109,0,\r
+16,10,49,0,57,18,98,0,47,0,0,0,0,1,0,13,2,21,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,\r
+50,0,18,97,0,18,110,0,16,8,48,0,57,48,0,18,97,0,18,110,0,16,10,49,0,57,48,0,0,0,0,1,0,13,2,21,1,1,\r
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,48,0,18,109,0,\r
+16,10,49,0,57,18,98,0,48,0,0,0,0,1,0,13,2,22,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,\r
+50,0,18,97,0,18,110,0,16,8,48,0,57,49,0,18,97,0,18,110,0,16,10,49,0,57,49,0,0,0,0,1,0,13,2,22,1,1,\r
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,49,0,18,109,0,\r
+16,10,49,0,57,18,98,0,49,0,0,0,0,1,0,14,2,26,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,\r
+51,0,18,97,0,18,110,0,16,8,48,0,57,46,0,18,97,0,18,110,0,16,10,49,0,57,46,0,18,97,0,18,110,0,16,10,\r
+50,0,57,46,0,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,51,0,18,109,0,\r
+16,8,48,0,57,18,98,0,46,0,18,109,0,16,10,49,0,57,18,98,0,46,0,18,109,0,16,10,50,0,57,18,98,0,46,0,\r
+0,0,0,1,0,14,2,27,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,97,0,18,110,0,16,8,\r
+48,0,57,47,0,18,97,0,18,110,0,16,10,49,0,57,47,0,18,97,0,18,110,0,16,10,50,0,57,47,0,0,0,0,1,0,14,\r
+2,27,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,98,0,47,0,\r
+18,109,0,16,10,49,0,57,18,98,0,47,0,18,109,0,16,10,50,0,57,18,98,0,47,0,0,0,0,1,0,14,2,21,1,1,0,9,\r
+97,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,97,0,18,110,0,16,8,48,0,57,48,0,18,97,0,18,110,\r
+0,16,10,49,0,57,48,0,18,97,0,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,\r
+9,98,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,98,0,48,0,18,109,0,16,10,49,0,57,18,98,\r
+0,48,0,18,109,0,16,10,50,0,57,18,98,0,48,0,0,0,0,1,0,14,2,22,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,8,\r
+58,109,97,116,51,0,18,97,0,18,110,0,16,8,48,0,57,49,0,18,97,0,18,110,0,16,10,49,0,57,49,0,18,97,0,\r
+18,110,0,16,10,50,0,57,49,0,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,\r
+51,0,18,109,0,16,8,48,0,57,18,98,0,49,0,18,109,0,16,10,49,0,57,18,98,0,49,0,18,109,0,16,10,50,0,57,\r
+18,98,0,49,0,0,0,0,1,0,15,2,26,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,97,0,18,\r
+110,0,16,8,48,0,57,46,0,18,97,0,18,110,0,16,10,49,0,57,46,0,18,97,0,18,110,0,16,10,50,0,57,46,0,18,\r
+97,0,18,110,0,16,10,51,0,57,46,0,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,\r
+116,52,0,18,109,0,16,8,48,0,57,18,98,0,46,0,18,109,0,16,10,49,0,57,18,98,0,46,0,18,109,0,16,10,50,\r
+0,57,18,98,0,46,0,18,109,0,16,10,51,0,57,18,98,0,46,0,0,0,0,1,0,15,2,27,1,1,0,9,97,0,0,1,1,0,15,\r
+110,0,0,0,1,8,58,109,97,116,52,0,18,97,0,18,110,0,16,8,48,0,57,47,0,18,97,0,18,110,0,16,10,49,0,57,\r
+47,0,18,97,0,18,110,0,16,10,50,0,57,47,0,18,97,0,18,110,0,16,10,51,0,57,47,0,0,0,0,1,0,15,2,27,1,1,\r
+0,15,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,98,0,47,0,18,109,0,\r
+16,10,49,0,57,18,98,0,47,0,18,109,0,16,10,50,0,57,18,98,0,47,0,18,109,0,16,10,51,0,57,18,98,0,47,0,\r
+0,0,0,1,0,15,2,21,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,97,0,18,110,0,16,8,\r
+48,0,57,48,0,18,97,0,18,110,0,16,10,49,0,57,48,0,18,97,0,18,110,0,16,10,50,0,57,48,0,18,97,0,18,\r
+110,0,16,10,51,0,57,48,0,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,52,\r
+0,18,109,0,16,8,48,0,57,18,98,0,48,0,18,109,0,16,10,49,0,57,18,98,0,48,0,18,109,0,16,10,50,0,57,18,\r
+98,0,48,0,18,109,0,16,10,51,0,57,18,98,0,48,0,0,0,0,1,0,15,2,22,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,\r
+1,8,58,109,97,116,52,0,18,97,0,18,110,0,16,8,48,0,57,49,0,18,97,0,18,110,0,16,10,49,0,57,49,0,18,\r
+97,0,18,110,0,16,10,50,0,57,49,0,18,97,0,18,110,0,16,10,51,0,57,49,0,0,0,0,1,0,15,2,22,1,1,0,15,\r
+109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,98,0,49,0,18,109,0,16,10,\r
+49,0,57,18,98,0,49,0,18,109,0,16,10,50,0,57,18,98,0,49,0,18,109,0,16,10,51,0,57,18,98,0,49,0,0,0,0,\r
+1,0,6,2,26,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,46,0,0,\r
+1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,46,0,0,\r
+1,0,6,2,27,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,47,0,0,\r
+1,0,6,2,27,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,47,0,0,\r
+1,0,6,2,21,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,48,0,0,\r
+1,0,6,2,21,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,48,0,0,\r
+1,0,6,2,22,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,49,0,0,\r
+1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,49,0,0,\r
+1,0,7,2,26,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,46,0,0,\r
+1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,46,0,0,\r
+1,0,7,2,27,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,47,0,0,\r
+1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,47,0,0,\r
+1,0,7,2,21,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,48,0,0,\r
+1,0,7,2,21,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,48,0,0,\r
+1,0,7,2,22,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,49,0,0,\r
+1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,49,0,0,\r
+1,0,8,2,26,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,46,0,0,\r
+1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,46,0,0,\r
+1,0,8,2,27,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,47,0,0,\r
+1,0,8,2,27,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,47,0,0,\r
+1,0,8,2,21,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,48,0,0,\r
+1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,48,0,0,\r
+1,0,8,2,22,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,49,0,0,\r
+1,0,8,2,22,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,49,0,0,\r
+1,0,10,2,27,1,1,0,10,118,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,54,0,18,118,0,59,121,0,54,\r
+0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,54,0,18,118,0,59,\r
+121,0,54,0,18,118,0,59,122,0,54,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,0,1,8,58,118,101,99,52,0,18,\r
+118,0,59,120,0,54,0,18,118,0,59,121,0,54,0,18,118,0,59,122,0,54,0,18,118,0,59,119,0,54,0,0,0,0,1,0,\r
+6,2,27,1,1,0,6,118,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,54,0,18,118,0,59,121,0,54,0,\r
+0,0,0,1,0,7,2,27,1,1,0,7,118,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,59,120,0,54,0,18,118,0,59,\r
+121,0,54,0,18,118,0,59,122,0,54,0,0,0,0,1,0,8,2,27,1,1,0,8,118,0,0,0,1,8,58,105,118,101,99,52,0,18,\r
+118,0,59,120,0,54,0,18,118,0,59,121,0,54,0,18,118,0,59,122,0,54,0,18,118,0,59,119,0,54,0,0,0,0,1,0,\r
+13,2,27,1,1,0,13,109,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,54,0,18,109,0,16,10,49,0,\r
+57,54,0,0,0,0,1,0,14,2,27,1,1,0,14,109,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,54,0,18,\r
+109,0,16,10,49,0,57,54,0,18,109,0,16,10,50,0,57,54,0,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,0,1,8,58,\r
+109,97,116,52,0,18,109,0,16,8,48,0,57,54,0,18,109,0,16,10,49,0,57,54,0,18,109,0,16,10,50,0,57,54,0,\r
+18,109,0,16,10,51,0,57,54,0,0,0,0,1,0,0,2,25,1,0,2,9,97,0,0,0,1,9,18,97,0,17,49,0,48,0,0,22,0,0,1,\r
+0,0,2,25,1,0,2,5,97,0,0,0,1,9,18,97,0,16,10,49,0,22,0,0,1,0,0,2,25,1,0,2,10,118,0,0,0,1,9,18,118,0,\r
+59,120,0,52,0,9,18,118,0,59,121,0,52,0,0,1,0,0,2,25,1,0,2,11,118,0,0,0,1,9,18,118,0,59,120,0,52,0,\r
+9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,0,1,0,0,2,25,1,0,2,12,118,0,0,0,1,9,18,118,0,59,\r
+120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,0,59,119,0,52,0,0,1,0,0,2,25,\r
+1,0,2,6,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,0,1,0,0,2,25,1,0,2,7,118,0,0,\r
 0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,0,1,0,0,2,25,1,0,2,\r
-12,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,\r
-0,59,119,0,52,0,0,1,0,0,2,25,1,0,2,6,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,\r
-0,1,0,0,2,25,1,0,2,7,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,\r
-122,0,52,0,0,1,0,0,2,25,1,0,2,8,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,\r
-118,0,59,122,0,52,0,9,18,118,0,59,119,0,52,0,0,1,0,0,2,25,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,\r
-0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,0,1,0,0,2,25,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,\r
-52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,0,1,0,0,2,25,1,0,2,15,109,0,0,0,1,\r
-9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,109,\r
-0,16,10,51,0,57,52,0,0,1,0,0,2,24,1,0,2,9,97,0,0,0,1,9,18,97,0,17,49,0,48,0,0,21,0,0,1,0,0,2,24,1,\r
-0,2,5,97,0,0,0,1,9,18,97,0,16,10,49,0,21,0,0,1,0,0,2,24,1,0,2,10,118,0,0,0,1,9,18,118,0,59,120,0,\r
-51,0,9,18,118,0,59,121,0,51,0,0,1,0,0,2,24,1,0,2,11,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,\r
-0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,0,1,0,0,2,24,1,0,2,12,118,0,0,0,1,9,18,118,0,59,120,0,51,\r
-0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,0,1,0,0,2,24,1,0,2,6,\r
-118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,0,1,0,0,2,24,1,0,2,7,118,0,0,0,1,9,\r
-18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,0,1,0,0,2,24,1,0,2,8,118,\r
-0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,\r
-119,0,51,0,0,1,0,0,2,24,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,\r
-51,0,0,1,0,0,2,24,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,\r
-9,18,109,0,16,10,50,0,57,51,0,0,1,0,0,2,24,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,\r
-109,0,16,10,49,0,57,51,0,9,18,109,0,16,10,50,0,57,51,0,9,18,109,0,16,10,51,0,57,51,0,0,1,0,9,2,25,\r
-1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,\r
-0,0,1,0,5,2,25,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,\r
-52,0,8,18,98,0,0,0,1,0,10,2,25,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,18,\r
-118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,8,18,117,0,0,0,1,0,11,2,25,1,0,2,11,\r
-118,0,0,1,1,0,5,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,\r
-18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,8,18,117,0,0,0,1,0,12,2,25,1,0,2,12,118,0,0,1,1,0,\r
-5,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,\r
-0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,0,59,119,0,52,0,8,18,117,0,0,0,1,0,6,2,25,1,0,2,6,118,0,0,\r
-1,1,0,5,0,0,0,1,3,2,0,6,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,\r
-59,121,0,52,0,8,18,117,0,0,0,1,0,7,2,25,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,3,2,0,7,1,117,0,0,0,9,18,\r
-117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,8,\r
-18,117,0,0,0,1,0,8,2,25,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,3,2,0,8,1,117,0,0,0,9,18,117,0,18,118,0,20,\r
-0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,0,59,119,0,\r
-52,0,8,18,117,0,0,0,1,0,13,2,25,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,3,2,0,13,1,110,0,0,0,9,18,110,0,\r
-18,109,0,20,0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,8,18,110,0,0,0,1,0,14,2,\r
-25,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,3,2,0,14,1,110,0,0,0,9,18,110,0,18,109,0,20,0,9,18,109,0,16,8,\r
-48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,8,18,110,0,0,0,1,0,15,2,\r
-25,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,3,2,0,15,1,110,0,0,0,9,18,110,0,18,109,0,20,0,9,18,109,0,16,8,\r
-48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,109,0,16,10,51,0,57,\r
-52,0,8,18,110,0,0,0,1,0,9,2,24,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,97,0,\r
-20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,5,2,24,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,\r
-18,98,0,18,97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,10,2,24,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,3,2,\r
-0,10,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,8,18,\r
-117,0,0,0,1,0,11,2,24,1,0,2,11,118,0,0,1,1,0,5,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,18,118,0,20,\r
-0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,8,18,117,0,0,0,1,0,12,\r
-2,24,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,\r
-120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,8,18,117,0,0,\r
-0,1,0,6,2,24,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,3,2,0,6,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,\r
-0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,8,18,117,0,0,0,1,0,7,2,24,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,\r
-3,2,0,7,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,\r
-18,118,0,59,122,0,51,0,8,18,117,0,0,0,1,0,8,2,24,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,3,2,0,8,1,117,0,0,\r
-0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,\r
-51,0,9,18,118,0,59,119,0,51,0,8,18,117,0,0,0,1,0,13,2,24,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,3,2,0,13,\r
-1,110,0,0,0,9,18,110,0,18,109,0,20,0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,8,\r
-18,110,0,0,0,1,0,14,2,24,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,3,2,0,14,1,110,0,0,0,9,18,110,0,18,109,0,\r
-20,0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,8,18,\r
-110,0,0,0,1,0,15,2,24,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,3,2,0,15,1,110,0,0,0,9,18,110,0,18,109,0,20,\r
-0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,\r
-109,0,16,10,51,0,57,52,0,8,18,110,0,0,0,1,0,1,2,15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,\r
-0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,\r
-1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,\r
-116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,\r
-111,97,116,95,108,101,115,115,0,18,99,0,0,18,98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,\r
-97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,\r
-0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,\r
-111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,\r
-117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,\r
-1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,\r
-0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,\r
-116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,101,113,117,97,\r
-108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,\r
-5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,\r
-1,2,11,1,1,0,1,97,0,0,1,1,0,1,98,0,0,0,1,8,18,97,0,18,98,0,39,0,0,1,0,1,2,29,1,1,0,1,97,0,0,0,1,8,\r
-18,97,0,15,2,48,0,38,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,\r
-112,114,105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,5,105,0,0,0,1,4,105,110,\r
-116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,1,98,0,0,0,1,4,98,\r
-111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,10,118,0,0,\r
-0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,\r
-0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,11,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,\r
-59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,\r
-118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,12,118,0,0,0,1,9,58,112,114,105,110,116,\r
-0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,\r
-116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,\r
-105,110,116,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,\r
-105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,7,118,0,0,0,1,9,58,112,\r
-114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,\r
-112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,8,118,0,0,0,1,\r
-9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,\r
-0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,\r
-0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,2,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,\r
-120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,\r
-0,3,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,\r
-118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,\r
-116,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,\r
-116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,\r
-110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,13,109,0,0,0,1,9,58,112,\r
-114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,\r
-0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,14,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,\r
-48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,0,\r
-18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,15,109,0,0,0,1,9,58,112,114,105,\r
-110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,\r
-112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,51,0,\r
-57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,16,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,\r
-0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,17,101,0,0,0,1,4,105,110,116,95,112,114,105,\r
-110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,18,101,0,0,0,1,4,105,110,116,95,112,\r
-114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,19,101,0,0,0,1,4,105,110,116,\r
-95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,20,101,0,0,0,1,4,105,\r
-110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,21,101,0,0,0,1,\r
-4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0\r
+8,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,\r
+0,59,119,0,52,0,0,1,0,0,2,25,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,\r
+0,57,52,0,0,1,0,0,2,25,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,\r
+52,0,9,18,109,0,16,10,50,0,57,52,0,0,1,0,0,2,25,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,52,0,\r
+9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,109,0,16,10,51,0,57,52,0,0,1,0,0,\r
+2,24,1,0,2,9,97,0,0,0,1,9,18,97,0,17,49,0,48,0,0,21,0,0,1,0,0,2,24,1,0,2,5,97,0,0,0,1,9,18,97,0,16,\r
+10,49,0,21,0,0,1,0,0,2,24,1,0,2,10,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,0,\r
+1,0,0,2,24,1,0,2,11,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,\r
+122,0,51,0,0,1,0,0,2,24,1,0,2,12,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,\r
+18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,0,1,0,0,2,24,1,0,2,6,118,0,0,0,1,9,18,118,0,59,120,\r
+0,51,0,9,18,118,0,59,121,0,51,0,0,1,0,0,2,24,1,0,2,7,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,\r
+0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,0,1,0,0,2,24,1,0,2,8,118,0,0,0,1,9,18,118,0,59,120,0,51,0,\r
+9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,0,1,0,0,2,24,1,0,2,13,\r
+109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,0,1,0,0,2,24,1,0,2,14,109,0,\r
+0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,9,18,109,0,16,10,50,0,57,51,0,0,1,\r
+0,0,2,24,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,9,18,109,\r
+0,16,10,50,0,57,51,0,9,18,109,0,16,10,51,0,57,51,0,0,1,0,9,2,25,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,\r
+0,9,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,5,2,25,1,0,2,5,97,0,0,1,1,0,\r
+5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,10,2,25,1,0,2,\r
+10,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,0,0,\r
+0,1,0,11,2,25,1,0,2,11,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,61,0,18,118,\r
+0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,12,2,25,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,\r
+101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,18,118,0,59,119,0,\r
+61,0,0,0,0,1,0,6,2,25,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,\r
+61,0,18,118,0,59,121,0,61,0,0,0,0,1,0,7,2,25,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,\r
+51,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,8,2,25,1,0,2,8,\r
+118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,\r
+118,0,59,122,0,61,0,18,118,0,59,119,0,61,0,0,0,0,1,0,13,2,25,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,\r
+109,97,116,50,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,0,0,0,1,0,14,2,25,1,0,2,14,\r
+109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,\r
+0,18,109,0,16,10,50,0,57,61,0,0,0,0,1,0,15,2,25,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,\r
+52,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,18,109,0,16,10,50,0,57,61,0,18,109,0,\r
+16,10,51,0,57,61,0,0,0,0,1,0,9,2,24,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,\r
+97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,5,2,24,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,\r
+0,9,18,98,0,18,97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,10,2,24,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,\r
+8,58,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,0,0,1,0,11,2,24,1,0,2,11,118,\r
+0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,\r
+122,0,60,0,0,0,0,1,0,12,2,24,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,\r
+0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,59,119,0,60,0,0,0,0,1,0,6,2,24,1,0,2,\r
+6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,\r
+0,0,1,0,7,2,24,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,59,120,0,60,0,18,\r
+118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,0,0,0,1,0,8,2,24,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,8,58,\r
+105,118,101,99,52,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,\r
+59,119,0,60,0,0,0,0,1,0,13,2,24,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,\r
+8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,0,0,0,1,0,14,2,24,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,8,58,\r
+109,97,116,51,0,18,109,0,16,8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,\r
+0,0,0,1,0,15,2,24,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,60,0,\r
+18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,18,109,0,16,10,51,0,57,60,0,0,0,0,1,0,1,2,\r
+15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,\r
+18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,\r
+102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,\r
+0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,\r
+98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,\r
+116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,\r
+0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,\r
+0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,\r
+103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,\r
+0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,\r
+0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,\r
+0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,\r
+101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,\r
+102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,1,2,11,1,1,0,1,97,0,0,1,1,0,1,98,0,0,0,1,8,18,97,0,18,\r
+98,0,39,0,0,1,0,1,2,29,1,1,0,1,97,0,0,0,1,8,18,97,0,15,2,48,0,38,0,0,1,0,0,0,112,114,105,110,116,0,\r
+1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,112,114,105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,\r
+105,110,116,0,1,1,0,5,105,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,\r
+112,114,105,110,116,0,1,1,0,1,98,0,0,0,1,4,98,111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,\r
+0,0,0,112,114,105,110,116,0,1,1,0,10,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,\r
+0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,11,118,\r
+0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,\r
+121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,\r
+0,12,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,\r
+118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,\r
+18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,110,\r
+116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,\r
+105,110,116,0,1,1,0,7,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,\r
+105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,\r
+112,114,105,110,116,0,1,1,0,8,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,\r
+112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,\r
+58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,2,118,0,0,0,\r
+1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,\r
+0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,3,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,\r
+120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,\r
+59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,0,18,\r
+118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,\r
+18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,\r
+110,116,0,1,1,0,13,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,\r
+105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,14,109,0,0,0,1,9,\r
+58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,\r
+0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,\r
+1,1,0,15,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,\r
+116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,9,58,\r
+112,114,105,110,116,0,18,109,0,16,10,51,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,16,101,0,\r
+0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,17,\r
+101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,\r
+1,0,18,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,\r
+116,0,1,1,0,19,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,\r
+105,110,116,0,1,1,0,20,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,\r
+112,114,105,110,116,0,1,1,0,21,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0\r
index adfdaae..776c96d 100755 (executable)
@@ -26,7 +26,7 @@ varying float gl_FogFragCoord;
 //
 
 vec4 texture1D (sampler1D sampler, float coord, float bias) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
@@ -39,66 +39,48 @@ vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) {
 }
 
 vec4 texture2D (sampler2D sampler, vec2 coord, float bias) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
 vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias) {\r
-       vec2 u;\r
-       u.s = coord.s / coord.p;\r
-       u.t = coord.t / coord.p;
-    return texture2D (sampler, u, bias);
+    return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), bias);
 }\r
 
 vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) {\r
-       vec2 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = coord.t / coord.q;
-    return texture2D (sampler, u, bias);
+    return texture2D (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), bias);
 }
 
 vec4 texture3D (sampler3D sampler, vec3 coord, float bias) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
 vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias) {\r
-       vec3 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = coord.t / coord.q;\r
-       u.p = coord.p / coord.q;
-    return texture3D (sampler, u, bias);
+    return texture3D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);
 }
 
 vec4 textureCube (samplerCube sampler, vec3 coord, float bias) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }
 
 vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
 vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
 vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias) {\r
-       vec3 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = 0.0;\r
-       u.p = coord.p / coord.q;
-    return shadow1D (sampler, u, bias);
+    return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), bias);
 }\r
 
 vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {\r
-       vec3 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = coord.t / coord.q;\r
-       u.p = coord.p / coord.q;
-    return shadow2D (sampler, u, bias);
+    return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);
 }
 
 //
@@ -106,42 +88,42 @@ vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {
 //
 
 float dFdx (float p) {\r
-       // XXX:
+    // XXX:
     return 0.0;
 }
 
 vec2 dFdx (vec2 p) {\r
-       // XXX:
+    // XXX:
     return vec2 (0.0);
 }
 
 vec3 dFdx (vec3 p) {\r
-       // XXX:
+    // XXX:
     return vec3 (0.0);
 }
 
 vec4 dFdx (vec4 p) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }
 
 float dFdy (float p) {\r
-       // XXX:
+    // XXX:
     return 0.0;
 }
 
 vec2 dFdy (vec2 p) {\r
-       // XXX:
+    // XXX:
     return vec2 (0.0);
 }
 
 vec3 dFdy (vec3 p) {\r
-       // XXX:
+    // XXX:
     return vec3 (0.0);
 }
 
 vec4 dFdy (vec4 p) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }
 
index 895b71c..d8202a8 100644 (file)
 0,1,0,12,0,116,101,120,116,117,114,101,50,68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,\r
 111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,\r
 12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,\r
-0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,\r
-0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,20,0,9,18,117,0,59,116,0,18,\r
-99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,20,0,8,58,116,101,120,116,117,\r
-114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,\r
-116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,\r
-12,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,\r
-18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,\r
-99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,\r
-114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,\r
-116,101,120,116,117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,\r
-114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,\r
-101,120,116,117,114,101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,\r
-111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,\r
-111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,\r
-111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,\r
-114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,51,68,\r
-0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,116,\r
-117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,\r
-0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,\r
-100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,\r
-9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,\r
+0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,\r
+0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,\r
+111,114,100,0,59,112,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,\r
+0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,\r
+17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,\r
+58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,\r
+111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,\r
+18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,116,117,\r
+114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,\r
+105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,\r
+101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,\r
+1,0,0,9,98,105,97,115,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,0,18,115,97,109,112,108,101,\r
+114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,\r
+18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,\r
+112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,\r
+116,117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
+100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
+97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,\r
+0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,\r
 119,50,68,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,105,\r
 97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,\r
 80,114,111,106,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,\r
-98,105,97,115,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,\r
-99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,17,48,0,48,0,0,20,0,9,18,117,0,59,112,0,\r
-18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,\r
-119,49,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,115,\r
-104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,\r
-111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,\r
-111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,\r
-114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,\r
-100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,119,50,68,0,18,115,\r
-97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,9,0,100,70,100,120,0,1,0,0,9,\r
-112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,120,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,\r
-0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,\r
-0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,\r
-0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,\r
-121,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,121,0,1,\r
-0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,121,0,1,0,0,12,\r
-112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,102,119,105,100,116,104,0,1,0,0,9,\r
-112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,\r
-0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,102,119,105,100,116,104,0,1,0,0,10,112,0,0,0,1,8,58,97,98,115,0,\r
-58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,\r
-0,11,0,102,119,105,100,116,104,0,1,0,0,11,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,\r
-0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,12,0,102,119,105,100,116,\r
-104,0,1,0,0,12,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,\r
-100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,0\r
+98,105,97,115,0,0,0,1,8,58,115,104,97,100,111,119,49,68,0,18,115,97,109,112,108,101,114,0,0,58,118,\r
+101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,\r
+0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,\r
+0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,101,114,0,\r
+0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,115,104,97,100,111,119,50,68,\r
+0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,\r
+111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,\r
+18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,\r
+0,0,1,0,9,0,100,70,100,120,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,120,0,1,\r
+0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,0,0,11,\r
+112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,0,12,112,0,0,\r
+0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,9,112,0,0,0,1,8,17,\r
+48,0,48,0,0,0,0,1,0,10,0,100,70,100,121,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,\r
+0,0,0,0,1,0,11,0,100,70,100,121,0,1,0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,\r
+1,0,12,0,100,70,100,121,0,1,0,0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,\r
+102,119,105,100,116,104,0,1,0,0,9,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,\r
+0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,102,119,105,100,116,104,0,1,\r
+0,0,10,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,\r
+100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,11,0,102,119,105,100,116,104,0,1,0,0,11,112,0,0,0,1,8,58,97,\r
+98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,\r
+46,0,0,1,0,12,0,102,119,105,100,116,104,0,1,0,0,12,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,\r
+0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,0\r
index ae3e071..2b5953a 100755 (executable)
@@ -48,7 +48,7 @@ vec4 ftransform () {
 //
 
 vec4 texture1DLod (sampler1D sampler, float coord, float lod) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
@@ -61,64 +61,46 @@ vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {
 }
 
 vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
 vec4 texture2DProjLod (sampler2D sampler, vec3 coord, float lod) {\r
-       vec2 u;\r
-       u.s = coord.s / coord.p;\r
-       u.t = coord.t / coord.p;
-    return texture2DLod (sampler, u, lod);
+    return texture2DLod (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), lod);
 }\r
 
 vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {\r
-       vec2 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = coord.t / coord.q;
-    return texture2DLod (sampler, u, lod);
+    return texture2DLod (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), lod);
 }
 
 vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }
 vec4 texture3DProjLod (sampler3D sampler, vec4 coord, float lod) {\r
-       vec3 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = coord.t / coord.q;\r
-       u.p = coord.p / coord.q;
-    return texture3DLod (sampler, u, lod);
+    return texture3DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), lod);
 }
 
 vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }
 
 vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }
 
 vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {\r
-       // XXX:
+    // XXX:
     return vec4 (0.0);
 }\r
 
 vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {\r
-       vec3 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = 0.0;\r
-       u.p = coord.p / coord.q;
-    return shadow1DLod (sampler, u, lod);
+    return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);
 }\r
 
 vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {\r
-       vec3 u;\r
-       u.s = coord.s / coord.q;\r
-       u.t = coord.t / coord.q;\r
-       u.p = coord.p / coord.q;
-    return shadow2DLod (sampler, u, lod);
+    return shadow2DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), lod);
 }
 
index c3929f1..c4698a6 100644 (file)
 111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,76,111,100,0,1,0,0,17,115,97,109,112,\r
 108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,\r
 17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,0,\r
-0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,\r
-2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,\r
-112,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,\r
-0,49,20,0,8,58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,\r
-117,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,\r
-100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,\r
-0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,\r
-114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,\r
-100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,\r
-101,114,0,0,18,117,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,76,111,\r
-100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,\r
-0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,\r
-114,111,106,76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,\r
-0,0,9,108,111,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,\r
-0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,\r
-99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,\r
-111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,51,68,76,111,100,0,18,115,97,\r
-109,112,108,101,114,0,0,18,117,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,\r
-67,117,98,101,76,111,100,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,\r
-1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,\r
-111,119,49,68,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,\r
-1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,\r
-111,119,50,68,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,\r
-1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,\r
-111,119,49,68,80,114,111,106,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,\r
-111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,\r
-114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,17,48,0,48,0,0,20,\r
-0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,\r
-58,115,104,97,100,111,119,49,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,108,\r
-111,100,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,76,111,100,0,1,0,0,21,115,\r
-97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,11,1,\r
-117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,\r
-20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,\r
-9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,\r
-115,104,97,100,111,119,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,108,111,\r
-100,0,0,0,0,0,0\r
+0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,\r
+58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,\r
+50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,0,18,99,111,111,114,100,\r
+0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,\r
+116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,\r
+99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,76,111,\r
+100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,\r
+111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,\r
+49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,76,111,100,0,1,0,0,18,\r
+115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,\r
+118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,114,111,106,\r
+76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,\r
+111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,76,111,100,0,18,115,97,109,112,108,101,114,\r
+0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,\r
+99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,\r
+0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,\r
+114,101,67,117,98,101,76,111,100,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
+100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
+97,100,111,119,49,68,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
+100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
+97,100,111,119,50,68,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
+100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
+97,100,111,119,49,68,80,114,111,106,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,\r
+99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,76,111,100,0,\r
+18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,\r
+111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,\r
+100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,\r
+106,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,\r
+108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,\r
+0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,\r
+111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,\r
+18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,0\r
index b8f9d78..6c05e71 100644 (file)
@@ -156,14 +156,14 @@ GLboolean slang_assembly_file_restore_point_load (slang_assembly_file *file,
 /* utility functions */\r
 \r
 static GLboolean sizeof_variable (slang_assemble_ctx *A, slang_type_specifier *spec,\r
-       slang_type_qualifier qual, slang_operation *array_size, GLuint *size)\r
+       slang_type_qualifier qual, GLuint array_len, GLuint *size)\r
 {\r
        slang_storage_aggregate agg;\r
 \r
        /* calculate the size of the variable's aggregate */\r
        if (!slang_storage_aggregate_construct (&agg))\r
                return GL_FALSE;\r
-       if (!_slang_aggregate_variable (&agg, spec, array_size, A->space.funcs, A->space.structs,\r
+       if (!_slang_aggregate_variable (&agg, spec, array_len, A->space.funcs, A->space.structs,\r
                        A->space.vars, A->mach, A->file, A->atoms))\r
        {\r
                slang_storage_aggregate_destruct (&agg);\r
@@ -184,7 +184,7 @@ static GLboolean sizeof_variable2 (slang_assemble_ctx *A, slang_variable *var, G
        var->address = *size;\r
        if (var->type.qualifier == slang_qual_out || var->type.qualifier == slang_qual_inout)\r
                var->address += 4;\r
-       return sizeof_variable (A, &var->type.specifier, var->type.qualifier, var->array_size, size);\r
+       return sizeof_variable (A, &var->type.specifier, var->type.qualifier, var->array_len, size);\r
 }\r
 \r
 static GLboolean sizeof_variables (slang_assemble_ctx *A, slang_variable_scope *vars, GLuint start,\r
@@ -233,7 +233,7 @@ slang_function *_slang_locate_function (slang_function_scope *funcs, slang_atom
 \r
                        if (!slang_assembly_typeinfo_construct (&ti))\r
                                return NULL;\r
-                       if (!_slang_typeof_operation (&params[j], space, &ti, atoms))\r
+                       if (!_slang_typeof_operation_ (&params[j], space, &ti, atoms))\r
                        {\r
                                slang_assembly_typeinfo_destruct (&ti);\r
                                return NULL;\r
@@ -301,7 +301,7 @@ GLboolean _slang_assemble_function (slang_assemble_ctx *A, slang_function *fun)
        /* calculate return value size */\r
        param_size = 0;\r
        if (fun->header.type.specifier.type != slang_spec_void)\r
-               if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, NULL, &param_size))\r
+               if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, 0, &param_size))\r
                        return GL_FALSE;\r
        A->local.ret_size = param_size;\r
 \r
@@ -344,7 +344,7 @@ GLboolean _slang_assemble_function (slang_assemble_ctx *A, slang_function *fun)
 \r
        /* execute the function body */\r
        A->file->code[skip].param[0] = A->file->count;\r
-       if (!_slang_assemble_operation_ (A, fun->body, /*slang_ref_freelance*/slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, fun->body, /*slang_ref_freelance*/slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* this is the end of the function - restore the old function frame */\r
@@ -363,7 +363,7 @@ GLboolean _slang_assemble_function (slang_assemble_ctx *A, slang_function *fun)
        return GL_TRUE;\r
 }\r
 \r
-GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *A, slang_operation *op)\r
+GLboolean _slang_cleanup_stack (slang_assemble_ctx *A, slang_operation *op)\r
 {\r
        slang_assembly_typeinfo ti;\r
        GLuint size = 0;\r
@@ -371,7 +371,7 @@ GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *A, slang_operation *op)
        /* get type info of the operation and calculate its size */\r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
-       if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
        {\r
                slang_assembly_typeinfo_destruct (&ti);\r
                return GL_FALSE;\r
@@ -379,7 +379,7 @@ GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *A, slang_operation *op)
        if (ti.spec.type != slang_spec_void)\r
                if (A->ref == slang_ref_force)\r
                        size = 4;\r
-               else if (!sizeof_variable (A, &ti.spec, slang_qual_none, NULL, &size))\r
+               else if (!sizeof_variable (A, &ti.spec, slang_qual_none, 0, &size))\r
                {\r
                        slang_assembly_typeinfo_destruct (&ti);\r
                        return GL_FALSE;\r
@@ -478,13 +478,13 @@ GLboolean _slang_dereference (slang_assemble_ctx *A, slang_operation *op)
        /* get type information of the given operation */\r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
-       if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
                goto end1;\r
 \r
        /* construct aggregate from the type info */\r
        if (!slang_storage_aggregate_construct (&agg))\r
                goto end1;\r
-       if (!_slang_aggregate_variable (&agg, &ti.spec, ti.array_size, A->space.funcs, A->space.structs,\r
+       if (!_slang_aggregate_variable (&agg, &ti.spec, ti.array_len, A->space.funcs, A->space.structs,\r
                        A->space.vars, A->mach, A->file, A->atoms))\r
                goto end;\r
 \r
@@ -515,7 +515,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
        {\r
                GLuint ret_size = 0;\r
 \r
-               if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, NULL, &ret_size))\r
+               if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, 0, &ret_size))\r
                        return GL_FALSE;\r
                if (!PLAB (A->file, slang_asm_local_alloc, ret_size))\r
                        return GL_FALSE;\r
@@ -530,7 +530,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
                        if (!PLAB2 (A->file, slang_asm_local_addr, A->local.addr_tmp, 4))\r
                                return GL_FALSE;\r
                        /* TODO: optimize the "out" parameter case */\r
-                       if (!_slang_assemble_operation_ (A, &params[i], slang_ref_force))\r
+                       if (!_slang_assemble_operation (A, &params[i], slang_ref_force))\r
                                return GL_FALSE;\r
                        p_swz[i] = A->swz;\r
                        p_ref[i] = A->ref;\r
@@ -551,7 +551,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
                }\r
                else\r
                {\r
-                       if (!_slang_assemble_operation_ (A, &params[i], slang_ref_forbid))\r
+                       if (!_slang_assemble_operation (A, &params[i], slang_ref_forbid))\r
                                return GL_FALSE;\r
                        p_swz[i] = A->swz;\r
                        p_ref[i] = A->ref;\r
@@ -583,7 +583,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
                else\r
                {\r
                        /* pop the value of the parameter */\r
-                       if (!_slang_cleanup_stack_ (A, &params[j]))\r
+                       if (!_slang_cleanup_stack (A, &params[j]))\r
                                return GL_FALSE;\r
                }\r
        }\r
@@ -646,6 +646,7 @@ static const struct
        { "float_noise3",   slang_asm_float_noise3,   slang_asm_float_copy },\r
        { "float_noise4",   slang_asm_float_noise4,   slang_asm_float_copy },\r
        { "int_to_float",   slang_asm_int_to_float,   slang_asm_float_copy },\r
+       { "vec4_tex2d",     slang_asm_vec4_tex2d,     slang_asm_none },\r
        /* mesa-specific extensions */\r
        { "float_print",    slang_asm_float_deref,    slang_asm_float_print },\r
        { "int_print",      slang_asm_int_deref,      slang_asm_int_print },\r
@@ -721,13 +722,13 @@ static GLboolean equality (slang_assemble_ctx *A, slang_operation *op, GLboolean
        /* get type of operation */\r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
-       if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
                goto end1;\r
 \r
        /* convert it to an aggregate */\r
        if (!slang_storage_aggregate_construct (&agg))\r
                goto end1;\r
-       if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,\r
+       if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,\r
                        A->space.vars, A->mach, A->file, A->atoms))\r
                goto end;\r
 \r
@@ -784,19 +785,19 @@ static GLboolean handle_subscript (slang_assemble_ctx *A, slang_assembly_typeinf
        GLuint asize = 0, esize = 0;\r
 \r
        /* get type info of the master expression (matrix, vector or an array */\r
-       if (!_slang_typeof_operation (&op->children[0], &A->space, tia, A->atoms))\r
+       if (!_slang_typeof_operation (A, &op->children[0], tia))\r
                return GL_FALSE;\r
-       if (!sizeof_variable (A, &tia->spec, slang_qual_none, tia->array_size, &asize))\r
+       if (!sizeof_variable (A, &tia->spec, slang_qual_none, tia->array_len, &asize))\r
                return GL_FALSE;\r
 \r
        /* get type info of the result (matrix column, vector row or array element) */\r
-       if (!_slang_typeof_operation (op, &A->space, tie, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, tie))\r
                return GL_FALSE;\r
-       if (!sizeof_variable (A, &tie->spec, slang_qual_none, NULL, &esize))\r
+       if (!sizeof_variable (A, &tie->spec, slang_qual_none, 0, &esize))\r
                return GL_FALSE;\r
 \r
        /* assemble the master expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], ref))\r
+       if (!_slang_assemble_operation (A, &op->children[0], ref))\r
                return GL_FALSE;\r
 \r
        /* when indexing an l-value swizzle, push the swizzle_tmp */\r
@@ -805,7 +806,7 @@ static GLboolean handle_subscript (slang_assemble_ctx *A, slang_assembly_typeinf
                        return GL_FALSE;\r
 \r
        /* assemble the subscript expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        if (ref == slang_ref_force && tia->is_swizzled)\r
@@ -882,11 +883,11 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
        slang_assembly_typeinfo *tib, slang_operation *op, slang_ref_type ref)\r
 {\r
        /* get type info of the result (field or swizzle) */\r
-       if (!_slang_typeof_operation (op, &A->space, tia, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, tia))\r
                return GL_FALSE;\r
 \r
        /* get type info of the master expression being accessed (struct or vector) */\r
-       if (!_slang_typeof_operation (&op->children[0], &A->space, tib, A->atoms))\r
+       if (!_slang_typeof_operation (A, &op->children[0], tib))\r
                return GL_FALSE;\r
 \r
        /* if swizzling a vector in-place, the swizzle temporary is needed */\r
@@ -895,7 +896,7 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
                        return GL_FALSE;\r
 \r
        /* assemble the master expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], ref))\r
+       if (!_slang_assemble_operation (A, &op->children[0], ref))\r
                return GL_FALSE;\r
 \r
        /* assemble the field expression */\r
@@ -941,7 +942,7 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
                        field = &tib->spec._struct->fields->variables[i];\r
                        if (!slang_storage_aggregate_construct (&agg))\r
                                return GL_FALSE;\r
-                       if (!_slang_aggregate_variable (&agg, &field->type.specifier, field->array_size,\r
+                       if (!_slang_aggregate_variable (&agg, &field->type.specifier, field->array_len,\r
                                        A->space.funcs, A->space.structs, A->space.vars, A->mach, A->file, A->atoms))\r
                        {\r
                                slang_storage_aggregate_destruct (&agg);\r
@@ -989,14 +990,8 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
        return GL_TRUE;\r
 }\r
 \r
-GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op, slang_ref_type ref)\r
+GLboolean _slang_assemble_operation (slang_assemble_ctx *A, slang_operation *op, slang_ref_type ref)\r
 {\r
-       GLuint assem;\r
-\r
-       assem = A->file->count;\r
-       if (!push_new (A->file))\r
-               return GL_FALSE;\r
-\r
        /* set default results */\r
        A->ref = /*(ref == slang_ref_freelance) ? slang_ref_force : */ref;\r
        A->swz.num_components = 0;\r
@@ -1010,9 +1005,9 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
 \r
                        for (i = 0; i < op->num_children; i++)\r
                        {\r
-                               if (!_slang_assemble_operation_ (A, &op->children[i], slang_ref_forbid/*slang_ref_freelance*/))\r
+                               if (!_slang_assemble_operation (A, &op->children[i], slang_ref_forbid/*slang_ref_freelance*/))\r
                                        return GL_FALSE;\r
-                               if (!_slang_cleanup_stack_ (A, &op->children[i]))\r
+                               if (!_slang_cleanup_stack (A, &op->children[i]))\r
                                        return GL_FALSE;\r
                        }\r
                }\r
@@ -1032,25 +1027,26 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
                {\r
                        GLuint i;\r
 \r
-                       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_force))\r
+                       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_force))\r
                                return GL_FALSE;\r
                        for (i = 1; i < op->num_children; i++)\r
-                               if (!_slang_assemble_operation_ (A, &op->children[i], slang_ref_forbid))\r
+                               if (!_slang_assemble_operation (A, &op->children[i], slang_ref_forbid))\r
                                        return GL_FALSE;\r
                        if (!call_asm_instruction (A, op->a_id))\r
                                return GL_FALSE;\r
                }\r
                break;\r
        case slang_oper_break:\r
-               A->file->code[assem].type = slang_asm_jump;\r
-               A->file->code[assem].param[0] = A->flow.loop_end;\r
+               if (!PLAB (A->file, slang_asm_jump, A->flow.loop_end))\r
+                       return GL_FALSE;\r
                break;\r
        case slang_oper_continue:\r
-               A->file->code[assem].type = slang_asm_jump;\r
-               A->file->code[assem].param[0] = A->flow.loop_start;\r
+               if (!PLAB (A->file, slang_asm_jump, A->flow.loop_start))\r
+                       return GL_FALSE;\r
                break;\r
        case slang_oper_discard:\r
-               A->file->code[assem].type = slang_asm_discard;\r
+               if (!PUSH (A->file, slang_asm_discard))\r
+                       return GL_FALSE;\r
                if (!PUSH (A->file, slang_asm_exit))\r
                        return GL_FALSE;\r
                break;\r
@@ -1060,7 +1056,7 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
                        /* push the result's address */\r
                        if (!PLAB2 (A->file, slang_asm_local_addr, 0, A->local.ret_size))\r
                                return GL_FALSE;\r
-                       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+                       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                                return GL_FALSE;\r
 \r
                        A->swz.num_components = 0;\r
@@ -1077,7 +1073,7 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
        case slang_oper_expression:\r
                if (ref == slang_ref_force)\r
                        return GL_FALSE;\r
-               if (!_slang_assemble_operation_ (A, &op->children[0], ref))\r
+               if (!_slang_assemble_operation (A, &op->children[0], ref))\r
                        return GL_FALSE;\r
                break;\r
        case slang_oper_if:\r
@@ -1101,22 +1097,22 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
        case slang_oper_literal_bool:\r
                if (ref == slang_ref_force)\r
                        return GL_FALSE;\r
-               A->file->code[assem].type = slang_asm_bool_push;\r
-               A->file->code[assem].literal = op->literal;\r
+               if (!PLIT (A->file, slang_asm_bool_push, op->literal))\r
+                       return GL_FALSE;\r
                A->ref = slang_ref_forbid;\r
                break;\r
        case slang_oper_literal_int:\r
                if (ref == slang_ref_force)\r
                        return GL_FALSE;\r
-               A->file->code[assem].type = slang_asm_int_push;\r
-               A->file->code[assem].literal = op->literal;\r
+               if (!PLIT (A->file, slang_asm_int_push, op->literal))\r
+                       return GL_FALSE;\r
                A->ref = slang_ref_forbid;\r
                break;\r
        case slang_oper_literal_float:\r
                if (ref == slang_ref_force)\r
                        return GL_FALSE;\r
-               A->file->code[assem].type = slang_asm_float_push;\r
-               A->file->code[assem].literal = op->literal;\r
+               if (!PLIT (A->file, slang_asm_float_push, op->literal))\r
+                       return GL_FALSE;\r
                A->ref = slang_ref_forbid;\r
                break;\r
        case slang_oper_identifier:\r
@@ -1129,7 +1125,7 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
                        if (var == NULL)\r
                                return GL_FALSE;\r
                        size = 0;\r
-                       if (!sizeof_variable (A, &var->type.specifier, slang_qual_none, var->array_size, &size))\r
+                       if (!sizeof_variable (A, &var->type.specifier, slang_qual_none, var->array_len, &size))\r
                                return GL_FALSE;\r
 \r
                        /* prepare stack for dereferencing */\r
@@ -1164,11 +1160,11 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
        case slang_oper_sequence:\r
                if (ref == slang_ref_force)\r
                        return GL_FALSE;\r
-               if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))\r
+               if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))\r
                        return GL_FALSE;\r
-               if (!_slang_cleanup_stack_ (A, &op->children[0]))\r
+               if (!_slang_cleanup_stack (A, &op->children[0]))\r
                        return GL_FALSE;\r
-               if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+               if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                        return GL_FALSE;\r
                A->ref = slang_ref_forbid;\r
                break;\r
@@ -1265,18 +1261,18 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
                A->ref = slang_ref_forbid;\r
                break;\r
        case slang_oper_equal:\r
-               if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+               if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                        return GL_FALSE;\r
-               if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+               if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                        return GL_FALSE;\r
                if (!equality (A, op->children, GL_TRUE))\r
                        return GL_FALSE;\r
                A->ref = slang_ref_forbid;\r
                break;\r
        case slang_oper_notequal:\r
-               if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+               if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                        return GL_FALSE;\r
-               if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+               if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                        return GL_FALSE;\r
                if (!equality (A, op->children, GL_FALSE))\r
                        return GL_FALSE;\r
index ec273aa..99c407d 100644 (file)
@@ -73,6 +73,7 @@ typedef enum slang_assembly_type_
        slang_asm_addr_deref,\r
        slang_asm_addr_add,\r
        slang_asm_addr_multiply,\r
+       slang_asm_vec4_tex2d,\r
        slang_asm_jump,\r
        slang_asm_jump_if_zero,\r
        slang_asm_enter,\r
@@ -179,7 +180,7 @@ slang_function *_slang_locate_function (slang_function_scope *funcs, slang_atom
 \r
 GLboolean _slang_assemble_function (slang_assemble_ctx *, struct slang_function_ *);\r
 \r
-GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *, slang_operation *);\r
+GLboolean _slang_cleanup_stack (slang_assemble_ctx *, slang_operation *);\r
 \r
 GLboolean _slang_dereference (slang_assemble_ctx *, slang_operation *);\r
 \r
@@ -189,7 +190,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *, slang_function *,
 GLboolean _slang_assemble_function_call_name (slang_assemble_ctx *, const char *, slang_operation *,\r
        GLuint, GLboolean);\r
 \r
-GLboolean _slang_assemble_operation_ (slang_assemble_ctx *, struct slang_operation_ *, slang_ref_type);\r
+GLboolean _slang_assemble_operation (slang_assemble_ctx *, struct slang_operation_ *, slang_ref_type);\r
 \r
 #ifdef __cplusplus\r
 }\r
index 186c488..d4799b0 100644 (file)
@@ -127,12 +127,12 @@ GLboolean _slang_assemble_assignment (slang_assemble_ctx *A, slang_operation *op
 \r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
-       if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
                goto end1;\r
 \r
        if (!slang_storage_aggregate_construct (&agg))\r
                goto end1;\r
-       if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,\r
+       if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,\r
                        A->space.vars, A->mach, A->file, A->atoms))\r
                goto end;\r
 \r
@@ -167,10 +167,10 @@ GLboolean _slang_assemble_assign (slang_assemble_ctx *A, slang_operation *op, co
 \r
        if (slang_string_compare ("=", oper) == 0)\r
        {\r
-               if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_force))\r
+               if (!_slang_assemble_operation (A, &op->children[0], slang_ref_force))\r
                        return GL_FALSE;\r
                swz = A->swz;\r
-               if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+               if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                        return GL_FALSE;\r
                A->swz = swz;\r
                if (!_slang_assemble_assignment (A, op->children))\r
index 067a5bf..115e292 100644 (file)
@@ -52,7 +52,7 @@ GLboolean _slang_assemble_logicaland (slang_assemble_ctx *A, slang_operation *op
        GLuint zero_jump, end_jump;\r
 \r
        /* evaluate left expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to pushing 0 if not true */\r
@@ -61,7 +61,7 @@ GLboolean _slang_assemble_logicaland (slang_assemble_ctx *A, slang_operation *op
                return GL_FALSE;\r
 \r
        /* evaluate right expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to the end of the expression */\r
@@ -98,7 +98,7 @@ GLboolean _slang_assemble_logicalor (slang_assemble_ctx *A, slang_operation *op)
        GLuint right_jump, end_jump;\r
 \r
        /* evaluate left expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to evaluation of right expression if not true */\r
@@ -117,7 +117,7 @@ GLboolean _slang_assemble_logicalor (slang_assemble_ctx *A, slang_operation *op)
 \r
        /* evaluate right expression */\r
        A->file->code[right_jump].param[0] = A->file->count;\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* the end of the expression */\r
@@ -144,7 +144,7 @@ GLboolean _slang_assemble_select (slang_assemble_ctx *A, slang_operation *op)
        GLuint cond_jump, end_jump;\r
 \r
        /* execute condition expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to false expression if not true */\r
@@ -153,7 +153,7 @@ GLboolean _slang_assemble_select (slang_assemble_ctx *A, slang_operation *op)
                return GL_FALSE;\r
 \r
        /* execute true expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to the end of the expression */\r
@@ -165,7 +165,7 @@ GLboolean _slang_assemble_select (slang_assemble_ctx *A, slang_operation *op)
        A->file->code[cond_jump].param[0] = A->file->count;\r
 \r
        /* execute false expression */\r
-       if (!_slang_assemble_operation_ (A, &op->children[2], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[2], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* resolve the end of the expression */\r
@@ -199,9 +199,9 @@ GLboolean _slang_assemble_for (slang_assemble_ctx *A, slang_operation *op)
        slang_assembly_flow_control save_flow = A->flow;\r
 \r
        /* execute initialization statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[0]))\r
+       if (!_slang_cleanup_stack (A, &op->children[0]))\r
                return GL_FALSE;\r
 \r
        /* skip the "go to the end of the loop" and loop-increment statements */\r
@@ -219,16 +219,16 @@ GLboolean _slang_assemble_for (slang_assemble_ctx *A, slang_operation *op)
        cont_label = A->file->count;\r
 \r
        /* execute loop-increment statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[2]))\r
+       if (!_slang_cleanup_stack (A, &op->children[2]))\r
                return GL_FALSE;\r
 \r
        /* resolve the condition point */\r
        A->file->code[start_jump].param[0] = A->file->count;\r
 \r
        /* execute condition statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to the end of the loop if not true */\r
@@ -239,9 +239,9 @@ GLboolean _slang_assemble_for (slang_assemble_ctx *A, slang_operation *op)
        /* execute loop body */\r
        A->flow.loop_start = cont_label;\r
        A->flow.loop_end = break_label;\r
-       if (!_slang_assemble_operation_ (A, &op->children[3], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[3], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[3]))\r
+       if (!_slang_cleanup_stack (A, &op->children[3]))\r
                return GL_FALSE;\r
        A->flow = save_flow;\r
 \r
@@ -303,9 +303,9 @@ GLboolean _slang_assemble_do (slang_assemble_ctx *A, slang_operation *op)
        /* execute loop body */\r
        A->flow.loop_start = cont_label;\r
        A->flow.loop_end = break_label;\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[0]))\r
+       if (!_slang_cleanup_stack (A, &op->children[0]))\r
                return GL_FALSE;\r
        A->flow = save_flow;\r
 \r
@@ -313,7 +313,7 @@ GLboolean _slang_assemble_do (slang_assemble_ctx *A, slang_operation *op)
        A->file->code[cont_jump].param[0] = A->file->count;\r
 \r
        /* execute condition statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to the end of the loop if not true */\r
@@ -368,7 +368,7 @@ GLboolean _slang_assemble_while (slang_assemble_ctx *A, slang_operation *op)
        A->file->code[skip_jump].param[0] = A->file->count;\r
 \r
        /* execute condition statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to the end of the loop if not true */\r
@@ -379,9 +379,9 @@ GLboolean _slang_assemble_while (slang_assemble_ctx *A, slang_operation *op)
        /* execute loop body */\r
        A->flow.loop_start = A->file->code[skip_jump].param[0];\r
        A->flow.loop_end = break_label;\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[1]))\r
+       if (!_slang_cleanup_stack (A, &op->children[1]))\r
                return GL_FALSE;\r
        A->flow = save_flow;\r
 \r
@@ -414,7 +414,7 @@ GLboolean _slang_assemble_if (slang_assemble_ctx *A, slang_operation *op)
        GLuint cond_jump, else_jump;\r
 \r
        /* execute condition statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))\r
                return GL_FALSE;\r
 \r
        /* jump to false-statement if not true */\r
@@ -423,9 +423,9 @@ GLboolean _slang_assemble_if (slang_assemble_ctx *A, slang_operation *op)
                return GL_FALSE;\r
 \r
        /* execute true-statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[1]))\r
+       if (!_slang_cleanup_stack (A, &op->children[1]))\r
                return GL_FALSE;\r
 \r
        /* skip if-false statement */\r
@@ -437,9 +437,9 @@ GLboolean _slang_assemble_if (slang_assemble_ctx *A, slang_operation *op)
        A->file->code[cond_jump].param[0] = A->file->count;\r
 \r
        /* execute false-statement */\r
-       if (!_slang_assemble_operation_ (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))\r
+       if (!_slang_assemble_operation (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))\r
                return GL_FALSE;\r
-       if (!_slang_cleanup_stack_ (A, &op->children[2]))\r
+       if (!_slang_cleanup_stack (A, &op->children[2]))\r
                return GL_FALSE;\r
 \r
        /* resolve end of if-false statement */\r
index d7d2e42..278d490 100644 (file)
@@ -155,12 +155,12 @@ static GLboolean constructor_aggregate (slang_assemble_ctx *A, const slang_stora
 \r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
-       if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
                goto end1;\r
 \r
        if (!slang_storage_aggregate_construct (&agg))\r
                goto end1;\r
-       if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,\r
+       if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,\r
                        A->space.vars, A->mach, A->file, A->atoms))\r
                goto end2;\r
 \r
@@ -169,7 +169,7 @@ static GLboolean constructor_aggregate (slang_assemble_ctx *A, const slang_stora
        if (!_slang_flatten_aggregate (&flat_agg, &agg))\r
                goto end;\r
 \r
-       if (!_slang_assemble_operation_ (A, op, slang_ref_forbid))\r
+       if (!_slang_assemble_operation (A, op, slang_ref_forbid))\r
                goto end;\r
 \r
        for (i = 0; i < flat_agg.count; i++)\r
@@ -205,13 +205,13 @@ GLboolean _slang_assemble_constructor (slang_assemble_ctx *A, slang_operation *o
        /* get typeinfo of the constructor (the result of constructor expression) */\r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
-       if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
                goto end1;\r
 \r
        /* create an aggregate of the constructor */\r
        if (!slang_storage_aggregate_construct (&agg))\r
                goto end1;\r
-       if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,\r
+       if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,\r
                        A->space.vars, A->mach, A->file, A->atoms))\r
                goto end2;\r
 \r
index 2fcdd33..48fba8f 100644 (file)
@@ -38,14 +38,13 @@ GLboolean slang_assembly_typeinfo_construct (slang_assembly_typeinfo *ti)
 {\r
        if (!slang_type_specifier_construct (&ti->spec))\r
                return GL_FALSE;\r
-       ti->array_size = NULL;\r
+       ti->array_len = 0;\r
        return GL_TRUE;\r
 }\r
 \r
 GLvoid slang_assembly_typeinfo_destruct (slang_assembly_typeinfo *ti)\r
 {\r
        slang_type_specifier_destruct (&ti->spec);\r
-       /* do not free ti->array_size */\r
 }\r
 \r
 /* _slang_typeof_operation() */\r
@@ -63,7 +62,13 @@ static GLboolean typeof_existing_function (const char *name, slang_operation *pa
        return exists;\r
 }\r
 \r
-GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_space *space,\r
+GLboolean _slang_typeof_operation (slang_assemble_ctx *A, slang_operation *op,\r
+       slang_assembly_typeinfo *ti)\r
+{\r
+       return _slang_typeof_operation_ (op, &A->space, ti, A->atoms);\r
+}\r
+\r
+GLboolean _slang_typeof_operation_ (slang_operation *op, slang_assembly_name_space *space,\r
        slang_assembly_typeinfo *ti, slang_atom_pool *atoms)\r
 {\r
        ti->can_be_referenced = GL_FALSE;\r
@@ -94,7 +99,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
        case slang_oper_divassign:\r
        case slang_oper_preincrement:\r
        case slang_oper_predecrement:\r
-               if (!_slang_typeof_operation (op->children, space, ti, atoms))\r
+               if (!_slang_typeof_operation_ (op->children, space, ti, atoms))\r
                        return 0;\r
                break;\r
        case slang_oper_literal_bool:\r
@@ -126,12 +131,12 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
                        if (!slang_type_specifier_copy (&ti->spec, &var->type.specifier))\r
                                return GL_FALSE;\r
                        ti->can_be_referenced = GL_TRUE;\r
-                       ti->array_size = var->array_size;\r
+                       ti->array_len = var->array_len;\r
                }\r
                break;\r
        case slang_oper_sequence:\r
                /* TODO: check [0] and [1] if they match */\r
-               if (!_slang_typeof_operation (&op->children[1], space, ti, atoms))\r
+               if (!_slang_typeof_operation_ (&op->children[1], space, ti, atoms))\r
                        return GL_FALSE;\r
                ti->can_be_referenced = GL_FALSE;\r
                ti->is_swizzled = GL_FALSE;\r
@@ -144,7 +149,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
        /*case slang_oper_andassign:*/\r
        case slang_oper_select:\r
                /* TODO: check [1] and [2] if they match */\r
-               if (!_slang_typeof_operation (&op->children[1], space, ti, atoms))\r
+               if (!_slang_typeof_operation_ (&op->children[1], space, ti, atoms))\r
                        return GL_FALSE;\r
                ti->can_be_referenced = GL_FALSE;\r
                ti->is_swizzled = GL_FALSE;\r
@@ -172,7 +177,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
                break;\r
        /*case slang_oper_modulus:*/\r
        case slang_oper_plus:\r
-               if (!_slang_typeof_operation (op->children, space, ti, atoms))\r
+               if (!_slang_typeof_operation_ (op->children, space, ti, atoms))\r
                        return GL_FALSE;\r
                ti->can_be_referenced = GL_FALSE;\r
                ti->is_swizzled = GL_FALSE;\r
@@ -188,7 +193,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
 \r
                        if (!slang_assembly_typeinfo_construct (&_ti))\r
                                return GL_FALSE;\r
-                       if (!_slang_typeof_operation (op->children, space, &_ti, atoms))\r
+                       if (!_slang_typeof_operation_ (op->children, space, &_ti, atoms))\r
                        {\r
                                slang_assembly_typeinfo_destruct (&_ti);\r
                                return GL_FALSE;\r
@@ -259,7 +264,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
 \r
                        if (!slang_assembly_typeinfo_construct (&_ti))\r
                                return GL_FALSE;\r
-                       if (!_slang_typeof_operation (op->children, space, &_ti, atoms))\r
+                       if (!_slang_typeof_operation_ (op->children, space, &_ti, atoms))\r
                        {\r
                                slang_assembly_typeinfo_destruct (&_ti);\r
                                return GL_FALSE;\r
@@ -374,7 +379,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
                break;\r
        case slang_oper_postincrement:\r
        case slang_oper_postdecrement:\r
-               if (!_slang_typeof_operation (op->children, space, ti, atoms))\r
+               if (!_slang_typeof_operation_ (op->children, space, ti, atoms))\r
                        return GL_FALSE;\r
                ti->can_be_referenced = GL_FALSE;\r
                ti->is_swizzled = GL_FALSE;\r
index 9f32b4c..b189dbe 100644 (file)
@@ -38,7 +38,7 @@ typedef struct slang_assembly_typeinfo_
        GLboolean is_swizzled;\r
        slang_swizzle swz;\r
        slang_type_specifier spec;\r
-       slang_operation *array_size;\r
+       GLuint array_len;\r
 } slang_assembly_typeinfo;\r
 \r
 GLboolean slang_assembly_typeinfo_construct (slang_assembly_typeinfo *);\r
@@ -49,7 +49,8 @@ GLvoid slang_assembly_typeinfo_destruct (slang_assembly_typeinfo *);
  * Returns GL_TRUE on success.\r
  * Returns GL_FALSE otherwise.\r
  */\r
-GLboolean _slang_typeof_operation (slang_operation *, slang_assembly_name_space *,\r
+GLboolean _slang_typeof_operation (slang_assemble_ctx *, slang_operation *, slang_assembly_typeinfo *);\r
+GLboolean _slang_typeof_operation_ (slang_operation *, slang_assembly_name_space *,\r
        slang_assembly_typeinfo *, slang_atom_pool *);\r
 \r
 /*\r
index 808cf9b..54aca6d 100644 (file)
@@ -134,7 +134,9 @@ int slang_translation_unit_construct2 (slang_translation_unit *unit, slang_assem
        unit->machine = mach;
        unit->free_machine = 0;
        unit->atom_pool = atoms;
-       unit->free_atom_pool = 0;
+       unit->free_atom_pool = 0;\r
+       slang_export_data_table_ctr (&unit->exp_data);\r
+       slang_active_uniforms_ctr (&unit->uniforms);
        return 1;
 }
 
@@ -156,7 +158,9 @@ void slang_translation_unit_destruct (slang_translation_unit *unit)
        {
                slang_atom_pool_destruct (unit->atom_pool);
                slang_alloc_free (unit->atom_pool);
-       }
+       }\r
+       slang_active_uniforms_dtr (&unit->uniforms);\r
+       slang_export_data_table_dtr (&unit->exp_data);
 }
 
 /* slang_info_log */
@@ -349,44 +353,99 @@ static int check_revision (slang_parse_ctx *C)
 
 static int parse_statement (slang_parse_ctx *, slang_output_ctx *, slang_operation *);
 static int parse_expression (slang_parse_ctx *, slang_output_ctx *, slang_operation *);
-static int parse_type_specifier (slang_parse_ctx *, slang_output_ctx *, slang_type_specifier *);
+static int parse_type_specifier (slang_parse_ctx *, slang_output_ctx *, slang_type_specifier *);\r
+\r
+static GLboolean parse_array_len (slang_parse_ctx *C, slang_output_ctx *O, GLuint *len)\r
+{\r
+       slang_operation array_size;\r
+       slang_assembly_name_space space;\r
+       GLboolean result;\r
+\r
+       if (!slang_operation_construct (&array_size))\r
+               return GL_FALSE;\r
+       if (!parse_expression (C, O, &array_size))\r
+       {\r
+               slang_operation_destruct (&array_size);\r
+               return GL_FALSE;\r
+       }\r
+\r
+       space.funcs = O->funs;\r
+       space.structs = O->structs;\r
+       space.vars = O->vars;\r
+       result = _slang_evaluate_int (O->assembly, O->machine, &space, &array_size, len, C->atoms);\r
+       slang_operation_destruct (&array_size);\r
+       return result;\r
+}\r
+\r
+static GLboolean calculate_var_size (slang_parse_ctx *C, slang_output_ctx *O, slang_variable *var)\r
+{\r
+       slang_storage_aggregate agg;\r
+\r
+       if (!slang_storage_aggregate_construct (&agg))\r
+               return GL_FALSE;\r
+       if (!_slang_aggregate_variable (&agg, &var->type.specifier, var->array_len, O->funs, O->structs,\r
+                       O->vars, O->machine, O->assembly, C->atoms))\r
+       {\r
+               slang_storage_aggregate_destruct (&agg);\r
+               return GL_FALSE;\r
+       }\r
+       var->size = _slang_sizeof_aggregate (&agg);\r
+       slang_storage_aggregate_destruct (&agg);\r
+       return GL_TRUE;\r
+}\r
+\r
+static GLboolean convert_to_array (slang_parse_ctx *C, slang_variable *var,\r
+       const slang_type_specifier *sp)\r
+{\r
+       /* sized array - mark it as array, copy the specifier to the array element and\r
+        * parse the expression */\r
+       var->type.specifier.type = slang_spec_array;\r
+       var->type.specifier._array = (slang_type_specifier *) slang_alloc_malloc (sizeof (\r
+               slang_type_specifier));\r
+       if (var->type.specifier._array == NULL)\r
+       {\r
+               slang_info_log_memory (C->L);\r
+               return GL_FALSE;\r
+       }\r
+       if (!slang_type_specifier_construct (var->type.specifier._array))\r
+       {\r
+               slang_alloc_free (var->type.specifier._array);\r
+               var->type.specifier._array = NULL;\r
+               slang_info_log_memory (C->L);\r
+               return GL_FALSE;\r
+       }\r
+       return slang_type_specifier_copy (var->type.specifier._array, sp);\r
+}
 
 /* structure field */
 #define FIELD_NONE 0
 #define FIELD_NEXT 1
 #define FIELD_ARRAY 2
 
-static int parse_struct_field_var (slang_parse_ctx *C, slang_output_ctx *O, slang_variable *var)
-{
+static GLboolean parse_struct_field_var (slang_parse_ctx *C, slang_output_ctx *O, slang_variable *var,\r
+       const slang_type_specifier *sp)
+{\r
        var->a_name = parse_identifier (C);
        if (var->a_name == SLANG_ATOM_NULL)
-               return 0;
+               return GL_FALSE;
 
        switch (*C->I++)
        {
-       case FIELD_NONE:
+       case FIELD_NONE:\r
+               if (!slang_type_specifier_copy (&var->type.specifier, sp))\r
+                       return GL_FALSE;
                break;
-       case FIELD_ARRAY:
-               var->array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
-               if (var->array_size == NULL)
-               {
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!slang_operation_construct (var->array_size))
-               {
-                       slang_alloc_free (var->array_size);
-                       var->array_size = NULL;
-                       return 0;
-               }
-               if (!parse_expression (C, O, var->array_size))
-                       return 0;
+       case FIELD_ARRAY:\r
+               if (!convert_to_array (C, var, sp))\r
+                       return GL_FALSE;
+               if (!parse_array_len (C, O, &var->array_len))\r
+                       return GL_FALSE;\r
                break;
        default:
-               return 0;
+               return GL_FALSE;
        }
 
-       return 1;
+       return calculate_var_size (C, O, var);
 }
 
 static int parse_struct_field (slang_parse_ctx *C, slang_output_ctx *O, slang_struct *st,
@@ -413,9 +472,7 @@ static int parse_struct_field (slang_parse_ctx *C, slang_output_ctx *O, slang_st
                if (!slang_variable_construct (var))
                        return 0;
                st->fields->num_variables++;
-               if (!slang_type_specifier_copy (&var->type.specifier, sp))
-                       return 0;
-               if (!parse_struct_field_var (C, &o, var))
+               if (!parse_struct_field_var (C, &o, var, sp))
                        return 0;
        }
        while (*C->I++ != FIELD_NONE);
@@ -467,7 +524,8 @@ static int parse_struct (slang_parse_ctx *C, slang_output_ctx *O, slang_struct *
                {
                        slang_type_specifier_destruct (&sp);
                        return 0;
-               }
+               }\r
+               slang_type_specifier_destruct (&sp);
        }
        while (*C->I++ != FIELD_NONE);
 
@@ -1215,8 +1273,6 @@ static int parse_expression (slang_parse_ctx *C, slang_output_ctx *O, slang_oper
 static int parse_parameter_declaration (slang_parse_ctx *C, slang_output_ctx *O,
        slang_variable *param)
 {
-       slang_storage_aggregate agg;
-
        /* parse and validate the parameter's type qualifiers (there can be two at most) because
         * not all combinations are valid */
        if (!parse_type_qualifier (C, &param->type.qualifier))
@@ -1261,36 +1317,30 @@ static int parse_parameter_declaration (slang_parse_ctx *C, slang_output_ctx *O,
 
        /* if the parameter is an array, parse its size (the size must be explicitly defined */
        if (*C->I++ == PARAMETER_ARRAY_PRESENT)
-       {
-               param->array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
-               if (param->array_size == NULL)
-               {
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!slang_operation_construct (param->array_size))
-               {
-                       slang_alloc_free (param->array_size);
-                       param->array_size = NULL;
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!parse_expression (C, O, param->array_size))
-                       return 0;
-               /* TODO: execute the array_size */
+       {\r
+               slang_type_specifier p;\r
+\r
+               if (!slang_type_specifier_construct (&p))\r
+                       return GL_FALSE;\r
+               if (!slang_type_specifier_copy (&p, &param->type.specifier))\r
+               {\r
+                       slang_type_specifier_destruct (&p);\r
+                       return GL_FALSE;\r
+               }\r
+               if (!convert_to_array (C, param, &p))\r
+               {\r
+                       slang_type_specifier_destruct (&p);\r
+                       return GL_FALSE;\r
+               }\r
+               slang_type_specifier_destruct (&p);\r
+               if (!parse_array_len (C, O, &param->array_len))\r
+                       return GL_FALSE;
        }
 
        /* calculate the parameter size */
-       if (!slang_storage_aggregate_construct (&agg))
-               return 0;
-       if (!_slang_aggregate_variable (&agg, &param->type.specifier, param->array_size, O->funs,
-                       O->structs, O->vars, O->machine, O->assembly, C->atoms))
-       {
-               slang_storage_aggregate_destruct (&agg);
-               return 0;
-       }
-       param->size = _slang_sizeof_aggregate (&agg);
-       slang_storage_aggregate_destruct (&agg);
+       if (!calculate_var_size (C, O, param))
+               return GL_FALSE;\r
+
        /* TODO: allocate the local address here? */
        return 1;
 }
@@ -1551,7 +1601,7 @@ static GLboolean initialize_global (slang_assemble_ctx *A, slang_variable *var)
        op_assign.children[1] = *var->initializer;
 
        /* insert the actual expression */
-       result = _slang_assemble_operation_ (A, &op_assign, slang_ref_forbid);
+       result = _slang_assemble_operation (A, &op_assign, slang_ref_forbid);
 
        /* carefully destroy the operations */
        op_assign.num_children = 0;
@@ -1649,79 +1699,29 @@ static int parse_init_declarator (slang_parse_ctx *C, slang_output_ctx *O,
                }
                if (!parse_expression (C, O, var->initializer))
                        return 0;
-               /* TODO: execute the initializer */
                break;
 #if 0
        case VARIABLE_ARRAY_UNKNOWN:
                /* unsized array - mark it as array and copy the specifier to the array element */
-               var->type.specifier.type = slang_spec_array;
-               var->type.specifier._array = (slang_type_specifier *) slang_alloc_malloc (sizeof (
-                       slang_type_specifier));
-               if (var->type.specifier._array == NULL)
-               {
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               slang_type_specifier_construct (var->type.specifier._array);
-               if (!slang_type_specifier_copy (var->type.specifier._array, &type->specifier))
-                       return 0;
+               if (!convert_to_array (C, var, &type->specifier))\r
+                       return GL_FALSE;
                break;
 #endif
        case VARIABLE_ARRAY_EXPLICIT:
-               /* sized array - mark it as array, copy the specifier to the array element and
-                * parse the expression */
-               var->type.specifier.type = slang_spec_array;
-               var->type.specifier._array = (slang_type_specifier *) slang_alloc_malloc (sizeof (
-                       slang_type_specifier));
-               if (var->type.specifier._array == NULL)
-               {
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!slang_type_specifier_construct (var->type.specifier._array))
-               {
-                       slang_alloc_free (var->type.specifier._array);
-                       var->type.specifier._array = NULL;
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!slang_type_specifier_copy (var->type.specifier._array, &type->specifier))
-                       return 0;
-               var->array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
-               if (var->array_size == NULL)
-               {
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!slang_operation_construct (var->array_size))
-               {
-                       slang_alloc_free (var->array_size);
-                       var->array_size = NULL;
-                       slang_info_log_memory (C->L);
-                       return 0;
-               }
-               if (!parse_expression (C, O, var->array_size))
-                       return 0;
+               if (!convert_to_array (C, var, &type->specifier))\r
+                       return GL_FALSE;\r
+               if (!parse_array_len (C, O, &var->array_len))\r
+                       return GL_FALSE;
                break;
        default:
                return 0;
        }
 
        /* allocate global address space for a variable with a known size */
-       if (C->global_scope && !(var->type.specifier.type == slang_spec_array && var->array_size == NULL))
+       if (C->global_scope && !(var->type.specifier.type == slang_spec_array && var->array_len == 0))
        {
-               slang_storage_aggregate agg;
-
-               if (!slang_storage_aggregate_construct (&agg))
-                       return 0;
-               if (!_slang_aggregate_variable (&agg, &var->type.specifier, var->array_size, O->funs,
-                               O->structs, O->vars, O->machine, O->assembly, C->atoms))
-               {
-                       slang_storage_aggregate_destruct (&agg);
-                       return 0;
-               }
-               var->size = _slang_sizeof_aggregate (&agg);
-               slang_storage_aggregate_destruct (&agg);
+               if (!calculate_var_size (C, O, var))\r
+                       return GL_FALSE;
                var->address = slang_var_pool_alloc (O->global_pool, var->size);
        }
 
@@ -2132,8 +2132,16 @@ int _slang_compile (const char *source, slang_translation_unit *unit, slang_unit
                                slang_translation_unit_destruct (&builtin_units[i]);
        }*/
        if (id != 0)
-               grammar_destroy (id);
+               grammar_destroy (id);\r
+\r
+       if (!success)\r
+               return 0;\r
+       unit->exp_data.atoms = unit->atom_pool;\r
+       if (!_slang_build_export_data_table (&unit->exp_data, &unit->globals))\r
+               return 0;\r
+       if (!_slang_gather_active_uniforms (&unit->uniforms, &unit->exp_data))\r
+               return 0;
 
-       return success;
+       return 1;
 }
 
index 8c7b96c..7695235 100644 (file)
@@ -60,7 +60,9 @@ typedef struct slang_translation_unit_
        struct slang_machine_ *machine;\r
        int free_machine;\r
        slang_atom_pool *atom_pool;\r
-       int free_atom_pool;
+       int free_atom_pool;\r
+       slang_export_data_table exp_data;\r
+       slang_active_uniforms uniforms;
 } slang_translation_unit;
 
 int slang_translation_unit_construct (slang_translation_unit *);\r
index 0828d23..30c15ff 100644 (file)
@@ -172,9 +172,8 @@ int slang_struct_equal (const slang_struct *x, const slang_struct *y)
                if (!slang_type_specifier_equal (&varx->type.specifier, &vary->type.specifier))\r
                        return 0;\r
                if (varx->type.specifier.type == slang_spec_array)\r
-               {\r
-                       /* TODO: compare array sizes */\r
-               }\r
+                       if (varx->array_len != vary->array_len)\r
+                               return GL_FALSE;\r
        }\r
        return 1;\r
 }\r
index ff042bb..6f56872 100644 (file)
@@ -269,7 +269,7 @@ int slang_variable_construct (slang_variable *var)
        if (!slang_fully_specified_type_construct (&var->type))\r
                return 0;\r
        var->a_name = SLANG_ATOM_NULL;\r
-       var->array_size = NULL;\r
+       var->array_len = 0;\r
        var->initializer = NULL;\r
        var->address = ~0;\r
        var->size = 0;\r
@@ -280,11 +280,6 @@ int slang_variable_construct (slang_variable *var)
 void slang_variable_destruct (slang_variable *var)\r
 {\r
        slang_fully_specified_type_destruct (&var->type);\r
-       if (var->array_size != NULL)\r
-       {\r
-               slang_operation_destruct (var->array_size);\r
-               slang_alloc_free (var->array_size);\r
-       }\r
        if (var->initializer != NULL)\r
        {\r
                slang_operation_destruct (var->initializer);\r
@@ -304,26 +299,7 @@ int slang_variable_copy (slang_variable *x, const slang_variable *y)
                return 0;\r
        }\r
        z.a_name = y->a_name;\r
-       if (y->array_size != NULL)\r
-       {\r
-               z.array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));\r
-               if (z.array_size == NULL)\r
-               {\r
-                       slang_variable_destruct (&z);\r
-                       return 0;\r
-               }\r
-               if (!slang_operation_construct (z.array_size))\r
-               {\r
-                       slang_alloc_free (z.array_size);\r
-                       slang_variable_destruct (&z);\r
-                       return 0;\r
-               }\r
-               if (!slang_operation_copy (z.array_size, y->array_size))\r
-               {\r
-                       slang_variable_destruct (&z);\r
-                       return 0;\r
-               }\r
-       }\r
+       z.array_len = y->array_len;\r
        if (y->initializer != NULL)\r
        {\r
                z.initializer = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));\r
@@ -364,3 +340,192 @@ slang_variable *_slang_locate_variable (slang_variable_scope *scope, slang_atom
        return NULL;\r
 }\r
 \r
+/*\r
+ * slang_active_uniforms\r
+ */\r
+\r
+GLvoid slang_active_uniforms_ctr (slang_active_uniforms *self)\r
+{\r
+       self->table = NULL;\r
+       self->count = 0;\r
+}\r
+\r
+GLvoid slang_active_uniforms_dtr (slang_active_uniforms *self)\r
+{\r
+       GLuint i;\r
+\r
+       for (i = 0; i < self->count; i++)\r
+               slang_alloc_free (self->table[i].name);\r
+       slang_alloc_free (self->table);\r
+}\r
+\r
+GLboolean slang_active_uniforms_add (slang_active_uniforms *self, slang_export_data_quant *q,\r
+       const char *name)\r
+{\r
+       const GLuint n = self->count;\r
+\r
+       self->table = (slang_active_uniform *) slang_alloc_realloc (self->table,\r
+               n * sizeof (slang_active_uniform), (n + 1) * sizeof (slang_active_uniform));\r
+       if (self->table == NULL)\r
+               return GL_FALSE;\r
+       self->table[n].quant = q;\r
+       self->table[n].name = slang_string_duplicate (name);\r
+       if (self->table[n].name == NULL)\r
+               return GL_FALSE;\r
+       self->count++;\r
+       return GL_TRUE;\r
+}\r
+\r
+static GLenum gl_type_from_specifier (const slang_type_specifier *type)\r
+{\r
+       switch (type->type)\r
+       {\r
+       case slang_spec_bool:\r
+               return GL_BOOL_ARB;\r
+       case slang_spec_bvec2:\r
+               return GL_BOOL_VEC2_ARB;\r
+       case slang_spec_bvec3:\r
+               return GL_BOOL_VEC3_ARB;\r
+       case slang_spec_bvec4:\r
+               return GL_BOOL_VEC4_ARB;\r
+       case slang_spec_int:\r
+               return GL_INT;\r
+       case slang_spec_ivec2:\r
+               return GL_INT_VEC2_ARB;\r
+       case slang_spec_ivec3:\r
+               return GL_INT_VEC3_ARB;\r
+       case slang_spec_ivec4:\r
+               return GL_INT_VEC4_ARB;\r
+       case slang_spec_float:\r
+               return GL_FLOAT;\r
+       case slang_spec_vec2:\r
+               return GL_FLOAT_VEC2_ARB;\r
+       case slang_spec_vec3:\r
+               return GL_FLOAT_VEC3_ARB;\r
+       case slang_spec_vec4:\r
+               return GL_FLOAT_VEC4_ARB;\r
+       case slang_spec_mat2:\r
+               return GL_FLOAT_MAT2_ARB;\r
+       case slang_spec_mat3:\r
+               return GL_FLOAT_MAT3_ARB;\r
+       case slang_spec_mat4:\r
+               return GL_FLOAT_MAT4_ARB;\r
+       case slang_spec_sampler1D:\r
+               return GL_SAMPLER_1D_ARB;\r
+       case slang_spec_sampler2D:\r
+               return GL_SAMPLER_2D_ARB;\r
+       case slang_spec_sampler3D:\r
+               return GL_SAMPLER_3D_ARB;\r
+       case slang_spec_samplerCube:\r
+               return GL_SAMPLER_CUBE_ARB;\r
+       case slang_spec_sampler1DShadow:\r
+               return GL_SAMPLER_1D_SHADOW_ARB;\r
+       case slang_spec_sampler2DShadow:\r
+               return GL_SAMPLER_2D_SHADOW_ARB;\r
+       case slang_spec_array:\r
+               return gl_type_from_specifier (type->_array);\r
+       default:\r
+               return GL_FLOAT;\r
+       }\r
+}\r
+\r
+static GLboolean build_quant (slang_export_data_quant *q, slang_variable *var)\r
+{\r
+       slang_type_specifier *spec = &var->type.specifier;\r
+\r
+       q->name = var->a_name;\r
+       q->size = var->size;\r
+       if (spec->type == slang_spec_array)\r
+       {\r
+               q->array_len = var->array_len;\r
+               q->size /= var->array_len;\r
+               spec = spec->_array;\r
+       }\r
+       if (spec->type == slang_spec_struct)\r
+       {\r
+               GLuint i;\r
+\r
+               q->u.field_count = spec->_struct->fields->num_variables;\r
+               q->structure = (slang_export_data_quant *) slang_alloc_malloc (\r
+                       q->u.field_count * sizeof (slang_export_data_quant));\r
+               if (q->structure == NULL)\r
+                       return GL_FALSE;\r
+\r
+               for (i = 0; i < q->u.field_count; i++)\r
+                       slang_export_data_quant_ctr (&q->structure[i]);\r
+               for (i = 0; i < q->u.field_count; i++)\r
+                       if (!build_quant (&q->structure[i], &spec->_struct->fields->variables[i]))\r
+                               return GL_FALSE;\r
+       }\r
+       else\r
+               q->u.basic_type = gl_type_from_specifier (spec);\r
+       return GL_TRUE;\r
+}\r
+\r
+GLboolean _slang_build_export_data_table (slang_export_data_table *tbl, slang_variable_scope *vars)\r
+{\r
+       GLuint i;\r
+\r
+       for (i = 0; i < vars->num_variables; i++)\r
+       {\r
+               slang_variable *var = &vars->variables[i];\r
+\r
+               if (var->type.qualifier == slang_qual_uniform)\r
+               {\r
+                       slang_export_data_entry *e = slang_export_data_table_add (tbl);\r
+                       if (e == NULL)\r
+                               return GL_FALSE;\r
+                       if (!build_quant (&e->quant, var))\r
+                               return GL_FALSE;\r
+                       e->access = slang_exp_uniform;\r
+                       e->address = var->address;\r
+               }\r
+       }\r
+\r
+       if (vars->outer_scope != NULL)\r
+               return _slang_build_export_data_table (tbl, vars->outer_scope);\r
+       return GL_TRUE;\r
+}\r
+\r
+static GLboolean insert_uniform (slang_active_uniforms *u, slang_export_data_quant *q, char *name,\r
+       slang_atom_pool *atoms)\r
+{\r
+       slang_string_concat (name, slang_atom_pool_id (atoms, q->name));\r
+       if (q->array_len != 0)\r
+               slang_string_concat (name, "[0]");\r
+\r
+       if (q->structure != NULL)\r
+       {\r
+               GLuint save, i;\r
+\r
+               slang_string_concat (name, ".");\r
+               save = slang_string_length (name);\r
+\r
+               for (i = 0; i < q->u.field_count; i++)\r
+               {\r
+                       if (!insert_uniform (u, &q->structure[i], name, atoms))\r
+                               return GL_FALSE;\r
+                       name[save] = '\0';\r
+               }\r
+\r
+               return GL_TRUE;\r
+       }\r
+\r
+       return slang_active_uniforms_add (u, q, name);\r
+}\r
+\r
+GLboolean _slang_gather_active_uniforms (slang_active_uniforms *u, slang_export_data_table *tbl)\r
+{\r
+       GLuint i;\r
+\r
+       for (i = 0; i < tbl->count; i++)\r
+       {\r
+               char name[1024] = "";\r
+\r
+               if (!insert_uniform (u, &tbl->entries[i].quant, name, tbl->atoms))\r
+                       return GL_FALSE;\r
+       }\r
+\r
+       return GL_TRUE;\r
+}\r
+\r
index 7ef8385..4261dd1 100644 (file)
@@ -25,6 +25,8 @@
 #if !defined SLANG_COMPILE_VARIABLE_H\r
 #define SLANG_COMPILE_VARIABLE_H\r
 \r
+#include "slang_export.h"\r
+\r
 #if defined __cplusplus\r
 extern "C" {\r
 #endif\r
@@ -110,7 +112,7 @@ typedef struct slang_variable_
 {\r
        slang_fully_specified_type type;\r
        slang_atom a_name;\r
-       struct slang_operation_ *array_size;    /* type: spec_array */\r
+       GLuint array_len;                                       /* type: spec_array */\r
        struct slang_operation_ *initializer;\r
        unsigned int address;\r
        unsigned int size;\r
@@ -123,6 +125,27 @@ int slang_variable_copy (slang_variable *, const slang_variable *);
 \r
 slang_variable *_slang_locate_variable (slang_variable_scope *, slang_atom a_name, GLboolean all);\r
 \r
+typedef struct\r
+{\r
+       slang_export_data_quant *quant;\r
+       char *name;\r
+} slang_active_uniform;\r
+\r
+typedef struct\r
+{\r
+       slang_active_uniform *table;\r
+       GLuint count;\r
+} slang_active_uniforms;\r
+\r
+GLvoid slang_active_uniforms_ctr (slang_active_uniforms *);\r
+GLvoid slang_active_uniforms_dtr (slang_active_uniforms *);\r
+GLboolean slang_active_uniforms_add (slang_active_uniforms *, slang_export_data_quant *,\r
+       const char *);\r
+\r
+GLboolean _slang_build_export_data_table (slang_export_data_table *, slang_variable_scope *);\r
+\r
+GLboolean _slang_gather_active_uniforms (slang_active_uniforms *, slang_export_data_table *);\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index 22dba01..06f0eef 100644 (file)
@@ -29,6 +29,9 @@
  */\r
 \r
 #include "imports.h"\r
+#include "context.h"\r
+#include "swrast/s_context.h"\r
+#include "colormac.h"\r
 #include "slang_utility.h"\r
 #include "slang_assemble.h"\r
 #include "slang_storage.h"\r
@@ -180,6 +183,9 @@ static void dump_instruction (FILE *f, slang_assembly *a, unsigned int i)
        case slang_asm_addr_multiply:\r
                fprintf (f, "addr_multiply");\r
                break;\r
+       case slang_vec4_tex2d:\r
+               fprintf (f, "vec4_tex2d");\r
+               break;\r
        case slang_asm_jump:\r
                fprintf (f, "jump\t%u", a->param[0]);\r
                break;\r
@@ -251,6 +257,21 @@ static void dump (const slang_assembly_file *file)
 \r
 #endif\r
 \r
+static void fetch_texel (GLuint sampler, const GLfloat texcoord[4], GLfloat lambda, GLfloat color[4])\r
+{\r
+       GET_CURRENT_CONTEXT(ctx);\r
+       SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+       GLchan rgba[4];\r
+\r
+       /* XXX: the function pointer is NULL! */\r
+       swrast->TextureSample[sampler] (ctx, ctx->Texture.Unit[sampler]._Current, 1,\r
+               (const GLfloat (*)[4]) texcoord, &lambda, &rgba);\r
+       color[0] = CHAN_TO_FLOAT(rgba[0]);\r
+       color[1] = CHAN_TO_FLOAT(rgba[1]);\r
+       color[2] = CHAN_TO_FLOAT(rgba[2]);\r
+       color[3] = CHAN_TO_FLOAT(rgba[3]);\r
+}\r
+\r
 int _slang_execute2 (const slang_assembly_file *file, slang_machine *mach)\r
 {\r
        slang_machine_slot *stack;\r
@@ -420,6 +441,16 @@ int _slang_execute2 (const slang_assembly_file *file, slang_machine *mach)
                        stack[mach->sp + 1]._addr *= stack[mach->sp]._addr;\r
                        mach->sp++;\r
                        break;\r
+               case slang_asm_vec4_tex2d:\r
+                       {\r
+                               GLfloat st[4] = { stack[mach->sp]._float, stack[mach->sp + 1]._float, 0.0f, 1.0f };\r
+                               GLuint sampler = (GLuint) stack[mach->sp + 2]._float;\r
+                               GLfloat *rgba = &mach->mem[stack[mach->sp + 3]._addr / 4]._float;\r
+\r
+                               fetch_texel (sampler, st, 0.0f, rgba);\r
+                       }\r
+                       mach->sp += 3;\r
+                       break;\r
                case slang_asm_jump:\r
                        mach->ip = a->param[0];\r
                        break;\r
diff --git a/src/mesa/shader/slang/slang_export.c b/src/mesa/shader/slang/slang_export.c
new file mode 100644 (file)
index 0000000..324dee2
--- /dev/null
@@ -0,0 +1,292 @@
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 2006  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+/**\r
+ * \file slang_export.c\r
+ * interface between assembly code and the application\r
+ * \author Michal Krol\r
+ */\r
+\r
+#include "imports.h"\r
+#include "slang_utility.h"\r
+#include "slang_export.h"\r
+\r
+/*\r
+ * slang_export_data_quant\r
+ */\r
+\r
+GLvoid slang_export_data_quant_ctr (slang_export_data_quant *self)\r
+{\r
+       self->name = SLANG_ATOM_NULL;\r
+       self->size = 0;\r
+       self->array_len = 0;\r
+       self->structure = NULL;\r
+       self->u.basic_type = GL_FLOAT;\r
+}\r
+\r
+GLvoid slang_export_data_quant_dtr (slang_export_data_quant *self)\r
+{\r
+       if (self->structure != NULL)\r
+       {\r
+               GLuint i;\r
+\r
+               for (i = 0; i < self->u.field_count; i++)\r
+                       slang_export_data_quant_dtr (&self->structure[i]);\r
+               slang_alloc_free (self->structure);\r
+       }\r
+}\r
+\r
+slang_export_data_quant *slang_export_data_quant_add_field (slang_export_data_quant *self)\r
+{\r
+       const GLuint n = self->u.field_count;\r
+\r
+       self->structure = (slang_export_data_quant *) slang_alloc_realloc (self->structure,\r
+               n * sizeof (slang_export_data_quant), (n + 1) * sizeof (slang_export_data_quant));\r
+       if (self->structure == NULL)\r
+               return NULL;\r
+       slang_export_data_quant_ctr (&self->structure[n]);\r
+       self->u.field_count++;\r
+       return &self->structure[n];\r
+}\r
+\r
+/*\r
+ * slang_export_data_entry\r
+ */\r
+\r
+GLvoid slang_export_data_entry_ctr (slang_export_data_entry *self)\r
+{\r
+       slang_export_data_quant_ctr (&self->quant);\r
+       self->access = slang_exp_uniform;\r
+       self->address = ~0;\r
+}\r
+\r
+GLvoid slang_export_data_entry_dtr (slang_export_data_entry *self)\r
+{\r
+       slang_export_data_quant_dtr (&self->quant);\r
+}\r
+\r
+/*\r
+ * slang_export_data_table\r
+ */\r
+\r
+GLvoid slang_export_data_table_ctr (slang_export_data_table *self)\r
+{\r
+       self->entries = NULL;\r
+       self->count = 0;\r
+       self->atoms = NULL;\r
+}\r
+\r
+GLvoid slang_export_data_table_dtr (slang_export_data_table *self)\r
+{\r
+       if (self->entries != NULL)\r
+       {\r
+               GLuint i;\r
+\r
+               for (i = 0; i < self->count; i++)\r
+                       slang_export_data_entry_dtr (&self->entries[i]);\r
+               slang_alloc_free (self->entries);\r
+       }\r
+}\r
+\r
+slang_export_data_entry *slang_export_data_table_add (slang_export_data_table *self)\r
+{\r
+       const GLuint n = self->count;\r
+\r
+       self->entries = (slang_export_data_entry *) slang_alloc_realloc (self->entries,\r
+               n * sizeof (slang_export_data_entry), (n + 1) * sizeof (slang_export_data_entry));\r
+       if (self->entries == NULL)\r
+               return NULL;\r
+       slang_export_data_entry_ctr (&self->entries[n]);\r
+       self->count++;\r
+       return &self->entries[n];\r
+}\r
+\r
+/*\r
+ * _slang_find_exported_data()\r
+ */\r
+\r
+#define EXTRACT_ERROR 0\r
+#define EXTRACT_BASIC 1\r
+#define EXTRACT_ARRAY 2\r
+#define EXTRACT_STRUCT 3\r
+#define EXTRACT_STRUCT_ARRAY 4\r
+\r
+#define EXTRACT_MAXLEN 255\r
+\r
+static GLuint extract_name (const char *name, char *parsed, GLuint *element, const char **end)\r
+{\r
+       GLuint i;\r
+\r
+       if (name[0] >= 'a' && name[0] <= 'z' || name[0] >= 'A' && name[0] <= 'Z' || name[0] == '_')\r
+       {\r
+               parsed[0] = name[0];\r
+\r
+               for (i = 1; i < EXTRACT_MAXLEN; i++)\r
+               {\r
+                       if (name[i] >= 'a' && name[i] <= 'z' || name[i] >= 'A' && name[i] <= 'Z' ||\r
+                               name[i] >= '0' && name[i] <= '9' || name[0] == '_')\r
+                       {\r
+                               parsed[i] = name[i];\r
+                       }\r
+                       else\r
+                       {\r
+                               if (name[i] == '\0')\r
+                               {\r
+                                       parsed[i] = '\0';\r
+                                       return EXTRACT_BASIC;\r
+                               }\r
+                               if (name[i] == '.')\r
+                               {\r
+                                       parsed[i] = '\0';\r
+                                       *end = &name[i + 1];\r
+                                       return EXTRACT_STRUCT;\r
+                               }\r
+                               if (name[i] == '[')\r
+                               {\r
+                                       parsed[i] = '\0';\r
+                                       i++;\r
+                                       if (name[i] >= '0' && name[i] <= '9')\r
+                                       {\r
+                                               *element = name[i] - '0';\r
+                                               for (i++; ; i++)\r
+                                               {\r
+                                                       if (name[i] >= '0' && name[i] <= '9')\r
+                                                               *element = *element * 10 + (name[i] - '0');\r
+                                                       else\r
+                                                       {\r
+                                                               if (name[i] == ']')\r
+                                                               {\r
+                                                                       i++;\r
+                                                                       if (name[i] == '.')\r
+                                                                       {\r
+                                                                               *end = &name[i + 1];\r
+                                                                               return EXTRACT_STRUCT_ARRAY;\r
+                                                                       }\r
+                                                                       *end = &name[i];\r
+                                                                       return EXTRACT_ARRAY;\r
+                                                               }\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+       return EXTRACT_ERROR;\r
+}\r
+\r
+static GLboolean validate_extracted (slang_export_data_quant *q, GLuint element, GLuint extr)\r
+{\r
+       switch (extr)\r
+       {\r
+       case EXTRACT_BASIC:\r
+               return GL_TRUE;\r
+       case EXTRACT_ARRAY:\r
+               return element < q->array_len;\r
+       case EXTRACT_STRUCT:\r
+               return q->structure != NULL;\r
+       case EXTRACT_STRUCT_ARRAY:\r
+               return q->structure != NULL && element < q->array_len;\r
+       }\r
+       return GL_FALSE;\r
+}\r
+\r
+static GLuint calculate_offset (slang_export_data_quant *q, GLuint element)\r
+{\r
+       if (q->array_len != 0)\r
+               return element * q->size;\r
+       return 0;\r
+}\r
+\r
+static GLboolean find_exported_data (slang_export_data_quant *q, const char *name,\r
+       slang_export_data_quant **quant, GLuint *offset, slang_atom_pool *atoms)\r
+{\r
+       char parsed[EXTRACT_MAXLEN];\r
+       GLuint result, element, i;\r
+       const char *end;\r
+       slang_atom atom;\r
+\r
+       result = extract_name (name, parsed, &element, &end);\r
+       if (result == EXTRACT_ERROR)\r
+               return GL_FALSE;\r
+\r
+       atom = slang_atom_pool_atom (atoms, parsed);\r
+       if (atom == SLANG_ATOM_NULL)\r
+               return GL_FALSE;\r
+\r
+       for (i = 0; i < q->u.field_count; i++)\r
+               if (q->structure[i].name == atom)\r
+               {\r
+                       if (!validate_extracted (&q->structure[i], element, result))\r
+                               return GL_FALSE;\r
+                       *offset += calculate_offset (&q->structure[i], element);\r
+                       if (result == EXTRACT_BASIC || result == EXTRACT_ARRAY)\r
+                       {\r
+                               if (*end != '\0')\r
+                                       return GL_FALSE;\r
+                               *quant = &q->structure[i];\r
+                               return GL_TRUE;\r
+                       }\r
+                       return find_exported_data (&q->structure[i], end, quant, offset, atoms);\r
+               }\r
+       return GL_FALSE;\r
+}\r
+\r
+GLboolean _slang_find_exported_data (slang_export_data_table *table, const char *name,\r
+       slang_export_data_entry **entry, slang_export_data_quant **quant, GLuint *offset)\r
+{\r
+       char parsed[EXTRACT_MAXLEN];\r
+       GLuint result, element, i;\r
+       const char *end;\r
+       slang_atom atom;\r
+\r
+       result = extract_name (name, parsed, &element, &end);\r
+       if (result == EXTRACT_ERROR)\r
+               return GL_FALSE;\r
+\r
+       atom = slang_atom_pool_atom (table->atoms, parsed);\r
+       if (atom == SLANG_ATOM_NULL)\r
+               return GL_FALSE;\r
+\r
+       for (i = 0; i < table->count; i++)\r
+               if (table->entries[i].quant.name == atom)\r
+               {\r
+                       if (!validate_extracted (&table->entries[i].quant, element, result))\r
+                               return GL_FALSE;\r
+                       *entry = &table->entries[i];\r
+                       *offset = calculate_offset (&table->entries[i].quant, element);\r
+                       if (result == EXTRACT_BASIC || result == EXTRACT_ARRAY)\r
+                       {\r
+                               if (*end != '\0')\r
+                                       return GL_FALSE;\r
+                               *quant = &table->entries[i].quant;\r
+                               return GL_TRUE;\r
+                       }\r
+                       return find_exported_data (&table->entries[i].quant, end, quant, offset, table->atoms);\r
+               }\r
+       return GL_FALSE;\r
+}\r
+\r
diff --git a/src/mesa/shader/slang/slang_export.h b/src/mesa/shader/slang/slang_export.h
new file mode 100644 (file)
index 0000000..57e7d51
--- /dev/null
@@ -0,0 +1,114 @@
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 2006  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#if !defined SLANG_EXPORT_H\r
+#define SLANG_EXPORT_H\r
+\r
+#if defined __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*\r
+ * Basic data quantity to transfer between application and assembly.\r
+ * The <size> is the actual size of the data quantity including padding, if any. It is\r
+ * used to calculate offsets from the beginning of the data.\r
+ * The <array_len> is not 0, the data quantity is an array of <array_len> size.\r
+ * If the <structure> is not NULL, the data quantity is a struct. The <basic_type> is\r
+ * invalid and the <field_count> holds the size of the <structure> array.\r
+ * The <basic_type> values match those of <type> parameter for glGetActiveUniformARB.\r
+ */\r
+\r
+typedef struct slang_export_data_quant_\r
+{\r
+       slang_atom name;\r
+       GLuint size;\r
+       GLuint array_len;\r
+       struct slang_export_data_quant_ *structure;\r
+       union\r
+       {\r
+               GLenum basic_type;\r
+               GLuint field_count;\r
+       } u;\r
+} slang_export_data_quant;\r
+\r
+GLvoid slang_export_data_quant_ctr (slang_export_data_quant *);\r
+GLvoid slang_export_data_quant_dtr (slang_export_data_quant *);\r
+slang_export_data_quant *slang_export_data_quant_add_field (slang_export_data_quant *);\r
+\r
+/*\r
+ * Data access pattern. Specifies how data is accessed at what frequency.\r
+ */\r
+\r
+typedef enum\r
+{\r
+       slang_exp_uniform,\r
+       slang_exp_varying,\r
+       slang_exp_attribute\r
+} slang_export_data_access;\r
+\r
+/*\r
+ * Data export entry. Holds the data type information, access pattern and base address.\r
+ */\r
+\r
+typedef struct\r
+{\r
+       slang_export_data_quant quant;\r
+       slang_export_data_access access;\r
+       GLuint address;\r
+} slang_export_data_entry;\r
+\r
+GLvoid slang_export_data_entry_ctr (slang_export_data_entry *);\r
+GLvoid slang_export_data_entry_dtr (slang_export_data_entry *);\r
+\r
+/*\r
+ * Data export table. Holds <count> elements in <entries> array.\r
+ */\r
+\r
+typedef struct\r
+{\r
+       slang_export_data_entry *entries;\r
+       GLuint count;\r
+       slang_atom_pool *atoms;\r
+} slang_export_data_table;\r
+\r
+GLvoid slang_export_data_table_ctr (slang_export_data_table *);\r
+GLvoid slang_export_data_table_dtr (slang_export_data_table *);\r
+slang_export_data_entry *slang_export_data_table_add (slang_export_data_table *);\r
+\r
+/*\r
+ * _slang_find_exported_data()\r
+ *\r
+ * Parses the name string and returns corresponding data entry, data quantity and offset.\r
+ * Returns GL_TRUE if the data is found, returns GL_FALSE otherwise.\r
+ */\r
+\r
+GLboolean _slang_find_exported_data (slang_export_data_table *, const char *,\r
+       slang_export_data_entry **, slang_export_data_quant **, GLuint *);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif\r
+\r
diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c
new file mode 100644 (file)
index 0000000..c4303ac
--- /dev/null
@@ -0,0 +1,186 @@
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 2006  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+/**\r
+ * \file slang_link.c\r
+ * slang linker\r
+ * \author Michal Krol\r
+ */\r
+\r
+#include "imports.h"\r
+#include "slang_utility.h"\r
+#include "slang_compile.h"\r
+#include "slang_export.h"\r
+#include "slang_link.h"\r
+\r
+/*\r
+ * slang_uniform_bindings\r
+ */\r
+\r
+static GLvoid slang_uniform_bindings_ctr (slang_uniform_bindings *self)\r
+{\r
+       self->table = NULL;\r
+       self->count = 0;\r
+}\r
+\r
+static GLvoid slang_uniform_bindings_dtr (slang_uniform_bindings *self)\r
+{\r
+       GLuint i;\r
+\r
+       for (i = 0; i < self->count; i++)\r
+               slang_alloc_free (self->table[i].name);\r
+       slang_alloc_free (self->table);\r
+}\r
+\r
+static GLboolean slang_uniform_bindings_add (slang_uniform_bindings *self, slang_export_data_quant *q,\r
+       const char *name, GLuint index, GLuint address)\r
+{\r
+       const GLuint n = self->count;\r
+       GLuint i;\r
+\r
+       for (i = 0; i < n; i++)\r
+               if (slang_string_compare (self->table[i].name, name) == 0)\r
+               {\r
+                       self->table[i].address[index] = address;\r
+                       return GL_TRUE;\r
+               }\r
+\r
+       self->table = (slang_uniform_binding *) slang_alloc_realloc (self->table,\r
+               n * sizeof (slang_uniform_binding), (n + 1) * sizeof (slang_uniform_binding));\r
+       if (self->table == NULL)\r
+               return GL_FALSE;\r
+       self->table[n].quant = q;\r
+       self->table[n].name = slang_string_duplicate (name);\r
+       for (i = 0; i < SLANG_UNIFORM_BINDING_MAX; i++)\r
+               self->table[n].address[i] = ~0;\r
+       self->table[n].address[index] = address;\r
+       if (self->table[n].name == NULL)\r
+               return GL_FALSE;\r
+       self->count++;\r
+       return GL_TRUE;\r
+}\r
+\r
+static GLboolean insert_binding (slang_uniform_bindings *bind, slang_export_data_quant *q,\r
+       char *name, slang_atom_pool *atoms, GLuint index, GLuint addr)\r
+{\r
+       GLuint count, i;\r
+\r
+       slang_string_concat (name, slang_atom_pool_id (atoms, q->name));\r
+\r
+       if (q->array_len == 0)\r
+               count = 1;\r
+       else\r
+               count = q->array_len;\r
+\r
+       for (i = 0; i < count; i++)\r
+       {\r
+               GLuint save;\r
+\r
+               save = slang_string_length (name);\r
+               if (q->array_len != 0)\r
+                       _mesa_sprintf (name + slang_string_length (name), "[%d]", i);\r
+\r
+               if (q->structure != NULL)\r
+               {\r
+                       GLuint save, i;\r
+\r
+                       slang_string_concat (name, ".");\r
+                       save = slang_string_length (name);\r
+\r
+                       for (i = 0; i < q->u.field_count; i++)\r
+                       {\r
+                               if (!insert_binding (bind, &q->structure[i], name, atoms, index, addr))\r
+                                       return GL_FALSE;\r
+                               name[save] = '\0';\r
+                               addr += q->structure[i].size;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       if (!slang_uniform_bindings_add (bind, q, name, index, addr))\r
+                               return GL_FALSE;\r
+                       addr += q->size;\r
+               }\r
+               name[save] = '\0';\r
+       }\r
+\r
+       return GL_TRUE;\r
+}\r
+\r
+static GLboolean gather_uniform_bindings (slang_uniform_bindings *bind, slang_export_data_table *tbl,\r
+       GLuint index)\r
+{\r
+       GLuint i;\r
+\r
+       for (i = 0; i < tbl->count; i++)\r
+       {\r
+               char name[1024] = "";\r
+\r
+               if (!insert_binding (bind, &tbl->entries[i].quant, name, tbl->atoms, index,\r
+                               tbl->entries[i].address))\r
+                       return GL_FALSE;\r
+       }\r
+\r
+       return GL_TRUE;\r
+}\r
+\r
+/*\r
+ * slang_program\r
+ */\r
+\r
+GLvoid slang_program_ctr (slang_program *self)\r
+{\r
+       slang_uniform_bindings_ctr (&self->uniforms);\r
+}\r
+\r
+GLvoid slang_program_dtr (slang_program *self)\r
+{\r
+       slang_uniform_bindings_dtr (&self->uniforms);\r
+}\r
+\r
+/*\r
+ * _slang_link()\r
+ */\r
+\r
+GLboolean _slang_link (slang_program *prog, slang_translation_unit **units, GLuint count)\r
+{\r
+       GLuint i;\r
+\r
+       for (i = 0; i < count; i++)\r
+       {\r
+               GLuint index;\r
+\r
+               if (units[i]->type == slang_unit_fragment_shader)\r
+                       index = SLANG_UNIFORM_BINDING_FRAGMENT;\r
+               else\r
+                       index = SLANG_UNIFORM_BINDING_VERTEX;\r
+\r
+               if (!gather_uniform_bindings (&prog->uniforms, &units[i]->exp_data, index))\r
+                       return GL_FALSE;\r
+               prog->machines[index] = units[i]->machine;\r
+       }\r
+\r
+       return GL_TRUE;\r
+}\r
+\r
diff --git a/src/mesa/shader/slang/slang_link.h b/src/mesa/shader/slang/slang_link.h
new file mode 100644 (file)
index 0000000..7395c77
--- /dev/null
@@ -0,0 +1,68 @@
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 2006  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#if !defined SLANG_LINK_H\r
+#define SLANG_LINK_H\r
+\r
+#include "slang_assemble.h"\r
+#include "slang_execute.h"\r
+\r
+#if defined __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#define SLANG_UNIFORM_BINDING_VERTEX 0\r
+#define SLANG_UNIFORM_BINDING_FRAGMENT 1\r
+#define SLANG_UNIFORM_BINDING_MAX 2\r
+\r
+typedef struct\r
+{\r
+       slang_export_data_quant *quant;\r
+       char *name;\r
+       GLuint address[SLANG_UNIFORM_BINDING_MAX];\r
+} slang_uniform_binding;\r
+\r
+typedef struct\r
+{\r
+       slang_uniform_binding *table;\r
+       GLuint count;\r
+} slang_uniform_bindings;\r
+\r
+typedef struct\r
+{\r
+       slang_uniform_bindings uniforms;\r
+       slang_machine *machines[SLANG_UNIFORM_BINDING_MAX];\r
+} slang_program;\r
+\r
+GLvoid slang_program_ctr (slang_program *);\r
+GLvoid slang_program_dtr (slang_program *);\r
+\r
+GLboolean _slang_link (slang_program *, slang_translation_unit **, GLuint);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif\r
+\r
index 2654ee0..4afee2c 100644 (file)
@@ -130,13 +130,13 @@ static GLboolean aggregate_variables (slang_storage_aggregate *agg, slang_variab
 
        for (i = 0; i < vars->num_variables; i++)
                if (!_slang_aggregate_variable (agg, &vars->variables[i].type.specifier,
-                               vars->variables[i].array_size, funcs, structs, globals, mach, file, atoms))
+                               vars->variables[i].array_len, funcs, structs, globals, mach, file, atoms))
                        return GL_FALSE;
        return GL_TRUE;
 }
 \r
-static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmach,\r
-       slang_assembly_name_space *space, slang_operation *array_size, GLuint *plength,\r
+GLboolean _slang_evaluate_int (slang_assembly_file *file, slang_machine *pmach,\r
+       slang_assembly_name_space *space, slang_operation *array_size, GLuint *pint,\r
        slang_atom_pool *atoms)\r
 {\r
        slang_assembly_file_restore_point point;\r
@@ -166,7 +166,7 @@ static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmac
                return GL_FALSE;\r
 \r
        /* insert the actual expression */\r
-       if (!_slang_assemble_operation_ (&A, array_size, slang_ref_forbid))\r
+       if (!_slang_assemble_operation (&A, array_size, slang_ref_forbid))\r
                return GL_FALSE;\r
        if (!slang_assembly_file_push (file, slang_asm_exit))\r
                return GL_FALSE;\r
@@ -176,8 +176,7 @@ static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmac
                return GL_FALSE;\r
 \r
        /* the evaluated expression is on top of the stack */\r
-       *plength = (GLuint) mach.mem[mach.sp + SLANG_MACHINE_GLOBAL_SIZE]._float;\r
-       /* TODO: check if 0 < arr->length <= 65535 */\r
+       *pint = (GLuint) mach.mem[mach.sp + SLANG_MACHINE_GLOBAL_SIZE]._float;\r
 \r
        /* restore the old assembly */\r
        if (!slang_assembly_file_restore_point_load (file, &point))\r
@@ -187,7 +186,7 @@ static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmac
 }\r
 
 GLboolean _slang_aggregate_variable (slang_storage_aggregate *agg, slang_type_specifier *spec,
-       slang_operation *array_size, slang_function_scope *funcs, slang_struct_scope *structs,
+       GLuint array_len, slang_function_scope *funcs, slang_struct_scope *structs,
        slang_variable_scope *vars, slang_machine *mach, slang_assembly_file *file,\r
        slang_atom_pool *atoms)
 {
@@ -236,7 +235,6 @@ GLboolean _slang_aggregate_variable (slang_storage_aggregate *agg, slang_type_sp
        case slang_spec_array:
                {
                        slang_storage_array *arr;\r
-                       slang_assembly_name_space space;
 
                        arr = slang_storage_aggregate_push_new (agg);
                        if (arr == NULL)
@@ -251,14 +249,11 @@ GLboolean _slang_aggregate_variable (slang_storage_aggregate *agg, slang_type_sp
                                arr->aggregate = NULL;\r
                                return GL_FALSE;\r
                        }
-                       if (!_slang_aggregate_variable (arr->aggregate, spec->_array, NULL, funcs, structs,\r
+                       if (!_slang_aggregate_variable (arr->aggregate, spec->_array, 0, funcs, structs,\r
                                        vars, mach, file, atoms))
                                return GL_FALSE;\r
-                       space.funcs = funcs;\r
-                       space.structs = structs;\r
-                       space.vars = vars;\r
-                       if (!eval_array_size (file, mach, &space, array_size, &arr->length, atoms))\r
-                               return GL_FALSE;
+                       arr->length = array_len;\r
+                       /* TODO: check if 0 < arr->length <= 65535 */
                }
                return GL_TRUE;
        default:
index 84206d0..2a1ddff 100644 (file)
@@ -85,9 +85,12 @@ GLboolean slang_storage_aggregate_construct (slang_storage_aggregate *);
 GLvoid slang_storage_aggregate_destruct (slang_storage_aggregate *);
 
 GLboolean _slang_aggregate_variable (slang_storage_aggregate *, struct slang_type_specifier_ *,
-       struct slang_operation_ *, struct slang_function_scope_ *, slang_struct_scope *,
+       GLuint, struct slang_function_scope_ *, slang_struct_scope *,
        slang_variable_scope *, struct slang_machine_ *, struct slang_assembly_file_ *,\r
-       slang_atom_pool *);
+       slang_atom_pool *);\r
+\r
+GLboolean _slang_evaluate_int (struct slang_assembly_file_ *, struct slang_machine_ *,\r
+       struct slang_assembly_name_space_ *, struct slang_operation_ *, GLuint *, slang_atom_pool *);
 
 /*
  * Returns total size (in machine units) of the given aggregate.
index 250e44d..dfef696 100644 (file)
@@ -200,7 +200,9 @@ SLANG_SOURCES =     \
        shader/slang/slang_compile_struct.c     \
        shader/slang/slang_compile_variable.c   \
        shader/slang/slang_execute.c    \
+       shader/slang/slang_export.c     \
        shader/slang/slang_library_noise.c      \
+       shader/slang/slang_link.c       \
        shader/slang/slang_preprocess.c \
        shader/slang/slang_storage.c    \
        shader/slang/slang_utility.c
index 6d846fc..4ed137f 100644 (file)
@@ -522,10 +522,18 @@ SOURCE=..\..\..\..\src\mesa\shader\slang\slang_execute.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\src\mesa\shader\slang\slang_export.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\src\mesa\shader\slang\slang_library_noise.c\r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\src\mesa\shader\slang\slang_link.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\src\mesa\shader\slang\slang_preprocess.c\r
 # End Source File\r
 # Begin Source File\r
@@ -1231,10 +1239,18 @@ SOURCE=..\..\..\..\src\mesa\shader\slang\slang_execute.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\src\mesa\shader\slang\slang_export.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\src\mesa\shader\slang\slang_library_noise.h\r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\src\mesa\shader\slang\slang_link.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\src\mesa\shader\slang\slang_mesa.h\r
 # End Source File\r
 # Begin Source File\r