diff options
author | Cristhofer Travieso <cristhofert97@gmail.com> | 2012-10-03 19:55:06 (GMT) |
---|---|---|
committer | Cristhofer Travieso <cristhofert97@gmail.com> | 2012-10-03 19:55:06 (GMT) |
commit | 236da2e52e2f70eec5d4a04cdb40648fc5048a87 (patch) | |
tree | 2d76c3bb12f66b99db5b26839dd215434bc587ee | |
parent | 09cb7798978a1664a54bbcf27a43910c6d540b10 (diff) |
Add images, update glucosa and test glucosa
-rw-r--r-- | activity.py | 56 | ||||
-rw-r--r-- | activity/activity.info | 2 | ||||
-rw-r--r-- | game.py | 21 | ||||
-rw-r--r-- | glucosa.py | 807 | ||||
-rw-r--r-- | icons/help-icon.svg | 14 | ||||
-rw-r--r-- | icons/new-game.svg | 103 | ||||
-rw-r--r-- | icons/score.svg | 133 | ||||
-rw-r--r-- | images/aceituna.png | bin | 0 -> 2977 bytes | |||
-rw-r--r-- | images/ant.svg | 522 |
9 files changed, 1369 insertions, 289 deletions
diff --git a/activity.py b/activity.py index 3ff1d71..aa86541 100644 --- a/activity.py +++ b/activity.py @@ -14,18 +14,18 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -from gi.repository import Gtk +import gtk -from sugar3.activity import activity -from sugar3.activity.widgets import StopButton -from sugar3.activity.widgets import ActivityToolbarButton -from sugar3.graphics.toolbarbox import ToolbarBox -from sugar3.graphics.toolbutton import ToolButton +from sugar.activity import activity +from sugar.activity.widgets import StopButton +from sugar.activity.widgets import ActivityToolbarButton +from sugar.graphics.toolbarbox import ToolbarBox +from sugar.graphics.toolbutton import ToolButton import game -class Activity(activity.Activity): +class AntFarm(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle, True) @@ -35,36 +35,15 @@ class Activity(activity.Activity): activity_button = ActivityToolbarButton(self) toolbarbox.toolbar.insert(activity_button, 0) - separator = Gtk.SeparatorToolItem() - activity_button.page.insert(separator, -1) - - score_btn = ToolButton() - score_btn.props.icon_name = 'score' - activity_button.page.insert(score_btn, -1) - score_btn.show() - - separator = Gtk.SeparatorToolItem() - toolbarbox.toolbar.insert(separator, -1) - # ToolButtons - new_game_btn = ToolButton() - new_game_btn.connect('clicked', lambda w: self._new_game) - new_game_btn.set_tooltip('New Game') - new_game_btn.props.icon_name = 'new-game' - toolbarbox.toolbar.insert(new_game_btn, -1) - separator = Gtk.SeparatorToolItem() - separator.set_expand(False) - separator.set_draw(True) - toolbarbox.toolbar.insert(separator, -1) - - help_btn = ToolButton() - help_btn.set_tooltip('Help') - help_btn.props.icon_name = 'help-icon' - help_btn.connect('clicked', self.help_cb) - toolbarbox.toolbar.insert(help_btn, -1) + #help_btn = ToolButton() + #help_btn.set_tooltip('Help') + #help_btn.props.icon_name = 'help-icon' + #help_btn.connect('clicked', self.help_cb) + #toolbarbox.toolbar.insert(help_btn, -1) - separator = Gtk.SeparatorToolItem() + separator = gtk.SeparatorToolItem() separator.set_expand(True) separator.set_draw(False) toolbarbox.toolbar.insert(separator, -1) @@ -73,10 +52,13 @@ class Activity(activity.Activity): toolbarbox.toolbar.insert(stopbtn, -1) self.set_toolbar_box(toolbarbox) + + # Canvas + self.game = game.AntFarm() + self.set_canvas(self.game) + self.show_all() def help_cb(self, widget): pass - - def _new_game(self, widget): - pass + diff --git a/activity/activity.info b/activity/activity.info index 80e6e8e..6822803 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -2,6 +2,6 @@ name = Ant Farm activity_version = 1 bundle_id = org.sugarlabs.AntFarm -exec = sugar-activity activity.Activity -s +exec = sugar-activity activity.AntFarm -s icon = icon license = GPLv3+ @@ -1 +1,20 @@ -# +#!/usr/bin/env python + +import glucosa + + +class AntFarm(glucosa.GameArea): + + def __init__(self): + glucosa.GameArea.__init__(self) + + image = glucosa.Image('images/aceituna.png') + sprite = glucosa.Sprite(image, 100, 100, 18, 18, scale=2) + self.add_sprite(sprite) + + self._events = glucosa.Events(self) + self._events.connect('mouse-moved', self._mouse_move, sprite) + + def _mouse_move(self, widget, event, sprite): + sprite.x, sprite.y = event['x'], event['y'] + diff --git a/glucosa.py b/glucosa.py new file mode 100644 index 0000000..711c5ef --- /dev/null +++ b/glucosa.py @@ -0,0 +1,807 @@ +# -*- encoding: utf-8 -*- +import cairo +import os +import gst +import math +import gobject +import gtk + + +def fill(context, color, size): + """Pinta un contexto con un color y tamaño determinado.""" + context.set_source_rgba(*color) + context.rectangle(0, 0, size[0], size[1]) + context.fill() + +def blit_surface(context, surface, x, y, src_x=0, src_y=0, src_width=None, src_height=None, scale=1, rotation=0, anchor_x=0, anchor_y=0, flip=False): + """Dibuja una superficie sobre un contexto de canvas.""" + context.save() + + if not src_width: + src_width = surface.get_width() + + if not src_height: + src_height = surface.get_height() + + context.save() # desplazamiento + + context.translate(x-anchor_x, y-anchor_y) + + + context.save() + # mueve el cursor al punto de control + context.translate(anchor_x, anchor_y) + + if flip: + context.scale(-1, 1) + + if scale != 1: + context.scale(scale, scale) + + if rotation: + context.rotate(math.radians(rotation)) + + # restaura el punto de control + context.translate(-anchor_x, -anchor_y) + + _blit(context, surface, src_x, src_y, src_width, src_height) + + context.restore() + context.restore() + +def _blit(context, surface, src_x, src_y, src_width, src_height): + "Dibuja una porción de imagen en el contexto del canvas." + context.set_source_surface(surface, 0-src_x, 0-src_y) + context.rectangle(0, 0, src_width, src_height) + context.fill() + +def load_surface(path): + """Genera una superficie a partir de un archivo .png""" + + if not os.path.exists(path): + raise Exception("File not found: %s" % (path)) + + # TODO: no asumir que siempre que cargan PNGs. + return cairo.ImageSurface.create_from_png(path) + +def render_text(context, x, y, text, color, size, face): + """Dibuja una cadena de texto sobre el contexto de canvas.""" + + context.save() + context.set_source_rgba(*color) + + context.select_font_face(face, cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) + context.set_font_size(size) + context.move_to(x, y) + + context.show_text(text) + return_value = context.text_extents(text)[2:4] + context.restore() + + return return_value + +def get_absolute_uri(relative_path): + """Obtiene una ruta uri desde un path relativo. + + Por ejemplo: + + >>> get_absolute_uri("data/my_image.png") + file:///media/disk/glucosa/data/my_image.png + + """ + absolute_path = os.path.abspath(relative_path) + return "file://%s" %(absolute_path) + +def _range(a, b): + "Retorna la distancia entre dos numeros." + return abs(b - a) + +def _range_between_two_points((x1, y1), (x2, y2)): + "Retorna la distancia entre dos puntos en dos dimensiones." + return math.sqrt(_range(x1, x2) ** 2 + _range(y1, y2) ** 2) + +def dec2hex(dec): + """Devulve la representación de una cadena en hexadecimal de un entero""" + return "%X" % dec + +def hex2dec(hex): + """Devuelve el valor entero de una cadena en hexadecimal""" + return int(hex, 16) + +def get_pixel_color(x, y, surface): + """Devuelve el color del pixel solicitado de una surface de cairo.""" + if isinstance(surface, cairo.Surface): + if surface.get_format() == cairo.FORMAT_ARGB32: + if surface.get_width() > x >= 0 and surface.get_height() > y >= 0: + + data = surface.get_data() + + bit = surface.get_width() * y * 8 + x * 8 + + B = hex2dec(str(data).encode('hex')[bit:bit + 8][0:2]) + G = hex2dec(str(data).encode('hex')[bit:bit + 8][2:4]) + R = hex2dec(str(data).encode('hex')[bit:bit + 8][4:6]) + A = hex2dec(str(data).encode('hex')[bit:bit + 8][6:8]) + + return (R, G, B, A) + else: + raise Exception("Pixel out of range.") + else: + raise Exception("Only RGBA surfaces are accepted.") + else: + raise Exception("The surface must be a cairo.Surface.") + +def create_window(): + """Genera una ventana con un elemento DrawingArea dentro. + + Esta función se utiliza para simplificar pruebas rápidas y + la construcción de ejemplos sencillos. No es una función muy + sofisticada, solo es un helper. + + El objeto retornado por esta función es una tupla con dos + elementos, la ventana creada y el DrawingArea. + """ + window = gtk.Window() + window.connect('destroy', gtk.main_quit) + canvas = GameArea() + + window.add(canvas) + window.show_all() + + return (window, canvas) + +class Image: + """Una imagen simple, que puede ser dibujada por un sprite. + + Por ejemplo: + + >>> imagen = glucosa.Image('data/fantasma.png') + """ + + def __init__(self, path): + self.surface = load_surface(path) + self.width = self.surface.get_width() + self.height = self.surface.get_height() + + def blit(self, context, x, y, scale=1, rotation=0, anchor_x=0, anchor_y=0, flip=False): + blit_surface(context, self.surface, x, y, + scale=scale, rotation=rotation, + anchor_x=anchor_x, anchor_y=anchor_y, + flip=flip) + + +class Frame(Image): + """Representa un cuadro de animación, realizado dividiendo una imagen. + + Por ejemplo: + + >>> animation = glucosa.Frame("data/player_stand.png", cols=4) + >>> animation.frame_index + 1 + >>> animation.advance() + >>> animation.frame_index + 2 + >>> sprite.image = animation + + """ + + def __init__(self, path, cols, rows = 1): + Image.__init__(self, path) + self.cols = cols + self.rows = rows + self.frame_index = 0 + self.frame_limit = cols * rows + self.frame_width = self.surface.get_width() / self.cols + self.frame_height = self.surface.get_height() / self.rows + + self.width = self.frame_width + self.height = self.frame_height + + self.frame_coordinates = [] + self.create_frame_coordinates() + + def set_frame(self, index): + self.frame_index = index + + def blit(self, context, x, y, scale=1, rotation=0, anchor_x=0, anchor_y=0, flip=False): + blit_surface(context, self.surface, x, y, + self.frame_coordinates[int(self.frame_index)][0], + self.frame_coordinates[int(self.frame_index)][1], + self.frame_width, self.frame_height, + scale=scale, rotation=rotation, + anchor_x=anchor_x, anchor_y=anchor_y, flip=flip) + + def create_frame_coordinates(self): + """ Calcula las posiciones del cuadro de animación de la Imagen.""" + + cont = 0 + while cont <= self.frame_limit: + frame_col = cont % self.cols + frame_row = cont / self.cols + + dx = frame_col * self.frame_width + dy = frame_row * self.frame_height + + self.frame_coordinates.append([dx, dy]) + + cont += 1 + + def advance(self, speed=1): + """Avanza un cuadro de animación. + + Este método permite hacer animaciones cíclicas fácilmente. Si + al momento de avanzar tiene que reiniciar al cuadro 0 lo hace, y + retorna True avisando del reinicio.""" + + self.frame_index += speed + + if self.frame_index >= self.frame_limit: + self.frame_index = 0 + return True + + return False + + +class Sprite(gobject.GObject): + """Representa a un personaje con apariencia de imagen o animación. + + >>> imagen = glucosa.Image('data/aceituna.png') + >>> sprite = glucosa.Sprite(imagen, 0, 0) + >>> sprite.draw(contexto) + + .. image:: ../../data/aceituna.png + + Cada Sprite tiene atributos para representar el estado de dibujado, alguno + de estos atributos son: + + - x -- posición horizontal. + - y -- posición vertical. + - anchor_x -- punto de control horizontal. + - anchor_y -- punto de control vertical. + - scale -- tamaño del sprite (por ejemplo: 1 es normal, 2 el doble de tamaño...) + - rotation -- la rotación en grados. + - flip -- espejado horizontal. + """ + + __gsignals__ = { + 'update': (gobject.SIGNAL_RUN_FIRST, None, [])} + + def __init__(self, image, x, y, anchor_x=0, anchor_y=0, scale=1, rotation=0, flip=False): + gobject.GObject.__init__(self) + self.image = image + self.x = x + self.y = y + self.anchor_x = anchor_x + self.anchor_y = anchor_y + self.scale = scale + self.rotation = rotation + self.flip = flip + self.radius = (max(self.image.width, self.image.height) / 2) + + def set_pos(self, x=None, y=None): + """Define la posicion del personaje""" + if x: + self.x = x + + if y: + self.y = y + + def move(self, mx=0, my=0): + """Mueve el personaje basandose en la posicion actual + Ejemplo: + >>> sprite.move(-10, 0) # Disminuira 10 pixels en x + >>> sprite.move(0, +10) # Aumentara 10 pixels en y""" + self.x += mx + self.y += mx + + def set_anchor(self, x = -1, y = -1): + """Define el punto de control del personaje""" + if x >= 0: + self.anchor_x = x + + if y >= 0: + self.anchor_y = y + self.emit('update') + + def set_rotation(self, rotation): + """Rota el personaje, en grados""" + self.rotation = rotation + self.emit('update') + + def set_flip(self, flip): + """Espejado horizontal""" + self._flip = flip + self.emit('update') + + def get_flip(self): + return self._flip + + flip = property(get_flip, set_flip, doc="Espejado horizontal") + + def set_image(self, image): + """Define la imagen del sprite""" + self.image = image + self.emit('update') + + def set_scale(self, scale): + """Escalar el sprite""" + self.scale = scale + self.emit('update') + + def draw(self, context): + """ Dibuja un el sprite en el contexto """ + self.image.blit(context, self._x, self._y, scale=self.scale, rotation=self.rotation, anchor_x=self.anchor_x, anchor_y=self.anchor_y, flip=self._flip) + + def update(self): + """ Actualiza el estado de la animación del Sprite si el Sprite contiene un Frame, + en vez de una Imagen. + """ + if (self.image.__class__.__name__ == "Frame"): + self.image.advance() + + def get_center(self): + """ Obtiene la posicion central del Sprite """ + return self.x + (self.image.width / 2), self.y + (self.image.height / 2) + + def collision_with(self, sprite): + "Retorna True si el sprite colisiona con otro sprite." + return _range_between_two_points(self.get_center(), sprite.get_center()) < self.radius + sprite.radius + + def set_x(self, x): + self._x = x + self.emit('update') + + def set_y(self, y): + self._y = y + self.emit('update') + + def get_x(self): + return self._x + + def get_y(self): + return self._y + + x = property(get_x, set_x, doc="Define la posicion horizonal") + y = property(get_y, set_y, doc="Define la posicion vertical") + + def get_left(self): + return self.x - (self.image.width * self.scale / 2) + + def set_left(self, x): + self.x = x + (self.image.width * self.scale / 2) + + def get_right(self): + return self.left + (self.image.width * self.scale) + + def set_right(self, x): + self.set_left(x - self.image.width * self.scale) + + left = property(get_left, set_left, doc="Define la posición izquierda del Sprite") + right = property(get_right, set_right, doc="Define la posición derecha del Sprite") + + def get_top(self): + return self.y - (self.image.height * self.scale / 2) + + def set_top(self, y): + self.y = y + (self.image.height * self.scale / 2) + + def get_bottom(self): + return self.top + (self.image.height * self.scale) + + def set_bottom(self, y): + self.set_top(y - self.image.height * self.scale) + + top = property(get_top, set_top, doc="Define la posición superior del Sprite") + bottom = property(get_bottom, set_bottom, doc="Define la posición inferior del Sprite") + + +class Text: + """Muestra un texto en la pantalla. + + >>> texto = glucosa.Text('Hola Mundo\\nBienvenido a Glucosa!', 10, 100, face='Arial', size=18) + >>> texto.draw(contexto) + + .. image:: images/texto.png + + """ + + def __init__(self, text, x, y, size = 12, color = (0, 0, 0), face = "Monospace"): + self.text = text + self.x = x + self.y = y + self.size = size + self.color = color + self.face = face + + def draw(self, context): + + lines = self.text.split('\n') + + dy = 0 + + for line in lines: + text_width, text_height = render_text(context, + self.x, + self.y + dy, + line, + self.color, + self.size, + self.face) + dy += text_height + +class Singleton(type): + """Clase para garantizar que una clase sólo tenga una instancia y + proporcionar un punto de acceso global a ella. + + Para que una clase sea Singleton simplemente se tiene que + cambiar la metaclase por Singleton. Por ejemplo:: + + class MiClase: + __metaclass__ = Singleton + [...] + + Entonces, la clase tendrá una sola instancia activa: + + >>> a = MiClase() + >>> b = MiClase() + >>> id(a) == id(b) + True + """ + def __init__(cls, name, bases, dic): + super(Singleton, cls).__init__(name, bases, dic) + cls.instance = None + + def __call__(self, *args, **kw): + if self.instance is None: + self.instance = super(Singleton, self).__call__(*args, **kw) + return self.instance + + +class Events(gobject.GObject): + """ Gestor de los posibles eventos que se producen en glucosa. + + >>> def boton_mouse_presionado(self, evento): + >>> print evento + >>> + >>> eventos = glucosa.AreaEvents(self.window) + >>> eventos.connect('mouse-button-pressed', self.boton_mouse_presionado) + + + Los posibles eventos a los que se puede conectar un metodo son: + + - mouse-moved ( al mover el raton por la pantalla ). + - mouse-button-pressed ( al soltar un botón del ratón ). + - mouse-button-released ( al presionar un btoón del ratón ). + - mouse-scroll-up ( al mover la rueda central del raton hacia arriba ). + - mouse-scroll-down ( al mover la rueda central del raton hacia abajo ). + - key-pressed ( al pulsar una tecla ). + - key-released ( al soltar una tecla ). + + """ + + # No funciona con gobject: + # Solo puede existir una instancia de este objeto en el programa. + #__metaclass__ = Singleton + + __gsignals__ = {'mouse-moved': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-button-pressed': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-button-released': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-scroll-up': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-scroll-down': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'key-pressed': (gobject.SIGNAL_RUN_FIRST, None, []), + 'key-released': (gobject.SIGNAL_RUN_FIRST, None, [])} + + def __init__(self, widget): + gobject.GObject.__init__(self) + + self._widget = widget + + # Conectamos los eventos de GTK. + self._widget.connect('motion-notify-event', + self._mouse_move) + self._widget.connect('button-press-event', + self._mouse_button_press) + self._widget.connect('button-release-event', + self._mouse_button_released) + self._widget.connect('key-press-event', + self._key_pressed) + self._widget.connect('key-release-event', + self._key_released) + self._widget.connect('scroll-event', + self._mouse_scroll) + + self._keys_pressed = [] + + def _mouse_move(self, widget, event): + mouse_event = {'x' : event.x, + 'y' : event.y} + self.emit('mouse-moved', mouse_event) + return True + + def _mouse_button_press(self, widget, event): + mouse_event = {'button' : event.button, + 'x' : event.x, + 'y' : event.y} + self.emit('mouse-button-pressed', mouse_event) + return True + + def _mouse_button_released(self, widget, event): + mouse_event = {'button' : event.button, + 'x' : event.x, + 'y' : event.y} + self.emit('mouse-button-released', mouse_event) + return True + + def _mouse_scroll(self, widget, event): + mouse_event = {'x' : event.x, + 'y' : event.y} + + if (event.direction == self.scroll_up): + self.emit('mouse-scroll-up', mouse_event) + + if (event.direction == self.scroll_down): + self.emit('mouse-scroll-down', mouse_event) + + return True + + def is_pressed(self, key): + """ Comprueba si una tecla está pulsada + + >>> if (self.events.is_pressed(glucosa.Events.K_b)): + >>> print "Ha spulsado la tecla b." + """ + return (key in self._keys_pressed) + + def _key_repeater(self): + self.emit('key-pressed') + return len(self._keys_pressed) > 0 + + def _key_pressed(self, widget, event): + keyvalue = gtk.gdk.keyval_name(event.keyval) + + # Crea una tarea solo si la lista de teclas esta vacia. + # Cuando se deja de pulsar las teclas la lista se vacia y se + # puede generar de nuevo una tarea. + if (len(self._keys_pressed) == 0): + gobject.timeout_add(10, self._key_repeater) + + self._register_key(keyvalue) + self.emit('key-pressed') + + return True + + def _key_released(self, widget, event): + keyvalue = gtk.gdk.keyval_name(event.keyval) + self._unregister_key(keyvalue) + self.emit('key-released') + return True + + def _register_key(self, key): + if not(key in self._keys_pressed): + self._keys_pressed.append(key) + + def _unregister_key(self, key): + if (key in self._keys_pressed): + self._keys_pressed.remove(key) + + scroll_up = gtk.gdk.SCROLL_UP + scroll_down = gtk.gdk.SCROLL_DOWN + K_a = 'a' + K_b = 'b' + K_c = 'c' + K_d = 'd' + K_e = 'e' + K_f = 'f' + K_g = 'g' + K_h = 'h' + K_i = 'i' + K_j = 'j' + K_k = 'k' + K_l = 'l' + K_m = 'm' + K_n = 'n' + #K_ñ = 'ntilde' + K_o = 'o' + K_p = 'p' + K_q = 'q' + K_r = 'r' + K_s = 's' + K_t = 't' + K_u = 'u' + K_v = 'v' + K_w = 'w' + K_x = 'x' + K_y = 'y' + K_z = 'z' + K_UP = 'Up' + K_DOWN = 'Down' + K_LEFT = 'Left' + K_RIGHT = 'Right' + K_SPACE = 'space' + K_RETURN = 'Return' + K_CONTROL_L = 'Control_L' + K_CONTROL_R = 'Control_R' + K_SHIFT_L = 'Shift_L' + K_SHIFT_R = 'Shift_R' + K_TAB = 'Tab' + + +class Sound: + """Un sonido que se puede reproducir una a mas veces. + + >>> s = Sound("data/sound.wav") + >>> s.play() + """ + + def __init__(self, path): + "Genera una nueva instancia de Sound, el parametro ``path`` deber ser ruta al archivo wav." + self.path = path + self.player = gst.element_factory_make("playbin2", "player") + self.player.set_property("uri", get_absolute_uri(path)) + + self.bus = self.player.get_bus() + self.bus.add_signal_watch() + self.bus.connect("message", self.on_message) + + def play(self): + "Reproduce el sonido." + self.player.set_state(gst.STATE_PLAYING) + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + self.player.set_state(gst.STATE_NULL) + self.playmode = False + elif t == gst.MESSAGE_ERROR: + self.player.set_state(gst.STATE_NULL) + err, debug = message.parse_error() + print "Error: %s" % err, debug + self.playmode = False + +class Pencil: + """Representa un contexto de dibujo donde se pueden dibujar figuras geometricas. + + >>> self.lapiz = glucosa.Pencil() + >>> self.lapiz.draw_line(context, 10, 10, 100, 100, 1) + """ + + + def __init__(self, color=(0, 0, 0)): + self.color = color + + def draw_line(self, context, src_x, src_y, dest_x, dest_y, line_width=1): + """ Dibuja una linea recta en pantalla. + + >>> self.lapiz = glucosa.Pencil() + >>> self.lapiz.draw_line(context, 10, 10, 100, 100, 1) + + """ + + context.set_source_rgba(*self.color) + + context.move_to(src_x, src_y) + context.line_to(dest_x, dest_y) + + context.set_line_width(line_width) + + context.stroke() + + def draw_circle(self, context, center_x, center_y, radius, line_width=1): + """ Dibuja un circulo en pantalla + + >>> self.lapiz = glucosa.Pencil() + >>> self.lapiz.draw_circle(context, 100, 100, 60) + + """ + self.draw_arc(context, center_x, center_y, radius, 0, 360, line_width) + + def draw_arc(self, context, center_x, center_y, radius, angle_1, angle_2, + line_width=1): + """ Dibuja un arco en pantalla. Los angulos crecen en el sentido de + las agujas del reloj. + + >>> self.lapiz = glucosa.Pencil() + >>> self.lapiz.draw_arc(context, 100, 120, 60, 0, 180) + + """ + + context.set_source_rgba(*self.color) + + context.set_line_width(line_width) + + context.arc(center_x, center_y, radius, angle_1 * (math.pi / 180), + angle_2 * (math.pi / 180)) + + context.stroke() + + def draw_box (self, context, x, y, width, height, line_width=1, + fill_color=None): + """ Dibuja una caja en pantalla. """ + + context.set_source_rgba(*self.color) + + context.set_line_width(line_width) + + context.move_to(x, y) + context.line_to(x + width, y) + context.line_to(x + width, y + height) + context.line_to(x, y + height) + + context.close_path() + + if (fill_color != None): + context.set_source_rgba(*fill_color) + context.fill_preserve() + context.set_source_rgba(*self.color) + + context.stroke() + +class GameArea(gtk.DrawingArea): + """Es el area donde el juego se dibujará + + Permite ser embebida en cualquier contenedor de gtk, ya que es un + widget. + + Emite un señal en cada actualizacion y en cada redibujado + que pueden ser usadas de la siguiente forma: + >>> area.connect('update', funcion_a_llamar) + >>> area.connect('draw', funcion_a_llamar) + """ + + __gsignals__ = { + 'update': (gobject.SIGNAL_RUN_FIRST, None, []), + 'draw': (gobject.SIGNAL_RUN_FIRST, None, [object]), + } + + def __init__(self): + gtk.DrawingArea.__init__(self) + + self.sprites = [] + self._timeout = None + + self.connect("expose-event", self._on_draw) + + self.set_events( gtk.gdk.BUTTON_PRESS_MASK + | gtk.gdk.BUTTON_RELEASE_MASK + | gtk.gdk.KEY_RELEASE_MASK + | gtk.gdk.KEY_PRESS_MASK + | gtk.gdk.POINTER_MOTION_MASK) + + self.set_flags (gtk.CAN_FOCUS) + + def add_sprite(self, sprite): + """Agrega un sprite a el area de juego""" + self.sprites.append(sprite) + sprite.connect('update', self._update) + + def set_update_loop(self, fps=60): + """Define un bucle de actualizacion si fps = -1 el bucle se detendra + y dibujara solo cuando un sprite cambie""" + if self._timeout: + gobject.source_remove(self._timeout) + if fps != -1: + self._timeout = gobject.timeout_add(1000/60, self._update) + + def _update(self, *args): + # Emite la señal, llamando a todas las funciones que esten conectadas + # en este caso no pasa argumentos. + self.emit('update') + + # Se actualizan los sprites + for sprite in self.sprites: + sprite.update() + + gobject.idle_add(self.queue_draw) + return True + + def _on_draw(self, widget, event): + context = self.window.cairo_create() + window_size = self.get_window().get_size() + fill(context, (50,50,50), window_size) + + # Se encarga de dibujar los sprites + for sprite in self.sprites: + sprite.draw(context) + + # Emite la señal enviando el context como un argumento + self.emit('draw', context) diff --git a/icons/help-icon.svg b/icons/help-icon.svg deleted file mode 100644 index f6c92bf..0000000 --- a/icons/help-icon.svg +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="55px" height="55px"> - <path - style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linejoin:round" - d="M 48,28 A 20,20 0 1 1 8,28 A 20,20 0 1 1 48,28 z"/> - <path - style="fill:none;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:round" - d="M 22,20 C 22,20 25,17 29,17 C 33,17 36,19 36,23 C 36,27 31,29 28,29 L 28,32" /> - <path - style="fill:#ffffff" - d="M 25,40 - a 3,3 0 1 1 6,0 - a 3,3 0 1 1 -6,0 z" /> -</svg> diff --git a/icons/new-game.svg b/icons/new-game.svg deleted file mode 100644 index cbc1d85..0000000 --- a/icons/new-game.svg +++ /dev/null @@ -1,103 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - version="1.1" - width="56" - height="56" - id="svg2" - inkscape:version="0.48.2 r9819" - sodipodi:docname="new-game.svg"> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1198" - inkscape:window-height="801" - id="namedview21" - showgrid="false" - inkscape:zoom="4.2909091" - inkscape:cx="11.268662" - inkscape:cy="35.928207" - inkscape:window-x="0" - inkscape:window-y="30" - inkscape:window-maximized="0" - inkscape:current-layer="svg2" /> - <metadata - id="metadata9"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <g - id="g3006" - style="stroke:#ffffff;fill:#ffffff"> - <path - d="m 28.898305,12.069916 a 3.4957626,4.5444913 0 1 1 -6.991525,0 3.4957626,4.5444913 0 1 1 6.991525,0 z" - sodipodi:ry="4.5444913" - sodipodi:rx="3.4957626" - sodipodi:cy="12.069916" - sodipodi:cx="25.402542" - id="path2994" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" - sodipodi:type="arc" /> - <path - d="m 28.665255,23.605932 a 3.7288136,7.9237289 0 1 1 -7.457627,0 3.7288136,7.9237289 0 1 1 7.457627,0 z" - sodipodi:ry="7.9237289" - sodipodi:rx="3.7288136" - sodipodi:cy="23.605932" - sodipodi:cx="24.936441" - id="path2996" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" - sodipodi:type="arc" /> - <path - d="m 31.461864,41.317795 a 6.1758475,11.419492 0 1 1 -12.351695,0 6.1758475,11.419492 0 1 1 12.351695,0 z" - sodipodi:ry="11.419492" - sodipodi:rx="6.1758475" - sodipodi:cy="41.317795" - sodipodi:cx="25.286016" - id="path2998" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" - sodipodi:type="arc" /> - <path - inkscape:connector-curvature="0" - id="path3000" - d="M 38.45339,27.567797 34.957627,22.207627 14.915255,22.440678 11.186441,28.5" - style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <path - inkscape:connector-curvature="0" - id="path3002" - d="m 13.283898,31.529661 3.029661,-6.292373 15.614407,-0.233051 3.029661,6.292373" - style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <path - inkscape:connector-curvature="0" - id="path3004" - d="m 12.118644,14.75 3.495763,4.661017 18.177966,-0.932204 3.728814,-5.59322" - style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <path - d="m 40.602453,28.747722 c -1.237077,0 -2.252361,1.033402 -2.252361,2.292537 l 0,5.257541 -3.663838,-3.729187 c -0.875669,-0.889397 -2.279493,-0.891288 -3.153298,0 -0.87381,0.891291 -0.875637,2.35072 0,3.240113 l 3.693863,3.729188 -5.225475,0 c -1.237073,0 -2.252361,1.033401 -2.252361,2.292537 0,1.259135 1.015288,2.261965 2.252361,2.261965 l 5.195448,0 -3.663836,3.729188 c -0.87381,0.891293 -0.875637,2.35072 0,3.240115 0.875666,0.889391 2.309528,0.860724 3.183334,-0.03061 l 3.633802,-3.729185 0,5.318675 c 0,1.259138 1.015284,2.261968 2.252361,2.261968 1.237073,0 2.222332,-1.00283 2.222332,-2.261968 l 0,-5.349241 3.723901,3.759751 c 0.875667,0.889394 2.279492,0.891293 3.153298,0 0.873809,-0.89129 0.875682,-2.320152 0,-3.209542 l -3.693863,-3.729191 5.195433,0 c 1.237074,0 2.222344,-1.002832 2.222344,-2.261964 0,-1.259138 -0.98527,-2.292538 -2.222344,-2.292538 l -5.225472,0 3.693879,-3.790322 c 0.873807,-0.891292 0.875668,-2.289586 0,-3.17898 -0.875681,-0.889392 -2.279506,-0.921863 -3.153312,-0.0306 l -3.693864,3.790319 0,-5.288104 c 0,-1.259138 -0.985259,-2.292538 -2.222332,-2.292538 z" - id="rect3894" - style="fill:#ffffff;fill-opacity:1;stroke:#282828;stroke-width:1.93908417;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - inkscape:connector-curvature="0" /> -</svg> diff --git a/icons/score.svg b/icons/score.svg deleted file mode 100644 index bfd8e1f..0000000 --- a/icons/score.svg +++ /dev/null @@ -1,133 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - version="1.0" - width="84.862267" - height="78.095123" - id="svg4502" - style="display:inline" - inkscape:version="0.48.3.1 r9886" - sodipodi:docname="score.svg"> - <metadata - id="metadata20"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1280" - inkscape:window-height="744" - id="namedview18" - showgrid="false" - inkscape:zoom="2.3150307" - inkscape:cx="103.52923" - inkscape:cy="41.700533" - inkscape:window-x="0" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="g4395" - fit-margin-top="2" - fit-margin-left="2" - fit-margin-right="2" - fit-margin-bottom="2" /> - <defs - id="defs4504"> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 100 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="200 : 100 : 1" - inkscape:persp3d-origin="100 : 66.666667 : 1" - id="perspective22" /> - </defs> - <g - transform="translate(-10.082352,65.657527)" - id="terron" - style="display:inline"> - <g - id="g4395"> - <rect - style="fill:none;stroke:#ffffff;stroke-width:5.34319830000000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" - id="rect3049" - width="75.519066" - height="36.633076" - x="14.753951" - y="-30.1754" /> - <rect - style="fill:none;stroke:#ffffff;stroke-width:5.35777044000000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" - id="rect3819" - width="38.422394" - height="30.206703" - x="33.302288" - y="-60.54668" /> - <text - xml:space="preserve" - style="font-size:19.42981148000000147px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;font-family:Sans;-inkscape-font-specification:Sans Bold;stroke-opacity:1" - x="49.897705" - y="-35.294449" - id="text3821" - sodipodi:linespacing="125%" - transform="scale(0.92818218,1.0773747)"><tspan - sodipodi:role="line" - id="tspan3823" - x="49.897705" - y="-35.294449">1</tspan></text> - <text - xml:space="preserve" - style="font-size:19.42981148000000147px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-opacity:1;display:inline;font-family:Sans;-inkscape-font-specification:Sans Bold" - x="28.97287" - y="-4.3726034" - id="text3821-4" - sodipodi:linespacing="125%" - transform="scale(0.92818218,1.0773747)"><tspan - sodipodi:role="line" - id="tspan3823-1" - x="28.97287" - y="-4.3726034" - style="stroke-width:1;stroke:#ffffff;stroke-opacity:1">2</tspan></text> - <text - xml:space="preserve" - style="font-size:19.42981148000000147px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;display:inline;font-family:Sans;-inkscape-font-specification:Sans Bold;stroke-opacity:1" - x="73.573051" - y="-5.0112777" - id="text3821-4-1" - sodipodi:linespacing="125%" - transform="scale(0.92818218,1.0773747)"><tspan - sodipodi:role="line" - id="tspan3823-1-2" - x="73.573051" - y="-5.0112777">3</tspan><tspan - sodipodi:role="line" - x="73.573051" - y="19.275986" - id="tspan3879" /></text> - <path - style="fill:none;stroke:#ffffff;stroke-width:4.88154649999999979;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 53.67775,-28.217139 0,32.7603728 z" - id="path3881" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> diff --git a/images/aceituna.png b/images/aceituna.png Binary files differnew file mode 100644 index 0000000..dae99e4 --- /dev/null +++ b/images/aceituna.png diff --git a/images/ant.svg b/images/ant.svg new file mode 100644 index 0000000..f42a737 --- /dev/null +++ b/images/ant.svg @@ -0,0 +1,522 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg2" + version="1.1" + inkscape:version="0.48.2 r9819" + sodipodi:docname="ant.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.33" + inkscape:cx="289.15098" + inkscape:cy="630.95399" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1200" + inkscape:window-height="804" + inkscape:window-x="0" + inkscape:window-y="30" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <image + y="115.65166" + x="536.31586" + id="image3063" + xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a +HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy +MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAHRAfQDASIA +AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA +AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 +ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm +p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA +AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx +BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK +U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 +uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii +gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA +CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK +KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo +ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii +gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA +CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK +KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo +ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii +gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASiloo +ASiiigBaKO1FABRRRQAUUUUAFJS0lABS0lLQAUUUUAFFJRQAtJRRQAUUUUAFFFGaAEooooAKWiig +AooooAKKKKACiiigAooooASiiigAooooAWiiigApKKKACiiigAooooAKKKKACiiloASilpKADJoy +aKKADJooooAKKKKACiiigAooooAdRRRQAlFLRigAFFFFABRRRQAUlLSUAFHeikoAKWkpe9ABRRRQ +AUUUUAFFFFABRRRQAd6SlpKACgUUUALRRRQAUUUUALSUUUAFFFFABRSUUAFFFLQAlLRRmgApKKKA +CiiigAooooAKKKKACiiigBaKSloAKKKKAEooooAKKKKACiiigAooooAKKKKAHUUZooAKKM0lAC0U +lLQAUUUUAJRRRQAUlLRQAlFLSUAFLSUUALRRRQAUUUUAFFFFABRRRQAUlLSUALRSUtABRRRQAUUU +UAFFFHegBKKKKACl70lFABRRRQAUZpKX8KACiiigAooooAKKKKACiiigAooooAWijvSUABooooAK +KKKACiiigAooooAKKKKACloooAKKKKACiiigAooo70AJRRRQAtFJRQAtFFFACUUppKAFooooASlp +KKAFooooAKKKKACkpaSgApaMUUAFFLijFACYopaSgApKWkoAKKKKACiiigAooooASloxRQAUUUUA +FFFBoAKSiigBRRQKKACiiigAooooAKKKKACiiigAoozSUALRSUUAFFFFADqKKKACilpMUAFGKWig +BKCKWkoASilxRigBKKXFFABRRRQAUUUUAFFFFACUUtFABRRS4oASloxRQAYpKWkoAKXtSUUALRRR +QAUUlFAC4ooooAQ0lLRQAlLRUM1zBbJvnlSJR/E7AD9aAJaKzLbX9JvLs2tvqVrJOP8Almso3H6e +v4VpZz6Uk09htNC0UUUxBRRRQAUmKWigBKX8KPwooAKKKKACiiigAooooAKKKKACiiigA/CkpaPw +oASiiigAooooAdRRRQAtFHaigAooooAKKKSgBaKKKACiiigBKKWkxQAUUUUAFFGaKAClpBS0AFFF +FABRSZxRQAtJRRQAUUUd6ACikooAWikooAWiiigAooozQAZxzXlvxT1WO0liiDEzKg+Q8gKxOWHv +wBXqB6V4X8S7mSXxddQyldkSoI1PpsU/zzXHjpWonflkFLEK5paV4Lm1zwPHqEMjG9k3MBJyWA7B +uvbisrR/H/ijw/cm2vpPt8CNtaC8OJF+j9T9GzXpnw6mSXwPp6Bdvl7kIH+8T/I0vivwVZ+IomlV +VivgPlk7H6/40QpOMFKm9bfeOpXjKrKFZaXfyLHhnxnpXieL/RZvKuV4e2kIDj/Ee4ro8j2r5u1D +RbzRr8Q3ET280L5SZeCPcEV2vhj4jXenBLLXy1xCW2x3a4yo/wBod/rTp4pX5amjFWwTUeek7r8T +1yiq9tdQ3cKzQSLJGwyGBzU9dZwC5opKUUAJSijFFABRRRQAUUUUAFFFFABRRRQAUUUZoAKM0UlA +BRS/hR+FACUUtFAC0UUUALSUUUAFLSUUALSUUd6ADNLmm0UAOopKWgAopKKAFo7UUUAJRRRQAtJQ +ecikByKAFJxRTQcjBP41RvNX0/Tk3Xt/aWwHXzplT+ZpXBK5oU1T2/CuYl+InhCGbY3iOwJ6ELLu +A/EZq/p3iXRdVuDb2OrWdxKRuVI5QWI9QOp+opcyuPlfY2qSmhstj2zTs559aoQZopD096MgDPrQ +AtFIDzj8aQH5c+vSgB1FVr25+yWU1wF3GNCwXOMkVw1p4yvF12zS9niS1uVUlCuNpJPf24rKdaMG +k+ppTpSqJuPQ9CpabnNOzWpmFJRRQAEZFfPfxGnH/Cd6iBksm0HPTGwY/nX0IenFfPvxQKJ48vyB +tcxxduvyjmuLHK9I9HLHav8AI9C+E8xfQLiFsZSUNj6j/wCtXoGB7V5b8H5swX0e4k4BOfqcfzr1 +KtMI70YmGOVsRP1MzWNDstbtTBdRAn+Fx95fxrzzUfh1e20h+zFbqAngHhq9WprdM+nNXVowqL3k +Z0cRUpfCzzLwempaV4k/szY8duULSxNyF9CPSvThXNaTvuvEeoXZxtTEQ/Cul7VOGVoWWxWKlzVL +ta2QUopKWug5wooozQAE0lFJQA4UUlLQAUUZooAKKKKAENAoNAoAKKKKAFFFJS0AFFJRQA6iiloA +SlxSUtACUUUUAFJS0lABRRS0AFFFFABRS9qO1ACUUUUAFHWkzSE4PFABnDY9a5TxN480nw1M1pJI +brUWQstnCfm6ZG4/w5/P2rE8b+PWsYrix0dv36MIpLwkbI5Dz5SZ+++3k4ztzzzxXiFrDfX+pedG +Jp7i4cusrnhipyzFj+prlq1+X3Yndh8I5+9PY7TxH408TXbRvqmpHR7OeMlbSzU78HjJYc9xzkDP +auEkm0YbkaS8uWJyGcYOR3z+PvXTnwnFLIbi+uJrqQ/wlsKPbPUj8qR9FsoslrOH0B28ms1Jvc6H +CK0joc6JdHlb5vOVZlwuRzke3Tr+lQS/Y7lY/s93zGQEwzBgB9QMda2ZNHjRFWIORvBVHbIB9BxW +BqGk3dgzsyAwH+MHlQfWgHp1O+8E/FjUvD8ostbee/09WCGSRt00PuGP3lxkkHn0PavoSCaOaJJI +nV42UMrKchgehr5FtrOZzG0flXcc0q4kj/hPXDA9+2Oh/GvbPh74j/snSJdN1W5IW2wLfeBuQDjZ +gZ6cH6Gt6c/5jjr0Vo4dT1ByQM9cVXubq3tbSSe5mjhgQbjLI4VQPUk9K4vxb8R7DRNBN7ZutxPK +xhiiPynfjOcegB69jj6V4bqDeJvG9013qN20kIfdEJCREg/2EHp+dW5roZKlLroe43nxh8G2l0sI +1Ca4P3We3t3ZVJx3OM/hmtvSPHHhnW4YnsNas2zkeXJII5MjtsbBH5V80P4XcZZLwM4O3BTHPbvT +rLRYlmeyubp4bmWM5ZCNsidxgjrUqoaOguh9L+Kpz/ZqRI3yTbgW/hwEJzmvLzsu7mAz4+dg5BGQ +kZXJBP8AugV5xNpWraCk0mlX0piZcMsT4wpz95eQeOMeldNoHiiPVrDbfG3tL1GUvmTYs8fAOwHg +EgBSM45468cmKhOSc4nThZKn7r6nuvhTVRqejgEMJrdjC4bk8dD+Ix+Oa3s9xXlHgfWZbDxDHpt5 +jFwhHmjhXb74P6kZr1WM5UV04ar7Smn16nLiqPsqjXTdDqKTOeaAefpXQc4414P8XbbyPF5nOcz2 +qMo9cEqf5V7ua8e+NVvsudLuj0aGWIn3BBH865sWr0mduXytXXzH/BqQm71FCesYOPxFeu5A5rxD +4QzNFrt8CTzanA9wRXtjkDA7UsG/3SQ8wX79/L8iQe9V7qTyrZ2yBx1PapSSFJ64H51zvi/WtO0f +QZJ9RvEtYZF2qzclyR91QOWJ9B0HpW83aLaOOCvJJljw1Eq2DzjdiZ2fLDkg9Ca2wdzewrzzw98U +PCt1LaaWLi4s53AEQu4tgkPQcgkLn/axmvQNwROcnt/vGlSVopFVW3NtklFMZtoBOOv9DRu/d578 +4P8AWruZj855pMjpVC/1rTdMRjd6hawFRkrLMFNVofE2gO5Rdd053AGVFymfyzRcLGxn9aWq9vcx +3KeZFIki+qMCB7cVKHJGSCB70XAeKU0g6c4/wpaYCUtH4UUAFFFFAAaSlpKACg0UGgApaSloASil +xRQAtFFLQAlLmikoAQmlzSYooAXNJRRQACnU2loAWkpc0lABmgkUmR1NZ2oatbaejF3BfHCjrSbS +V2NJvRGiDzS1yVxf+IdQsjLpMaQuvKmVQQ/tgnp71JoHiW5ukjttXhW3vQxjcpwm8dAQfukjkdjy +PTOfto3sy/ZS5eZHTHg+men1rh/HviY2Ok3FtbXn2STbsmuEb50LA4jjHeRse20fMe2dPxH4ljsX +ksLa4RLtYvOncjIgi6bvck8AZ759M/P/AIt8SzazfzOibLbzNkcUnLR45yPQn+I/hUVamlkbYahz +STlsQtLc6tdWSeS6gf6PDHuO2LBy2Cec4wSe55r0i30tbdwVC5ZQkZ2YO0fwgDoO/wBetcd4GgWf +xVchHacJExiZs8s31754r1y6UWVrHvdQzY3gdelc0IXVzvr1LNQRxt7GYY5GBYAHnPT3Fcve3rRk +7ScHBB6itzXtVgVJkHyhmy3PU+1cLeXitN8uCTnHPSpcrMunC61NW11KJJR5udn8jVy8bT7rTZZi +8b7mwFJOc471xMt2QxA6DrTRq11FE8aSMsD8Og6EVcZE1IFjSNT/ALPa+sgwMc6gruxhWU5B574y +Pyq1Y6jZW0u4Rzq8jEKucqc4ySx57dK5l3iCFgx3l/uYzgeua2ori0uNK2sfKmXpxkE/XtkVq4qS +1OdSaloW5NXF3fqb9l5MaBXG9Y1BPy4PbnrXSaxqUGjzG1eVjMgyUP8ADkdMjsK83d3aQgkHI6/S +p55ZJ44pZnLnG3dnJGOgpJ22G43epsTa9yNjyHJzgU2TxGlxbrHc2heeGTzI7pH2snbkdx9Me9YL +Oe2BTRGz7pG3BdxDHFCbHJLoblh4o1LTrpp7crIs52yxSfMrY6E56GpNRm0/Ubv7fbo1oZSVltW+ +ZU4xlWPX6dR71g2sMokeUoWVl28jC9fepHIibdk+b/DjoD/WqcraIlRvqzqNJ1PVPDtxaxWt3HLH +bTZEc2CMEgELn2PYivpiTxLpFjo0Gp32pWltayqCsssqqGJ6gc8n2FfHuDJJjPmNnG4dAPpXR+Hv +3UkzSKwjS3HDnAUs/B5+hqoNJtmdWnzW1Poyx+JHg6/mWC38RWRlJ2hZHMeT7bgM10kFwlxEJYnV +43Y7WVsgj1yK+ZBZaNrzmBpI1uME/O2wnrwCetTwWXiLwsWu/D19dop++IH3R59WXlCeO4rTnMHR +7H0yrfLk15n8aYGfQNPuAM+XclT/AMCU/wCFZXgn4wzXs8Om+JoUikZ/L+2xjYA3GPMT+HJ4yOM9 +gOa6T4uwCbwQZPm3w3UT4X3+Xn8DUVWpU2Vh04V437nmGg6ndaHpt5e6YkbagdsEUzkbFD8sWU4+ +ZQDjJwferNr8U/FOj6mtzq10Lu04V4WhUKBnqCqjkD3INZt9C0fhW+lRkYRTWzkFeWAZuNw6Dkj8 +etc5qGt3F5JcRC1igtLhSFiRdwA5ICk/zrlwsk6SaO7GU/30r/1ofV9pf215YQXdtIJLeZAySA8E +EeteD+M5rrxH8Q77TJ5FubLSx5cMSqDs+VcgA9XJOCecYrQ+GvxRs7SxGk64xiVcJHKiZVQAACwH +Iz04HXnjNcVr+qf2b8S9ansZleK5leNhFJlZkZQcbl7Z9K65STSOCnTak0xy6DaT2FxPFHEPIUti +ROTjuGHJP6V2/wAOfihb2GinT/E+oSvLE4W2ndC5CEdGIGTg9+Tg+1eTJJc7DumkVORtVsA+wHpS +RXHkSrMGJdeVKjBzWcZu51Topx1PfvEfxWsdNUw2CJdShirSs3yZA6gDqPc4rybWPHHiXxHdJE2p +TRxMhzDZsU+Xr0B5OPXvWd5FnqKzX67hcTSgQwrnbzxliPU5rdt/D8VhZeX+7lnyN0oXBI9AewxS +bk3uKNOEVscpd6PfXMryRxcuu0l5Ru47ZPOO2e/WqkOm6haHzxAjSxsACSrGP39zXbohlHLEgngM +MGnHTwSGB+boPU+1WtjOR5zHfXmnXjSw3M8NwGOWV2Vs9c5HU16Donxf8TaBbIl7df2jHwVhuiPM +KnP8Y5A9zk+g71Ff6VE8K+dHli2ASuQB9fXNclfeH5EkLwlnzye5qzJpM+k/CHxS8PeK0SNJWsb0 +9ba4IHPordG+nX2ruN/c/KPfvXw3LPLE4jUlUVsqE5wfXPc+/X0r2T4ffFm902YWHiWZZrRmCxXU +jYeHPQOe4/Ud+Ku/cycX0PoHPGaWoIJY5Y1lRw6uAQ2eCD6VNVIgUUUgNLmgANH4UUhoAKKBS/hQ +AlKKSloAKKM0UALRS0lAAKWkooAKSlooAKKKQsFGSQBQAtBrB1PxVY6dL5TPuk/uryaoxa7qepHF +lZMinpJJwKh1Ei1Bs6lnVOpAqhc61Z2yndKGYcYTk1QXRLy7Ia/vGIz9yP5QK0rTSbOzH7uFcnqc +ZpXm9tB2gt3czbjUdRuwFsbVkDDiSTjFQQ+GJXnFzd3ReZjlsDgj0rpgABwBR9Kn2KbvJ3H7ZpWi +rDERYkCLworN1XQ4NSPnAiO5C7Q+Mq69drD+IZ59R2NaEs8cMRkkdY0Xks5AA+prn9Y8XaLb6beC +21zTheCB/JX7QpJfB28A881U+VxtLYmHPzXieG+LdZuf7av9JimL7rgyXR3FxuQAbAx6gbR+XasX +U4rN5rZ2xh7GV0fcQAwGVHuc8VTvfskbqII5BcxDY0m7Id888596uw241Dw5NEQjXkMweBS3zBSB +kD2P8644SvoevOHKkdT8M43n168uJvkyFlO08Hknj27V03jLW/7PhcrcHdJjYvVV+n1rz7wn4iGi +Xk8lujyIY8RpIeg67T/jVa/vYHZp5GkaR2Zlj/hRT0GKSblHlitQlCMZ+0qOyKt9qU907spIX1HW +stgxwT3qeZAw82MjZITtAOTT1snEIIXLtyc8Bawd9mdulrrYoyR5OBiqsiDJAJPt3rcbT4Y4A0rg +nncfT6VB/Z5nUFCIYz0GPmPuTWsNDnqamLJaSpC0zLtX860NP0a8uYQ8aMMjsuc/UU9NMubi5W0h +2srEJweGPrX1V4f8NaZpdhZOljAt2ltHG82wbmIUDJPrXVFOSPPqTUHc+Yrnwvqenwpd3VnOlsxA +MjREL+B4wfrwe1VCkYgkiCGIudynnGff/OK+wLuzgvrWa1uollgmUpIjchgR0r558eeCLnwleG4t +Fkm0mdsrKFyYsnhGPr6HvSnGUdUFKrGfuvQ85+ypM+wsI51xweVb6VWEcsUoKpv5zgDIq5cbYzvU +syg4GOG/KnwSuxkwpTyxySeT9fxpJpq5o072GmR3CyXCFCv+ri7fU0JYpIg84sGYZGG6USpdTSqB +G2TxgLwPzqq/mxTsj5O049c+9PQSuPkthDzHNuJJGMY/Wni6lhtZYUchGKZIPTGePzalSXEZZd77 +uxFQsoeMocrJxhT1NFguIsx3q+5sKwO0Hn65rdttc12ztPNhYxxK25GK8cjsO/49K5tBtfDbwvRt +vJxWrboLyJbazWeR1DMFwSQO/TPHvS1Q9HuTx65NLqcV7KiCQcSts5kBP8Q74zx06c17zqV5/b3w +VF0ZfOfykzJydzJKFJ5HPTvXzpGpQvkghhjiu38IeMpdM0W/028uTNprwOGtCQWRuSrJngc4yOnf +rROVoO/UiMbzjbo7/cX9R1K2tPBF5bbG8++ZIRzwVA3En6Y/8erg7YZt2IcnaxIHtVu8u7jVpVmw +2xVKxqeijr+J9TU1toj3U0cNor3FxxmGFC36D+dc+Hj7KKg+h24m1STmuplSI8ZdoxyAenvSwie7 +ukkEZZ8AkL0wP5V6ZZfCrUHiEuo38FmCm51ZN7qvq2CAPzrAmvoNLin0rQH81Xyk1+U2mZfRQc4H +vW6W7OVyTso7mQ2nmWMO8nloOo7k1h3luyOSnIOQCeK9L8KeDdQ8Sq5RhHBFwztzk8dK6fT9A8LW +11PYa7ocMuo28bMhkkYxygA8gZxn+VOKfUVSa1tqzxzw07/29ZphlVHyR1wQDya724vY4bQvgByu +Qucgk/yrI0RtG0uC8nu4TDePKWV9+fkOfkGewPfqazL3WLaa5mdHUIq5VR1NOKUtURKTTszWgvIo +2APK5/GtX7QLiJfLIXbyG6kVwg1IE5VlB+vP5U5NUmQ4DmmkxOzR6BbWz3UmxpE2f3qo6lpYkZzb +n5VyG5wT+FZGleMBatHFNtKA8EcV6BYalo/iC1dLe6j885JQjJU/WtUYSbR49qunlZHZE2yKPvD/ +AD1rm2Zt+xn2ooIAOTxXpHiuwls2cPypJYfpXn10VickwMWP8T/d/Ad6szuey/Bzx+8Mi+Hb24d4 +lQtBIwyQvHye+M5+nHYV72rAgfvAwIyMDrXxFp+qzWF7FeQKomikEikdeOeo/kK+vfB2rxatoFvP +Gy4KKwBblQQDj86WomdGOaWhWDdCTSiqJAUhpab3oAUUZoooAKM0opCKACiiigB1L2pKU0AJRRii +gAoozR3oAKwNf1CaFFgg/wBY5xXQVTksYpZlldQWXpUzTasioNJ3ZzumeFoWkF1dqZJepz0rqIok +iQKigY9KkChRgUURgorQJScnqKKMUUE1RI01ieIPEEWi2wAQzXcnEUC5JY9AeO2ePc8CrWsatBpF +i1xMSW/gTOC5/wAPU1g+GdObUbtvEN+RJNJkQegHTcPbsPbnvWM5tvkjv+RvTppL2k9vzZljwNf+ +JpkvvFeoTDI+WygICoPfqAfp+dS6r8O/DGn6Fe3EVi3mwQPIjtKx2sBkHGQCcgcHrXfYqpf2FvqV +lLaXUfmwSgB1JwDznFTKhCz0u/MtYusmrSsuy0PmaXRY7uGOSKe2W4bMpiL7XVT/AH4zyDj0yOnP +eqc+mQroMVy7vFcwTMgAAwQRuxx6fpXdeObDTI/Eh0iwtrC1W3hwBEpD7iN/z445zjJOTxiuLvLh +JLa1glh2RKolTJ6OR19xj9KxUbXSOtVXKzZnRxNFaM5VFRwSoXk49/SqF/KWYlc84IrScgLtXPGc +j1qS2tYZCGdRgHv0/Cim/ZXbLrw9ukk9hNJszFaozgknsegrRldFjycDGQPUnmg5dMKCpz0Pp+FN +aLcN8nzbeAp/kBXK25O53JKEVHsVWia4ZXkASIcqnc0ru7ZWMcngkdh6Vs6T4b1XX7ryLW3L9z2V +RxyxPb6V6poPgPSfDaLdaiEuZ4VMskjDMaY7Be/1PNbU4M469eMdDzzSdIj8NQJrmsZt38smyhkX +mWTjBx2HfnrV6b4g6p5jia/um3n92YiEH6Vr6JOnjz4nTTX8KS2mnxsyQv8AMuc4AI6H1rv5PAvh +mXcX0e3LHnPIK/Qjp+Fa+znNe47IwdWnTl+8jd/keMzfErVLaZ911qSt0H74EfkRU6fFW+8h4pri +DUbZsK9tf24UsPTcvX8RXReK/hrLAzXOlIbq2AyYG5kX6f3h+teYy6IjO6YKOGIKkYK+xBrN1qlP +SZrGjQra0xviCfwxqVubmwtrzSr4SjNvIyzQbeclXADZz2NYaW7wTAR3bgNh43HKk+v1qe70mS3B +JBI9qz4/NtWDx5X/AHulCqc2wOi4bmvJHdOmJ7mSUuCQN3Dn2xVHb9qiETlfNUBlkH8qtWk0FyNr +O8UpzkbuM+v0qO5ge2ZZD5Zw3UciobfzLSS9DORJQzIQqsFJAPP+elQzMW+b/lov5flXXaf4Svtd +8+406S3WSzhNw6yvsEkYzkA4IyM98cVgiI3OJBBMegVo+QO4JHPFdMJpxUmc04NScUVI5N+yRACG +HKkZwamhMUcgbBBHRl4xn19RUkdhIZmCoULkBFJyCc8mtXX/AApqfh24trfUEjeW5gE8Qhk3DZkj +GfXjtng01OLYckkvUoSL5m1JYmWbIDbuQQen/wCv+lNtdMupjcwvEyNH87DuAegHrmojHP5exopC +i/dBfhe+K6TQZILsR2cqQpdLkqjZCyYOc5H3iB2PSsp1LLTU0hTvq1Y63wd4GTX9txqSPBpqdkOH +mYfwDH3R6kc9uvT16ztLbTrUWulWMdrCOAIU2/n6mqng2Nv+EYsRNCqbUKoAMfKCcYGOBitbU9Rt +NH0y51G5YJDbxmRjnrjt9TW1OnaJyV6zqT1PLfilrq2cMegWrkTzjzLth1VOy/j/ACrza3hWKPgf +P+fPpUt7qVz4g1i61a7zvnlLAH+EdAPwFd18O/CX9s6j/aF0n+h2rAhT/G/YfTvU25nZG9/ZQu9z +0vwPo50fwrZwSDErr5sg6EE81kfEXw8dS0wXdoh+224LR7OpHcfSu4H0AqKZBMjxt908N710uKcb +HBGbU+Y+UpiLuN4pdwbcMq3IGP61h3VvNZXfnWyB1GQARwR7iu58deHn0TWpjFjZvyRnr71hErcR +K0ZHIOQe/wD9euWPuvU75+/G6OMaRjLlgQ3Xng04ysw3fgcHFbd3axznEiBh1DDgisifTpYdxj/e +J6fxVvy3OZTsVXYkjoe4p0F9PaTCWCZ45B0ZWwaiw6kkcFeTntSF2+VuQV6EDFUlYlu5q3XiTULy +JVuJjLtBAz1Hv9ayzHPOwfY8hPOT3prSSzcMS+Oc96TbGVBEgzjkEYqjNoliWMsAZVI6kYx+pxX0 +N8HtVkg0SCOcqQMDdu6pnA9emBXzxBbyzyCONCWJA69Pc17J4OP9k6ZDArk4fjPYdf50mI+ict7Y +pRn2rO0q6+16dBKSSSuCc9TV8Ee9NEjqKSlpgFKaTNFABmjNBpKAFopM0UASUlJmloABS9qKM0AN +ooNNJ5oAf+NBpuaM0ALmgmmk0daAHA1Uv76HTrR7m4Yqij8WPYD3qd3EcbOxICgkn0FeV+I9evdc +1BbK2jP3tsSKc5z0P1x+VcuKxMaEfN7I6cLhnXnbZLdlmK6m8V+Imtjklh+9x92CHuAfU9Pqc16X +HGkUaRxoERRtVRwABWH4V8Op4f0zyzta6lO6dx3Pp9BW8KeGpShHmn8T3Hi6sZz5afwrYdTT0JOP +WnVFcZ+zyhfvbTj6810nKeB+OLnS7bxpf6k129xcs8axWBXKqQACzsv3RnkDq3Tgc1xNxeyy3Tos +Ly2+7922AjHsPl6Yz6HpXW+IoVW6wjxymT53ZSSwYkgq2ehBGcDjFc0kMs90lvaW8k07/KkUS7mc +/QVxXfRHrxhFQXM9DPkt3iUMUO9uyHOPx71ct7aea4ZWiLMqjEYBJyeg+vPTrXqPhX4QvNIl54rZ +WVTlLGJ8g/8AXRh/Ifie1et29rb2kax28EcSDgKigfyrZQbWpyTrRjL3Dw7SvAHiLUolU232SFus +lz8hx/u9f0rZtPBun6ZqkcN1KbyUSiIr91ASCT7+leukgc/jmuH0+3F/4nll4KiUuT9K5cRF03CM +N2/wNqVeVRSlPZI7GztILO2SKCJI0UfdRQB+leffEzxSNJgNomDKwHy/7R+6D7AfMfwrv9QvYtNs +ZrqXJSNc47k9hXzR4s1iTxF4ifAAVXYFl5yTyT/SumtNQikc+FpOpO/RHpHwS08rY6pqUqkySyqg +c9xyT+pr1muX+H+mrpnguwiHWVTMeO7f/Wrp61pq0UY1nebGMmTkViaz4U0rXUP2y2Am6i4i+WQf +j3/Gt7tRTlFNWZMZOLumeI+IfAGqaOkssUZ1CxJ+9GuZEH+0v+GR9K4K609GBMJUqOsb/wCeK+qi +OmKw9T8I6Bq04mvdLgeYnJkQFGP1K4zXJLCq94M76eOdrVFc+XpdNj2AhJI5B/EvzA1E2n3LlUCK ++VZyXJHQf4V9FXfwy8MhJJUguImwcbZiQPwOa8W12IRanLFZSOsQfahcfNx61Eqco6s2hXhNWSPR +/hDoyS6Fqsd5CQJ18neTy0bKdw/A55ryS7tbrStRutFnfy/slw6MAOpBxn34A/Cus8K+OtV8NN9k +kaGa2jGTGy4ZuckAjvUXj24tdf1K38U6XE32aVAlwrLjbIvGG98Y/CnOK9mkRTlL2rfRnHgNazc8 +FeeRjmvaPidpsd14N0PWbePH2XYu0dfLkUcfmFrzTwv4fv8AxZr4ihU+WxxPKVysSA8t19Bx6mvo +4aHYnQE0WWLzbNIRDhu4Hf60UaTcZeYsRWUZxtuj5ugM0KMY0O7JIDjO36HvUcsZuZ1ureT7MWIa +WBFJXzV6MvI2gjnIPByB2r1DU/hPdwS+dot/G67jiO5yrAccZHX8RXPX/wAOvE5eN004bgdrSQSo +Tj1IJ5HtWHsasJHR9ZozjZs7Twl8RbS+8PXFxrcqxXNigMsijiZegIH9/oCBxkgjg4HK+PvFaeJb +ZLS0DrpudwDDBmYdGYf3R2Hfqahg+Fut2lj9rltI5bneT5KSBmC9B1wM8nvXU+EfAE0YW78RQxsY +ziK2GDx6vjj8B+NdCnWk1C1jm5cPTTqc1+yOI8MeC9R1yWMRRmO1B+e4ZcKB7ep+le7aZpttpGnQ +2Vom2GNcD1J9T6mrEaIkaoihUHAVRgD8KkFdVOHKcdWq6j8haaRxinGkrQyOA+Inh7+0LIX4GWiO +yQY7djXhmo2UljO6IDtr6ueJJYzHIoZG4ZSODXjnjfwl9huHlRC1q+fLf39D9D+dc1WHVHTQq20Z +5T9ndrYy43JnkCq3lyBclGxWrcxz2iMiZ2HkVnq00h8okcgkZ6ZGeKVOpbRmlajdc0dilNbRzg7l +AY9+4qj/AGYhbajOknp1B+lajZwuVwwGGPrTGQOuCDx0x1H410o5DK/smUcxzDI6npxT49IlkfLu +pB+9jORWmqszYLcn1p6rtKrzuP4GgQum2EEDKIlLM3Vm6/T2Fdba3RikSJNxWPgYGRmsKEm2TnHm +sOM9BWjpYmknwkYZicAA4JP0oGe++Bbl5vDaM+775x+7Ix0rqA2R1/SuS8ByImkPBHuxGVDMOQX/ +AIj+ddcDkdjSTuSxaM0maKoQtFHejNABmikoNABRRRQBJilxSCloASiijNACGmkU44HNHUUAJ2oP +SqOoatZaZHuu7lIsjIB6n6VybeMdT1o+V4e06R8fembBA/OsaleFPR79uptToTqK6Wnd7HaSzxwR +s8sioq8kscYrAufGemqWis2e5uP4VRDjPucVQtvBU99cm58QXxuy3JhT5Vz6EjqK6iw0qy0yHyrK +3SJT1x1P1NRetPb3V97/AMi2qEN3zP7l/mcdt8UeJkZGb7DZuMEY25B/U1v6P4XtNIlFxuae5CbB +IwxtHsO1b1HFFPCxjLnk3KXd/p0QqmJlJcsUorshcewpKAe9Ka6TnEpCKX8aTNAHl+v+A9Su9cc2 +QUW7ZZZTgBc5yPrniu08OeGNO8N2YjtLZVmKgSTN80jnvlvT2HFbtVbu7W1i3lS2Oy81moxjqaSq +SmlFlkcAD0pSRWA2uXXmApYSlDzknFQT+KWUFIbCZ5cdMYFQ8TTW7/MpUJvZGnrl6LHS5pNwDbcA +d81leEbXbbNdtnc5+UnuKqR6Xfa3ci41VgsW35YF6D610E1zbaLpTyuypFAvAHf0FZRTqVPayVkt +jST5Kfs1q3uebfFnxZLb3KaLaHgIWlfvuPAA+g/nXD+EfD76lqVtZkfNO4LtjOE7n8qjnabVdbud +RumMm+VtpJ45P/169f8AAHh7+ytOa9uUH2q6HA7onp+Nc6bxFXyPRlbCULfa/U7SKNIY1jjULGqh +VUdABT88VHvAFIZBXpnikmcmkzUe8Cjdx2oAl3DFJuBqHfzRvxQAy+mWG1lckABTk15v4b0DTfE6 +6hLdwgkykK46jpXT+M7/AOxeHrlx94rgCuc+FE7TaVdSHPzTNWUrOaRvC8aUpI5XxN4DvdCuftNv +ma2B+WTH6Gquj6faavNLZTQeW0jK+2MlVZl9QO+K94dUkQpIqsh6gjIP4VnW+gaTaXTXMNjCkpOc +44H4UpU3fQqOI013GeE7b7J4YsoHhSJ0Qq21du7aSA34jnmtzNR7uaTOeK1jFRVkc8pczbZJnIxQ +OtM3Yo31Qh/BpQRURfnijccdqAJaUGofMOetL5lAiUmjPFQ+YDxR5nuKAJd3FVri2gu7WW3uI1li +cYZT3+nvUm8Yppk4696VgPJPFvgeexDTwIZ7TJYMByvXg/415nfWRglYnI9PevqbcpGDggjBHr9a +4rXfAmm6tNI0BFrI3oMrn6dq5atFvWO524fEqOk9jwNYTIccDd0P51RG0tlsqOea7TWvB9/pOsC0 +neN/NB8tozw3tWFfafJaPIjQMCqjkjqc1VOo9mFWkt09GZsUUtyzEAllGSPYdT7mplCwR70ffKDg +n+6fWmf6SCrxhlKnAK8YP/6qVIRh2Z1XaOV6n04ArW/cw5X0HbvOdi4AY4yQOGrotMX7Cy/O/nMM +BV5MY/vZ9fas+2tZdpEMSrtKt5kgwpU9wTx2rrvC2lQ6lqK2kCJcXYYM0iMfLiHfOeo/zmk5r5By +NbnqHgO0Npoe+SNh9oYOnykZUDg11i47Y/Diq0GxYUjA27FC7fTAqfI+prRGTH57Uufeow1Lu4pi +HEkUZ70zJ4ozQBIDQTxTcgUZ5oAcDRTCaKAJzntS+1FH0oAKMUCq17ew2Fs9xO4VFH50m7asEruy +G31/bafbme6lWNB6964HXfH11cZsdFt3FxKdsRHLt9B2rnPFOtat4k1uODS4ZHU5UKnzbR/nvXce +DvBiaQF1C/Ak1B147iIHsPf3rk9pOrL92/d7neqVOhDmqq8uxnaD4DurjbqHiW6nmuGOfs5kyqj0 +J7/hXfw28FvEIoIo4kXoqKFH5CpenFBrphTjDY5KlWdT4n/kNGBTu1MGCw60vIOT0qzMU033oJNI +CelAC5xQTmkLDOKQ0AGTilzimE8YNIWPSgCUnA4qJlD9aVmI9OaZuIJHH1oGRPbA8g9aqtYhWATG +O5q4XJpm/nAqHFD5mRLHIvG7iuF+Jt4p0uCwW7xLLJ88Sjkr2JPYZrsNZ1ZNJ0m5vZQzeUvCr1Zj +wAPxrzDTbC+8VawZLg5VOXJ/gB7D3rkxVVwSpxV2zuwVFSftZu0Ymh4b8JQnSrS/vFVvMJEcLD5Q +B3Pvnt2r0bT3ZtPgd+HaNSQfp/hVRLGOPTobKPAiQBSe4AqysiqAFwAOAKqhQ9k7+S+8yxFd1Xd9 +/wAC1uzyc0bwKqiYng/nTHmx1NdZylsyZ9KQv71TMuOlJ54xzjrQFi8ZPQikMhx2qkJvegzjGSaB +2OR+I17s0zyiRzzVT4TkpoEmM8yE1kfEW6EiMC/bAFbXw2Rrfw6ucZYk1zRleqdko2w3zPQhIOh/ +Gl8z6cVnrcAA8nNKLgZ6iuk4jQEvOKUyAcis/wA/jrTzcccYoAu+YMUGTjtVHz+cHPvSmUA4OKYF +oSj1/Gnb/U1SMuBweKQTYUmgC5vHWgygdKpCbKnOKaZ8A5/OgRdMmOQRSebnnjFURMDzuPTpTGnI +yRmgDQacdOtNM3GTjHes77SPbNNkuht+UnNAGi04XvmozOBIx9cc1ltc4VSCcnrmoGuM5AbBHFAy +l4x01NX0/wAyMkTRHchHXNZWhT2Gu6ettqllBcTRNhxMuW7jr1rVe93BkOPSuM1DfpOpC9tmKxyc +SAfzrlqv2c+fp1Oyh+9h7Lr0OofwX4bmCrFbPbMpzmKXJJHQ/Nmq8ngHTY4JXs7u486YYzNghckH +jA45+tRJrO+NJA/XgUJrp3qoJODx7Vq1FowvOLsZH/CG3D3UdrPbSeYvyrL5mUbBz17V6P4b0ez0 +LTBbwRqpbBlYLgsexrJs9VLbWJOW61sQXIPPHI6VNOkoO9wnUc1Zm6rZHOOOhp4kGazopiR149am +D/UmtzEt76dvqupJHNSA5A5oAl3cZoBOOeKj3Z+lO7Y70ASDmnZqME9sU786AFopM47GigC1Rmko +PpQAZABJIwO9eW+OdelurkW0DHYOEA6n3r0TVpvI0qd8nO3GR71x3h/ww17qP9qX6/u0P7tG/iI/ +pXFiXKclRj139DuwbhTvWn029TR8D+HP7J08Xdwp+2XAyc/wL6V12cEUmAOlA659K6oQUIqKOSpU +lUk5y3YUZBo9s0cDirIGn9aOaU9KDxgCgBrZpM/LmlxxjqaaMjtQApJ9qaWYjigAluc5pGHrx70A +IOPemliT9KQZZuMijBOc8YoAa7E8HFIxO3I60NnBHb1pmSeDx60DE3cEGoy/OAeSKfIRtGMVF825 +gFzx+dIDkvHt0YtGt4lBxJOpY56hcmo/AaFNJuJugkmIB9cAVQ+Ilxuks7RMeYoLlR1y3yjj8DXS +6BZiw0e2tygVkRTKP9rvXCo8+KcuyPRk+TBqPWTNPzfkx78VGZAF28jmnOq5BLDB6ev5VE6gN8q8 +joa7TgHCXjB7frUcj7s0/wAvopwOP1qN42B+6fzpAIXPYg8cj1qESk5z9eae0eCMrjJzkUCEEEhj +tA7Dk0ARLcFl+X6H60GUgDOKYYTGwkKjBPbqKfLBhchgeaGM8r8dGaa+CA5BIAru/DETWWhQR98c +1yOsRtdeJI4ChJ3jA/rXoUMJgtkAH8IwK5KF5VJM78TaNGEUSNMcYAoDMc8n8KVY/lB69qeIMcEn +PrXYeeL5hK9+nWnbiABSpER8p6+pp5jIGQR+FMQwMfcn3pfMyR7UvlknnGadsPU96QDS2aaXO373 +4VKEyMYH48U0xDrxz39KAI95AAxSbvQ8elTCJiAfwpnlFm5x7k0xELO3B/Smsz47nI6VMYCDkfXj +rUZjb73cdBigCu3ygE5GPWoHdn46e9aDxnHQYPWoDbh9u3H0oAoNuVTtIJ9CaqyvKsatydx57VqN +ayOWyA2T17Ypy2R2kHOPQmkMw5ELhj1Y9vWsu7tTcxNGxDL0HFdX/Zu47Uzk9AelOj0w5OUAqZwU +lZlwm4NNHn9gjtN9hfAdeVJrZj0phIpEZOc5x6Vd1vQ2t8X1shMiHJHqK2NEeC/s0mQ5IGMHrn0r +moe5L2Uvl6HTiLTXtY9d/Up2mnsOQOOMEc/lW1b25QAgc+9WobZEG7AAPPpVtIRwRjjnGK7EjibI +oo9pxjmrCKV45qRY9uOB+FSbMCmIYMkcHH1p4BxjOM04Lg84zTtp4oAbtIxzx605R6mn4HvxRyOP +1FACYI9qkUkHFNX5geopwFACFiD0zRS4aigCx70hPTNLSAetADZI0lQpIoZT1BGRS4VQFAAA7CnZ +9KTjPIoAAD0OKOOlB7UDAFAAeORRx+NHak6gnigBcfnSZwxyMUH1NAA6n8qADGRzk0zkZ4p+Tjik +70ANyeCaQnHXmlGc84o6k0AMZfl44x+dI3IIHFOwc96a3Tbk80ARyY2jJP0FNVd6425PapmB4x+V +ULjVrK1WQvMCyc7EBJP09TUyko6spJvRE2G6cYx2FVL+6h06wlvLhmEUS7jgcn2HqayR4t+2SGLT +tOe5fBIAcDH16gfiaxv7M1TxPeW1zqhFvbcnyskDAz/D/tEjknJrjnjIyVqPvP52OqGFad6rsvxM +/TorvxL4tj1oxCKz3iIDdkhlXI+v+Negsiq2BgZPRqi0+zt9N063togqiEfmfWrWUHAwT1JrWhTc +I3k9XuRiKqqS91aLRFbyg7EKPrmmRxNu24GAen9KskjPApEIxuVSMdM1uYEbpgehHPpxTDFgfOMg +dPapwN6Bsd+aQqzAjr70AVmjDMAvOeAB1FOMRGMHH14zUsaFt2Rj2zTzGei9SetAFdovlwcH1phi +4IJBB5HrVzy8jPPHGTUci4RjwQBxSY0cYLOG48TtJ5YLIvUdjXUpEzSBeDtHH1rK0OHzdQurk5Pz +Y9uK6CKJQvfJPfvWVFaX7m2IfvJdkVhEMqRjd1IqQxZ6dBU5iBOSOnGKeIzwevtWxhcrCPbwQCPU +0LD06e1WwgBz+lO2g9R26UxFNoDuJ/hIoSBwNvIIPX2q35YLHIpQg28du1AFTyjjB6nr704whuR1 +Hc1Y2AgZzxT9nU7QTTAqBFcc+vakEOFzwCTmraxbTlceu2lCZyV79aQFUQgYK8H1pGhHAYDPYirm +zkEUMuOCMEDimBRkgQ9AeOKXyAcEA88A1d8se3FKo+XjNAFJrcnGMemKBaqOoBB7GrwQA4pFUkEE +AkUAUTbc8Kfw70qwHGcAZHrV/Znp9aQJjjt2oAoyWyzxlCQcjpXIrC3hvWipQfY5269Nrf4V3uAD +xnNUNX0qPUbGSJ16jhvSsK9NyXNH4lsbUKqi+WXwvcmiEboCq/KeQanEYz6nua5nwzqE6yTaZdk+ +bCcKW/iX1rrAMjsKulUVSCkiKtN05crIlX05zmlUd/epMA5BpQo28VoZjenA60pGMfWnADjH40Fc +jnpQAmOKXoPrSAEHtTvY5FAAMHmlwKQ9RnOKcOoxQA38DRTuaKAHcilz2FHWkwR9aAFzjpQDzgU1 +u1OxjrxQAdKSkA5OCadjJBFACHqDSUuOeaack0AAPQ0H2/Ojt0NAXNAA2CO9A44PNKMijGOg6UAJ +gA0YPbFLjv1FGQRgZoAaT6UADGeaUU4DjHWgCMoCv1rH1DQ7fUbmKeeFZDDjywCQB9cda3MdaQDi +plFSVmVGTi7oynsXFu0I2ojcsI1C7vypp05d4dmct9cVqHJbPWlIHQd6XIg5mUVsVXdgHJ9eRTja +oDxn3q7t2jjvTWGetVYVyoYRStF8uAAatBQeMCkCgcUWAqrFyAO3JpfL4I7frVhUwc+tBUZ70WAr +CPIY8n0pwjwRmpiMCgAHPWgCAoeR2zVa+xHZyOcDCmtHbxjFZWvtt050HVuBUVHaLZdNXmkU/Dls +V08uwIMhLfnWyI8HpUenR+VZxKRxtqztPtRTjyxSCpLmm2RBM9aXbnnBzUoUgYNO2d6sgiC9SeKQ +DHHNTYxxQQDQBHsG3tTW64UYqYDjmjuOKAIdv/16XjOMU/HJ4FBXmmBEwIYMOnQ08ADGOlSbR+fW +mIuOD2oEKB60FR159Kd/I0EUDG7QFxnr3oC44pTkgCloAQjvzRjBB5p3rxTTxigQBQKXYRjGMe1L +x3ozQABeOaTbxjtTuODS45oAybzSIpt0keY5/wCF16iqdhq81vdfYtQwsn8L9A9dFgVQ1DS7e/Rf +MUbl5BHUGsJ02nzU9/zNoVE1yz2/IuKQ3PHtT+AegrBmOoaYd65uIB2x8wq9Bqtu6qXfYzfwtxVR +qpuz0ZLpO11qjRx3FJjvTFmRhkMPwNSDkdq0uZibfWlxilpPamAvWg9PpSZzx0pR0oATGeaKXGaK +AH9Kbnmn/hTDjpQAcUp4FHNHWgA7ClFJjPrQKABsnmk6ilJNAoATmjtSkDrR2oAO2DSbRilPPWg4 +oAT+GkPIyKUHijqaAEHHFOHvSHilxxQAfSg9KUCkPBoAaEGc0EDr3p/UYpuKADGetNIp+MUhHegB +u3ikK08CkPTFADQKCKdtPWg9KAGnBFBGOlKfSkA6UAHTisDXZf8AS7W3AOGcZrfYgAk9qwEZL/Wm +4yIcAH3rCu7pRXU3o6NyfQ24l2xgdgKcQetOAwAKXHStzETGeaMU7gU00AGM0ce9HbNGaAEPAox7 +UvXFKM9KBDcUmOaePSkxzQAmKQjvUhApoHNACdRSgZFGNtAoATHPNG38qdil9qAG4pCOKeBSEcUA +NC0hBzUgGBRigCMDmg596lA+lJigCPcRzShs07bkUhTigY1trLg1Vn062uVAdFOOlW/LppRgeDUS +ipboak1szNm0kcGGV4yOnPFQWVxdwXzW10xdeqtjFbJD1AsGZN7KM1n7JJ3joX7RtWkWxgiimgEU +/Ga3MhMc5pQKMUUALRRRQA/NM25NKTQDQAYoFOHpSdKAFzTc4paQigBTyKB0pBS54oAMUgFFAPNA +CmmnpTjSGgAApAOadSAUAGKX2opD1zQAtJk9qDSigAxiijvRQAdetNNP7U3FACA9qO9OFIRzQAva +jAJoFFADSvNNY47gYp5qrdswhbb96k3YFqUdV1SO2hZVOXPQDk5qLRLTy4jO+N8nzE1WtNMZ7gzX +OWbdke1bcabFwMAVzxUpz55HRJxhDkXzJs5ozTACKkC10GACjbTgKWmIQClwMUUv+elADcDNFLj6 +0YoAaBSjpRnFA5oAPwpaMYoFACEZpMU+mnrQAUYpaO9ABilNFFABSUClxQAlH5UUYoAKBRRQAppt +LSUALgUYHoKKXtQA0ilHFFFABRRRQAo6UUDpRQAGgDFFLQAUUGkzQAtFANFACUdaKUUAGKTnNLRQ +AlLQaKAAGikFKaACj8KKCaAExS0gNGc0ALR3oFJ3oAdSUUGgApM0GkoAcOlJSjpSUABqNow3XFSm +gUAQeUB0ApwTFS0UrDuMK0uOKdRTEIKKMUuKAExSGlooAKQE5paKAEYZoUYpaB1oADR2paQ0AIKK +KO9AC0lL2pKAAmiilFACUvag0lABRRRQAUUZpDn1oAXtR+VFAFABS0Uv4UAJiiiigBKKUikoAKKK +KAFop1FACc0mKdijFADaWlooAT8KKWigBKKWigBKOaKWgBBxRS0UAJSU6igBuKMU6igBuKWlooAS +ilooAbRinUUANop1FACUUtFACUUtFACUUtFACUUtFADaKdRQA2jFOooAbijFOooATmkxTqSgBMUm +KdiloAbRinUUANxRTqKAG4oxTqKAG4oxTqTFACYoxS4oxQAmKMUuKMUAJS80UtADaKdRQAlJinUm +KAExRS0UAOooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo +ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACjFFFABRRRQAUUUUAFFFFABRRRQAUUUUAGKK +KKACiiigAooooAKKKKAEopaKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii +igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK +ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA +KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo +oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii +igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK +ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA +KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo +oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii +igAooooAKKKKACiiigAooooAKKKKAP/Z +" + height="465" + width="500" + style="fill:none" /> + <path + sodipodi:type="arc" + style="fill:#803300;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path3066" + sodipodi:cx="471.42856" + sodipodi:cy="463.26443" + sodipodi:rx="34.586468" + sodipodi:ry="30.451128" + d="m 506.01503,463.26443 a 34.586468,30.451128 0 1 1 -69.17294,0 34.586468,30.451128 0 1 1 69.17294,0 z" + transform="matrix(1.2768296,1.126433,-0.68084801,0.68989416,190.5464,-394.68917)" /> + <path + sodipodi:type="arc" + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path3068" + sodipodi:cx="253.7594" + sodipodi:cy="448.60278" + sodipodi:rx="35.714287" + sodipodi:ry="20.300753" + d="m 289.47369,448.60278 a 35.714287,20.300753 0 1 1 -71.42858,0 35.714287,20.300753 0 1 1 71.42858,0 z" + transform="matrix(0.86409852,-0.7819386,0.8537616,0.94346812,-353.02483,212.88236)" /> + <path + sodipodi:type="arc" + style="fill:#803300;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path3070" + sodipodi:cx="323.6842" + sodipodi:cy="435.06894" + sodipodi:rx="28.947369" + sodipodi:ry="21.052631" + d="m 352.63157,435.06894 a 28.947369,21.052631 0 1 1 -57.89473,0 28.947369,21.052631 0 1 1 57.89473,0 z" /> + <path + sodipodi:type="arc" + style="fill:#803300;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path3072" + sodipodi:cx="365.78946" + sodipodi:cy="438.82834" + sodipodi:rx="22.932331" + sodipodi:ry="25.56391" + d="m 388.72179,438.82834 a 22.932331,25.56391 0 1 1 -45.86466,0 22.932331,25.56391 0 1 1 45.86466,0 z" + transform="matrix(1,0,0,0.7293677,-1.5037594,121.16826)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 276.69173,443.33963 26.31579,-5.26316" + id="path3076" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 316.54135,453.86594 c -49.75806,-7.04817 -51.52348,32.67249 -69.17293,63.1579 l -6.01504,18.04511 -19.54887,12.03007 c 4.652,8.39144 19.05712,-6.07745 26.31579,-10.52631 l 6.76692,-24.81203 c 15.83895,-19.51052 22.24176,-36.13398 25.56391,-53.38346 22.22203,6.05122 55.67453,35.92901 66.16541,3.7594 l 6.76692,21.80451 -21.05264,-8.27068 -6.01502,29.32331 -9.02257,72.18045 -11.27819,11.2782 c 11.15619,1.07856 7.02262,-0.23515 15.78947,-11.2782 l 13.53384,-92.4812 c 13.96302,4.13582 18.77423,13.23186 23.30827,-1.50376 l 7.51879,-9.02256 -3.00752,-16.54135 0,0 0,0" + id="path3080" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccccccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 366.16541,462.13662 c 1.29514,19.58738 12.74418,19.41826 24.81203,18.04511 16.48887,0.16162 22.17148,-13.34985 34.58647,-33.83458 12.4817,28.85175 17.88689,30.70839 42.10526,48.87217 l 49.62406,63.1579 27.81955,12.03008 C 508.99379,557.89472 486.1266,510.61886 464.66165,477.92609" + id="path3082" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 391.72932,437.32459 -3.00752,-63.90978 29.32331,18.797 -1.50376,21.80451 9.02256,-23.30827 -41.35338,-24.06015 -0.75188,66.16541" + id="path3084" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 322.55639,414.01632 14.28572,-20.30075 11.27819,34.58646" + id="path3086" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 236.09023,468.90353 -18.797,19.54888 c -6.02001,5.28057 -4.22688,-12.64953 -2.25564,-35.33835" + id="path3088" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#aa4400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 218.04512,446.34714 -16.54136,3.00752 -18.79699,25.56391 -57.89474,32.33083" + id="path3090" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#aa4400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 221.05263,434.31707 -10.52631,-8.27068 -24.06015,10.52632 -32.33083,12.03007 -6.01504,11.2782" + id="path3092" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 332.33083,414.7682 c -15.68872,-8.32212 -20.92233,-6.13774 -36.84211,1.50376 l -12.78195,0" + id="path3096" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 388.7218,442.58775 3.7594,-6.76692 c 1.12597,-20.61996 5.5393,-12.50022 18.797,-2.25564" + id="path3098" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 386.46617,469.65542 3.75939,-6.01504 -1.50376,-6.01504 c 7.88757,-10.30435 18.01034,-11.66791 27.81955,-14.28571" + id="path3100" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 409.77444,430.55767 c 3.14507,-15.70284 12.02199,-10.38888 21.05263,-4.51128" + id="path3102" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 388.7218,468.15166 28.57143,-25.56391" + id="path3106" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 415.03759,444.84339 15.0376,-7.5188" + id="path3108" + inkscape:connector-curvature="0" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 387.96992,455.3697 -11.27819,-4.51128" + id="path3110" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 279.20815,441.1072 c 0.24176,-0.57881 1.36046,-3.25164 2.48599,-5.93961 1.64421,-3.92665 2.0624,-6.14334 2.12767,-11.27819 l 0.0812,-6.39098 6.76692,-0.43152 c 5.75904,-0.36724 7.71879,-0.87052 13.15789,-3.37902 5.72269,-2.63929 6.98065,-2.94024 12.03008,-2.87808 3.95706,0.0487 6.64831,0.52806 9.02255,1.60702 l 3.38346,1.53758 -3.38346,-0.001 c -4.31186,-10e-4 -8.55214,0.53401 -9.66184,1.21985 -0.47546,0.29385 -1.17944,0.33961 -1.5644,0.10169 -0.38496,-0.23792 -0.91586,-0.0832 -1.17977,0.34383 -0.26392,0.42703 -0.77144,0.5962 -1.12782,0.37594 -0.35639,-0.22026 -0.86391,-0.0511 -1.12782,0.37594 -0.26392,0.42703 -0.79481,0.58175 -1.17977,0.34383 -0.38496,-0.23792 -0.69993,-0.0543 -0.69993,0.40805 0,0.46235 -0.33835,0.63152 -0.75188,0.37594 -0.41353,-0.25558 -0.75188,-0.0864 -0.75188,0.37594 0,0.46235 -0.30833,0.65007 -0.68518,0.41717 -0.37684,-0.23291 -1.64454,0.59299 -2.8171,1.83532 -1.17257,1.24233 -2.55597,2.25879 -3.07423,2.25879 -0.51826,0 -0.94229,0.50752 -0.94229,1.12782 0,0.6203 -0.32965,1.12782 -0.73257,1.12782 -0.944,0 -3.11632,4.17116 -2.49559,4.79189 0.2592,0.2592 0.16112,0.47127 -0.21795,0.47127 -0.37907,0 -0.75971,0.84586 -0.84587,1.8797 -0.0862,1.03383 -0.22392,2.30263 -0.30615,2.81954 -0.0822,0.51692 0.0805,1.65332 0.36156,2.52533 0.47495,1.47346 0.0451,1.67651 -6.08483,2.87414 -3.62774,0.70877 -7.4128,1.48392 -8.41125,1.72255 -1.36525,0.32631 -1.70637,0.17295 -1.37578,-0.6185 z" + id="path3112" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 313.08034,582.68316 5.07681,-5.11602 4.4944,-36.0494 c 3.99019,-32.00519 8.90859,-61.86739 10.49248,-63.70531 0.27882,-0.32354 4.97419,1.15879 10.43415,3.29406 5.45997,2.13528 10.12435,3.68518 10.3653,3.44423 0.54339,-0.54339 -6.58604,-23.81922 -7.29587,-23.81922 -0.2827,0 -1.18376,1.60715 -2.00235,3.57143 -3.41998,8.20651 -7.62827,11.03497 -16.38131,11.01012 -6.8596,-0.0195 -11.65725,-1.67337 -29.69925,-10.23825 -5.5827,-2.65022 -10.96547,-5.15507 -11.96169,-5.56634 -1.799,-0.74267 -1.79247,-0.7567 0.9593,-2.0625 4.7099,-2.235 13.11903,-3.63751 19.27307,-3.21447 5.33826,0.36697 8.93671,0.81929 9.77444,1.22864 1.05533,0.51568 14.03055,0.36439 14.77048,-0.17222 0.47339,-0.34332 1.15008,-0.57227 1.50376,-0.50879 0.35368,0.0635 0.89681,0.0331 1.20696,-0.0676 0.31015,-0.10066 0.90225,-0.26761 1.31579,-0.37099 0.41353,-0.10339 0.92105,-0.27256 1.12782,-0.37594 0.20677,-0.10339 0.6297,-0.2469 0.93985,-0.31892 2.23064,-0.51797 3.94737,-1.4016 3.94737,-2.03176 0,-0.41008 0.33834,-0.53648 0.75188,-0.2809 0.41353,0.25558 0.75188,0.0633 0.75188,-0.42733 0,-0.49061 1.5477,0.53461 3.43934,2.27827 3.87286,3.56987 8.88,6.05148 12.70362,6.29609 1.41319,0.0904 2.84224,0.43437 3.17564,0.76435 0.33342,0.32999 1.13487,3.53511 1.781,7.12249 l 1.1748,6.52252 -3.43043,4.05545 c -1.88674,2.2305 -4.27631,5.78313 -5.31014,7.89474 -2.47677,5.05881 -3.98855,5.20755 -12.76466,1.25588 -7.8273,-3.52445 -8.87515,-3.67679 -9.38179,-1.36397 -0.20383,0.93045 -3.28833,21.80884 -6.85445,46.39642 l -6.48385,44.7047 -3.47261,4.91936 c -4.09761,5.80475 -4.35749,6.02071 -7.26308,6.03568 -2.19812,0.0113 -2.15064,-0.074 2.84134,-5.1045 l 0,0 z" + id="path3114" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 223.7815,547.99619 c -0.23973,-0.38788 3.78623,-3.30508 8.94656,-6.48266 l 9.38243,-5.7774 2.74334,-8.36698 c 1.50883,-4.60183 4.03321,-10.91668 5.60973,-14.03299 1.57651,-3.11631 4.91665,-10.30021 7.42254,-15.96422 8.20663,-18.54931 13.17328,-27.1986 18.41675,-32.07225 2.47687,-2.30219 2.45542,-1.70518 -0.23452,6.52635 -4.03778,12.35609 -9.17302,22.17279 -17.41074,33.283 -4.81136,6.48909 -4.82017,6.5124 -10.42479,27.59839 -0.75517,2.84111 -1.62969,3.73919 -8.22942,8.45113 -9.4788,6.76746 -14.86271,9.03682 -16.22188,6.83763 l 0,0 z" + id="path3116" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 481.36906,511.10197 c -12.78527,-16.30394 -13.09498,-16.62814 -23.25703,-24.34558 -16.10306,-12.22926 -21.04483,-18.11087 -28.34432,-33.73497 -2.06767,-4.42572 -3.93907,-8.0541 -4.15868,-8.06307 -0.2196,-0.009 -2.22881,3.11338 -4.4649,6.93857 -9.81429,16.78889 -16.39432,24.25936 -23.07655,26.19937 -2.23171,0.64792 -7.14815,1.05627 -12.71737,1.05627 -8.70352,0 -9.18928,-0.0839 -11.74106,-2.02887 -3.07745,-2.34558 -5.44629,-6.9618 -6.19321,-12.06888 -0.50677,-3.46511 -1.41213,-4.55407 -2.18787,-2.63158 -0.20858,0.51692 -0.40595,0.17857 -0.43859,-0.75188 -0.0327,-0.93045 0.36357,-1.72605 0.88049,-1.76801 6.89887,-0.55993 10.04443,-1.54878 14.08985,-4.42937 2.04316,-1.45486 2.32017,-1.47454 5.09983,-0.36235 2.63252,1.05333 3.0128,1.54534 3.64337,4.71377 0.62031,3.11687 0.49278,3.88337 -1.07208,6.44364 -1.24295,2.03359 -1.53862,3.14347 -0.98494,3.69716 0.55369,0.55369 0.93512,0.41619 1.27058,-0.45802 0.26366,-0.68708 0.71921,-1.10101 1.01234,-0.91984 0.29313,0.18116 6.43249,-4.93519 13.64302,-11.36967 11.09535,-9.90118 14.20809,-12.25012 20.25515,-15.28495 l 7.1451,-3.5859 2.22937,5.74072 c 1.22616,3.15739 4.26339,8.78583 6.74941,12.50764 5.03403,7.53641 17.69102,20.71739 25.21934,26.26341 4.50342,3.31761 5.66776,4.85062 15.11486,19.9007 5.62957,8.9684 11.51165,18.08238 13.07129,20.25329 1.55964,2.17091 2.68603,4.09679 2.50307,4.27975 -0.18295,0.18294 -6.16366,-7.10315 -13.29047,-16.19135 l 0,0 z" + id="path3118" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 386.30199,453.79569 -2.86422,-1.38877 1.70092,-2.75213 c 2.39437,-3.87417 2.65309,-11.41196 0.5424,-15.80271 -1.50363,-3.12793 -1.52269,-3.8506 -0.90513,-34.32102 l 0.63085,-31.12581 19.16452,11.1755 c 10.54049,6.14652 19.25075,11.44061 19.35613,11.76463 0.10537,0.32402 -1.16041,3.97259 -2.81286,8.10793 l -3.00445,7.51879 0.18968,-7.79044 0.18969,-7.79044 -15.0376,-9.65304 -15.03759,-9.65305 -0.2018,3.15777 c -0.11099,1.73678 0.43807,16.3223 1.22013,32.41227 1.42052,29.22545 1.42043,29.25703 -0.0887,31.81478 -1.06219,1.80027 -1.27449,2.79641 -0.7152,3.3557 1.11976,1.11976 4.33294,-5.5067 4.98946,-10.28964 0.74283,-5.41169 1.90016,-8.64661 3.09344,-8.64661 0.57083,0 3.97698,2.35814 7.56923,5.24032 3.59224,2.88218 6.8428,5.04784 7.22347,4.81258 0.38066,-0.23527 0.14052,-1.03727 -0.53366,-1.78223 -0.67887,-0.75013 -0.91179,-1.54852 -0.52204,-1.7894 0.38706,-0.23922 0.90069,-1.41962 1.14139,-2.62312 0.2407,-1.2035 1.25612,-3.13973 2.25649,-4.30273 2.37656,-2.76292 5.83567,-2.70601 10.97501,0.18054 3.78945,2.12838 3.81687,2.17066 3.82782,5.90314 0.006,2.06767 0.20947,4.49935 0.45201,5.40375 0.38391,1.43154 -0.26859,2.00169 -5.0416,4.40533 -3.01541,1.51854 -6.179,2.84202 -7.03019,2.94106 -2.97256,0.34587 -15.10013,4.34179 -18.67451,6.15306 -1.98208,1.0044 -4.86044,2.93466 -6.39634,4.28947 l -2.79255,2.46328 -2.86422,-1.38876 z" + id="path3120" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 214.83706,487.4308 c -0.64614,-1.68382 -0.4798,-17.75105 0.23749,-22.9399 0.31441,-2.27443 0.6193,-3.72418 0.67752,-3.22165 0.17443,1.50547 4.6732,6.2193 7.17237,7.51524 1.28259,0.66509 3.94841,1.57826 5.92403,2.02926 l 3.59204,0.82001 -8.56028,8.52771 c -6.71291,6.68737 -8.66449,8.25614 -9.04317,7.26933 z" + id="path3122" + inkscape:connector-curvature="0" /> + <path + style="fill:#782121;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.75187969;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m 342.92561,419.42249 c 0,-0.43794 -0.50752,-0.79625 -1.12782,-0.79625 -0.6203,0 -1.12782,-0.33835 -1.12782,-0.75188 0,-0.41353 -0.25376,-0.68 -0.56391,-0.59214 -0.31015,0.0879 -1.32519,-0.26239 -2.25564,-0.77833 -0.93045,-0.51594 -1.69173,-0.68933 -1.69173,-0.38531 0,0.30403 -0.37958,0.1732 -0.8435,-0.29073 -0.46393,-0.46392 -1.3653,-0.64327 -2.00304,-0.39854 -0.7432,0.28519 -0.97074,0.13946 -0.63371,-0.40587 0.32201,-0.52101 -0.72312,-1.48072 -2.6962,-2.47583 -1.77213,-0.89375 -3.33954,-1.72911 -3.48315,-1.85634 -0.1436,-0.12724 2.03645,-3.5267 4.84456,-7.55436 3.07299,-4.40758 5.24561,-6.8979 5.4572,-6.25519 0.19334,0.5873 1.96336,5.88505 3.93336,11.77276 1.97285,5.8962 3.26953,10.89794 2.88661,11.1346 -0.38237,0.23632 -0.69521,0.0713 -0.69521,-0.36659 z" + id="path3124" + inkscape:connector-curvature="0" /> + </g> +</svg> |