diff --git a/extern/ppm.lua b/extern/ppm.lua new file mode 100644 index 0000000000000000000000000000000000000000..c48ec0e2f6c6df9cccce228c9350573d0f187a02 --- /dev/null +++ b/extern/ppm.lua @@ -0,0 +1,47 @@ +local spr = app.activeSprite + +if not spr then + app.alert("No active sprite") + return +end + +local path = app.fs.filePath(spr.filename) +local name = app.fs.fileTitle(spr.filename) + +if path == "" then + path = app.fs.userDocsPath +end + +local out_path = app.fs.joinPath(path, name .. ".ppm") + +local img = Image(spr.width, spr.height, ColorMode.RGB) + +-- Render visible layers / current frame into one image +img:drawSprite(spr, app.activeFrame.frameNumber) + +local file = io.open(out_path, "wb") + +if not file then + app.alert("Could not write file:\n" .. out_path) + return +end + +-- PPM binary format, P6 +file:write("P6\n") +file:write(tostring(spr.width) .. " " .. tostring(spr.height) .. "\n") +file:write("255\n") + +for y = 0, spr.height - 1 do + for x = 0, spr.width - 1 do + local pixel = img:getPixel(x, y) + local c = Color(pixel) + + file:write(string.char(c.red)) + file:write(string.char(c.green)) + file:write(string.char(c.blue)) + end +end + +file:close() + +app.alert("Exported PPM:\n" .. out_path) diff --git a/main.c b/main.c index dd4f4b8b6f7af43f3282c3a5cdb5af3aa7cfe3bd..26bc415c52df537c6dfd3cc24644abd7fbc51339 100644 --- a/main.c +++ b/main.c @@ -20,10 +20,82 @@ float x_offset; float y_offset; float cube_angle; + GLuint texture_id; } Game; Game game = {0}; +unsigned char* load_ppm(const char* filename, int* width, int* height) { + FILE* fp = fopen(filename, "rb"); + if (!fp) { + fprintf(stderr, "Unable to open file '%s'\n", filename); + return NULL; + } + + char header[3]; + if (!fgets(header, sizeof(header), fp) || header[0] != 'P' || header[1] != '6') { + fprintf(stderr, "Invalid PPM file (must be P6)\n"); + fclose(fp); + return NULL; + } + + // Skip comments + int c = getc(fp); + while (c == '#') { + while (getc(fp) != '\n'); + c = getc(fp); + } + ungetc(c, fp); + + if (fscanf(fp, "%d %d", width, height) != 2) { + fprintf(stderr, "Invalid PPM dimensions\n"); + fclose(fp); + return NULL; + } + + int max_val; + if (fscanf(fp, "%d", &max_val) != 1 || max_val != 255) { + fprintf(stderr, "Invalid PPM max value\n"); + fclose(fp); + return NULL; + } + + while (getc(fp) != '\n'); // skip single whitespace + + unsigned char* data = (unsigned char*)malloc((*width) * (*height) * 3); + if (!data) { + fprintf(stderr, "Memory allocation failed\n"); + fclose(fp); + return NULL; + } + + if (fread(data, 1, (*width) * (*height) * 3, fp) != (size_t)((*width) * (*height) * 3)) { + fprintf(stderr, "Error reading PPM data\n"); + free(data); + fclose(fp); + return NULL; + } + + fclose(fp); + return data; +} + +void init_texture(void) { + int width, height; + unsigned char* data = load_ppm("textures/test.ppm", &width, &height); + if (!data) return; + + glGenTextures(1, &game.texture_id); + glBindTexture(GL_TEXTURE_2D, game.texture_id); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); + + free(data); +} + void render_text(float x, float y, void* font, const char* string) { glRasterPos2f(x, y); for (const char* c = string; *c != '\0'; c++) { @@ -32,14 +104,27 @@ } } void draw_cube(void) { + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, game.texture_id); glBegin(GL_QUADS); - // Front Face (White) + // Front Face (Textured) glColor3f(1.0f, 1.0f, 1.0f); - glVertex3f(-0.1f, -0.1f, 0.1f); - glVertex3f( 0.1f, -0.1f, 0.1f); - glVertex3f( 0.1f, 0.1f, 0.1f); - glVertex3f(-0.1f, 0.1f, 0.1f); + + // Backface + glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, -0.1f, 0.1f); + glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.1f, -0.1f, 0.1f); + glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.1f, 0.1f, 0.1f); + glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.1f, 0.1f, 0.1f); + + // Top face + glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.1f, 0.1f, -0.1f); + glTexCoord2f(1.0f, 0.0f); glVertex3f(-0.1f, 0.1f, 0.1f); + glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.1f, 0.1f, 0.1f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.1f, 0.1f, -0.1f); + glEnd(); + glDisable(GL_TEXTURE_2D); + glBegin(GL_QUADS); // Back Face (Yellow) glColor3f(1.0f, 1.0f, 0.0f); glVertex3f(-0.1f, -0.1f, -0.1f); @@ -226,6 +311,7 @@ glutInitWindowPosition(x, y); glutCreateWindow("floating"); init_display(); + init_texture(); game.last_time = glutGet(GLUT_ELAPSED_TIME); diff --git a/textures/test.ase b/textures/test.ase new file mode 100644 index 0000000000000000000000000000000000000000..e9912ca0000993e0eb814cc2b8f2ebd1a583a5d1 Binary files /dev/null and b/textures/test.ase differ diff --git a/textures/test.ppm b/textures/test.ppm new file mode 100644 index 0000000000000000000000000000000000000000..e8234d2056dabb1ced3a3be543d318dfca49feaa --- /dev/null +++ b/textures/test.ppm @@ -0,0 +1,4 @@ +P6 +64 64 +255 +ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&c›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿRK$c›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿc›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&c›ÿc›ÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ÿÿÿÿÿÿßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq&ßq& \ No newline at end of file