diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 4b1fae36b..ac9f988c2 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -201,6 +201,7 @@ {"name":"node_scatter","order":3,"path":"scripts/node_scatter/node_scatter.yy",}, {"name":"s_node_bloom","order":6,"path":"sprites/s_node_bloom/s_node_bloom.yy",}, {"name":"s_node_flip","order":12,"path":"sprites/s_node_flip/s_node_flip.yy",}, + {"name":"s_node_gradient_data","order":17,"path":"sprites/s_node_gradient_data/s_node_gradient_data.yy",}, {"name":"s_node_vfx_render","order":1,"path":"sprites/s_node_vfx_render/s_node_vfx_render.yy",}, {"name":"node_stack","order":2,"path":"scripts/node_stack/node_stack.yy",}, {"name":"s_node_rigidSim_object","order":3,"path":"sprites/s_node_rigidSim_object/s_node_rigidSim_object.yy",}, @@ -420,6 +421,7 @@ {"name":"sh_skew","order":6,"path":"shaders/sh_skew/sh_skew.yy",}, {"name":"fd_rectangle_get_pressure_height","order":16,"path":"scripts/fd_rectangle_get_pressure_height/fd_rectangle_get_pressure_height.yy",}, {"name":"node_VFX_effect_destroy","order":12,"path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",}, + {"name":"node_cache","order":9,"path":"scripts/node_cache/node_cache.yy",}, {"name":"sh_bw","order":5,"path":"shaders/sh_bw/sh_bw.yy",}, {"name":"real_comparison","order":1,"path":"scripts/real_comparison/real_comparison.yy",}, {"name":"fd_rectangle_get_collision_mask_sprite_image","order":5,"path":"scripts/fd_rectangle_get_collision_mask_sprite_image/fd_rectangle_get_collision_mask_sprite_image.yy",}, @@ -564,6 +566,7 @@ {"name":"sh_invert","order":25,"path":"shaders/sh_invert/sh_invert.yy",}, {"name":"preview_overlay_puppet","order":4,"path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",}, {"name":"s_icon_64","order":2,"path":"sprites/s_icon_64/s_icon_64.yy",}, + {"name":"s_node_gradient_replace","order":18,"path":"sprites/s_node_gradient_replace/s_node_gradient_replace.yy",}, {"name":"node_perlin_smear","order":6,"path":"scripts/node_perlin_smear/node_perlin_smear.yy",}, {"name":"node_alpha_cutoff","order":10,"path":"scripts/node_alpha_cutoff/node_alpha_cutoff.yy",}, {"name":"sh_channel_R","order":4,"path":"shaders/sh_channel_R/sh_channel_R.yy",}, @@ -648,6 +651,7 @@ {"name":"s_node_camera","order":3,"path":"sprites/s_node_camera/s_node_camera.yy",}, {"name":"sh_vertex_pnt_light","order":4,"path":"shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.yy",}, {"name":"surfaceBox","order":22,"path":"scripts/surfaceBox/surfaceBox.yy",}, + {"name":"node_gradient_palette","order":11,"path":"scripts/node_gradient_palette/node_gradient_palette.yy",}, {"name":"s_node_csv_file_read","order":12,"path":"sprites/s_node_csv_file_read/s_node_csv_file_read.yy",}, {"name":"node_fluid_domain","order":1,"path":"scripts/node_fluid_domain/node_fluid_domain.yy",}, {"name":"s_node_repeat","order":23,"path":"sprites/s_node_repeat/s_node_repeat.yy",}, @@ -760,6 +764,7 @@ {"name":"o_dialog_output_visibility","order":2,"path":"objects/o_dialog_output_visibility/o_dialog_output_visibility.yy",}, {"name":"node_normal","order":1,"path":"scripts/node_normal/node_normal.yy",}, {"name":"s_node_glow","order":22,"path":"sprites/s_node_glow/s_node_glow.yy",}, + {"name":"node_gradient_replace","order":12,"path":"scripts/node_gradient_replace/node_gradient_replace.yy",}, {"name":"s_node_vfx_repel","order":6,"path":"sprites/s_node_vfx_repel/s_node_vfx_repel.yy",}, {"name":"fd_rectangle_set_collision_mask_surface","order":2,"path":"scripts/fd_rectangle_set_collision_mask_surface/fd_rectangle_set_collision_mask_surface.yy",}, {"name":"node_array_length","order":11,"path":"scripts/node_array_length/node_array_length.yy",}, @@ -832,6 +837,7 @@ {"name":"s_node_timeline_preview","order":2,"path":"sprites/s_node_timeline_preview/s_node_timeline_preview.yy",}, {"name":"node_csv_file_read","order":9,"path":"scripts/node_csv_file_read/node_csv_file_read.yy",}, {"name":"scrollPane","order":14,"path":"scripts/scrollPane/scrollPane.yy",}, + {"name":"node_gradient_extract","order":13,"path":"scripts/node_gradient_extract/node_gradient_extract.yy",}, {"name":"s_node_normal_light","order":29,"path":"sprites/s_node_normal_light/s_node_normal_light.yy",}, {"name":"node_transform_single","order":1,"path":"scripts/node_transform_single/node_transform_single.yy",}, {"name":"node_fluid_apply_velo","order":5,"path":"scripts/node_fluid_apply_velo/node_fluid_apply_velo.yy",}, @@ -937,6 +943,7 @@ {"name":"s_node_group_output","order":15,"path":"sprites/s_node_group_output/s_node_group_output.yy",}, {"name":"sh_channel_S","order":5,"path":"shaders/sh_channel_S/sh_channel_S.yy",}, {"name":"string_scale","order":6,"path":"scripts/string_scale/string_scale.yy",}, + {"name":"s_node_cache","order":27,"path":"sprites/s_node_cache/s_node_cache.yy",}, {"name":"node_repeat","order":26,"path":"scripts/node_repeat/node_repeat.yy",}, {"name":"sh_fd_advect_velocity_1_glsl","order":7,"path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",}, {"name":"s_node_image","order":4,"path":"sprites/s_node_image/s_node_image.yy",}, @@ -1006,6 +1013,7 @@ {"name":"fd_rectangle_get_material_width","order":15,"path":"scripts/fd_rectangle_get_material_width/fd_rectangle_get_material_width.yy",}, {"name":"font_sprite_loader","order":10,"path":"scripts/font_sprite_loader/font_sprite_loader.yy",}, {"name":"s_node_noise_aniso","order":9,"path":"sprites/s_node_noise_aniso/s_node_noise_aniso.yy",}, + {"name":"s_node_gradient_palette","order":16,"path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",}, {"name":"node_array_shuffle","order":22,"path":"scripts/node_array_shuffle/node_array_shuffle.yy",}, {"name":"fd_rectangle_update_material","order":21,"path":"scripts/fd_rectangle_update_material/fd_rectangle_update_material.yy",}, {"name":"sh_perlin_tiled","order":2,"path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index f17aa457f..7802698b6 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -234,6 +234,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_junc_visible_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_loading_s.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_loading.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_lock.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_loop_16.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_minus_24.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_name.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, @@ -269,6 +270,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_clock.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_graph.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_keyframe_strip4.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_tunnel.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_undo.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_unit_ref.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_vfx.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, @@ -560,6 +562,7 @@ {"id":{"name":"s_node_bloom","path":"sprites/s_node_bloom/s_node_bloom.yy",},"order":6,}, {"id":{"name":"node_image","path":"scripts/node_image/node_image.yy",},"order":0,}, {"id":{"name":"s_node_flip","path":"sprites/s_node_flip/s_node_flip.yy",},"order":12,}, + {"id":{"name":"s_node_gradient_data","path":"sprites/s_node_gradient_data/s_node_gradient_data.yy",},"order":17,}, {"id":{"name":"s_node_vfx_render","path":"sprites/s_node_vfx_render/s_node_vfx_render.yy",},"order":1,}, {"id":{"name":"node_stack","path":"scripts/node_stack/node_stack.yy",},"order":2,}, {"id":{"name":"sh_cell_noise","path":"shaders/sh_cell_noise/sh_cell_noise.yy",},"order":0,}, @@ -814,6 +817,7 @@ {"id":{"name":"fd_rectangle_get_pressure_height","path":"scripts/fd_rectangle_get_pressure_height/fd_rectangle_get_pressure_height.yy",},"order":16,}, {"id":{"name":"s_node_fluidSim_repulse","path":"sprites/s_node_fluidSim_repulse/s_node_fluidSim_repulse.yy",},"order":0,}, {"id":{"name":"node_VFX_effect_destroy","path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",},"order":12,}, + {"id":{"name":"node_cache","path":"scripts/node_cache/node_cache.yy",},"order":9,}, {"id":{"name":"sh_bw","path":"shaders/sh_bw/sh_bw.yy",},"order":5,}, {"id":{"name":"real_comparison","path":"scripts/real_comparison/real_comparison.yy",},"order":1,}, {"id":{"name":"sh_sdf_tex","path":"shaders/sh_sdf_tex/sh_sdf_tex.yy",},"order":0,}, @@ -977,6 +981,7 @@ {"id":{"name":"preview_overlay_puppet","path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",},"order":4,}, {"id":{"name":"s_icon_64","path":"sprites/s_icon_64/s_icon_64.yy",},"order":2,}, {"id":{"name":"save_function","path":"scripts/save_function/save_function.yy",},"order":0,}, + {"id":{"name":"s_node_gradient_replace","path":"sprites/s_node_gradient_replace/s_node_gradient_replace.yy",},"order":18,}, {"id":{"name":"node_perlin_smear","path":"scripts/node_perlin_smear/node_perlin_smear.yy",},"order":6,}, {"id":{"name":"node_alpha_cutoff","path":"scripts/node_alpha_cutoff/node_alpha_cutoff.yy",},"order":10,}, {"id":{"name":"sh_channel_R","path":"shaders/sh_channel_R/sh_channel_R.yy",},"order":4,}, @@ -1067,6 +1072,7 @@ {"id":{"name":"s_node_camera","path":"sprites/s_node_camera/s_node_camera.yy",},"order":3,}, {"id":{"name":"sh_vertex_pnt_light","path":"shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.yy",},"order":4,}, {"id":{"name":"surfaceBox","path":"scripts/surfaceBox/surfaceBox.yy",},"order":22,}, + {"id":{"name":"node_gradient_palette","path":"scripts/node_gradient_palette/node_gradient_palette.yy",},"order":11,}, {"id":{"name":"s_node_csv_file_read","path":"sprites/s_node_csv_file_read/s_node_csv_file_read.yy",},"order":12,}, {"id":{"name":"variable_data","path":"scripts/variable_data/variable_data.yy",},"order":0,}, {"id":{"name":"node_fluid_domain","path":"scripts/node_fluid_domain/node_fluid_domain.yy",},"order":1,}, @@ -1195,6 +1201,7 @@ {"id":{"name":"o_dialog_output_visibility","path":"objects/o_dialog_output_visibility/o_dialog_output_visibility.yy",},"order":2,}, {"id":{"name":"node_normal","path":"scripts/node_normal/node_normal.yy",},"order":1,}, {"id":{"name":"s_node_glow","path":"sprites/s_node_glow/s_node_glow.yy",},"order":22,}, + {"id":{"name":"node_gradient_replace","path":"scripts/node_gradient_replace/node_gradient_replace.yy",},"order":12,}, {"id":{"name":"s_node_condition","path":"sprites/s_node_condition/s_node_condition.yy",},"order":0,}, {"id":{"name":"s_node_vfx_repel","path":"sprites/s_node_vfx_repel/s_node_vfx_repel.yy",},"order":6,}, {"id":{"name":"fd_rectangle_set_collision_mask_surface","path":"scripts/fd_rectangle_set_collision_mask_surface/fd_rectangle_set_collision_mask_surface.yy",},"order":2,}, @@ -1285,6 +1292,7 @@ {"id":{"name":"s_node_timeline_preview","path":"sprites/s_node_timeline_preview/s_node_timeline_preview.yy",},"order":2,}, {"id":{"name":"node_csv_file_read","path":"scripts/node_csv_file_read/node_csv_file_read.yy",},"order":9,}, {"id":{"name":"scrollPane","path":"scripts/scrollPane/scrollPane.yy",},"order":14,}, + {"id":{"name":"node_gradient_extract","path":"scripts/node_gradient_extract/node_gradient_extract.yy",},"order":13,}, {"id":{"name":"s_node_normal_light","path":"sprites/s_node_normal_light/s_node_normal_light.yy",},"order":29,}, {"id":{"name":"node_transform_single","path":"scripts/node_transform_single/node_transform_single.yy",},"order":1,}, {"id":{"name":"node_fluid_apply_velo","path":"scripts/node_fluid_apply_velo/node_fluid_apply_velo.yy",},"order":5,}, @@ -1404,6 +1412,7 @@ {"id":{"name":"s_node_group_output","path":"sprites/s_node_group_output/s_node_group_output.yy",},"order":15,}, {"id":{"name":"sh_channel_S","path":"shaders/sh_channel_S/sh_channel_S.yy",},"order":5,}, {"id":{"name":"string_scale","path":"scripts/string_scale/string_scale.yy",},"order":6,}, + {"id":{"name":"s_node_cache","path":"sprites/s_node_cache/s_node_cache.yy",},"order":27,}, {"id":{"name":"node_logic_operate","path":"scripts/node_logic_operate/node_logic_operate.yy",},"order":0,}, {"id":{"name":"node_repeat","path":"scripts/node_repeat/node_repeat.yy",},"order":26,}, {"id":{"name":"sh_fd_advect_velocity_1_glsl","path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",},"order":7,}, @@ -1488,6 +1497,7 @@ {"id":{"name":"font_sprite_loader","path":"scripts/font_sprite_loader/font_sprite_loader.yy",},"order":10,}, {"id":{"name":"s_node_noise_aniso","path":"sprites/s_node_noise_aniso/s_node_noise_aniso.yy",},"order":9,}, {"id":{"name":"steam_ugc_functions","path":"scripts/steam_ugc_functions/steam_ugc_functions.yy",},"order":0,}, + {"id":{"name":"s_node_gradient_palette","path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",},"order":16,}, {"id":{"name":"node_array_shuffle","path":"scripts/node_array_shuffle/node_array_shuffle.yy",},"order":22,}, {"id":{"name":"fd_rectangle_update_material","path":"scripts/fd_rectangle_update_material/fd_rectangle_update_material.yy",},"order":21,}, {"id":{"name":"sh_perlin_tiled","path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",},"order":2,}, diff --git a/datafiles/Getting started/0 introduction.pxc b/datafiles/Getting started/0 introduction.pxc index 6e72f8b23..f6c881ade 100644 --- a/datafiles/Getting started/0 introduction.pxc +++ b/datafiles/Getting started/0 introduction.pxc @@ -1 +1 @@ -{"nodes":[{"group":-1,"x":224,"id":733659073,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,3,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":false,"visible":true,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":false,"visible":false,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,true,[0,1],[0,0],0,0]],"anim":false,"visible":false,"unit":0,"from index":-1}],"attri":{},"type":"Node_Outline","y":-160,"name":"Outline"},{"group":-1,"x":384,"id":16512342,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0," on a node to preview it ( will appear)",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-64,"name":"Display text"},{"group":-1,"x":-160,"id":440563485,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"Each node comes with junctions. Juntion on the left is input, right is output. The color represent its' data type.",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,400,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":32,"name":"Display text"},{"group":-1,"x":-320,"id":308341973,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,[64,64],[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,[32,32,16,16,0],[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,3,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.5,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,[0,0],[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.10000000000000000555111512312578,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,-4,[0,1],[0,0],0,0]],"anim":false,"visible":true,"unit":0,"from index":-1}],"attri":{},"type":"Node_Shape","y":0,"name":"Shape"},{"group":-1,"x":64,"id":629359290,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"To remove a connection, on the input junction",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-192,"name":"Display text"},{"group":-1,"x":-416,"id":820286206,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0," (or + ) to pan around",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-96,"name":"Display text"},{"group":-1,"x":-416,"id":660826364,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"Use to select, move modes",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-128,"name":"Display text"},{"group":-1,"x":512,"id":846782664,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"Or you can use export node, which allow you to save multiple images, or animation",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":96,"name":"Display text"},{"group":-1,"x":-416,"id":445759436,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0," on empty space to add node",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-64,"name":"Display text"},{"group":-1,"x":384,"id":413298552,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0," on a node to inspect it ( will appear)",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-96,"name":"Display text"},{"group":-1,"x":-416,"id":676613630,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"Getting started 0: basic control",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.5,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-192,"name":"Display text"},{"group":-1,"x":512,"id":229004945,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"To save an image, you can on the preview panel",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":32,"name":"Display text"},{"group":-1,"x":-160,"id":9120082,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0," from one junction to another to create connection",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":96,"name":"Display text"},{"group":-1,"x":384,"id":31770096,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"%d%n",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.020000000000000000416333634234434,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":false,"visible":false,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,80,[0,1],[0,0],0,0]],"anim":false,"visible":false,"unit":0,"from index":-1}],"attri":{},"type":"Node_Export","y":32,"name":"Export"},{"group":-1,"x":-416,"id":593948373,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"Welcome to Pixel Composer",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-224,"name":"Display text"},{"group":-1,"x":384,"id":948455280,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"You can inspect and preview a node",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-128,"name":"Display text"},{"group":-1,"x":544,"id":316393662,"inputs":[{"from node":-1,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,"and choose \"save current preview as...\"",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1},{"from node":-1,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":64,"name":"Display text"}],"graph":{"graph_x":368,"graph_y":214},"version":1300,"metadata":{"author":"","alias":"","file_id":0,"contact":"","description":"","tags":[],"aut_id":0},"animator":{"framerate":15,"frames_total":12}} \ No newline at end of file +{"nodes":[{"group":-4,"x":224,"render":true,"id":733659073,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,3,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"array_process":0,"attri":{},"type":"Node_Outline","y":-160,"name":"Outline"},{"group":-4,"x":384,"render":true,"id":16512342,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0," on a node to preview it ( will appear)",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-64,"name":"Display text"},{"group":-4,"x":-160,"render":true,"id":440563485,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"Each node comes with junctions. Junction on the left is input, right is output. The color represent its' data type.",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,400,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":32,"name":"Display text"},{"group":-4,"x":-320,"render":true,"id":308341973,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,[64,64],[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,[32,32,16,16,0],[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,3,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.5,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,[0,0],[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.10000000000000000555111512312578,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,-4,[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"shift x":0,"from index":-1}],"array_process":0,"attri":{},"type":"Node_Shape","y":0,"name":"Shape"},{"group":-4,"x":64,"render":true,"id":629359290,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"To remove a connection, on the input junction",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-192,"name":"Display text"},{"group":-4,"x":-416,"render":true,"id":820286206,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0," (or + ) to pan around",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-96,"name":"Display text"},{"group":-4,"x":-416,"render":true,"id":660826364,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"Use to select, move modes",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-128,"name":"Display text"},{"group":-4,"x":512,"render":true,"id":846782664,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"Or you can use export node, which allow you to save multiple images, or animation",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":96,"name":"Display text"},{"group":-4,"x":-416,"render":true,"id":445759436,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0," on empty space to add node",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-64,"name":"Display text"},{"group":-4,"x":384,"render":true,"id":413298552,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0," on a node to inspect it ( will appear)",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-96,"name":"Display text"},{"group":-4,"x":-416,"render":true,"id":676613630,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"Getting started 0: basic control",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.5,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-192,"name":"Display text"},{"group":-4,"x":512,"render":true,"id":229004945,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"To save an image, you can on the preview panel",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":32,"name":"Display text"},{"group":-4,"x":-160,"render":true,"id":9120082,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0," from one junction to another to create connection",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":96,"name":"Display text"},{"group":-4,"x":384,"render":true,"id":31770096,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":1,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"%d%n",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.020000000000000000416333634234434,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,80,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":false,"visible":false,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Export","y":32,"name":"Export"},{"group":-4,"x":-416,"render":true,"id":593948373,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"Welcome to Pixel Composer",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-224,"name":"Display text"},{"group":-4,"x":384,"render":true,"id":948455280,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"You can inspect and preview a node",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":-128,"name":"Display text"},{"group":-4,"x":544,"render":true,"id":316393662,"inputs":[{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,16777215,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,"and choose \"save current preview as...\"",[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,2,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,0.75,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1},{"from node":-1,"shift y":0,"on end":0,"data":[],"raw value":[[0,1000000,[0,1],[0,0],0,0]],"anim":0,"visible":0,"unit":0,"shift x":0,"from index":-1}],"attri":{},"type":"Node_Display_Text","y":64,"name":"Display text"}],"graph":{"graph_x":464,"graph_y":232},"version":1340,"metadata":{"author":"","alias":"","file_id":0,"contact":"","description":"","tags":[],"aut_id":0},"animator":{"framerate":15,"frames_total":12}} \ No newline at end of file diff --git a/datafiles/data/themes/default.zip b/datafiles/data/themes/default.zip index 21bc6a1e8..1abdee268 100644 Binary files a/datafiles/data/themes/default.zip and b/datafiles/data/themes/default.zip differ diff --git a/datafiles/data/themes/default/graphics/graphics.json b/datafiles/data/themes/default/graphics/graphics.json index fc9a10ab3..65d87a215 100644 --- a/datafiles/data/themes/default/graphics/graphics.json +++ b/datafiles/data/themes/default/graphics/graphics.json @@ -1093,6 +1093,20 @@ "yorigin": 24, "slice": null }, + "tunnel": { + "path": "./icon/s_tunnel.png", + "subimages": 2, + "xorigin": 24, + "yorigin": 24, + "slice": null + }, + "lock": { + "path": "./icon/s_lock.png", + "subimages": 2, + "xorigin": 24, + "yorigin": 24, + "slice": null + }, "menu_button": { "path": "./UI/s_menu_button.png", "subimages": 1, diff --git a/datafiles/data/themes/default/graphics/icon/graphics x2.ai b/datafiles/data/themes/default/graphics/icon/graphics x2.ai index 5ecb26330..2dbde0fe1 100644 --- a/datafiles/data/themes/default/graphics/icon/graphics x2.ai +++ b/datafiles/data/themes/default/graphics/icon/graphics x2.ai @@ -1,5 +1,5 @@ %PDF-1.6 % -1 0 obj <>/OCGs[33 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream +1 0 obj <>/OCGs[33 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream @@ -24,22 +24,22 @@ Adobe Illustrator 27.0 (Windows) 2022-11-26T09:16:08+07:00 - 2023-02-27T15:04:08+07:00 - 2023-02-27T15:04:08+07:00 + 2023-03-02T13:46:34+07:00 + 2023-03-02T13:46:34+07:00 256 96 JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAYAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FULfR3L8fS HJaEMvLgQ37LV9slEhUTGHCKHNXAHIjoT3yKpPpdlqsmoSahqLGMiqQ2wIIC+JoWFPDx6nsBiYcc zLin8nYajLiEBjx795/H4+9Ocy3XuxV2KuxV2KuxV2KuxV2KuxV2KoKKa4M6KWY1dxIhSgVRXieV Pl3yZApVe7d0RCpKgsA7KvIgUPahyIV1o7vGS5LUYhWI4kjttQYlUv1mG9e4tzC6KpNFDVBD9a/a Wu2R37wPg2Q4a3BPx/Ymy1AAJqabnphay7FXYq7FVk8Mc8LwyAmNxxYAlSQfdSDkZwEhR5FEhYor JLO2ls2spYxLayRmGSJ6sGjK8Srcq1qOtcMYgCgzxyMCDE0Y8vgs0zTLDS7CDT7CFbeztl4Qwp0V R89/pOFnnzzyzM5m5S5lIdSh12PyiY0kllvVdvWff1DH6jHalD9mn0Zi63i8M8LldmeH4w4+Xn3p F+Tdv5kt9FMervcScQavdBgxk9RjsG3+z/DKtLxcctqg5HaPB4cN7yb37vN6Jme6h2KqN5JPHbs0 C85BSgpXau9B3wxq91Qlxe30UcDFIw0oAZWJqH+/pkhEFCOaQRxB5mC0A5ntX2yNJdFPDKvKNwy9 yD0xIVqK5glJEbhiOoxIIVqe6ggAMz8A1aEg9vliASqorKyhlNVYVB9jgV3JeQWvxEEgewpX9eKt 4q4Mp6EHtt4jFXYq7FXYq7FXYq7FXYq7FXYq7FUt1LRzeXEUwl4cD8QIrtxI2+/E9PI39hbITAEh 3ivtB/QmKLwRUqTxAFTuTTxxa28VdirsVdiqHvrz6pB6xhkmAIBWJeTCvemVZsvBG6J9zCc+EXVo e2bVDZ3FxcfDM6loLZVDemAp4jqvNj33yODxCLn16dyMfFzkxDzjrXnC38kyXTxGxuzeQxXskPwG Czcr6sqSD1qdd3p8NTt8NcvLvOwsOLJqKyb+mXCD1lWw6X7r35IX8rtVuLnW9UtdP1a613yzDbwv BqV9I8sounZucfJ0Rh8I3XelAf2sAdh27pxHFCU4RxZzI3GIAHDtR2J+fvHR6TheXdirsVUZ7O2n YNKnIgUG5G30HCJEKsu4XMUQiXkYXVglaVC9qnCCqmkMkszu8HoK0bIwqpLFiN/h8KYbVESW0TmN uIDRkFG2qAO1fDI2q6aGOaNo5ByRtiMQaVciBEVASQoABPXbAqyQMJkehKhWU08SVI/VhVer8uxH zGBVkETJ6nI15uWHsDhJVUwK7FXYqh2lMU59QsUKClASOVTXoD7ZKtlV1YMoYdD0qKfryKt4q7FX Yq7FXYq7FXYq7FXYq7FXYq7FVsztHC7qhkZFLLGtOTECvEVIFT7nFWJa/wCYfMVn5X+uyRx6dfy3 McCcwZBGjsF5sq+p+Fdu1clEbq35N1bVbrU76zlc3GnW8cbQ3PoeivqOSWVPghqKdfh64ZAJMiTZ ZdkEOxVj3mHV49Ltri6kLtOs0ccEauUFJCqgts4CVY1PE4MuTgjdW5eh0nj5OC62J+QvYdSjvLWs /pjRoL/0zGZOasp6co3KEqaCqkrsaZHHk4xa67SnT5TjJuq+0WmeTcR2KuxV2KpRqt+73g0lBJG8 8QdJkZkZmLGiKyo/FaIfUfYqCKbkUICo7Tbae2sYYLiYzzItHlJY1Na9WLMQOgqa+OJVE4FdirsV dirsVdirsVdirsVdirsVdirsVdirsVdiqFmjvjeRtE4FuAOa/TvkgRSorIq7FXYqtkiikCiRFcKw ZeQBoy7givcYquxV2KuxVbJFFIpWRFdWFCrAEEeG+KRIg2G0RERURQqKKKqigAHYAYqSSbLeKHYq 7FXYq7FUJfyzp6fpFgTWvEVr026Nv4ZKIVWtGdrdDISX3rUUPXvsMB5q1yP1mnN6U+xw+Dp/Px/j j0VWwKpXLuqKEPFnYLypWlfnhCqbC4heMmdpFZgpVlUdf9UDDsVb06/t9Qsory3qYZhyTkKHrTcY CFQ+ja9pesxTS6dN60cErQyHiy0daH9oDxxIpUwwK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FUP+kdP+tfU/rMX1v/AJZ+a+p05fYry6b40qVR+dNDkuVt1aX1 XlWBAY2FXYlVAJ8eLb/5JyXCVWtrl3NY2969jwspxFLHKJl9RUlZQrcONKjmKiuICoxrlwFkb1J/ iPoxkpVitQWoiA7e+SpCOtbeC3t44beMRQoKJGooAMrKWrazs7VXW1gjgWRjI6xIqBnbqx4gVJ8c VVsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUpLmJGZTUuoBKKpJo dtgBvhpV0MySryWooSCCKEEdiMSKVfgVI4dH1CK+b4LZ7Rp2n9Z+TTDlM09FTjxBq3GvP39slaom 18taHbLRLKFm5mQyOis5Zn51LUrUECmCyqDTyvOIba2a95W1qqRRj0gJPTjZCFLcqVPpip44DRN9 WQkQK6FNDYScGjE1IiGFOALBWNSOWS4mKLAoKeGRV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2Ktcl5cajlStO9MFqgplke6aMg8yQ0EgK/AoADGhNTv1FMmJDki0TbIy RnmoV2ZmehqCSeowFKrgV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxVCU0v9JA8ov0jwoF5D1fT/ANWtafRlfhR4uKvUnwD9deVrpLCN76K85FXjUqVF OLdgTWv2anp45GWEGYn1DWYDi4kTlzN2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KoL9CaT+l/0z9Vj/Sno/V/rdP3npV5ca/PFv8AzWTwvC4j4d3X S0bi0OxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv8A /9k= + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAYAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FULfR3L8fS HJaEMvLgQ37LV9slEhUTGHCKHNXAHIjoT3yKpPpdlqsmoSahqLGMiqQ2wIIC+JoWFPDx6nsBiYcc zLin8nYajLiEBjx795/H4+9Ocy3XuxV2KuxV2KuxV2KuxV2KuxV2KoKKa4M6KWY1dxIhSgVRXieV Pl3yZApVe7d0RCpKgsA7KvIgUPahyIV1o7vGS5LUYhWI4kjttQYlUv1mG9e4tzC6KpNFDVBD9a/a Wu2R37wPg2Q4a3BPx/Ymy1AAJqabnphay7FXYq7FVk8Mc8LwyAmNxxYAlSQfdSDkZwEhR5FEhYor JLO2ls2spYxLayRmGSJ6sGjK8Srcq1qOtcMYgCgzxyMCDE0Y8vgs0zTLDS7CDT7CFbeztl4Qwp0V R89/pOFnnzzyzM5m5S5lIdSh12PyiY0kllvVdvWff1DH6jHalD9mn0Zi63i8M8LldmeH4w4+Xn3p F+Tdv5kt9FMervcScQavdBgxk9RjsG3+z/DKtLxcctqg5HaPB4cN7yb37vN6Jme6h2KqN5JPHbs0 C85BSgpXau9B3wxq91Qlxe30UcDFIw0oAZWJqH+/pkhEFCOaQRxB5mC0A5ntX2yNJdFPDKvKNwy9 yD0xIVqK5glJEbhiOoxIIVqe6ggAMz8A1aEg9vliASqorKyhlNVYVB9jgV3JeQWvxEEgewpX9eKt 4q4Mp6EHtt4jFXYq7FXYq7FXYq7FXYq7FXYq7FUt1LRzeXEUwl4cD8QIrtxI2+/E9PI39hbITAEh 3ivtB/QmKLwRUqTxAFTuTTxxa28VdirsVdiqHvrz6pB6xhkmAIBWJeTCvemVZsvBG6J9zCc+EXVo e2bVDZ3FxcfDM6loLZVDemAp4jqvNj33yODxCLn16dyMfFzkxDzjrXnC38kyXTxGxuzeQxXskPwG Czcr6sqSD1qdd3p8NTt8NcvLvOwsOLJqKyb+mXCD1lWw6X7r35IX8rtVuLnW9UtdP1a613yzDbwv BqV9I8sounZucfJ0Rh8I3XelAf2sAdh27pxHFCU4RxZzI3GIAHDtR2J+fvHR6TheXdirsVUZ7O2n YNKnIgUG5G30HCJEKsu4XMUQiXkYXVglaVC9qnCCqmkMkszu8HoK0bIwqpLFiN/h8KYbVESW0TmN uIDRkFG2qAO1fDI2q6aGOaNo5ByRtiMQaVciBEVASQoABPXbAqyQMJkehKhWU08SVI/VhVer8uxH zGBVkETJ6nI15uWHsDhJVUwK7FXYqh2lMU59QsUKClASOVTXoD7ZKtlV1YMoYdD0qKfryKt4q7FX Yq7FXYq7FXYq7FXYq7FXYq7FVsztHC7qhkZFLLGtOTECvEVIFT7nFWJa/wCYfMVn5X+uyRx6dfy3 McCcwZBGjsF5sq+p+Fdu1clEbq35N1bVbrU76zlc3GnW8cbQ3PoeivqOSWVPghqKdfh64ZAJMiTZ ZdkEOxVj3mHV49Ltri6kLtOs0ccEauUFJCqgts4CVY1PE4MuTgjdW5eh0nj5OC62J+QvYdSjvLWs /pjRoL/0zGZOasp6co3KEqaCqkrsaZHHk4xa67SnT5TjJuq+0WmeTcR2KuxV2KpRqt+73g0lBJG8 8QdJkZkZmLGiKyo/FaIfUfYqCKbkUICo7Tbae2sYYLiYzzItHlJY1Na9WLMQOgqa+OJVE4FdirsV dirsVdirsVdirsVdirsVdirsVdirsVdiqFmjvjeRtE4FuAOa/TvkgRSorIq7FXYqtkiikCiRFcKw ZeQBoy7givcYquxV2KuxVbJFFIpWRFdWFCrAEEeG+KRIg2G0RERURQqKKKqigAHYAYqSSbLeKHYq 7FXYq7FUJfyzp6fpFgTWvEVr026Nv4ZKIVWtGdrdDISX3rUUPXvsMB5q1yP1mnN6U+xw+Dp/Px/j j0VWwKpXLuqKEPFnYLypWlfnhCqbC4heMmdpFZgpVlUdf9UDDsVb06/t9Qsory3qYZhyTkKHrTcY CFQ+ja9pesxTS6dN60cErQyHiy0daH9oDxxIpUwwK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FUP+kdP+tfU/rMX1v/AJZ+a+p05fYry6b40qVR+dNDkuVt1aX1 XlWBAY2FXYlVAJ8eLb/5JyXCVWtrl3NY2969jwspxFLHKJl9RUlZQrcONKjmKiuICoxrlwFkb1J/ iPoxkpVitQWoiA7e+SpCOtbeC3t44beMRQoKJGooAMrKWrazs7VXW1gjgWRjI6xIqBnbqx4gVJ8c VVsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUpLmJGZTUuoBKKpJo dtgBvhpV0MySryWooSCCKEEdiMSKVfgVI4dH1CK+b4LZ7Rp2n9Z+TTDlM09FTjxBq3GvP39slaom 18taHbLRLKFm5mQyOis5Zn51LUrUECmCyqDTyvOIba2a95W1qqRRj0gJPTjZCFLcqVPpip44DRN9 WQkQK6FNDYScGjE1IiGFOALBWNSOWS4mKLAoKeGRV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2Ktcl5cajlStO9MFqgplke6aMg8yQ0EgK/AoADGhNTv1FMmJDki0TbIy RnmoV2ZmehqCSeowFKrgV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxVCU0v9JA8ov0jwoF5D1fT/ANWtafRlfhR4uKvUnwD9deVrpLCN76K85FXjUqVF OLdgTWv2anp45GWEGYn1DWYDi4kTlzN55+YQ0X/EmmtKWGorbvQxV9YDmPqxhNDSQy8uPD4j7jA9 H2T435efDXDxdeXL1cXlw1d7PQvj4dudPorhecee/l4NFPmTUnhLnUTbpUy19YjmfrHrmgrJ6oXl z+IfLA9H2sc35eHFXDxHly5enh/o8Pds9DwvOOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxVBfoTSf0v+mfqsf6U9H6v9bp+89KvLjX54t/5rJ4XhcR8O7rpaNxa HYqtaKJnV2RS6fZYgEivgcUiRApdihascaszqoDPTmwABNOlTikyJ2XYodirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdir//Z default uuid:65E6390686CF11DBA6E2D887CEACB407 xmp.did:7647d1b0-ea83-ca49-b85e-bbc9513ca4bb - uuid:24841820-3c70-45aa-8a64-aca35da9e8e6 + uuid:13fb6df9-2b6d-4c33-a873-a455036a81a8 uuid:673f9e21-4d80-48ad-ba53-812ef9241a78 xmp.did:efa7ff44-b17d-d449-8cbc-4cf525bcc8d1 @@ -71,7 +71,7 @@ True False - 96.000000 + 48.000000 24.000000 Pixels @@ -309,17 +309,17 @@ -endstream endobj 3 0 obj <> endobj 35 0 obj <> endobj 37 0 obj <> endobj 5 0 obj <>>>/Thumb 2827 0 R/TrimBox[0.0 0.0 96.0 24.0]/Type/Page/PieceInfo<>>> endobj 2824 0 obj <>stream -H10 ݧjq@dBM8 Է(kjeE{w'^?#&n:mQ1mO 4 J霑f6g49Z -endstream endobj 2825 0 obj <> endobj 2827 0 obj <>stream -8;Xp,SM1$L0E -endstream endobj 2828 0 obj <> endobj 2830 0 obj <> endobj 2831 0 obj <>stream +endstream endobj 3 0 obj <> endobj 35 0 obj <> endobj 37 0 obj <> endobj 5 0 obj <>>>/Thumb 2922 0 R/TrimBox[0.0 0.0 48.0 24.0]/Type/Page/PieceInfo<>>> endobj 2919 0 obj <>stream +H10 ݧjq@dBM8o:H9-Z ZYŁvmINEpL/.)rSl:g$9iF?Z +endstream endobj 2920 0 obj <> endobj 2922 0 obj <>stream +8;Xp,*?>+_(]]W#%j(~> +endstream endobj 2923 0 obj <> endobj 2925 0 obj <> endobj 2926 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 27.2.0 %%For: (Makham) () %%Title: (graphics x2.ai) -%%CreationDate: 2/27/2023 3:04 PM +%%CreationDate: 3/2/2023 1:46 PM %%Canvassize: 16383 %%BoundingBox: -48 -240 604 0 %%HiResBoundingBox: -47.3922855564306 -240 603.17639088057 0 @@ -348,9 +348,9 @@ endstream endobj 2828 0 obj <>stream -%AI24_ZStandard_Data(/X4޷F*+֌ djIK Y}!͕h$} ҽ"tA\;Ќ3fI%8:X{(/zдi$ 'uJީqI%svAm壤3wS3e{>2^`|B&*4 - $<0x@ax@p3 Q YGC?[H3tY50b8.}YetS-:)ެm2GTzKVժPoTd.[թGTA̓RֵpXIs{jsϜJ.G)x],-?Ԩ%o'6QQS$Hn;SR:MGٸnG4VI805YBF<(vdci[$qk*Ol#ɅcV4zqݙ\(k|^Yh2FvRl_72nNV'WLGj~w%X4Eh|}#Y4.J 0}:DSޥLґ+7]ܝ#GzMh$F5,6J:+7 C Y=镹,AC).hieT jٸu~ϦN^3]#mqkbͰİQ-4dI9Bհ,ѯpDGR6H'%D KzL*i||BHG'zN+҉$.qgwu/!_MVFښpb ?2c4@^<`xP.ńà h`D  -,&0q!D Pp,0d0&aL800cL1=`ada܌v'\i8*T1Qw&._ʻ 3EaԜjFc%*ATopxOaj'&O&qZ'6,0P!Bb$p Di@2Qf_AUwֈ˚S<7t1b8u;@+jM "!!!#0"@+D>А p ?'a!ly7h ij.0|pl.044DDԴa;@t,)-/3A{C} p78<@<CBb$f:j+ u(>9:{\`8@2Z`)3bÙIq g0Z#nYCX`X`xH\ZRNj~87)ĎTgZ-3D65C%[٣J2^3##'3>GvGFЇB4*9@@A4բr:@!`ra"׃"oxx@-s{u>A-0 gDxħ.Pr<< ihC.bơ5—C=tx=4<8d5ؘ9WkXiKf̶]eMf fF~R-xxxwVVZ.08)wtG!]X i4Z  h $$" ?C=T%""`;C9CUBb mD<8)܈ LB)U=/:??MvwLsvóPfyйZjuUx2#«M&001FLD! r 8woxH "BS8HѶ7|H=\eTfLΈUW0u|7e< ; ]`(0!AZ`2aee5TC=@TDEDIXFeevvvk00 q]ٶh7,0<ztuvv;_A\I`xxl@|VZ:13 9vpK|P lȆq9,0zphDE8#!QJ\ABBBbaa!aAAaa]񀓓G4  - qB~HBX`l P# *W u%al.&d}9D44pZ`NDCnD>,0433//VIY 8&fI=C:~r" -jd*"J\`[`9,0t$" ijU5PA_`u:KDF$D>C6dCfbb: t<" qp ûAma`h6Ȫ![y@ @ px@EӳǒvyN"Ɍ:YaA+ (Ѱ 0u r0;: "$P{|CÃCă@ - ! pE`DF987M Mg `@` *\TX@ ΠP"E ȀE (@@A -*Lh„."@ - &0p 2PQb - .,>A D $HEPq1A.,&0ab"X8 -$ , D *LXTЀ„ - h !B."2  $ńT0pĄ - -F*PT*N`1AB T  ` paq$ 5@ Lp -q\X@@qQl@`GT`L l` * X $HpA - ,,*,0T8pP111111`p1 \LAh`@a"80A ,*D 8@" pA,`!A .`"L`Pq! -&6AŅ60 .$8X`BEdࠢ0` l@A *8E6 .,&80b"*&TLppQ&A &(,.aGŅŅE0Hp &>stream +%AI24_ZStandard_Data(/XT.F)+֌ djIK Y}!͕h$} /{:`uЩ724LYwRɧ7>ʋ4mɫ=úCIݠw,)w\RɜqP[{(i]L枾̸9#@F*&`(,`B&*4 +  +, IGHlZ4?YO2Dr9qvȂ-cp瞒lQIyfnc9"b_BGV=zͦz6/w$sGrN<Šz`jE'H2FOVӕT&}朼ETr9JYնb9lEIFM-y?r7N$F'vؙir8u;JY2AW'LS\4"9[+UybI.ѳdFYU\z]^B1xf1pK4v:e:W3+Q/@ɢqYWZqe!t.ehg_y?krG& GU7&aY%U^ilIe rUL)u4uAM+MhTSƭCV~6uD淞Q]n[Kn%% o'K9"Ve~#':aWD:YU.i\&m XҋdRI8G:ҕ8)F+pZN%4wA;[G7'{=I┤m}5DSfxucsRI1I Fx@P@ <`Q\Xb4T0"H`  L`Q„(X`p +2`0A1& + PAE 20nFdR4WuѨ;audY[院0ijN5 788IL 6""jZ`D~w @ qý@e|X`8C "$  — Tpopxޡb, fd !13Rju͆:  Џ]^=\ .0R-0Ԕ1s$ ňJ!DBH@,0HD@,0<$! b p.0 @o%2".-)'Jf`5?EʛL"LmfF3UK!UͽW#,ڶ%YkW9_g-eFV~ =9;4J<>PIrUn0w@;C$p @ xSBDXoi ~0%ܫ$nXhDd=#r^#> ` p:恾P)GLC `p0p5DS!ƌdV͹Z#L[27xe,3l2c07jiC>DLr|H >萘J-0nHj aA! p|?*pt8;ʡh a8hD$&OF ydJQyֹi`d}2 57ֲnWw“^thjl<79qGXDE4b"$     h{CB<@DH8"JƑGX޸GQ7*3SQ3:#Vͮ_}2ðݔn ޲&HH,08<@DHtT[`|DMk\WP QQ%QccZZڭ ,$LuMf>ݰ`GX~ q'qEBC!b#P'[i|6C>dDJ伯}|o!.ihC5X!ơwppx9<@PBBxCDDD%J(q   {tEdNNF<h,\`(,A z! bX[`-0TCD.0gD^E`F4ԕg\KD\\`X`Cj:  ǻ:А̼tZ%e%P#☘%q pCne0k0+r*roVqxhphX`phhxV @mK|!whϷ~.ِ tZV.0PR6'#xh4$,J\A5Ύ7aӶE9C,""$^l%cFff \D@8,0Pp,0PccC=؃ Q(8X`HC4@8@<@@@D@H@LD#(",IIX$P"%. !!!!1f[`( S$Q.05\YNiTD  `!>2y,aa` vf3+ITDAC9+ eUE5%AA@ tdZ`0** I}CfWkJm10 x<654@p4f,0" T0,pQaabB.F[8 +L@&LH  +$x Pb"*Lh0 +F*44@BE (0&T@&$A +D  +Lp"LvRrBS*XL@IPaqCx"0q1B)u Uv}dr a&'P_ - HEx0adA ,Tp!&T`lA *&P xNDPAÂ`„ݰB Lf(PaBW\H#Ȏǔ`’0A **@mU 0>P 40!&`E,Ja_SfQ*y5Ua &lAӃsυ)e ;Mslcq#ʌ^p11ABgs ߡh .lyUFߜtynN0Hg-dMN3mHWXD`yzЮdΔa\LaU]ftXeZ{ +.*2@ +(X`d袢BtIAbB`N`Ы\X\`1!LH$A ń +ԁTaqd 3k9, +\ThSFT|A +\X\PKaB & +D@b*.0QD$<;,0AA &L8 (TL`ƌ&4TqP 40!&`E,Ja_SfQ*y5Ua &lAӃsυ)e ;Mslcq#ʌ^p11ABgs ߡh .lyUFߜtynN0Hg-dMN3mHWXD`yzЮdΔa\LaU]ftXeZ{ wI.BM2"S!m*K>fLzQڵ+ *&\pkmWcVBꄥi&?6D@\dC([;@.$XX\P1T0L \XTPA &2XT\0Aj ,0jX0l,6px@]@CG &H`! hP"Hp( H  .$Hb" *40&*\T\0q1aa "Hx@B T` ɜanv)TLB``XP \X@@,0TuXPq -&Fp1  j 9@r@ -,`1!TA &&\P"B -P@C*`LRSkYfti.̛ҮuH>:/w+bov`Ɏ$W|W kΞiw=YuJKZޓXVe0VqS;#y'kV0Y~ExJވFٴhKrNmLDO]o]Uzt!f?WE>Ԓy\;}a7c輜;qLVi #4鋆Hu>Y)?h)Y`K?PYN.Sf <)f-kBDv弨|8fm0;QVNY;gҷV]}uIB'y5?Tl`h89Y[xQٱz;zܫX6W]ڧr= w3LIC>#ɩin?X:,#6H̦j,\9vwv&]x#Et٤'o}DKgY{Ѡô-^Ltw9%*''Lx84t2VjyvYwMQG^QINidZY~L =덡XXTxj'wPpz}9+r)_w/uit͕֙DCq%DR"<#F49cXDIYwM4IF+d_YА$g6(L*ݍbH3=TqpdwþZYF+{㎳B%T5؛<Q;sr) wLVY^9y4]s+ڊDdafMCxh-s^]FAMu,CQ$eΨ9jHS( 'I6^gՍo_;^Cx6%3d;DĈ\OB0**դ*P =Fj/ۈe2Ju+}ʟ:%4:ɼU94nbՅq$at3)f2!_R˙9K1ZK"ѕwnf`-ՖmAkW>X*h/SLHGcoiCuJ;I;Ž+h%q eַ%(I;&!6iDYKijȲ3A QPquGُQ)ug5 S"xu _RG]riy@~U?z'>j(vc;|C"㡽*84M'3GV:jWγ) DvƆ#94(k,nǡw_:WiAe3{fwYg{lNÎ7S:0i2W$s*1i(' ե#(:N"O\XDxʉ -XBK -S?Z_.wGwwso*֬e~R&螤C3{=[}MhhamF̑Cg'bY|)H[UJmځT29r&f7Cb6tvDP9:=Fp:-Ixh7jK{TGRzm<3b1v"\Fyl eT͌ʢ҄WnwVKj-Q6!e] -p!b݋YRV9<»W(Z7a+;tb\IhKj$>?e+ո\cUT~M(/DiTe˲e+.(8ˎ@Wa>n|{|uIiet.éMՆ+ oZh3i%)ٔr9*Fy&kġ,4v=M2Ʀ^3Y ,ZI^9d+%Z膖6.UʃScY|2چŴ*),fUt3&3f\%u:c჋F_fSӓd̬2)JX%ejG)"02v2㩴F>ﶕQHYg/A<[Ey mVA4&Z4h,3dD[k3Vk+|Ipޭ뷔8{>] QjZ_$|H*_J2@ʳekN Btmpd#˺G2xA93F-6 g븬+yf7;ikA]82<8Ss5I~SĘvf'd֩!D;ZdcɣXyvGD䅒6I"}nN$Ski(m!ڬ,cHdoL+J$ {ș"g6^"S_FeXVg/e?\ػ+RU,יu&ƃ΄q#s79IXnOH{JB#Cˡr(x޳]]k-wˤ9m%_ٔ(=#UJKD$JMXUesQ{RW.2f^}>iJrYXhWגKhO:˖<ݝc -ˬx5Va}Jx%Bs 2)^][}PƄJ)2mNFY7sta>*2*5Yayr(Lz]\iZeX?#jbs.$$zYeL2]D5bUs:$MRdIS\_/enR -¢+fG4MVAv3ɎnNfN7K!3e&٠Wˆf7Ku񯬈>%u+ǘBC<ZWx!;9x6c{L+òO貦S_h%jsemY"K{ sUhhT`>h63%e3I\vLh1n~q/O6\vH>'9W:"] ˆeD/?sI-Mtb휵;I3T/U'Ɉy9R_;4/73ΜМV׸yX'J;5 CH)EYu'~Mݛ?iTki㝴:hlkSܐvVx~i#S.$*1!QI,{oJ$Ee\MReE?N.C4lY^gg'YK2B4<{$ըam -}IWeo5'4DnPlNh&I=''tu9ɲQ!$ɎOl;e94ߑB1ijfbxT(^Oe)HbjO3ygesbs0{D -,xmNFSw(ia8ղIJt&cUuh SwR~ΤʂdvS5ѤojbkN}WBD21 BָUl/:ߺd;"|VE9$6XIU3*F&"3z݄9*+ a/dCiOFL4ʘ6n%go>]M.3jȤOZ͹w3$WK,Iʣޓ(y £6&0he5sx w*ęAɶ5Gꙍڴh}Z:aL^3_w94夫(6M_].Wjgv*[_5[}ɪoC7q|Ve߸4.7&x-olW?+ݦ:=ac>-[y㬜BGVyģt^ҿӕwӺg㡣KG ?&릳 jʕ,I8jivMt&Mw_Ne_HmW k]s)Gl^gmb5[ԈiƬG-&0-mU2TD]UJwi͜VuYJNFi<(Q>4gMmݙN;b~)7cujUֺjiHݠToHt7[V}f6)՝8.WO)U7=90gI*K hY_jFPF//h?&x=I5QAVͪ=xoRopWFV[(A$!lfbh*u##GaK! k b9ծr8v+WW%)T\oԞOzӪ $q<9OaMI8:W<$l5NvTGiĺ9ue>?>l68~*ً]ٍrXlZd!~$3d0e= ~dAKrFmH2qñɘdSd`쇒3G:ȷLxQ Rzʯ-ͬTx>{/|9e>4j]ZaOW,Ay9[KR9Ɣ*G| -V8YӒf0N.Z!.&qq8ڮޞG\L&1,fC{dcZ'4˴97̧/"AU@.$Lxpa@ pQA1B2 -EWU -  -" -,00Q1$0 -$<Fx̒|:#M$c.r -e?EAL]Z#V\_<"dEK'A?}tiZz֠PISfbfWdJ:gj1W],]0OmԢx$X,$Jbd.9ݏjn -ﱓfx^f'Gk#J\ywœ;eNm4xUTW4vm;'1̖9֧s\ckvI͹z)&owGiw}>Wx8"Uޞ6^LWя5wUg׳Q'[:|D9s{-ٽ{{5>Q2R(s(oNdJ2V]ޓM8S d&ЎfyYZ3#b;kxIN}ohh;Geҩ|*|W5U'IVѮzj\C{]FC#UUee +&Fp1 3 :TT`  +h01 +*XT +P@` &H A\H0r P0b40 +&H01 "DXLPab,0*@$@h($ +v1CDYNwnKʒA4m|R9rҤ"@o=Jѫl-lXW7I/rYӌ_O 9gso~mT D*}lc)e'ډ)E{'E5esfҽN:Eh!٤5TWM^4ՙM$? )k2EumќdÊٓV43! +$5>Ռ;*ߠҏJ9Q1ЂV>R9iQHG!,9>m,>h +U&; ݊2EN]Z2qJEcjJh`;%:7M(VU2H9{#ygV +$<|^ +\;tfzyU;!lNCBn1YQk-!]VD5>!M--2Vy+hyED5 L󋷔}+1 yjc.EO#GB,UXG"Dé2eQm5)32o9t1=WOLdItuUQEsYXF&)L3}^%feM"Q +3ISǤCL22۴Jm,!{,ʹ_K4!&VD,#TFIX"}:e)gvĖѠwXjwG~'Lc$͑ΞU$TDmmXJ +]))J+#Dk%GTՊ+'o"<4-TԎɐ6;5K^2'84Yx)lZ}>%I4HvL)MړҤuT9BiL*Q婗HWBl6AxU3*M-]υYv|3˹3d5vw>BhTg.򃖒5qs HUO q:2Umf(jݲ&DhWٝ]M]΋n·chQ e؋sfz.-}kW/|W8MFA񇆓35׺{u!'JLν;nsޥ}Hj,~R{7ôTy8t3"I*iòٯYډ>bTlA"Ucwgwi+cDش;ޱTtSDͣu,k/tXc֓ŋ.d7]D.S/).ե!Z]jSTk +/$S 'R},Ct?jeewzPZfw,gNG<'$D{Ү5HQڧ'^Ny^=)7H3s#C585֥ COiri6BI>zOߒBd*vIM7TK8Y0σE:ޙ|/)̜_Okr%Qy7r +Q30jV +r,M)[X&r٣4D!,cUgܽ%VZ6[I8yҗ&z[))/~ t;gɲLϬOK'!!&T i&ؖ[ϣaw2TRTz"1Hy?C6M{_ T˪;]̊wTY£Ke"51Ĭ7hDn.w}ke|&<:%㝤]aG8ӆGFBoIRҒ_Sפ ot4~\}S|%OYKdY|љtՅ(8:Bף(֔:v)}:QQЯLK^).TvQI?Īߟ B5x1Q^H ٓ#+ ^E+ٔp$ebM82C7/؎ˣ~^\^ɧg̈́5Œf Ŷ:U;OJXɼ_9֓y|,*2<//H8T+p;~>qaf('*B{c ;;ph.}+Lh~SDuIޑƇνZ=Kl{ XQ_ooA4abǷ 2G͟GBe#ǧ EnSWK*qkŔS[f%;bo% g$4 EsZT>c[ҨXne~BciěAybrwV{'o$L#;f^hh293݉$(T @˪ګ%QhRY#&f7Cb6tvDP9:=Fp:-Ixh7jK{TGRzm<3b1v"\Fyl eT͌ʢ҄WnwVKj-Q6!e] +p!b݋YRV9<»W(Z74m)WæWv2"Ĵ3^%f VHl}~,Mey#VXc5)qƪ$ Q^ӨʖeVR],QpN|/) ̐NЅtv8!pM m&$E9R>W%(OQd8.If1kFr2"W2+lD"±Ƙű1Xypj,OW0V%Ŭ*}z_qdƌ+d~TXg6|pHljz򘌙"Z&%B),Z(EDfTfSf<ݶ4 +)%gѱh3`J>DCVceh6y˿Xb} c||m%Z/qTλug֧k!J_K$;p|IAXHy6۝#lԩBAN1q vģsYbH/5u=gԨІa̙bUc%&}G8m;:GF?gj~& s<NUl:5hGBv,y+(PFs3I͉dj- %3Desy"LMtiE$a95Wk^d˨ bv0scVZVuպޖ {wEb:Xj:΄>xٙpBB6+} Zu Ig2syCWAz4*ϝQ dZh.[F2ūk+Sʘ]6y8"%:]I(f.GEf[&+\=9Y_=5i\=M롬gYMsq#$Vd6gϦvliEwX]t ͲOV:?{Qx-+?ZdiO{a} *fs&^5 s|N! ;/9f$NVy'}D;1z;_KqfpEbƙj77D)|&s޴u)(A}$ӏU1){'-b-mOXVX6C)^/#&n+ʊH5T$ ;wV67]-69WG4phm$;:5#d7ʮ. vfeuYe'tK$gsv9S-ٮDg2]Ug~P>u)]L,Hf7UM +YƮ&w+D$ l^%JNfIQ.WiUH):IaTa<*hi"2éMBɹB젉pߩBl+]3x٨Mۧt%9zNc_NbՉrazծvf¾e]Ǒ?tǗh5_V;*;J{c2ײϡ;&{|m6FΘSBo7ʙ)tdi:L::tyĪj`shRn: ٠\ɒZfnݤjMkt%T婏vѰ=r4fhuf^/V^UKkz2kr*-V%CEUtFY9meY4t:KۡIiƃrA1C#މxY4֝X#懝r31V6Yem.iVz& ODw*eݧ/yon̡qPYrR9^ucs Ѝeuh4lQmn׳TUaجڃ +WI_M.FG=}edROf&f R7=\x$vD1O<")2& =)_*nhGruUB˜_^IϥFhL>x|NӞʺ+Da֔$s:e(3KM\lGuIˑ8XgY# +Mf⛽8(fI&g(K2CVX-M?ܳIZM $gjlۆ$'_>I6M6J +f~(9s|MʄwJ _̪߮iO'#$c;l"1%<\4k %RcTi3V3Bq,2ؙm_i'3q?w2v󤈵*9}גL91]aU OT'§RQ'!6Ǭn4Ex * +*$  1 X`HHW(`b^t%Y*,4  T4TDD .`؅ .,T@P,=1ش1ci"P+WuqK0o1.cu) +d\= $K(Z:)ES'SLBK'2HRg43" UQ>3U2rfŎ*)xj3œ$$bY&Q(#si~TsSx72S<9^$hv%#w'Pqj:HWM5zEcw]&*ݽ}slcn}q]?1u?nwD:ܜrm2vwZvws5si,PicX_tXsWx6x={ݭJ43+!GW):+2D$SMjE=4k~9wpJfil nea*gVy y#M ϪX~p/pƪhy۟%oZǵ!]ѴfqXv^[\;:zZc +ɤaxw4i :f\3<=籑L yr+ ʲݱ#}nP:t3Fh$D9,G}#4—`Lw͌5D{}TL^5ZQqƲ76g9YNu8ONc4}IF+ ;f`aN TIVv,Ϳ,J[OUi-iU˰ӿrםtyrNJGIgXgtg'N'*tUg.bb͒D<$eJ&ql(h(UL<úLF.F ++I7X'qr0hkJuWs/Ϙph9^ǵ:^VumJMʝ:يO7t$!!a(/<{Y3We=tQZI#ݸnaM=in<ճйC7O//}MݰT.<YEyE5;! i5xjOd5Xo4h>71+zv͙Nڧf5᧕:J~vR?.~t[XY#CRYYwYqjɟǾ_?3{|mZ5[6fs$g>3#b;kxIN}ohh;Geҩ|*|W5U'IVѮzj\C{]FC#UUee  Ud!PL9b:S+& Ջp&* eeɧE22)cvʑJʉdHnFhd 5G2&SFdTb*>.]+CC62Se$j1::1gɘU̍[+9_䊮'USRd?T#SSUdmd݄ -&=f1O5خm3sĶv MҚ&dS&fdRM5h_seLB9qѕUJ̤6v;32) ݫs͝J%=Smg:O5.</Hs\ЏMPl89N ;,v2YGS9$UΩ ͊ IrI\^o])G|{93r,4WI2r\);NA[a#*eRٝ6Fk#9aINF ~R(rT#<|olv\yeN=g,{Al.αdv34ut{Ls1vnzb4YߞQf]q\GeIB*` 7Bi6^&?3)-4Vw#IvJd#(tݾk213+?I>&wJB#E5! tS],&}3쨞FeY9nJ[aSxTڬODʣׇ>jqJL3~(ۺꞪ&cV9>+=ds0r%+;.1szC"[[Tκlf,QZ"OagV累C_ou~bg߹Hdev7^]H۫ۄu#^d`RxYZ6b&U _MehXWw,W +&=f1O5خm3sĶv MҚ&dS&fdRM5h_seLB9qѕUJ̤6v;32) ݫs͝J%=Smg:O5.</Hs\ЏMPl89N ;,v2YGS9$UΩ ͊ IrI\^o])G|{93r,4WI2r\);NA[a#*eRٝ6Fk#9aINF ~R(rT +<|olv\yeN%e6H9=nƜ&ﲎ}iy4MO2S;J{ڌ4+(/Ri+_H9NK2xќItnI:;U%(tݾk213+?I>&wJB#E5! tS],&}3쨞FeY9nJ[aSxTڬODʣׇ>jqJL3~(ۺꞪ&cV9>+=ds0r%+;.1szC"[[Tκlf,QZ"OagV累C_ou~bg߹Hdev7^]H۫ۄu#^d`RxYZ6b&U _MehXWw,W .Xz)3UI;$¡DhjSW̓Q!>)dwV$ l!IѤIښGaHiH9(F9Xn:ew>sԠVwkag|wu';y69r4hw;>}Zw,%fGQ4JaMl0w̓!l|JhVhe5aj*J*~&$⧿vs/SSM2Msj-kx%wG?}+Hc呭+S$ʢҽ9DsO"Dߋ(bc>W }9fjEΪQV-άR.5~*:!1V}N0Є“9*:DmWŴgWe9Uuӝѵƪ'>> ˼SrL<ዢM̬TYM$3òK4sm,Iye]e*1MH'6@n0O;We\w*讲D.2UJz)u)2םG9SdIhTv9VEcVα7zhE3̞1N7Rjn}.v!z!N=D!j?T}Ҩg.lLgsXϝ +ƪꞐ4GmǏ9Y|(ԥ >=F(p,^7jV\vy:y=HdoW N`-d.y`lBG޶T\QpCRPs" :E1X )9;OI;=ċjQȏa7*dƿnNvxEtͦ H#;O>SF3[:fW6B4'g|x)[قK54<%eY"0J*rSʆgeU2]7&XNW-ÖX8mU~&}A`y6>lr*fIVHsv[x#+:76D"Й1q24gxi gl[nT3wgsK{pK|{S&Eg}l8\M3,mrpsZ:otX uv Q9<).J:/xW&߼Ě>'^smpi^h,4LxB܊\!U2IDJ&y6'W4TO7DPG# ~yg!]X7;dI3a~8)D97X*ȇI[/^ Z^>CHLۈӞ փ,Ӌ.-> )eEI |4a0o[[J@8(2V| -H1 ̀h[RN{\$QGI5ŵIv"&y?X"0$ GMpL|sY}#5l2H]FG$bb6[jC"-hC<{FIQR+>CR宰T_v6uUZVյCPպ0_弣 PS -E xGi/7ZXQ&7eu!FPHQ/ !h/=h_:{aHKI0n4WiԻzIlymG8]?Ҩ!H]1˵Vc75j.ҨʑZTqԕFۭԧ~cZگ U7_uzdsc5\+VgZջXڙdt~owXzik mm})8OƶDU{khHm`*:hC9z|6O2t&٣j6lp"b"HYõw[={kdE)ԓĤ]+9X xȘOM(e~ 6 BK#:5EH;Or_(iKOOIj[Xvm$cf$[Ve^aC..wt6/?FFY{ mA@vHp -wgE{315MLklސl-+!~+\C޷-:&7a:&kWQМR;M_= #WpчàLm,=TL4A\N\lߺ8cgaٓV T]eF6msC8g4V$qk+^` -xB!6h3YpU_Ū nldfEWgA'>jbUƜ"RW"/ӳ0&$'WyP:Q :@0n"V͒9j̦G+F؂(8qоUUTFſkM WJ&5r~DT󻄗]7>3SI>h~mG|tU~{ݟk-.w`cB7|dD# ,S{7ߐ\Ĭ8'+ֵ9{}"@(ZQQI=oYoт_ٹo.a~% l͡=o2hzبoǺoal~oVȿwH-K8x`W  yW2=UeU]Xsp.[p3jY\}~ nK᫉$o?Ő8"L&MP#m%BG[K?pبY; %y@W/g@1{e9P@TgB ]BM|Bq3Yx˦C'Z?,ydHN&28dzS);垫L]a~&` LxO&H"s2q< >(ݭYGWP;}Dh>Ui'O(Am⼂LxVf5qmC8&oU^;[S++h88c]R<)ѻ&#$xG K "ֵ/]$ %_.!W5⬍XK;g6${{lٿ~ҨSyc( h_avpsܡ"+^إԚ>+0sDcW,Rrw ߎ?^^o;z﮽kw%I;ѐ1?gka_?'aKkXxjPܞix*O\H9S333 "q3ʉzA>/)p6PٝPSޖ_y;ø+]*G -0 nGc3 i#]ӕy8o齗=? w9~hQ?'ixɀŬ}3$01;2pk7 -ACPaEz@!?1;K߶O&9!Z5Lɞ3dBnjbv$ )jwrc? Zd?v-fHl˭-xvW5%nLcPTCAJmƢ)t`ܑx@kƪoČN5 go5} ,*iwGӟ l/ 92mJE9n$%1K)^$-\v.9-ʧDڦ9,Ȥ3>2q zWQS+ _ -6P ep}E)*\Hcmk^oƝbm}y1r5nQ~`쾀 8k:VC.v=l>ڶ-!dNFVF*rTH>OWbr>*@esɽeisTC:2Wƪ. 8t4{L3;m[UQ&.!Rw ' ]$W,.L?mY]>}o\x>͆SFCt՜-=4Cx1n}-P9|FuX̊-xL8$i"gOӀ%ᾗW5lOgeF @ < -xZ/ J+u<V.xm9 -Κlm)j2cN ~`Hi[@+^ʙGǿrcpu Y62>!,т2@ q~/̪nj9\ onc jq8e+85#g^hys5.HT1S?XԬVYh -Ʃv夹&d@:myLʫ&"1WQzU F#x7LEdM(:n AQdt͍,ɫjEK5ҩN8J(WAYDDCa9{*\*{(ȉd}Zle1).݀y-7KjjDRki.o{ҺqIwAX̹\oJ;J-f &=x7p𤺤N,'KϻN1H R:_і, F}dn.(\ilw":y -7=q.ЛDD=s.N E6kKw4Bi!;}$d|wKγv7JS7m֏|cмT<<*yox>KIA@h| m>PR%e ;qAVtn4xarUm-=9S[z+<{Yl9 ur b9:'t'>R=4}uqwDPȹa -LF(j rO;,ۋ6ir춙Q_״7m .K=C:)Y=oɢy(A{wpl)Թ y gH!KQaZ&1wK]D`=lQa :]V5ܼ_GسJ0f<]A l&8bDx,IƸc<\g7sjNkg B-('#'wRvSeb\BS0Z֟GfKOZBxeRtRm%/b"N65 -C!Ϣr$v9ҧB&֒PHa|*y?DRe[∻AoЯg7{(fQ.JC#^#d=kc6T;YūL7ޱ/Cv~Vѯ]x) O'̈́y9GԆxmm\*瑹_wk"=jopZ@3r`**Ӥ E :cmJ=XWX 9JojX[%&,쫘=wCD:jW4~9MB`+*QgE}#lRSK[Bl`ք,!k#,G@Cї ->N^g @T -J)`!J ElVh[K뛮֮쏵n0wªH.}Q @Kb60s"4Ŋ fBFxӐg(}׸ d^Lbgp0tL#F]bW(d `n0]p,q9[?hhMQ]-9bb4ѽMEu[nnr<( Uw< -Mn"$Rn.UzgSkIv/ WKٮՔ $.(gV<{f<4w(:{'}D |Rd7uiyKGaSK΅ =lVtpp(![dmԀO*G/&*yTANLc(XFx'=sbsPAI " ,|&1>\Tf_[yVx]ڶ+1ɎƼR2"JLªP}%iaxBŁy.e5Ǩp@h)/2bRFj4 -k5Dw JCN4͖yuKq؅qq7P>wz!PUh&mSVȤz{pTCi,atSsD``IC@ێ뒧\wi[sɲj*iRtĂ;V^+v0̢i7kɊIi5;E\HݜB5˜Ȧte9WDc]d'aX6qp#5$kUp;Yqn`vڑgM:aM~Jhc3_z\l#[ M:ZX) d"h63S, UDHCd%V-c޼|IE(K`~DŽa/A[1&JHpXu"&'TAN\QdXa)x9KuU g8p5\+U\?(\BQs/u -t h\?Uj0o7Hi]K~=FWCmsB6f6ޣռuGO$Ea tBP p1mcm?j+eD2M MVo5\ ^OMqHJ'Md Z~-p=:քBNTtY DZOc#Og0W]QUvDT6f"46`>q &Pc.htvxMi~T[ʕ:$2P~P/фuD@6]H,g8{9*!lH5'Քt-֩k tkbE+ǵ&>ykՑ9AHAyTf|}J8XJB 1"gu|?LH os4xrpl-% ڈK2 b%K/uq/A1do Z^p*?@ upωajD: -~o'df0dx ,ek6{faZC2[|b|a5 #')9p}] ~"78֕u# -LE\v)TVk- | -n[N}(De L3p4KE2 P_]A&i,&[ W{2]ۑ5$5hStg8 8~g:nEITo@1 UᘘJ dkU.}* -p;BbRȄ`gE^餅~2]sxDki$^-3 sv)56mƔgM9ܮyK+4k2~C5mAEZ>k_@O0m" ڱI(y[s;wӱ-5cLӺ{-ƃfEz<@U -tM6EGhdx ؁P=UTNpW1~Vڌe |䏬vT?Q`2/|ŬPvK`<KƐC qB|F7fG,tA LLWrrZ/F@ƚʱy#-0(0onjz<}IOKVQ ^h b Gr - i)‡EbO"/C^ - dsD"+ٶ?N$ Uh -&HӍ[{&cj`xissMq=7 -X|"E&K̬Q)(C#k@X:g%.Aؒ@fX;a}%D]bvϩDچ)+!V6nCd6ۥq=S͗g)Єh(Alz$\{=})Ce - *ӹyۛH #bg Ѣ|c;VJCぢ/97-|;5ULj-S,mea<% Y캓`)'jeͶ]$vkc"AU I"IM"p}68H6[NL=0%O@a07zfAj~ -|_7?h$O+'pzoBgBerxcfZ趣s%+TPVZ!1)} źQS"?/4-&麔7{o-0Ms=~E]8~5JfhBmXhrR(L]mYתb5PPw^S_rz>߲A)  9i3&!!sb>kvVoȳH96c3`sk'oB -"g]iG4'Jٮ L ׭w#E#R8XM^]3cnuM0$ .L.94qejv!H%7khI6\lXvc(\u(g^x6 pTB"+G?Vj%) -FS⋥+K1 -?FfYAČ%zQep<3Zagz<1qCо̗=;TUn:FYO-ʦ+i@{o r))өH^vbB`{6h{elJ@URФ*\D5 Qg~Kab,_Bp:[JaI\,0bh@,<$4&r1Eh3AH"D׬e:rOnG?0SA4kԥ++P {’ht 'X \|5Ge6`2J/@fw-Jrb!Cީ)Ofopy -D])A*/ګ 66ƣeJ -߮G;kd7w\I/A}Ez'LD87N#Szy?OkvP-`ׂcJaL#Ƴd_gMi ha,y;jnj0P"{}d*nMXMhKf:q\iG͕do]'F jQ#ި[8;*jO:YEy"=ْk-_݀+^NS*K ` ->XrWٮ()?cx@V&avJ֖c=xE* N@QB͎֒WBK${,yԊB^'!< -hC,jJif#F=2AD_tU, T. kgx&Rx@e ,G ޢp%/ .Q2twa:C^if:ğu%c6;:(i4INҝjWiIcԊXu썬VDbjEMCz#h⨊&HU6A/7eSߍ^e]DS +-GOE9:}d˞n.x9HuIRSJ2N ?옃|@%*H4=v 6|5n;VwuGm Nu ̿`P{SLv SMVā ?Z|yh+N7 YP\'nl*rܐSNhCdjII4C<|)O [! ĝ -SXQvUҹ=G+ -HQOM`)zrB7N`f\냸),y[lq@h6ۋZ*z"BB.k /KJW= nNi_gXqxeG5f1JX,t;Bvu+Ȉ@ bĬT<,: Ac1Tвy:eU:HQ#3tjL--*3ņ3+>2[(oL-p<8)N)}uBQD~$S -\wߴzP &e4PYwp.B&vF%~0ۤ-lPQb,v'SHW)+;4xtI>D&UļJ!MEA*byiR#RJTy | Q0VТyth_0:(|aa81e +m9~XFIՎr2]dTm#ĩ[ǧiҔ%F/Ìg|tzSE# `D۩ N-]e !Bl\,,@@u 53FT!O[ -PCe#;N|TѼA!"TY7$*W͠9e XQ$5%"\QI4}[Ցf_Aސ>kXx #Gy  Խ7s_*$IqN<"GgXWg$.YPMCN"J)`!

\*W,S:aE05\!-z[#| Z-M&WnANGjcSҪbg"ͦZMgJfxW~Rp@ {^d1Ia`XNxaI,v{ Ki\hE>!y=nPT5*_`ԦON= -"P24鿰i*ekpֻ,:u~*nưL '9%xN8ԠJdW5p, DmYeexxIj~PA kPD\ GƦi: -/NIJSq)Ɔwu$iE@+0UFMBMMkʀCꥉ|) \+īKoL~)3 -h AR1D -zL8(JmPAkE3#"* 7cSNh:9h pZ-3xh\>DL? #HNј)H(E}˝HUJ)PX0rvrcZ,i_8Cq*u}U% UCG!Ǎ*64&-;@UL {w(`5<'|>Ir>Ir N}$AbょR sB -6H+,n #j+v/L5^ jkXPi$R&[ፑY0bޫ .WgUr@OB  pN@1:_F @$QxxaeEHUS@ݧ YM($f ef,pbvQlͿ4|Q&>\۞w'6=5hLޓ9s/pBU_iRlDu5[Q6ö,qp\ dN?7^1ۚU[|XyZ]31Wۺ )^o/ҸXL`2 ejz5/@PV\25l)U+cUʳnwC5oBn5A%)Tpr: e&Vq),&V:ܫ.')#sW=ۥ\u-LB.jeU&J[*7]SK1I#]ʉIu}OVEu q T! )+xKsN!qb-TΔ鍫XXNԃ9)I9lX+.uK+q]YQȃ[Ū۔=;tkVUC@BKɹa2 -p f4yj쀯ʀEpעgn"Wiip8u9,bBJ04Ϋ2ơ0bHt\fKDŽVv(߅_]qHZ]4QG4>+lƉZ[6gY1q 9?Q3BoI0$u2u`Փ2saXe䆬Y: b7;|n}22UB=AUfՅN{<)c+6$3Tv`]Gc65OrQbR^bhjMNC]w9Q&)Ler bEϓĕ:e"W-7m-} p̊(+`ƒ'ᡇp6zPo"&0fqB'dj8 < kE@ -&b3"2L[I1R_lciQ{tJODn4ݔbn B'5NP9z;ΗDdT2+/F(#_J4$ K&lUOX@ -1~|t9stpaQIU{\>JYѦ?z"ZS@ܘ#_%P/I51ItUoEI*)uqi/mOX^DyV~غW~6c$!m,#GKGVuk 3ң7"ˋv1H(Xf.Y O4K-~Y{!&+)L -zHQa2Myݧ Jd% -)`#]pؤ䣭G畄~oLqSq `iP ,:=!~v-ָYyl] ql14HCB.+|eKٹk8jk;ila>Ue%̂[H8 !BE>M6@bIJg0僈=DyUeaę apuQes Sr̥WW5r?`Zg0W8R@&UP}:t~`#Jo4,N1}BHy$ʛсIkߺNLo8i[/HIkY2|%@]B+. >BF6J :Zee7M;>Rҵ*4@{lv/lVLgGOPe%2#kLg4̂0x0E iۚ{z+ڂ&Mێy7*.#&CLGpLH- -aM@$29YWYLs)ٗ!"$XMqa>3)30-IQ=hJrZxjpO;B뢽x4Cg`6ᕤC'v_ę.Q/v˯bp4chq!㳋RA$sJg^2C|c,뻉ՊX쾪Ú.jWjwJg.VBYZE*"Ui"Bx_\?U򥤰ueӂ s*[>ږкLb^L0v23#T1*W]lb( [Eʐ+hc!WNUr a d9S=RD(>Ij΄ -̚(Y:: k밒g9/HU"[U'*ӹͽOhU)狀vy.*Z>-+ -s^UaŞH )鑚5ZDKjקpPX欬yCS 4$m'bM-Q -:L;&㚭[R+edi#oI_ux0bieG/%aQ}GD@\sqs2f,}&颟,7ܒ X4Fv٪78Y4$jnxx}JMzk{޲w(vnsIj2w FDMSdB:*t.sq0ks E]>Hg>C`FuWСs3CK5 `H^t 8rIKe5 -nDUIman)`!k̞glMZV5ǡCB걬)KjlqiauuH -qJFhhr|kC|.I<#B$ { &pnZ7Mf˙pݷVVRiq~4'gN(9SxO/)m{JT.z{.Ns-m5#m)='~b)&&1)s͕L aߪj%gengzUY NqY!6ȆR7F!u) ^:kݩ͢,NmQ Zַv|ziθ(n٩)nsh ]Pp w['N -^ -PN [ $a#و X=ˆD]<~^<' -W)UU1)VbfoGhQV濢`/OrlN&N#؍ -I81M|h6~m˜w@'@9tg,5I`H#hV##4g`g|fU0pD1sgQ(I7Ǘ^As( [QĔfHX`d8˽(xwm)WܤWP* ׍.^ۉ(v qKf=ZyEYO13lߠpLQk?g9(TA=W0-n,g"fqx>_${^E Evr4y\6 u9SQtJ1*x~>8ֺ-/<:K=`Z{AһN[ -y|GFBWK :ɗnQḋxX nOջmC `i<-P.{" -tU× hKpWV0S2>?{I9&rAUZE7#<ՅMQY:{X4*ں~K Lȴ3$W"mxna^Nd>ϮAzx}PoLDӬ9&sMM]l&bx=pz/Fn+#ܦI~޺܉c:nѤ0lԨ7\$'I>P\V%cF!}Gf%d!Odz1%;s UT,c8(E0bDLxNJjsUj|>eOl[8RnR~%+˝tDD22؜ -pḙt;B ;.F.ǁ#.R;bQ(݅!P*\sr5c?+l{ j׳zeSFٹ_b*];bv tWc="9̿T<>* ډ4xwRen6qJ]sjMW&N#3W׾q\ە/@bb~ZYM}5}mT^1mw~bdRq`N'OlCkBzׂZܸ -8*NY]5řsEsT*uS׹ruеYRTK㽥mBa@H9G:UVǍ=3R$p;/; fpC*=~3$, 5?}tg1 ';cрF3j *%꾊xE@k9/1硧?!;@o)Z>X~3.ߙ@M&⒢C)8{BM/nly^} E`S8 BΝ4V -Ӭ4uo]{F-ͦgB{:\9_%\o.d w /E`Q_\ٸc|:XeGMPr*5z>U%mr; -R~هW*hUi#*z;^Ogek?/55׋>?IR$ݮT_G*1+QPf4.פV X1r8]KY,ҏ#$MƱ3KLU¥Z_|}u<SBۭ\Zku֙r|m?Ytb4>JS PJPBnX<>Eu:z^9}YLUUUfj>DMRBI}ߎ3QWvwoN["0SUUU)l zZz5YuYwf,gQ?|gԨedk4Vkdlr¢"G11KcPP;5,\K߬5ε^8_wl8gz;ZmmƳν^O~~VuZRk)R|oNڝu[[~ߺ:cL'WiqiO~\;礓NטMyf:vS?ݵ꼭f=?O{fKT۫'һznz7ՔZfm|Jݕ>US|mz~ڝqxn^M3WKmX߫欯\7_i8כ'XZ_ۜ{)zjjZ)WW]Wm^x㧿iz[=qy3qw_1<ŏz{)+8;Iq|tcYfL鷺j~}zj/9?}{3OKouZ[joL'V/cJyėygk_[5ogTt|Mko_?W_r-i>SƟ-kz-_/;iznԯߘگs|~gޖwU;kUڷ;t봴V}juո]kkNlw֯ZkOz_-+i})yKO-Zϟ夗\)ug[s~j~Ҿ/K7[;7{^{grj{7t[/Ŕbzq͔^J2_:qޏOr_zy}w_k);iݯb-猟=1m1Lj)vۿ{Ι~ޝ3}3Z[gaW:Wkoޓf[n_L_/]l:O>{Tߍ;Y7R?溷4:N-|;v穵OqKzҿn8ok:3VxӪ)͵]55n75_ygmoMv|˟k;x;?cU_Ji5~RϧϋK?kƘV,5)q{qά_uO]uV{qufKRo:[뺭{Z%f>j['S+[5͘N|+}]'VӍ_gw~[Y)=WkMu7*u}]io?6~j~k5^ieOcjRxg̏_jƟ3k|qsR]%9|[W/UOcK5zVgt׏lirWj9nls;nzsw_mӯk/vk_+_UVO/Rqם/Nk֯1wLwLcktޝݷncJޭi;WMJ}nLWL+Wc};k3YSLb[qxS-Vn,z;ON;-vNyi=sVjoRk'8Vӫ+4+W+޲>ŏ_;o=<Ҫg:g4[[uVi5yb{KO޷Yj{śZ;=7˭)ӚVZ)~vR\zO{j7lԴS߿ct魙㬵Ě+ZS|VLi9Jkݔ޼u_+y_KI^fyM1͘Z\km-ߺx~͹s{j%Δ_LĕKwoƚ9_kc\m])1}]-[Y}gź{?XjzӯڍRwjMsvk]L/n[Z~zWlmufW:+WMnKZS;jxnkY۷۷o'ƴ|bK6cVlrfoLuWYZE_v]j=mw2ϵieukk{ִ^}u7ߚ\͹Z59?tk%ݒn%[SyK}}޽z+_":Uη?3k+eR*i+V,qT9ROSj|YfKw7l_^*՟TޢߗVvNkSĿ]'\l5V|_y)}zb-<o{Sly^ZXb9gX~wo+?K|֊VNr;,nwiejMeTZZgY޺UۍҼ>x⚷{K%~J3}KoYjz^3Tc'8M3vGﺧoqRJs̘Һ7ޔn[u9ߛ3H:L* { -qΨ)1O<9*uO)k]Ŕ36]Q}ؘbJYݗh OA嬧r֋\Xi*#/VHi*I 93*Csƪz {~G }w`#(f T!!\3-Mp9рJBAsqԠ0!L$&ߑRђģaGHFG *|JBFKȂ -܅\ $UGz6`|G.JJ8eNpiܘA#|1OJ #y?pZFIYM(!q-+JA$PWJ -Qu,]Y҉$hI)N(1KYiĚ_(CCzCȅt}`7 t9vbQFW$Uܶ|#||@qZDƢ&dIF ҔÇS% -yuweI"nau1(X(Sa| L֍#&{G2^J8x4ZfPUR ^E*DA -{~\;rQ\f+GAZf0 -/T;jY.MQˑ +8%xiJBj1c%.OFO& c}qDEF &4d,G2\;z1X;^˒H)ZZh2ZGIX`^H9lTcFXÅ=.>|4\: bF,j;iT *Qdхi-.Nl Q u8bST/Q4c>@ -]:jX0NBI UpȢ:NXćtVLY)1X;Lc Є1 Fs_ r -ext8\n M5_NbU^̕S'a=?ėgÅGO8e|1T<IG貣>$>puԨ v}ް*ZT-A?~c b}(h DW 5\M t=6`P\j,ZB5̍!4[K멇0w̬: N8T58r++K1l,qGHg5E;fV b -gCwcI 互|8dQ̖RX /V>/FRhQAZNHWc5X1s jǑKSѢcF -7lcMZMe*G6\|4Z*8!$p .TI.|p"BK -!2\F1YA!,E/\TakMu[H(W9h2&7|}O{YZ - -|[,gS֗j1}--726fJ1{:o޻,oZZ?~[2l[~R<mPʽwsg3jZXZg]vlƳ꺥TK;5w-ϪwUәTn(v}r,szgwYJ}鬕b-Y・ֻ)WeyoR罱2g֗ʻkc]_|wϻn{nomzVYu\{5WLO7ynzn{{#oTfWjHf5Xk)xJYyjjպL)3Sgγ꼫Z}*M_溥X[-w+YvKmoosW=շ+Y߯S[iᅭfϒjqeV[iYƶ],q_7RkreεZ#S:mյVsWM{W9WR=bMRkknIoXV[-^+-zlkz^;5ƨJlVo|1^mVm=m5bKNz4[:%S__Y%W}M:+x^k4)/Syʋ/r)3j,5/7c:ʍrcOcIVj|k}δ45YiY7gw~k4%Ώ,q[*VwRg\sr|ufsS-uU,u]s,uf|zxKŒO9)KF5ZR|3UyOkvIV^}iS^V_yոJXWKeZ׿xKnZ{k:zWVR4ﭵ;K|޵fVޭom'om5}7YϏ%u_wJuJ?*~*|uROX-{g*'uoL鬻{_wν6kc\}͙Ο[RgR:f)ΊꚩvK:kgV&?5omr`iNiݲ^\u}=晵>Vޗڟ]oi[漱mުm)^+kVY֨(gryevںXlŢ{%R_8뗙}?k]_FVϢ[Z+O):[n}/~վ5Y:v֭6_IwvfITf_zO%~5NeĠcʸe1Wloܿ;)R[lmŘy7VgI[e5K}k5iXׯU~Zֻyʭ߼-R溥Sk7s-Z*wzw_ܟ~-v[#%Z;qOv/hkw3\x5JHc$<"#d}(W5.=x7cO;& hD~"I8p%=B2.DG@H$ULaR t!(f8eS2Z>~#\'"R6֍r'M838eP]gM]qS&5U_qyԬ&R5^:/Kt$P -<`4:P&|E6㦕BwiTPQ*@qf,uЦF"c# -(d7FUanĜ:Vד?!PR;K:҇H5v~H7t<KH!~hqBȅ  +BTlĞ>HOE`R6-9: ohNk5[NˉE%Y%ivҪB8A$Nw{ KAEMq q3`H`; K ))k/R8`pvЮ Pē2ţB5"ݠ=!u4uw)k"c\^el,aEu*H2^=x:rS`]$<"=Kndc|NTTu_n/N7z5]N2\:B`&̩t1 $i9Q@LK8) eP@LJ),J1l=؉^H~`=Iwذ@\Vx!p$fBH8PO,,&`YD9,Jf ѤQ1 %?D1hr&M,UއFˍ#-#RG΀g@!"[3>NY,u$VQmJs]D$ (&E#Tbp ,G-,BLF"$bAt['.ېE;iWa0Q)Q(EQFJƟ火}Ğ8U(˩bH7Ĭ5_OϜVcfp14^>.H1A)%ALAQBCNTA)UPi~\mj!A}u 8޳5iB@F8hNˇ#&c@%I,mĠ,ޓ?l]'5|M~h%RDTD7Nl Q;8aT' ߀I**<9,D wުXR.E *i>#p -.&a#T P @+`P;GDYu%>iě1G-ėH0W9x9jgD.O YH3^S5҈$q -kĚB*H0SJ< ^XSwުD(  ˜^\{ڮz#^}D3ei4H|6\|G0V7އpj|D Y7dS ODqΤ™,V^ C6%ր15^NbZUöՃO!T7x8hPa;&PfkWh1^nX@I8&cx0W9tڤR8ݏM&>#R -qȨXz t` (j6\PY?$69dSXŇPWi:gU]r -kMSz6\P#wŇ|Bu`a#^<,jZ5]Nr_DH'mĚ'q͊g K;iV/D1ߔE2Z=z=qV OHDXB=H$`Ix+p10%!.4oĢ:Ofqʦ'Y8hRLR”tk6\ll-r֨:-$}X -ih@qXD,D, -u CFUr W\Y??|D:-ӆY.h`B H# ΚTD@z^|6\.M qKShRX# Qv_=nh)!H8coȞĜ)S%a tu"$c@-۔ - -uڤD*|-q0[UH${eN4Ĭ|91TJ< )(^@Q9eT\J -+-fxC }~%i!dkEL|+ ` M0!8{1V=@+%H7օ~t?o[Dŕ7nCPo7dO\gMaus&yܪzЏ8d}ڴzx3o̠D5*DU'SFŃtq!:/>4!&N<90hx*X{yԬFPzM]gPmj,dlT!,IDa|ְ|7cPkThpQи 'h\0?0ׅGjI1CGJFm]&Ձ~luY" e8:._YVqƦě0?0WQeU6bN=g,*#5U>c48sΤЏ ։q0ƪGOk]=lYMeq*M+a9eS<*a tqUxDBĜF)Q?qX=oYXY! DMƟI{8 'dغܸ 'h|ȗ8X"%]~PDXD1Oz"`ǯ!,bX(А>dE %'OE8Poy;mTLUu!:/^l<糶s̨81l$Ql1l>oUCFQFPA|?nY#mkÁCA|8cSb͗F5E|A?~#ٔC5 -iBA!`#a](WG !~GJ(ȏx#5 oq/ bp7eM쉻\F@@PTʼnEKnxrE 5`Mb0(VwQZoACh -YYc~=x1X;x4]LbV8dC8jS/)ZkxWx#6%d9.L#υףb4\J\Ksuѳ k4]LIDgxズ{Yy0S9x8eSOVi5_OMTXQqv[:iVΚ3?s?Q'mhiBA 'eI$|VTQ}QEZWAe"qƦD22ne.\Z'Dl,rrK! Յ"'g}@Xy"˜!{P\GmAs\-  -AkQwЮܯ0֋VYPaC}65]q!!1nY1Jb8bQ#UzcB.(æ+dltqm5uhW@aII!󩀢6X8ldq%md1%-iDk54^>D7N8ˆXQde6aN?x3"-V}ް@Ѐ^ "`'` -+jh ]bW/X7<顐ԃ)QLip$= "(p; X Y/BU֍v /jxWp%="G PKS@H0o z `^#XD -` (H)`ʋ:$g/TD5f AH{0*D#0 ܅@2$DQ;`&VL4I[`it+U^! P#M".+`P8Љ*%XbG8~ \}(Ahmt[W! l,m=HtٍF|:gU}H׈^( $BD ˜H(K/l@8r`n@ -D2L*RpلEdz^nz Hh$Y6dL ^ZxsD n#(j"YՁ_`at>pW}b6_zL;z=rW|s@ -,$u2MKq6{Cq%]@BD#~;Iz d @tC5X ǷzF8"(g )ha~^ P@( ^@Є4BN9@gw"]`G E@ `һ=M踊)k1]V7qBI@&L*,hXE -(Oz&lԆnu#AlLW"IY *lAÛܯg'0SLI0hxAA?~(e#pʠxPp j=Ŕ4Jht\YFVơ _ݧ-K6 l2~" -2aw`;g=lY<(kzyI=-V?x>sqÆ SFUU/hkG$ސ=.a۔8"C"^!"^]ܯ  "lEM:ա.\Q-LI6\0(X No0W| 4I pG{uڤDUh.Fz/hx-bp.b6%6BD#D !ZbT/h"60S Ox“5ԅ'91FY2 ] r m8dA r q,-+`"֋q,s"0ې5q(N,| @3K{!n]/HF܁ Es0hxDwaglJ~E n n!x19S@Q&d Z}K)ѻ!{!^`n*zԲF.cF%DŇ2#F8xa5+'qˇ3у!HiD'>@"g!PBЄd/P8bz !Qr<(XhVHoaNDaQB=#V!#qy9v_Ϗ,N$&¨A.WPIG$[_X G>qЃC& *i]VXB?!R"p&o@P(` XOȀQ $ YLq+sqFXTh~ti^H"əc8уB(c WBC=>aPf@'BGz.IAu[D#E؉T :nQ0M<+D@ SDAE! BL j=(CR "Sg ")m]k! 'eI!|xبI8 `$IxF7.-ݑn 1lICAF/Š$ׄ-&sF5 -RkL8Iux>tX $\`b@ >LP%LLށg$!"]/ 8B!TbʙN+l -@ Yܰz | ihIX?QLC``&` -4c`@ ISF1.sp10u܃"$fDtf>)ܸIGj$ C00ᱸ 9kl-!̈́-rʨ -*k!CUz3J@(\X*dX 0ąd+B0@r[c1[\W@p <KnU|"T*GD )|S#HF!X6)": S(#,jB,^`N!Nٔ" -υ~Dkyx6^x3?"Pܯ+0A0R7z.LEIDau\d$Gs䛙1lA1S<λ $DAT@NE #!/ 9.Hۀ ! -h2P#`O(iSan<'C#l{G.K)'`%=6%Bȁ%] |%%pC$m<$6ߋ2HuZnLHĝ( 7v!!f77A @;!Q'2`/ <*Bs[I6bNg K@Vf "U@Q 't%6bo PNZU -8od|Iq1)_Sr -cbv/M9z2YmYP/kIl \A gaePB惉k7BÍlŒ!5B\ R DMBQKȺ$f r<`'xݍOԺ(l2XqX]MJE hDG8(jb :*j>Ldz4]>: [I=mU>(=*!NԨs6 12#F -O/_WYzJB#^ -xchIl;fV#Nٔ(#(^@D@#=0u8,gl&HBtԤ|6\PgLxQ o4YOA@~ -'j>Q|PH7@6{B\G!8dSbU5\L}&k)AuʬxZgj2jf x2Ƌbvp>"Rˌh -H,i!X`I/"xr-G@CF\w:K8Ϛ(AuB%mbv.LIG/QI= UƌS/'đZ@Vt4#i*i -:-IZsʤD|)^`aBPधp]& lnx0f't\4VCta)$0 `&h"6auGYB(0€!QP9>qY?q\"VoqgX"R2[=@ VIDGFLҒBЁ:bWe/F̩߄A4hjJ*! !jG$=%Q4]LbLލ;̉]H (j";bȓf$A p81#&Ϫ:VqD-Aa⊚HtdIyְ1,js -mD(&̩'PeIoYO[3w5aVE*ÕwS|52%Oܖx Xl9]xG.Kb 4^Q2hŕ66E nE nVD@DD*c `O49-IFYĚDG: E0?H8oAqjٔHY+h;hV#$hR . AJx,`h@t?nz@0X9nY2ZJoxcc` 'H&b,!^P_/dIܑ#vAa'` oF˨d 40 bX69h2JQXX`pbu'Ǿ9n졷͘_ QYGnr_%M_|c<k{+WolhKo:`?ں-c0/8C@ɼP~vk1n\gg73^pO/ !g'i44=-->/oeoI>{ωzL~W @WsߞnIhk?7t^|ۧE?rKЌǻnǔ3qF^t -R)?Cf*ouO͡~&ܧދ=fuЏأ+QHi!nM~g{6 -Z}ڋw1k} -FkG=,941e9%@>yonl?M?i|cn3xOg𗼀ȼ w!`z[Tq3 {GQ zC> o{y -܆{׎7g72M;e?QRvu}EÁYnD^PTOc/bzzџX7쏥bs54>ա@J5sx}~};b0ŲLcg߳'iPz9:c}%e @_57;UzǤ^2e=w |᷋^JznwWWQ ( j7/L]ߓ t7W9oݓXn<+BэE -ae9 %[p>uyg0KV>3>10q|+iĴo**h[FgE7~[ ZB V?ƀP׉ %(+n{MY*ѨrpDr FB/sO^ۉK%L4WܤȲ -hlYei{FRsZdMY -?&B>_X n`ab -1gpf.emi<>Tع/ 'sgbߏV+{=Q9N(:A^>'@dWxl У?( -N,( 4|>{091[;%cc&KReV_A0GuQԞjݴ:໷w"}*h[7wQ*i䲌t6-9ӌ[Yp,y&`̮ӕQ/3Ë).4OÆJnOe_&a@-\/n;-(nɕ柃R0:xojJxvKP-o*/黡f11& Q8бRCBn=F %@ǧf -b?̌.rOdҳ/j#WD̓V/EmVPOlUZy5ؓC{"98AܠGGQN)$٠y 'xsdјqB6n s k䢪@_[ hҘcj2fؓ6Byw55>HhmWhA;!)B 3A3ݳ:н= > -uɕF%ӿMNse5* K%_INl($qmZ}] ^LJ/gzt2?^Fh,HdiAL2}(br` }Xc7 -R";ↈr~i[j>]S}p[rմt" Z. | - W9sҗ&Dl,#7(ҳLi] 2nqMh`u@&9BowX6(p0>{"Tjf@Z!زfiCnQKR9Ǭʩ7cCͮ( F"|bzB 6;E"PјĹD!: O.젶jrgĺx>n7}5SE b&d֟N +q^C`7Ҵm{~=<i| UkyQ> >y/*9y+?&ix -41 ? ڞ!7?C[\omz.rHu-qv MB8! z WZ-śJiʢ$k˞58=t5Abv jiiJ[GK8L}C剶 -LVA['k.<}ȮRtS,'J9)>-2ḺZ4UHA=KT hQp*4~C+Z`^B6N.{$5S:0aoK[ьZCH%B6IN∊ɁVHcX\*CA,[TrFuvۤVGݜ^I:ELB0m !MZJRañkS]lh(vઃ!@0{kyJ_G&3.4@H(WPT Z$buM|J*n溺1ǥk CaZiW&.39 -y KǙT9Yg?6P/5,i>ޙ!̳MemL5sZ&) -7yqv1A#Hr (^:£ņZyD'f-", #Zc+k|uFw%P^~m64QN_۸6HaGu;%#;/74;xZ0"HC@=sf?sRދ QP7AbcΊ󱇉@/cPyde?Q_rs8yXj n!\ft2_2+hjFR #bm)"ԏ~fnG"0=٨[45J] ,1HI׽ (WMa/J%.nǔC;hqYK';QH$rb>Q9YkhF"}VqNz}]r3r~_ m&57V;zf5nd'La>y|i=yBNO4Q4Y8'Jp~!vKcg0eS'աt¿  fSXEţ7;ݚk:AFѤw]P/|Uh:2(eγi=W.pߗEErXwȊ2-٘%䭽iWrI"иJ1Dc<ڥ -i]A[T*v=l}\s`PEkj2fdF0fǂb?eon* J.x5g-ChyЎwSSuS蚄 -(U# 8UdG E'jInͤ/So1/&*Ғ.[e(i)Kur.9WbLb=`'r=E?Rty[ï{$(> TrA79Z s4»7p+iWOtLZr "j\RCA@!U"S颬sV&_N'_8Tçy2za 8{ `-nB;A{~k5].A3aud6Cw#:5 j%".5}M5X #4?7u䥫RO:=#{_!gBY*P V J"c#94= JT -E6&F8R1qj{fQ\$TUHiDM>]+`dkw@#r%eI~73.ulHK>=iQn z"ey_!hs]inT1sBx33|Q*g1qE .+tݘDE:0IN$IZf3n5#@GT+?{0#j ?R.EU,YhldK,aZԌp˧=LÛ0Bg`b -`n" ¬t*h4g vlhli5İmDtP&^B(2K‘_r9|֤/Ӧ夈B25pzaOڒ68'hܻ2".IҀ\@,ܯT\+NR󌋚h$1TQ⻊]RBԐ!bwʽ{>stream - -xCm4 ĝg-=h4q\RBr6^|wf]l?E{ sl93Wq~MkRi/S[㈕ƁBubꄎGΨ4 LO)x%sBuA3} A/[і_Yjw2m$W2 xV+"SeOHII%fv!mE% :"jJ\ڮv-3p]+W`pr]ӥS!aZJ p:)~ ~ -y>@ى3>ƶ2a0,Qf%.눡9MV鸽Ah*3x TҡF&_C*,Sv^81)"jB.ty$,e~"É2t8"!0_ƺo \J+Q2y!t'Q=E;!p4Y9oN,vW9~݆T%o+ĜIl+k99uZNrOvtuɎAMIgq3c(:͘#7+ #*rX;_|V0Cyxևk -ڴC܂0Id齢 Oϱss)#bwZNя|aP0ƪg`GfH) sO&:jOR.e'AN-uF$Wu:-܂)rBFL$l3|;HVXťnqDD" A/@ Ü-9v$|vR_y5kMpVٚ)q+NӇ%;yWDIƲ)]2swjT-vjc%(qn$,}e+jtwJITۀ 8z*cڄdSYr84SJ&Yh횃jJ17y;N#ZױFvlp"@0_Igx.-pDAx%&h$gM?T -)΁^аd@:zPDf!>^0zEEl[QLyv6b) ^&GZ*hʅѧ#wwy ޯ /'?\lSsrpB'i>zPO-Fuq6BդTl/Vp$0nXFh9%rO0txImGb'\~0m=up7Ybi:lSIM•ש<,疬ޝoh @oV=S0(4k xp[p]_ƒΚߎΠhHiSbt|6ℬ\rq1 łY h)MAfnvt E%=lSU; 1Dp^ TvZ 8L%<:Ӣc"0DcW1K#aq*VV 4KAYg8Ď8VJ -NΌh\}L߰.}߱"aDX-X}7h`ʵ|R/8!<9k:a|hx WG31Cև1V6?:ΌX;f!s㲁lч )#1y*b5:X0F0דL]y&8ia*5Iۮ e%+! QGah-c\ t\dEdUwO %FD+u$+ #rY䗠3!A\ޡmmCh$ ;%i N<+9- %W6iܙ2C-V~hjXޑu;fwR3jO{Z$Ba&nX3•Dͮ .Lk'kLH!}`$^H~< eD0 RɌh mΕ *`MTBV -T:KMŇ+[]T5g*wH4m?@?$/%ӏ`7aEjvÀfwh0.tl2&J4^A omz;8Ȁ -$,ÚjaۺnYq+, !xD?Ό#!5tEZd]/ugK/ g'tXp7EB}0mU{( -YbZݑ$w~<ޔ|?\ -%_҅061)g(6 nuzk$dX6?x?dt9B!W$ } A,¢4 7㜱|PU3e}'`L̑kq/z8|pȻAX>!j<$:r.脓sNLpzUgJbog- %gѶ C:R!'f0JXK1r$I؉x]CD@>N3?a > S6N4>ÇSnQ>Zm`;6zC Z8-w# VX'}P#ws֮Pq1[bOMQQK-8cw#(]VŮYD(5l;oUGjsi in>ʊtlýP9OHCq"aTrM-ޥАHj4d\͢:4FЩ$\[U +?zE'nrH~p829 }7cIߜ7ͿBb1Ө 5OD7&H z|2)ǎФ( -[lu.C0x|:2y؉A=ӎ-P\ך|`xCi.H] }\jhQ٩0ina|(ƚFh0͔_c -%qoSk x1^ cX^ 4z浼gl26wR4le!aNp3eBuda#%:Je%fnZp-zdIn8.]&QJ?EzH?߁dﮁon;_=Rȵ_4_:2BƑ#ܛLK -]KLZ3[v*\1*wOa#.,A3߄d=U' 4ˁPj -AvpM; uUY;N&jڹbdɗ}uRm<I0bAu=JVfqwh:8K@@b@(@ B_ӝ -D$sB!ɝإR곩@2'} j53rRG".Lt\XiZDQEȈ@Ј\pY1q#ˏNDL4q P7) \A veBjANbMbB[JMd}5W"eͫIuK&Uw ed`bq$& d  iD?h2Lz&PiϹ&ę$<%'r+҉Ʉ\ۉw yʘL` >?Q ]JG%&?0^%(pkߒYv@R(%LXbÔFa -6\K9űygÜ%""YĒL, Ugh0# d;x#,X_h,(> H`lԘ|^jDEXX#-֐E,R8"wEFXVRlH"TlUiCӵ.ELm( EfȍeOэOݨDt0y4IWQAGD>8 4" Dz" qpu#q"܎Ck r!r|LUV9r!#!vqIs!A营½~CFŬ tL! PGhީ3d1q :n! ;bC̎^DC{ 9ckR8w|B&wT,wL!G&Bxrx/!< 9<z.#yh!?R GdxQA6nr{ >dA/d2m> s.H/ yI[Sql G~AHd$h ǚR1I$/+W7e!@rȣ6?Zv -0>"zV8 ;E &H@D8/.3:ᰡIڃ?x -a"egW?PJǜ\Yee8&d.rB|;+ML(!%)hd _;5?t$Ba29>P 7cE2=v!L9|. -G"X?l9F +W)Rӣ/T- N04-@+2hA^R<مUʹOKy,^{)Ɣ辂LѺWr+ʞ@,E v ;O+.~[QPai+&JZ^TR -^G+.HeӬS*SU\bWPɯTU%Vl -Ztf%R*UPbԫ/W+פX9Se%HQq$*Ҋ,PqZYo+< \ISJBKW0ma)~ -u.SlaS"iȹ+Q6Äͣ%TT)"XhK((cnꈌ"W-,&2 ,(ɕeQ,k%8, -Q -j5 -^=P׀?Z\'eTh -;-B ҒxuZ$n<1=Xz'foډ{r-OD*u$-Ę181"Lr=D_+:>@EW62kXI\-E3iS:PXBNdSjYnbMb0k3jBMDMgU?a&#ŧ4rj -XԺ`^-bl002\ۢKnvaya]5$[?"\0#q0#ை44ո3#\v2G-X.ȷ\ -_ш=U3V.jDBsQ\uCfDtF`-zc˥,TˠEDh䢘eӴՂ1#@"idbшYF@\tKT#0rIbш53bhl7a&%_Ȋ("PTTlˀ ]G QDyX"8*EQ{"DL/A_b`Ej_n /£|!J`y~!09vE-o&l`܍£hB`FF8a}'̶06 '@aoAR}a$bR!8#gqxĘK f71I(& ]hgbr^C!Ƙ⾞1756&!Ǩ~cCC혝W}ؑ߇*?FaB9BFk}"# |dˆ_22b(Nf!{pY$Q.TD -!ˬm2?C[!_F3I4[<(23!%uLǗãm7ʹUN:3Z<^I7q:}}ic@T $4_C3lt%t@,g(9G9 ( r(ei*cbI}494;`V.b'5>!@J45҅4 jzj7<irzxmoPrY.oC^fkjG`6XVWРC6б ~ M6p_6WRlX`jR -6^G ~Ӑ0\al3T4nFfJ4`7@BLh Pb5l3bmMnt x'3H|>!zlVV%YMPBl27 $$8W#8qc#`I51{}.'I@gqtbk~aH6|ͅ㑓l/Xar ϡЙ }Y]d bgp;sVB9ңC+s₱/\s^z[rę-1:] ZtU o32-x:`ha>u,dHs:Z.KDי - |x]a+|;]eg.WxA;EO+u͓vi9QZ2wnXU0=25WM*Op/QOo5*` -!POaX8 M!ݗ„m@mL)uA6<#Mv\X]#ضJkOV`qz8 }X#NbUBZ#+QJL֌0_MWӽH\GҰ.B+F`, -jE0TZf\]6r Gdu?k^Ę֠T,8Bċ@ -ڣGϋa-^0FTԐ]MM=Z7nE B2] -I]^_ 94 O0E[D ,LQBT 1j_IT+fh"e V`7;PE8 -%뢥,woᑭ6!B# -x.yϤf81?ZĖVBj#2{zBUo BBţ! -$ɾ 5AoƩHBܼ+*˃yUn_6<ԁNuS_;EY݀OPv`;#A ]7g|ݜ62Ɠ+*nA /j{hrloSrqlSn@ bU@f_vhc^Po[Q9j5AVpIIOnjB? -eInܞ ƶGwHặ?&kVI.MGJ5kuOՠ l\]6nS% P[Fw+ H1[ UMh@uK·;AUcMk5\zPASHÅa\Q\i2^]ugd=K47_1 թb`*-Ow@ncS9A=b/s%@Wx -vsV13XN &XXl#r+4/0~@_P\Ց1^𱎜i.Hꔝ2d# Mzc-}_E[M_-OKG-WI?`Beb!Sⱀ U7,8 Rt}/&ʣT+8'kj+PD} %+ׂQU0 l2GKiX.ֆn@Ry2TL&v rSf&[ҔeIAįg u@iuHse+ZIKl(#8 -,0(X6{3Gܥ"w<L. 9yA  kDtIX# @Un`//e<ϣ DB0G9#%vXyy)H'*@JYK"gX Dη)yUd` IgpyF0hēfsxQ'Tadn`G&K"f!%!a!-Q31(C=o pΊbF^q9CF@`= ^@0}]MA)eN w?1ͽչ+wݦdT7(GCk d rQQȽB3Ht4 0(i!^5c[Ee,af`5\bf_@F? lKȦ[|@(R||8ihh g:[Qnc$O5{9 %"^2{Mq]+Qg~q6H4듦o>tG)~أ 80X;r{%HH1N` ]}] (1 yk7sY@6 -um'U[mkZYeUωHtEWH[96fG䩇lNG -hmެ~l/>?P((O{P#u[gF@ֵok5>}]C3r&«<^E9S4aGKXlX.?~_UNT~ zޕ8>O%V߃:vsey>oFRW_hP'U~oaq E,]?WmIgUo}XMů7lDK!v`%upe?l+.BL GᲡ]"AFǷ`mBHA~*6oEԠ%k_tAhkp h; BV5|pq’;y;ͮ?s75[ْ<"Y!sWз%p0CTQjf 6 r:Q -/̋woSr=@'`fXI}=\t kGGĜfXɞ/+:Zg/v4& FY:MS$ EM:m$(M͂oo_uA*UXM>赠cktzPIt,GJMJcI 0JTE%NIX˝C4ftcdgCI$b|=4,4>o/ 9=iFm7Ԣ\CldtD<<tqDn] -ةBCčW 7^?iע0$ڤ.BD^DJ'rҦʾG;dI#De~{&B6H ED^U62- }[hOy<\.D i^աiBAŜ{YilCx5\&~%{%GߝHWI/N6w*TcTd5`l?e+ ZbG;;<"o%= v-ܜRdqUe߸)%R 'L[dғ8#Wg-̡eڈ= KȞAGz=뇱k *!K-_ &lfz,6A>E|̶0l Km|ZΡ_YT7}ܸ3QebġD\.Ջf$oN,uJRLQʨ(ɷ5vu[F;XG-wÈ{j4}c+ЖOxp ՛ )ĵLT9u9$kwNzR7BDz!~H -ܨK!4 Yh~H!}iqQW!bT\sD0}i~P > iCl~)br}Fmf0c5:P'a)q?BYUo:u|.X,~bY͏ۆdzA/P>"Sr0lpXVl,YKQtvVO0к$U84|)YgiǺ^,gssw#E|\ liI84Z]9)#ObA>He ɴDzq6 1qǪ3@I|TD|r}DI8_H_r^!k! m#Y ǔ -3*5y̷ŇYS;-k^=4ӳI٬Wt˞;j$Wk r}C|ivP^AuxT}yP3~1|5RQ}36 > @#ZV#0Ю[ ԣŚ_!PmaVڣEj6-ؗ4 -l" 9LJBWG{W>Rs" x  -scFiT`f{o>{ʜd#^Vj7cD_^.K岕x_&-$nrwly# \a*$`w{bfBewN\7xXȽL3u/Nk@r]5tTOɧVXso(0ck\Һ}}lfPrf*+{4lsI԰0StJ,{x)!A{‹SD -*RrpmۉDju%DiN' `i7dt`GIڣJ9^w(nE^U.K)BhW"o`NB<;uM8.sx(Щhve{4VP_P\(pllx{T~*^Xi=WS,>,%a쀛}bH/˸SU),x]^ǖ6]M;;&00AՂE4D]̼aT~6XQѪ?'uLI<FLJZr;PExzE/=VuYʕa.* ݊~$J%TE yyVd@X†`Ջuh\E!p?9=#OO}FM]X|Mb"GR? gd,=2|OfK}a EAs*_P郦l'YzAQSPMe~< -Qd1`Aӻ)s൅<ڠ}VxkVAjHP(_V [Vj~|#*.-A98v1tPOfnt{8;栾AQnVmQq*AҀ~jtUݔfVM?X;56tPo=W{jӦ *렮퐠;z _POҝdg}Pn=} kY_0 #,IUjj6~ԪMGTkMv-d d`g-G0,c oV{!+\E(sG}I#MeDV=NcIe.aS`wdž7yX+y^<<r{>ȩCՓF4PK <~NݐvK9bֹ)]stߧԜgo]vx\|D«7' zvsxm~4:Y͡jE5#uI8%Kԥڐ& 9h cù -#SJ,GYG|kjsz"ruH0if(옙ru)dK%1wqs`qfOZ9h˿H&U /D9:GK?XTyD֤/O̱R;r1Lk/?* -F0䩮,:_U.mH?AV$\NN攮"9#Xo>#*&+S0WQ,D>aiaH۟t67nw+W5i@axѯ b@vq=4awF+W-0?ٍS>c0)bvs`^?qe r&@̷ꒄ,zy82?ùʘ;',d^oҬiJ9-Ic_#z3{/פ;۱_›J@̉ T %D})K03\ƺcc?ߢ刐ܱ|1/_5+W޺.BK\+]N:,Vy5q>ר<=%e> TPS(%jw` HMvp#ʽz R) Zr_ -7g'/#v66yא(@&ZiVe%搜AppT&$e$"LoR} -a)/oD.C"N*`9r?a|}U$So#7` J q q7zGx<=7._A y<47ߴQnkd"̟Kb,,0x-8ZآnoVnV&jaJ㱂 /3T̂NƷRqGy^4˵ļn>K:H\ʶ6ʼn-'TŇư*xE̟# IRE6. xs10q'!M|H=%.z|%N)=b$qnKPF\3Nz%rE q2pYRЯ ܛr}/\H%w8tJ/<7\Z(A[!NH|, p_>3Z;fLD?YSRnp^ Gpxz& wZzyp4 -9m^֤ ,3ySk/BLԎ<ů{y|5܊] 7S+uqWkMl (wKS ˿ዙ{m  똉f|~w&^Tm~Щxm3I%yONw & Go1Vu%~aDm{p|Vx]X/|O)!{cklލ#s@UЍ4Rl-7O9ar?m)>e)YnF~rACC%ٚ0Ȭgp-U!o{kq -,H'Wo@mqH̓'PIϦ g†vbw" :nT(6QV؎#HhwQ_" W[l4[I(-kz[Uz`Hh=vI!KF,-%_hQ^uܹT鰹 X81en^-bi{`ghV侼=y62 <K -BqeĒO:pni*pv[sȢfܡ!CŌICHɛT퍰hD!w,urLO -ՙܖE)>+ &Jk6&qb@.˯?lzR%$ڝG/aF ͫGB,20XmmTމ4@#7~}4# YAeA[>x (Y%^i &|IM[zgi$P/1i9^:jjEDQ->w[ -a٥ >{Vx'|,U9{R0t&< 9Zl[S4SomO;ُeQغlx0w:+[~Q(l'eT~ -$VO6dEVu,,i5D iU;zV踱<#RCq3ZjCqyzb-ǤĖC b{Iz0mpgzpѝ5Zy# - {vB@6sǪͮ -v_ u9;ؽȫQ}t$wY|zZ~LcY+kxDˠp_^i4_hPrʉmj޺ku2S -w))d&2?Lp)7txNl^biJXzֳ4en=/3x@jP>(/gYZ 3@ܐSz - r-Z]bLbqui53kϖ&.>u`SJc=<*Đ!:`تLcXk;~E4֢ܳ3w[.%HU HX!!ְ٣0^ Ě'\wY̓tNX:2!eZI'ۃB>/|Pց!F# Is<#*K)(F^>gXfˈ4RjWoi"ֿPE.b}OF$ZRrtX<k VQ6MO_q# |מM2X#ܢk@f}`]]V^jj`0=(T=v~ ]XWȲ3gϟ T**:կq -PִŏF4]] PAo}_y߬sC¬&ǙV+!ֹiAr]uU{+ <,۠怠uÁ;K%^ɡaF55!..mE,7+9n^^j/؈z~n:)LpՂkJT|MK=:KS}7< -hiR.FM -T;8ۊS2uIU:>*eԂ}<+Gʌ/ #Ƥ*Gkk8r9PF#.:+Bx8M?2㤕JZ6ƚ-H}JƐڭ ue;i}HRh'GZ+iGW*&f༲=oW.*Q?~^4- [V_;kQ(_+b%@ȀttHt^ª +ͯ??Jy3_"Elr{= 'BjPcxh9s|X" -&`I*ݴq7}g ث'W721L~͈3 ^Ny H:5 1s1Y%A"\]zpMʪ>__L-Z|mr4lsOޢq>OLy I1ia#R7Ue&sEzq4$fk-&l@tyVVIIwe~k/d1-^őMu|1.֚g!2L~;G|_ !G'cf7~a2OwFj:u#࣡w,m13= -?GQ#ǶOlj;ks$j~!ANOݬTEd{ML\;+Tlej 2MYrʂLx 6Uhݲ =1 @q>E9Bq{_2@2_R -W`[J)R>@Djxzq, ;|i!̞fz/p YR?O_M. ?3P1s>̯.'SP> -g+ߏY>We9 -߹%NzOm>UKzBw>=9Bl2#G &*}~/S?'ߏrri̷-O>}*zr<~8pwۘU26!nS7\1EYdDΈ}w6RozL=vtI0-ƒ`I߸}_F91ߕYY>WO~_-Y|_̧;_HGiqyA@B.X zpv>;@>i*Xjj;eQ&(y:HѢLQüCoGٯt1liYQ68 mN[SG)U~OQ>o*?Y>g>(sdN6|R7~Q_5./4$9MNx59zBj53QK9]&iqGf]jic^ire<=FePJk=![G7ءw@7_{GoR|j)])5 ob1.7c\E9dMFIB6h?B>DR7mQݱFV^A"-ppbTqPܗcMGFU< L^> Ĩs:=+ ϡ_`3%a2})&χ9|ٶ>A$Y)4`$\恄 Fa+?D3-i6"i$m !bm=Y7*/BپŸS7$oHZ}TAPwz8]j<-eV! f9TFYDY4ţRGe2}@vks1$8ټܱn#홣_yD/uYZ.!5G4q*HdŔUjǂuKxm[%:eyo6|u=l1$q_nw kVK$-̴u$ ,ոjd|V)9g⑯u5ϒv-W*ɵaqvó2pՌi~T[65w`jC,ؚ - ϕϵI#{#Rz_dJ{"TZ*Ya{gswBz]YDV6wW4rVbZ5q\ -u;{ r! -*(bW ѵɾ7ZHr/sޮ bhkfU[/hS0aB'̽+g JAd\-Ĝ]3_ΪA[}f>gG׻FP -P$'7;rtm&cc -Gݫ Gqq|l?VUTH4QCCWgc5n>UUoZ=9[f)ȺhiiVi{;݄;=O@<;Vׂ},2!weadyѕ|^\$\%|,L5|D-^W8=.Ct} qfQ e>s#srݏw0ZG\M4ڹ(c%υ}|dzb'nZ%_lKYh;H:Kqv/-fm{bJVPC/re_2 Y ba^LnlAJyZb0T[kf|:ֹXձ('c1b\-8RFӲǾWHG\9bc4 ie5L+Rt5"L 3ph-FFƄ@{D܋JX# B?\!:mmWUo!8VPkžMR}u9W!]HMڴ*YONEcrsqq>XK\OjUbu8Ŧ(W=Zg̅r-ݦm[% 2s _)tsnǰ,v 8-'Ov;W!#?J-Ǟ!I'So -7*#@kMf,-p%7emeڤYrI6ɞu["oUd3W4b3b#4p4#>>"DrGD #gY ̈́f>VJG"HpEGAsC/k%c$+g$5o(O膀h:dz[Epq+.?zdQLJgAOy[mؽ˽BZ#.*Fk/ 0vY<= FΨAb uT˕XvT J:NaczC+~[JBk)P+2W%ZV 7lUx^$MƄ+Gu0|ކCx"`-Zdw79z`[=( g}j>vXmfm]Bra7Z|Z{Cvpݺs!k=Ensu<"*V\m*m$,n1"82\c[i6JG4k&>i0$70$94Tm7.">%—SlYK-“p~<; QpQ [z+r,2@NHD- ' D??LU-齽X`%i:j2;Ѽ? ٴz;o+\O= ۢ|ڥw%wc\檂G!34 c荤Ĩ%7&(j(N%Hğb'o6`wI&2 :R}lGpx09tzwQ7>;-zXpZK#"Sh -pg/~B +콷q8ۊaxS?!=rt"6lEBj׺'$&l.:W- MW풸xQ8n -=6X_r?]z*iW\-x]纤%5: - M~@Ă48R[grj@MOMՆŌtw^@hyw^ƫCW塏ȸi&/j*g6e6-[Rĥr9s' n=~5֊~cقVԐ|CzlqX =Cn%P_pulwt_1EˆлqIj~bJcBgwDžA숲GHeDQhL`kA!FX#<D-y`y0̡&8$44$ -K܍P;эCHGcƀZo0s!Ր]VSgCv.xrZCTi4qr(f/k%zwI?ķZ]#Pml}+EUq@F#vV5.@JJB8i ӑOBbӵػu\<%ͳ?rR%6ȆǐQoɧE7bK'NroKf>AFk۲[YR%.AMA㭁U`;NcWZg2f5xȌ{?뭡{ANw"N .d^$W]HÚ츹7a̠XDX -ZBnOcčR!;8G=cpG8DZc8e}69<[ A{ ]oC~{j]Yla -e qZ8=$E?RI8L=nJ/~QD<VTlעн^[CBZh# -=m"6.EUK׹*p6Nۦȵ`G:- =,p.|D]k :C$ݡW3\Q,t \HVi8HwVzkᕲjisn3o*ZOtay3jLA8k 7wQH`‰Aim%̕n-!OۃfMFb*iFl3i]íUʛfҽĝhSD@q ͣR|ë*i_w7VD5qʻMb猷{8=`LzUk_eCMywd̓yhy&:=߷BaWQ6AfMӗ8/S} 8|G? e`>@9GDa]=gFZIM8jt:4>,XS+*iP+ G8*JfyDVXEX FL={rVPBq(QVXN-\Vi$Og}yG7- ATc\T#ø'n` AV xU[9E} K -鋦~ ~O9͘(pb/ƂW*Xh^=6b?5f8-u"j9LEQIn$I M_ힸ>t^P0 E5 C߲%5s3yj]5xla4xn_(^_b t }qXJ(Fa-4cs~ Im>7@;Yu2C+Q(4wD` i ˦GQmp$2 a=z& -؎ _7QqSOzE{ʹi;8ax`$T!s맗@E `jXIYY_9q[ @Bw`Rʙ8'NY -`d00~nX$R_" s`K{"Rz[ҼUA'p?j>́_kAdžӁO>)@+Ǻ p۫q-^zZe2PGBmK=<z=kvʰ0QidGrr/X`WI N? LCαk"L p"WEW P8bdf%U̺Գ*`f9D$BCCj}M\:a*\K -;. -c -<YBJ+ H40WH}Gjo:Vcl]񂪬*n^;/:gsQv: ElUm -;s)XN0*@E\++Okz;1QU4Ì} +&C?D+m`@-YN=+$&Xx#<,)_*a QCIh%б )cH(bI4>=,O_+ I-5C<5ӽmMM/{ +q^w]"2l6p+.ű8JNVżFE#Fk@~-[5!k}0LٸtʚV& -@ -:Ȋ2a Xv3zWJ*SxJ=ޑ$cޯ˳m\'Z^D/,4OC)!{\*>$M&L}/RiF%Y>ɔRA ai -~N - J}.&: 1t$vgԄh֛j*ov{{lq:l#BE Q; VJ\Q?Xv_-.՟R-hHw6*e -Lxu՗Zj;'K Aj?8pX -dCU/+om! /G)'̎\?!7 bh߃"i~[ޫ^"6a˅۶)8ďXH,s.!1t\u?|{ZBŚGd8G$6ba8@*D 듄D``  ɼ-ckX+^H]gTaUTtO;+J : ZAFqRF ͗/0X$M|҅໡|ZGZS 0{8v"RfyI#]XвR]Ta#68B`wux!RwB{7쎈1h1Vn@S?Bc)CoHP}% V&3C B$gG?Lᇇϟ1*kxH&+gEyJ/WaYURbWLn;w!tW#,՗R A8M8V*=S~ UOSY/8rG P,:VdJHz,po=R*4|;;G Ϻc \j~6.HA$M}s|}B2Ziq -;{I?$ю\=+}\aUE}) R "q XB5idg4$ &5W[J5O -Tt.҉a$'!$"|2~ <垂т!| 47?bb+eVwJp5<+TZ"#"ŞU|i(&4v!>tTBXBf* ~) ୾)}' ==D.vQ%sP!qtb'(:$LF}PoÃO!D qk ՘|,!+|$ ppMfBj%9xgXU$ckg -t1 G{[ץ)>A/ts7aC4`a#wF/F/F~ظӾ -VLRZIa-ՠTÂi~MJKNJMMj^-Z/2.ն·]RHNewʌ'C m)[B Gjx?D'||{È=<_A1w\VVP@~7k/HE@ g%Ӹ"@5#d^馟2~.tnW=/i ?= nسm1Fc'|; :=ǐrt~R 7!J t~P|o͏2 hUU+5AyǺ:IJNvɥl;[ȼTH8"ɥ0wL6 -ֆ0QϺdgӇfU4B af=g -8)_R xWb ?ߊΟb|p(oͷ4ۇ܆ò%ݭIX%rA|h㑬cQk -!DW4@g},IAKE7J< Q6s };͇0c.5KOЂo6> / \)4S(Hɫu?fTKϓmed:6r^pt1Q%<XoACI&w0˩U;>ϟsr|rSu!., /\p>/Ԃ{6_oOqPlVNwGFGCo8CَU|yxg -/Յ994ac#>78ޛWp2O~Uǔa[vԣ1| pKoGPlJIFEhmbl <㩚^bjăS5۩xFx=٠a.q XaQzR%I(*ԃFA-56C @!7́?Cx \x7i>̗~"g>͗9,)s&%J#g:X#vG"|)ߝ8A/Ǭd i*j"VP}'X Lw9:( -x(RÊ|Hx)Bt~)B3 |C$uMx=nNyxĚRSyV)xɥ?z:zHXa&q1DTbᛩ\~S %zr?R%|4?|/a>NeoAЯ2PmT⩪Rڵbn[p ף7SN|'/D '6.ք#mgi;4nN1x0z9mm2TMC.́gs`LXڈ7XR1=@ nrJg"|ߙi~͇7'291]_>OA T* -YK4#W̎weRL3Ye*ގz;L{9l@@8X2-XXʧpR_oJ> /;_+|_H#z;|+g*l,e^[Jdީ,$4rO9Mд ٺ,B&TPe! | 37-(_|g/ _`QNòFʤEzqqsT*_YT ;Ycwz,Ax^ $^ _A7vRyc էlV9s} -OJZ-S _bͼH8el\qX)LC;jR^@1lyÇZ(b7i?.HNn 'P78։;NL8n[)NZ|2k7 ^-v/ 3^Myc ˼qNKEDX-xe ![`4@C1lolBQ۽,")~(rh{ -&>,yӑLq*M=̦1l;Y*g`X'`mT{yuB'bՏ{аt…_ȍ0i5M(Ż5R H/57ވ;`IWSF>q 3( ̅NG:"&J @ʸ,$ +nܺzKjXP8&Nʗ#FLv A&_ns]V/o*YL1-JSW¥'@w*<܈ g½+qaLq|ˏT P@.WyЉBp$UI{vs75ZBw¸=ŬqC |R-Aš.aP ApOp0V$R1mĻ<%t -4*laK E GxCdĠBWq-piKm,Oe,q)h\.dMOMW @| -ODx G w9ogU7M)LswyzWꭁ, ?, --&Wlf.T0qˁ,)k[߭TҾjlz΢O3v`/8lf`Ba|Q̸NO1 %}dWQ*o_˟YVEY-/q,!̗L B[pi hD[ICXQ4;vZ*s -b_q#鈼5VD5Њ܂2zczO:8P& @ǒ,5p{p-_ -4s^.xK tkf^qaĕ']9VpLi4*n_Jwv40~k7ʙV"b\hH=$m\^cӦ9R!#3}n ޚz[E¹Sl0}`9s5c}p -X-eaȦ-3Ȇ0 -Xsu$Yy2l\. d?׶KXq߷$z ӅNN6qʈ.+fUؼlC8hro\3ƣ'\4ٞYR D_E*p__#9HTNh*d&ΎdeR24"TJȴLOQ1JW|dF{CC+Ї8mmYI5yf0+<.' s azA=(40&P DGqp(q˽ [X0fe<؅,)X(t7YT²r"0Wճ Wh-˕lr'^@/pI+Ŀfj|Hi ؙmnGGɗH -6BSTIPR e&ma9\8Wuc|匷axdd6vЮyk"j̻Rr*#$@}xpiQ*3 #)u 9&ͻ(ÃPn1i#5ȉpSЌE/wQ_+luUgfZ.zf8Jژ^ ` -L4p7 ]R'VPtzA‡fСt"p|7M"}qN'2QqpF:;.g/Yy܃ϰSPGٞC ]7f mi/ _q+>>ϲT~фoT G+`֩ij zmE6F2kǷ@[,$Q# - :1_+тxKc5v]ʹx4 MqaKKv .- +bh5k6N䝝O֠*+ĉ_"'E Ni|;01G 5%(mlo18eM \.~KUvꃩ> ~ jSJV֎&} z~WΚRYę|DeHhXggsid Xޅ{qsН^$ï>^5"]ꯙY.!-wBYa*&&5֐ۊha3Š@ ѮP\? -$XC Eww4o #9wHC3$[Kڧ)?|y' Iy -B& sƼ_e1 VQyyVR?ϒURQ ćoE?|-T)08 -l~>-쁀Xh+( V A) k g IgtvnCe a hLpFhj@|fV2" -HoŤzK!+n+^Ni}>[fż5#"ǺAA'|-xfA|HTD>ɷWuBv_3lΦ=f ߱_)= ¾j3 n17/ ,wεiQӹ+*d3Jx/ Ard-k 6!\ p;6yԒpQdG|@5bL1 .9O>bO 1ƿNSжZZ A1L= -=%Y53#06?3Y>W}~ _Cҧ lbxitYPJLBZ R n0@lVb/GwCTkl5p%ӓq#IvQ ZPw0a#Wg y<mN$1oy;Sм9݅t +o_7 쒗v՟13`5$uNLJ)m -X敵2W^#H`"|8XU"TR,qN5ugU&+C$(j[X'\yY݈ ఑V [K⨱Bz + imήQ{,wэH^5NZm;H;w$aV$(o;WR <27Ɓq(¶:Š}C9g5yoF +@QD4*r*UuS0@FQܻ)h|NJ:m1(ߥb'B-_3kg)@g+K:zBzbm!z&;5=FoM,ӷ&1&Fh嶊>ƻ(!}jo?hh?4?kX|+K1#4n;BNDO_qTgܕWR bjE;]5dZbސwaKG:5o 4 q".KZPZv5xxIz 8s|7><Ů(6m .'UVRʹAjf 6n㔴.ۅOJ|/ g쟔ç!/eXX)p[ -[8 CY3pV_[Y1PʩauғSBz+qV{8u_CF3@"lCW=o".n&&aI>MMHK\h<u5Zg.G@Y`D a02"B2@da…"" -D’*t!aB5UT4eh,邅 0|q]B`)lPRRXPR0# _H]GG.LpDVl $ ,Q!a8dĶU(jIH" -ZB@>DTU84%" -_E]H\, YKJ`hBБׇb:*E& ɨQ 0y! ]++*0e 낑W D8 pq}ԠAO^DndÌ70eL SyU* -P!]&Skjռ{$6pvAyݾP5$y~"xø&1. D] -D )&x_x0̋h4/wi.0D/]( Bƻ2E>7#yGo@J7mI<¶YBFӁ2n vøE;G/_7q#@ԍ`8PD0~ip o荰1ۅL @}< ڞBu:SW*ia7ᄡNdgT4÷=p"XwKxMwNA9Kʻ1w; ܕ -@l8 8:3//Yc(=zXB&mMT9v`8G5g7VW+v^ G9j(9xtx=enpV*q^5O@ ɴ@Hx$x$FZIsp) 4.` %q+= -/fC{MWJm1"1i $8ԗb1 9u{L_ TމR,XD 9tNDZ.bqhx]t;vL [b^ g 4TR Bv!;п=O-fomgq#etʻA}‹D2O(ȆcN#q?*usa[ӗ,*h`"^SQ2>K LNtyy| 2ʸb]QF5ӱ%t&K|&!_Q7Rn@H:(k8 -ÜN>`9X$.dWqwP0*A"vJSKPSan@J>@_ܮh@!(t3{ÍLum}AW@9]Ȅa>&qh !u2ZW u!i`=W>Bl[ۮօБ0|C] -VSu9tz@C+ -A7ʹ<%Y3I!w";w{E}9P߁LT$6 srJם&[3GXqSx/S1U3e }wG{B C~?~fNE≸0v# (og a)E_2v!3l8M )f[li38ZA'vxb9QCf OE>aEbSyH≉`$K893EEX٩ ]&/nB UƐΠjYO9aۮ'vvC<\xPg  8!P'vPG7D8^'n\׈ćP( 6}9=q$pGH+s_\IΓ\+ ?*m"zY Gl'n1-L:N3fcQ1?;%Ha~.{8ߞS)ZF8yLqb@~Q).4+{  ;9 F+ۇV$z@FŶ@PG@a}/yjz;4|mA_dʈ[+uwe"r<9xp9w鬟ce}v;eM\,afj5mB3#=5G_S_-VJ=$u ,]fvLJul~U+ۯ%UOqYح)'O7N٧;(QG EvPT1mVL}I2 -c :w$Q GSO W ]ԋd@I<7ҎGA38f/́0B$@I& A;0@~xR.'}ӊn3s 6n/`vЅ]p:˾o~qg<*f~rMjQ9^\CjcR.\0C(ƻ}MaӇR IfikW,Ɖ.vz' aP*A$Q-`ԋb0`XHXZ?{bIB:1`+SU}.,@4Ȕ'ұ@*l\Vo_/~*RDp.{fxZP^4|[Q.z"r!RȧTBx4։ov$rXri \@|;^qoߴbXt8q΢XGnS=Ϥ'9)gc|K?6Cm*m=ƐNQlSڴH:īz })h^`wFOӗƻv + w,O~ɵ27׶ȡ4ny(`Y_ՊO7I?' -!Q2AY}4m -0.xiy>DG<\eWN@.Lgi[-tbbr`▹7L?ꏭz,7}aNT2 oQis 8MZ -&qnM7׶H9lᕹ/El `B( -s|}e_tV_3‡f ,sel+kNFI{(x=W> -c4 %ajZRrIZjm - .d4|[јdڑe ѽ1<L< '"P>eM!ۑ ̑f ѽqQnL,_ND'bgy?o9",(Rƫ/y!r-sgNnra'8C)uH\VI2ݥOĝYws ,WOB2 0G -;uZ3hZ6o #d2g2l;u4kbrr6Sθp3KF߯􇪓.gHmw.Xc:spg) ƉcDl0tb'alrīb/~X?y[>Ƕ4 >_"3|ˀ؅L&CC4YN)n^|cT1i ]BÆP{PC]ƫ[xv >ހZglS !WG:y(v=c {$yN4PcnBR<*CVWj mg@!.4JKxLmv~:]Vݬ\1qM\usbԊxcUԸ/^;ۅa 1ZJ'Jso_ SڴjD6Z0֩q'\v XNZ QcWJGSOOi뢿"p2</"A; yO (h[ʛWR!xkpzH 4+mbJڗ@oF)c#J=}!nl{Ŭ|j8ͬ`;UO񓪦MePmXqX'xL9d -'wt?5+w)I'XJȴQ7'炗lo>wc;1#N9H0}i9٘N,taϥޗ K}d1z#RBt(E8WLl%sgvmyP߸'NL`,@5<}zM-_i OW(g]Y.|hK`Z=vLt(Z+xUUhޔy/d2Yg cCaDdc -W AXx|2#H%g ۛ*4A*iلm<t` -ȎuMOFIf79pZ4LJF@n --s&^s#TDFK_;vS2ѕ9.J a䈀 .@t "`nPYN/Ӫ?_EKE-1Ҳi]  EЌ:i9́391=ɰ,=9>"l`N@U6 ҟ`3,}e[tV0F?J__W$50k붎uw̢իܑQA݇3!]kG€7*l:9"g`||UO$}_ow4]8dXroԢ``((\l4XEP'>{ srY08#=JE/e.3hiՅkmOoݞP?\\iU--_>{i&?)[:_95)s7J_6ܣJ7"~s`bl0,ܓ{ckO:ѓ7qoO";M* z|gWڢ*p>\d2<'w9Ε>1X$2 G03<q]u|@<Ϫ6m9sFX0?gӿeL,ZV' ת>u>رo4=\:$5oY!>HϪ>V߶QO>/~pTGƙFVζXt 6]vFn/,uxCIA~|,YeDQ;i2/I;g>hMEI[/B~z6'qU>3LUhi`jJZύʆAG |ڢmfzTTekƁ!N[jVjxs0gWDYXl(jͽLMZ7ŷ4֫Id9"Gydkིtbܓ0"Jؘk}UC;yg滋+;sFq t3KdMd_fftjU2L*;4dβN,vU1-UYzUt'uttI氺OC2Tdh379eV#̰l+0͜szoR,+l^YeDWYAL:B7Pn4Dz9~t9LU:W$]-,4 hUǡ:q^J]} uQYkG)7;U]U嘕s,l&F1nͫZ gd>,S&*Z[ߠˢ]5x|H9iQuZUh49nzsV34DBK)L8V&6*~kW3g~WqgsgE$>gZoIRn +߹ڰd١[?mݐ=S2!4+CVgc&"ʤRpH2`Qa dEC (`T +OM9sӎ#X$w-ap7"Kt ]TVDWN"+"f{G!.x6#)lònl>&Rn7il +4#֨~og-x9 qgӹa<%$d{DB :dS!Jꔈnrɰ&! +yvg:%0f f{[S4OUr+GE HT{!9\B!fV!?]Jn)CW4֓!弣瓏Ñ' RHyh@<(!KHYyXI&)cߐ ,R6~dW RfFD9 ua3F[:tXqv AY*8OUt|6^Ĺ+jr5W}vy9R6T@&tQn/C#v{q4DJUMlvOh!"h)l5Gk h`!O5xi/iI4u)*DQSƂK ? YHMgO_BH/ wϼ8c,7Ӎ. +5U>qh&RPo-y!&87#KԴHQ8g -y)\'p* r\JԟҗG u?CQ+$C[*6R,:q6,2xvpI/QO  qK=xfŘ/7FDeW2]orD}*e$Q`ur]wt#Q`{]CE-0ZA#f͎vUGolH#0pQ3)=5@bet=p q3KR:^"iIݤZQG%DMNqND>.QWj6,95+t!!Yu` +j(^OA4p#B2?:VHrGRclx,u$Ax|qTOW ,~9Xk9՚AKZvLדʯ 4kS/ pt["Ƣ.Ķtu"Comn׉\[6kQu4I^L&kzxPfI =^8Rkhl>{lWi NbWf{$I4&ub1B,YhgeюvLY;T9.m]F \Ҽ db-[pk75*;Y%4J4* +@Tׇɋ+|;ތ+͍)td E=e-׍'az# +8_*(N^& ?l2rP`\;V%%z\o7M;3 E4VtU1C( ρFſӢTW[W׮['W,} k$" /o-xƅ&Q4!*Evv" +Q^~/DE0F*p)|%ﯸ]'4:_j9'+ϯkZs̄.+nx侩 b政s.]šuBjN[P6ȥe\$s21< (^RL}テ?[36 4;NZ!N*?=+3U%]3G\w)?v߷ pq<ȒbVVj"=Df2(xhmVO[qO?p `",: =ی-4hz(lZ?QG2M_o5\ѬL|C(`LwHe& zL)ZvaLwhLE TOKEF3q 0(ݍ(Z0}-B?dU|?PO6q>x:7q'퉛Rt@3{*7q0&>=ٳ!-mB20&>eU&'jd f#Z"yJCK2גq7uI% TJ*Ƚ/xiQ8lpfģQa_)1E\^F~HlbRu Sz9ϝnC@B|7ި 'ҟ8V}~mѳq%}UѸ"7~;2qDqZޞKFJd%Y!3ɠK$Y룽PkVqwPۻ׎ +Ҡ}{%o&kiqT@rSY 8Aփf ?g +V C45yp/~q_%Os-e#)<캹8j105& be9#:(}=bXTrőWe4ٟHKȜ_ BZɀ/>o^ .B?}̅':?"c.Q%jذeWn3 3U,9<]aQu?_'.6"/8OWZE17"i݈gDG &#>tx#]tէTkxf~ 'u$@IX_*ϱkdARuHN}-pewݎ<02xQ@=* D )-@D#"01ygklWC7`_:28~ +?K |@MHE`$0 5D=BDZL*,fxMIdz8j^Q󸈃(+=MEvNHŭ<{M%I **H&gٓc:{sGB1.x5'oX7bfN5iۏ[S +k6}_TmC^_Z_6D5k" b)?<E$לFkc. 9-yoA?2ROa Qc[]y!')͂CFXs𽂀>oJ!(z ѩcu!b|ypAM na6^@9פX?no阇6yaM2{a" +KLBvE\qԄkva3_*acme9>B8$p`h/$گ9/ âԽa˽\ęy@,Aq+m,SPkZ݅HaqHϚ- +Vo ҮI~@jPnV?gՉlP/p8C/.7D7HUfތ'"=;^$Xđ _?oCܫZG-"Is ٨}`+7[;! 3S97m^jfL(fP&Կ#l{ Sv**_ZEڜç$^[Ii݇ -mK>6ckZ#7x`~0 +7.rԕ,#Z]鳏rx 86~a>FBuj4A:i 84Ey QĖO'c2"r 0[-ÞVe`1,6E(=T턾b:oN7ꈼb(TXUIǔaXXō8 aYEfʏi_~8+̞/ԏ_"9W$*JQŸ9t<7\{@)<>'EǹOCyF#!Iƞ + Wח]>*jBY :} $uO/t³W98[ 9Z;Bi!^~ӫ%v|[w x+]Cdd ~\ y9xuLKR0o.%gRruy3O0HCTm{{Yfk.20BI;d,:Fy-Kd +u?,J}bn89~6`. +P=<)/u0?03a^/z5i DT3Xkps9UH:PqXeK=xϝ ,r,Jj+P7[% "pHI'~v)u{%r~.7GmHQIvl>6~D%%U4{XzfaC_t3؝")hD{!MAvphAIvlr}Tܦ=PpK1v@OeUЙ[bڠf\*|0s7GfM@pӄWNq!z$2E΅ۚ)(Jnk=7)zMRŔ9 עsi^$Fz-f5W~ MShQтCA'ʾ, x )S:떘li'.X !Xe/H? VY_!ΐ޺3߰8:dpYW9cnvЍos7`-:?a7h@w }3Q̊?3@$/ +U_{#VIlC-B)SI`Ω. +={Y>-RPν%eŷȈ4ȺZO~,rXePW͔q36cY`%Hp + Ë$Fe7סpEaD3Lu4'֞ ' C`|S*.B&="al ?`i>Lj!%88]Ɲll*< Ƚb)I;9LVt8KFB.UU" dG'yp.MonpÅ}_2)>LU6 @pa*.*?!SȨlh#Q,6JI]or΂3u~ѯy`{ 9}'&f{DԽv-fM!Z|2sS9@h/i)CX$oW\"3Ѻƙ'UCDNFΡ"3āmt]}ot`Aԯ(Upg f7/ฯdw7-&RM:tsYw;9>EOK2.hF BA_JJhKgE҃<Ǹ@R_KAKMHË&$5Rm+o9eps{vJص6͟$: ʈ<\> Y3fW*/QaAt? [CY۱Eָ&ӀXrtKofT +{RKcd#w2D?j#!!4/bnWI3,Cf‘ lU,W/2ڢP7v]o(J`|aUcR +yBUЧiĹ G(+CX#=,9EA?_}mIY9W x_޶-lG08gڬ̣-~. 3,S4mHthv&i..g[e2q"A&nTXPO JuJZ/4W:[WnˠK1V+i? ܱ̮_phgԳ=o{+ڠ1Vȁm*(e"sp$9 Uc hjAngE*zwP +c+OmR8FK[a/>NXjVv搮]~` +ڄ0eG[& k@O Ԙ +O>?l8#!rt f+zl^N>jmGޞ:LQx=YD] 2K@=_~ԶC\ p&bsJFKtKms"<+E']V䰡uүi&oXO84 R:'-[_փ@ P`K Wp +VkayO3h3 h8;~M 1fJXla3Vw~'iRosTp'Jp8c]e> 9_,}Qm!7ap ]kɂsZdhBIv,H3[Nh/aIfM-v8Qv1j.qq}@3k% ]7dُC*b緟_؃k-s36ogN%K1$I3gso.Sv2Hb6X7oL44_׈VQ/\2?@gLutA+6[h-GP5a{7 @.w*fe1l(8s_x!Nl+D)Q@az!}e5ጤoZo_8,(.rKckZ4yEHPq:okH}T\5],n#ݪU"T XtS{d A`dlg0EY dȩf]HaS8k_@ニýP-*$+$S\N21ML$i?cvڽdbu(Ws-+S]§H,v䍔0E#K eLb ܲ &~ē&Ur_JL3!20OKnlJ^\sh]#Uj,[+iF7mx" E n.4ṼTصPG:Pj±sZ^LCF .Z(b7BBn)D-cǔ8{* rS͜WT-XdNdkb72S"#2%aO8eBg_Ȋb1d8yz=9~yʥGC  +o u;xt $n(-h)Ļe˩|QV?^; F`ҙ3~ͱIXy~"LV +.Ftac;.'u8P*{a<aeEs4,a<'ƭRyDG >: a WHYw`' }DO%3& 󒶇w0DVrмaRS)/|ꖑB/S +#4qjM-k~<)DHn0[b P9+23fCd+ke2b)z=!?2M fE{ 2`UG%p C!'x)vz3ic6~<1QGCp˞=R.t[,Ea2΀/ӟ>0Tٚ/CT F!hȮw'^{vIo#J1J6X,C9\E( +Q;0Th+x6~ȻjoKH:,87m>;%3:rQa+gIŃ?-yc|Wv#@㿂3Cb艹P3#DAX%|% tS&H֋9K,zHPr䶳 QP!>:pS)5M +HsZePҫ "-PuBvՉfNM.:X٠0dL Z2Hfqr:-] ɂ$>JxZRK-RdD㣁{[ sddF?ol .C)yang{ftp3Pħ/̽฿  +RyArV +֣ >Ung/p<& cvDm (Ƣ`I_{Nt +}HwN=X("Uj L0 Ԝt^LaB8wm)vC&VD~af/iM.yfxkVB擭S=N4l'a2W 0Wi]4v{d$ktgm(nh'svX)D5 PFAr\184q̷Qv%n%Z]3%*jou˯kn_Eؗ%=PZ2ց0~] ̜d՘+Xr l$)t>QI:F֣tO精u}@SB^Ԋ+k p- +WViMP/S I8niZDee~-]}fMH&#^t"k$5ѝPbeOpgJ T`QÕ!y+,a&ǰ}cJ>++5.x. +p2vn1O,fg|^?Ѭފd&<^{ D Qs^T[FN"S&Kr6%XcN3xMӓn?`+ERoCй띂V`"MS5% '6JHqa$KQ6ZZD;c6g 4]F㉖As`ǟ9@RPҙ"E^' ӯW%7Netgi'(|,5`ء̸岔:. pMO|/{ms{Uinwj|~"9B|sZlD ca[鐗?oI +tf'nCJI!)w҄Ƽ>v1X"y|k.A#A͍ V +z9! }hy[bUӠh}-]N!-yHx+1%]܎`ی2`N9HY݅]w6?沙?fKömOsD`r^`hpݸ P>-ܟ2W󈏛Sh8ٜ$jb޽mNJġ Ww=1VY.mU,$jBEG@Ӕ* >]n)$iwA-2O>*NfB\& lc7"?@͑7#[5W.1S@lS60/PߑOdJқ jqmr;جV bh򢧉ʹx #'|,O&"f sO_@vf;=fj~'MQy22.rat8ZJ!!$XW;As5f"i隺f%C->t[(.NB C2aIADp=r_ځ{D# +1H:3&hB)QP%LDFFmDb}*<=&"MmJ. jdgஓ؃᪒ͫF;rKUۆLgQ +Ş4u|qQ9Nwmk~*헊Woe[MP"hܹHmFmb1\NKhh=|C Tovّu.STSDZEɦe$$n;C{. Pcgn3 +E8bwWKGaÜҠbMMɁ%HhkUd =ۛW!)\YXrte(ڳ|j\* >anWhmY3"<޽IDc IW^veūšJI%[~sA5 j^k?T-juRVSf"vEZcBOf*Hh T]t*j +`QkALE`ݏH^DK"5HLu%3 `qOd\'PTG*1Ҙ`ʚ2aRXBE=֖0+_2x7bEQ6;wL1.EN;=w=͛,O _d} +0ȳ{|Q &{T)BzB 3;& īS@ 5L連͒?8cQhr''dHBw ̚Cp;d_p,JOd 8)m|=-@%|mMvЭ!_$xf-Lgn*1 ghv/]mRFa֤>@h4~!@Hi4]&kaˇZ0渍(l{OWP^De +/g%91Ni0EPlU;j:C|*!Mx+1XTBc| F6534YY+I@=LLOjE ,H]!X6Xde4src=U Dv: U`,XlV. I|Q9P xbhR,mQQ$b  t3օĬ_V\ /R hq[:o0=ˆqw0aSļC0yC5&do`CdTπ$cwPi4U:1z72m +)4SYF + ~Cihxg3ߟ١iv4*nLtxg 4\M(EXHXIޚ yyJ zcdF. Mw<_ϱ1Bv^},ЪqzD+a(\fӁ- +n'@ǐUpc0/- Z/0Ojq^!}zatD9r7=N4i}Q$ 7r&s$,OˑF0bNd9f^?#dFe8騅:Ei&Iu3$A^mD)vt8;nµK;Hwүxh*~Vcv=`o$6+}6 [FC*"6!Uy~\}A:F)KY/nj-#?Bžl8>#[tS!(ͩF@K﨟WrYad>eD倰C9rsF[wjVTuq;[Z<;ƕ`!5MK@dـGY+uR|%PuF$ V>čZ.cD6:M @>tJ5|1TH%f`Eyn.:WI)6+Y"ezxiCs_X'ˡ,y~&\S Qɰ{ݙE:^! +"HP#""7E,G,u"VūeݲP1R>S*o/=D;%?1kyİ& JؼK} -fKAa%3=_u")JHۈV#!<9ࠄ<}P24Egwb&w\{DSFUv!w}ZՆ#nAb>A™ +z@СV)k{,I<pPPTEW?34IM b4!~#GI!(X O=wBR{j !'!0C-AyLhmj ~7S-N OK7 D/ͅV9&>_NJ< +\0E>˧[fIt-Tֽ6 xx_"$HO lwD O S aO*{:E1tq/ EQwq=PB6EN(&1")r="wb,5?UFA:1FQ FkE/Z).GZD !*Rβ)Jy'*2QYȐDߣxFU`o6樎~W5k[k wr$4DDQ8uJɝϳ?ň#+ ey!Kr%} b2#؅N*ܕ:Wiq&|*yZ2#iy6r]P40.ғݣ_tm,4ׅf+#lAbJQ=JrzSEs!VYDŰ׈ OT==!S([K%y +/gαjaS@_()=!D%^hu6Gcdf'Θ,! %Ȭi(M!dD $"J?$iT.Ь3B2*G;AuG` [ *zvЧ<AV((A$m9F^V5r z@m .kqc?e@c`7q r*l8U55!Ջt: %OF1~5N=jZ`-T ݧaAuWIˆ1~?.GiZ5c4`U3f:>m /1wnhLІEO/Ѓ.(VQ܎&4Y(Zd!7JG&^FR7 rV; ťqE*flCU!(Ü(je̺uD\:}!918%V+QO@+xzͶۜ4ɔׯu#}1q{8"CNbBm3ɱAP I/zSYNl?TzM'Np`*}(֨՗aDT!V>*'t~ҀGU&$d2hmLw&׬/%a=UBz ("ZN hf^@bAL[ӎ%auvwP-Ha1pXW8q,bw׈HQ6W3lBXIWb Э`Nqr2^|c5L8k{9ҥAyAeT_Hw˭8ĩJT'u~)(/& VuTϔoUWB0U;(J[4;ǖ6!EG!"z*Y4QN\iM-+< +Ki<ɖ066M*@d%1V=)FS{eNTƵAŢ*VNtb@tM/r\C]s$bʤR(P1Pb-d@Z0C^WXz+vET*龇AܩZjchUhAȧ\") TnӻB|\48_sNAИ!<Ӧ6mpQ09OOKI/;SD7eѺPvUٹuO E]~&^\ż@ TWAk]!蘬ݑn 9ķvlgprl|xzA0]~C<=Jo{\o#jXL˦EQplZ, 6.H']Ҽ^Hcᵺbi ü3-wGXi*2quGGp) V=-eghxK1kB<"1cʣ2$eHDŽ3NҔ|*,[J;"0v Av;Z+3S/^2~7)G_d9ԇp3[U C i^N74\qL A0" ;@ᅣ._(ΥJSU u? +t>dņ&߲vjzaOj|¶pUO' Q'I67@¿`\PD{rNh#ŝG nӫY zK +;Hk1'ݔ#`SPh*:*@);FԵX*!Јsh^$2 +!.\q4pҴC^[P-DLU3LE\tZsD 1>ر,/f/-_?Jm+D+}a9=eMS'&Qۋ0LsQX< cŦ=WX|woP:,#5.nk 2O6脁[yC V}0u<;EOKۥ[F"y썿O<rA)'t ?pB]k -d1$H3 Bu5 HHј@Q 'rc/=aʇve;0o#|$u0MMi|Gwf5Za?~+\h 19P-_ X}-t=pg0`aYqelZ׫"N,\i1wDq%q{0 CX>,4oF.d~i'ƃCdck5HIqFiibј^a +d3ڦ9ZojdqzKƞ!1^LCVB#7ZRٷ1!v L`;=0x>p2P] '7. w +D|6j) + c+ +?8t 5V &rVpˌ2gHcj^X+ +՟3U320ִn!6y'8+KCo'xb[H cd%*M0qr29 %Ҟhd&6UvdǴ5PRJ_)5NS+cih`z;MwxrwDٿc9Toǐn%,Rʿlj=)sO^^&m uH3G)c4͇˓D61N =^W06>_E?P)ϧyv(s x˞{K&&I(7_E<O ?l}(b 8$om`a_BQzK^雯 n5}pcDe.(;Tm@n*~pxM]zKUE{`Fdܽh%u2 LHbtP#NN8lJN0xQ5 bЦcbޫ%P <@b`~5C!cAD̷NQ?Z[1/Uik߆~i,VǁGaUS!fC"֖/y *"ͷfd02'(m?etv Tª+];+UgV#LGᆁŧă'K2j~+ y`+WaR@qA'l{1|G\EiYT?f I!?xɤ>;iku`6a9-AXH\L!@ +͸[3;l #J<zO؍4w.,%nP GVEZ\/{7אOȣYgVOЙgX>kmwL!&cg88̭+HIo-1%iE.o+.)^!GhGU ;[ee7M9Y>BRH @Y$lcDcGPXUrFvܙ93Õ.[(,}i>ղh bhv<|]جT1OdG(doBp@BSmXff]dyծi7'7% &7X/μKAӞ!l ?ź/I)kR{:$(ڣc7t6d[7Ֆ}Z**#̐twW5u}JAkNH*)7->6\3/%2ëz8NȾ3g^c[Z4-;{addL[ŘF_pPQC/Q,nܺRE'TDHQ iby/fP Ga&*1ws%CyWJ7sxߧ4]GeUE)5L϶y(ԹN'r+g*L/yAzŹjo + \L+X+/}%9L+FvZT1ߧeWϫZ'i $)nɫos>#}{ +ő/\Ne}y80mQűBf]-9 +Og9`:;%o,ڦ,y,ҝ\>?ɽTo#/xJ"9_ M Z:mg7z,ʢO$ɟGa;KVW侬E~*w DK{Ps|P.<`"ؘf[T_jDNeP?uG=Sy|@|_gTjΐ_b_Rdp#)~DACϟ}c ?(ϒDۍkOOs\ݭ8N _}հQ"QSLSn..#[ _CZYӫy Ճ=jT7DY?:&gx]4R&P=R?"iC7u4&έV֓NԮ5D,-B>񉽓Gx}`y;ހB=RV&``sKZ1|WmP>iߚi)X3-Ȃ(^ HmOkB2@iD3Nh<œy9 TOHh)GY5vXUn"=l!ejҶu[lgHG&-k?1俖dz _瘔J Y.X*X<{5n;ydSϻ^:݉f,&iys"o`M{taΘgg[S79Dwh ~m[mK'.L6 +doY-\|6(' ɆeE]FF~^<' +W騥 ' )v|j&_G jqVfRf,C'-鍪 81 +і~h˜i@@O:2gv5tXw hl%4g03|fO0cB[1.c>(f7ǟcdAsD ۲Ĕ9fǜ2`t8˿(vwl M3)%W ) ֍^qvqJf=ݚyc_YO!3ߠs LSk3gA(\AٽW-n g"f<=:>.zPyݘ"I;9<$ +Bتa)(?XMs\d &&D)&}Îzx'&GmҺ_Ao<s')IfOn쓨@)rlȎ){(e.` +Kji{3B@-_YvcW9<Fcɒ:N(%Is \˂ +E $_!5Q5uRS _SEB4ӲLf^}٧ 5f$"*;cLZ?.$Tݻ:H{M{T5#G_AD5N G'J7*Ffm i<>1[[cn%M_,J ӆ`'brrVT[mU}$WSsW@XxP PM}qyrb9t)e&*$}.W͘~^a# $Hoؗ^n)O\+7nMNIKkhAP=Mx"/a≦נ5*,Ui8O|Er,q_WQSDpht7uԈuiй"GoĞ@G|B(6BD+fzlF+k! v (F4Gk|b= y. +%ύPlEd^(#,Ap}SAѬț*C|)`\g%~Ria dm gr'pF + ]^jlH:AOWTw.7Wu^Ke0$GO?Nt[Gk9d|[U% z :6.U6A9Uz>D.sSD$}?c :w,̫8JE Ea-jQ$?t:7"/YŠ:=룚kŅ,C@}7IArLI>ci6A,&z*zF_$s;F ?cy+O@41$첝3/ޖ5D˚EXA)Jn׹IoG*#-4̨QԴPed1)Rjy+Zɟ9 }+-_GGN&k֙#*^F\>>:)b!O{N:LE6 \?۲;1nIžS PJPBnX<>Eu:z^9}YLUUUfj>DMRBI}ߎ3QWvwoN["0SUUU)l w߸]EXgJqzWlmrU3{FXFFiF&G+,9/r4Z c\32oϕT lZC\ŏ[uXǘތsƯάf<絙ޘ_OmպZ+[+YWϺuUt|5iqvϿ['sN:-ΝgZ:km7]/}MkλgtMzm/[oKwSMoiyzqvΧ{]\5֩LgO4cm~։{Ϭoj}ΕSfsyR9Ҫ'܏zjqyuqZK97~fmΟ>7cqg{1͓Z8[7b_gowJ7eNo\ڧگ҉/oo7cK[O;-6tIm1T_O|)OwƏƘ_|UvL5Og޴f}OZ*gb֙S:\n-_jRҿ֭;K:7͗zm)}WZ6_]}Z_C׬NKkřN-q޷~_J_Wk޵]vgzkZj_[>ղߛ֧ޛTZү3jmYix/+Ɩү[ߓ{{M/vOtWl[:TM5'՚MwVMkyf,5zqڻV=RZśҟZ/9KYy{3LZk靛sƓyw[뽻f_uvxz5nJskN'7bJin76ӧ^{-[۝VWvZc[-:ө+|5U_J4ߍ~5}[w\jLo:xӹu_Y[;NyR=4z_Ӎm{~}+WJq{YN}wҊ?lzWZϯ⬫J?ookb-j{-ƕjIuu[y]Jj]%Viw}նNvW:9k1RKWNzם-\M?S|u{Ϸ֚oUUWoΏm~fj3-t{S-Jo{뭟2g8S?[;g\L'JsfMuV{1T_Z?Ɩ;_kL)^K5T]ίo{-ҜsfJw]++_{+_:V⫿f;+xoM_9j_:4:/;_LoS{7V_c֙b{ルީ;coǔ;[Zw]3Օݘ}VzRwV_)vۻg⧘ŶZVKsxXVKwVKmvZlx[-J{ͿRMo8oʩi-8Ӊ-?[3Yk5UW,NmܙZsޕֺ)y:vWZVM:Sb1֚+^i[<}'ug=sl:KlL1,GDl4rSP9EJ|.uQvb|+uSx$ecW?rYc!9cUgj=iޣՇ;E o +*i._ϙ& PiB5,1njۀ=q2)Fw̬F2QJPqƦݗE5_&i +mυ5_ #f!`cWAp[F|T!.$dk g+jvҪ:Um 8Q$RzܸЏ/Iѓ! +q%|5[NW oʚ: x25"ݠ5u-EjDiG4^|F̩Ӏ)2.s05\*QM'HX]ģ=x>xh\%!٠98jP`LJ EhIw$գWD%!}ȁT%dB .MU* ʼn#Lq0Y#%F %в'4n̠LĘ'm8N$a&|иzTh%eqF|(LzO[ +]#&ՇW*p SLI&=nXYu!![#*j(lD͊ۀI7aP\hO ;ף5/Gvyخ8MW(cڀ=q XboĐQGm׀)u+"ȗX ^#NXUh#kxLFe)3Ńc)@n[>!8/w|Q%QtWd,DM|'%Q4YOb/J!h=!|Vyj;Q](ԫzw̪|@n[F|Bq\>8-"acQ2߈$`#_wiJBrC)輺$ta7x԰:fi)0S>&Ƒ @#/<-3b[P*S""A=?(.#F -3P@ oa5zBȅ\l4%!1 'n#fgҌ1>8"ZD2\#H/PeIт - +-t-|$^|G0Vce‡6h|P1e‡ >.J tC5M4QGv(2ƇzҴa'6(ƅD)E*(_ 1 ݖC{B5,P]xbY'${ڪ|8dQiZCB|+AVShɘ n#цKd92Y<:HG.J7tЦƚ/'1ƪG/J ѓbYUS^ȳ#'SCb2T>* V#tyzHxdz:jTl +i>oXYO-*IJƠ1>k4߄MnkD0(SF5-!@F%nC;fVJGiM9ݕ%68B#Ql쁳qĢ3d13ZLa!bb$r]IAq\>QfKIC+̗ŇX ) -G'⫱,pؘ9sȥh16X1& ɦ 2FU.K>- ZhBK Jh W8 $>8\hOP%DhA .T#,6ddf”z2b=>,!h,bZ8 )|P‡5\7EoHHZThi! - +)بh-@%"Mh-ҳh.Eqƴ7f,69.E,-豃)G Ѣ.lrz\Yq-S$ѫ4xD`ÛU־Ju}-qU~-)K[nj{3ڽw?]m7}-?W6-B)izUN zn([޻3TVCI|kz7ͻYguK;vVk[Y+Uֿ-3˽v]QtRmKO'62YYκדּf[3Y+Z-{KwS꽯9ˬ{c{ex/wvǸRw[J2l}N]~kT履ﭯ;nt߹=5FZ_:k,XSX5]2_uՙ+SJ5[g,:˝gyWy~o9\֜kt~fkMikOWkF:cjI3Zk[#xcobJx⋳}ksڹo~+roV|s%y⋯ʌfyR)H/޿bzݒy7Yf-2ϻ/vR;ꬳl'ζs9gl/xg-Zol_Zks6z 5?Q~-TJS;ŗZ2O+m2OV9mN+uOrZ[[ܻiU׬+Kn\ď5SKkݷVL5uWS^5Ug˯T׷[%WZϪk9igSϧTrlr֓J}:ֶf3߷[*6[#m߾9*kVkz_/_Kn_ԓ\i%;O9-_19rZϹ'rK=8q_9kkd/JoYK[_kLgyŏu/sRc;?,WFz混޹[uޕ,׿_I3~[gIk8}j,c[j.گ|ĵV2Z)ƿuZ+U[W+RO[wNyrkbjJZsZrjk},^|bimssK=cVc}cM%b7lk[MZlfmo6gzѿVK['VQߩ}U/o&RN<5t~qI_c9[k5O1_vo1wˍ'͏f+_S5o>gZw[SiYڬʛ;5_|s8sQ~Z[+uλZ3Rgnu:OlԹ:Ϫo:yws:|3TN=osn%bI%o[j-sޙ\۪?ӼZ[;J+4)~j\%J2k_RK7rӽ5Xn{W+)xNZ%Y>uZ~l_+zNO,ﺯĻV{%Y:%ޟky?{f|i:c{Z,֖ʽ3{{7t]r_iR{1LϭI)ų})Y_IgYYuTn%VZ+_P˟69X0zMnY/>UOLދMm+ZK[sV-sXZZW[oնMovnys,}kT3S92c;mVfqbѽykJz XgLq}i/ngѭJzK-?{jZ,guo;ycj;Uo|z/uVӧ]2bPzq~OeiӫmrVʝwxS-bLjQ2Ϛ%Ծig*~|gV]<^toޖnysR㩵׹Lwޏsbzsj{g;ӯX[YMM ]8b'E{V[ݛVK%1dQ~>DIqxez~Q?@Fg p!]#u [$*q@E3)-q l|)_\yF9OpƦOVq2&yڮT)yܪOܯ]z'+0JGj4L  3tě0>TSPQYTQppĢƛ/(lwcI5]>z EiDyֈ-2(#)n }Du_}đ$;>Tی93?Pqae7gQ͘h$e;oTpe_ +ۺ /N7.'.! 0FJhiDDR4( GtG&%h2 ](gC@zNڔxS%6p`I/$I];lX XSg.+<EMCMx3!a$^'b G@,pCW3hŋL49_&`BqĪD4mӦD ] ,pbXғ6(u1ui13U>nW&eB6΂ +W9:jT|HטSfg|ܰzb +m:ٕOE6 +mM҈|Cu^NZUBx3^J=i"( S\ +2@+M;fW}]X'Ql96`PuXbOLRO*Qd |D1Xbփh'QFgN+1iB/Ta$ ^ ('l]SY*@s?65Ee 꾂:WYF! [#P41SJՒH$M6bPYIчMgq|A?H )K"*"a'6 Iu0*ΓoxL^L "؁;oUQS)H"ap@ɑ 8iP CЏgl*(I0hr#"BwԬ:R4_LXӘg~K $H5\x3^z N G, +`x/Tpi\@bY5bM! $)%S +F)Q;oU"PO{eNQ[ { +cv=mW=>XU4\F>D.O#` ^GCތ8z5>@wҬ)'J 8gRLSOf !k/'1*aAt]G'Iq<40V(ԫk +ez/O7`x UCv`XY1X<@:mR )hqƦzW`)8dTa ,r=:iw E5.(^䬟hE tf,JCv`\eq.p95^Mܦ˩l=q.(NkCAF:0/C5\-.'"HHt$6_Qbדfų%ތE4+qȗXDoʢD8+^xAM$B"I,!$TjHH7bQ' mky8eS r}F4pK)taJ:rY5q.RI6dx9kThsy>,4bx IB,H"H" +BC!#`*gb9ȅ+>qZ"PiwجD4qL x!$MgMT_n DH/Q>.Pb ІKh8å)A)w֨xDc^pՌ17dObN)}DA:1^Fg~MPmJLQmtōy:mRZhk8MQ*$J=2'Xbk*%oWiTD/Q2*V%eDKX3!>p?K}W5ف"&fTDl~Cȅ&|~Lۀ=$HQB?Ɵ-NH7!(7M'&{ܰT9mZ=lj7fPwҪM)A@ՉuJ|'u4qROo=kX1^apf|CG(h܄4.o@ǍhBu\ʼn#$٘#%Љ]#6qKa@?:,qu p/JI8cSMTQUPY@wҪzωpAu13VwҪNZUr_r^n9gR]GC DG8Ucգ'Ҁ5r̮,}ⲸNZe)V]qC*k< j"!_bYUX#Q87 , q&e܏M=qV2q lE n܄4>DKqDC}.jx ?(]p ,n'g=D0׉u1qR|Cv_}hHW"HN'h"c(7i6*c&wҪ/Zb6`bY9fT͊6(R66iu*߈!c(i# +(hc _ Ӷ5 +m ơ ^>)IY~z"\lJ!F \]Q. #DF@|@qΣf%MkOcϷ 8ȗoKH_zz1T8›~C]zG.J Z]VDGƢ%d7N<9"&1jDAM4E1<.&M+!xu)GRSX\-5]NƫIgBl1q.%.åCHل5q.CƇhfk 3XJ<njqA,<<)']񚯧ЦK*s̨8-4+qgJ񟹟6e|4\N! \$K|+>ᇨ" +[GDC8cS"UHBI72xAH"699%z> <a=6}9Ņp 5M;hW|E EJ|+^P,!VAyڮD{ެz[טCV%X1qGͪd=1SJ aP2664+$$T@QM, Akq664HX5D/V'alaD(2F0'4YTQ_`aS0Y~)j@qZNmqD멻H/P# +φǨ&]F^ +%2";mT\!k?qYM*9 +wD3).TׁxO9c~8z/R>TMTq +kĘ@ F ^p @4@Ҁ)&jÇCѓ)/R%IF -Zpi +`r-6d2\P0#qĠ|@@~& <_z8dQMM8cSbMS) 8:N Yp` &dDWAxA%XvQ`ApLAaT0Ry@>"0x, 0+aTx,P|AP лa\ H&ʑ .LaVxv<0CKz=uX<#\Dx/n Qp&]10'b&sBC7ElDq=q/b]TuҪPkAQLLaEMR uS +@]8 '=Rbz0U8z8eQ")m .GV%pubpK0!ETȺҺrE o@#<.P8Jz)` + $C]8 aKH@SBB)Ly1_['9J݀D7 sF@Ñ^#pWP~tHƒ|:jRw#,ФŠ&ib ,mn8 aJz$t @$qq jG:QŔ2K#bO<9=.^p*w'R091ȗO笪 1pB#ChdC ~|)1M(G.Q# "^a@@hB&I2XJ<.<(Vދԍ_$M7dB8+цIKkoΜxmDEM$#@u:U ,l㐐P]ƗTRiGGo(ARU@NF5i#F1qp!ĞHhqG I 0.b]`qQ@޾]8^L4!-@‹A*H (pSHY/0'AD ,p#cvvhLz"W1em59B` Ӗ5ބI>sY k"x[UpIĝ rP׭t$)J$)kAm80hxFz)i o;hW<ŔqN +AY\In48e&xPRODA B68>l笇-q7^Q/O3)'`J/Bgx.>npa5^pYAP1t-'#qG$WyQ+Q+UB܃MIZ:ԅ+I3†4ނ X [TI! ㊛ =5`ONMH oE n܅PFt`&@`\Ú$DKq Wf + @Ox2'f( Pf ;AZC"A !pH*ATx*qVDd1 y;dT8@8,)D/8"I'!L>$ /%eq; q!F-1fwy7aP݃( + ^ѓ4qD1>d$E x$DMF*p쉳e8b8̍'d|-ce#,''&qFK ThA! -3L@iqSi7jP<")a❀4~#6%lI6)Oi!g:4~S&l57eQ`PW5Uz WO p;!TIx ++fH#Nz+@X - tVw"nAPD˥^p2XJ\Gs6u2_9$Dܗ$N|('\{1@BQBB X$0$ 㱸&&:Hx' +8R#L񥀁']EQhn+F̩aA +",ARں +(jc`_"ā`BցDVF DI +AG-@,/)#&z4YNa̔RL)GO&GH[6]Nݧ-k%|--=d+ȠS,J|0Q;z-"xF~-3T#^]] d@A(C]"Xb Y7l4AD/qZWMGďj8-] F*GG' +c^FZRZX@ - +)07eOUƋ |JBk٘5tG-4d2 O淃ߐ=qUxe|'M+RPd94[KGjd6]Ra rHa |Tu )h&q? h:#p%Mx6 ; \BHφ Iu/J6 &)oTD"ʚFHU|/^(q[lJ7`Rd-9hSrYNRAY]F d~=OxQ3_чQDjPp>mZ= ,@OHA@X"b(u!`.tC['B"VbYev0V74.BXR$ -_ Ѕ)%*'q4ژbU\8R h +fz UBv]9mR]C%t=1PKbN/3 ,l]]H +TA{݄A  o qāS@rq.,E}^ր MF :.W K]zF@0uV: +*g'.'K-,K|4_J\f*بIZR:QGSXވ90_ BI~2>P%$!DbD$6Iѻ`9u I AEM$qGC yҬĢ|޴:w@'B"fqĤYUABr^#%h0lU\Qu57cQ"#55E5`Nדh%ڄ9$j,G8hP"А+ċD _ Yz^M`tȣf}ⰨubWz8bT-kiF7,!H%brnʞB&PO@e,L&g%i(˜Xs"HR6X!wX @::._͖S9)1Kbqmj8d ^@*Tx!h@  mm]ohKz0M09>pX]FK)o̞BRz ,$pI7D# +%S:;~5sĮ: ^6Cl͘īΨd 40 bX69h2JQXX` Cpc5'ƾ9nQm=Q1'k:V7]D+|${f|OwNP߷~c} +o#4{Ŷ_I񯒢{pO}f - kn +ÿ+76în1{mlx,=XU Ч!P`2/n(WгbtLFGӫycwQr!ﭠ? uSwFnu~Kϩ)L-[i-ߥs.lpռjŷw60c >Ջ/iqyܠ{-8zx1E}8b4ܴQcCP{J BnI@Xơ9stejSq_  1M)^{FZ.{@=f|m`l׺ &SfoS]g-?myI5Ϳ~78A ȝw!z.Zǽ桡~zh7տ>mx]/q|{##ܴ^[f 3;n%0ۮWGݯ?f8pO?%{FE ?g)/4"6c?'aؠ[ Y!7PX"6WCz +4z߫G1]3}>\go/4k^,?x|4{rH _ܗ^7n)4^wcXОޡnXw n]%+w)}ᬽIQEIVR)ffXmk2Зy:rYnLW(R݇\,߂3;YAȎs?ܰR5N#|sTQIG[Q4d?+rA\j_47F*Nϖ-DYqnݕs?k !|9Tҹ_WRF?&uM0DצH. 8O3I?5W&&m<ؔuAgr o.pNఈwF ,J wd`W4 ,k)󧊝~;p*}tɵ{A설*UjuBP{& +'w:H o{=1S{߿aft{&Sĸ}Qq:$m|aTڶbnlRڒ z|0.ə0ݨBԤpJѤf?A[Ɯ'qc[X#U@*_@ƔV[1Üzl6˯AD\G.0B HJ. I5=5"I_Q( O$0*q hriQY MeXb,`rbCI%WX+or *hUhheRz<̣q2 +DcAv fI Q4EC)KY`m䥧 7BvKۦ욜;@Tӝ}ѱn`WH͝P3ꇎyZP3 <=ccNn +g uH_4QFBG' :@~qKB;SLj69$oIMEA@YzR0WwZ +Ɩ旇5=L=itZ8fUNua@ffdC߂a &,xBHCA/tSh({Bɝ Vw9TYU50];Ym,({_0V+f|?(#M5-To`6kU=z'{gB+gދ0ww~2 u=F!ϐ'}h#-hL̇^@/|h)iV Cb#X|S)(` v b:[T5uı&څ u(ՠHq +D)8|çEǖ[أҕBy>7J4rn[/Ļb ̫P@|Ʃ~CSɫ^w625c:;_d8!}qœ+7WyVm8NGB +0+]~`p*[% d\0>6g 먜'xwOeRT.4ET9+8oaw#7ѭ5]ھ r̛8C 2u +Qu {|/"ͮ>nGT*amN$.PLD fâRǮ b7^6.:S\T&::ywʼLO)b:jviXԬśS.6\dbE~1m +&qul#hTD"ȿ3>8[_2!z5Iզ2sMvKVi |o.@ |Pl7FKH$y wkY -\"%hdN F0X$Dֿcg0; +"~g«ؑ[~GFG9` hq)4a"a #pEdbNTq"K'鍎s`)vQ'HcWHp1]_L玺:,hl h(l$QG3"v1Ғ}#7r +}E)л̥0xIq3"cdI7 +R_]ahOcBῩ{tb01[WA9a +f(+*%c6/@ic3k#5 RSe1m}-K voPCڦUUn匴øMasQw(* `ȹ{tt7^'b Q3;c[@u${xꟼ+0y$(qQd+" MX.2WB[NK!C\) aRh軤bLG9qDM6r-,`L +ڀr-;Bo JS6ٿHhr)l77ݱsKG- sK[뿆=E$[~݉I,Mn0_PYδ{hSX SW'@<I>\ Q6ТG_& L ~5sP)MEMJ^e]^qHL+9|,'G gRdC\HR =T@t_𤉚x7C1϶U,u4L܃im\Dl2xG9b썘1"z6j5ӝ1)ٷ"EhVbZ[jxnDA;[~qu FKF(|hv XhEX"z.;pNDhq g&Aa]6&ݾe@ֿ"`}Q[@A"\C.i˨KVT.FRD32KADnVd .= (u'',Y0{/h"/;^1J\߶#)$oЈ䲗N60##J{,hyܣи[Erafa#ȭM4/<yץD$ipdԉPH*.B-𝗊r ?j`?*)actB-XĻhsXY{:\wk8N)Zh Qet7:XXWBS:̳~c$FNb7<ˠ +syTBRk}IPynB!r̨i +6Nz>xl*0 +\ <2Tp6Z&st\%\CӮfo3*hۚOO:Pm H9w=-~QV7⧺Pxnos]kaIvqӽ(Dh@-J%֔fι W$k3 eڠ)6ӊݫeEqmŕbryO#D;=⃶d@{ 7>3)Ő@e:ڜ$fJpՂ3$2H?k:*r[C8 b㶧F7' +QyGiGBD'( )9 ٍJwSo\*Ҳ ]N=[P_R.]$s"N~HP}o/s4Bh}7Ufi X^ #LMԸ6*C'UD sEY@đO~UápHj%".?}Mx #4?7u䡫RO:]+`dkw@?r%gI^~W3.]>įiQ} z2zqs]547 +1]Jp 8Ӣ@tnLJ" YPT$L'$E ^K-3 y#*Aӟ=đi5Irdj)wR_TߪR:j6g%0u&jF8~k Ӟ&&ky@Q!3_0tAM2~R0aVt݈H=Ύ3 zG!Bٮh4ĨAtM/a.dtQldeg̑5|孉0&UˉB2.hT pzaQL8@Dq@/e1"εI +倸*-+V&]2G󬋚断3.BbHw]d5 j!x̽>stream +i ։gMj4q5r2`EglZ/EVZjgqX%,Җ/ٽ+?ƁruBgP,h Lo"1V"̳#JNLBu3{ r/[ɣw7=j˷2E$+A2 |x,W:Q%eϘ՜JEf>9BmEnA\u+jJ1?Ǟ3H]aprŗ"Cۭf$B p81 v` ~bΆ>߉3:>\2g?J;0A0úͯĥ#9N܃4h,Tҋ/k-jLnRسOUYSUAs"]ɠp& pUi!y>C$`u$c9Z R&jmkpN4 wMs{UV h12*d\+B̺"X !0BȬhsR%*gubhHUt*i{8L:^Egqug6PZn)& ۶ж%HPUDg tAPd$ θi £MZ~Y9*^pL " ZEp +Ȏ5ʓڔ;J G +"0܇=%g3pJ.Pr4G,S=lq~)Ylz̾_q45{ba +Ok\s+ >Ghyvv!`!,+sUnRTwXu֯┏2Gqjx_5 /Yzd>6#bzjxuSq +퉑zߥ?m$hڈUP9k'HD7 E5ZrGR!C̿ +я2f*B*"<}$!.(0='_˃iGNKZ6FUsc-'tI0a(NoZE$Dl|4,d|E6{"]m!5]nQ%^- Em2~ D-oJz;Go7[T&@<k~)FsjY)$]`ā exsi"omnSkdJ*h<0wW KԈb($ 6܄vdQ~~wC l&6 ^ٓAN +EhBUh0?m_[J"ӗ#%hQ HHSD+^81;rʽVZ*0;a`*:= C(x6 l_"T4: +Zc4~u䉋sD.Pl=,{$$'RS)fU)Fv$ +YJ|c@nNݩ6dffYK.d<'AAڰhAw;.;٥8GAM=rX÷)})Ս?7vxgS3ucBK{cMSU) 2:l2#l"C=_fxC^WV<E. +;Xϑ\!2Y6 V(߱X9Fx4 jL$,>B &#(ӛ9Wn>707)S aGS[x_X*P,5V0ou!SD$]@k"Mt/J L>߸YR+/(W ݡAe +*xq2ͲҰ[#* + ?hY.km sȻf4W0gviuOԝ-l7|BDk +9Psb(Tc'eckSwG\Ix`|S$Lt7=s((t3O$RO NTZc\GQ;l8:iGyVI`aɄxSIB d8 3ZѲfJߌWϔ)?%l3Rә0G. w΁(Kop,#璧E󄄾IpH~: I]bN8{{Wm)ɻI!& J΂sGf3 yhyHFs\O4(b+5?Гtq|/_PɚY[^6?0l*( (Ny>b4&cV4=Š3pk=H3IJ2T,Facxv1 G|?g2*(7Ly;Vm!Tٙͧ t7ͼ.oP8Qݺ[y9fS;KRf#.\>'Ll3 H22xՠ<+yGyt S1~{r)0( (}A}%FNTOLm]qNcz-O⢖[p^GBPҺVj(ҭ>2NEj2 -`vZT i A +ԕ= ¿.{y"}4B#SJ fdZ IwO ,u8G7? 6ϫXqUÃl[_"vZg ](""IV3\j)tQA-]F &>B=\ +btKIx"*Zӎ9;͸)@V(|樭MA/yv2UWZm+U`boT2e$ijׁrl;&p96-e@c"jEj76ƁշCJWʉ[~{nZu[*0}#J-(%p/3=YSK=EԴ:ݜh%@T4̟۪dlL9b+^$*!O'MJ~hK2 =ꦒBr#XNPtT"BFXEKw65lC,`ԡiH1# - + h ӎh' uz)QL.$ze&^*HE&&sKpBP~:)HYh#5DsԞ C#!|MXTf#~^f8'w&D::GE=iAeQ sXV %u6ĆM5x4"nĔFqԆuFgtp-$/PAAntSY>¯ ZL>^Ў(9KHwCq"aTRMU,ޥАHj4\\ͪ:4FЩ'|[u +?{$or@~U5p829P y7eIߜ7ͿBb1Ө uOD7"HIz1*ǎؤHq$la0xt:2yA3ӈ-Q\Ӛ|`xCi.H] -\i٩4mymɬo{#`aʯڸnE%q)B5J@hc,VG:3O L><;R4nm'Y{Br0Ađ>%v3gR73-Ҽnh׬](%"=@ w@?./{ƈ)d[wHn/@~݀/S \`yFGrM~]_lw-e.|]o lru$ +z(?B g`'_4e@Tj AI;Y~t I;Ɇ:լC;h'jacxlvuR5)0bRU=yt|siQ7l:?5@@bT @z B_ +"*sBɘx$  ITv2'}j39)G".L4^Xĵ.EȈ hD\(pH1ϏNDXQ:q _wEB "%M$dj;',BI]J& +T)+դR8014xdhI~D4Ιx=]Kř$=$'b+A҉dB\ۉe<ȘD >,?Q]Jg?0%xljߒYmvYHR(Xb0N]K9QZR3Ŝ%",AĒ,*QLB ] bV9+Z+~J>uŕ*)W R~E,"6%a!h)X,*'q+)VP0,З҂e?P7 (Q\Zߓ,NiN&@/'E-q0k;MBJ& -qI|Kr'\\Z;.4$B$]<֦.$\e*$$5]n^@r$_/4}_,}?ExNDlDqqT;B t<I C ?$.^QaDEh`?R>RU |.F=RRƐG#<| +r@v7]G tRr0 tR2qd8G:2>px#o#Ԕfh$mi9㡲;P cxF=c]g,B#'B#YG4\~24V/,֫i4 #J,025~O +/a5s(!5"Kcika?jvEb`#/+T)l dA'd'2o>R`.H/ 5I[)yb+A#j~ OHȍ?h J1)/ȮWȷ Ė(@lqS?Zv>"z@ `;B &H` +8/ i :eIڃLxBdZ²3 W(Jǜ\ؽR8a.pB])J)!ޏ2)h'!%U"r S?DϠS<AۤݡG~ec$AKpXcmm,>d G;5ZB{028> \7xG0Vg2L\. +G"8T?lG )W!镢Rlӣ/ޭ kHvOt8OA+[i+fJp\TG+.׬ɪR*9bSy*:gWաS_bU%V +Y + &f/R$UU'Wy/+IEX9:*fe%@QqYI*YbZ9)Jn+3<SɕBKW`zR,SlF"is)X+Q l_)D ʣE⁑)2DJٌ+bQ c(눌$EZX,QוQY^k%, +j8 +()-Cb\<JS>;-Z Ғyk`vYh[K& +؍)%ЄH`LBaD'e0I69&%`oA \ a$k $Qp#"&v11K fob(&YA*Igb +GAƘSŝ1wulL"Q~c燆혽ç}#?߇~aJ9BF"# |5Ʉ^22Nf%{p( c$!2D#ˬ2ᩇ2ƒC_Ffh<(23C!%I3jWm7nĹ-B:V;μ(z2 g%9XDn2o )8X#8( scG8AIo1ƫ5·1z-|(NB@eqbk<{X^08/}~aH/6|ͅn/ Oey Y]ɯ bt:s΅9_ߣP s₮/s^6Ag}[Љ-l0:iy-تtU L0-x:±\gK;y$0DhU`tZ~!{hne&(=Gc`1Ŀ%3hvGA2#Uѣ |n糳&pOdQXXI4a 0*. ! $<ހ#HX?wQo"|N T D.#`.4:-k%E.T><;!#@^dXv_#8i$Jk:`z(q=FHYn@eUX#QpHLی0&LW}@P]Gd]es.FJ{Vj+ɋ T"f܃A^/IyIz=a/BL ,8Z͜R^]E@/u#u*`Ëp +.M"=AB].rE8O 9:4 v5^D,` +©8Ly*BIjoR +ɤ4AbNEU`S&uJ 0ũ xK#gEMY#;gA*BT%۟(c]"-VJ\8" ^o*DL[ d-D (a +vH*C(oABd +wPdLU8zC,Ά/zj)G67+/Pte:^AXϙ nA{yAnx~HJ 1a4CGVFw!E*K`xEM*%p̵ƙ޾6|ښE oBmx|=Jz}@{Ud݈/]Ks0w'q|k8V`P>@ y"b ,Tb EHKҜ"ZM=,p=<U0]\;FRu̿ Ã@)~-WEgAG%zB.w 44C"˹Fm8Wsl?H:H!V pzsULv9 qKP%MKINAm@X?7 + +i:29(,zc7Q1enCSTYsyrUDM({rk{7oLF<(m׹6(j^3 K "\4*A\e>1Zh({s?LH  +#4huP`-iYX0Xh@lz@uW^ kgl&/M7`eA\nIwOI#k +WJsqb wk\S |}@/W1s`=-Ir 倊͕Sa`* ~'[5 b|h0cy1  XD=P|A@D-zz9"xWwlS6 D2 $R L"ǢgXB-Zϟ].-~ҍqCԧ%cW {+JoX< +x_LgbWph=N]VV: V&+pů%cbnp2*h^Tu |e@L즠#0.Me)K_3n V& +4QFX% +N#Y4P6=~m.8ugKEyx'PC]:es3Ã`xQ7A 8:p* 0~ cÙB'V;p:u^ y׺^^`J os C ̫Ě_y]hpg"@1;N ֎^R6%-zAG @`ߎ. o8_k-c6::oM}nSV|&eE$*yj\Q+94I( +i c숀MEA[:3ʤK[@7WJ* Anyb&KZ@^1`ՖK%x8rbtV6eHAaC KoH/gӣ#c17hM5vcAq]s$@ހcrN=ۂgea +EB1x Pt%D ?JpawS8~6:G Lp@HbmI={(>4~hT>^n`Ǜ@{[%'Al)ֶPafAm9l$柸.}|y>ёp@ :,߉^:IB@uI#$۫0|𨥩OQ ˂xzf㧆i4*i|w)F6B`9t~olFn\Q762.7t1GIYy0몍sj ǽ M{O@IўTowjL؟^n)}:WnaԂ(S5!ٗ$U{ sh*4bO;HtސvEe_*zR9GLI(Y+<{0/ hR$ևshU10QCU`=g1>錞2}ԥz8> q(K:;[So67ӪDR?SuX3qFm]VѶ9=}k`]sO /dlf+n]B&!*]a=ZEFHcB}?E5(םhHf|_Z.CЧqF b~0A60Jꉝ>_ly]_|8_\4FPa[X9,Ac#.^G= +טSϟڔ6lQ}ېL//'xUh7yiV]CdjCQZ Q4ˊb;4kEo%FZR|Òf~8?>w"Q7,V^Xw4Qyޗ))u67w7_cQɫLʬ v'0AcA8Ls>7 m DtTH]ɜwJœXs&WJ p#&e+ +q65ܿ2xVTDnǘ+1]3/@ö[;hJ1eC3 VbCTAjVP.<ħl{z]GϠw +eȎ×Q-EWY8?ih@cj=KeU>|+/B=_XEA]E7F`Qn%| +_ l*52:1B1.-vGk=2RЂW.;N>︗D + H +!,pNHMVWrȖtP &OJH=1ɘꭽE<\}((BPT;Ҵ4ʘ/dKv%2A;/*2γ9Ԋ"'fצWIc7TˆBE蓼+frR)0ȯ=Ɣs>;²̟*O}mڴs{=1TtK@l̍t=F峡JMҌ6nS[w`Jy0Y[?>: kB'iLz%5XW, p`}uUIV|t+QA*PeBz'<%*C*8(GLGz;sZhrqk0hFy͕yH%#I`辞 ௻P@tFJ\E~5^6ΪM+0&C-cN0V˨w[r~T= Z+DM<9 wI4yOVι.Zk>& Й̫|-XrmՓD>̵Wc|Avga>ղn9csQ~ V +?m09`> ew`.!8a| +$ ++c.<0pRBn͚Ę45}̱7 L +)B%I>|Ŭt͐I:Pz9MdWJB +3e?61;`jZt˟ՃF}몮p3^Z}Bt*R#-F,)-)D.qEG,kBQKNIk+;yՌiG%29<К+~Y-+yEfR$9R--/ ?0}#אG UJm/Kyb$rAWL9p`1ؐ{<6kLATPJ8C=(އåP?ȵKD|5(㑹ѿr{D!a +:R:cgQl!cFxv=pYrh2gk(tPuL8*SPn2>2ў)<u#D0ya«P+גN,U(qq2ژ'[j?S׍x򯊄4S$I(>O{a\Dǝ4% +#| 8(pĉ#hz~øOBiqDG;1i'eMM_2pon*Rù +pSs4;炕V.DpixU Tx !178<[r)p|`xp7$G?◊{)q7pU/넣%DJ8@ $ רp*m& +kd~b!*1e :HYxd5{G_v6ŃIBEN0q7MDwL; nIׯ8V;PI]nAZhOWA#_7.EOn=g0ST;ծ.4}e- +Ŷl1|jk5޸IH/bGfS/7ٞe$Yވʮ9@a?)TO P@}B!=jcs=L( %(LʴFܙBߍO8b^ΛWj̻EnS%bvFLUZOE'a_?ׁ_w֢ӧ;ƝIxM5N1 =z=蓺#6}*yYN,خ#Dn`".+`n8߳n +d}*5f4`ytk.z_sѼIEEakA'^:5!LU:a*\hQs:V0O/׃KQ:{0mz3)U`[20PU[+C! JB9Xk5ϘCCNu*4Hhvъ1'y֥GϬZ6>ZC֭r 9LCh넺*cb2uc9Xfqjm5ֳ' +!1zU7-;zTb8dpXBdGɂx0kXD/$&񏨸/nH >,zLcq^k;#'hV"֒ ^(\uXbBuBPI<ɔkK] J`Qh1Xl:5iƍ1],F` Ir?9΂u uZK +zKZ@ţtb 6ZeX?-*ZjH +Ww=-n?Ufz0|@ES]ƆjˏYM@cRiV ׭M ӡc.VmFW*tXN.~+HS -s!j[x#CVjkT# \kEPqPMSɊp_*b21wQI֗Rx\"ylJM_P֍`Ew{ĮeZ4r?r 1J5kF^FbhiNs<Uv Gqmc m@:6-cdHIGlaΔ-2S?gc(5w3l802>*mx<Ԫ9JEƥ)`1XSl0};KfL녵P:#w4Œ^W(MF! V-"7GWփih KZ>E.7+9n^^j?Ljz~n:mƻj F5%EO*{ E +Sݩ7S4Oe)LVS&h-Q)m:KS*j^5XUieFU ka DYCVԡj +E[K8N{5 VA X ++8Ek1|(z[#dBYmRh|{_Zzul*ocdEJVem~$)4?#W Hz͕`+3B&Fq^=+3P~^N*/ qVݨ;3j)/+d%ˀt;$S/x aFW^PMQyX"6rAω=^ e;BpPc<9V]?y , Gm|~m@k,M8zY^?9Lnqa +,ٛ!/;*'N|f.4f:&y]~C fya!"NdG]/)wka,l([ 645y.KkZ\`5 x ۟${K=6r!^UuqඹSdsv!$@tOˍt! Cӝخ?zԭDG@f>5"DJL.ɞ2Orخ1 BŶtsWQrջҧ.xk+cOĆuJdkl; +`2A3󞍔9z"{߀h +)Ak*6Qئc^4|+2T\ ƛ~\}U+`wgN%TT=~1{K(ϑkTߑ;= +;piEW9 x+} (HlNS l/9jLIcg35 ^J(&,ucxƄe7ĎeN7F k:7qy#䣡w,m03= +?GQU#ǶtOǙ9os$Z0AMOx сݬTudOg{M L\ĝX*ToLej 2Mr<_ieAx R6Uny]g1n? >Ŋ9Bq{_2@2p3`@+0-RJ) "Y<= ="̝ey/l YR;Ṋ _Ćf7P9q>̧.'SP> +g+ߏY>Wc8? +_90~MzNl`G>F<eUf2k#ᣠ*""k^YG9OG<vx"42r:ޘD6Cmqߜ( ??48Pq=ᲾUNGQu?vPi0x2x,x7pvp:8J5J;pt;aCqiv#UMr~ O)_G993?W'w^~T <9AjĻeDd X{7X+܇z.mg"Gb "[CVESu7z=>{x;J|:>%pEX]v돀m\@|" +|ߕo',|?|G[o/_G,|?u~PN'Pxij}Ttաw-OI]pw\5NԌwʢLF-y6HѢLQìCoTlhXQ68 mNzQ_B{/X`|)_Y~_~O*??(|S~W,7eO(rcM5{Q6}Pߴ$4=LN49z Db-+$Q8]&hamQ&]j)#^i2;f=TNƺ;T}fSef?SHC?HA + {HjuB=SoԃDR[ʢeT4P~~Ϳ0?|6?΂_'BFi]DШR6*d6fL؅P@h6J^"l-,b-]^oݺ,0GdYD94idbea+OQoѮ9vv|ZhKLuf;@T!.}OijS@xO +|i~<AKC}i;ЩuD6|OyOmR b)Y) +5 g"+W;C1N#UsQG, *}fPGTͳ)椠$,yTW7KH~=4\{,ܡX+tqv,e48xCqQ۩u0Ϧ1N*Aw 2\KH D?j5-(hbO1uUI= 6 y zUJnB*NGw1W[n]CΫ"L+UojEFzXZ<`KP]%[J[4K[5[3@!q=`mD~ߪhgn"HDG?sE-k#c")g"3o&Qxh:DzZEpp+./zdQ+1fAOy[m؝˽BZ#.j*F. 0Y FΨAb |u4˕8vTJ:Facܶz# nkJRk+H-.V&ZV LUXN$=Ƅ+Gu|ޅC"z`-Zdw79z/X5nbeZK4;f6d6x.!9nZ-tG!fMvjٹǵIf9t[UW 6ye6w:.ݏR-Z#98o*{˩C,!8b;iy{V%CT=9 U Q@*]MPZFt'a|C̛d hOwnsmS`ks>thH;U͊;1&sUUzXP3BJ GbT(^ Nb70VyŻ:J^~;Q6q%8n9ŒJI՛۝ۖ`=,iFll[]E^t[w_8o ?RVmׂg89ڐ:q!k]9U:j }T%n,7+!cLՆV닱UδYK~9|˶q߻+\4dkYC!i"V8ݏ]08PUWRRjLnYMr_(ǖhxx8  =/xui<7E=%Qڌֆ,ƮeKʃqEM<*w3oy;rY_)W^G 9JHgE5RML< +> \f?ZliŸ퍱,*O6D5@ORkO+8;& 2d?=C%+ ⅈDפȽ>c[ +1 BmuM4HF$i%&a!7T= +^C܇nE:sw@E`n(K1G ̫xQ= *s?;TbG[1#i (mNaB13VZ%;#[%T'n"7$%" 5mbHfbHdi;n:뉱 :ԭ|PB:MIΐx[ȑwx5k%^͚C%Dju@B߮wyW}ͱXINUVGTԸ8"1' ٤7RNG]utkJ4qy* m5205޿mUMPүzrDO4!C%=}qdRM260ʛꋯՇ*z]S f0)٨~RUTXSMH^0b$t3NH^'jBsRIwЕt\bqm= UmhҮ/٬#3q5Ašhd&=4=^<,(YNSw6 7W$[M6T-̡>URϒ +aI[M> gCT@:' (vL*F!=v/0w#^FD=Ƅ[zb/|}L\x aUjC\L8HkYo`6JIcЅ;51Aߺ.A(aݓG{?- @ZZ0t-[R~Jpn,Es6sk}!/bA3C}qqΛĸvrCj T'bJ }:I~jDOU[p\o@xlzDK6 G"Ơ*޹ԣp 3%)P9JK7E8"]A1zvEjTFuܻ?BSOUߨ7%Q/}#p%A" FaD])&>Fl$Ll'm)SVC (~]rl:!܋rli*̱ڕǪE*CtH@hع. .1Icxi _qBw"֘n?U{ByL=%nʸ!8 k jEi EUf!D,μ'{N@D00,<:<9QXDE.m"?NlZ,ʀ$BTG0~F&#+m5流^q4lD`[jEmNzbQH7D8ap/uD 3WN@;;OāÁH7,b5,h^Yг\|ţD;3MoN,"T>8|h!Գ:yBzg/$v*B8klOw6^W<=3bl,NzӮ4 +u-v"C;LN\%i4u}T¼G2eNWο뇙B|)() HA^=TPI~h>ԄC*&w b^Zp0\\YsCu>"ƸTU+-Ae>}9N] +I|t@?}7pWOqE* Q<$ P_JIʦR援nU{$8WSۭH͇k$l1Ƒ{tA =viz%Uh}Wf=W\K@3>rVf}1|0;C0Ϲ{O;H ]J7x<>NͬR!o79E# J_YUI * L&<G贞Z9?B.Nz?$NȒZ\c=7-7Ɖj4a(imހ)Sv$Qߺt_j0dHWa!ote7@hBT$۳PE\E(E̬];EA6{c.8%ҩCF3)!z^*>^%W?'@ +/y p"Pg{8U4 +5 +,CNI pp#R +eن_g#}=]X ;; W@3,P/QN2u/WHNf@+-SpGbB Iv]3z^uZzg߽^7!52jTw(3>$Kt@PDCJ4 / ?*3Feߤ|Gfpq20+iSCv_$UR1H܏d3*IPg@ZFB=eQ܆!{z$UK}%ˮbD|SU-(ꁂ1| +3;_hfS,`~ 9 xvr븬|074IzNf.^.R;D+aEjQ/GGS>C9\f.zާ }钎|z +*wB¿)?va|n/:_Ag깩s}Pjr4|o|/.6=u?,nH*Qs XC#dy8X|5R q("f"6\%L \b)~aXuhˆ|0 +?KG1jl~+p \po4?)7|_!'A/w#^&v6eS-=Kֲ ;j8u!kGÕ2ŌF{$xb+}\AfsM>_}HL~S |6;&Wp^l~P o|iRr:19zӦF׵G<:ugU^H;U]G;TUG7| ߙ/A9ߙ/XEV󝪩%ݬ坫n],;^;U]s,dގ3 fBgAPٰ>IUu)'M:‹ FAf| +@S9|39 :`! fn~eGA+1_*b 2jN=r5YzGiz;P'rFa&1i/RiB*ίp`vhq|8;T |)+C׀QWd|G.5ǣYohY5ϴ̇ +g*Y&0x4 x4`Л&mRB M;7A3W z~'|"OE/PL _g*DPu};w=ngk狣6t rlk=f{[C-5rN;};2}M۲CG +Ud3` Xz.2+;Tri~?gb7HTh~3|߃.姠\x AWJLUk},jY̍vUr_饙\WJURoǏɼg6lpQ _Bwv81|$~|cQ + /0$H9N:p3H6hv/R$t6T\:֌I{hZ~lUS\N*)4|H]>2?/('EaQ|S{#Re"]XJEE8E9FrjYqu;h{$!h;=?<+9bҢ9:wQ܃.fݤd +K !qt&r +.s!y)#i7Vg֕'Ċy&-oe;ظV!ѕʍ=NL8 7Ԭ-͠.Sf( H;j~X<@NNLi{Xėn1%])Ri+cn;0;f khd5w*tq^+)(e"Fd +B$G =}2t3.&60{mUGjP-&UʽG1k+XO͋pP)P\ +=z,md +Zם,z7x0{gJڗ] o'BWɧ'Z9N=8* >D-j%N)DglOݽAvvP0!%aH8w7K42wkt# + +8˿<anfRԗP/ "'Ro0o!KnVM-Lqn"HՌGh1ho{Q*ih`5pa򞒽O^t/$ɜÝ;\Ëx8OA:%\KA( VFHuQ@+i 0r7/\X]N^o oP/GZl5zA^O|Cl%-q_0'Sʸh$'!6G*'0'# +,Ex +ĜC}T +ishKPA@đNqF:^e vWx/s([t -;)#/|"6[c:l˅\*DO?=܍SH3j;grm,n]AWޕzk:- ]ÏJNBŜ2 q>݁g`*+4ᚎX߯<;60lgl.O)5 BH3mWV;V vq;9;wP@2 vZY#RV5lNd]6ܭ|XG: PE\h.1 ;ZWk^E#$5o: H!TW3nL]猗0<ǒ3}.xE7D.Gi .V*eW`X0*m^ +gv00}j7YV2b\dG="m\6Ncӊb'G%L[+`Z3q ̾ݦ0N,ƿv ' u$3ro_9 ȉmx|C-WAgv~(n#މcp6NMOu=l%ˢi +\F)e_6 ^FH9 ۯ>ie. v1Dӎ\?jJeM99tXN(V^ ;+.[N Vm {B\jy$ w!Ba.(#}5c1VԿ +VP(hʛS}hG.zy 1j7%Nve([Zwa\>F!pOu[ (Ǚ$p4OD܌_l9hpѰ%x 6x +!y"vo?b 8F|u_ye.>`vy'^W~"7fЙ_1E<&N7q_8݃%:ï̼fYW1mvqYñfUͣ~:I+[2eL~SqUVDPn40}h9^~Ty{ͤM 5mx:~j?0!ە1$r·FPNsovHrPdY#J@&W޾VRq qq;O>3薻.zgv݈![]S~aI)j\tE7:Tgpo+Ox,6 ;H$ Fn L8LT#7:fMga[He5^]!ܻYE8yz䞮Uk?yh]WUTIB:>y6;rErZF Jn1L7"7V3@чYo{$fLk3]۔nf9GԻw,ɷ4ea˃Pr0F5l*RFRer0;nâz/^4o),u_@~.2gWjjj汍n@*H`kJ'$~!4#~j KpS&nTHf)-r8: *p>1!*xU#Anjݼ~hXPq릾A>qƇ`8|Xj3J#HBdray]pװ:Yk`,(#)lYaueE-qh覫y,newg~M~'[9 {j$ 3o&z{K\X0ކm`.P0iUܼ"0p94%-WQ]|!6H8|)K)pZX:wQ%[}KJE-n_b^:I%#&aM=Zq-|SiV $ǽ;CoZJCxHHq 4Q[L6~jc,%սZ[\S|H>,iH4|8LM.gfLc +n<ZI'!"w,pybnq*)8 d\Vt׌rQib #xf3PX31٬UDFk)m~7):s)t_H&Rh;% 7V={MˁOo4BG6Vq]xQ4J* "XFWT {бzSD=& 8 <݁i71񬟘|MIm 'p]Ge-w8DL§VܕFq#wS̛Žs$I8mrf$:uLMS>Sѧ l^tgsXPIL@ZDo 7? |/H'ջpk5W8C$y$ +n - '^[fx<(E X[%nlw;gngO2x<qxNIZ# ȍ?>yn&0~ ?,Ъv*镸m:3]"!Zixo4ʥϬ^ nDd@ +pH: \-qyqWFXIFJ`V|JtMY>pf$3GiXJIgom2Koc(N8= +^!:M5d~Zr搋waJG8k5 4 +"T4IPu5xtEv 6{Q;&xw|LCBbcwI'b!X3u 3¶q +'Z8IV^Hx2mGW4(}쫔7-Ze M㫀dzR,ʷoǪnZQM(XϨm\ +']sԸf)<@m`p^"D,W{D\KL@x`yZ;j&#% B uݍ#IwF?X`F e(*:)0t# D`HHH2pu y]""ںe$ 0pYp&DdH HhhKW#. CFF0P`4tVK .Me0pTSEt-12". ^D\G[.]CBpHh QVQWm eCtJklD]Q" 0 e :E$EDdAk PR!( ?,dhUOQF4 lmA_N^dÌ;8eNR9Uм* +PpM\Scjͼy"5o86N9΢΀O- ;w>z{ "n ,Hly;(AB~۽!1p{*@5p{ "zQ3nF=DPfQ`s_aaƇ^(H8v# A9]Ə m'p16q.tPw w3l;|`<5p6uN]@w)8K8qh%( ЍarJ +7"#QS*x=eu냥T:^H%Ld4n?KSI,b>6 NCK@Qm ,x&G8%L/`G/#ј;[Zp˾Hc\kQYH4GC8YxF?|ʛX}B[u1$r#j%>ԢS| +?}:~S$ +4|B +XBBLu :u "^ g0TDu~{Љ=Cߋn/̀6;v;;4o#GB PQT)d`7|nTژ8e*$3-QlUξn9mW!ѕ|mi(uԕN)w ,N lwxP@ 2x"QE=ӱ&%ZK cQ9Nn񲱾_98o$t_נp`0 21u +COPWanm P=ܞX N9Eɖ Ì/wɻt0&o(*wH-6qY}M!5`mWQ[tZNayD9sb9 =qb ?ǒ,$J\:v GȆAOXa< $ *R8]nNI-vc8yNq%0+8p*k`ww<{QM!Fξ pD\Yz{ǻFcā pTϢNt5|mg2K60n +- +w ~;|(! q1{"C0wYK|iUbBVG!igxkPmWWLA!ScH@h@~|M@](Eb +Aэ3.B1Yρ}0p5 q<^A%_ROIl6oFps$WJJ{ȅs`3ӁacaӿSFdKuTώ r3 *sK'!sٷtw|{Ec!8/ D_T 6xG=rs>$co)8 2vQ&m'@y0y#dR@0yi ^^ \c.l, :]S;J,A7q8 @^8ǯm)mco\)s . ;$$[͚ +s WuɽA B@!Z̓y/2r'q >.M ;bP!!^n1$|_0VTV%\oܒh5TJ;釤DX+XąR$8v^ HficW5|(‰,:/aP21 M/Xԉb,\XJX~Y>z;1 ێc-hN%k#Ǜě_^0lo|Oe>4J;KZN n Oa˪b W +L\r.@HGKEs@:NX% 7g&^OXw1-^Y ̉0pu=ByX` +?y㼲5'Q$@GwRl%n$<ډW1bwA4PlԐw8qI?"\Je,Ou`_vE}¨.Db7Qwx!K:M@oVy ؁/d矞DY?nAwM]tʘ/bP!sGq9qJYNU4Wr^4Xj/ 9 c7$ceЃnb9ĉj( Bvr:N\ |4 '[tXo'S81na{ TNrJQ{('(}"rA>ggqOlOCI}I +ly"+ :=Eͫ8:n)dUԼl>5PNrÿB),u_I ;JזM͌R6Q5JVoxCq ;v$N gas3kH'P@ZƅvˮQȴn0} iqx||A3W QƲn3M!QoOO@Oh"É?B9iqwD@%xFt}۹%8sYir!)ۍT/3p|y&9Љ? +zy/ 4p̟~hW|ӏK}7i|,P%s=<øJD.v#v3/|Koie4lb80PS +{ )#I~rSEU}&!b|cEDdYX%(ӃP :h %l|pԿߙNdPqr*7/ X~0KzMV)#l2pAcރYGDہBl( ..{c;߈'N36fpN'r' 7#DBD5w˺1/of|݈- !|Rx b&ǵș9e]Ea| 9s6e9 c ߈iYVe`~Q ueβjD7[ ǝGlm*f]9 +W֍"&ƿ^iT'\4إ w$ 6u<HG<,i4Ү9|_fʚ^ &_I_0Fuc5 ̭d3Iw c }o""RÙ6;A'l'wT$DsgN?RKSnfU7VD2s /wj9Ч. p0\wʽAFp,t_y]Xs\ ,vrNgٷ1`90ĭbVWaۺ0>x>y|3nmAꩪ/}IΙҼ9*n^1 yx36T̙r1l UK9nz}26.;"#q*p;x +Jwz; َrEu_l WJG Oy +2V޾n2C 0/5 5,玵)vRʹ~+*E4 5kY@~<Aynl/M9I=U2 v72eŹܡ/wgv7qϣxN|&<7p: Zb6SH6c%낿MqcX/wj<)"nx"E<%92hBolPI'& GCL}p4D |:M-_aOrV(f\X.{g Z-vHt$Y+UұUnhΔy3c2Yg cCaDdc +W AXx|bH """DAQқ +A!*impq:%a4uM7F֤f۟SM79pz94sݢU,L~mN/щ6'-0E(zON; 0D'5r+\v:FI(a`Qi͌EZH#:N}up .|*ئ93ٖ1=ϰ,q=9}Dl `N@U6$?f_ 8VtVa~: PӿIkakmEW)۹#/)XF)gzB&9^ ~(tsxYE6;:4W ?}J3optTw`ɝVEh{ͣp/ba~z<3:k=eȾ*&wiwAsNVy=u{Jhia0NDw\Y#\Wh~?k:qnYObjSS1}e;P?7&&_̸74c=\<| +D_Cĝ'(a'~x{I- +#k,B?pB{?ǹ{=';fK/ِUᨗy'"΂d7q5G¶Yp6`zJ[1+7'> OY'k?kp(<"FVU_.kO݇vN@ ߚ&gUqoG>/~pTFV ζXaS׀vϓh7/nz?OѮqd?|t VYedB(V7ÛQϊ!?+LlIz vn~ _:هO '3mL=vL㷼g98p)%uÆaV.Q 9Y-~hz-Br ɂ&t-Z?u|})Ẏ?B@xE}VVZxd||v$fd^xIfLYKڏ_bWo *_h:1ϿCnړau|?:Nc8Wj^(˭|_x@# :27a|}YI63ړ3$;>Hhn~Ь + +i`[_@}5xN*R_O?|<'g0+7ڥΆLCGX}Izmh9<1B}*5TֶtKBhSV4 Ny5 ~1d-9N1<'k$u7G$luAPyz堂R%`^)nf$bWc."#$%D׆  _}C}2tǩx%4?S2zN7rnTyOT?}BcuXa q§m͸nZ7oD%T5lʝY! +d%y9336d1063-e4b3-4c2c-bf11-1cab41a000d9172551d9-9ef3-4ed2-bbc1-3f2ea79f1f84 670.252884f846b4-97b6-42d5-897a-4f6e51d87d643fe3bec4-4b95-4332-9b12-a4179f8af2da5546125237-5dd9630ac-5672-464b-bdb9-a8e30fa3debe287865f-b4ad-42d4-ac77-1898149a59c43.ml10SVGFilter / : -/XMLNode; (xmlnode-attribute/Arrachildre(onodevalu2typ(fnam; ,0%yyAI_Alpha_idid10wwxxheight,noStitchsTiles0.05baseFrequenc2numOctavturbresululence1feTin2operatorinSourceGraphicComposit/Def ;4fractalNois-2BevelShadow4xx(blustdDeviGaussianBoffsetddddxOspecOulighting-color:whstyl5surface10pecularExponenConsta--2zz)q$) sq8:X)vp HAAB"FT Yۑگ:*:pSCߑVIKv(fl2)ge }*[e@;A4?]BYln q%42 -sgl6.$zП)LJU PT$d weN:x -~YّO@^ Buh*pl\?48c0s?7pwlj vnݛƷ k;o$Oa޼؍}oܢf'*83 m+PpG{ϛlr7O\r_tDs;4 YBȁ8u) \R퓋1XF tQ}Vk`Jo,\2S>DohfkO@"CC30\ZIo-pJNff5?=հ|{PN oHE`ͤ՟;h 5KL-xB&+!n+Au -^8 l{ݬwΠ'JWfjQJ,ҶDߔ׹ъozR+ _\i_*E$T@ԪxO Xo;̴/ӏthDGUC=ceK&1T1.b5cK7n! b/7#jqSù '!5gi k(NxYa)0\{:]WWǶrD4%r,+L'DM<%nwxvD嚴.Lw>]e'z8{N\+TZ:`g0 0 0 c7R4-UNDG1wz)eJ2L,D= +p/Qf( 8f~%JfmyHv%JDi*V#}]JA!Q"!U]˙ X$$񘘘ꁴ5SAv0 -rD1AX@AhS%ibLPT@@j *((jLPK!怒]y*tyFT PC'z#4y<((9D"*kܕ' -m>w( W7eom% -7oxes%JޗDis fDidV6蚭;fьW5^ 笽7lDapcͯkܐMƙmt7{fv3/?ԛ7{Úwe6Uw1tm1 [w/k=\[TQt9e{ރT?IDf2@9EĠ(:13(WCr$PU5\unW;CX.`s} {{w{Hʬ̪n9QݻݻVrn?+{{ޕٞ[<+{ʶVr_%pY[ ܕJWn廕=PN{r7cu'z 4hF4jMބ͜+n+y`c%N09OηrTnRwlT+ ӄX&ʃ.Ee,AdJ敫L%b -X$JSwұr{msB`gPuu!\H݄Lx%>e{=qK\Zs, h0)"F`&5Sg-G÷<5Oaxqt>bYk; L0Y1aB!aK\xxuNl`1 -Jĸ$J CWksOWw̽W9C _>wru+o6lAu״{1+Bow5ޕ(Roo$);QuN޳.?\v -[s?vyc_.3]۷9:x3CeoNbSU@@*000t5yj -w)$ -6Ở)s+Q][ԔsV:fPh8CMВ K@&J,&4 C0 @ -@a1( -EB޴dP(4LjןP Ƙm Ywz K*c|YcI>)Hljm59*XƶpY^ ´Z-z!L,I v> Dןf*3->K.»"&h -FYbYEIY4hqP^ Zs -R'47cq4JXS49_$+l3B!EcIe%?__,S(ucqa!Ӹ\i ^y&*[ӐLIVF宜aԄ,CϻpW#ްD-Ż}ط:rH.-KX -& p9?At]}wzQ>6?Qy=T%|_/~쟩h%qrPS֟C:T?iK]8pw6EnB8vn'lAWAj\91,5&AF\HuW+FgT @+IXφע6\|=j˖ #JgY%*Ovi>EYN֍zDO6LO̤ Lozм G>2$Y`p5LNFȥSRzti6&z"Hx[0'cQJXCkh«:׈;p55:}EX6N+C 2 OCwQ6$8_3K)Ƶwt<6jC(R*'ry7M8U~\ŬEr# _0,Rikm|¯)tȨ*R)1\:=RY晖\C\ 쩚|u ?‹K akp{_Y[$Ɇ՘Dza\ebK3b~n5 !"YYsŁ竻=D1XWAVV -1Fo$yV_ 3A7$3gk Y yoP{@+B'nUbD$+̡ѡ~`-<'Y}Cv|;ư[k/q΅-~WvWAEspPg'5:ϛ(ƭ#&yg -(u}]A=Cgqoc f;`(aO,W2 M=}Gq'F{ -+v]ՆlnӋECK2٢yrQ^gNἐHuF\ecڠʓPy-ӌ qse@(P -C5jNefp&&"j")_1>1ElJ WIƩb -Ť>cPT 0Ua3?(@/qLGVER c%3qɱEZQ #B~04jcb= 3`N}GOsMp {/ U6{\SNS.6J0`r"q i -E[g@ v/FU~jE8=EA턤Z;)C,+*U0>]zMoҶ.H*jgJ(Xd?mGHGHSSK| 'Zو/\/7>&p[|-NriKbƁ"V_$X2OR1X#|UG%l"LD$}760l k2w`Sn "=9z|DGg*BCVˠ"hZ"<)NEЧ)*fLQ)ٓ OUz:wiYAP6*p @JI;amfezr JاP\(dk[34[p3Đ@d5iM32* ;lțʉva!^x' 9[$4i7r| -V5.L0Rxt(=tF<5D] Kbi)ҕ}A~Y,lǯ\]_ ,2oJ}E,ſk?Y.'oj4(< D߄7Zٙ\sǓU/9L9үl:_hL?)f1=|9[AQ((e [l}?z -,-rS8Bh˅%&u:E=-quGv&UTq΅R%JĮ4V)*l' -j]юbbN_pzW:,n^ ߙu݀b$ht ->1<g -`ƂS`)u,&=-E6}ҿ=3=Bo]e (!- d=jYGCS(X<ѥ׌ )E27.v@غ%(CGu\tqnnί枮mt p T?$`S9*Pʇpĺ/fN(Q%H N#otl!~tqq xtPG~\vd}I.ˠ"jWHΓRռMc%\`r{ - ~UX -s[ |ߝo( 9H##IVe䞿f W | }#=9Xtd\y 5!HCU5;i{[ćwOGgGp#PՍ"T!:drq 0OfZhq -IsUqztW'199Ǜ۔_s6\>eCg-RlL%0z["2h$]D ϰt@*_+un[f$kpV'7ᚙ򲛊/.P&#N!8@Mz ?.+OSd& {?,),ǚT=FPlL -1,$Zw; IBQ[ &YEgkf#ZD-V.gЮ!m@{f?ӡWd߻ddAh$.]ZFY/d!})QVW$D碌+&_gHTXX'ܡcb}P:ui~F-F&#[o>2P3wF7/Akvn'4/M_@0 -s/Bmdbq&iyt9-؛=mO `;B Xbiuuy &WAt?x+E Qn0lNKUe-ZD." ʎHBU/=7ćCRMvի@[Q@7Cfqk5 Y [fQmDk.,HaIRzeE12=|1\NE\QHje%RI,ap^+^nrP3d°^ep^X^Yߕo!hk0ZڊTs*'Bދdӌ$dHGACCl*ƞ(=jV /B&WBw\)'\#pxtSdUy8kbq kgU*%ɾJ=BŅ G.L8sчHG3ǫPMlZlzS LIT'GDċB6yT$˗F^&+/020]RC qk `0`}-ZY Bi75Q:7)/M6Y~?i$:v" #S?dž"bHd;=%5Y?Uiا8}д{W(k_ QiICO~%*oܵhR:יo,XI+I!dar]:F uHn 3(w”El_O8וԲ(v9>!z'2G+H7 *,ɍ5 ͚삸KN8X&@EI՚ -Fid/Y.&>̋iGWjas~9۵s%Quwy[S̴UH4Jw`"'E:p|v{jVOY?49ՎP2VD/xD>"2%>t6B`PꈨW2u9[U890qݦZb2RI|<_o^px$\DURH!AE %!#'H|ge J|!z,9yω5)4FXa hC6Ѯ;RZo&fA`It0 0 0 0 o;6֤4@d}?@oO$4d2Rh?)(Ÿ`Y}0Pav]Oq)T*ցBGG&˿z>=w -0 FEL -@x4 y`pN$"< -E"i<8 -yh`CDH -0> ^P 4 g8B8 `#y,1@deQ%i*<68Nڗ"B))D!pY B<`"(Ђ!AhA'?pa= A: .hpX`AY X!,c xT0 ^#q -p46qL<&\BaiǑ.hpȳT,8,D8 ` -L<*D!E.WN"YBCN:>fguX_WG["A)ҤF:h %M<1obXB5Ph:˝]}3moDËhcM2AcB|Y9ſԢjߵB\sGz(4u5#i-](A'G]k! !ي."Ιxu}!KSӑ]FԞ]{֕#heB(ՊӪHR* 2Ջǵj.ФR TUmpؔΣ B:+%GV>̨QduBjgJ㛩48@hEl>J:NōlJYꤵNn;R)B۽}WUC:G#n34 - - -*()D)"j599GqՈ:ʾ۪YKۑJȞVJF݊|>}!֊ 0BB0BT!<ǝ;!+I#=U%d3)p*F^:w"}#݈yhH ù $iˤu3!NtDBxC6WG4BiF'~ >HBRC$hEBJyĺۍǑ_V}]jYm!gwo:;"bq\Uȣ#򜹼 vY_PG"ȺRh$]uwk] '̓N:"Y8묓ʕyVBj<<4|, F*LB\!=16Z?ZE/hG8RVڄeE"È)~X0,( #X0, -_Y00P,hYS*B+Άvs}U{o{H7-N~r)L-WEPV@G|֞bX,  b*U d^Ȃ`^ijZ $Vj_48@npX  bğA AR.RB1JzG< T;JHb3.YٟB%DQ(7R]VSRd!Y#k)Uԋt2B-Fƃh4 00vc1Mˎĵ+51ȝ(E,Cb릦S5D4cY-w81X%:M?ǝh=Mפ+G 's]PԹ6LUD=jK sO1G|sl;d(U5Q'e\X;f7e-v[sH$].n,gR%jQStU}`(WW:j=Fk <p 0K"cFǺ6Z-(~.RB]PnX&,pB?< ,ccƒ`$8 J - -e) RHg!q[ -Y`ذHQm*ME <0%s<4gAxPgҔ<qX\8IQ agAxx6(4 F -!"y0,xT,&…nڈFBD8I&pG)#\8K$’BxP 0&ѨxBҺa Q@ ˁCSXc!< Ba)eq0e@,샍GhA N2 -c h.N&i %Q`%qP, $0@``b’4l|ʂ6MraxBx$. L0Bx EfY"\R   ֐(L<MLH$/aPcL4P KL0X).GbiaIyZ7]xh`D#X= `Kp"m`,<%i `(h0 "   -ƒszus/$~ξ*kwk/"D'VQZWY_5īʎ[."ep:Z*WWןyVQj-=ugDZj!ԻTvԯѪzQH-K-'^Z!wߵ"(^*%*oBGI!Hb} -jxJkݑRͼgwx -D 68Xh,Bq\X6T%O~]u'O1ZVRң|Q z4XDH -2@ sT`4p9d0NX~;E#.jIbaR(VUJKZ;; -BҰ @tx@580)XÚH 8ba& ZrFPEiwuT'B뢵?'g!8WWVW!^qOʭ#fO~H!(ºx}]vREۊ{#Nr*BU_݄RWM뫖u53Bz^)+EQh&V*FV & - %]oT|@JXE(`B< ;1=<_pмP8q뢳U oJHi/pP$ x$D&x8vB[ŪY]Mq!%xHUaD4h8h ``i cw.9ŬܕbjncRq_g再qBUcPgDNәj)JA %ocEbRj.sQ:-u_eKyw0.,ģMgrn;=ʷrOߑwJ}dqZ,lu&՗//"]* -\5JQg[+eܓZ"Q -] -/יT疧UgpԼsYlzʄ`ssLvK1R(=2#oM̈Vm[*:_R`T~ns_mlm3 -sw֛fي;ZOglz WSK?!P_'7C\TKu2 @NRdm]JBI]X/)=XK[X9ǖs{Qt:Urz*b?]6JHEy^۵ZNh'Rn]i牱|0~:'{#unvSgD-uR~TWrFf-ZA47UtaSܺ؀"]XmRjxWOK=)N\,Bpe괘]KvpS9Rw"XFATv:*F*5x!cd)Lv^]sPL]iwZ.t3| L,[\Õ. ~}TLOX"Yi9G_:,_N}1/7߹\v˼q@CY\Hqs_:C~`*P ce.q2Tq{ͣKQ$Iu7n6T;/Od+fGx+3tiFSRHf[eo}NpB J{[[J!TԿ{Lu{'L  YP{T`800C( q`@(Bqy6RB8ā6ąaxh4* iTP U4F%@ ,h84p@+0,2Ap^ 2yPXG¸t(RqI\|TS(΃ W8ʒ8i* qQ$,y*b,( P&y(QXq* (<؁$ %G@(h#( #>$ - "a(0Ђڰ0aQzaFSW4 @1 %IX (KK{raq1V` @0,%%iA”FQ1A6 -|@5.X(FB!ceSXJ`

!NO첟Y\G.i8*^\2ԩL -Fi!UeThs҂٬Ey$Lk#'a{3W CFn2Maw팋5S=}J+kML%cm:j/U?Vr*uPd}vN^^d˨3L {% mXZ(|uoih* 1wr]Rm{}>v4z_g;_bjbl5S'wZ-&ʅ%=*ґduTjϞUck -u^;:cK`ah{ie~u V^O\bե'bKcܽoX:f`hU[sg{| 2/-S1:T12=q3BwuW]ۗ2)?; dZ-~2y\;J3cwQ7&ʼnt}bJh!g޵|NKrZ?Q,&Sl(jhZUХm5KoCɖKnUJyo{?/hDzn,S7t.-Um[CS\+v㗊źVqF TǟN֐ʥX'))oMce{2&T/lk-Z9B5wjd-Ż詥>xD´n {ܷT;2*i|9 -[5SY2Z>rv0~gEp` H"su-e(yK~)zj3'otz[۩zFr0Dh`a{H=d*rB - -al9|Lgcm+%U E%oc;=)cMU/5RR̹jl:R(ꪊ-CfhSEFS+).Ŏ3j%$S9 -B232# $ -2EeX,H2.p0 a") hZD'-n&Y]`N5 ?3Кd!\PXyoE]ƅs<*N{_Uj W&0Vr:$Mb+*zF| i)=D꣺ɹqiz9&lX - c 5/<0,e+R{2]{NIMC -j(YV̹y, -X -&*.$u ( .3ek⹨A1}F٣3U֖,qͬ;(J Oʢe^`F̀Mxp`68' -=: -2gјWGh?'E-Xfd 5}`g'j%N2' {PWB ZGگޓEɷ:] Aw#1xZZt55Q+&僧HX@>?/0I+:c'1247`}\/ -6 s$,:%mGt -; \e?} XyM?vbiZM¢RX !^QLKE=p5)\-Ei["nJUcPx(wL&싻4?޽0c+,L&g*/8m'r$$wP{<7~i莤y y\',S/iHp@"?nlh շ :9^SG2bWXZJw:Bֺknd$O97["&y@QmG>stream -I+]8ipr>ߟJ-Ǵ =iU~ gk.[\GEڴ|kWmud_̸fN$M ㈁bչ.e]>πJj_pEBbB[K n:2}OHN@~\޸ԄjRAiꣻDqll$Me(Q>&o,x|S㯲7 ݋qSvG"EsVVOdNmh->9f;HŹM~DtCA9F3˨ P'MVX;c:PGow.۷;/A;Y:< oT39ds'WoFAx4$FHga"TM.si93Řai Z[ ~ͩY+.i.%/gW>`FHx'u -wU%2 ЗY>.;S*з4`>S R,DI/HPҺ1w5&Uyє!DZòa5ECےgjz=tO=vL\O@MMKT5(QܝYߴ,%.{ ʹoseǵdYCJi+bDԻl&%(n!w!g;LC:ZcfYmGٹKk{ 2FF~0?3! >oU&l`+Itr&`jKCG̠Kxqhl0[ M֦7n$Q m489s,؇ f[%vlz/Zlo."6%U!Y6;E KS!߰ -S̜[&Є1ywZ8WN,1Qhܟ `er a1jM}h2J% ~DРdXʒogдÄ2Y4{9e}ҾP˞aSk(Rl -[ž<|A9`U&1eB͈]:*gX^b,.9A ->MC_30$y;V|8>d-0b3uع<AR+zcX@@+SsQ -dM KJ Ik#/O`\Hul0Et9|s(vYv?'@3w[z hzBWmԵ}$LGy(n<Ɩ4= K\Aہ:j^ڈd׶Řg0 f{nāަRgϴFV -LuV}ְ#݆GPǁJɭAz=ysx~rCP@N{ĉ3-,/SK& U5SVtƆ쉩><sm%T(BUVnOFM$#{ǹd2"kБDI z1&v+x% -Id6hTSFPE(s?iܑOF, r-,Lh$vPvZ7a ]0+\\UHzD&[Vdjq>Ա,ERX GRkm{~ -Cqa?VZ ۴|F jALS(PDJ`w #wyZY9E&a5&v`$tVSSܰm.ŋF.j@Nܑoa=Ё3J吕)CX_k%n@?NԤ裘y-:P9#eLZf?D śeJtq-axODafgJ,g%!.EmL2&ٌmx1!^'%si 񫃒k@,K #+#T(7L4m2QH ύݥfrtji|3hZˀ3!Q=Qj{6 ,TZxr3,uO)LeS5SSwwXV,/cF.;?Pͱ5C&-&uq~#E:y AneXmUv43T~MD٭K`v1U*P݉(51ƌ@Zl>}21%YOIpNH#>hd{"HbS<"dY|HPF 3nHUi]lIB/L83VBRۓI+COQ5=rdӑ/z5VިrDdR?M/y-6='>О Y`mH\[ R(4YV▧q|:aCxTms2 ]< sft$12G+;B9n/ťFc4RGpwc(ʚaNMR:aFNyc$n=SC+Aacqs*)V.WַT+8)g$6u2@9}l.( 6삻e KT*:JZ:+96Ż*/ԒNzyM~+Pv{/hTi7B?|EA!=qid?FCa>ʦ Ç"'\7)L gf9la \ؾ*.uܶD%F=Ӄ4Bh z тkBOPOwNgޘ8TވxZ<ͷ冝ʘ t .{b'`ݎs›h!U|"J'NM}I觅Zᜃ̴.'ߖrD^n)*a" \43+ }cYO"WM;dUB$(EsbuM~ˤ 3Z$Gb_Y˖A-Ջ32(VhPk{tȸ= ky @ۨ=9OhrC nLR5$X!f@%p#VC >zlCC޸V1~_u> A] &C.h n-?`;]$p -3АPWMe -ɏYL2c lNgaYoӮ5dgB*h37im(C1r@2$EBCԯR[ި(oFF<ˈz 鋪f{zH\Gl UE" -S-}M!ÆЙx|֗"{;pv8lJ-b*asvDZX8"K[5,,i^y\H-iʿnaARquЃgoǜ?V}Z'ѰdZ0e`qL.CVccB"#EϹNLHa6D;?"r -B&R7Gn,F:S =773h=Hqi;êo:W*M"6 [Y3{i 5؎a1^q+W9L)&Ѯs3L ֗let p WXn43כQռ1\ϐU5xAb`&d -Zo?BǐH  3m_,2)7?~;ڀ9 5`L:M p3&A1e/[$Jk V6H4toж,@%2W7ORS1Rd;XT;U\_JYﲪ@:Z &k"dp 8I.KxXW~xҗ`ܗPV8>.})rJpf]Bc>8%Q.XPo8̔&x!tL[w?ǭukcfut]YK0َ4~s 붎b tTlƜd9i}4=Gf 9p(? -ke:hǴ\)>/E:e]Hlx4xº>~s"Ov t39"@w&Y G[sC5T hYe%{>[! H*DIV%i!CkMTuL{ݽ܁D;NUqޔK=ofZZz÷+Xr; -Ϟ`j[:7GZ6w - -U2%lyYa?\$BF+cO)+ Ąg9. -R݂`alDѬKOTV-sLKf_X`1pt0_.DGDYlv1\W8pY*\x4:|QIo(vJZ9LX!k"yⅭb -O#]rkD:W`ޡS+N L<3opM:p6fwH]Asl}zwRpЧLHsN$*?Ĩ F&z~dE"enRx(d`WQbQ5H \ZX*<5L.o-]8m zgR; NEC2Ħ@6/P+Hv2XW -;^#M 'G6hOYC^WxK]Lhy S`*$崛Jr`};c(P"pm`$}&~++'&1bI 6V"s$@U97b^m9 M|S7aLomr>Y4<=z-Q,h -j [KW_38j䛡 9Rh3ш3Y boUcȢIjZ4jfhX{K -0Nzh|CaJϾ[ -2#"iN.YHjZjuqI+JiZ!HQwd&hY)$c^fE ~m/y y-Y^ER`\ ]F##yr@JsO:lnή:cXjKSC?y Nx6Cjts޹@ _"'W#ަd %Ԣ@mqW&Y&[L1~鹋^%R-O{-fWGݪJh  , BDww֫n4kEC@(U"VH4I#/W9OkR7Xu[`5`K i?!cgza8.aq"˨xgaxv;_s$u`uY['u A(R^v#=ۢ'v$>s>1u.S@'!R{}rj33+Suf0yM'D'=D0mA<,R-8Q%t)['#ZL1ʑ .2=+;ZbSgcWȩrΛdp R)1i4c'h~STߨϪdKGU*8dA/HSz4pX&lGUeRgHIꩻ54~%0[QR<^hxu'oN\uVJmJ@i zd.OԎxJ3vݑIk-S])I7-|H,8HRu N)YUP)PNǐi-a2ўg|ʏlQ/T`_)w#M !:CWBM -a*" lp\4M.Kb *,sfuA{,&%v%^L 4a]~ѭs&-=.SdN_=g` 4񥇧 -4HpųjŸPjMH00iD&Jt4_KYh*3O`:WZfKr*bSwEŻN]'nhks$X/qppꓐ"ny? ~I#3HR VjƴF<\3 %8oOHHű"Qb0ߙз3 jtySI9$|sي2 Ptt9= Ős9 zr&4KjX"3' ?MеY&ݟmyZ> !j#Bݐq;xQ#]:MPMT7A3l d0 وF7-nfݒxR2hѷߍU}疭C2Z"reDA(H:`&qסݑaClC+sc1ztK5\r( +iHE0(^eOJ8@})ƤnEJ=;1I4 _ ?CL!S0@m 38TDP 0)j'-ӍCrzў3j#X,_yJ3&j-a ߊހGߖ]T5xAoBKIGq(ŤŮeIO[uL<ˡiIcl8dl}?1w0aSa>d~*So Iduom鉺i@c÷$̡`CZ6hOSoѠ= A FLiv4GO^PJ&jTGWN9;dmo{`:3Yo!3/a p8u٠W@)5E9xv]<,s Ztiv - -)F-3ɴ/sv|;XvBIP2>!uκ*"9|{`"#t%~dvKKyOM*]5R,BykĞadg5M_G&D - \ b ( ,Svo# 8 xi)DQw>2~qH R=BÄFB.w .HA[TܚR1^zP -H_7%jl$ﴈfD-Tp{PUGFW(Bk&!we$Ye:dii}*Jv p SWht-)E$RkVE%uP2}DausI0[y;n{|Ͳ ˒ )j_Eh4iU}`d~=/9~B/[*!p;R%6Pp~Z@H@U%LUr@NR!Nd06V7Fc d5V+LkӨvMH P>b8/D4JZGF!VTO74*#. XA҂C> j?:msHP2}\ddo&j X(>9ieڟ[\tŸ{yћlXЌX-2"WϤ]Pv ώȎ河&;0sDN:iݙc63Qm8ʌultNlN늞aarxu+s=0#VNy#S23b?:“ i:.uQֱbG,@ [|:Rf O !Bm T(aĜۦ 0ܿK䝶tY!&,b4h.0h͐@|Ts6<#I'(T&9`;mKI)18E8>$-T 8AP3S8:DNZwF@P^g/:%]v";#l;m<-!ţwCJɭjKͩ7NuHǺ:g[ LNH P ө>Mqmix^KuBrU_VC-TNR guq2jTcN=(h>ФR`8MHϾFH} թEN>jbRp`vLj`W;zSnDTmtTXiAT3a`VTvTWii._t$!d*|x-rL;Ӷ-) Dk~>f&5Ӷ3 -QMIJii G ]zы/qHUpH6 B /kKfїHWx2 KegYR @sЌȹo,Jt&w:IaTq bkV,vJ8'2bCl(-[Jcm0gop>!d}MLrE?¬? #rxÓ"9=!tڶ@Ph CZwF@Ɂ'$xmqTZF/ |<69rn~ - dj2̇Ӷ'?p3֜*;C$5yᩂe1 _.=SXC"ce1$xL,_ew&{Rkʍ3p9z${~]GЈg/ZHBNyZQ$91bLརE,߱ӶrFomkE.Geidam˗;5]:=p,&RB}Ä9IxL0O4YpcDOv(M$WO}DӶXttǠNVrOph֌8 ET(?2g?Iv4uL F㽸&xpD^Cot`~_ȤjnkdhMI-T^ L~ Yp@%{.vz5H0a& [[Ml[ڷZI\ -e`.}vK얊0ۤҜ${#}d7Mx vx$SHUL& pZ'ӄeN0oH& _6ݵK"$eoP٨nF.4e6VdPqTr3RQ,Ud  &:0a=߰kf]-3S& -&Ժg&٫t{=IT$3߷Lӄ}{-{LW7`̖|f.e2eKVN2;7;P0J0s>:t&**\!0hamiZܓUo k?q#(BӠAy֑NJx8ܒWNc\5q4)IG>V~؀}oAh(^J:+ZGT^%T!*%G2Đ{Or4rB3rdBkZ3r,oI -Y|/\)wy-lpيwv!qFrEIjҝ .د[4%~J噮Q50F.=e&urAHҀNJDeLp!w\\qTcI(FDlMjar):q??Bv*ˊQIFr=KNnvNiDcT`ǒQ"a&,xME-dI '\p8\4 7 IN |KV.<0SXJllF4{{= -|/#tge0u촭\3,?r&!9XGP Y4%NP(rAa+C3|yJ9e_#ѻ --ܽ:ᜐ xՕ>P:Ana%8~$8yd8-0/[o',#FDi/ ҅ӶXEΒԈm~ -H=#' 2ȜQb*7ΌX7̟Y|>c;}2W۬܆i8`(OTq.â~}2,ʰ}.C fpup9@uYCzc%0>BO:1bP8vQ?q(OPىC}K8 EpT:ġrB. >DN1SB.@ $\J. T9Wr  -Wh{BfiU0uA8bB[rqHCrʫPQ$w3rMw}X?=dڎ{,{9tF|;&P=uPz/c>bcݹ;wg^5'+|w1'43L3g8^7sC̈.e^/ά.ΰԢvQf-t19<u9xxvv#hl*~cbX1Ⱦ&)}*[Na|V!c`F}20ϯZ| crqE:m4#Q'Pܼrc!e'~I" &D8@ | iQZ"pyL@3%bLR 齆 9E p*>jdu4H%NpVD%,m吃8E甛CcR`OȲ H |y?) X ,Sѣ^:rfaaL"4$$֑R$gX@6.Cme1vQuAꔉr@=gsRg=謹0~G,;,ᔚ z͸hՓ,`}TIP=2} >O>y݈@=΁d;}}'Pؿ?r;DI:D)&\ѣW0Fg/y%9`8E]yuQGt%`D/2\EeС\EewȰ~dXq\aQEeё9< !haQu*1?"ʬZ7_|O '$G󔇒 %?NW6I8F8HEEѡ@_(G ?i[I)O@yu Lw_,##,"#?-*`G [`EI$`;m\rXqFILa 8{rvIatM+RRc%j;*4{Оp%Rqu{4FY!& 07v_c -9Re*%6VI0cY|Cl??[:0P?5#և8FKn~ZO $=b#*m5Қ/ϸ eOIz^fh) " KF/1c !˯@" -FnjZаfL>$uĉ:dI暑_h쏖$P~_RD`XZIq6*Er3$r/˴֋xy} ܖ;%gDP3i;G:Z T -VuLAJఊw'EOM) ) ߫pfĺ" -9PORf!ͦj(UACuf ϐ%}C|^P$s$61V)Sv)tKP=Nq}N(+PT4e.5{&^Q("?at';~iNL[rp@eYrmxu4Yr"W=HCCiGJBV!9!~c"$r G0FӶ^bm&2b,je%R{`ɨ@WJ1>ڀelJK  H)7DBߑ3 vF_@ i -Jaky̩ 渜!ē aρVn㼜a& E`I!!p\ -iޏ\7:?A<sx']O|Xe{Uommh KL-XUn* -B//~bu<VG7@`m_ -SE <,vQ'DnLVUS*H{ -ky_p]UQYzVi*@Uվ,$x?ܖ$AUUJEUU5w􀀼h7C`0 >!G7GH{k[ %|* B)wЏ *|ԗ^ ^PH= zjw^q3tl6E8@/ĕ:-}zvF~N)B*L/Z6j!,P0v/EjӶNʲa' ۛӶT{HF -_ՉwbU%UgYU'Y#1`t&A?R*p6Jʸǡy%[f-FsPiK\3 5Ld+;,9 -\&2:6*\nA;msOޓ] weRD|x6吰VL)R+362䔽i;oI_:kBP$%o`c -&V; -)pEFTjawRj)i"9胝m -*i[^FZGy%g":bJ>6@)66`Ҷ!aZWe9:CzR: w&@&b /i(#Le@:.iȰY|ʿQQpS6ЂW9uuKQr\܃s^T%▓/wc(Z`D` <@}$)Nk!Z(6V(Iș۠ew+]\+S}iv4/>C 9 -Bz/)+4̒:/x?9i{(LgN8uچƛT={ HC;m^ăBpC ;m[!N2l'zBV:!8qcNmm ?5xwM+0(XE:k -"gO旀䝶ɛ:mu&w1\Er@{Hr[J<9VrbTBC̩Ӷ ߈#9uK"|g#!9U+g'>Lۋ3Re9-#_ #3yFΕ?ɑ*/ -|(mdnZ7]IXݡ -ENrQw<5a9ObT1u}( -GʿB藬M WGV".7=,dſn}maWF|wƂPH::L{Hב}~6V]Au5 aN)3g/ir$+AZT۽7,SWe*}ўNdI(eXT똎r"HJ!Ml{HV29"#ʅP -aO -Xa&&H!gTNH5Dtnjk!W@!X#ʺDN4"f(g?'@d؟؋2"ogE3u1Y\̓.*1@Aei!iHX?i/Im?iY|44նO](~10Q=T}hWvi 2x+zK`r=;Py(Bf(K$<4;d u`oJ0abn](sXv-w_#hʨ2n+{>6X}dqޑ0TgЏ*\t:p~vxfzv,;u79j^+2(#DCHǤ+kO~W F@Ƀ%UR> .DNNɩ8xe̨71`D8O#@X4̲>ftS^Pڂ9%DJm>ߔOHzɧ$]GCy2PW%UOHIF73C96nNqo|aL4dѤ 2 "  $KVD0(H@R*."&*0 EaaE$$ `R*gz 6|ڿky0 X&:C݄®#&^L_MD"]_"qX]ׇp"'/l^8t kmW Y7c:$޺M ?a buAcF߂L@"uiPs~<>TADVXRz+;=۷kدkC"_b\{fT*$p88ًUa$w~tn 'G9&s b-!g Lm-v.v:`m:5y^.i_} 4tE%Uh3凐i1@uU`IQZcz_P 3$wun967@b|mJ9T(":XQo$oހzua;HqGk֞YWk ט>3uCxJ=-a2r|nw#AV .s}$wz^Dzfw 0-yp֕qѪz9Gdpbe~f} +W> AVS. Yv 8 +d_Yn(+I VtVgԅrW탒ݐR;?\gU눻{x|>rrIۛ] '򞉶b@Bl޹@x`7PhƶB}Dvft ̈\CD,ͅJCRpك n \" Lj.VN -k0\]("\Gj/6_Om%LݷYS\v5"ȫIN_2o .v< -(Qy$NG-#4K\^dDDPn"#j9pʬqXAf<աO3U֪WOVt9.2uXأ%jʧdY5wn}_ԍ3چ?GSЩ3GEYxv<%T̳'敏XQs[8d(Wv.^qݕkAB3#`nj}}PW$4\3&t\sDhL:AxBi4n#**P=XÈhW{Cb&c>ORst6rdznG*Izy6 QOekq@̀c~G%AR]!Zr|՗ MsvQb0 ]"+D*T@zGwJq-G0-ӆ~{xN!EA0ܡ( q/x'Voڿg]P5&xd+Vm]R -od&U$ݣE`&T Q(NLK_94Zߵ::6)3)],%]Gň\KI4);&HoȂ2݀=2̶H]`6"C';+4 -%f&/57 X:$8W85qc|$!5fJ +Mc%1*S$˅n90#QodIQ+E:%""Pt#1!ã~ӕz# 5Z{25pebu3SnDBb{SI4{oϨB!2,Meu!cw>x-" X!8ьD* #oQWH04]Xm )Aᨊ7yXZ2Rȁ\.x%D)CY2kf?"FK:"y[DNv?\ɂݒqHɶr0k2A3n3a9޼Lm2Т<[;!~AHR_?s/F@ Nha ہ O:\SqX62Cs [9TbE(t:}(v\2e5d5|Dp֖=f[uY+,GvJDDXv``3M#o_J5Okfq }أ1vBvxIT {yF)< [-%ґ&D! (xZzxiE'5ѹrq`P\wM -w4*"*L~±{(\"12X.)5RMYlӐhQOP6)b(^?$(\ӦA_  TCdۣyS;ջdeKʌC"Ƌّ}Tv;OC cK^V|0"Nx+UZ7j.OP#~aaii lIGJIzA\S`4Q#3ʆZ7 -̂qmnkbN 'e:@Xk o6xj=ص8^9{gs !\rTr?qc3/ی FѳZ vNx&å -)Q׌wڛq`O7FL9cQ&$kSҗ#&LA2<|8،G;NfYltKsY B;;:{Hp4doNe\tyD߰6V.k#Dnsj -(2Z2{: .!ȾiqQx 2̋LY\O2Y"ʔ gĤl*ئ[im˹kR`P>] ヲcmwCh%Vh׸k6q YkåtĀ%Ҫ=dH?ho)n ̂dLD+9EV P.w"d"Jo&d+;fjNB&S9S+'-ҶsZR0ZFCyab` r᳍m;t XU% 6m[ ]Y3鯝8 -٬)̀瞃FIop4;fa©ϢvptZ]҆\eB+0.QN_t*ڸGyI8D)n8 &o˟٥_ӀNKuRe-KVj8FR#w߮mH\ -8# -uo?.HE*t/+r4e)k\߳;:ĻYPq=m^L#9;dMvwBq /J  _Ho[N3þ_M) ξ5zÅ-cV;Rbv` -HEo`}vy p Tfc&A(n-{7!7SؒGH-RqrQd,!s- c,j/$6Os/D*#̵r'q9dMi6;cJicAk.Ph,NJ eś?a_[R)0s, - q&h8@אiDY[SR!Ǚ?`;GN!kDr/L,@le%?*eu3"C]'>RD%?IՍ0Ɋ\VF%M0y@Iɇy% f,IuVELƆTZG&Tg \pO`p&r+Ω -k:6[@4PmFݪo+_Eܦ{ ھ& 4QyMKDՍ -I*.W?W"?0ӵvkRV~N@g%eN%@dJj֪!VPްxLpͭ̓7޵}uBU}UE!f~hT^y2#!8#]*I.Dм;@#f>XH u,v*3VJ$@,&uݸ%. Ӎ&C? -6QvleQF8Է\;3ꛭJ:Ikb-t?ػ|l -#BE{\͖2A W|iF\!whPL=9DXofH9,!wR\B B:3.U1@qf9Hjl痑+D4}V֬d|$\fPș'qK}@H)_׿m6Q[` W{M*6JPu⮒]<X5\){LeWV+ NbsD駔+w_;TLRakp??r`pO6쾄n36A}@RH"Ι;ݯ{@Q?68 ɖldY78"QIVy QE)MՈ$ehmqc73Eѳz7"mP~q*UBJC1I\0AN9S}YTY@n8wVeG:2)96I4urA[\i<"(=dʿH/y("GK-"Y`4>{+$`'֢2>Eqbl9̵Q_p"#br:{TI^6wo[^(&~Q`@/`]l*>ILفL.C\ÞH<#9rve| -[(iY 8Px$>↕,zU*I߂W7ZNt^JS9/プz;>?kWzvS|Tö-A\2oօKuыB@ *2}Ek,еT!__<Ǜ!Ҁa]Yo~ªmW4ߥ!ކ؍μv7`8(U@~(bQ v -¥,_w4 ce]|<%ݲEILCف6&nhjEӕ -nm@ NRXT 8JVmr֋6\g 7gfCt`5 8]f_A_hR;r3ⓌI}+O ɴX!V Qs KσHpAuW۞+ -P^J,UѫNr+qN,{d*`-+r ʟe+˷j6Wz>'6Ec8'-HB/7VO/ u#J3ˌ6KPq -C ,81|-jŔ[-N -)!Xx1J" VݩKKaTs|t`- &&i62\TpZs8ٕ_]JË4z~#B}وVߋqEܥldta?8djd6 -m%(#h~xI~ZGO)ԈSU( &#O _ع5f)T!ƛqd=|sREqRhb,`jAyDmP\z;0\̀z}_hO'|i:H>bVYÜG?OTuǸd`ۃ^uHp"!!G{q)v!ո'4 0ʃkS:($ty|C]:P< (֥IF>נ%5{]UiDv!f3J WH{oW"F51#@,+lD=ȴoW%3}֣VsN{ R3> -Rn X%j"ЅQV*N`d=> q֪p ~vc:?oゕMDGY @u)Cw >T;ZF&`"j1p|BhO -/ BlVz:̞lN{}?!6![Az\$7#u2B\ҽ1$p4!;VE=XBBV C| ~&H`~>L\NhPJpVTV>0&')6;&2d[H*1)B6c"F:uO(1Mh0~ur,N䊫ᴝ)?YO#Ƭ&#HM*TT_aB]K>ƈ$ݨ'1c,_jHyZU@XnVN1HLô?Lp֣A<z78IgG؏:*\œ)+]_|}Q,LL+)1uN u(܅{i.ZzP֔)+b./FYA6,k`݂~+r%hqrIx,kSM-"3" {ei3o!ާqа0pDy㐿 >ըi6a ŭ}j9֯^]YM]ѐ, |\h:)3C9򄟦f_Y/c  s A}9jm,%٨>MNlXBfa3={!>wt6`F#ȶIZK# Зf(6Md!)˴q{_p - l*ѰKО *@MkӦw8) Ҷ/݊:քb*Juglbte4Ӣc g(@td]dž;85s\7X[i:8 ﱡ0xmfQN ̶6MOuF#U/;.Qv}c~*=%jv q ?d>+}!ŰͶT> -J̜?gx\)/q -d?߻8ʦԟ ˰7s󢴱aR9QFM%_oSk7xP^oNF6lm $7# :AH.\=zV:'P V8K$qDiA (`+ Dw2~m5(-JM85`%lZXEW|ʑe` ."dqx(@rg5EXyIt^ R?5b-\m+` #|j\QYV[]l.P@eY?@qXb.߾N8~}휸ཚ>sLgBp -/ I{p5d?SYؕ0Vwbk J9fE/yߟ J>K#6\y1<|.={2>Tm:o>)԰u,7iᾼeX".%qRDDW` WK:˘H%P;-|D.xgY:3Zr޲F jQ^KhxU>f3k@etpyaoz}t^ggNP  {{=ڼJ_$&19T_0 -8<_Ekx!5z8Icʼn~ԧ7xKKNX$}% 61BZf)nVJx  (,{2 p>yYk#RTNi`< T#l|,uˡu&s͜_yYxMSHB$>)x:y l'HQ4A!q -K57d1TMsn+R{)U*&0mϙ!R@,9,9Vb\|)}i@U S9$!Ꞟ &B4-G`ZUIMI$VZp$z9(۱wl FX8#J|Y?fS}c `I@grØsx[TWxڿemtZ!bIJ?DNE.Myo&,cݧ=i4\_JME$^3cE@鼏]_a?-l__h͊{  __*m:& -ԏzP7R=XnIFmp|ō[v]y$>c>`pH5a)9npl,7еI[p-f_]ؓM[2OX sS>kBP:Z`{EV F%0pChj2~ f -nCN@wBD䩼 -Oh2x_+R3EI3$}~X4чǕG ݹrE/ Mᔚ@CkJۉFJ^ /(T BBVכ˜K 1_/8zqLG/NM -笊d$5xp7Gߨ?8 †[ðf4BDɳ"v%6 c( +.*Dwuw= ܦ + ñwZzV<ż u-3k%/΋lݔ]?$ mUєT%_ﶂ`~yZ"'k(zA۰"zt~A{=<4띐rS#Fy5#f{4 \F{Ͳ52etyJwU DLj>RK!i\Wl#c sx^B44U׀+%9i\ɌXՎXkiz5ٌ}vc` ++[$YκmTghJW[InESw߳xr=NٶH=×6@kqzu"Zgҏkb; G_K6 yȏKŝiۘH7 R OyQBQV>1νpݳ*`Fys$,I 5(1 I±U}TRÆ|zNmV1Lz@-GTH8A(Y9oL)KkZ~ \ðk(d8C!ۇb|o~50@⫅-Mi!fja`>o8 Uvؐ@s1{X{~}CWx<' -k[:\e8cdܵ#拲xymqXHن(4ɨ+G0->}{=+ cQۻL;b_#g BsJ^ik =+0m|ףEb ExKF"` aΪhj"43 8rEEW*Rs)[YKFN)ۿKt^3)R[bFʟ6I\8zƉPg~\d,E_<¸&8`g ۾Z yr2!m#bSKn/4B$`nf4)OA,9 {Ҩk[=R(9@\Y S 5IࠉWssk`b#Į%n1@"Dd<:k p7Qq63kwr 0Q}.89($FnPRAˌ3zhr]v\`<K~Gm:.XLpJD;PTfѷWN1>&_GIBy|7y=L/zCFω3/= -)={=f- Rn*fޕqI"աfQ#)~£ڍ"jtZO-+NfbzF.x-Sn樻"󆊖 vGp t8gQ,:̴> %1 ~bZAXLNŤrXMu`Pe?Td^9ڏ算+/;lSIrƒ/TD7%R8zM>C ,hȞbr?Ő䟩I+k|6yתCk+ ^r5>EvV0XP1\.T c%k_+ॶQåJ֏ѱoN>bS7:z<qZ٫ G[_5>0AH@,Kdžg8lLt*[)HC芡+6"</{{D5kuQ'K<@,EiO _1W"v@yKnM ícAݺ -n{sqWb+Sfh<»]p:hMO%m>>e!{PJ`TfMC5x#mYȹ,MXS (SXKYI9|*c:UvUw={3}( ZVگ- G7<57684u柾D&ڕr~&6uk>;~gVf K\c)\{!twRwM=RaEfҝF$"qP -I8Pf@e>--qŐ"E]JlHV u%$$])H\'2G5ƕr=,C@hU _$"i@P6?@:Z]fۄ99y/cddފ+eA IMOFȀ?pp'/=Msy쀷ilⓌ$+k'˼d>/i <' \kRJgV+̼TvBDs&vqu/ShFJXa iPlh#{L9bv^ iPvf7D+ -+8kp.(Oe;Ӧ.4WiS݇ʚԦ¡љz/K a=BzeN7 -^YhY31?BC_YgvrE> QxyM]SVuBM(H9C **25'$EdIv<&i P0.-B`(UIڢ%< 0pQLoH̬deNxI2 ?83GL)o:S'T1E/۫2ʖQda8:C‚ - &BaAKA9?NP/[83)fe -6S f?Ft3N6qƙJ2ǫ3g&6D(,f8S rdQ p̲Uf"= A 瞾FCX{* -7NҤ'"̍ݙ9g@ҳ2S|^X˒T 0&KBק63e̼Q0IJKfЍ&,ӽ2}ܻ*CP0LJ+Ԝ*QjbNc`K(,(IYrS 'GdjJ[AkH, +#yFbut1aQȆ8}6-:(y%77D%IJnd&i\ ^Yf 2mn%yHK; - g 98= -A6Zl>nF(Ưb*jnhESn 鼕dQk^ש -ir~χUj<~,lnj3Y2:|exWebhvciszT<5]Cj]t<,~xEVlHB PXλ;Nm1Ci'uefRڢ, -M_5K Zb?~]Іk/U¢45vv\k4ݯLw/&;f NNNNZ k.׫ .V“>ł%i*c^;C4Gʆ,iE&U7hntu_Vsht3h.=g%cX.!!p4,73A˖0lJ -Fgws=G^eNH\6Wk7DZkl8S8vc;#5I/޵<B+36bmj\E^Cf[k;T9{fA+;8+8 ,p | T0˂dY?q:s+&ġ69V?'9izxs&x -" kpll_P!2&П>2g)YGKaSBb -|I'3գhԐX,JHDx+7Dv -~g.ICXSb?  QH((f [0&4 O)XFm;w4$P8LbB ZrMR-c#BBP{,KH(($oL]u`@eP8䨫7eղ$fBp33I MQP8CrXl .CzŲl)1En?3KUt`@)1j m)H'19]űJ+`xzlfqU1y%6)3+#z}0:;\ǗKDP8dh5Ǘ3O2x<ξֽ-!zQQ2)))leCbjFM 1G#W°nUqq%Z+Oc!Ƭ){ȜzP8W\_C -&+{YD7Tӝ##$tEK5jUݪ\I+綆 !8$bK@*\w rHlR ոj%"xJ&uĜ -1LԁfNSBIzS`<&$eH7<̏2$ٚ8ɲu$9 ߠ`KR$*F8(놸q(hC N[7397Ep8!.8ho% fRiB xbh ҲIȢI+CƱ G5@BB5c -bҸAq V~&HT%vU#w͸Ê乌F -'K9QrT auD$`I(mr1I(H(PX@4r!dr JZ0t($z`:?k``HnN<לhhf,7evi4i(] -]U7};m$}U|@I./O V=˱>5B/^JC̩MhGr=ذ{p$o^ltHkF6H;Ttv7X=xcP`K7t9Kӱsc<3nD$#W,nji(5K^( A'6.l%;;˪*ɦҧ4358FN{7'ƛvfHGUsx7ܺu|t -GG ^hR?`Sb/p݁{Lrdw#6VFc^rwqؒE4,C2P. -DʩĜ9ԤPtUJ)g\C2PY^qz6۶MMĔQCKeQ9f^&c(Q*x=P\ET2jʑ#snȳȑ#G.pGY}JJ%qC %p3b䰈AX^D$C.3KB^A"v&EL+ol(NlטJ[%wK睍h0U(D_V()XrtTHPW -`>(x3wo4$YT=;-K(odlW/pZ>rZ7 U7A9wCDO'?cN=]vE,zm Wen%Xg=Gl'1Qzj,8UO旚"(ecrP0pU$*iJ5fqd2Jd Cm$A3;;h'2QY>ynBw'ynq͐ Te50x@"H8$!>j6D8.*0!! Ԍ BGkP;=|T(T# 3d#{]ZLt9/ +ry%gqC>=OE@& ;U d Ӂ^>jxCW,QKݓ@+1y:d+ -V';&c:'*¥&m_cy-yT-Lp'0hӂ pHO(Tċf9qv [YKo+0 W(H&A,#"xRHf׭Y~VdYuOvpZDxbΉy1H;bw'f>Idh ^9;W髬$({rfV V.v]I9#- MU%J8IoEJE@@kPÏ1t9Z>,jqí4*qK:,߆NѨa\OF,d̰-?נ$@ |h\'"jIM5vuh@3@)[tnwExNۚAa%Hƪ*4HOq8A:81pF+ %ZgA䶷z}i>Iٰ zt|ew -_O1fLOM nJʌ'~eķFWeS.LHVl 5E ^4P<+9ucoEmDaB %X-' -pڑAuҽ[U*TC"cxk{H"4dl#L>gp.a"pH]{rdykf,d/i)$;akT }Mˊ,28Yji = Lz:r]BҋT!$s[_rEևWXH\9WQ}34ΪgQs(ե5F: ѬM$u${Y%`\ڛI>!RU{$&eq vgDWHرRvKCܾ{™wo2uvTpmZIs4(#N5S qrW;B1־e:@eANdHmu* FD^F# gQ6ӱF)vqZ2 -bDVlxj8@Ԃ5I|@s>fA)@);5Y%p]h%,5vp/l'SV4F.Vhزl#۟X|zD స2ehT# Ig{B%TS)N }'$ 3%+(KMSH/ 1-ԓE"\iqjn;\d+g^gu[SSm=\DZpC3}o!(#pTƆE3NI BE[DAn6R爪&Г}Ƶ2hb ܦe͘@is,זi(ydnIT=6y W%QP4I܅VCrtt}BK$$w`Eziʗ+nLvT߆5B uNgaMFTPh=Q) NHht!gglR0ԬqU0h'|2-5dR!勔h癤A#>FZs+EKWAAdy5DGzJ,-0(@ wK ] #RE7֫U }AuK*hK;t`QYj5NnRMF^MWD #w}đMW-pv(?z5~Q@+!>pq>.bzGV8x"ͦNg`ca'O+a\Y\4"ǽ=(i*TݠTBRB UfD0y0q)4BY u=h#J\o1a*~+| ;$*шǾvH-a!T?xU` 'WԦX Kɏ2f2|/r]h7r!436Y"Z.4Oph"w'W&l;ge?K|Xp^̶i35OspG$Lɟt "Cr `>R]:Uᓿn#`>%'lIW!?am˭?dL+3N afz'^##_7C;8REDkk cE(qʸ|yn_^چ;X|&<, vs&&`L!|Bާ̒񧿙mG|'9$ L]\Q4^o([f}[9ȞEɄ"Kr'/nemZWanOGB]58ԙ4-O$$sK`UHi2J&#,x4k3/g%k搴 &x;%/ĥ])aȄDCp{ -j+mH4 -y7uV~uJp7hXuzh˄ -IZܬ犢[2!'@+Yб<˩a6G+ً\?P_r"T~*M( ꤇sӼi;vr[RVUzTtc-Օ Rx#uo|Y^uj^9\ z1R!hrk:f\o+byE,  A#)-=RG!ٍ8 d 輭k%mCnv8s 6Fl^8=ER9> n: Y9Rt&NnJ!(afǁ2  Ş{rh2q^#BꪐN*4"a AŭU{$ Zvrw4{u)ml^ - 7BXĝ!jQm_)4xJ+:V)rZ;٫T4ȓD"~ip"z AMNAd/zP̞ȤM.٠!XP^K0$d**^qbk4VlutNRdUrZcᰑP8{O.l֛5Ir’:$IO+#²j-r7o;rC6%*{_NDKb;*jQ -R9Uz6r -]B(+ר@DP -U[/RZ٧! }Mp%PFvY Iڙ B+8Aa/.kXRaIELje'[7h -b([Z0nTG9`.k`!4pVx1{dȈ>,2sB7zFxt lMnRq}! nWg֬"DlPwr1FTgEa~fDJtɜ_[Gf -!7ݪe!Abɟ5lT&g^]\3,CQɒ#xeAW[.I@%8tތ)WlaA+C.=7 ~KFd3+Ek>#c\XQ~Wݼ,.܈vj* G+Apqí7Y5 Q6xQODפ뫨5iO7Z‡h!z@h¿h `*-S!oS>5쒝54X 0IoZXEHGЈbKqhk7fWM/fQCO+_z+Z!Uşyu5>b4_լ"A\.(5vȤ$Ӓv 146qNp+D.#;'>'T2ӽ+6i\7~BУnoU ۀ71 Tx M1zGʷ5SWE(QNY\[jaK Sr' r5/ [Um Փe.6հtjCIBWd-Y6r.Z ?>Axd6=v '*C(!Hkb)6t2>dxm"(t줇 y-uwCf>@YWK a@4A}Rī^џNa{M"Y#Cҳ4O Ri#$PB(RU ?0)n1oc3Ϛ~{ҧrhn9M†xV 4y◮^ߜBN ZT,?=5 +HTWUq!_"VB5 Nه>k{r.[/eA;!߼Iu3ɹB,fsEr5'_~XC‫ sK̰ ]DmHde3Am%#hPG%;+qȿ u!NHٰ mC4uqT:(+ >H9W@:Kd5vMa{chf8$#\q --s&r)(W{EכTtreyY[DX= -Dj//a=Y龬u$3Ĝ6g[_蛙6ʗ:Y@C):>'dP5jשDMʰ萂 )0H^g8eu23oJϙ1D0N+(L"}E4ᵈ!D8#ڮ@dcW6qwASiع@:KDym`A VAV+|eXE!b5Y$Y?)'bd,>o{x\SU  DOy4S }`!QRh{9#zcCLǬNVp"*ⴥk~*WL?|7̱!4-*FfE'&F"\Õͧ̀; _zXW7R^gӀ>֘oԴ - BXd5BO-Vyw@G+P',,шa ijar5 -}zGдlS`Pc&NWӁ{5Ai^P,6S0MV:|9L0E6D EtT \7h\!6Ѩ*GCEU?BT,\/o0wT1`@}|aM : c*_~y;Vb_]"])}H-rjX6i[y=+<م -31#IC:/1Lop^e aB:̪Ջ+BL`8I`|$Y!HJ͊rj$y_bѦqD 3e'wH뗹[@)ַJů>(&BSumO Ơ(!;,o%'fIN–Hi%ۏZs dqi*dQQ)0l+[@m XEwXILղ5Q;@U,B8#2An33EA2Cjl~\tdΚED l&@> ۔Irlvœ tP""cѸf{*u})WYN%[_(:NA)˘Zf -@i1U NU=#HI'je[;ՆuN$&ށXem`s ~G -z1Uxo98]DdMHDL~6IF~LvҹE}vgJXDt0:V_X:p/+Cz~5i`k@?^nt8Cgk<;| V'u'Ɗ3%QA['NBg^×cs+;Gr_]WXIۄFlQxlD_ 47"ГYhxk"8cM h:G".wSr(HZ^" /8)-Aq)9?adIBqa>qegy4sXmkp-FI% m%T{e@:Ie=L+bisXEn,mXc̬N혴^b4rjق:I\ uꔼ!֥!wQs.Wa~?T2'r=8=aG"3܏{ء($MyѸmU`+9$ Tհ1F ¾ #.j,U1Y*0(n@¡Hs71Ec1 -*`놕V((?-y7`JfSN5E4s*b|zyaNGj[IvHøPM$SgJB9R׾DD@j"*g-кK'OFOR -C!t'(2!KC}gl.%ٟd^UR9}YͅSuCkL].$ʳ;_){P+LX[IN 5lIql¶X?;6Zw ;gC8()ҋP(iKOspc!MxiMBfV|o+o~FwƀƝ_i/\;g0+7s1VٱTC& vN!Ys6N''#=Eݙ(!FڻH,[uҍإ -g#9SiF)q5bۺQ,B9qP#HV%#GD[Xώ33{y BYL"dN]?ZDD2MA+rQBj%w-0_4lI՞S[1[t`:Rt#=arM\= xlv" &]@UZVYF#Jو/ XrQy_ -[1_XSH`o̓]`y؅}%_UV^?+rgzV=o%֐VMFlHԋx;~E3Nqzw3ow Mu?vJn)>Hb h*{ Q\ͿoS~{4 ȃh!RؘU$)ߙ ƅd]GT(/N~l3GrJѶ۾)Cz%ssӀ6dRp# T -*3y4w34rR< a_mP6Sª=83ƅٵ c#~C&9l@Wc7ȆDZŽgsR,Gd֥/&6􅆁V^]\j%xuV֫*wԢtO+# -\S dߡXezqE͋0ݳ\r.#d^/$3fQ=ё D@w~_i# - e.*UՋ ^p+RC: -@ w. -{SSKϩs(1(gRVֹ/ /8<[*}L:J?Jl.-W 2rѿ@Z*A&BaC8#{9,?EP;*#Pwk#cTLrs -TwTʦ <rnfb=CDYYdֺy2)'ێW'S:x%-h2qX~P0,.E#lV2ѫBSu>V!)4 vi 2(Z? +L -saD.́8zW!T168A?voiagD\'Uf^L߭+PrXl:B;'\+ $ - `]kHYbH;ϭKZ-Rpd]F*~TP;XZk><7mi Z~ G-k#$v&mjժ6u']h1 3 2WJI[ t8q!c% (;J+.hs#Ϭ^lv1~eKh<(`RРp!ܲA~fyȇ_+ي4Z\'nUG-S'[2SZX3[4!C & ȼ65MQoa "b}~bh`^}@(՘ (őT`9e˃41'z/M"/Y}d.2;Z %|]NK`5Nr,GLD:>Oo1u[04dAS8=?Rv⛙. #)9ro1~n+xUh*MB\CވQ/mhwGV)إMsK QwYQ@>}x:Ǔ#At=?FlnP[Ǵ,]=9nm}r}qv2q,u צ!G2¥Ab;1tq֏eT(%|\?Tす=x0 [mNd/hXV?&4FWʒe߲on'|ܡ, M`L -hZ =c?7гX[yݬC[ rZ! ApV:3ms]a -8hYLZo4 -ⶺ76 R#P Rk1Wm|@ ne1Yžm]?D?YIށM -2Q $0'+*L/A@vMELlrxDRƼGi-~۷:EJbbʶYnי=^X4P# xT] !8l*V6j Ȋ|lbVc{$>z4 _&p'A^`+m̴=IjyO_65ag9 W;TW~A@븨Vdž-(nNId H{R7AFM4'CB#qYL ]M֙3K{9w~ݽ =)C R|Ⱥ`kHׅ%~UffkIzńZg-ڍM2v:r*C .M ~tu Wk ºMyj Qb9*ijRYc4mTG(̲)~vOd_*#Ћcxg^xwU9={3SIfΔ?O&ͳL$T$jr jr<8oa>5FzgbыrK -^E ~UU W ]ؓ.I`\NbYw~WiotMqN?WEqĹMߵJӍt}H9j`=X>$-6ɜ'al'm:5Ep̆lW-:!pXij6zd$OzHd+M8RSMyEB+ -s$KD!F({*܀b'$3q|͡ - hP2[`2|NM ב\L A-xkVu3{ ZbͶVezE: -(%TAnlN#;}G0zlER Ԏ_o.;{W-\rt01^HoKj Lb$?WIո_'o /4trwA:?SRj$ ^MbB'Aed_oS-WWYu*!:В2&s3ewN.C=d }=mV|(Y}e5 -uCP +0yM!Vil!'<.VrPP醭 -Ȁm9I`3 wG fc#חP,O Zw E=/Fl {HX'|I<؜@K~  -v Ə1.Eds%\ض3Z,~o˜`7 M}zC2{Qɨ=}:6g_~iskbkvNP',Z٨4BLm`'X='<]=mgih<6SQ)&C}(]vQ큲 [ E)4 Re] 2`@H|Q3F胙8bM.S'-<|Z2VYrj7hY6%a?І^%>q`J^3{"CJ,0mHXEAñjX_zm/St o{%-\46J\[xխ̳(K Cr1v1!zW[P<t36&Շ4QjxsIޖژ!0DWL97dM2eR:bqlŋҁ 1fV`[tְvEor*;XN W -#|C]Ӟjel=Bۋ%)=X͊AQCQ@ F>p<عݡ?SW#(9dE8䌢LMiQdYm0x@I-Bq⫃Lg1/2/: , {-9A:#˗Slةq) ![^#^yWH]YlCj+D Ad‚ɔ] ĂtwcM^ w B`T]3%?MbfBzaǃq I&VdL^{1]ِQ~sUX_/O=N;ڧ*1Mu#~l&=+?37i;Pv-F_\Dz<8cj?iJ=2zW)l"F,neg<JPX"#)pU }EZM4'su|m;#%|+?:?^+y7H6,1`l&3͖dK.0mE+J?ԀEy:0PVx !>֊ɩwaȇ,.fe>Lc&\\fji] ixcBd*z5碑BJ,C@u.B)Vb>TnghdJ֟b{Xb X\inN驉63Y+.ulnj"6a RWw8KǣMLW)@;J/"Y Bf3:dẐ*`"ݖZtܹ)cC?b`mAE&iI6Ppܠ6]`{!?V#6)ɗchr 8RżUf,+'ObV'z\z W{,fjim+(kg:cMWzHT -҇汙,ڀd;%#daʇeJoK^3S 0vf 2N@} -ZܧpB Ӗ«h>Bx|ӛsL3IK2'cPI”j݌k5V fgu?pQpP3{DάނO@XoC<J`=MW -lRoڜ4 aa7LR P4AdXKm6tONUlmrQ+xV͓Q-S=., a6zG.6rף@$mlJ84ոUewre)G/@ lH!6)`7[0eށP޸8MKTZJ8>8U`P&5 4oE"zPE :OIPi%zܥͳں kG"S2 a,,x ?`13 >*]`:5͟BӂcZv$ae' ڣ*zy$ӄegt9P̕ 0e_zIVgє{&|PY!d M2.X#7N[\&$'@+POFvM٩kW?0I}6JGaH0r=sSDُrS>sv={չϙ8$0(jyWvƷDh09#?GT-Ӳat+z { c( ׎/=wxnG.޼@|d3"{t Jq'$tk2vhZ8LFo3uQs4st'5Q&j&Qww{X(/[} )mjE@Dyr;^($%XzYitK9X+HQD SO ".=Nf y4)&W%%4|P\XU3GpsBmx/[\J#85BeRJHte?y+vu-$eJ&?fruNռշHG <gYS_#3ԦGҞ4<l Q>FSă}Q2G5c&pQxG6MJ_N!|{Hiywԫ[ύd=JPїMj;C_J93K0NytE9I~^j22~ؕs#V>0\͘3!wUun(f-Jj~XRdSOc0(O~,oͬC -fh"DI$5))-)^0SUOҬpSgBrmۻ> !‰7P M_} RZwwp&❏,^>(L +L>9xbGo^><@{Oug=mu8Α$vvac)>dW˰E>q]Nj&̩GE;!&m{TbQH康VƓp[M ;w 0\nR^ѸGA`wWDSl|(f0 -ɯGEm;HR>|qcq=p@{.PKjzlƻ-m"=>ohT+!L2MZK7j 4q2M/TtjKl<;ù$[xAg ObP},\'QL -zg;Oزxf#uX^⮸sA]BA[F)*(|vfjrI UNb.8\`QKTO9|%ru ö΢U5iEX7@|"! 0nW~+xW[l уIJޛ |Tu`e %h{w0.aG3ߒSe&f? "5Mtx*.YH[ >>ro<_H<8oԅ5k=}n;7ܳ9מj -i2w^(8 7}/NNv"c^VZ{(qʮ6p px&Z45'o S/- -@/޴igj8*DK\*XbVw{ޝݥâw.?a/#pav, *'G j9^v˞b\UWCOTCwT"ncWIl6Q5j!_hDUEEdG CxxJ $*|QqY9Gl}\7vopjPϺH@C8@1`ȶXj&]tAcsjWd0F?53Q-` `/t B隬bvlJ%3OG66Vp`gy!㚙MD\ ;HSTc:JQa#? -O-V֮6:#jPk Kƭfz)G =`D3! T_uFcLkUMYlt5W4tdN:zE]eʆam;EH PpWbphn|339r0m&W -mWh1z7a ̝N.7In*1pl:P%E A`~6b01;wmʄ6 WC04tЙEdծukľoanDرSVU q51fb !rMG?DLgJ*Mi۶-fVU$ 64 (Rt@̌m[D뙙)mj""L'jfnTJ5o5 CfHYgȵҙZLhu8=RTdu##|9w#u6f%{< Y"%~FSg!Jz E3XB2FDEw^Gݛ+$c\w\2\:3Euh궧=IqXZXxKD%4H"!G2mI<ԺTj:4 mK - -@")8଴:}"#c5QVrr7!ys3l#B p*[UCvUQBTן؎j!P BVhB!* - 7|,:$+h|Pby -:BNEh8?h"hSHadDD/'TDEbT1h4p"b"!+f:2D%"C5=1tb|QCCTAy D.?/EΊY0DYAJULTCfJ HC4-uqwwW5xVLL|F.{ }.ֲnj֨k`kXaUvGo˘} S/#U哫0BG't>`;ɦdn/kfrAd -c5~b`Quen`F=9ʣ"g9אM351i3"3N3/Is7Hq,60c,y%M)Y)x=%6q)-gd;;^vv7GK(\(\hkjj)*1fCXdS=HznuB#r$#g^}Z yb]O/!~6bC6X7J t0`4q:u)q0Ъ#zɦ͙RL$dgMF+Oi#3bڠez3y4ZH[BʙcFxlRrW,#1))u.bl Os=#\5ng q1=`DT}e:޺/C jSԢ#SR֐ " {tRHP3ǜSPu ʪCD  O8%fCJ;A슃%Ӹc<ؤO=.h@D!J j dBRbrsHlzOQi`1(8@T~E'P++M{{Y!׮ro|ލ:ߨ_+UYWp)[AK*$ujlUMYȮq%Z/∄6BpptƄ_ ,Cq@  G@D@ @ "@X P$p`XLDg' DV_uaȘ6;@, h hX7s2I>7/M%]oL0`@ f\J&$\qz"IE&",֌H"w=`dSppD؉U;g dGW#p6(Ikh-TWXϫ=ZdG\* pȺ` 8Sb9gFuWUv٣w>$H0<` 8%GĴ En Y;3EñzUߡ!d|y]וt:cV-8[r|1Nɑ p( rzX^Q d]^%k%v-[ M8LM劈zyF7qc"G4!TCULoC$YQD*Z:2\hf)w'OͭiVZ*YTpPqU:nnc[#:]˗*LmF;ldry:sEƑى#h{IDt9*RUu&6Z*q$WlXYhI7L'-":'O:DJN2qhIDXu9~w1 :95kTZ &r]ib%:%)ad߃'ߴcj;y՘#N{m@ú2߹ZZڮUFecL?)U$\&fO)#ѽ3tCܴPZe:gLjWІ)rEjx\D4bf4S0p< ¡(Yzn:F6$4NRAb   O?;HP{+DGGy%TYFDCڮڏxpE@(ϻ<ܮ<|B۟ɫ,weZg :nD`pa LR9b}/ܽ%uP C2Lv. -e2(:+fCB\.3 [tв 3#pQaFxt^6lPb,^ -HgG'~hmPhMWNqqŸ́ -[ -/եHdx;55Ę!Yڤ2w(",mt&Cm5dԱ@˜~+1p@"'HB( mnV򫕻,S[k˚HIGL_$C~wJOa0tvUO8gAe%#k z|N>FU3QF BEጝ-mnMv4hu KnG-Cn?ˏ}a q-8Y321SRwd1WZEt!=v:ZtNZ{"G\l•ed?ucckByQ?7L03J:C~L+ *ҡ=g̼u=)d%( mgBe`V$䶯ި0A"z{f%wБ&NAu%EVⵣ\l1׈iHy۲jpD sȦ-~(d'ϗE Fx #ޱ-SdTx~ [tLiG)T&r3]]KQ0uؔ\h7JAM YC4nyq#%&~۱&գeTJxa_ТIUAXU"ȭboW&3dl"~峕.mDLƥ1Dΐ5vh9ss?I 4^rz$5ޟj1W j5Tse?yGa5{ݼRNlqAE1`(d|?N2<8Ű56KcC-R%Zjg@UENI}8} p )kH쎑KQyȘR[zgdrJ S&ɲi. - rvo䃶$_v*% X8d0\,N W^oD$8#[[z -Glς/J -Z;x7t+ hqHhM=R= Pc8NΜC2#g^Ҫֶw5ߴ 60NPH^C@܁)$Wb׾ qn$%OGilDݩ"QjiP ^v -HN@wH7Jw$ec |W JEOjucrht)R" @rW3@9= &]\#Z׆di$[H,W6̮s<@ Vfm2+Jhp m5.`;}`. -r4]w*kaBKW4`Q -h5VQ3WjHͫƠ;O5+MaIEG]lBB^dwM 4 G֯8`m.W|[z̫bp?R^d=H/6RSPk{V)pAGXI Ɍ0 kE&{%N\vɯ|.n -ӄmg5l -|(LbW/S1${\է -FQUbRb렴2O: -["ِb -M?}1?C@Q@Ag틉|L|Y妐Qh@tOcQg120e#gL̝[X!ad+a}62(@ jV|̴5X: ʻyL^~eodpQu~\+-m?p 5~z1̯@_=[F}yET>25 4bD#fɫfIyA~)}|o> @nY1d++ThH\h_.1{~ͪ6/Ta,1IAt';^=޹́Pa:@>`z2+ `j*Kq$ay`YV9zB"*qtLq}j"YiqL]wJʌ>Dߙhi/eǥ%ycU8M!st2jnq;0C: *oQC;0]L?xP*Y64 -u?C+&ռB"R_qCmX_jc?eiAzU"!8Xl/N&VpGI]'tT@i7n<1!.I`jiZ3x#ҡ6-&ugIxX 31$vL ~-ґ$vdVX/"pqf9MIYR&짧Ŵ裁8JwXQK=nE. R&9 -r"ߕX[^(8 t#v_ WYD‡ucy\<,5 Q -Nv7FH|YՎOq>ށ Q(00u%ڢxRgp$2^^QpHo#&^Q<a!3-pߋ愾nיb`1{N"4_#]_a{,4}5C/C +/XMLNode; (xmlnode-attribute(fnodenam2typ(ovalu/Arrachildre; ,idAI_Alpha_idheight100%xxyyww1numOctaves2(2stitchTilnoSbaseFrequenc.05resulturbturbulenceeT1operator2(inSourceGraphicinin2feComposit1/Def ;44fractalNoisBevelShadow4-2y4stdDevi2bluiGaussianB12(offsetdddyfeO1specularConstansurface2(Expone0tyl2(lighting-color:whspecOuSL1z2(-2000#Q*$I%*ŨJ;p(0aAAH!BԴ-,cփ DL9\~$r[n^FM,*wxddCsnk3>}HH!.׭v +kDHh ƕ# A,u)aX0984ڨ^A7t\`#'?HbG)$NPebBWg>m(ٔuz_=OzG1i t 2ߙqָ%"j-alR,2mc[-RYU=~jSbsP$p> i*t!nZi#us-HUBFnqc~*T^Uܧ~`u#( A52VIOǐn㛊 ^ZK@O)9g"voj +;57o*V42YHֆ@C~Z7oi Mk(Nx6/n6JW;[5|6!G"g<_J<%剧4N',]WIk&t5Di}BZj8sk* ="쪇@ʟ0:`g0 0 0 nV/[_cRʔdJ1XzV y \Y˟L\Y"8p+seRR u­F@UHc]0,c +D @<( M  UPAbDZLL#,hB:b)Jr `fʅ||*(넩8Dbm*9TE O2E$Z@U,P X@PQHY$AT^`qʩ U=!@P &(&@"D <O W}bquy㰳q"H3QIAj&BUT<$)zhP@HRGjLi"D4w~(blTE[ۉ!&i  8I @g9$big}5 T-$b<ѴDD0DKHDHT5ۈ@"$/ Kl)34z," *"ɢ172"6]ei@֔/tVbkZ3LaPUHd"D&2Ld"D&2Ld"D&22E&<nmmχZ>;weho/ei( {m/Mv=dne[͛9^seWYBnY[Y f뎵Ŵdei4)dW>9k [CYsXƚ/7dmqfm[2͞4ٱv=̋2])kM)/gpeky1]zel D2{:ֹ~>;(UTE$s{=$9'D@Hr#,:13KAY, L[x-دs}%@ jhnݮ]wNڭ-\OnveԕYYUa[ *L ww٭~Vn+ϟ=xW ~ʕmv_kzoᬡ]+}寕R陟ad$zoS?[V_Z/cN ӄX*˃.Ee4XMӴ?qwqE $ cd"3aLij'w2̤D&212")bb"(RA*A< >tel}m]Aۺ>t?}ܫ{u{C_=s.7\oTwo{Mn{ڜ.krk.do6zW1]2JaYkH23T^w=ouSؚ{̐6h4'VbS#$M""C TQ T5P +H g }pW:|l΅0u[7Դ{T:hFP` c"&HB&Z.*$  + +a0 Ebp0 A,. s:g^yɐ!$/H1M?B(s;]y ?(y_aಚaU($ JB +'Eo1UYyZ!>r[Lץ>ԗtZoEZ0%AĦkf\@uQQ !uUv/qkB̞uH4 LrTܡX]~YQsuR +Lx"zfY8׽Ȫ1LU6ň9";1H9lG!Hmarw\EG/@U(e9<T^U_SwԛC +d޿3ܖw,& ^QkKc^_q8­pW4d>q +cݺ@_8ݱ8E kFPeYԣ4* O~*#жn=7(HEŰǂȖ#)N=_bV Uԯjʖ$:UGUZӹ4:sjAm7ArJD[M}BGs3]2ߦ\,HS1`_SǞ{ւU) YACzO*Q_-d]J*\]USp/"UAϘM0GWPHeO(]QfPC'y##`e0 Q ,7-%o $]!ٺ6*%<9`U8yX U9Q0Fx \ҔhnHjZѬQ,WD >.Rc{2l^>Ł nu Nj;4&N)yZ,j$<.q2}%qe*mU272c3MctU̽WD8GťbpH`5p=2*;@_˩ BNNb's9FaTtx~kdk/.ԢBp_2f(x*W-.ז>!Jc$B +DHKAr$0xPu AlA;z$)``IB~)9xzS۵ai! 5@o8hgkҡD*256 +V!`4V/4,柰F\P Ruj +,ԝe! ۘs=~Tiē FSABQ臠 L_k/]g^.sX0)bG#Hi,GBTXcͬ.IMbU?Xs-[Z2mhH)ypT' 0R +p*v9 +dͫ:6 +b盧G)j:{'A𬍕}?+frhe=Bi?tx*XVzᥠ.H1[<] ɴ ]H_`2-/%5&F/c\6!hkzඈPߎv-@'>dxcni,6ZLXJ%u{#N_+s}V>:ꀧ`l.7S },R}FUUB;X1C +mKrJ?kOXկ7FX:u(,Jɝd#RbKC-nQ(R*lKQmCFɸ8@,6PX^n^I˄$`e[1Px "~! C]pFMD+KCSƏLPAm8I V3gQ&D7J|uj@#r@t7C@0US")YJJK pilt?}2AUi$?nz4'0r/mQtpy/32!hEW^9*yK %ӓD{L:1Tc=-ۋ +ŔlC?. vng.llrp_2Sy@<> aV^YPGϚc(Y~VT\Ջ|gʹX(b5`χz{L,k#VӇJL􂬗BBJzЮ{dM4. +a?]*/)k4sOd,AYXI#[ Yb8S I!#20QؾP |Z wˑa>0TrN.NnEÛ3&.d81M-ɬsr|Nw2TJi/mž7U?}1\?ETr)LaԞ w1s0{.~z +/,6O6)Mi)[Ы'Q#Aqtˣ wツu9K'mg/%\Z +#mV\>;28??w,ƔQ@^`@?DQQvErwMK8 JU0b\~DL褛x%vlLYM33 y:;Mߤ,<蝦A$bE<Kb-|>$NQ~4t>#>d4Uy@8a{ޝ1L^Qu~%;#` +ǘG1&@F+ˆ[$; Ov0"p% ~ Pivh" wU^>K K ԉ2*_|.B9 >9[EJ +# ܚˋ:bCᯤ`ExZTq]\F^V9i$uFC6EDaRKOf'jthS1L],Ibg*¿d~v^C GAK[o'kSA +dۋrvQXHX NQilHcI%i7VFEp#׭e1 HaC:TY +koGtAaaNJ\:nL|%vs}o2J=sPѤn-Im +4#c5]7zRfOC2HcAJ7 yP :#*bibY^K˚Bb<`&0r/8HMFI>uָISѮ10b4 : 1]9lƁTJ $-ay0( +s41<vi*K9){Gа"(9\}44HL\$` fK:Sv2)vcСFW(,T)Yl.x\A.+ HO dزưgPGF>>hh#UX{$ +{ Б_}]f0K|P3/fHfD]p0m$A{~Ra[]͈}1anNCY:d#!, pdSw V]nR‚#Pq)WW(!;*x&3ٴ ķrІYhYؒ O!i=&yajRPEd0băFУfbϤ0a1x!BS +iIX8&!gkѮ384k{Mz=V]#Q1P3AqYc+g_{ӕ1a6@z]RbA`It0 0 0 0 o$B6֤4@d}?1ZD=АIRJi7ӁRP?^ T#&&!h'VOoŁBEI- +@x0 I䁁10MP8$dp %# +_({+ ?*r* f5(TE_YM\ +RI6j娒{OT~48~+i89Q1iĦ&.HOT f68@#'eC$nD&gհ=J*jhl%쉏ʢiEop 魏GEÆ!F&+pJˊ&!)!t*r9JJʬM +ӝЧҨH\nUh2jE +    UPRWiz+oТA|!۩,[q5+j!d0JfvR4_4,\ķII6 GI$ФUM+ Uq|堿rt78P \Q>+V9f9%+RTͷWD*HyJ2GY2\E0R';KΔL/Ȱ{NO VRLhZIGES)}ͧ!""OJ.#<= +k.tLO0hZyEjTw".ѨmuntTIid$R,ZqF/RHyHhnWQOۏNBWм*6ʓGx.I@FM@Ѹq?  L2n&D\A ͢xIh3<s( Gi n_ +>Ap=Χ$WA4wQR?n3MJٳ~X0,( ŞX0, +߱`(`(L/t&{bZN}0cYD/ bXP, E%X(isRĮ*''33=-_EzH_48@gmpX =ҿʬMWr( ^UQrHJc>6U8╄ D +L4)uOE!Vą+)QERWg=1)(' +V45ɓ27w1ƹ =BcbVLoJo%õ#5[kRJL|7UF|쿐-edƓ*{.kޱ.lI}RUO 1pz[ƓZbըS$EѤ~0u;c҇;laLLdoiEUpgtffŞ HD%?k.W*LLǢѤom'ҤbVB.-õ$Uĩ># ,ƴ^BD¨ Vk>'(q=Ӳ> (LC„q -ky@iDG=:b  +"8ʘsdƒu"G"L"&xCQ4@P009YR q &CAbBxPа@'e@BV~}ܙNG{^O]@o"N󋴑W3c6gB|N~q k*:ﻫ0'3gp +MQP:5!vlGhO:G;<(!MH&۞R#嬦GJ&Ԍ"V??q:'mt6A;bU}ڈugsz[kJ=[{yYbgfg9rw|b +eUzRbDu>z['&4){ +Q9f*wf5ū'u!ǔør#ZSh4M{SD)L%[0Ls|“ߩ㧟zWklyIdFg:]{P0.Br%M]BQctI6v9*1y8Sz;!cg *ק}2q#nG<:ѝ;TN|Hzie2:㯗Rc˓9cdci ^ڐ9}o>,0BUL^RJưmζ!z_<1f#Flph*"qҮ{y^CTBY\ؿc kɈ5wZ&t>u=J=5wYS .NtԜt*2 +IYjH8_NoRwSƣVN6t, GLRw/;=\G>}\>k*sbcD-^ݖ$Lߟkِ3s2ERj<"ǃ1#4'1Bֿ:۰yt_Gb(wyT7wx*y+;Oc1GIunez==Nbĸ2N&(,y*DTQ͡&yXDE9X&Q +XTāDž *@fX 8 %!/e0  + 7 +$[ +B±L 0.<&""A FUDH"NQF[j$,xHb .4$yI.<(p xL$,٣!XcY EERKDY`@QѠQ0$,`(fR +ӖH*21 ÄE`TӸj<$K[f4)C4@Z$& +bQ&=<&C<(LLQqj=, s$"n qJ  p0Q4\q 5 @#"qeRaZh4DFA<@.ynx,.b0di0@(l`bpIH8 P$BIDQC(  +p<(DıD gyn1!40&KCU,H8%Z,y<  + I8 n$E~zdho2Mx@

z贷Z>֞Z*,V:Om:l3JrUL*+l5E>s4ikjsk['ѡ>{|&&;㲧8.P5ƈVChz2tSM-\t>EZ-#>*[ sUaL5Fȹ5=z׷5{l:eHN'ԺR?#f/#sej~ +1\ۅbT-cTǿ-壶f~ug+FՀ(w6ׄc3~Nr.NZ~OC2S=M5f/9Z<3)FBT3L* H)bݸ8?cbP!QG>Y9Wb͊vP%L%T48Y&~עz(bL={3O&]-]Gu=c>5bL TԨS9 +:23"s "IgX,F2.`8 `@a a")dH47m҄큠bR6;T#|/EZNo)ynf<zɠgv2dp=S0H."S'V8{,Y>P(DPCr ;yK~riڴ[-Bz^Sk1R|7`'iv*oKfXBt x*]jbHg8:ȆIhXenO{Lto7_srSkݡY ܍y<&0OUeQ,oyE#vץ):Kx<Q%IҊikx8zTD%b顑Zf-=Ρ7]1khCXP +)'2ޤ¡Njx L E=-fF"䯇ӟ\yƇd_iqS- :rK{OT*YvIUI7RU}ʡ$K]Ok.(" duV᰼ 9\j<8|D{Bhl?{%d\̦B(bs +5kE{I\pTvY@(#ia'2j\Q^BA'.:UʴY)U#ıQ8̤~ ?p2r\,Fe)33.SH fVBC,&rswsD7OP[g@4TsZBh3mN}U _>pOtIꬲ[o2X+ⴘ_ygdSn]0\Zxl[X~w s +{گع)A ?HSmbGrDz:B哂"΂x_۫o3FܑEu^WD/^ٔuB$)n "ر$^ρNmއk^. )t:V%֋K >,ˀ>1VV9lm1PNKmx@gE[' (,2Nz૧ޣ>amXn)op`IeΊS=;nZwnwt5`* XUbDS\'+hW3h= +VAF$Cγ_ I{aΦ !!>*> ([jJLj{ʼn}fCEϵ@oHU37eؾ/`eP${["oڜӾ~E1r{^J[¨p1Q:#6P̘$Mą3W>stream +D{,ra"dd| |f㆟u%9{LlrrfB@o)"]ЇQd﯀qc\ s{MKvigB$&`e%JI @KgggPø!kjI(j7Wp0%C9kׁиQe$ź _)1@[FHɿ>ރ/fMqh-~˾}b)ef +2xˣoL}/wd18%5fFT/8Zh7YV. ^H@2ޗ84\F α*CHjypf]F)MTvd_AtC@,-fP +~tB Dz?bO}]F29J083.!ͺgN+Cؽ؂]_@} wv `rFѡCBNggxV[`}}OHNPivMf=Rm|2R~t?6 RI{i +"93k~g0T#s'hF)ͭozZdy;+Jiߒ%J$%MkG~"ON&1 - Dhđc(p/ٜ`Jp) ,uA#D3/OSU&35_\/E2l%rد™a(9̊󂼒n|(Nܗ-5Nڗ(#<v%AP=w2%)gLp $Qt!!3a1g0sU(RM,JHq׫f)'o0xٝU +颢/25Hc.7l5z])Wrݕ ǭPNjj]C1ٍKNTt]r"9sJT;uT$sz3)Y;*Q@NjAv>lov4'D45 +gtd|$>A|*A4}f<2A -)ZFyEpQ9q?)BGk +NsЖPvS-*`Ɂq&U!Ҟ L σg4L;L'zԏDKPh̳0sz=7> Pȉ&B ''ϴiey.Bz"4dݙd;-,d%[[ED7 Cۄ/-sL{pfF;{^ۓ~:) mt%9 {g]tj:2hc?TJ<9U?o gYYFKf1rGzM.s&3^߫l#"pgIyal8l zUGe eWӹgB7֡sf<x |y dQ׫ 1{/fHx24ј7J|IxWdjeIɱ|D ~3tK9F(k9^!>LU/;*;D +^ßFBI n+Ý$[ q+Is#k 3K/1}p ]9N;XMҌ'-47;7+Z˱|9dyS )=tW&X 80&~DKTWO +4);'bRnA}K59epP~"KGh[FX2*-9\'%؛jUJߡ2-yu j)Cb^`#>zRɎe%_yN>fQm:5Q⤣3,r,Da[g1Hc~#79$X{ >n#P u׭t5/^GJ& \4΅9wxL+ Py rcYPo_fQ벦P(pqp'iI&Rrt ߽t.\n%A(SgxFpf?ee>WT!Hؖ:CxT e}AX'_.~e) %11>;Li`KM!v6:ĸ,G=C̅mw[#)gHvLg!oQpM'WEy3j+GOZM\Ko&Oʩy(qGKbh0`C +}ffXrQ 2UaiGzC5^jW5+uU*#X; ,Wdʇny!Z#VZ@d. ]JhϼG'`]eToĤ?\t +$ ?)L.om(A#Hts'1RW T`+MF9m9w_*BަJ:рعb@-JpVHPtP莸"eTH,H4 u/SYmdVmu{ /qlo/o#heV_@^5*i_Y9z ʵ"M1 xs^NݨoQԂZU5ag ḙ!❎թ][9]cyxF/oΜ΁R+h{PWV >+1f3l ;_d=,Ҷb@#mi`]d^i[u-]WHIbB'D˷iلN +WK;V&`Hۇ2RD{y-j8[6K 4 G{`Pݖ.d1Ư{J:֙kzYP^qJVaQsQ#`:fmA6ouPuG8J+8JWGv.VWN| @<$O>&uma)rR6iF\ŻTqk~HMTFMe `u[nB`AF)oT\,<*?ꂅ|SEHvyd +ͩ(հRE@(f[[8^^~Nn4:Dn#!~$ڱO*3 +IEFBZjt,c;[b@=#m Gx$<Ԛ'G04y߶W t{4T3JWAGkSY# +`3⽚0DWNG| ܬ:.!p@fSe 3Xg>pK0``SRppdyY@J.`^lºov3D +' W}ޯ+24|qWTcrg1NA RѠnWȄL8BmV |oRfVkDK +^9a4D# lYaebUUtiY#A[!y&p@7ܺf@`p' H{İK 6 ]/_c#T @ *sQprڕ=wCZ<'OqWʯh.enU!l40iVg OAl3B-<\oD+B:{Qc!_WC~UoaY-jJB̺6hVh[Ǧ$]X^]3^yo;/=GWNȬC]k7mb#bzEz"8Gx z oT>R\Nr}+ ʢ)IwO1PBFjht mj$E +EK0IhD OLa-JzWhw@EZ닌~Qރ OVAm p0ߜ7ܖd1,;'~}oW\׶ʖ-&""L_[pwnƏ mdYu)xW[6zIOI-M]|p7-J%% S?_L6\o"D1Ug 6҅oFogAAlAբ,xl,n}_+eb|ڐk|OǦc  +=;RXJ{ ܗ + Z"A{ dy*ӱ$ib0J&.V9MX0 θ y%pD.w豉f ,N'HdwLZ:*_wsKr 0%rXOG SPr.F kj.iÓu TMv0fzv_W&oװݶ#6!Ɠx ]*۸d]Fu9 ьlGК^Vqc"dL^|\Q8$KԜ2AP;AjRDŽ2\^nՙG!&eJ.[Pd  r+ +K7X:\Q?$q\Jf]UNYnΛ}a({:\4^u^*eO+˙Wc;vo3:`qjZ>0;S/ aP a^NRC3p :+[侺4@WzăQru c47L=خV` +vd뷼#俙E5hwё͟Ϩ9:9ZFM sӪM4:5Uo\JJ?J@ #B\p+<7{mxU=Հ9i>4eS>nJWтIͩb-ę +-IE0woȡyjO-mwZmΞKK:A\bQ6ثCWaj-IBQ@kUlٝ"Ƞ‚~|OnjSbwrl`=vnvR /(e h )0R!y-oS= CXQl&9amacӅkE 3;+rPjv!Uj|4Cw͓}X~BAĎ>>\z k_,<_0X}.ćjz7@/[:B*U [pqRqp1(g?~akb4YTa5T=f vg\FYTSxrb#m?{lb)$i*1n2D2?o!DqE]up J +%}΄h D MIfX0gjvcuSN* +;Jqot;T< +^+ GytJkJ! ;1rKitZ\E:0{#zHe2rGtrf^3eD$5 sBt92;!2hjE/\ sNHgHHto0<ļcVFpIB6IGFG*pGddK; KR@/I5!l(I ,-C:(, I|?mP`LNgݓ!n4yԈ+.z!M3[? @.t7c~JZ vi~ND>Bj +Cwl g;WbA2?Ql4w!pz9jkD>Q2< U +>nrrO]\ͩɼаtnIR$[ܣo?mN#b@#F?(}_$~b9:JJuݮxY~8τF<"d& \'6(ᴯpoKX-LOݴG0nϞK3Aᝈg*6+^ollί_IUE?ԧ}j8T m(3u^Q {SJT34DkOٹ9J$XGgّdm #.qySd]ב5aj2HbTÏ>ʄrVdgsn򦃿 cLv(uP1rmEq P}uNG9a- &`sEa#qw'#AG!=j7[ABNSHDh)_ßz5q ͼGDFXGSMT :"'Di>{|̅E 67IcTU*! 6#Uϼ}P&ߎI&Ai{m wfŸD(mˌ|Iut.:;f#3RW^U11>z+'y&_8qB:ϩ:..Ɍ&4g Cnx̯~_‰iBA*Pi2"L)=6 N@  ؂14 (` S(>*Ӷel)-K70`)XjщRK W><5ZPMPSc8CPN^6g #Ёj +g5:Ѷ(=?W c_~uq-]'w/P 0U  +usZn:S+z+-+Ʀ2ցc6.@Il]N!s8~ģOE&S }tI]0w\ٗ|p uyy:m]ۉi"'BU}s'#J`Y,w *}#,DFND +b)y@tq粢g:Yu`R$#L2(b ;m"5=v1$*d0Ř%oc@c}3JK + +"<~%-äB $"%biFD"+Nq`!Cb35x,Ca [.-T\5wrtIpv|q&ːi9b!ĢY] DNYKeAsH`{( ʊX?–K3d/x\_a*x7)Vќv-ƴXDEY!/^?Fq`;,c.X%ͯvTfJ' 7s"95g3њ+}`Q 滬\U+y4 2j;mxa"cr!7A~yƔ 7O@C)s*  Z +{ +uyi[+;;Ƌ" -RpYj":ޱEܢ-tVEmcY#0ƈT$ʩ(U8+G (J :m#x\Z+Xk<f4p]|~JIh*pמBNt::"&yڡu\ reD?dϲFeGH|@uiUPWs#3]qB>]`PQhr'e7ct +o:XֱRP1H^'^0uoV0 oՔBz՗WtuXޘ=[7ʌbh|cU $X[Wk䭀:HtV@5X_v qN9WKVV3Y}(/77Y(9;n` Rddف4N ;(mk @|dEOpi V.u争9&VrrQrC $W1Q#JDJ.C#IH.FnC#WΒ$? bDt  8Jm(amTX"s2qE0 eQGɡ|ERK봍`fRлQRpCleKS/hbx42P w6aᐛ>f҇9qOcD + U9;EI l`QfIdK 5+gB \,/k.@.UhYUlS}ADivwb~v/j~}b5͔C"u4! uSzAW;]9ӂlzh:~YJR2靶 L'.FwE9s}{jmFPf2u1 cɤcEq({D2}(4N)]9LuY/ ԈZ&hk؍kXBئٖf2A *Tw|>w)'|<`:+z?UA-]8Ѕ]K 5ͧ]`q(Il8Tb +({8Оoh%,#0/"1b*;"& ! }2W,*y%H=Rjsںŵn@y;m-J8&/>yޑT`b!.J. Qp>< B2OĨ a`^aݟh:< \,\FShF9wF; +mI.r'h_HQ_ ?ZA'$ſxU|[(ŝ@$z}+TѰwt.vt&aiLw];$$(ǁ>23F,#*Kf! +F`w Qaꐁzx}.s35WGwtEI%% W@,]=YdC 6#R6 A97d@ +8,>,CofwXd<*xh`>4M0/(^qI.bFn`fEr7)9ʖK\ +&kJmʜ.n͢K&9/8$`:L~mٶ٪:~}@5[KT:BgǔRGWudlPv 6^٧?՝Ĝ&[fEߺpsp31MU3[Mrogf?2sia0 +l5t,e :xGxG@3;A@wXCX9! :Z󄏾e\ձ?7:MM!՗W߇8iXSGqM GTPGxgr:x36 zI6 zKKzo1pDW@\(Sûe.*ꝫ4E@,Y{X@r a ~+z,O#,A-zVp^ʬ>;S.&`QD+C8vM~^@WPӒZ:rTfmR%Ӑ:$ɸ$+ԑ H@Ȁ\m7*=ˢi*H',*l >@'lU5[Ab <~ϧ4o~R|bP7A *Tx)BRxUm2(V=D0`)T%e +A:v>a|nSu.ScY(+zԅםX;u׏0eE}/ͧ6'4Kr$֗f. +ĪVIeD9!%0 +*%*E8pc$%(:xG݉1"KPʦ@#+G#0O P̄ D:B:mcwږ2~ccmwcꐁ8_^ >o>ɂʫPy|qVѓ: +'}_!PȾ8ա8AI<5aqӶ4#\ꈡ +٪:9adqBEb]VԱp&UnC5QxP9)V% :*I_HПR.t5&6Y1Cx( C!fVa+z` %bNg=?4XsZ +bbuLGZ8TK z|tM90a>qB( V +1n: =ϮFKAVǂٛ_Ie:AїC4OLr/;ٓdtvLNN&Gʟλi}P'|֖XiqV:̀Ύ ^N,ժB0-  +MBcOOdjN.gɔ^,ω1eE-9~s'y<%P^OWzvǁNƊIsSג"JLNz@X?G +\Ur%PQNq}.(`ii5{VW+#(KJBr)-9%pf"Yr.u:Yr +#VH粎Erʯe&  M0B6nbmbz4" +L W0( Af Tf_T!Ybp͹:;JN,R(,>9>m)C[:5 _i[fNX՚!$a?NE)i?7z\ SsC沲õ~C"Oa +e搽72ux׵Z 9KN_&&QMzfwm8!YQbzy憽N:C.bI\930;2_TS2"tQGT +F1(t11qӶ:ԠbF򡐜)@L(9zR+?7vNNg?qZ+WV/?YЎsܧ6[`o#uy, X F(Z+eiiba*I}s%H +3ㅙ?M=:ڜa&Hcvd#p;m+vd+|-p m֤P=yG[SNbQYEI I1N8ø`rPBR"Jn!}y:|S-(#ƈsaUS3]]BX.siۘvi۪DONN"\jm~.R] 2jSBVAU{~rMNmxd081zA蠰_ ?<TNa֛vşW{ +B'}ђފUrmWdQ^= t6Ӷ~m2ݰF" YtڦvVVl\@*OIhARD!*q#R8shWgig7QTL URH QXR9K׮tc6?=\+Uti[uږx*B?>NN@NYlu]Q5f;m˜ JnOgòB`+p7b0&/MԱc@hѯbLkHr5rI\M&O&jJr~z^kÖ>2'Xk眰|m'hw=u!HLPpw6 GޠT=K_Qsn?`\0[ÿ\o .{շ.+"䶨B${+`PG) l($L:m+L{r[T1=!.w(U:vW[2Lr7 ^pXP8LK J /.FqVZkõnrv +- +P;mZ6D\ĥ܈JC$ǁUu0ܠ^z=:0+٤+p0*s3tmj+ 3#ӿ)]H⬂t"5xA^0>iۨj:')9n INRG.`g{#Ce/wɽ;YK7u5r`]uPwXAf-Ȩ55\*+e QP;mK2y_u6M+*O)<0!Fρʉi!Pk[([pv$!azӶOm5iX,QNG`E԰ [@F9;MW`yr~m$ri!rg.tz~Fv6)X}ffi_'U⹰>|M9!)5e$t iEp#ge$G؟ǖ\0U|oJA9cQ\]+xA{i:Qus1kq}8#;TQ4'9OwBHST! YŇ骁}F&@p[2g|<u9|CO<3G_hX 0ɇIRbleVs\XkM9UEP  e|gv"oykq(`F~3",#9Jty8+mclPʜY ]WL7\bmSP0jA\ UVTFq{k"I!9ં +,gw?s'J%NfFz.L8О/Y苴1wẑEю@QQG/yh`j(<- 䨟s~vpe~r(ʑД:q|Dr :{qR|:{! N9'TZNsa JΞ[ "abۘ`3Ѐ1Pq#PNT"r.g?-F|Т׋%g臢㋤&$&؈-ՂJ8!'PiXPEi-I +iPEi +j|_#%iPL-ʹOYח {H?bx=Tmđ]ҬShAU/\Xg &ruZ$|!PN}>P4Q @U!#CcL'/Vf\ﴭ?HQKWe5{(Jĸ6}l>;S>gxCR 10< E1b<3=;G N:OI-$E0oRu'?+zCANw8̉qrBr'q*ɂ7q쏫gdӛs`K'MR`:/41i&,)z@:Րk( +곯wu"I_ +<( [_ + +F=C?UzT]|] wzf{d5rQrDXo|Bʩ:M82dqQ/RDQEQ$'-BÏ( AyG#P@ƕ;؉1RF<] QfA~]Z$dɤ 2"#  $K.E0(H@R(. &* F0$EaaE$$~?@]~kB3Q!`~9N=F5-\A 9]*@]I#q e3z]"]`4< 'QBpҎgVt"m"@Ftި[{ƍ!M6.?4Fr#}%Zcγ +Q{_1#fFt"߮[0hz54De1IP*c]+ŦREEP65f2,$l)nߪA&P%fδ =6S3!TL;#$uЂI̍Z$w Jr]Y6t t.M4XpI6MCYViS\b뱣=l5fש:oUiT7~6٤BMlE!T&0RuQlk!7кU}>YwVNjb}n3ت8IЪyd kF3i^EDA-ѳUՊ@XÒn=„5!ȵo>Ƅl +# Ixx ._ADDT/;LaXDK-m\Z(]gWbX|CVA퐒5n1vXl;C]v]2p( ^-KӋU'~b]ub]GخO)iH/k{v 5D]G۵Yfڎ1F_݃]UX _vfЫk߮v0 m5z5勂Zʹ(>;J#_-Ѳ)q]\\$o !Md )V׈ol }ku,Ĺ^f5[j,9u;7+хqBpL +ʖ@$<ȃK FՑ\= ' RU?u=1M]64l*[{Ha_8Je36,D$S]B$6Yae$$' flG5R͓PI<|)1XC?6i{($q68xW|-Ma3Uɾ{EHZ-l1]PXe+_R 5Yr`lXiݤGټ(JA zV`IV r  سy?Kޓu/T&OhġB_P-_+cӇ6Wz''_uCuajqRV_z4,Ԧxmɣ;$,ĢPu1t:cÉUBiq6|5S;Św⎮?1M[nXI&p 4%= fԂ)WDBP_H>CWw]v UXEp*p3 zq s@9t0A;𖘤mt[) ʬ5*̾0V;gwY>q`U YU7^cD2VdIR5c䚠J0FOh3̞ޓ?xZ-db#[*8dOߛ Zci g$)ƕ^Jjʭg;h%TޗW wcw1[{'uV!.8jep2q"Wպ~:u#Xi +=:O2@yf͊MǠav rY~ɃϜi*ҁIP4&Hdzif2LlZ6'(jVi +JU`[$ʼnSFOl+` "#әC '`Qu5->Fh+ŜcQ> 3[~RM@CUQݙ7<K\Jҿy۲3PPVY gpm7'2-iw+th&JEhFڶ2X`b` youD^AXm7RuA&SQ +yհM0J^tT-469j-kAĖR%Cpy?zb<|y؛rz. {9^}JbH?1/CEWgt AAmJT(>s AIzвV7̅NsF`22hAAJf4V 0O' "%bzT7-##2 hxl@_[bv, +J}򤡵3#-nNmbl|:, X/ + 3 +C܀qVh0P:Wi[iUKJN*#t Nր+b]ф,_džJNc"zJq_b-r,viv|.f/=h=!w/*j(1{USI޶jl]d4$щ[Wki%a~V9%iD2@'VH,U 'MgU/,hEKQt%@imZE?ķGLO= E[.6KS OtI:Nukc 7J=ϒ*8V1]03AOP2g^ԚBmY,Vz_v,X;p~u a|6X]# <ڤCq(㥸7m{ +5q߮ ScTQn8u:ds}@gLDm8 rDƥ+K`oLJo|{QKp}'֩(]6d|1Ч0"o%2ѷ3PNq4 e:zgP.؎dXuO|0œ0w6UM{*b6iOHKCeUD@ёPR,4A g}hk:,r_e,%\Y8y4>Ha"oȤ бtbNӉt /l+ђD'vdE<vp#=AOnu(qcr:սLnqLּ vuA1oKB=Oޫ9Eͳ 67!Hl.n/C1Q #)gJ\&V׻zBut]kT>4Xl.)L zCԷ?()JmN"l8].tEvIirA(iQΠ +I +QV~ uHqFOnĜvCސDj_/TYj4nyo*~B#I&y]t*'Q V B[8H[VX}!Q4tmlPf*]ݜn WZanWDI7Vt]`t{EQnrn\v?7rJE6Bv+FsaR]_NQG{bʌ"[J*-1ٺ;/ + 6l8D"%TlZ8"|`GPm=V7l_CT#jU/3vCaRk{p#Q@}绳 +U ,:H6#w`Ёl3o" saxC0woan=E%Ad_P4Q8y%@K׷Ž $%,Ƴ=«nHcq)t?` WJ`*u'ȿ{% IoV2nՐ5 TuX<ۮcJQ8Y9F,":+h t*m眆^<%o2 !p 2/j +,;>~EH Ig HHn-]t@M>y[<ƞ% +6{ml+w=(5 h#8AIe1mF3OR6R%TNƫغvK#*Pq}.F7ުJxO[gv+sxQᴫ84UwȔ;CmDH oѠa]RGz=MBB/L.IJ-EUMH8<}դP5Wmx^ md$Q3\kњ>U-Gzf!gwQ^}(с侸4ICt0rVV@=!s[e$ݮgzr{+7K 2 5/p_1nJ\Z`7/><`b3I_uj3o_jS̚UŲuhvͫW^|`>mKrCY$-h^Ħ,ZY~ ep0]٢a+隡˖xjgKMD@O OD`2F}F/(~O 9GDrtҪ\Ȱ(15'zitN/yZ.k b8q G {16>^ЏӦw>q#giv牔4wv=Υҟhp +:09NO=Ji~x:nSܽAMBq@$S0 g9G+L)?yA _*+D[!x/>ySImH!b4r=^?zTq7aMȁ9P;URLHQ(=L\ϺmsvԈRֿ_F2*bD@*i6>hhS3!,a" + %+p1B:f!>,c?kUѵ#i.8URy:*3lqImm-eCL($8MOOD9UPyȀx4P0i2^Eb4\Q;p wB@ۗC7?)X7zE9qP[ev<!bS}EC4yD` PՌWJ8n>đXgfa fDqaA l#m6IN3Avb0hu1AC޼TQ)3¨=8+ +`w' +b8Ǥ7s};9lyB1!=pMePPe˄-v&8t{eE1B lD=P3xjEBmZTj-ftLb8?ozmךce +WǬ#gY5 Oz/ dU h d7j5ycWj<3 \ +{o@< ޮxX0ٱ̒1 0f'?F^MUM`aL +!o /[(c.|{!ys - 66XxO7=w + ^ϞTi Jev7j6P|l0Nx7+*yo?V ߅9#om 10ɥ7bU չZgD'1WX 3% ɓ]AiLjץBilsi;[!Zg] #=^o_nuoJrzR$S3NzefydY:$.?( Ic?F_DhQE L)h00&*.#8DsQ ++& +`3lL Vp:Oygk$ Mwzһ9Lw'W#T}7?9mWw _3(\&OpM଒-xeϵ +}WiF5NrX_kw#%S; 0~¤adpkO8E"N:j`=FUqB/\Ű2Ƌ\~+^\|Y`J]B'S7V 娶|C \.#O5] 9fĭ>A {wE4[VhQl[v["/P@ K4nW1O5@x}ߜN1ĢrhH/?^pRMQ=vOmP:b"] GrǷy2=uj3J' +9]\mz%{9^6Ta=Ns؛Ot6CM 5~3xq5\D5Yu޶ADщFTRR8%`OJyYVqh%iӣ)%A5S }NƪL$9SD#zǂ#ڈXB -~T:Y7~yT&Jߋf6#Ȓ'^/}=h8aFyu'D!R1I_3j$0 !Flgjj%C}o z[R +#vŋdOB KLtm] y}F:79ʩwc|Gt}}xRm32/.&Sv33uM{P|댓3|Q-nk]ܝ_aΟg7J0H# EKoCfZU8ilO>ec=٥U`4``HύfJqmAQ{SᷮSZѳu$2OgtZM{Y.~AGpBS +ʮ)_zF9.ޮ̼B2i9 ɕ9%pVTY(YX +IRZ F_5R!!`qyxX,<K^0v:myc0@3Nm:n/w%|RC=̉ftc82"F?ai:%\gPES +1tSX5eS,ʵB +{HޣS˜|"wcXk/sq"0ElT>>Q7bcash2沿Z-*(dl$Ch:8ٗnztpU<{\i- Bb̲5=DYU{P jt\ɢ?Y El>vh*n?.$(^Nf0p;b -Z@nH(.{_*URy0 3Oyz_%St5Lܕ~2 :_b,!*ImF#[&zj6엦(hk 0lCV40e )NtCaS|S[ᇓ{\NpBXGAh:aD0 +ψ*XuR%H~3FFA_ ų?-@75G[iS41]H4]2!&5o_ړG +lOp͞3c@xo^Vf5haD9fxH{Dm4O[4gU Ϸk(p" &ġ bO-Lƃb…F/]dpZqm NQ[BH.q ?11#u se#E#+`x0if L#<3rŮ4H >HKFc+4pX: BA6F@2Aa{5$);n#>9kjetY+2x5GmsjJYGVh~]r&h]k*Xܪ:-0*FbPG]EqOu Y&pIwiɤ In!k]ECqq'hm$i2dBYKďJhTR$`F9\=m +(ݑ@V)wN'Xp]p>}O8k+ޏbvj)Ǜ hIs4L`0.+hEʖ:>MŔJu5j탎RO?Co!=3kjv9꽇aB_ liZLZTR빨Uy F(c-d&,GX6`*aNuMs췭~eԁ|WLT~UÃ$ǭ^jei01_Ի:x?Tx)JX6DנMF}Wfhl"Vmqir 2!HP :jK+h,5aE6]x>Y(9Uqf w[ZVh'D\$E.:UAAMS>Pc-ʓLs۰O8P+4QfPJ?*k.e9%3K] lp&τxSf?|ҽkL6 ਹD&ceuCGql%TDKiQfz 2o܇Th0f$O4w 4${b|.@i LNxh_{.zVjIJn#N=4b2 X(Dc;w6IWf '\z8&N#[e.5Sd&BOt9 ucXʌ>SӦ +F,3hVPR5%'VT<]L3̌ݹ;dfA'DژHJ_*nCV Mj3M9ɶKڅȹ\8mzoµzoCe>K#e0)"iZgA@6hҋ}ǟa԰u4 q>y,'P- 5E-Qe 6VX*>4gѾ,87? +%Ex%?GۣoC4^D1ҽgBJFe`W!$+ X"=H(c{/>@ b'W3m`.UB'ױ8g4{ONKp1s6mZm<a :yl7fh):5hK۝˩@G7ŋz2!,^ZԖEjOMێm6f+{Fc02_9HI% (-Cv @)kץs#!W^w1ygh0@;ܿq1@ԭ sNU>n{c1_"QT"Y FcjŻpCP7Wy (!@_#af[ #R +(929N=[xO0gFmCpA8: }} +sWbt&RMa mhN nL {XI_kgI]X씝ō2Def!Fpgn>pT|OlBۚ0CåA4\-a92{ރflx@xD{}"{>G#@Oa$>%\M3إL9JQQdmgewk{ɼ#Eh"_{ G C%NqS%Or(N+ +SBgUׂIہxK-Q a}{< HemÒ)bĝ a߀S FTrC +ǒ=J$%ZG9a] T7 ;buRN e*s|ٟ<_P!#n8 Ƣl{ǫu}ڌ`õۣ]Mh)d[%"D+❁'kVPkX[m * Եz!^x-S7ez4⇥j6d{4.B`QXp#L3ɽ.\exg}G| 2zȠ1 qŏ$TPW DA%@+\8|aIb7c3>3Sր [Ɖ4QVIQKw@fWnЊE0 A}3ǰDX ve~a_?h.+O ++Oֻj*א f>YF$ȧf jX9m >"q({6mio,g> rD.٧/ڎ2=K/ $HkzDQm]Tȧ.ӡ%wÚB[:9Nd;+_͹F]7|'f%[t( fl +-($eNS=b {`->&hUplv(#d˙F­K@x:arp أ=NsqգBS{;ӰD B;U ["(RZ$$v_0;:u??N.M-#)%u<$Ru^v jgi Z%SCz x瘓2S,H-jǃo(>2q@T^n ^ t,TE-:Q7@o5H10&cϭ_nz#l~w q¶҃+9}n&@5Ȧ\ٛ &&bwmyӣ_T7bn^/;]8Q4z6Nxʽ3'o(>,5 N;h'"̇Wshx)~q釔HHno'!XT $eFf$enI?(r R]MV_Y + ݽSw +&)K|fňh`*x']+=/ՃB7A@0 ̋0p%w@rqVP  +­UFح@)Wb* gtX:h6) ޑԤUZ|RTPhsFM Hm}lkv*g>HTyV5@@.h ;#Aat@A* ,@ 0h0˂dY?q:s+&ġ69V?'9izxs&x586Xw'Ty u4 Gz#bɘ4lP RYA 4dft8*FhA2*jH +[,%hDy:Vn-}a枹$z +X Ce;Ea8A0&Td?mxw"!4dK*w^0-Ät$@SB Z8Z +N9&9G$6C&Y IJ,a0P "Iޔܵ]qۂ@7eղ$qp33IFP0 +«4rX Ѡފ]8rej,L +DqJ(TtttdTtr\ lAp @T`Dh -?]KINjQ/BQ&rI9ٷԶx:ziAۉ1}l~aGAiJ&V [ b,+9R^Q2IC+;A+v]~WL ɢSw`fzf!#39^)c<DOG!RpbOR8aQ0H +$50ؓs0hACP@.6-J*XU mLi?m~ZL*xTKO njcMapTN=I(NGi2t:af"z٩8)`i?_Y7$,ɜ,Fff12*Ya1DCZћU *V&%%%phLMTQSŘ+Uðnq* T-U6j}<1ftE^yrm~#WH7Y"tƧt(<aL%ANKE.z\Q*V-ڇM\9U {@j!*Ragؒ3] Ur4B8ES*jrjZ?И%@`^`Ijt<%1 vy?cOR) x(CY,;^KS1l5ʼ~DuŸP&geцp ┽u0{ƥ6a5G,[ފ@I +(≡)M +,RʨM!2.Sű$ЅW80*6)?Gz0RQ!E RqNq)b%y." b)7J*m`X?C?Y ||&䍲 "hC&:{0NY]hdͤ7ķvH4C:ṷ̂;Xw9yaE8 `!M(C(a Mꆺ*}T:S9,݈ȴd1rw⮱%]PA,VP Ԓㅧ@&RVN%挡&ڦRJ9#]u{uj7jmt۔LL,ph)騙UdDT +""^ T'*W:d2Lh" +LYdYnfg)EYdE.e%gA))"_,PR 䰈Af!3$"/2=3=^0xр9P S"v.L2Ջ&TɗY$L,oQ>wQ=jg-\cRQn3/w6LVң1. [[,}P wpQ]Q0;4f1^1!ȢiYBy͇$;~4JXN9'١UN4}&ڂ ~oΪQ?`'oeN=<*e'Pyqw'yq͐ b:%\| :=e;cacnjLaמ"yܦĴ_˪wDi{ ќ.ux ilp0oΎ-ըwf3I+IYYnzom8uR%f04ode5"I 0x<"H#4K$!>l8D:.,(C01 K`7D<\_} Ƭ5P  $A&"ơIp:p`=>5("o_Ϭyj0|+i ߓ&RR +[F[-=H( 2kx'K33F2]$@v+Hs? .Fzհ_Na2Iʇډ~:iT e1Y2͟#w,4K  Ia!.u&8a[M[B%3(Og%o|9دK +ZT zf:^#joXe8%+,m<&طyV&p+9!kŚaZBk Ĉ /~e7=E!0FN}i㽙͐VD8;8`O?몿-T-Ð8%rb-eh*m*Y?%.YJ1)5FhƦn t=]=f 㘋b-m$+_oVU$3-Hr9(\c?:MjDeɱqD.ö_V}.#Y3M]w-˺TH@̏Q$KNy#&Zm<{Iԗx\>Z9;[k`n(Wb6q͂ػ{ \+:Ka6:wYN*T%R?&^M @؉|D*mD 6K@ė%]pK] e/7ab6p|+Dq*@EpM8X|,-K^@"8&yZYJȎx(ԨdhJtΡ4iKe3jG9x_g!yjw(SEn<}W_2n#j`.Qv`ƙ?dmҕ8xDh)KFnrtNLglR[*afT,֊4<@z:e 4nn2rW_~T9onSoNkPO +=i:p }aH +<u)fmƵJ b2'W( MaJH ! J`ñDyŖ#ʱv$ =LElKw<-ž"w,]DS-i>9v,I0/[]3BAgG&餟xշUqQzPB +PrH^c _i}@2yl}j*&DbdwR&^{:+ n'$"F҆@04RuXq")fq-10;\^g*(~=U |:7q|"1C m~8Ɗ)*/^r OϪ]*5|s跼xzōYtG%{YE^LBD{c&AG}(^۰>¯'^yȎB#1pĤ'X&뮷Al[iƣW`tYTTw:s'g0N]>54{C;6(괴9ڧ8o [KJQyL4 U3=lĎ0~/Vߔ"LNStf$q0C EI2脺dշ-Íd.;.g9/#~/s©"KoIҿN. iaٮ]~\sOL'CVKahg͕ XS @y>3FHIh kI8?Jx,!FT5!Xg4GMTAUg; uePڏgUλDoRVn_f!mI0{t,rRFW>P +eD])2G>(i LH=fBxQunjiz"i}*f`@ihm.-nVZcei?kH"=oyOtsPeĎb-i&ejUX!MY(Zק_qxnȻAYyY PS &"MQ:MoYǐ*zv5 +cdܟ +D +TئF9"dm0&` +fGB4 n4a%p@鈮I$=ȊEOdsv5vn]y^S:f c{+7[G{Jl1I(I?طCJ\h23o$ \kj:0hMy^4LjEJhHzpv:; T.'\!A3=B섦[2,']YZC,('I*}"i!W?4aEikĉm)3COy`In)tRMe9%T)*HulVΈ&\跘a bCEaLL'umhHR ٛ~XdTcEK#0+jӪN }쨿SW@fBl9|i^ .74pP!$ "uYMG hr1[W&q/=B@tuf 5#y/Fm_qp1?:-aQş<DdCBAy Q^%dm +f@{/m;}M! YPt&Fj]i!1l|rs%Y%IY_rRڋ(AFyi٘TnC+PwbVӌF9gפgZn1y%L3 +:D +VIA/BhPf0Yc@',AD(C=>|:J|[2&G0rt4{RٰUMx-]|&6^dXT)#D-mokưX10k !zq\1#XgҒ[VL$AL-%@ +4=l EPg`jq|"EK;x(23?`hnC'D>r=+ܙ['56e]|  CШmԘYc(ÄhG8)kˇOH4`:`Yhcqٳ%+q[~,G49MC*!$*#YvvøfD+tߵZ?|8*'kY <o:pPI> Uƭdo#>|;|c%);at§5;mÖw90{BTtX+ 34bmxF-4=S_8!\%_7n(} ,UvJcpyZGE+WTIkїl[]Qn``@tNn8aoÜEO7-j[}$-tm+ͻPNb@+jK_PW<bkbe3{(n7mn(!mEfPdC+˼)1v[m._ZDq`8n"ў v?6vnVlDZ"jk4U ?] YeOtTz;U0Jd#2Hgw/ 8ɳlN[  +muC#5b{ÏVvik;q[Cf$ըTq4m} REs,znցc-|,h9A"'C s7sR@uv.]`+Ty=j|31 KfxRܪykٍtd=y i P9ylvriyObJz`Ie|#18)uZng=-|&@J/[t9UKm.ϣf XXN4>'S2!n]֭s-QXax򙅰T9)7'-C(eˌ!E,u(]l|clhXp9C;[jHma%ɧm 6;crЂ!i#i>Gb ]k̜"Fn ̎5yh!U4"@MHӊG iYCظEwPD%˚4DY7/ h)+?o&Ž6*Ô锏Jee^qK#DQ nQ!`D(L]s#],N4b "VC67 ضhv_{]NBؓSL,e:g`^u@KȔC!  R|'?G~?Ǯ x= e aCWAc?]_0lVejd]'6P@M{Pz Ă:`2ȕ4agdFp#`wEA/XY3 Y2ڃ&{t5Q"VObr6l=hpR8 r)D+qJ6oiAB&{w>!syBȕê\eК^~|$b&|eg1&Z ^SmSDl)}PR#8,/^ -ӭ𡤗] R!W +Aűa2 9&SB8q¡n\ R|oyfbGU?Q.H]b?C#Vz_];]`&X=>q1uFEJXE?4k`|W`'|T)S|Rˊ\/1Y !ɺǐJ%8L;ڒ5ͰAp.RS5ٛ:ӞL"1i$2%?cwT] CBe$jk$K|^k?8D# y|:88^nغ8QK˼sޗ4?!|5Jz.,w;X(]sz mwW" F}jC:1զTIʞ3 lm0MQUPqM XQVlf d GF"Rݺd?p-Pe¿?b Hq ,Jo1>:?CuþW C6ILMZtf+/߃&@̖,<&k !182LBXpI\М7j͈}V"W=s824EeԔɉ_z)PI +s}=km;&E^f$SB]#:i:wy$3@hKrjAg12GnQ&1FW(䂯b=J<+ +!kZ dox*=r D}u-L#CPd3Y@,)@PqvB$ҹ]%1eYݹcӂu\3cRdTBLՓW Lءclmf`&#Ȣ9Yg%sb`8謽 (MPɚ;_ 5z}CgL_!ZVFǢC rĒϒw +%ibMΝSx̧:/w0YC|E!QwST.Q5N9EGٶmd{'{w: \$:T@'k&JA)HKI NB3YyM.fW.jOh(❞>d& y`,^z>Z|] k$?SDێ?F4JT^q"D$LpX tE,4JtM.Ó]gC8PoaSAYdBR:y(Y~d-ƶ:PwP V /1J@;>jEW;yf75q|^/j쁎(L[od9]+P9'Iˈ`8A,ERG2٦tߗүCV] ^1i_M7^093`-5\H07wOt4 ]_}ZFL`VJ= Ud Å82Dpjv3\V8PgӁ(N0nЂMzȎlҥ +tǃImG5 Wgqm{0墒&KI/4-wɢ|!s.%M_YzI†MH= +5y"$wQ+?IT/X-z8l4z1Q"-NjEjycL㩽!mnj}ЯQ\&`9RzqNf,g.@<2gq]T8fO}2{+Y;qS ybE$X{o- 3 l*Nyy5t%e Ͱ|lFK"?ԇ^Ӿ-b=|V)NBf3ԓS;.( ٓ8y )JΘ > ($_uX@(?B.r'~ +jOb50nҞ@ΧtmJodg>᱖o$ ;iq+3_w5,S}駄>M_O L8C+aLuGnsb!0 k,u$uC\gI/>D!y<*Ag~nN{$}ÌWeWUƮՕu+׼:zwtE$ەHM<TOʵL2+@J.H[>}C͛P5 ͕q9g GuC:rZB v=EcUW$a}$R̞8p{ +NlջI~3]Y8n7=u 8*63V ZZZl:/~Jy̓.L|yZod-p{9pYsr>]H[:e:Di:Oqcq9;q0i~t6. L$wҩ9/VvpÉ$*6`H09vgѺTV~h ;{!aPE\2)ކF~,,gMHeB)z[׈7WTTIMYh60f6 +yEplq8} H&o Yb`ΧwbZIuz:"; 5Bae&h-^[4 @K0nΰ-9Ig(J>bԹ>Ƹ9g-"Nggeg,[ 劝@{KDeǫ XB7/_?19F9d.SjzG t`6JҦ N@2Z3w/a4`MgHmbL<洲3RY9?HvGgO'EܻHDA[z [-#1a|_O=hcn[I@]Ecw-,4("S 1F>=M>_6!4Pnq$4RP2hG~٠o`Y_N_79`8FYuUod +? Ҷz#sqI>o8V|*+WN}M`Q,Z"0y!dX. / Z;Lɮ~W%,Ei*74I/W]PAYhA Fnw\TIvŲ ;̕*R ʀb=Sğ~MBm@/>Jʯ䙾`O|r _1⚅'{_,Vz[ l0*Mih89DF׭-k_lX-#o^e6Ϭ]OwTf>,Է) ,%i J7ľsj\>19 \y-ӸT:ƋXv]0Dz/5f ;X|]ޚ n}0cz1[|?Ύ" *t&rb2Q;|˯ ׽h F!x΁FxrQ(uP*Ү\o-e,_SPY85d]+ RNQҝ ͲfGKLK "f6q 癓&]+8q:ybgNfU^~Έ8U0>{lڍ +­ƭ[n\P*\w`0T%..?.PNJ8>ڛ/q}t}ĥCs_Lxj|^5`1u4e6 D΁ +\eW=0t]K{wy"U).rٖ:eI2cl6 G^ZiLzRk{yW ܫ +$v!֒%W] )'J;O%$Pςn y֖SҁwV-|'<"EՁ1~]7+ģ=N +֕ ^gZ MC @J}n{T|YkV Kw-qqBAjn ]<֎09[a95&O9;FwRV]yc ;opZ;A7Nj T* +>b$4\FY-p +P'g LvVM%-}LX(՜uc7^l0,BrOȾjQu0Me#zpNcRZy3k#C>}d籿F7Ǡ>r#BJtͱ]" 8b^}%腧tش K+l<)8Ue +9 ' "~_Vw:[͊BM>*mNu rtzj(܍쐌$$nM؞?P֗Q^p}nApO0C3Ld1{y =$\ +Vҡ?(hc}9K@:t1i=P׷REeSvh♕u`a%bɌ_[!ݥ5yk_s:@ +7Aqq۽{"c#k>m𪚸2 JER1sjt0DGbbB׉rD]W8q6Q}Ov ^E@w罇tU +;rf k$-ݡ~}el;ݨ[e!D.t[(HCEFE].R?HrrT&tEt(+ +X?xl"Gi =Gwavaya0iي#NřRh0_(')-X)\Lrp 17Oș碠(\ ;* tELek]h(lϛT]5&p$^Ahd"l|yk"]=>{I.4 _Y21EthBHUS}* +=Q>4mefCA +K#(顰ZܲQd|Y,א:Ho'xjK03=R-UsT`GhJY~8nW;4BC^ҭlfd0 zM§K]gaMz(OG%ϙൕbht~LuAŋioF\%ʷ[O֊e0wa׻{Kpu_&u>ef]CŲjP iN W\[p$`7`'Kd ehX?,r#%D̚^ֲWj2'#$eÞ}KB| \r08hFboE,5:T*",wZ؛f^v97@u%H~ I$|s}BbW%e$t$I~xk4k[(u +{ÏF&[WEq;0֌&Ŧ ~>@``QR bp/0c-{6}f-i)&ZíYiUd|kKV2,A֔N}SϐKed1[cAitˡzec):FCN$e6xշ{TҒXI\}qںѱKҲ+Ncp'‘857z،(SA .ĨB[ۨe gAԊC*1C(8>Ie8a5c3%pk օ|Ylc|I'KUي >GрQbd FOAR |ko7{ B4'>dF*u w(ny }ǽώf'2ٵ6̎>l*cz/#~EuH}F|*'WR.H0)q|g⳷N>pkV Mm2(!SpR%!e.KRQX7,;u;kRAzfKt=C^DZju 78'~Q ܦq|(! +40A1PJ&}v’nONeK3BUQu.J߳?(So hPa֊'$wȁ zx{P@ y51@Vehbno#+|rz8ϫp @&.8K2ҴR:?C5$i}poAC+)-p;Jr_MOW|uB CzO,RL6PGƩUbn [e1M>!Kddžbn͟ti#PosB%?_rڜ0?)\t実RxdwϝF@T$:='kq> akbd1s b['~\"uSctUǀoˁu+rۜDa!`Xڼ+C~ap~;m8̪aSR +yW+?^{G|5?J-y!6fJa\)o2],B?Ĺ 9cɤd#-G( ] \&~$3 -O/hTʳJj9DFM6s?kš^Xkp(Ai+`LLέJ}g&Pv7~j{<'9llDD8^LYcu(#{_H,n;0dhu,uFDbVm=Va.*X0̥Ķo!?es& aoJ泯:&?]U`-V&zb2XWXDEBpRɴ;&.@ucA%ID={>M|3Rޡz'Y8Q{3.)j9& Rۿ&]xc}`t[pP]nA1o2byye!|5Mc_f6n+s Eȣ9 +ި=Ia֊,HT}rIpmn-Eͦ+!J)f!"BtTLYBB>mRaj5M6"WBN!ݚ!PET/EKH!kEC-CGC,Z{]-L;fB<9:.*`p!JN p5:󀢪hA[tAr(`oVAi ZetLD.c][ka>@]U;ϥaHҦW%g#go]/ "R]s<),dE}jY|adNnI,kp4$> 'BϏc(8epiVҕ>E*5&ņ^gwЛEF>zخt?_"ёr~ rcHEz'ѽ/G4/Է^)ņ?=^Tk YMc n͏VZiJQٳ'fY6HA:%M;=Ke6Y"@8]Ҭk޲knkLNolzTxo5fgrjցt5wȲ͝r&`C;iEqz$yۦw{읟.6+U6u?IlQ`sp|ڍ W7eνo B)vGc>ETqѿ"Z +Pж^3ymh ơ} W\`^dmi!J׬U^q"ZoyiǕ+9i|l Tڶi Bi) ]5K!ږ{ƎU㛧W2 zڅ5DhcbP5C<(ȹ 4alWs}&<躟r:|Dk +xaS?4iC&X xJiZq_),{7 ])>U5o=p2WǍg8*6{zao +BpHzB^̄M|y D,<)Z/z{/x̦㫽B;'2VN<`%jQ +GQx 3mGc]#Fw.-36BtQ0OYۋ`B ੸p*ړZ= +RϘM'΋^ {zIs$b -ZМ z[lCn)H:W"tۼO@J7ŤATgO3 Il(YyCz4)]"u_*`T>ά'>+dk +N}+YAqW};b6ѡ @૊rl[EĒfNLݞ„D fFȘy sL @#4JS)֮Q6\U:oy)se\&t&+N' }01* eeT)9uyd F("NK 4.L%I9;H"@{T"@?1+Pd+>}4sX].Bq_#δZb9o5O+ux_c#˩Z0w5u>W lQ>gDtW'O +%)|yUP`&Q_ѪA %zR~7 dt~@LM?&T~ôĺb[kdPr+{@KtE+Q{4BS ߧIƇ⤳bY3Yޚn&:_=ho݊lҥU5tU!*A^ Oȓ$5qmDH:|Ngm[[Lnͳ:40rRqb$^G6GՊus\^(9a?9G*h9rx6ZO5sKl럭縌&0:>yۍd @%b +:=7/dQ]+hmƜ:scowr:\-?d$f`U@eKpSR`G~"Ah26R&cF~ L8cZA`D"E:x f.a_N*̸+," ?GG P%P7 +^x'yvV7)&aASSJdZY2'o S/- +@/޴igj8*D +&9d[, .\ rű9+s2}pPÙV0 +\Mdcl{`!RBtMVڱc\ +]t("FS +1@c<w\33]W 0a=՘NdRzHSKwv6{ylƈAu@26Rq^vQ4C'L<&W]eƿbUSV/b ӣ;}tWdt4F)5.BRp0"3U8i;'& 'wN̨dۣh0BU;pF k{J̝N.7In*1pl:P%E A`~6b0s7ܦLh|u 1 C:HgZXD]ZWFf`iL̏!05:jUE Wmћc&"hni4}AIt4ҔmafUeK24 (Rt@̌m[D뙙)mj""L'jfn#Vm1j&ƹ JDD. +`3 v fөTW*NXDdFVSĕ+.bJreI'V83b&,-zmS1㴭!!G$6fJ HC4-uqwwW5xVLL|F.{ }.ֲ5Z7XVX~&ݵ=2oTp F|EU~* $VQ9h I6%s}Y7V1{t͐~ lv Й|B/uE+T|C; 2?1{270 +xMт kHi&2&-u_qByQ{5EaqzQH@GUqϰgYA1άl.dFkЂIڝAR$H0<`i$dO(Bve +(ի $M.뺮 h+Vc#nxTCI<ּxSךچLGfBshƟ%͕| ˹_5#?,`Lj),WsX5:ەiTkH-1"*ڇv/bGHF.>Cj+xĺ:^BImĆl)^oevX5C䈦gos&: YeFQSȌ6l;!bV&BgR0cb,܏NI;veHxBJq8c$` =+!`fbTXU"iأBWq?…c leLPVU"zU5`P6(@ g#k:A슃%Ӹc<ؤO=.h@D!J j %#!yjVCXtP) @C0xDǢ(]zyl8H8$.L"i 1 1F(Yj½ь"`N,dwc:3L=yk wfxkJsx"E +77K=x?Yݘևqd(T%ţVKp|II{+AAͨlVoB1SExKAxd鍚 B7`oJu`4"qbR%2!++Ac^?ͅ)=2b\(33" pü{m޴_#Cv,4JTDp(Q Ojw S k XAHH3 +$s9%A-ˍPQ ތSB@$|56H[+N }3z9Hz/o/Q^SF>B,3O}"gOy(z+mN+J*wf\vQl4a\trR 3D k}r@K[&9'б^@& #)pgl঒tRqk |t|6>&Wn-Ka? Ҍw_öa#O)؛j%48Wxzs=.S3wp(̺.Ŗ' ^*Ɵw3gdq-Mrxr(Eǻ/'I^Kg;J͑,BéD:ɂF I_mw-1y\9k z*at]v$M\GQ +ljjwOd2.ˉn1F9@ +ÃdUR*M[{0 +ANm`2A[[ean +^(4oc/E@^t~QdlD9 MǹEO TR$|z4Þm X L| -%>$+dƾ֗d~CT=³$WƢ#wW;jY'4I?(iO/isßģ>Sxڣf,"de`23n݇Ё1E6qLCM'1wg}m$$pa +]iE"7Q{/QJ>$bN'@AH@%:aRJWeJo`&7 1o HRɱEg3Y¾]Dz(ARDEF՟ɆdмFT[$[xgƸt=(u6wb# fFT5n"%t޹(iY%K+[C.?1$Z$!# 4KW%C`c1 a.|Sc\Fuies xkF4uQ+MD ōte`^K__p]R𙣣H|OG\m}^ե.*@J@~ +s\^Um)Z4^GVK,CpaSZJFӁb12 '풗oSn5JϦgq@җLz*N >T{au-V`!LCSB -c"tmpnnT>@EPԲpx QKȹ2=^dd! +)@exe${.P'üg@dચ?~e"!I|nzQDw֪ /wƷc$wIOB '~n6s zƱ ACЎ0|dZtȍYяi nC2'І#uZO=f|s :\-aq Tne @'KkAjIfwe guqyyuVhEF9K< +]QPfzk;crdR $BeҾ\!+ R-^9bi!Hl`lKNn=~ڵ%| /c=ޡ7ˡxp_֙̀xPѼ#D0x\8uRAkJkXHr#A7S纇V#NiK 8Ovݭ@ >$@%D +XI +ƒ=Rܭw/{ۼ"`R[ `Y ju-M˸?:D JF6ta}BҊChX铣 k18d^i(Tu˱d΢Ez69!/&5bXvB/I;}2U:'U8 v.H~#,]aaAu(lkX%K1C7g9"v/AJrt]f#JW0^-7W# >^z`$o4K/8p=OqR=jiEʤQ(2N4s +x/mӑW*i5] (K`S6][,ŦkNt-R5|P,nۍkd,GN{i~ʩCnهVEbs >`:uJCU2xE:`#w$aqay+@C\GqUOYUH3wvV5Ȋ"WOMX*m@&fU>Sԧ2ŅaUN B\UID4Wk݄TSEo9~7LAK~v3po& 9vGG~ %I;s /̊j?|[3ދ]9%`Kf)7PXn'3By +zT*;z@'˔Ak02 vT5I}f̼?d4p{B:\^g3l]PZ%BF-Ed, +[%v*%,%foX1tDYRJTԨW/75Xe^@kxY08gqSm_<"vpnE}IE+E82J "N?@l-}F(6rSbί;ϻB 'nɲhNsF^EIenSV+;zCӲ+zp] Z0?3Y}cݗßmV#{ +^Dq@A =} t3}Pu5=9i9b~}jJV,G&v:,"qyk0_ؐȳ $d~I &ͦh~ 'eɧD )Sd qbd,@ĭltysHtcB Po]bb)͆ (TUlΧ]:Lĉ ^i(8O]Ew׌4Ϝ!&d|ؕ&>UL+I^F +1n˰&q.Y%^CjVaѺ j˲a~V4{qނ!aL|6L +Cۮ,ϒ"~vo^^:2W8:6ê3k! Qpu`( BH :%%:xRW֥Nu0KgK;D&iZ*mbbTY3&M;w7V07iσ@m; :(2['F_( 41 Xn}x+(?qlO)PT̿5< +tEZ0ˣqktPwR:1b9a+9#xl0gkgEEjm6zmQ%&ˮi~3Hf"cѲVI\[Yh} hL`8|F͞-RW,D`n' + +L['Q'"6̈́ ]/9*ﳺ'COF0Hn^)fLkL}kǯ@.S &!5|L @^vOPXTmk"Q@Q1uY&S13|A-&嬝OG9G+-2kw۲nѶec6X4yAzq7TBSiV +endstream endobj 2930 0 obj <>stream +| ץ[rHжVlhxq&&O4.=t:ΘY3z6hcM_b#conJkIFIQlܸMJ8\[ +6 yRBfQ9"+0VCaӒvavWO6ͷ-?6 {n)b;۵@EGTCvz+M|3xO4 Bo𱲥Ddո+[,fU12SWPt04A@'HAPaTG.R0aNft =UBu .d֍l4Mzj㞌}:zVcA:vQ=kXtYod]XZ v-&.<n$&#'M +(3kfl7j0i߷) ԁRɀKd=Y'E{ K㫝sM +~EH硯!P/S"8şم H ՄCϱ^ +,T%VZ$&0ՓMZ~ +7S.B<(18?7w.f jѸ}U81}q MOG(ZVpkk渆x[0X>R?:YLi)s(sN>d׏18sS3D[~n@v=>EA +㟲L +^c /KġR$*E ۭb[ iz! `E1=2ߦwk +cnJޞZʶ8zn GV3䢙-?@qnFIErmI! -7bvrB;3F~^| IU`-(QpEn[9wx:Dk˿8jBU){T!y + ^fFhhJ fܨVۂcH9um +Nh%tjcuAEP:Ԃ8Wa w Px/j+'Ą `xo^5/thot¢>FբY?{26ԓh7C'H&sB#Vq%anݎ]Mh]DBEAp-d4M$䋈_|iGߠB1Z!_<X ih98CYeq#_>br ?naԯ̏,jZ#i9 +Ьʝ@?Q>7V[D_H1i<# vܴCj+Sye p؎4jjy9hm5ִqT߅JFNyb7kR +QmrЖ:iȥ' +q&5E2݋Ψ藼tn(a6g|9ǿ;ZO&0ee8|t]|zK#W'٢ նx>aذ@F#,MȜA}|@8DcWkg*ۆ曦L$ Yq&x#&{,L)^i;ղn}"Rl,4K}?bȉ?ioe_l`zBaj.b[gilPֻ)RUV[oR|ƽ$mB`,uCCSFZ[g +{Oo?{@hE)F1#W.۴d(h*X~u_ok +|(3Yﰬ= gS!Wȫ8>^PRނ BrAs[ff"(://T՝[CE(m +LO;-ݓ9׻CLAWب]'̈%Uiޚwbf=G 8'e6ȶ7b }GĂt.k&ŀ"ΔB8L׷[ᒝ*9tL!?d 16/@Lb;9l4thu±jޤX|CJw%kF13ōt=,[g+-]ek[qY +~s@52_"ǿ^:!1n15 M&{zLLE3 eb8:zr#442ܱ~:^:.ɑ8^2^8-gMJa1r2;W/b(r;MULE?D/k̲P;*Ò4tU)/֓Le$G^b:x!C]!B߀W~هORR6܃*,~3N/<~]\pr -Y`+ X؄ꀵLillmFaArК/QV5g+<0HQ^΁]cSଔ~/nNq?LaA= +g%!dR +J +WM6*wMB843g>Ѣ7]tu' +3 vC rs7ߤn{7&Es^cF%g?v{GФTd>3 {slhRvl!s[Țe*$"(rM#͋r$єRm2Q<^]/*GJ&6C fayS%^,>̼5:^;,)0=f.s`Tk;@O.RD?͘D-ʰvAJ@ZG 1w')ٻQborw@\eT  f7W+Go2tvJ, +% [* +!FCoԃZvNz0RWe2Q čw,֖\KP>~6oPO&~~ߩmC-`Ma֩qo>l2Pw{`2kKߢTDB@I*jH9xqVoӮ%sm'Ɖ<@ TZ"Qav=&_v$3{63q&a.`$pZ{\=q'. zDG?,)=u-GfX dj$nar"JJ[mV))D_f?WbBi b⃵K0MB B΢LvqeuifS rR;u2uLCLGagʩ3ZF>c` P>mOyn썖Fؠ^_T?d#X膴sN]Ms,l9v[5\J/ʆԯk&>AQ;G]I cD@AGC"܂* . ^3WK%e-k뒐QmD%'prY~W,nlv9R/ƕD( $ߟ0 pSQ^?1Ȣk{6lB?Ա7ۘgB>\PUOS \byAEia@0q7 oPָ"4:k7."/۽yl==ԋ,I‚fTWv;_ TW<˗n^-:4.8%TP -[r*.⭦q̋0U' :G_},]1>pF5~X2J{x}(\L<>b!/{LuNPzٰL۰Vg0.Z`TnBԬO1ݚ_LldpEUo2|iRfu2Fx]t->yߒ S'.P\mݐ{N5Ivx[Ԙze 30J9 ; OWiqBZ¶x&-ZboqqFQ$wrt XTg8ѯK!]i6ԥVv<[Xa./:kR#yROoѲ30a>cܧ |^C{=%HD,r ԛ]FpWk!v?O3O`TD 1%h~=wF've7'Ǯ:ȕ[w%4F3luE&:-dH +Xo^j,m.[[@)ႂiY))ȁrg]|Ȟd+"v) T>4dis+3Zz7Mh=nVEnen9 85?1M؆ITb1 tfhXلb޽a!G86wlP3tT9jo}P1ىn +$`(sh{Lָ5 +"?@3HvE0,,Q +m?i"YQMT׷ "JGc~m:{OL4GV`x[[2T2z 2N=|Hwfg-l##JēO,ʆy6ĵѳ[^> +}K=aTp!Y;4KɦzhG8ѳN(Kwp&GG8"i~xbtz @!HEݤ0RҞ]]5;Р: u`=J]o +>1`">ImDS3zwfW +v+3R 'WE +4j$"jPi}8ǖ6oۻW?v|"Lw_UD3DzTLB#Vucg1'٬vw?c?؍ʑ1F>"o]r fB2`J,7Ks us+dnnҩxf~GVaǑyJQe +{\p(VRtGZd嗿 QUg!~tTP8cfgI :8g +#E1q +f3VJVM a.' ZFЈwb(G%NL s+_L$aPNk W]˱qڒie/ޘ + \>Us"Qd_Z3Y 4S}vc4&xlzLSXP(g]‰A+I-S%E]~}siq\Õ?zw +Jc9:n8oո&73'ѴbeZ1K)v'$MB瀂UCQUkJ\EIY`OĂ>FB #Ki)|0w,8S 4*#[>nׁuD&,8pc?xn^aY=kM |ZI9Giqh|?s!!Mt]?s +̄suzi2.HP^\FlLD TgYl*8؜ay@JdŅs/gP R`]Sg浣WaxNY;i3dSճ[4D1$nDFdbX`sw`TBG9 +gۃ\ AnH+PǎB7Rҟ:xޟ&0HUn ˣ1Z]>t [*oih` ‡m*xj9Aܸc12k e@er5zޝ>|ݱJƁ}aߑI72ua)AQ$)wUI d+l}nZ [yNh!s-ʀP`)0#ӌgA14I%-҇r =l +|XWWq-)YS0gex _\omf O0qmhʑjGSZ֘f5_;_-* ŕ-`qȕIW4%^ j@ :~}q aE@2qC%W1L솘%~5ޘ_Q<("*< 1#63?^%lܩ CeYXuvK@ JśuLrL4on,6Z;Wմ컎|:&~v +Bj PlczNk\ +`lxa=S͘ܗMN..MџǬULF;_G^1g56_\ 39vIq}PZ®y_` o_Sh/}4=\:,k,p?]0ӲތAykYJ,WjY7j!B$cZPQ2İ1~0^{rjQn'ftӁ!S 5÷8 & Vc^ +cpbeQGTJE (:~2dv՟-*-t&iX~v 3U([39ˏ˝Ө '8h)R2qԻ 6¥̉IU3V R`ܻD[ b^Y=лXnGyba8d ,ђLEth.Gi ؽՀ:ZLK߼KT +H)F +Dd1"Vˠmv@dK;eG2@ Cћ҇6_R 4> 4Q L {ohyjpH iۅ~w8yqxrT,@oJ;H@sVr+a.%:G(! +05tB:&9+S&z#[`E52d5(u +[Zu<e(SU,Z^u\l]e}9zTfq@ulSBTv{Lu:TB%_kQ!Szd_jk3 5 f6H/qfk_6N3c+,F8NLօښUH,KI6+1I$wn*b1+M7. E8Tg(Ge(5=f kr1KC()Ei<J"~$gLdm &AN#\m0̉ݓ):5: YMHVjDLcrn~k I\k7j(?6H/Uc `⊞ KPUAdН! o+M$qӚES _\֑n e*c+`Eo׺h5n VvQzCYvO'q݆t EQ/A{N'ثBcM IBl˔J*ƴgm8'۾ I71xj@*K^W%؁֏.# @]a"ƺZ Ԡ(sFђtF''@tyn| lb)B8|t2fdPh`X'+KY3`d_d@i?) QTDׄxÝ_ KZE90YUZIAj=LQ978Q YZf.,k H"fHerˊ~ kk!#}ͨ~ C!䉲OS; Iƨ*r5!(XVI O8S^ o8RsZ>CtNvŸjTA}#|B~_;677A>n E957fXk}k1pڕ OI?54Ԕ(R";9^U)} tE%|7DHU·GY 4By;!ji1u2x~ +Um15, KD)1ƒa\Î۳_!4!fꪘ ,qSzp+3FPs;s9әE hEnW :#T +O3w$иT&ߙ+`$LtqXtLbr_ a$l[c8~MsY0ʵeMHgYX Edg]ww'ёi`_|%gܕ3" +~n!#|9 KȷP)" t qitQR+ +O Hoя:/3g(Y?λ`=Phƿ+)Uw68A}ERF0! Ɂr S1@TIN[^.@p g]ee%GpJ#."$倫Gʠa}B5vXo?| {uJS52.}[+P*7KjV(@%E^HϽncoՑUZϹn-@{2y5I!{Ӿùs;)C'W*IݦkBqX:a +HcS)O3\ݾɂpׅ q>>a_d}I,>V;K -0}0IcϻC*9Do?ar4:>WUM .ĠDiBDX|1hᴫ>8n6y*N #x>>]2ݿ-߬7'80{kwD'T`˷b*o`NMn>3}rp_p㮜48QprM'4/%C{\wOϚi}\;WuN6;d݋sZp%nfwKxrX[$oeq ӌ½ Vr=낁BCp3\3˰pଢ + T V; y#*6M>U> 7%Ifkvz捊s )ūQtexpbGqEkU,3k%'5aD]x(uvKS< 804gfWw^Ļv:>8ỳ0 6Yؑ iHͬ4 vq"klb&MY%Sa|s̙C =C0AìL[.M sNtIw"UO~ɦa)B~ +MiH),dZ5{A]D0Fo? !nAP [Lݦۑ5֣rZz`wY)M=c=Jk߂slؓۺB!ָ;֌*U܆y4Dqq'Z̊V! UR*A1-Qd)ɲ(*@:+C5J)˦H4([@GZ⺖- B(rl(H4S5QtЄB`jP`AܣM0IH WĮ5T5&C2Իچ: +fP`7эE r*5;5 C +4;}\0 !buҽ$r/JdH*O%5\.r\.%%%%LЁ_ 8bKCȑ#6J `u4N ʜ$ԉ208ʚ- 9)a]L2 qdRZr waAY{oF.LTԘ)VȥR/+j ,(('؊:bDص2A^WD"EDL2l:JLI4Vn`a7&Y(x9(!JPWĕ\1~= o0BfQ#t!ꬤj|L_$Y#Q"~1H"!m<#뉟R2!d"JˆZ!L)HҖs417'a*1+POc!)Q43YKQP̝Ό3iB +!Z3# )d#F]_LvP#C3^*+(ŌY=s4s&&]#2c6]#Em GOۓ70TMF_}a.SӑX%J+b8T'*M6|&"O\Z Rt(_$X>c>QKd*"(uDwETJ+$J>Sl˘iy=- QPCE +r*uCJU;XMg5_0ƥ _8ent*8NȌԪBl]8瀺xC X@ ؞)g 2&S?ڈķKr]H*P=sl{^U!D:zTInvM7 v&67z̆f3S#aN1FXǞ'0h^HY,Gcg*L$mfJbBrIZ[H+ ðM-Tځtm9aRI(ٖQՄUPJ +j@P" E*u8,"xVz#N}F!c;OC%*f IAdszhlIhHA,VwdJ}Um&{y;S7+3NG,*#%6]9M[ L 7 +ld+ 3>".rPtBhX &"V먕jՒcf,HպȢ*hn=!'M + ,Fܹ7o$`NgU ] qPADH$(/ 8tHNAB"E| ,C(ⅉhBH(zǰL1N# Q&#@kF~l9F +[ )a{roiKpzb4*z(Ģ*(K*I"ӍIܷKbpJ%%$x&ȇpi|9Z.2)e"-CqF<_ bʦiN)R6U(Og +P^'в>AkitRQc:"_w ">CHIRKD,xd ҵLJbaBD$„Ԋ7JRpPS"0dOZ'j!4g,AL⒠jPhָ%Ӑgh¬ + ټQ$Fhf=ᙠOHEȽ a'LCyMԆ< Ø)Jw$ &d"%K$N) .ic8|_zCIWP,(rMg6*t#W5š-UR=eࡘ*HMPki~kj GX-9j&Dbi9iNש ^1t:A5a/5IC6*yUKBQUU," dC#ϖa{1|)q%)2S(me@^kJDޡɊL@ +GTa,PŲ9̄hSh&Ő]iSFLzk7=TaA23%4%8lڛ?JtM֢IL/Σuj#degB D:*Џ!41(1%iJe +LPJ(#L0ÔHEAH4ңF >mBAoIhFxl☠U4eU:?P&`@8 0"HD ?h)zjD 4De0` 8@, #<` "&l!2`PP׀?jXT6ҁ\Z]Xr6#RVhJ&jT +]7δ&ֹpD͋ 1+JT +P"p (h +,AO U)o }zRiP9 HSdX!"dʍLo"R+p +PX +,X@,@%0 䜼& iCgIS (iIqHm@W|ڕBHkj8j 23:Q \@QY Z( `t&(HLNR@k +| uN^  9}3@T *oQxELЁ +N$JB6^tAqlJˮPfuM&R`h ex: +AP:a 2VbEПTP#P2q!+ҥ$P JpPL0 +4`O0BLPA^h#tc&a;.Dt>t*0]*8-X@A +T df}z:tn7C#d[Rg!UA2 m&&g0 T#D00Q1iD-A+vA0B8gE]]@$ + V)|aUKt #Yhե-T~H!sRBJ*j +GU?D5.+E 4Z!jdM(>H։$_2bȈXB^J-2xMBpRԑ<$#VPDjkV ƸlCbsgu-*I4v!nZ )19IKnVi|˂^Z.`8qHQn s?dLPA4 gm=Te"'f b2%sw|gU@PJY?dtt[]4 ²6+̓YhT'pe}]X 7}&J$D/pBPLc a1€ʒj(#ُQ6SJM]0[w%3%3c$Fìd;8Ij +RPTP7zHBҘ7KyUBtEcE  d Ƃ`<"ʒzp(4 BXTR`! )Fmx|-!"lk/:52 RRyKS +o(-(4w|):0?mAkx'V6=-e"- "2z&@,}HU"rQrWXe ʗIܜXsql40i +*qc{ $""ضSky1iRj Uz*|0] @MU*_! +Г9fw,0"D)Pc4KW\"_w4fw(C'k孍SFge&fRB^DEooIb[) @eQ{^CRHan ֈGZSSi?!>ap0r +#Px+鴠œ%9&mИFQyX7"|S]X,y:CбSQjz&! z%?\IIł9HGu֊,9Zz 9bօ7A*nCQ[YL\)[P# :|]ю Z@]7:|}ȹCY` EkSrEurH$D)ae?ZI] +:h퐖Jjzk9MR +~IOwp2 j@G.w2IP>q S/Y[I}׌n$i_/1=ixOxfro!k?|Gt4{jb/~zMSֿQ`? $h~S"V3N!;7BZ/'tD`?])cH0oR:D>-g'1לGhMUO>1C-D{[yS5 &WQok -iB <> +!M"DmF J1̤N_ i!&!rv {.+ Ra4Aݦ&t[B]!^%uobAZo:> H>%y1iqB5 ) !%JE$.=R`K:/efB-qJ~>F/ fNRgO;v?Ns:smAy<񛲽OtDZ.ͦ|@W#Z\I"L!jn q4 XkIt8 کiV]4 :c˛Jp>d4WyA;h9u}ƂW-d8oc 9acLUAZt@n2PGkP`{hr5ǹ3tԸvfw%b.MɊI-p*υmOTG< XߗƢCvތ,|yB(\^v𦿟J@AX'(:epNNfs> fjB:I̺=\jlCc.Fu-L<ݹuO[XVH'zXΏ_rg5Zf 9g@OshEeozpbz7-pwBP1 Ijץ\_E{a1郿n9L{cACkJɭ?9#ҧaP?Q1IƟzĥ+r25B[,msCÎGwhސ'Κaf/fHMUQN`IcDnV{ ' 1LŘb.Ib~q. l ,l7mu$|dI#5nq1$&GA=./m>I6zIj4 pp1J|a6~`P1"%3S~[ ^t(ߗnfq4/0XA Х#O*B{&&!eDﲁQM[wTd,Ũt`+Hh$e8D1@ BT, +ʽd/RȁeӞ84DiS[4kM(y+/捼Isx[В;D,+]'d(S+Tsi+f G˗xIsJFo)5dY4$NT|_ /m|;A?- ? c[*H9ؓH5!=0;2 X +J/4kņKof +/Sʩ7g9rhQ`j5V%oXX`컱e0+"0ճ~.l~G?,e` k?Bg̏8M3nS +YOg00x +3~6s%QꀑI̯ZAsݶuiWqȝkՒ{ы؊@. *3"eû:tXj.V?ɉFo>mj)! +O4,KD ɢG%2LmNE3™AkL=H-o44rn:cҢ_^gGe\2"Ҳ6?#L$"zA`b|/p4K|Sznr(Uj͆Oqڛzc`\aZ62sµR2+Fze0_}; ck <: + N?ɪOM=Qׁ +`ʟ&ЀY֐P ʪB*A`%ؕ YĜ6"lU0?RzP~0fq r[l: rC& tD,Sf1ه"@qVX.^7`!d#&u 5FG4!1hj*ݲcH|>ҌIwڛiFNRQV@3*V{ZzskI#*I2#8}A\V\;U-boqw1XO<8 "^!nB_GThVZSm_-9ȋ4RF!|~U%{45DA~/flFddrQ|za#OS7Z8O.1:ܬr/G.=7!#(ѻ_ ,Ѓ 'Ёhb^ +ԯzF˚c1pSђ1"C +!shtG;[«pXW-F\>5,!ݹ` __{ Tb(Pٔ Gv>jxBnGxP.l(Uc+_SHy.CuŸ[5LK2a؅Gлh=k0_ߛ\RV ̍j5(.sI!:_ʝMGj0(%ij,awNEC7 ٛqz>D ?j3YU42S\9J 'I{F)}?@inTr[1pJ4p)Ҿ-@mt,:ZHo +1q K_yJh|OG.dOt ccspN[G# QilJL~Z/=ެ !9/GzkN@M7X4"IOR;9P"FEYh^(c(67{BuE ^K=`* +~g%:aucEJM9/J9 I=&(e4M|kzx~-,럸 Nя9J\&xF/>xj x +;i(p]!"u|" 'JDt G %u>55Mm egy s;w%QI)NkEւx/Mb뾟E]t1\nڠd$u9 ++Bյ$ZܝOsal/k<sG+IL)|HNZ^1iUmWZ@vFT8I ䷕ˠX!Mb-55͎8!uQ2el`#<.?dP@ݢcvo"p +/XծBBwTHF>uR|`Xu G,Gt]Ba8A[?+/#W}f%Ea +ymTdaz,2tIx'#T̮J.L}s`7od W\ˎwe/`;C-W5`^v\De1_9.ŕS#"Yk8)k!-B*".:]ʂ+o=H;qè8(j?T88JC ^EkNj) LyXϓjfEezb/?2rQil ?![Э=>9) 30걓n|m +bBvqDL晴y_ȅIy_§/9aQ׀9TW}h@<;}_\VD%kecg",H&oYAS̯|DXe/C~\7*[mbsu. g!§3>Dߢo$L&JԹ;;W=rB;'q[g+d*D'c~$wGaYAӪt̐/{QuWOH9*`ӚI6Xn'OS]CLY% P?~6!:حCF(Qm%ڸ&k.э9qg3P|Ÿ~\D EkDn}A%1ԈQkLvtA\ԅBC9BTgƀ~f:!q{1œ7Ή,(/MѦ8`̞d$1 GE$6[e%C (,Łd1@BpiݥgV/A%Z:oT z-~UƘXQT%*X:( DږG{Ȧ +_p:8p'Փ ze5?O}C1x{5[vלԌy#zسl8–Bum/?I"U)$,gʮ{at6Y#=*w7!{AtPF:2,`YbT|Y~kD嗍UoBB`AhD '$*A-AIΜsYxz6$"+ᙚW|EuUSq5Zہ$P2¨,ߓ{PwiIB1Q#Ƈ?N$޳/: .PN+pyN +&|u|HfsSXyŠ 3b~Ha~ ڎMOj=[wK@Wp&R0.h97 }EƝ4] Tс_[gg5sBD[- +(1s*|9â<3hd/zq"8P,}\ SDyvsײÎ`$U|%8=' !Fs1*m61B*r6\G~f)ηvKRHBH++ȩo:?u9|87/x)W3^쒹g=ugLM3L`x [[];(?Z>!><;ïW^Sڍӫ_&~]aĝ2 ~ao[ M2߽˗.C8~񨵳]2([P&ѧ0 ,7 +=_>hޙ"d덄 |Y_Bg޳4#M{AFmBi+BՓ9T 1J'n#TMP+DNܘh%O:4Bn`cnP5AiH3{$n1&::Í/lN }(=l,iࢉbXQ* Ť?su PS\P]cu#ʓ"O(6'fQ&{F+ UR18'Zmj.KVO]b׳JI98Wn\{Do3ZDzp1),JDN^Oҥۇ@0=:'V_aO_:[Ю+W7=1{۶k( mBN #I*#=3$!uCD~bsmYA bb8pKCp@MA .i耸 qfժd&-rmmaz,.P/ƬBw |X E22P%Ž>> g4DŽZh6vQMhD95"q>!{8 1L3Ա[yTSuӴVExC8EX%)M:UNxdP\<0 oaL̴k~Wrj'+\yzMhc@?nHƵ{[X1Ɓ@sG <R݊C7%Ek$9$07lzB.ު*RکۃXc 9l;1^dv +kRS`9C`v$3V\)o=4v2L<'(ؗ(2cw+_I lg^ԭ=G +OgR?SfL)dF@DQzӔ!@Hܰs"i/K!3JDOHMt!#.'uȡ.EF@S((M`B [6cT&24cdcҍodMŚz+eq*9F +Vf2l 8oq4dļ݈yF 4`s7,ƚFicgZSfHV!W$Y)4%fuQi["LQiE"=\"jniqς ->1 E'Cb-DR [+NXoY\&n71&qDL\ .%KeGmI#e$HxЋg_o<{xL]ܙߨe["93]M춚ghDn.W72I灞[(Yr-.`8I?gg-OUJD'orEw-3A1w8@PEg1d-bRVId y>?$lf@ID3WNN5!C=cDHUROU}SAJ"u]\΂z8+Vo`0$C-#NZ[ r%W4&1T y1lWBpȖiPJcR$B?u#;$`+%CItڞ]!u\b),/cU-1V-Bk/| +xbSߊ>t/DHeB⓱՘hKy\[РɎzn/A/ oP@FhcfwE+܄Qm*$YmE|<|L.T(7Z T羡+ܦc0*$< NYʜ[֐<X"!8}\6)VYQ.ɚWEFN)R8SyNȩE\DG +~,bS;:(j~?l}/4/j+?`< oP,xLƦ$/]8 +W뜹}mVNbA+p."&:I>bpωzi Ŭ&ܣm +.G%6PZi’E*Q/-yY6CпV(jI8`~3hg߈8eîpt yH+;i%)61wAt5ĭ )M<{o>xb2ZGBA# +Z*6|Ld{Kk(~{(D85r*اbR!JÈGW@^eߛjtYl"u/ו3%ϼIB2XMPzK,P DS5-MɁrX7~Ϻ(YM]؀Ir +?L(+c #734M*~!y⢌-W3tW_ _B UkV ZunvgA/ĠIz4ufTMvͤ.ODB IԴP$b9;)lGҮ9'1?֣&j^ UpBv {}*R ?o b1rP +$J@޴?ekD1Wm ul0ocgc" jg KŠ, c铏Bx@&6̉#"1i(3I]S\LUcIU1FO94h,Fդͺ`KB٭pkBf,݄` [T]'s 4=#6U-3Sؿԩdj˞XSy%MaXȥU#C8XiV`GD/eL*PUhBE5bLjzM_H5,dE90g=Fmm6M w别] "f7ut]5,ޓ[Oz0:4 ѻetWGC-oÓً>dr֜={d#c(o`;Fb8S`./3$20T"VUn 2BrUF/uGn^ݲU7^jCa-xԶv)``b!:9uy#!!-4cW:>U鱻;19t͍I\689S~1&(ۤ%œdR.*Ӕr"ih ;NVj{`$\ATYéN] T x Z䋪AA^GB"b\d$*&ĵqI<I5 +4:a8.dh3uU?RJI)S!WfK81s7sOR +3RZLͨ(~6Ej41Q<JĦSşD}u!d3 /"C4DT0]Ykd%\blj${z*g@|Zؓry`ZrTΪHqsYyf_ aQ9{baqA(t)PvkUp.+nڜc')wx:4&[>3 vA ɺ~isU/ +t~HPYpKJ&:Zf'EOW4'mb9_ +E ~FRlqL!DN{%4 ܡӂ +5j<3^Qw>"?({Wj > '1HOc] +}LqZ!ѷ;8 +j/q2*qmD1 +7D0G+ DJEd/C@H +IU QHʥAC +1ƦRۄ8.z8+s\ YP`|aNX2\jpTSv)#nfI9HUt0 4<@X9kߙ_ȭ #r6dUpգsbU5a,:'߹Zѧq,B44)ӛō QoN=ԊRqaHMWHs M ^ͼDǻKA:zh`<2Zȣ5Ml6@z10:Ǘ'ѽ$Ly9+)%Pf/ؖkeCL8t;-CXf +eO!opD]Z id:@ gA8 'K} yߚ2J}ndU Xoy4V!gPaSP2h5ƴH +^( +E.F|gnǶ4!IE-Y`=`28G>kEӧ[33y]mdoOg$|RV\6ZkX E+guL47j'WrO 4X31:8 +x֋ 嘠qKTHa1 MPÛ4nt5$_UGas'2Ơ_QuC=,^aa-4_nDhk XVH +{ZR`WP[rP4֦(}m>6 ?L|րeOG=مX@l^> +Nۤ4JROcKߢyV囏蓰h_%b#g࿘Ƃo N, L<Lp(т11?6&@ȳV 2$S4rIbLb{BȜu T#04/$V^Xr[9{~Ip;nNge+JH\?&Nn,!&D#9@eo+ګ?qwD.d\F`JRw3V<5 h;JB%lj]f2;2+bH)qu/dHEn)rp@F[xV~3 obDeFìK8\E[/Iwj>#h?;[]r;z6(I &쨰霡PFVgu!_<'} Y.$tI@M}Jr[gEzh2ӫP%c%J,DC@{Q8^R@ G .)c}[$JU u[=H%t(k̶}iG?r5av<㯛9$踾: ߋQl父īmre^YGYSrc0 "#_bQ\dsPHRH#mmkg 4qȘ֑ΕQc;WΠER^&rLTbļvCAFl}$8ժ~CX"_7$9tެ%192NI4[(eL%@Kxxԅ3k7'_M+p3,t)Rr~Dbg-D~1T2 z$hpr˷u@qDX)nZȑ@ş&,[.xNב,x"VW`e$_K@ rxoUsIcGcH)t\)Th%TUA4 5ɑ16Ks !^1gUְRyv, [.idG$~ndZ}+h%Ucܨ$)B0"Y>HDlM>fڂQhfmll%A)_gm{b!K>a3.7\{)Kl+\[v/ی`WYnw:1&Z[yw-jl3/E +!YxKDp~;8cIs޻DFw`2K"^x,X%ތx#54 eDZ(ȾK/a|OPft"x;tm׼ͯƿ-dJP㳟h"z@`*Td+jNQ.qI<>)ހicwA<[<%*Hnޤpa|Ka4]sN]-s&}NJRIĄGjzSSfz=ʆmއw(@]q5>{- +'hk,L\tk0hoy4QW)8uZa%}A:3>+VzK=tVcIōeфU#ute "._͌zWaMX~CLU_@I^K{`S=A +`j_j 8KӖcBACb c(" 8F jfؔ +]f$޵vCIո)p$&P(w\v$\PլP 8B5RK@g@-#gq.p@: ˾ pʉ>(7Eel_\Rv$2$IJ e-!2KCY%1FhɤQJ}j|%X%{J:M'L+-G)}b!EԞu@~! Y]:I#IAQJqq% +F TE_5kcN"l!nBgFMHSՋ?"6sVzͰ{p +L +D!A'~ +ڴY~{@Ap3AP>`^Th"MequNVtOQ׹ΊV˂\R?t);'d.8sz/y王hrz< `x)gȟ[O/%|NSj&k9x_p!9ݳ LVGڵљ Еmv!PW#ad0[95LmRF(Ac*\!T)hZ B[] JaAGe1@`Бp ` +Yh"  pHOZy.ׇ t +z&YP˺WaY9@ U^(/i/k J~Mzfs3Q쏴=:y:ӡdBF2eJAZZ!jN"ǖv$rte]T^ӷ+7f7֖Nҥ8Z{(V9&%V\b6>9]q+4fYM4I켠ދu\UkwÒxBv~(X*ȋGI毐[IRᥑKɨ? J$<ھ8jK5%n?v/%~w;2{NW<ϤdwZ, FDT;5JiƱEk#YqdA$@$uE]kPnB6,;RB 07U#nl`8`S 7ϓp +tC褱I@aϥsc~3_SN麿jxkJJ2L9c%5D%ʢ{d}? .L-\9~r-zW2p -endstream endobj 2835 0 obj <>stream -e!6f$OME.hGshځ_r2FoZ?p0y3mz~&f2<*;Adb ͺ:L21w%bPYbe &1Jҿ8>&LGwTCI޹x(J 晄ubɚpFplSn1xZeyc>9_JW)ajF -q篅k+w 9CSP3~&fZdᮣZwiSB1ăMѾhV/#=HOڜwrZ/0E͕vWjROrs#>h`LH$r20\$}=p+ֿ%VONoNW7 Aݒ ;x%9CTBb̚n.MT9rNv;uV=@T~]Y.P~UɎ7yրYo&0Ӎq"3˱04 -J-&fSHwh;Ej. 䑇Sv "˟R?xѲ,,d<1$ ӑpa5p*<4vlISخtJpad+`H@UPdwgq!@69"]§DSǖ,8 KIE;"O۞NZ[J/gݪڲǔMgs]U9] T.θ-V^g/~[H 5U9s.#-Pܪ*0A"$B=2q͑B%еlEcreS[4jLzW|}ܿK|{KCdH9Ī4o{}Z|-?7gIa5$uN!!VM?`_Li;c)Y0\n5[٧].Glʽ뱰hB6 a"mnK /[w x7t.~ZQwm54e]↦zPh4)O`i7ht.Fa[!w[q03#'[YNl<piFv3~Bt {Yagu5U0Zs}YP[]-E>cР\ӒLet Tx]ֻ;QH)AMDȓF1)pPbf? ۊX;)HnrjћSZә4թIMcci-#Eۋ~ -:j-L'K EƔSE]x!Lj - ־'';S[(EcV8̉6U7:V?@WR(W žXeKgJpDп6#FHukuPɲϔ))lj!AN͊H 8]Pae?ȉjH# yNaVԎFH\c7Ʀ(͢{jt3em?3Ne[g3g<<5t>EKu}$8>r~Η%kC*|Q!>>rs-UzHhscz 9wΡj -'HPԃޡ8|wX}B!6}W'eڏjg%F͑08[pA BRBy͋Rk\S;G=avDw)qQk™A@b-ap' 3 -*DV:IR" b#ϫE?T"Xm02>ftRA2C).d/N[%S+p fEvNL_k9I.;Rz{d2J~f瓲ʋMO2Smޟb\_iA۶V@}ٳ?"> 3hD<4_z99B& xomr;=a f^\F3G: -^GX~؃}=^7kL%TH}8J!)j!,'BȌΡx]_ hAA\=Htſ=FKʿ.$^DB=Jpyng -@JCD Q->~ -sA>@4EScޙ< C^2h+eiۆtpzZ :zHo#;s=<.jUg<&{0`1 ˝F^R70\"URUFQpBW3w¡j\WUNDLYVs -!cwJGB|ďBĸ?UaeosD*6B-V7B|5: `Y!^5$?DfiRA+9ՁC 4CX~+oF"$̇2*F|2!k r`DQ=j'6=6"MYL( NIڑ>9ऽNĪ[椾R=( (FP8J6Y1ff?139'DĢW8 [EЉ vh(H1s2,-Qysv `ZnkiBo ]Q},:QaP=]x#q;xF"o,4[mMΕtT-Ӊ-ȞLjؖ8s^D{u@ ̜tQ6 ?}glQ] R6J~k=GԒT9k)C1?Tl -aJA|7N$CBo ĤL1ڤžpB^v@!MF٣&*RX;9asIK0&Tt6M4qV@ LI"z@- ]ݎ'C1Mtie54ƾ;3btw 369ùGad6J&i A(#.+,j 6OxK@=*MU]lK@S)7 Ƕ?KwVjȶ5tb&':ib$L}V"{8t]w$ =JtӑGWr =Xj$µI iEHt -nԲFf  bl~$Me¬mk{#0y"LVV9pM&~%}6%A裛 ɃGc23Ө!@8}{jN[Kb_%uG/uڋAi}wAj^Lx:1`OμtFKJ\*KXĠb<(rM)G_y~%@gSX,! .]=!o^Y? ;㼴ycY !M@)v^/fVpǜߧ'$Oxb y9G3R[}JL 94qEq+@ͪ5*NOr.|5 XvKNˮOWߊQY|tKDi,H`.H̤xWyt̳ʳSYeufD&22|"5 rjMZ@"H|KY!&қQE"[! -b}"6^ߴҚEf?Uc&kOVIЃi&iQI]VZ;E\3rl0*2x(ʲpa~KA*|8?LԞV] E8\b-Q5txhZh>OA}4u[ ̢8v Nd -A2%psЏFVpAfBMRRSBπ~[P\ƕӿJ )zS% ޜ j<>" ]@-0EP 6DkZ\&aMm4^A}@co (D_5>z%(XEx?I2AY.h>j -sƟ[:z&r҈#qa63Ctf}ҠB7-o/`2 -fq|דTA, -SppƧtO<R.:l.de -B>pQYۿ+*}w} Ff . -.$==Dv9JhNo f$Ht.(.jZ9߉C0玥Ens },|rj\%hp5s-_MId~S`08 Ƒ3?&﫿x̞gHA4]5&i9Zc)l| -Iƺ 62W5i320*{ hʎb`ex9=-kKHD 0u!${]Gp'-,D{ 0ʢ̱VI@<ck$-`zA첽MJ7 -M.څ؈9FG ^ec#} D -;} -y{:b>;"1oZW_/y&Xn -rUq$0*+#lY/a{~\܈N pޭ1q\>9e!qf$Fl4t렙9b˖̿;]^$)*2zGÌYnJ=|*r'ʖIţ-IĬD4_2-"s͊3Z/!`}NWH]=rT"B2hF_Ȟ7Gs+ϋKEI䋎\b&1qЏҙ-ش< |ZÍ܂my]NR$!t~fv<Ѡ[]$)MfSOԓ4/;s>9;b(k Ɉ ~# }:s >X^a&T?H wMӇCxXKru==BXoSRǻLb-[IF -9ASH٨`ݝ3I } ϐL>}6)* -MC{G49t068c'W -W_~kE m38$ME)Q" -b"aX/ '`P/u"B }'_14b0t`L_X}˟N _41BGve:wT[y+l!&VI޹1]2ki_fS W)Id=ͲHhƴi$GlqOd~Ge|Ai5BK E}܀t 9X - 86BeǑ%l__–E2 -ϩbH0T\ϸ+9x)o&@W >cX7Á rX7LJh!!2p{[ف-gV0*e¥WWwk%Fi*M4*ID@Ih|m=.A85Fׯ+^m]zAա̈4('w>ITT!8#M50D9b^ޡ*2q93p}:lU"4E0q1 vTW|~߽|14DB&2}O X_@l,zrpUN{5v[owedգ/q -me0X/n6Rg\xEʍ$YIST0>=_TuoX1&Sz+fԢW,&¿Ǚ=O mE/,kYPI_b!'S*I".`OF uȷ`p?TӏKC*\NsR3lܤcNBkU6bn}&+ݝtHƾfQ+4,2bR>$dQ \ &.TZMZKYKLJ5dxF1#Jg|\#G2 -f۰DˍMn^[lq]0׻gS&sjm`Dk-9K̑e6q0ew}6@Qۻ\59AZm"ߊ+SwuO=wҊDyz[Cy[*{Q9(wQҹQ^}A>5OEPHdxŤ9@I Sز֤}EE8mC < ~(h jVT6V] *yW1l*n(AG%% av߭CVmBY 7 =%xi(˵Q@:68&Bdم$DyuZR6t#L,8X()⢛=xiQT͉~AD\T<|0NQ/]hT 1 7UQ٤͏Qj'1% RMU_yN*J/wj#bix~vڃRA< ?=r}+OBǑtyx#CΝ -Z낥/"r1ЦsfUF;Fux_y1Ԙ+mK9_=Q#H\mI4\0Ox?*Av5g+K2" FPYDe{>R̠Kv}ˬn5{!V(ک. Go4pu|ƕVY? 0:U KOҊkf5¬N0t~ csMU ]P`4X\L-"Dbutŕ,& -D-T`Gn/GûaU6]sV(_= m#w*'|zBNn&Gz1>QO^;;x}ė ETS-\pDejcބMn @{FfpGQ&KCyRl~M/cE7HӎF(ÚZ%tތ]O= -((S&8\gcO{V5.W_E)57-0vh6QU.J$ihjI5)  HW̱׊ߕj-yJs+ 69җ 5P570 -S:gZ;ÑA<兹XȈ::0X2_l<1 @|CF DJVK wL/g_9Oq -/F.ture?2?:b0\ Ix\IFu<KծΘXvE<*̘d~1_>'\qǪx&$;xLJ9zI",䭾M#*V4d d:{bV`S7RO~ˡIoJA"'&)#p4?|IklM)&"ĠI/l߫q-y<WsoJia h a9ˏp" eQ o?Bn&Ñ ab#t."5%N |T)݊ 0O2'3#R<8{ݓ2?!PS.M?iAb${T' ۨ(q$Su؎oHf UN` -IR$w\MA92W:輦W}Nъ苰vϚ֤?)ULTǠb\n(X`=5UkD` kT"\O"Ȱa0 Í=EqiE9KSoX#g88e҅B -q-202{--]tƬӮLF& K3T2#<}ST6N宿cbJ.u£ּ+3^^y{S᯸pUߐ@(n Z>fCo)(uxu^(~E_o}r,wzdٽ|44q1iL}H}ci vVӖcij.1KH3/&Ҫ-ZyqPw|疡qе8h9*s_(8 -$;MC_̆[=5vYPgn%beQO -ڄ/0[ģkƨgB"_ #[uAgrFAr,B!S#')r ?[*FR|V$p]Ju?|%И+􈘹0rh#ϐ砄8[P昹U_tLn9 ɳ<Y6L! p#{ - 1јFm;cur<Ѿ1y.qaG׋æ^R@44U}Q?_֡ ~0v; U!mJ"m'OYsS{;P@)+:ص=66ʿzŐ8a͆Ts<8.DiWWS͛9nlߖԳ?H:J|bzo+$KАdfkRdLr#0zN ꀡ)65&0\qF -e&X=Ν#aT¬^٥Mb޵xJȜ}|O.Y'@wɮ DŽ>`;@?.PNM$i^AC1d-! -$ -}ZvgJQ>: Wj4u"FE!?!]#'F8=#^]C1FBG-/=;h}çtVҕTE |P[lgw~ zaT ɾG=\<Љ!'Gi1nEB&ogv+"dI4Xtx[_y= sj̑ѶdY$Y0,Ӝ"3$WzmJ5r eU^WbKO⑝M&TZwI7% lQ0xO30zuҘAT凩*5:?o(:LW:ozPΟmJ#vf^^޶'SztߴD(U0Ƀq[N%x!lzwQ7ҙ*i,ܠiٲn#ExV" w!U - ^ЃQ1ؗ;/ qNד|L"فY󉳇S(`hPQܚd̊Dz7:X -*DES) X}0VWqGn,Й +S~^ ovaVC3=k@{G-{UXC?/T Z!L6w4=ľF,=Mшnf6Ȇ?xgb"J% -L߻il°) 2 gṙ-%֬Ma<u'|rh 4D8eMK# -7~jo M~sr:;7 (v9!b۲rL-.^a좇}`g7f֥UBwc<ˠ€P?C.=|!ZtD7WgYe:,(8/\d]!9D/-%< ؿj+C18(T]0^M~p2/Rsx-$w Cx*aU= -axK(LQ=-lЎ!f6"[ fF~$h Sϭ]Xc'D`&CMJ0GiR캫\Q q4xH Ct$pHXjW6;˿h'9w) s]A :J;?j~& ZϷ^4zC:Z2I:0 ԕ=q 4BְStjHe@SoFxdSjZ]v*L! UR*q^;ś R& *`@( !.L` GhZD^aD"l%SC:(2 &LdZ@(3ٚP(S4v@ȩb%9d% hź8 6* @(Dr@ϖJ - -:R"?2@(#;0r$+0ePj (1Մ3hPqQ`%>ZnWsPHM(B)jSNJ$Q}A#"3RRȐHh4!8~d`UK?qǏ"0^8HJ[l9 VGhēH84d -:3t! =aB:)U#b -:@BprE = @h#KT汬^>_閐1pMT(>CƠ'UyH=Tţ7 nWS2HԢCxk]΃p3k+؆VĘP@+JNPF"ޕ4&3?餙W7Q({Uv+U5a Kv3UE6`~xⳠkrD,jf*|BzX*x*C! [!&ߡ |PQSRT)~deL= 9rXA_r@xc-Uڔ1JDߴ*d!ʗf قqdI8i*(+BL7DcɈ S1BEZMq"TI(1IH0;Kt'rm'(*ئ99*X RbvcSx< kZ Wef<B$3f^\u QC *UDT_1'T΂*6!Ϭ߂78V1&NˑT-F -%yp̑ASact8Ha5UDB4F;>c%Փ'hZwHIG΃ -rOuTD훪(dNUa}9,/.֋ $O4*H("?=|(zS!r} b<[))9[4qJ9(D2Vjz_$0Tc^ %Ez -[Q!Eu7B vMU$uu+T"2.p&JLE`j\"H3^',Pe}jM"VI08Z*I7!L=XdI+HɊ -KlRxx$CaPMK -Pi V"  ZAPfU$ӑ:4jAJD*;9ʼ5e9+)WBoAXba q#Cbu8T*B83rU10B08DV,96 $`"ЁC|lI4{k:) MT5QaC#ZL_)ZUM̽~1dR>[$ԗMJ'Efj%Ќ hy ȔsiK7БVтI - ?UHmP{IE^#~t|bm Y+`XA7dh786i"Rb_CuBz xA'! -iIubFhs7WPe+Ber\B3ʉD-1, fivw`k B(G|RRX'oV$OmQ&+hKinXQ+IO'B|t/3}6N)Q$/Eǂq+jP :c֚$/ፋ8^i8gY!R!qtu:aP]RW!D1!T_|UHDCU!sWQ9mWP[;ֵSL`lHinz'XOlbUcM ̈́qWE<U;"y()_ ŋ -rdEcE `Ƣ`@&!r.4b`,&#%b B04FK@Vͧ/q-x/]"C5 9_աhQW%`@& _BL Dz⚙F \]e>L-yax~kj \TOs?ݮXSN'M#+12 -_c{axgy-P:Do;G85Qg2wP [j< -y1Oz?l5FK7=;a'xI2Ѧ3?~/֎{۟f[v;h!1k:~ k;ifj:(rRipM4 y2'U^zpǜ&*=lP (*;!)6?{i%]Mv v(/1t7=^i!.}ChJH#zW;-D-LB b@pvzd۪˜M1 =jK$ǁhH[᫆ z\PNPW-]! RlT,:[C{UGoiKt%~h頇Tn/ \bw 0! U;FEG.9L )aCn~kt+R$ߐIW 5WTb*AHxPϬ}71Zj=VGPZBp:OzQ k&艮ĝ^0~?+V@7XpBˁsޢhB{܌LC)E,pL IUc/G ؾE̒Lg+|ypV`&8Κ$vnw7?V0 $e i3n{!F.=Noz4U JOÓÖҴ&CJ‘n_;po\, 5FQenC>)OJHW&ѩ8CPuGz"LE=Tg_K/ETZ)a[zRgHy3f{| kjYF%tN1 y,!@Z_ ) -3 wkR7859` P҅V4>۞ȧfҌ|̺vǡ14Z*Ig!l%ú}jeFHp>)D+}JJU?tWa 1-\~ l$n@$mJ8F>QAB* _J( d1J@t\HK/>EoCa/;>$qn|'W'dZZVO" tor?jM'eD@8y?B\40k3x% 7{Ŷ?Wb5ŗQTp -s%Ɇv+KԿNS{G"2rE僩J0)߰({wG@"G5S+9\6,`ܚ@ x0?4GOM)>-f0b8CwF!/ozB 3Ẃuݡm ,:I+_%!e.Fc.!Ó1C#m z}T@KZğX4Bj5džCؖ_HL-B!8 ԛfysD,ʕN!(@j٥/wS -S&L;W! gɌ,R&df{?_RMs'NUyJ+V76x(k]"aM_ ke+=Zpgth9L> t>9UBf+`xCRELJmx#@ORIy[锝ќhZE&^$(_ vm7E{7GnkEm{BU|:"$ɔw,u"8zX-&w>a64/KAb$|Lӊ6On8]hbDMV KǼ '\&5`D"ҭWg{Z46/>?uЕKU-KS3rpDO -"- u=}D߭`7hS p> hZؽAd8 νf.?V%O V嫻zlmQQԏ3x)ԝ<$0p_QdD* DZVy؝(ƣo:+ElIa (-e7:,md)goMܷIl4TOGb pv9Ld VD\DxG` T1ZI_} -~^,# č^S_oHM8OfH{4tO}&μCAg5+R4"(@&M5AR򮻚֛8SEW{S tZUI6ytlGofBvB;5LD 48+jt޾G%t T9n;c䷋:`0ON8}2qf]G[T\DU;EJ1 {?[5ٳ -h:ꭺgeYxHFʽE'Do,R?\cq/汥K}Q]=Jw0b? -&*'؉7SRΓWwAc.u9xX8CǕU3\llHS]45ܥ>sXz.b7eҝVIk!ZPFcT/4InHT9էn0ORux0] `9p1).EAlSկ_%"S'fb9Ɛpض_@-F0i(ϦNȘd),$^lS+ ȶS7{*a -%9sWMtmW..ZcMGN}g舑7EW&%]FR3E[G+Ѣ:]6(¡~t+Q'+Xlj{3FXMJV*FN6:;! t -jAPEX0KVI1"XnY.B*"o -eaLt"RNPDʴv24T F@ strh.~T\!c(͒jP ~ۯ7sqZ@G|GͲdåh˩u%y=sʜkj -8d;!I."'z#+Q1@hbK6u((@ػEM1JEOoť q.X! 2B)T\BI)J7Jj8?b9D<Dql+H-" 2eZeC:{ʧ k610mn*oVKPKMhw^QnD_uУ }klF@0ٱIWm_SXR닖 t!<ը[P<Ų0RqBQn4$h%x텚[pQt_#r:T 1pUϜaɒ”=Zxv*'Ոg Dj 1argt#OvSIyEl?AҪwrwOch0}TQ*_,Xj΅n12$DAOE׺GI"BmS2#!jcHO %*vPx@:\ GaHDEt-ctpp;'U%Mb$zeJk MNjh!C?CCeɌ? akq;p^x+Gu1X%lV0_h:f˰.@|qFEGcO(sb UPCgR?J0 -6VϰDV+-"͜e0$}&i(O1hwf8(t_F&,ݱfs_֯%UeG\=AԛzCƁyn61"AE9Nx>TO0.sH>V+Hg1>1/Y< -LW~q6e?( &:LXƴ~L^ӯ8JSMȷ@lr*clvoxBR>iW)Ň+uX_mmƺ>86Rx<`^> cD7H+`n4F3|N98Ks!o}4#̚>ɧ)B34yzק/@`ڟEnL@8u%cOIhSxU͹|}daoGMi K)U4X+PV2 !V@-=sLd:nL!I2!ۿh&'D0kO|w5 OI{ (Vy~݋?X!-9kn+E\ 9Eh85iγcܐyɎ*qAB9}1B%c``pY$KOF+:o 2S (#z&:ZSS Ѝ AY"bo;`. JlM1΍(X}r"71)j@bxs0d2ЈeqPӻC=7.'xa43l Rj~g2k⤐Bf^ps!tK)RѭdulT-(ݼcQJN`]☹ 'Bȼ͹K!k n:tv8ύ֡B?΋m4P nα[:&Ęc ~+m.c v 4]_l CԀ  A[`ьS2SS cM_`Lϸ}c5{nTo0HjkpT}" %cVH)p -ol EL0kk?5BYٌ)6j'7!^ - o?-zݝ h`5 CX#irI-c -xIP7$֐;Mbķ##) (ؾaYEayLZ\bUs$ - a̒5( -eBR~#Q#53jX2v5] h\jrVaƏ] O5dSa̠ dmBҿtC'Mnf`3p|5BW#^ a1Wh>0V`e H$ $̐F1djL۰|)B@VS!m/V#ICljzcfJjx۰۰-u'Wb/7j0Sp0̨J'6( j]Vgl9ݰ H94dH06Ę ^zmY86xsTV?W -'@CF?:jpiƿ6K\ WS^jK -mʦUpV<^^{[ .oaa)hMjD)WW;$\,hj.Z֫) tI?c$M@"qf5nHvȑpuC<"#D+g3`,3{UٺP[8LF)kfPRgjR@0m%CfР)GImV5˰wȣƣId-%r=7È8%@'e:K'c0q㦧@vb@ Ғ7s:,b@Hk'}>DVT[L9'S!WH2?BlIzIpYĬ?$F4AIW;sr#|d-XgNoG0wMѥX$SƱhs\Ӓޜ0^7ˠtLEIܦ`S4aABi1# RR:X+-|0F&+:dzxa>_r8?\S -szH;G]h{ Ѻ<ԤC k% $sc'rIEHZ0l9 K'Bm9 y[8 e: D`"vv <w$ Lo5_Jv=)c$?~ǐ׵`2 De ]ecQB@άz$ЏE&pf::TwP`LߢFΘ9cӷhb_ޑ%\>|#;aA6MjXAS2:JS58K>TkW,oH 5RQ&›W8۶p}3@q`$GsG nGЃa#^[EP|8 wu2n -]X0?yU蘗B2rJM+8>K07#I.&Fc#0Pb P\QkLȯ)$L׈B'W8'*K4JxsK`?уDv,J0k|JJ.x\=eKIdN:9w/;pZ`~@'4]`[=mSQ;1x=Vte)/7"DS0[-^_!3*xp7D}kC2!vp(@ W9I~ԝ5^J]}\_X%R]{SOkB0__r?<ȌP)2:{Ydڂ9yЖfNC$1-s0 +pu0h 瞕%G)`a3fLv*WkQz6Nqc,>{,uRt. -0~p  &@si ԷJȊ57Wӎ< 3So<󾋈T !+)GzME F.Ln~^8!n_SK*(f?޸[&>nzM?©GSzB1)XᎣXXZqְ @H98a㇭< F`7mʄ<~<Aۃ̟KL[p6LrGmSp7<.yn8(~mv]@ ZOha A% ZIӞH>V2r5ٝM|N -8/p}&JG"Hx\i˪ZfH+~$ϾQIY@qp|p hm^]f\=ײ"0Mc< r)oX\fv4اHԂKlvBCiv2,S F~S,1cKX`Cc-jn=i4Vz8;= 1h]/xF -Q^N{W?c:28r2h}~֛aMa( ))xY|F,jѵm&IK[Wu\z̑]hp6ZX8jJm۔#e/)nٟQVB0@{vqD/bΔ?d@F8ͬۏܟ,5(=Ik7nA##?k*6 Ɵi3+OP`D8WܵO&.+=$brr|oڹ sa59j~\~4KB~Ôm-Y\ 5h{K_YA=tE{fkM*HߚN:L~cp6MW؀$xLbK 6msB=~h3p4Mu͠ y+ۦU  t𻹏r<_r\[we/dPkIp 7VZ+`,f# %%~)rT™]~)Bs8N\%+@W -T֏N s!P 1oUlBI8pd'J1 -X4Mֲ? AVp/ )YgLBZ<֡+3կJVNR6Fx\dflBU0)04.84R=@ʹKU9 ;& p -5w rͫZ2oW+TJzr81ѻct*W[xHZf=9Ɉ=Ͳ O Sw0~E& -q cO_[-0?Hc{*[cЋa 9A:DNnY?`vp#XmCQ:U?o#5#:R0%Dwa;; #d;aЮ *k5ؚ.#VuEjn,5yuaS* sV!Q,H*fOt9/NI#~7ZL>d$mejox14I|ġlT@Q`HH(7 o-$dz{7^8?p`E.i3-{&'-Maǻ8eG@*fq`ks:ߵi+3HMf`ͺ<U$DWLuڢ.3{ȳ甈|O - m0#+A ZM&Vg!S)y:5ɧu%tm|RԈXZo|Ka?RrV'"]^@v_rfTuޒb'+WrAʜh'aRÀުiuf`KyN@0}~;,`M$t]ְZGT;~QcZAaPt|v刄K*(.얔VECi5-X2J]] -gcJ%2]; {[jT:/| Ԩ1NK1JO|($L+EyPhfZVSia<Š[YaV37崬4 XTom*T;i2*KqC`o>ȵ|4Z[0F~TD%F,#0-e#`_䅘+ -Mx5iËE#4 Ȕ&X)Lȋ5I.VLW'`"$` VK%I{Hp vC<7<|nie -=.U4ڌW_린Ͼ賍cb㺴DTxjyY5xQ|H3ZuWfEء-ڎ[8r} tdg &!H w8MVh 4 IJp9QGAex1ƼsbM#Kȵ S\!&/DpGu {s9!~.` }@$t>4w9bWˍ &ܝonaYܒh `J<+sn@[l[B! {C30w<% N F5 E 㑋(15-)y=v[Cix#YP>UHٱ[cfbKS!T93#Ē]tY`$)>4'm$dlL҅!&;5"l5mu Kn[u(Wj XN%a @rՂK+*ֆ7:.&EZ>J ڹ2>Ɨ휩;"gE-{'z[uE M0P!uYGh Pק -^W,P0k^[ZxPԌfUKI5K~ְE#DܙݪnOɻ*Ho$' W Ф<fzRi%jb|昃mT1`7+\% i1h(?6n(P˗kǠfYC_:774 ֠cѷcd,}6N:Dd%0`uYǹ?J@9Cj(MuaY>O_ -;ٜm|V֤$duq&ie0h -Uty -nϮ+)gO4}S w~Bề@֎LΚ%>֧ FӤ?7?i?/>qY/Y9V4WBe"rn6QTg --–l)2uՑj\l~3Sn3eӇͼ&XAѰ6Tp\cM.*W -qEM OK}Gn9LJxPҨg;wh]cnTk8_ mԌ}WWnjf ")A|3wghъz:1Q(k=oN\4/֞ҤUPbJ>3#bk[//Xx-bFh,>Ϡ!W=#F9> rZK4[2)j~E]RR6'gU0qZ85 fѹ".`|Pv@|㦠_(D v@^yu9K?aB!լPBM?%@g$dwq0aƻROSb<PA(s}v(xH)oHoà2:R% y6qc(Җ ՒcT9ZՒ;Pƍj"}{ H̽#x˥"CT_}\X"J @d "KcetTM8180\g~$^t4Kc/t 8y?30<9z#"ʜ/9VOr{"$OLL'HuSr;;W -i;y/jahm4-v9^'z{IWТ6mxi<6ˆL'dPF*Le;\baPꂷggj'NyIT\, -endstream endobj 2829 0 obj [/Indexed/DeviceRGB 255 2836 0 R] endobj 2836 0 obj <>stream +endstream endobj 2924 0 obj [/Indexed/DeviceRGB 255 2931 0 R] endobj 2931 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn @@ -1342,7 +1409,7 @@ E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 2826 0 obj <>/Font<>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream +endstream endobj 2921 0 obj <>/Font<>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream BT 0 0 0 rg /GS0 gs @@ -1369,29 +1436,26 @@ BT [(S)-3 (a)8 (v)10 (e A)6.1 (s c)5.9 (ommand)10.1 (.)]TJ ET -endstream endobj 2823 0 obj <> endobj 2838 0 obj <> endobj 2839 0 obj <> endobj 2840 0 obj <>stream -H|TkPYۖLwaPy+(*DA+J,2""(/Du`>שٙx0֭:u=~9߽upLd8>-+oŲoU)1nT&DI秊&h>&/Sj`8.gWX~*^>l]ƭi޼yE VjQOtH:6FT8ʽ"#ZQ?iʰxR-a}R!W)QAy9?C% X0s/ljAъJ8KHLBt:LqioR@P0\Xal1lc6seZObg1 bk1?l?v -NXbqb$EEɢRq*9LfIl$;%%-,+-Gܭ&8Nh(JϼΏ\;:)GIFwi-& `d9$$L=d(@8c/^t:$E!B9Sh2p"^ +W8jNTXy%vd62%fH/.9RVs%ZPu@D3|9TtR&mI770*qQo.tHP9U~38?Ք繒nqn"w)BQءIaABEi]N ?5HnhN?WqmB[? -4Mfnp }tUN#ósVϲC"rXjg6pwB%Qਛ@:j -n IV\&c64dCB|;/`G.삈DA1Iu0Fڔ8\Ss; >h - pe_mfg_Ck<>.}>9i"6-fk}>ppڔc]xۿ7;A~?SJqfG9Df oV}B/4W\;&io?Fńj/M\8d?<^ܻt5 -渋_3.~XJ|(^??g2ʐ } '_|0h鬿dCA!'4I,4khy~ յÕz_M0eѭ.1\38 - -1, ]1:+yݣg屹cbE2Ds -ڕ:\%m0ک̠'ґ#NA/-@0isMc9g }6a8LkG~Uj}i2H/yֱI^# 堭lNJjY+k1A#Yw4VXwW'*MEvu#Suql.!!Ymiga -(I?n9&[pᓜǒ$O tD&2TSY]Zv.Ԗ*63tt/E=25Ҿ^SSG؆q]fIAvAN.{ י*G@;ԯ&꒴XKyGX,ڹ{G,_&>+-ij² 9DWL5 v˖Xxmm~XöulfZLoHM9w;3L36PٔVD`iY iV~K;(^qW3B9?#gnr~Cb8\b|)~yH en))Ⲹ=">z:cN; 1b⨻Mli#q76 DBix+_P.7LcC=3acΒ@B"c'ŧoa2o!*ۺ7\x >(R}e^iq_Ŭ0$'MK$ɽZፇg~1^}: f`=_;1eʈ[-(, `'2QrǍ@?@p;AVj?_Ϟ7 #yYW=3!zd# +Nk}'+~A߀i|4eH* օv. Y@9N瞟#}\(-hosNC:) L-vcxM$yZL< cZ!b֐(g㭶ve7Ւu KJ>4b;ƦFnH0TdEZ;yӡC -o ^ddwj;]}n;kkVOU^1 -endstream endobj 2837 0 obj <> endobj 33 0 obj <> endobj 115 0 obj [/View/Design] endobj 116 0 obj <>>> endobj 34 0 obj [33 0 R] endobj 2841 0 obj <> endobj xref -0 2842 +endstream endobj 2918 0 obj <> endobj 2933 0 obj <> endobj 2934 0 obj <> endobj 2935 0 obj <>stream +H|TiPYA2횩jgTN/X@PQDjnFW4t{QQT XVœql5gm̗}_^$,0ǧ){a +:ۍHڜ/q~j"棜ϟ?}2ˉS0E +[+ /\`.A4o޼q"R{5ZUFQ+*+2R>UZg*yF +ӆr UJVPy9?C% X0s65rEr3U4sWo/+U{0 F`؟,0[ cv5͵\pl%Vi ?avZۇbX>߉7, b+@D,/d&FSRfim`Ym9bng?qB(=?r kDOK'!ݡ'[ QsO$$B=d(HE8[iwG"tP|,6łcܧ$Ƌx\i9S b~ +:3I[P5>wth:nOHEl-G^N~0&}/P&FĶ$xPqI'o/xe6y\yxj3wX/:ZC*.Ӎ%gG܆F$Q?Un'(F%UiދMn Q-)-^xl>k̈R>"77uz^_F4Ä0tz؎a:YIf}/LU%tW Uf OJ+2N3/jԖ\m݋o=[[ʬؔvP ҹU9̇N>[m5G9*5ڋ2A+,I`7"s n]m}֔RV􈋣V2 [΍`^օVm~citcvmcG a/P6:Ԛ@Rڤ5^ld$_!).- .R|<ub/&2n یk r򲏳Jn]ǼkNڌMKlmhKbǍ'NȨM<֍׿"xA?fy>YCJW) YCs{{q($Gz:޳\q+2Iym4j0Jz1h=rݰ=X={f%-T.~Nh$$ctrFJz ++mc7x|.ǐ7(cj',ix 8@Gg=DJrB]F_́9nTvqr8\V;v+cG>E=6+X=BV%{Tɡ|6S|4)h$kD8ԯ]%ӮZ9*n!U>.ø|>^&6t;B$5Ur$_XRƯǝ|i,h]i(B5iٵ>>YmiVga ( ?>>sLҷj':%JG&2\S][^q&U*63tt/Ž2}5>A#lcVQ'. B((7Tx5ߑCP/% >;"R}Nki$o/x3wɪiꊣiw jgڷlfea6պ)nb uBݲes|*^[[`t"E:8'%::aVG6b[=3{{ι  8T6XZV|<Gv3">|'7w˾,uG}^e?Ѝ$z) _ nHH`96r64AeZ6ͽ_qR  +W" x̿PrH`/PX,p;<__#Cٯ!neq,ncΘecLv8rp5[H3M6P>Be~Wb+ Pt{hnؽ<+yI[[H -"'jT_}WZW1!1LA8I,p%Ir"?OVtӅOY_o>Lw S&Q +$y]˔;qY&2ğPJe>vd <.a3GfP?b>%xjl@96tTVW%WKyx!ه_ W_a΂XN G2{"J8 `&؉L\qc:3hF%(rO׳ AHlUL4Ȁ$Ȋ-1Zgr_Ɋ_G7`i8:, zr +iuB~!74zHh :S8N +S4npS-Ivީ/&OCy5$zxt4Md7iƻ҇b}i,ptb1 +xyVNth"qG'@[B%h-Y_]7> endobj 33 0 obj <> endobj 115 0 obj [/View/Design] endobj 116 0 obj <>>> endobj 34 0 obj [33 0 R] endobj 2936 0 obj <> endobj xref +0 2937 0000000004 65535 f 0000000016 00000 n 0000000147 00000 n -0000022021 00000 n +0000022219 00000 n 0000000006 00000 f -0000022205 00000 n +0000022403 00000 n 0000000007 00000 f 0000000008 00000 f 0000000009 00000 f @@ -1419,11 +1483,11 @@ endstream endobj 2837 0 obj <<172E4969F374FA48B71D75F386F458F9>]>> +<<0E8B5CB2B7B74E4D85A34EC5FC66EEC5>]>> startxref -265811 +268002 %%EOF diff --git a/datafiles/data/themes/default/graphics/icon/s_lock.png b/datafiles/data/themes/default/graphics/icon/s_lock.png new file mode 100644 index 000000000..e122a341e Binary files /dev/null and b/datafiles/data/themes/default/graphics/icon/s_lock.png differ diff --git a/datafiles/data/themes/default/graphics/icon/s_tunnel.png b/datafiles/data/themes/default/graphics/icon/s_tunnel.png new file mode 100644 index 000000000..7537503ac Binary files /dev/null and b/datafiles/data/themes/default/graphics/icon/s_tunnel.png differ diff --git a/objects/_p_dialog/Create_0.gml b/objects/_p_dialog/Create_0.gml index 42dcb559c..23c0a6817 100644 --- a/objects/_p_dialog/Create_0.gml +++ b/objects/_p_dialog/Create_0.gml @@ -37,8 +37,8 @@ if(!draggable) return; if(dialog_dragging) { - dialog_x = dialog_drag_sx + mouse_mx - dialog_drag_mx; - dialog_y = dialog_drag_sy + mouse_my - dialog_drag_my; + dialog_x = clamp(dialog_drag_sx + mouse_mx - dialog_drag_mx, 0, WIN_W); + dialog_y = clamp(dialog_drag_sy + mouse_my - dialog_drag_my, ui(40), WIN_H); if(mouse_release(mb_left)) dialog_dragging = false; diff --git a/objects/o_dialog_add_node/Destroy_0.gml b/objects/o_dialog_add_node/Destroy_0.gml index 57c5dc646..42c539a8e 100644 --- a/objects/o_dialog_add_node/Destroy_0.gml +++ b/objects/o_dialog_add_node/Destroy_0.gml @@ -1,4 +1,5 @@ /// @description event_inherited(); -WIDGET_CURRENT = noone; \ No newline at end of file +WIDGET_CURRENT = noone; +instance_destroy(o_dialog_menubox); \ No newline at end of file diff --git a/objects/o_dialog_color_selector/Draw_64.gml b/objects/o_dialog_color_selector/Draw_64.gml index 4f8e45503..14f79af3f 100644 --- a/objects/o_dialog_color_selector/Draw_64.gml +++ b/objects/o_dialog_color_selector/Draw_64.gml @@ -2,6 +2,7 @@ if !ready exit; #region dropper + selector.interactable = interactable; if(selector.dropper_active) { selector.drawDropper(self); exit; @@ -24,7 +25,9 @@ if !ready exit; draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text_title); draw_text(presets_x + ui(24), dialog_y + ui(16), get_text("palette", "Palettes")); - draw_text(content_x + ui(24), dialog_y + ui(16), name); + draw_text(content_x + (!interactable * ui(32)) + ui(24), dialog_y + ui(16), name); + if(!interactable) + draw_sprite_ui(THEME.lock, 0, content_x + ui(24 + 12), dialog_y + ui(16 + 12),,,, COLORS._main_icon); #endregion #region palette diff --git a/objects/o_dialog_gradient/Create_0.gml b/objects/o_dialog_gradient/Create_0.gml index a319371be..d99f8f8f3 100644 --- a/objects/o_dialog_gradient/Create_0.gml +++ b/objects/o_dialog_gradient/Create_0.gml @@ -8,7 +8,6 @@ event_inherited(); name = get_text("gradient_editor_title", "Gradient editor"); gradient = noone; - grad_data = noone; interactable = true; key_selecting = noone; @@ -32,34 +31,23 @@ event_inherited(); onApply(gradient); } - function setGradient(grad, data) { - gradient = grad; - grad_data = data; - if(array_length(grad)) - key_selecting = grad[0]; + function setGradient(grad) { + gradient = grad; + if(array_length(grad.keys)) + key_selecting = grad.keys[0]; } selector = new colorSelector(setColor); selector.dropper_close = false; - previous_gradient = []; - previous_data = 0; + previous_gradient = noone; - function setDefault(grad, data) { - var _grad = []; - for( var i = 0; i < array_length(grad); i++ ) - _grad[i] = grad[i].clone(); - - setGradient(_grad, data); - previous_data = data[| 0]; - - previous_gradient = []; - for( var i = 0; i < array_length(grad); i++ ) - array_push(previous_gradient, grad[i].clone()); + function setDefault(grad) { + setGradient(grad); + previous_gradient = grad.clone(); } b_cancel = button(function() { - grad_data[| 0] = previous_data; onApply(previous_gradient); DIALOG_CLICK = false; instance_destroy(); @@ -74,20 +62,21 @@ event_inherited(); function setKeyPosition(key, position) { key.time = position; - array_remove(gradient, key); - gradient_add(gradient, key, false); + array_remove(gradient.keys, key); + gradient.add(key, false); onApply(gradient); } function removeKeyOverlap(key) { - for(var i = 0; i < array_length(gradient); i++) { - var _key = gradient[i]; + var keys = gradient.keys; + for(var i = 0; i < array_length(keys); i++) { + var _key = keys[i]; if(_key == key || _key.time != key.time) continue; _key.value = key.value; - array_remove(gradient, key); + array_remove(keys, key); } onApply(gradient); @@ -99,7 +88,9 @@ event_inherited(); if(path == "") return noone; if(!file_exists(path)) return noone; - var grad = []; + var grad = new gradientObject(); + grad.keys = []; + var _t = file_text_open_read(path); while(!file_text_eof(_t)) { var key = file_text_readln(_t); @@ -117,7 +108,7 @@ event_inherited(); _pos = toNumber(file_text_readln(_t)); } - array_push(grad, new gradientKey(_pos, _col)); + array_push(grad.keys, new gradientKey(_pos, _col)); } file_text_close(_t); return grad; @@ -141,6 +132,7 @@ event_inherited(); } presetCollect(); + hovering_name = ""; sp_preset_w = ui(240 - 32 - 16); sp_presets = new scrollPane(sp_preset_w, dialog_h - ui(62), function(_y, _m) { var ww = sp_preset_w - ui(40); @@ -159,13 +151,21 @@ event_inherited(); draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub); draw_text(ui(16), yy + ui(8), filename_name_only(preset_name[| i])); - draw_gradient(ui(16), yy + ui(28), ww, ui(16), presets[| i]); + presets[| i].draw(ui(16), yy + ui(28), ww, ui(16)); - if(_hover && isHover && mouse_press(mb_left, interactable && sFOCUS)) { - var target = presets[| i]; - gradient = []; - for( var i = 0; i < array_length(target); i++ ) - array_push(gradient, new gradientKey(target[i].time, target[i].value)); + if(_hover && isHover) { + if(mouse_press(mb_left, interactable && sFOCUS)) + gradient.keys = presets[| i].keys; + + if(mouse_press(mb_right, interactable && sFOCUS)) { + hovering_name = preset_name[| i]; + menuCall(,, [ + menuItem("Delete gradient", function() { + file_delete( DIRECTORY + "Gradients/" + hovering_name); + presetCollect(); + }) + ]) + } } yy += hg + ui(4); diff --git a/objects/o_dialog_gradient/Draw_64.gml b/objects/o_dialog_gradient/Draw_64.gml index 299cbc23e..44204e6c6 100644 --- a/objects/o_dialog_gradient/Draw_64.gml +++ b/objects/o_dialog_gradient/Draw_64.gml @@ -2,6 +2,7 @@ if !ready exit; #region dropper + selector.interactable = interactable; if(selector.dropper_active) { selector.drawDropper(self); exit; @@ -28,7 +29,9 @@ if !ready exit; draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text_title); draw_text(presets_x + ui(24), dialog_y + ui(16), get_text("presets", "Presets")); - draw_text(content_x + ui(24), dialog_y + ui(16), name); + draw_text(content_x + (!interactable * ui(32)) + ui(24), dialog_y + ui(16), name); + if(!interactable) + draw_sprite_ui(THEME.lock, 0, content_x + ui(24 + 12), dialog_y + ui(16 + 12),,,, COLORS._main_icon); draw_text(palette_x + ui(24), dialog_y + ui(16), get_text("palette", "Palettes")); #endregion @@ -47,8 +50,8 @@ if !ready exit; var dia = dialogCall(o_dialog_file_name, mouse_mx + ui(8), mouse_my + ui(8)); dia.onModify = function (txt) { var gradStr = ""; - for(var i = 0; i < array_length(gradient); i++) { - var gr = gradient[i]; + for(var i = 0; i < array_length(gradient.keys); i++) { + var gr = gradient.keys[i]; var cc = gr.value; var tt = gr.time; @@ -96,9 +99,9 @@ if !ready exit; if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, interactable && sFOCUS, sHOVER, get_text("gradient_editor_key_blend", "Key blending"), THEME.grad_blend) == 2) { menuCall( bx + ui(32), by, [ - menuItem(get_text("gradient_editor_blend_RGB", "RGB blend"), function() { grad_data[| 0] = 0; onApply(gradient); }), - menuItem(get_text("gradient_editor_blend_HSV", "HSV blend"), function() { grad_data[| 0] = 2; onApply(gradient); }), - menuItem(get_text("gradient_editor_blend_hard", "Hard blend"), function() { grad_data[| 0] = 1; onApply(gradient); }), + menuItem(get_text("gradient_editor_blend_RGB", "RGB blend"), function() { gradient.type = 0; onApply(gradient); }), + menuItem(get_text("gradient_editor_blend_HSV", "HSV blend"), function() { gradient.type = 2; onApply(gradient); }), + menuItem(get_text("gradient_editor_blend_hard", "Hard blend"), function() { gradient.type = 1; onApply(gradient); }), ]); } bx -= ui(32); @@ -106,11 +109,11 @@ if !ready exit; draw_sprite_stretched(THEME.textbox, 3, gr_x - ui(6), gr_y - ui(6), gr_w + ui(12), gr_h + ui(12)); draw_sprite_stretched(THEME.textbox, 0, gr_x - ui(6), gr_y - ui(6), gr_w + ui(12), gr_h + ui(12)); - draw_gradient(gr_x, gr_y, gr_w, gr_h, gradient, grad_data[| 0]); + gradient.draw(gr_x, gr_y, gr_w, gr_h); var hover = noone; - for(var i = 0; i < array_length(gradient); i++) { - var _k = gradient[i]; + for(var i = 0; i < array_length(gradient.keys); i++) { + var _k = gradient.keys[i]; var _c = _k.value; var _kx = gr_x + _k.time * gr_w; var _in = _k == key_selecting? 1 : 0; @@ -161,9 +164,9 @@ if !ready exit; key_selecting = noone; var tt = clamp((mouse_mx - gr_x) / gr_w, 0, 1); - var cc = gradient_eval(gradient, tt); + var cc = gradient.eval(tt); var _newkey = new gradientKey(tt, cc); - gradient_add(gradient, _newkey, true); + gradient.add(_newkey, true); key_selecting = _newkey; key_dragging = _newkey; @@ -175,8 +178,8 @@ if !ready exit; } } - if(mouse_press(mb_right, interactable && sFOCUS) && hover && array_length(gradient) > 1) - array_remove(gradient, hover); + if(mouse_press(mb_right, interactable && sFOCUS) && hover && array_length(gradient.keys) > 1) + array_remove(gradient.keys, hover); } var op_x = content_x + ui(20); diff --git a/objects/o_dialog_menubox/Draw_64.gml b/objects/o_dialog_menubox/Draw_64.gml index f85f62069..d109441f6 100644 --- a/objects/o_dialog_menubox/Draw_64.gml +++ b/objects/o_dialog_menubox/Draw_64.gml @@ -41,7 +41,7 @@ if(instanceof(_menuItem) == "MenuItemGroup") { var _submenus = _menuItem.group; draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text_sub); - draw_set_alpha(_menuItem.active * 0.5 + 0.5); + draw_set_alpha(_menuItem.active * 0.75 + 0.25); draw_text(dialog_x + dialog_w / 2, yy + hght / 2, label); draw_set_alpha(1); @@ -84,11 +84,11 @@ if(_menuItem.spr != noone) { var spr = is_array(_menuItem.spr)? _menuItem.spr[0] : _menuItem.spr; var ind = is_array(_menuItem.spr)? _menuItem.spr[1] : 0; - draw_sprite_ui(spr, ind, dialog_x + ui(24), yy + hght / 2,,,, COLORS._main_icon, 0.75); + draw_sprite_ui(spr, ind, dialog_x + ui(24), yy + hght / 2,,,, COLORS._main_icon, _menuItem.active * 0.5 + 0.25); } draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); - draw_set_alpha(_menuItem.active * 0.5 + 0.5); + draw_set_alpha(_menuItem.active * 0.75 + 0.25); draw_text(tx, yy + hght / 2, label); draw_set_alpha(1); @@ -98,7 +98,9 @@ var _key = find_hotkey(_menuItem.hotkey[0], _menuItem.hotkey[1]); if(_key) { draw_set_text(f_p1, fa_right, fa_center, COLORS._main_text_sub); + draw_set_alpha(_menuItem.active * 0.75 + 0.25); draw_text(dialog_x + dialog_w - ui(16), yy + hght / 2, key_get_name(_key.key, _key.modi)); + draw_set_alpha(1); } } } diff --git a/objects/o_dialog_palette/Create_0.gml b/objects/o_dialog_palette/Create_0.gml index 026daa476..0939bef86 100644 --- a/objects/o_dialog_palette/Create_0.gml +++ b/objects/o_dialog_palette/Create_0.gml @@ -72,6 +72,8 @@ event_inherited(); } presetCollect(); + hovering_name = ""; + sp_preset_w = ui(240 - 32 - 16); sp_presets = new scrollPane(sp_preset_w, dialog_h - ui(62), function(_y, _m) { var ww = sp_preset_w - ui(40); @@ -90,10 +92,21 @@ event_inherited(); draw_text(ui(16), yy + ui(8), filename_name_only(preset_name[| i])); drawPalette(presets[| i], ui(16), yy + ui(28), ww, ui(16)); - if(isHover && mouse_press(mb_left, interactable && sFOCUS)) { - palette = array_create(array_length(presets[| i])); - for( var j = 0; j < array_length(presets[| i]); j++ ) { - palette[j] = presets[| i][j]; + if(isHover) { + if(mouse_press(mb_left, interactable && sFOCUS)) { + palette = array_create(array_length(presets[| i])); + for( var j = 0; j < array_length(presets[| i]); j++ ) + palette[j] = presets[| i][j]; + } + + if(mouse_press(mb_right, interactable && sFOCUS)) { + hovering_name = preset_name[| i]; + menuCall(,, [ + menuItem("Delete palette", function() { + file_delete( DIRECTORY + "Palettes/" + hovering_name); + presetCollect(); + }) + ]) } } diff --git a/objects/o_dialog_palette/Draw_64.gml b/objects/o_dialog_palette/Draw_64.gml index 1fa7bec30..de07dba6d 100644 --- a/objects/o_dialog_palette/Draw_64.gml +++ b/objects/o_dialog_palette/Draw_64.gml @@ -3,6 +3,7 @@ if !ready exit; if palette == 0 exit; #region dropper + selector.interactable = interactable; if(selector.dropper_active) { selector.drawDropper(self); exit; @@ -24,7 +25,9 @@ if palette == 0 exit; draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text_title); draw_text(presets_x + ui(24), dialog_y + ui(16), get_text("presets", "Presets")); - draw_text(content_x + ui(24), dialog_y + ui(16), name); + draw_text(content_x + (!interactable * ui(32)) + ui(24), dialog_y + ui(16), name); + if(!interactable) + draw_sprite_ui(THEME.lock, 0, content_x + ui(24 + 12), dialog_y + ui(16 + 12),,,, COLORS._main_icon); #endregion #region presets diff --git a/objects/o_dialog_preview_window/Draw_64.gml b/objects/o_dialog_preview_window/Draw_64.gml index 1acc8c47e..9069c933f 100644 --- a/objects/o_dialog_preview_window/Draw_64.gml +++ b/objects/o_dialog_preview_window/Draw_64.gml @@ -19,18 +19,39 @@ if(node_target == noone) { surface_set_target(content_surface); draw_clear_alpha(c_black, 0); - var surf = node_target.outputs[| preview_channel].getValue(); - if(!is_surface(surf)) return; - - var sw = surface_get_width(surf); - var sh = surface_get_height(surf); - if(scale == 0) - scale = min(pw / sw, ph / sh); - var sx = pw / 2 - (sw * scale) / 2 + panx; - var sy = ph / 2 - (sh * scale) / 2 + pany; - draw_sprite_tiled(s_transparent, 0, 0, 0); - draw_surface_ext(surf, sx, sy, scale, scale, 0, c_white, 1); + + var surf = node_target.outputs[| preview_channel].getValue(); + if(is_array(surf)) + surf = array_spread(surf); + else + surf = [ surf ]; + + var dx = 0; + var dy = 0; + var ind = 0; + var col = round(sqrt(array_length(surf))); + + for( var i = 0; i < array_length(surf); i++ ) { + var s = surf[i]; + var sw = surface_get_width(s); + var sh = surface_get_height(s); + if(scale == 0) + scale = min(pw / sw, ph / sh); + var sx = dx + pw / 2 - (sw * scale) / 2 + panx; + var sy = dy + ph / 2 - (sh * scale) / 2 + pany; + + draw_surface_ext(s, sx, sy, scale, scale, 0, c_white, 1); + draw_set_color(COLORS._main_icon); + draw_rectangle(sx, sy, sx + sw * scale, sy + sh * scale, true); + + if(++ind >= col) { + ind = 0; + dx = 0; + dy += (sh + 2) * scale; + } else + dx += (sw + 2) * scale; + } surface_reset_target(); draw_surface(content_surface, px, py); @@ -68,7 +89,7 @@ if(node_target == noone) { draw_sprite_stretched_ext(THEME.dialog_bg, 0, dialog_x, dialog_y, dialog_w, title_height, c_white, title_show); - draw_set_alpha(title_show); + draw_set_alpha(0.5 + title_show * 0.5); draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text_title); draw_text(dialog_x + ui(padding + 8), dialog_y + ui(title_height) / 2, node_target.getFullName()); draw_set_alpha(1); diff --git a/objects/o_main/Draw_75.gml b/objects/o_main/Draw_75.gml index d51b8d7c7..c53c673ac 100644 --- a/objects/o_main/Draw_75.gml +++ b/objects/o_main/Draw_75.gml @@ -33,7 +33,7 @@ draw_tooltip_surface(content); break; case VALUE_TYPE.rigid : - draw_tooltip_text("[" + get_text("tooltip_rigid_object", "Rigidbody Object") + "id: " + string(content) + "]"); + draw_tooltip_text("[" + get_text("tooltip_rigid_object", "Rigidbody Object") + "id: " + string(content[$ "object"]) + "]"); break; case VALUE_TYPE.particle : draw_tooltip_text("[" + get_text("tooltip_particle_object", "Particle Object") + "]"); diff --git a/objects/o_main/Step_0.gml b/objects/o_main/Step_0.gml index 2393f3dd4..3db6c658c 100644 --- a/objects/o_main/Step_0.gml +++ b/objects/o_main/Step_0.gml @@ -1,13 +1,12 @@ /// @description init #region animation - ANIMATOR.frame_progress = false; - if(ANIMATOR.is_playing && ANIMATOR.play_freeze == 0) { ANIMATOR.time_since_last_frame += ANIMATOR.framerate * (delta_time / 1000000); if(ANIMATOR.time_since_last_frame >= 1) ANIMATOR.setFrame(ANIMATOR.real_frame + 1); } else { + ANIMATOR.frame_progress = false; ANIMATOR.setFrame(ANIMATOR.real_frame); ANIMATOR.time_since_last_frame = 0; } diff --git a/options/windows/options_windows.yy b/options/windows/options_windows.yy index 4d79c0e7e..8feaeec5c 100644 --- a/options/windows/options_windows.yy +++ b/options/windows/options_windows.yy @@ -14,7 +14,7 @@ "option_windows_description_info": "Pixel Composer", "option_windows_disable_sandbox": true, "option_windows_display_cursor": true, - "option_windows_display_name": "Pixel Composer 1.13.4", + "option_windows_display_name": "Pixel Composer 1.13.5", "option_windows_enable_steam": false, "option_windows_executable_name": "PixelComposer.exe", "option_windows_icon": "icons/icon.ico", @@ -33,6 +33,6 @@ "option_windows_steam_use_alternative_launcher": false, "option_windows_texture_page": "2048x2048", "option_windows_use_splash": false, - "option_windows_version": "1.13.4.0", + "option_windows_version": "1.13.5.0", "option_windows_vsync": false, } \ No newline at end of file diff --git a/scripts/GmlLua/GmlLua.gml b/scripts/GmlLua/GmlLua.gml index f1802c8da..1db5d3cb5 100644 --- a/scripts/GmlLua/GmlLua.gml +++ b/scripts/GmlLua/GmlLua.gml @@ -59,6 +59,14 @@ function __lua_set_color_alpha(color = c_white, alpha = 1) { draw_set_color(color); draw_set_alpha(alpha); } +function __lua_get_color(_x, _y) { + var surf = surface_get_target(); + if(!is_surface(surf)) return 0; + return surface_getpixel_ext(surf, _x, _y); +} +function __lua_get_color_surface(surface, _x, _y) { + return surface_getpixel_ext(surface, _x, _y); +} function __lua_color_make_rgb(r, g, b, normalize = false) { if(normalize) @@ -108,7 +116,11 @@ function __initLua() { [["alpha", "number", "Draw alpha"], ]], ["setColorAlpha", __lua_set_color_alpha, "setColorAlpha(color = white, alpha = 1)", "Set current drawing color and alpha.", [["color", "color", "Draw color"], ["alpha", "number", "Draw alpha"], ]], - + ["getColor", __lua_get_color, "getColor(x, y)", "Get color from current surface.", + [["x", "number", "Sample x position"], ["y", "number", "Sample y position"], ]], + ["getColorSurface", __lua_get_color_surface, "getColorSurface(surface, x, y)", "Get color from surface.", + [["surface", "surface", "Surface to get color from"], ["x", "number", "Sample x position"], ["y", "number", "Sample y position"], ]], + ["drawRect", __lua_draw_rectangle, "drawRect(x0, y0, x1, y1)", "Draw filled rectangle.", [["x0", "number", "Left position"], ["y0", "number", "Top position"], ["x1", "number", "Right position"], ["y1", "number", "Bottom position"], ]], ["drawRectOutline", __lua_draw_rectangle_outline, "drawRectOutline(x0, y0, x1, y1, thick = 1)", "Draw rectangle outline.", diff --git a/scripts/__VFX/__VFX.gml b/scripts/__VFX/__VFX.gml index 6df8a9133..f42a39b2d 100644 --- a/scripts/__VFX/__VFX.gml +++ b/scripts/__VFX/__VFX.gml @@ -183,7 +183,7 @@ function __part(_node) constructor { if(x0 > surf_w || y0 > surf_h || x1 < 0 || y1 < 0) return; //culling - var cc = (col == -1)? c_white : gradient_eval(col, lifeRat); + var cc = (col == -1)? c_white : col.eval(lifeRat); if(blend != c_white) cc = colorMultiply(blend, cc); alp_draw = alp * eval_curve_x(alp_fade, lifeRat); draw_surface_ext(ss, _xx, _yy, scx, scy, rot, cc, alp_draw); diff --git a/scripts/_node_VFX_spawner/_node_VFX_spawner.gml b/scripts/_node_VFX_spawner/_node_VFX_spawner.gml index 3e08d7e02..379fe3ccb 100644 --- a/scripts/_node_VFX_spawner/_node_VFX_spawner.gml +++ b/scripts/_node_VFX_spawner/_node_VFX_spawner.gml @@ -33,7 +33,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co inputs[| 11] = nodeValue("Scale over time", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11 ); - inputs[| 12] = nodeValue("Color over lifetime", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 12] = nodeValue("Color over lifetime", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 13] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) @@ -77,7 +77,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co inputs[| 27] = nodeValue("Spawn", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true); - inputs[| 28] = nodeValue("Random blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 28] = nodeValue("Random blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 29] = nodeValue("Directed from center", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false, "Make particle move away from the spawn center."); @@ -151,7 +151,6 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co var _color = current_data[12]; var _blend = current_data[28]; - var _bldTyp = inputs[| 28].getExtraData(); var _alpha = current_data[13]; var _fade = current_data[14]; @@ -241,7 +240,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co var _scy = random_range(_scale[2], _scale[3]) * _ss; var _alp = random_range(_alpha[0], _alpha[1]); - var _bld = gradient_eval(_blend, random(1), ds_list_get(_bldTyp, 0)); + var _bld = _blend.eval(random(1)); part.seed = irandom(99999); part.create(_spr, xx, yy, _lif); diff --git a/scripts/animation_controller/animation_controller.gml b/scripts/animation_controller/animation_controller.gml index 4aa232bf4..028675454 100644 --- a/scripts/animation_controller/animation_controller.gml +++ b/scripts/animation_controller/animation_controller.gml @@ -30,7 +30,8 @@ frame_progress = true; time_since_last_frame = 0; UPDATE = RENDER_TYPE.full; - } + } else + frame_progress = false; } } #endregion diff --git a/scripts/buttonGradient/buttonGradient.gml b/scripts/buttonGradient/buttonGradient.gml index 068073d39..23a0348da 100644 --- a/scripts/buttonGradient/buttonGradient.gml +++ b/scripts/buttonGradient/buttonGradient.gml @@ -3,7 +3,6 @@ function buttonGradient(_onApply, dialog = noone) : widget() constructor { parentDialog = dialog; current_gradient = noone; - current_data = noone; function apply(value) { if(!interactable) return; @@ -12,7 +11,7 @@ function buttonGradient(_onApply, dialog = noone) : widget() constructor { static trigger = function() { var dialog = dialogCall(o_dialog_gradient, WIN_W / 2, WIN_H / 2); - dialog.setDefault(current_gradient, current_data); + dialog.setDefault(current_gradient); dialog.onApply = apply; dialog.interactable = interactable; @@ -20,13 +19,12 @@ function buttonGradient(_onApply, dialog = noone) : widget() constructor { parentDialog.addChildren(dialog); } - static draw = function(_x, _y, _w, _h, _gradient, _data, _m) { + static draw = function(_x, _y, _w, _h, _gradient, _m) { x = _x; y = _y; w = _w; h = _h; current_gradient = _gradient; - current_data = _data; var click = false; if(ihover && point_in_rectangle(_m[0], _m[1], _x, _y, _x + _w, _y + _h)) { @@ -42,7 +40,7 @@ function buttonGradient(_onApply, dialog = noone) : widget() constructor { if(mouse_press(mb_left)) deactivate(); } - draw_gradient(_x + ui(6), _y + ui(6), _w - ui(12), _h - ui(12), _gradient, _data[| 0]); + _gradient.draw(_x + ui(6), _y + ui(6), _w - ui(12), _h - ui(12)); if(WIDGET_CURRENT == self) draw_sprite_stretched(THEME.widget_selecting, 0, _x - ui(3), _y - ui(3), _w + ui(6), _h + ui(6)); diff --git a/scripts/color_function/color_function.gml b/scripts/color_function/color_function.gml index 52eb07d6d..db1425f96 100644 --- a/scripts/color_function/color_function.gml +++ b/scripts/color_function/color_function.gml @@ -5,6 +5,10 @@ function colorFromRGBArray(arr) { return make_color_rgb(r, g, b); } +function color_get_alpha(color) { + return (color & (0xFF << 24)) >> 24; +} + function colorArrayFromReal(clr) { return [color_get_red(clr) / 255, color_get_green(clr) / 255, color_get_blue(clr) / 255 ]; } @@ -32,29 +36,29 @@ function colorMultiply(c1, c2) { return make_color_rgb((r1 * r2) / 255, (g1 * g2) / 255, (b1 * b2) / 255); } -function color_diff(c1, c2) { +function color_diff(c1, c2, fast = false) { var _c1_r = c1 & 255; - var _c1_g = (c1 >> 8) & 255; + var _c1_g = (c1 >> 8) & 255; var _c1_b = (c1 >> 16) & 255; var _c1_a = (c1 >> 24) & 255; - _c1_r = _c1_r / 255; - _c1_g = _c1_g / 255; - _c1_b = _c1_b / 255; _c1_a = _c1_a / 255; + _c1_r = _c1_r / 255 * _c1_a; + _c1_g = _c1_g / 255 * _c1_a; + _c1_b = _c1_b / 255 * _c1_a; var _c2_r = c2 & 255; - var _c2_g = (c2 >> 8) & 255; + var _c2_g = (c2 >> 8) & 255; var _c2_b = (c2 >> 16) & 255; var _c2_a = (c2 >> 24) & 255; - _c2_r = _c2_r / 255; - _c2_g = _c2_g / 255; - _c2_b = _c2_b / 255; _c2_a = _c2_a / 255; + _c2_r = _c2_r / 255 * _c2_a; + _c2_g = _c2_g / 255 * _c2_a; + _c2_b = _c2_b / 255 * _c2_a; - var dist = sqrt(sqr(_c1_r - _c2_r) + sqr(_c1_g - _c2_g) + sqr(_c1_b - _c2_b) + sqr(_c1_a - _c2_a)); - return dist; + if(fast) return sqr(_c1_r - _c2_r) + sqr(_c1_g - _c2_g) + sqr(_c1_b - _c2_b) + sqr(_c1_a - _c2_a); + return sqrt(sqr(_c1_r - _c2_r) + sqr(_c1_g - _c2_g) + sqr(_c1_b - _c2_b) + sqr(_c1_a - _c2_a)); } #region sorting functions diff --git a/scripts/color_selector/color_selector.gml b/scripts/color_selector/color_selector.gml index 8e37f6b41..2bcae0935 100644 --- a/scripts/color_selector/color_selector.gml +++ b/scripts/color_selector/color_selector.gml @@ -142,22 +142,24 @@ function colorSelector(onApply = noone) constructor { var h = shader_get_uniform(sh_color_picker_hue, "hue"); shader_set_uniform_f(h, hue / 256); - draw_surface_safe(color_surface, col_x, col_y); + draw_surface_ext_safe(color_surface, col_x, col_y,,,,, interactable * 0.5 + 0.5); + shader_reset(); } else if(disp_mode == 1) { shader_set(sh_color_picker_value); var v = shader_get_uniform(sh_color_picker_value, "value"); shader_set_uniform_f(v, val / 256); - draw_surface_safe(color_surface, col_x, col_y); + draw_surface_ext_safe(color_surface, col_x, col_y,,,,, interactable * 0.5 + 0.5); + shader_reset(); } - shader_reset(); - #region hue + #region side control var hue_x = col_x + ui(280); var hue_y = col_y; draw_sprite_stretched(THEME.ui_panel_bg, 0, hue_x - ui(8), hue_y - ui(8), ui(32), ui(256 + 16)); + draw_set_alpha(interactable * 0.9 + 0.1); for(var i = 0; i < 256; i++) { if(disp_mode == 0) draw_set_color(make_color_hsv(i, 255, 255)); @@ -165,7 +167,8 @@ function colorSelector(onApply = noone) constructor { draw_set_color(make_color_hsv(hue, 255, 255 - i)); draw_rectangle(hue_x, hue_y + ui(i), hue_x + ui(16), hue_y + ui(i + 1), false); } - + draw_set_alpha(1); + if(disp_mode == 0) { var hy = hue_y + ui(hue); draw_sprite_stretched_ext(s_ui_base_white, 0, hue_x - ui(3), hy - ui(6), ui(24), ui(10), make_color_hsv(hue, 255, 255), 1); diff --git a/scripts/curveBox/curveBox.gml b/scripts/curveBox/curveBox.gml index dc4bb17ae..d81fae949 100644 --- a/scripts/curveBox/curveBox.gml +++ b/scripts/curveBox/curveBox.gml @@ -4,9 +4,11 @@ function curveBox(_onModify) : widget() constructor { curve_surface = surface_create(1, 1); node_dragging = -1; node_drag_typ = -1; + miny = 0; + maxy = 1; - static get_x = function(val, _x, _w) { return _x + _w * clamp( val, 0, 1); } - static get_y = function(val, _y, _h) { return _y + _h * clamp(1 - val, 0, 1); } + static get_x = function(val, _x, _w) { return _x + _w * val; } + static get_y = function(val, _y, _h) { return _y + _h * (1 - (val - miny) / (maxy - miny)); } static register = function() {} @@ -17,8 +19,6 @@ function curveBox(_onModify) : widget() constructor { curve_surface = surface_verify(curve_surface, _w, _h); var points = array_length(_data) / 6; - draw_set_color(COLORS.widget_curve_outline); - draw_rectangle(_x, _y, _x + _w, _y + _h, true); if(node_dragging != -1) { if(node_drag_typ == 0) { @@ -36,7 +36,7 @@ function curveBox(_onModify) : widget() constructor { } var _my = 1 - (_m[1] - _y) / _h; - _my = clamp(_my, 0, 1); + _my = clamp(_my * (maxy - miny) + miny, 0, 1); _data[node_dragging + 1] = _my; //sort by x @@ -78,9 +78,9 @@ function curveBox(_onModify) : widget() constructor { _data[node_dragging + 2] = (_mx - _px) * node_drag_typ; var _my = 1 - (_m[1] - _y) / _h; - _my = clamp(_my, 0, 1); - _data[node_dragging - 1] = (_py - _my) * node_drag_typ; - _data[node_dragging + 3] = (_my - _py) * node_drag_typ; + _my = _my * (maxy - miny) + miny; + _data[node_dragging - 1] = clamp(_py - _my, -1, 1) * node_drag_typ; + _data[node_dragging + 3] = clamp(_my - _py, -1, 1) * node_drag_typ; if(onModify(_data)) UNDO_HOLDING = true; @@ -99,93 +99,129 @@ function curveBox(_onModify) : widget() constructor { var point_insert = 1; var _x1 = 0; - for( var i = 0; i < points; i++ ) { - var ind = i * 6; - var _x0 = _data[ind + 2]; - var _y0 = _data[ind + 3]; - var bx0 = _x0 + _data[ind + 0]; - var by0 = _y0 + _data[ind + 1]; - var ax0 = _x0 + _data[ind + 4]; - var ay0 = _y0 + _data[ind + 5]; - - bx0 = get_x(bx0, _x, _w); - by0 = get_y(by0, _y, _h); - _x0 = get_x(_x0, _x, _w); - _y0 = get_y(_y0, _y, _h); - ax0 = get_x(ax0, _x, _w); - ay0 = get_y(ay0, _y, _h); - + var msx = _m[0] - _x; + var msy = _m[1] - _y; + + surface_set_target(curve_surface); + draw_clear_alpha(0, 0); draw_set_color(COLORS.widget_curve_line); - if(i > 0) { //draw pre line - draw_line(bx0, by0, _x0, _y0); - - draw_circle(bx0, by0, 3, false); - if(hover && point_in_circle(_m[0], _m[1], bx0, by0, 10)) { - draw_circle(bx0, by0, 5, false); - node_hovering = ind + 2; - node_hover_typ = -1; - } - } + draw_set_alpha(0.75); + var y0 = _h - _h * (0 - miny) / (maxy - miny); + draw_line(0, y0, _w, y0); + var y1 = _h - _h * (1 - miny) / (maxy - miny); + draw_line(0, y1, _w, y1); + draw_set_alpha(1); + + for( var i = 0; i < points; i++ ) { + var ind = i * 6; + var _x0 = _data[ind + 2]; + var _y0 = _data[ind + 3]; + var bx0 = _x0 + _data[ind + 0]; + var by0 = _y0 + _data[ind + 1]; + var ax0 = _x0 + _data[ind + 4]; + var ay0 = _y0 + _data[ind + 5]; - if(i < points - 1) { //draw post line - draw_line(ax0, ay0, _x0, _y0); + bx0 = get_x(bx0, 0, _w); + by0 = get_y(by0, 0, _h); + _x0 = get_x(_x0, 0, _w); + _y0 = get_y(_y0, 0, _h); + ax0 = get_x(ax0, 0, _w); + ay0 = get_y(ay0, 0, _h); - draw_circle(ax0, ay0, 3, false); - if(hover && point_in_circle(_m[0], _m[1], ax0, ay0, 10)) { - draw_circle(ax0, ay0, 5, false); - node_hovering = ind + 2; - node_hover_typ = 1; + draw_set_color(COLORS.widget_curve_line); + if(i > 0) { //draw pre line + draw_line(bx0, by0, _x0, _y0); + + draw_circle(bx0, by0, 3, false); + if(hover && point_in_circle(msx, msy, bx0, by0, 10)) { + draw_circle(bx0, by0, 5, false); + node_hovering = ind + 2; + node_hover_typ = -1; + } } - } + if(i < points - 1) { //draw post line + draw_line(ax0, ay0, _x0, _y0); + + draw_circle(ax0, ay0, 3, false); + if(hover && point_in_circle(msx, msy, ax0, ay0, 10)) { + draw_circle(ax0, ay0, 5, false); + node_hovering = ind + 2; + node_hover_typ = 1; + } + } + + draw_set_color(COLORS._main_accent); + draw_circle(_x0, _y0, 3, false); + if(hover && point_in_circle(msx, msy, _x0, _y0, 10)) { + draw_circle(_x0, _y0, 5, false); + node_hovering = ind + 2; + node_hover_typ = 0; + } + + if(msx >= _x1 && msy <= _x0) + point_insert = i; + _x1 = _x0; + } + draw_set_color(COLORS._main_accent); - draw_circle(_x0, _y0, 3, false); - if(hover && point_in_circle(_m[0], _m[1], _x0, _y0, 10)) { - draw_circle(_x0, _y0, 5, false); - node_hovering = ind + 2; - node_hover_typ = 0; - } - - if(_m[0] >= _x1 && _m[0] <= _x0) - point_insert = i; - _x1 = _x0; + draw_curve(0, 0, _w, -_h, _data, miny, maxy); + + surface_reset_target(); + + var bx = _x + _w - ui(6 + 24); + var by = _y + _h - ui(6 + 24); + + if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, active, hover,, THEME.add) == 2) { + miny = 0; + maxy = 1; + } + + bx -= ui(24 + 4); + if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, active, hover,, THEME.minus) == 2) { + miny = -1; + maxy = 2; } - draw_set_color(COLORS._main_accent); - draw_curve(_x, _y, _w, -_h, _data); - - if(hover && point_in_rectangle(_m[0], _m[1], _x - ui(5), _y - ui(5), _x + _w + ui(5), _y + _h + ui(5))) { - if(mouse_press(mb_left, active)) { - if(node_hovering == -1) { - var _ind = point_insert * 6; - var _px = (_m[0] - _x) / _w; - var _py = 1 - (_m[1] - _y) / _h; + if(hover) { + if(point_in_rectangle(_m[0], _m[1], _x + _w - ui(6 + 24 * 2 + 4), _y + _h - ui(6 + 24), _x + _w + ui(5), _y + _h + ui(5))) { + } else if(point_in_rectangle(msx, msy, -ui(5), -ui(5), _w + ui(5), _h + ui(5))) { + if(mouse_press(mb_left, active)) { + if(node_hovering == -1) { + var _ind = point_insert * 6; + var _px = (_m[0] - _x) / _w; + var _py = 1 - (_m[1] - _y) / _h; - array_insert(_data, _ind + 0, -0.1); - array_insert(_data, _ind + 1, 0); - array_insert(_data, _ind + 2, _px); - array_insert(_data, _ind + 3, _py); - array_insert(_data, _ind + 4, 0.1); - array_insert(_data, _ind + 5, 0); - if(onModify(_data)) - UNDO_HOLDING = true; + array_insert(_data, _ind + 0, -0.1); + array_insert(_data, _ind + 1, 0); + array_insert(_data, _ind + 2, _px); + array_insert(_data, _ind + 3, _py); + array_insert(_data, _ind + 4, 0.1); + array_insert(_data, _ind + 5, 0); + if(onModify(_data)) + UNDO_HOLDING = true; - node_dragging = _ind + 2; - node_drag_typ = 0; - } else { - node_dragging = node_hovering; - node_drag_typ = node_hover_typ; - } - } else if(mouse_press(mb_right, active)) { - var node_point = (node_hovering - 2) / 6; - if(node_hover_typ == 0 && node_point > 0 && node_point < points - 1) { - array_delete(_data, node_point * 6, 6); - if(onModify(_data)) - UNDO_HOLDING = true; + node_dragging = _ind + 2; + node_drag_typ = 0; + } else { + node_dragging = node_hovering; + node_drag_typ = node_hover_typ; + } + } else if(mouse_press(mb_right, active)) { + var node_point = (node_hovering - 2) / 6; + if(node_hover_typ == 0 && node_point > 0 && node_point < points - 1) { + array_delete(_data, node_point * 6, 6); + if(onModify(_data)) + UNDO_HOLDING = true; + } } } } + draw_surface(curve_surface, _x, _y); + draw_set_color(COLORS.widget_curve_outline); + draw_rectangle(_x, _y, _x + _w, _y + _h, true); + resetFocus(); } } \ No newline at end of file diff --git a/scripts/curve_bezier_function/curve_bezier_function.gml b/scripts/curve_bezier_function/curve_bezier_function.gml index 908315ff2..ef9911963 100644 --- a/scripts/curve_bezier_function/curve_bezier_function.gml +++ b/scripts/curve_bezier_function/curve_bezier_function.gml @@ -4,7 +4,7 @@ #macro CURVE_DEF_10 [0, 0, 0, 1, 1/3, -1/3, /**/ -1/3, 1/3, 1, 0, 0, 0] #macro CURVE_DEF_11 [0, 0, 0, 1, 1/3, 0, /**/ -1/3, 0, 1, 1, 0, 0] -function draw_curve(x0, y0, _w, _h, _bz) { +function draw_curve(x0, y0, _w, _h, _bz, miny = 0, maxy = 1) { var segments = array_length(_bz) / 6 - 1; for( var i = 0; i < segments; i++ ) { @@ -28,17 +28,18 @@ function draw_curve(x0, y0, _w, _h, _bz) { var dw = dx1 - dx0; var smp = ceil((_x1 - _x0) * 32); - draw_curve_segment(dx0, y0, dw, _h, [_y0, ax0, ay0, bx1, by1, _y1], smp); + draw_curve_segment(dx0, y0, dw, _h, [_y0, ax0, ay0, bx1, by1, _y1], smp, miny, maxy); } } -function draw_curve_segment(x0, y0, _w, _h, _bz, SAMPLE = 32) { +function draw_curve_segment(x0, y0, _w, _h, _bz, SAMPLE = 32, miny = 0, maxy = 1) { var _ox, _oy; for(var i = 0; i <= SAMPLE; i++) { var t = i / SAMPLE; var _r = eval_curve_segment_t_position(t, _bz); var _rx = _r[0], _ry = _r[1]; + _ry = (_ry - miny) / (maxy - miny); var _nx = _rx * _w + x0; var _ny = (_h? _ry : 1 - _ry) * abs(_h) + y0; diff --git a/scripts/dialog_management/dialog_management.gml b/scripts/dialog_management/dialog_management.gml index ea8ab2c1e..bbb83d0eb 100644 --- a/scripts/dialog_management/dialog_management.gml +++ b/scripts/dialog_management/dialog_management.gml @@ -48,6 +48,11 @@ function MenuItem(name, func, spr = noone, hotkey = noone) constructor { return self; } + static setActive = function(active) { + self.active = active; + return self; + } + static deactivate = function() { active = false; return self; diff --git a/scripts/draw_line_curve/draw_line_curve.gml b/scripts/draw_line_curve/draw_line_curve.gml index d8c05c439..5a317f4f4 100644 --- a/scripts/draw_line_curve/draw_line_curve.gml +++ b/scripts/draw_line_curve/draw_line_curve.gml @@ -35,12 +35,16 @@ function draw_line_curve(x0, y0, x1, y1, thick = 1) { //buffer_delete(buff); } -function draw_line_curve_color(x0, y0, x1, y1, thick, col1, col2, type = LINE_STYLE.solid) { - var xc = (x0 + x1) / 2; +function draw_line_curve_color(x0, y0, x1, y1, xc, yc, _s, thick, col1, col2, type = LINE_STYLE.solid) { var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 16 * PREF_MAP[? "connection_line_sample"]); sample = clamp(sample, 8, 128); - var c = draw_get_color(); + var x2 = lerp(x0, x1, 0. - sign(x1 - x0) * 0.2) - abs(y1 - y0) * 0.1; + var x3 = lerp(x0, x1, 1. + sign(x1 - x0) * 0.2) + abs(y1 - y0) * 0.1; + var y2 = y0; + var y3 = y1; + + var c = draw_get_color(); var ox, oy, nx, ny, t, it, oc, nc; var dash_distance = 2; @@ -48,8 +52,18 @@ function draw_line_curve_color(x0, y0, x1, y1, thick, col1, col2, type = LINE_ST t = i / sample; it = 1 - t; - nx = x0 * t * t * t + 3 * xc * it * t * t + 3 * xc * it * it * t + x1 * it * it * it; - ny = y0 * t * t * t + 3 * y0 * it * t * t + 3 * y1 * it * it * t + y1 * it * it * it; + nx = x0 * power(t, 4) + + 4 * x2 * power(it, 1) * power(t, 3) + + 6 * xc * power(it, 2) * power(t, 2) + + 4 * x3 * power(it, 3) * power(t, 1) + + x1 * power(it, 4); + + ny = y0 * power(t, 4) + + 4 * y2 * power(it, 1) * power(t, 3) + + 6 * yc * power(it, 2) * power(t, 2) + + 4 * y3 * power(it, 3) * power(t, 1) + + y1 * power(it, 4); + nc = merge_color(col1, col2, t); if(i) { @@ -70,21 +84,34 @@ function draw_line_curve_color(x0, y0, x1, y1, thick, col1, col2, type = LINE_ST } } -function distance_to_curve(mx, my, x0, y0, x1, y1) { - var xc = (x0 + x1) / 2; +function distance_to_curve(mx, my, x0, y0, x1, y1, xc, yc, _s) { var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 16 * PREF_MAP[? "connection_line_sample"]); sample = clamp(sample, 8, 128); var dist = 999999; var ox, oy, nx, ny, t, it; + var x2 = lerp(x0, x1, 0. - sign(x1 - x0) * 0.2); + var x3 = lerp(x0, x1, 1. + sign(x1 - x0) * 0.2); + var y2 = y0; + var y3 = y1; + for( var i = 0; i <= sample; i++ ) { t = i / sample; it = 1 - t; - nx = x0 * t * t * t + 3 * xc * it * t * t + 3 * xc * it * it * t + x1 * it * it * it; - ny = y0 * t * t * t + 3 * y0 * it * t * t + 3 * y1 * it * it * t + y1 * it * it * it; - + nx = x0 * power(t, 4) + + 4 * x2 * power(it, 1) * power(t, 3) + + 6 * xc * power(it, 2) * power(t, 2) + + 4 * x3 * power(it, 3) * power(t, 1) + + x1 * power(it, 4); + + ny = y0 * power(t, 4) + + 4 * y2 * power(it, 1) * power(t, 3) + + 6 * yc * power(it, 2) * power(t, 2) + + 4 * y3 * power(it, 3) * power(t, 1) + + y1 * power(it, 4); + if(i) dist = min(dist, distance_to_line(mx, my, ox, oy, nx, ny)); @@ -98,21 +125,23 @@ function distance_to_curve(mx, my, x0, y0, x1, y1) { function draw_line_elbow(x0, y0, x1, y1, thick = 1, type = LINE_STYLE.solid) { var cx = (x0 + x1) / 2; draw_line_width(x0, y0, cx, y0, thick); - draw_line_width(cx, y0 - thick / 2, cx, y1 + thick / 2, thick); + draw_line_width(cx, y0 - thick / 2 * sign(y1 - y0), cx, y1 + thick / 2 * sign(y1 - y0), thick); draw_line_width(cx, y1, x1, y1, thick); } -function draw_line_elbow_color(x0, y0, x1, y1, thick, col1, col2, type = LINE_STYLE.solid) { - var cx = (x0 + x1) / 2; - var cm = merge_color(col1, col2, 0.5); - +function draw_line_elbow_color(x0, y0, x1, y1, cx, thick, col1, col2, type = LINE_STYLE.solid) { + var _x0 = min(x0, x1); + var _x1 = max(x0, x1); + var rat = (cx - _x0) / (_x1 - _x0); + var cm = merge_color(col1, col2, rat); + if(type == LINE_STYLE.solid) { draw_line_width_color(x0, y0, cx, y0, thick, col1, cm); - draw_line_width_color(cx, y0 - thick / 2, cx, y1 + thick / 2, thick, cm, cm); + draw_line_width_color(cx, y0 - thick / 2 * sign(y1 - y0), cx, y1 + thick / 2 * sign(y1 - y0), thick, cm, cm); draw_line_width_color(cx, y1, x1, y1, thick, cm, col2); } else { draw_line_dashed_color(x0, y0, cx, y0, thick, col1, cm, 12); - draw_line_dashed_color(cx, y0 - thick / 2, cx, y1 + thick / 2, thick, cm, cm, 12); + draw_line_dashed_color(cx, y0 - thick / 2 * sign(y1 - y0), cx, y1 + thick / 2 * sign(y1 - y0), thick, cm, cm, 12); draw_line_dashed_color(cx, y1, x1, y1, thick, cm, col2, 12); } } \ No newline at end of file diff --git a/scripts/draw_line_dashed/draw_line_dashed.gml b/scripts/draw_line_dashed/draw_line_dashed.gml index a8a050a0d..0a81a0149 100644 --- a/scripts/draw_line_dashed/draw_line_dashed.gml +++ b/scripts/draw_line_dashed/draw_line_dashed.gml @@ -1,4 +1,4 @@ -function draw_line_dashed(x0, y0, x1, y1, th = 1, dash_distance = 8) { +function draw_line_dashed(x0, y0, x1, y1, th = 1, dash_distance = 8, dash_shift = 0) { var dis = point_distance(x0, y0, x1, y1); var dir = point_direction(x0, y0, x1, y1); var part = ceil(dis / dash_distance); @@ -6,19 +6,20 @@ function draw_line_dashed(x0, y0, x1, y1, th = 1, dash_distance = 8) { var dx = lengthdir_x(1, dir); var dy = lengthdir_y(1, dir); - var ox, oy, nx, ny; - var dd = 0; + var ox, oy, nx, ny, od, nd; + var rat = dash_distance / dis; for( var i = 0; i <= part; i++ ) { - dd = min(dis, i * dash_distance); - nx = x0 + dx * dd; - ny = y0 + dy * dd; + nd = dis * frac(i * rat + dash_shift / dis); + nx = x0 + dx * nd; + ny = y0 + dy * nd; - if(i && i % 2) + if(i && i % 2 && nd > od) draw_line_width(ox, oy, nx, ny, th); ox = nx; oy = ny; + od = nd; } } diff --git a/scripts/draw_tooltip/draw_tooltip.gml b/scripts/draw_tooltip/draw_tooltip.gml index 1d528c4a7..c00e8478e 100644 --- a/scripts/draw_tooltip/draw_tooltip.gml +++ b/scripts/draw_tooltip/draw_tooltip.gml @@ -18,6 +18,11 @@ function draw_tooltip_color(clr) { return; } + if(is_string(clr)) { + draw_tooltip_gradient(clr); + return; + } + var ww = ui(32); var hh = ui(32); @@ -44,6 +49,19 @@ function draw_tooltip_palette(clr) { drawPalette(clr, mx + ui(8), my + ui(8), ui(ww), ui(hh)); } +function draw_tooltip_gradient(clr) { + var ww = min(ui(160), ui(32) * array_length(clr)); + var hh = ui(32); + + var mx = min(mouse_mx + ui(16), WIN_W - (ww + ui(16))); + var my = min(mouse_my + ui(16), WIN_H - (hh + ui(16))); + + draw_sprite_stretched(THEME.textbox, 3, mx, my, ww + ui(16), hh + ui(16)); + draw_sprite_stretched(THEME.textbox, 0, mx, my, ww + ui(16), hh + ui(16)); + + clr.draw(mx + ui(8), my + ui(8), ui(ww), ui(hh)); +} + function draw_tooltip_surface_array(surf) { var amo = array_length(surf); var col = ceil(sqrt(amo)); diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index 16f812a0d..12cc64db2 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -28,9 +28,9 @@ COLOR_KEYS = []; globalvar VERSION, SAVEFILE_VERSION, VERSION_STRING; - VERSION = 1134; - SAVEFILE_VERSION = 1330; - VERSION_STRING = "1.13.4"; + VERSION = 1135; + SAVEFILE_VERSION = 1350; + VERSION_STRING = "1.13.5"; globalvar NODES, NODE_MAP, APPEND_MAP, HOTKEYS, HOTKEY_CONTEXT, NODE_INSTANCES; diff --git a/scripts/gradients_function/gradients_function.gml b/scripts/gradients_function/gradients_function.gml index a3b43b525..78d64eb1b 100644 --- a/scripts/gradients_function/gradients_function.gml +++ b/scripts/gradients_function/gradients_function.gml @@ -18,102 +18,134 @@ function gradientKey(time, value) constructor { } } -function draw_gradient(_x, _y, _w, _h, _grad, _int = GRADIENT_INTER.smooth) { - static RES = 48; - var _step = _w / RES; - var _ox, _oc; +function gradientObject(color = c_black) constructor { + if(is_array(color)) + keys = [ new gradientKey(0, color[0]), new gradientKey(1, color[1]) ]; + else + keys = [ new gradientKey(0, color) ]; + type = GRADIENT_INTER.smooth; - var uniform_grad_blend = shader_get_uniform(sh_gradient_display, "gradient_blend"); - var uniform_grad = shader_get_uniform(sh_gradient_display, "gradient_color"); - var uniform_grad_time = shader_get_uniform(sh_gradient_display, "gradient_time"); - var uniform_grad_key = shader_get_uniform(sh_gradient_display, "gradient_keys"); - - var _grad_color = []; - var _grad_time = []; - - for(var i = 0; i < array_length(_grad); i++) { - if(_grad[i].value == undefined) return; + static clone = function() { + var g = new gradientObject(); + for( var i = 0; i < array_length(keys); i++ ) { + g.keys[i] = keys[i].clone(); + } + g.type = type; - _grad_color[i * 4 + 0] = color_get_red(_grad[i].value) / 255; - _grad_color[i * 4 + 1] = color_get_green(_grad[i].value) / 255; - _grad_color[i * 4 + 2] = color_get_blue(_grad[i].value) / 255; - _grad_color[i * 4 + 3] = 1; - _grad_time[i] = _grad[i].time; + return g; } - if(array_length(_grad) == 0) { - draw_sprite_stretched(s_fx_pixel, 0, _x, _y, _w, _h) - } else { - shader_set(sh_gradient_display); - shader_set_uniform_i(uniform_grad_blend, _int); - shader_set_uniform_f_array_safe(uniform_grad, _grad_color); - shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_grad)); + static add = function(_addkey, _deleteDup = true) { + if(array_length(keys) == 0) { + array_push(keys, _addkey); + return; + } + + for(var i = 0; i < array_length(keys); i++) { + var _key = keys[i]; + + if(_key.time == _addkey.time) { + if(_deleteDup) + _key.value = _addkey.value; + return; + } else if(_key.time > _addkey.time) { + array_insert(keys, i, _addkey); + return; + } + } + + array_push(keys, _addkey); + } + + static eval = function(position) { + if(array_length(keys) == 0) return c_black; + if(array_length(keys) == 1) return keys[0].value; + + for(var i = 0; i < array_length(keys); i++) { + var _key = keys[i]; + if(_key.time < position) continue; + if(_key.time == position) return keys[i].value; + + if(i == 0) //before first color + return keys[0].value; + + var c0 = keys[i - 1].value; + if(type == GRADIENT_INTER.smooth) { + var rat = (position - keys[i - 1].time) / (keys[i].time - keys[i - 1].time); + var c1 = keys[i].value; + return merge_color(c0, c1, rat); + } else if(type == GRADIENT_INTER.none) { + return c0; + } + } + + return keys[array_length(keys) - 1].value; //after last color + } + + static draw = function(_x, _y, _w, _h) { + static RES = 48; + var _step = _w / RES; + var _ox, _oc; + + var uniform_grad_blend = shader_get_uniform(sh_gradient_display, "gradient_blend"); + var uniform_grad = shader_get_uniform(sh_gradient_display, "gradient_color"); + var uniform_grad_time = shader_get_uniform(sh_gradient_display, "gradient_time"); + var uniform_grad_key = shader_get_uniform(sh_gradient_display, "gradient_keys"); + + var _grad_color = []; + var _grad_time = []; + + for(var i = 0; i < array_length(keys); i++) { + if(keys[i].value == undefined) return; + + _grad_color[i * 4 + 0] = color_get_red(keys[i].value) / 255; + _grad_color[i * 4 + 1] = color_get_green(keys[i].value) / 255; + _grad_color[i * 4 + 2] = color_get_blue(keys[i].value) / 255; + _grad_color[i * 4 + 3] = 1; + _grad_time[i] = keys[i].time; + } + + if(array_length(keys) == 0) { + draw_sprite_stretched(s_fx_pixel, 0, _x, _y, _w, _h) + } else { + shader_set(sh_gradient_display); + shader_set_uniform_i(uniform_grad_blend, type); + shader_set_uniform_f_array_safe(uniform_grad, _grad_color); + shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); + shader_set_uniform_i(uniform_grad_key, array_length(keys)); - draw_sprite_stretched(s_fx_pixel, 0, _x, _y, _w, _h) - shader_reset(); - } -} - -function gradient_eval(_gradient, _time, _int = GRADIENT_INTER.smooth) { - if(array_length(_gradient) == 0) return c_white; - if(array_length(_gradient) == 1) return _gradient[0].value; - - for(var i = 0; i < array_length(_gradient); i++) { - var _key = _gradient[i]; - if(_key.time < _time) continue; - if(_key.time == _time) return _gradient[i].value; - - if(i == 0) //before first color - return _gradient[0].value; - - var c0 = _gradient[i - 1].value; - if(_int == GRADIENT_INTER.smooth) { - var rat = (_time - _gradient[i - 1].time) / (_gradient[i].time - _gradient[i - 1].time); - var c1 = _gradient[i].value; - return merge_color(c0, c1, rat); - } else if(_int == GRADIENT_INTER.none) { - return c0; + draw_sprite_stretched(s_fx_pixel, 0, _x, _y, _w, _h) + shader_reset(); } } - return _gradient[array_length(_gradient) - 1].value; //after last color -} - -function gradient_add(_gradient, _addkey, _deleteDup) { - if(array_length(_gradient) == 0) { - array_push(_gradient, _addkey); - return; - } + static toArray = function() { + var _grad_color = [], _grad_time = []; + + for(var i = 0; i < array_length(keys); i++) { + if(is_undefined(keys[i].value)) continue; - for(var i = 0; i < array_length(_gradient); i++) { - var _key = _gradient[i]; - - if(_key.time == _addkey.time) { - if(_deleteDup) - _key.value = _addkey.value; - return; - } else if(_key.time > _addkey.time) { - array_insert(_gradient, i, _addkey); - return; + _grad_color[i * 4 + 0] = color_get_red(keys[i].value) / 255; + _grad_color[i * 4 + 1] = color_get_green(keys[i].value) / 255; + _grad_color[i * 4 + 2] = color_get_blue(keys[i].value) / 255; + _grad_color[i * 4 + 3] = 1; + _grad_time[i] = keys[i].time; } - } - - array_push(_gradient, _addkey); -} - -function gradient_to_array(_gradient) { - var _grad_color = [], _grad_time = []; - for(var i = 0; i < array_length(_gradient); i++) { - if(is_undefined(_gradient[i].value)) continue; - - _grad_color[i * 4 + 0] = color_get_red(_gradient[i].value) / 255; - _grad_color[i * 4 + 1] = color_get_green(_gradient[i].value) / 255; - _grad_color[i * 4 + 2] = color_get_blue(_gradient[i].value) / 255; - _grad_color[i * 4 + 3] = 1; - _grad_time[i] = _gradient[i].time; + return [ _grad_color, _grad_time ]; } - return [ _grad_color, _grad_time ]; + static serialize = function() { + return json_stringify(self); + } + + static deserialize = function(str) { + var s = json_parse(str); + type = s.type; + keys = []; + for( var i = 0; i < array_length(s.keys); i++ ) + keys[i] = new gradientKey(s.keys[i].time, s.keys[i].value); + + return self; + } } \ No newline at end of file diff --git a/scripts/load_function/load_function.gml b/scripts/load_function/load_function.gml index a95a5145a..d98dba7b9 100644 --- a/scripts/load_function/load_function.gml +++ b/scripts/load_function/load_function.gml @@ -156,16 +156,7 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) { log_warning("LOAD, update", exception_print(e)); } - try { - for(var i = 0; i < ds_list_size(create_list); i++) { - if(create_list[| i].hasInspectorUpdate()) - create_list[| i].inspectorUpdate(); - } - } catch(e) { - log_warning("LOAD, update", exception_print(e)); - } - - Render(); + Render(, true); if(!ds_queue_empty(CONNECTION_CONFLICT)) { var pass = 0; diff --git a/scripts/load_palette/load_palette.gml b/scripts/load_palette/load_palette.gml index 0dcaf4c6b..ef27e7511 100644 --- a/scripts/load_palette/load_palette.gml +++ b/scripts/load_palette/load_palette.gml @@ -13,7 +13,7 @@ function loadPalette(path) { var _r = string_hexadecimal(string_copy(_w, 1, 2)); var _g = string_hexadecimal(string_copy(_w, 3, 2)); var _b = string_hexadecimal(string_copy(_w, 5, 2)); - + pal[_index++] = make_color_rgb(_r, _g, _b); break; case ".gpl" : diff --git a/scripts/node_array/node_array.gml b/scripts/node_array/node_array.gml index 1241f00c3..783a5dff6 100644 --- a/scripts/node_array/node_array.gml +++ b/scripts/node_array/node_array.gml @@ -171,6 +171,10 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { createNewInput(); } + static doApplyDeserialize = function() { + onValueUpdate(0); + } + static attributeSerialize = function() { var att = ds_map_create(); ds_map_override(att, attributes); @@ -179,10 +183,5 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { static attributeDeserialize = function(attr) { ds_map_override(attributes, attr); - - var amo = ds_map_find_value(attributes, "size"); - //var _add = amo - (ds_list_size(inputs) - input_fix_len); - //repeat(_add) - // createNewInput(); } } \ No newline at end of file diff --git a/scripts/node_ase_file_read/node_ase_file_read.gml b/scripts/node_ase_file_read/node_ase_file_read.gml index b90dcbfca..e27e9eb21 100644 --- a/scripts/node_ase_file_read/node_ase_file_read.gml +++ b/scripts/node_ase_file_read/node_ase_file_read.gml @@ -190,7 +190,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const for( var j = 0; j < ds_list_size(outputs[| 1].value_to); j++ ) { var _targNode = outputs[| 1].value_to[| j].node; - if(_targNode.name == _name) { + if(_targNode.display_name == _name) { _node = _targNode; break; } @@ -201,7 +201,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const lvs[i] = _node; lvs[i].inputs[| 0].setFrom(outputs[| 1]); - lvs[i].name = _name; + lvs[i].display_name = _name; } } diff --git a/scripts/node_ase_layer/node_ase_layer.gml b/scripts/node_ase_layer/node_ase_layer.gml index 3792e83ef..dff4c6fa3 100644 --- a/scripts/node_ase_layer/node_ase_layer.gml +++ b/scripts/node_ase_layer/node_ase_layer.gml @@ -28,7 +28,7 @@ function Node_ASE_layer(_x, _y, _group = noone) : Node(_x, _y, _group) construct layer_object = noone; for( var i = 0; i < array_length(data.layers); i++ ) { - if(data.layers[i].name != name) continue; + if(data.layers[i].name != display_name) continue; layer_object = data.layers[i]; break; @@ -39,8 +39,8 @@ function Node_ASE_layer(_x, _y, _group = noone) : Node(_x, _y, _group) construct var data = inputs[| 0].getValue(); if(data == noone) return; - if(_name != name) { - _name = name; + if(_name != display_name) { + _name = display_name; findLayer(); } diff --git a/scripts/node_cache/node_cache.gml b/scripts/node_cache/node_cache.gml new file mode 100644 index 000000000..825c17033 --- /dev/null +++ b/scripts/node_cache/node_cache.gml @@ -0,0 +1,53 @@ +function Node_Cache(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Cache"; + use_cache = true; + + inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + + outputs[| 0] = nodeValue("Cache surface", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, 0); + + input_display_list = [ + ["Surface", true], 0, + ]; + + cache_loading = false; + cache_content = ""; + cache_loading_progress = 0; + + static step = function() { + if(cache_loading) { + cached_output[cache_loading_progress] = surface_array_deserialize(cache_content, cache_loading_progress); + cache_result[cache_loading_progress] = true; + cache_loading_progress++; + + if(cache_loading_progress == ANIMATOR.frames_total) { + cache_loading = false; + update(); + } + } + } + + static update = function() { + if(recoverCache() || !ANIMATOR.is_playing) return; + if(!inputs[| 0].value_from) return; + + var _surf = inputs[| 0].getValue(); + cacheCurrentFrame(_surf); + } + + function onDrawNode(xx, yy, _mx, _my, _s) { + if(cache_loading) + draw_sprite_ui(THEME.loading, 0, xx + w * _s / 2, yy + h * _s / 2, _s, _s, current_time / 2, COLORS._main_icon, 1); + } + + static doSerialize = function(_map) { + _map[? "cache"] = surface_array_serialize(cached_output); + } + + static postDeserialize = function() { + if(!ds_map_exists(load_map, "cache")) return; + cache_content = load_map[? "cache"]; + cache_loading_progress = 0; + cache_loading = true; + } +} \ No newline at end of file diff --git a/scripts/node_cache/node_cache.yy b/scripts/node_cache/node_cache.yy new file mode 100644 index 000000000..a84e6a779 --- /dev/null +++ b/scripts/node_cache/node_cache.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_cache", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "node", + "path": "folders/nodes/data/node.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_cache/node_outline.yy b/scripts/node_cache/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_cache/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_cache_array/node_cache_array.gml b/scripts/node_cache_array/node_cache_array.gml index 1c2505238..9d83711a8 100644 --- a/scripts/node_cache_array/node_cache_array.gml +++ b/scripts/node_cache_array/node_cache_array.gml @@ -7,15 +7,49 @@ function Node_Cache_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constru outputs[| 0] = nodeValue("Cache array", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, []); input_display_list = [ - ["Surface", true], 0, + ["Surface", true], 0, ]; + cache_loading = false; + cache_content = ""; + cache_loading_progress = 0; + + static step = function() { + if(cache_loading) { + cached_output[cache_loading_progress] = surface_array_deserialize(cache_content, cache_loading_progress); + cache_result[cache_loading_progress] = true; + cache_loading_progress++; + + if(cache_loading_progress == ANIMATOR.frames_total) { + cache_loading = false; + update(); + } + } + } + static update = function() { - if(!inputs[| 0].value_from) return; + outputs[| 0].setValue(cached_output); + if(!ANIMATOR.is_playing) return; + if(!inputs[| 0].value_from) return; var _surf = inputs[| 0].getValue(); cacheCurrentFrame(_surf); - outputs[| 0].setValue(cached_output); + } + + function onDrawNode(xx, yy, _mx, _my, _s) { + if(cache_loading) + draw_sprite_ui(THEME.loading, 0, xx + w * _s / 2, yy + h * _s / 2, _s, _s, current_time / 2, COLORS._main_icon, 1); + } + + static doSerialize = function(_map) { + _map[? "cache"] = surface_array_serialize(cached_output); + } + + static postDeserialize = function() { + if(!ds_map_exists(load_map, "cache")) return; + cache_content = load_map[? "cache"]; + cache_loading_progress = 0; + cache_loading = true; } } \ No newline at end of file diff --git a/scripts/node_canvas/node_canvas.gml b/scripts/node_canvas/node_canvas.gml index bab9e7d1d..e9b2766c9 100644 --- a/scripts/node_canvas/node_canvas.gml +++ b/scripts/node_canvas/node_canvas.gml @@ -133,7 +133,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _sw = surface_get_width(_brush); var _sh = surface_get_height(_brush); - draw_surface_ext(_brush, _x - _sw / 2, _y - _sh / 2, 1, 1, 0, draw_get_color(), 1); + draw_surface_ext(_brush, _x - floor(_sw / 2), _y - floor(_sh / 2), 1, 1, 0, draw_get_color(), 1); } } @@ -245,7 +245,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } function ff_fillable(colorBase, colorFill, _x, _y, _thres) { - var d = color_diff(colorBase, get_color_buffer(_x, _y)); + var d = color_diff(colorBase, get_color_buffer(_x, _y), true); return d <= _thres && d != colorFill; } @@ -259,6 +259,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var x1, y1, x_start; var spanAbove, spanBelow; + var thr = _thres * _thres; var queue = ds_queue_create(); ds_queue_enqueue(queue, [_x, _y]); @@ -273,7 +274,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(colorCurr == colorFill) continue; //Color in queue already filled - while(x1 >= 0 && ff_fillable(colorBase, colorFill, x1, y1, _thres)) //Shift left + while(x1 >= 0 && ff_fillable(colorBase, colorFill, x1, y1, thr)) //Shift left x1--; x1++; @@ -282,7 +283,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor spanAbove = false; spanBelow = false; - while(x1 < surface_w && ff_fillable(colorBase, colorFill, x1, y1, _thres)) { + while(x1 < surface_w && ff_fillable(colorBase, colorFill, x1, y1, thr)) { draw_point(x1, y1); buffer_seek(surface_buffer, buffer_seek_start, (surface_w * y1 + x1) * 4); buffer_write(surface_buffer, buffer_u32, colorFill); @@ -291,26 +292,26 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(y1 > 0) { if(x1 == x_start && x1 > 0 && _corner) { - if(!spanAbove && ff_fillable(colorBase, colorFill, x1 - 1, y1 - 1, _thres)) { + if(!spanAbove && ff_fillable(colorBase, colorFill, x1 - 1, y1 - 1, thr)) { ds_queue_enqueue(queue, [x1 - 1, y1 - 1]); spanAbove = true; } } - if(ff_fillable(colorBase, colorFill, x1, y1 - 1, _thres)) { + if(ff_fillable(colorBase, colorFill, x1, y1 - 1, thr)) { ds_queue_enqueue(queue, [x1, y1 - 1]); } } if(y1 < surface_h - 1) { if(x1 == x_start && x1 > 0 && _corner) { - if(!spanBelow && ff_fillable(colorBase, colorFill, x1 - 1, y1 + 1, _thres)) { + if(!spanBelow && ff_fillable(colorBase, colorFill, x1 - 1, y1 + 1, thr)) { ds_queue_enqueue(queue, [x1 - 1, y1 + 1]); spanBelow = true; } } - if(ff_fillable(colorBase, colorFill, x1, y1 + 1, _thres)) { + if(ff_fillable(colorBase, colorFill, x1, y1 + 1, thr)) { ds_queue_enqueue(queue, [x1, y1 + 1]); } } @@ -319,14 +320,14 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(x1 < surface_w - 1 && _corner) { if(y1 > 0) { - if(!spanAbove && ff_fillable(colorBase, colorFill, x1 + 1, y1 - 1, _thres)) { + if(!spanAbove && ff_fillable(colorBase, colorFill, x1 + 1, y1 - 1, thr)) { ds_queue_enqueue(queue, [x1 + 1, y1 - 1]); spanAbove = true; } } if(y1 < surface_h - 1) { - if(!spanBelow && ff_fillable(colorBase, colorFill, x1 + 1, y1 + 1, _thres)) { + if(!spanBelow && ff_fillable(colorBase, colorFill, x1 + 1, y1 + 1, thr)) { ds_queue_enqueue(queue, [x1 + 1, y1 + 1]); spanBelow = true; } @@ -342,6 +343,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var h = surface_get_height(_surf); var _c1 = get_color_buffer(_x, _y); + var thr = _thres * _thres; for( var i = 0; i < w; i++ ) { for( var j = 0; j < h; j++ ) { @@ -351,7 +353,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } var _c2 = get_color_buffer(i, j); - if(color_diff(_c1, _c2) <= _thres) + if(color_diff(_c1, _c2, true) <= thr) draw_point(i, j); } } @@ -369,7 +371,8 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor mouse_holding = false; static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { - if(!active) return; + mouse_cur_x = round((_mx - _x) / _s - 0.5); + mouse_cur_y = round((_my - _y) / _s - 0.5); var _dim = inputs[| 0].getValue(); var _col = inputs[| 1].getValue(); @@ -391,109 +394,108 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _tool = PANEL_PREVIEW.tool_index; var _sub_tool = PANEL_PREVIEW.tool_sub_index; - mouse_cur_x = round((_mx - _x) / _s - 0.5); - mouse_cur_y = round((_my - _y) / _s - 0.5); - - if(_tool == 0 || _tool == 1) { - if(_tool == 0) BLEND_ALPHA; + if(active) { + if(_tool == 0 || _tool == 1) { + if(_tool == 0) BLEND_ALPHA; - if(_tool == 1) { - gpu_set_blendmode(bm_subtract); - gpu_set_colorwriteenable(false, false, false, true); - } + if(_tool == 1) { + gpu_set_blendmode(bm_subtract); + gpu_set_colorwriteenable(false, false, false, true); + } - if(key_mod_press(SHIFT) && key_mod_press(CTRL)) { - var aa = point_direction(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y); - var dd = point_distance(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y); - var _a = round(aa / 45) * 45; - dd = dd * cos(degtorad(_a - aa)); + if(key_mod_press(SHIFT) && key_mod_press(CTRL)) { + var aa = point_direction(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y); + var dd = point_distance(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y); + var _a = round(aa / 45) * 45; + dd = dd * cos(degtorad(_a - aa)); - mouse_cur_x = mouse_pre_draw_x + lengthdir_x(dd, _a); - mouse_cur_y = mouse_pre_draw_y + lengthdir_y(dd, _a); - } + mouse_cur_x = mouse_pre_draw_x + lengthdir_x(dd, _a); + mouse_cur_y = mouse_pre_draw_y + lengthdir_y(dd, _a); + } - if(mouse_press(mb_left)) { - draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush); + if(mouse_press(mb_left)) { + draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush); - mouse_holding = true; - if(key_mod_press(SHIFT)) { - draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush); + mouse_holding = true; + if(key_mod_press(SHIFT)) { + draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush); + mouse_holding = false; + } + + mouse_pre_draw_x = mouse_cur_x; + mouse_pre_draw_y = mouse_cur_y; + } + + if(mouse_holding && mouse_click(mb_left, active)) { + if(mouse_pre_draw_x != mouse_cur_x || mouse_pre_draw_y != mouse_cur_y) { + draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush); + draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush); + } + + mouse_pre_draw_x = mouse_cur_x; + mouse_pre_draw_y = mouse_cur_y; + } + + BLEND_NORMAL; + + if(_tool == 1) + gpu_set_colorwriteenable(true, true, true, true); + + if(mouse_release(mb_left)) { + surface_update(); mouse_holding = false; } - mouse_pre_draw_x = mouse_cur_x; - mouse_pre_draw_y = mouse_cur_y; - } - - if(mouse_holding && mouse_click(mb_left, active)) { - if(mouse_pre_draw_x != mouse_cur_x || mouse_pre_draw_y != mouse_cur_y) { - draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush); - draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush); - } - - mouse_pre_draw_x = mouse_cur_x; - mouse_pre_draw_y = mouse_cur_y; - } - - BLEND_NORMAL; - - if(_tool == 1) - gpu_set_colorwriteenable(true, true, true, true); - - if(mouse_release(mb_left)) { - surface_update(); - mouse_holding = false; - } - - mouse_pre_x = mouse_cur_x; - mouse_pre_y = mouse_cur_y; - apply_surface(); - - } else if(_tool == 2 || _tool == 3) { - if(mouse_holding && key_mod_press(SHIFT)) { - var ww = mouse_cur_x - mouse_pre_x; - var hh = mouse_cur_y - mouse_pre_y; - var ss = max(abs(ww), abs(hh)); - - mouse_cur_x = mouse_pre_x + ss * sign(ww); - mouse_cur_y = mouse_pre_y + ss * sign(hh); - } - - if(mouse_press(mb_left)) { mouse_pre_x = mouse_cur_x; mouse_pre_y = mouse_cur_y; - - mouse_holding = true; - } + apply_surface(); - if(mouse_release(mb_left)) { - BLEND_ALPHA; - if(_tool == 2) - draw_rect_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush); - else if(_tool == 3) - draw_ellp_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush); - BLEND_NORMAL; + } else if(_tool == 2 || _tool == 3) { + if(mouse_holding && key_mod_press(SHIFT)) { + var ww = mouse_cur_x - mouse_pre_x; + var hh = mouse_cur_y - mouse_pre_y; + var ss = max(abs(ww), abs(hh)); - surface_update(); - mouse_holding = false; - } - apply_surface(); - - } else if(_tool == 4) { - if(point_in_rectangle(mouse_cur_x, mouse_cur_y, 0, 0, _surf_w - 1, _surf_h - 1) && mouse_press(mb_left)) { - switch(_fill_type) { - case 0 : - flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, false); - break; - case 1 : - flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, true); - break; - case 2 : - canvas_fill(mouse_cur_x, mouse_cur_y, canvas_surface, _thr); - break; + mouse_cur_x = mouse_pre_x + ss * sign(ww); + mouse_cur_y = mouse_pre_y + ss * sign(hh); } + + if(mouse_press(mb_left)) { + mouse_pre_x = mouse_cur_x; + mouse_pre_y = mouse_cur_y; - surface_update(); + mouse_holding = true; + } + + if(mouse_release(mb_left)) { + BLEND_ALPHA; + if(_tool == 2) + draw_rect_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush); + else if(_tool == 3) + draw_ellp_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush); + BLEND_NORMAL; + + surface_update(); + mouse_holding = false; + } + apply_surface(); + + } else if(_tool == 4) { + if(point_in_rectangle(mouse_cur_x, mouse_cur_y, 0, 0, _surf_w - 1, _surf_h - 1) && mouse_press(mb_left)) { + switch(_fill_type) { + case 0 : + flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, false); + break; + case 1 : + flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, true); + break; + case 2 : + canvas_fill(mouse_cur_x, mouse_cur_y, canvas_surface, _thr); + break; + } + + surface_update(); + } } } @@ -557,7 +559,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor #endregion } - static step = function() { + static step = function() { var _outSurf = outputs[| 0].getValue(); if(is_surface(_outSurf)) return; diff --git a/scripts/node_collection/node_collection.gml b/scripts/node_collection/node_collection.gml index a9349e6bf..7a54dae3a 100644 --- a/scripts/node_collection/node_collection.gml +++ b/scripts/node_collection/node_collection.gml @@ -73,6 +73,27 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc metadata = new MetaDataManager(); + inspUpdateTooltip = get_text("panel_inspector_execute", "Execute node contents"); + inspUpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ]; + + static inspectorUpdate = function() { + onInspectorUpdate(); + } + static onInspectorUpdate = function() { + RenderListAction(nodes, group); + } + + static hasInspectorUpdate = function(group = false) { + if(!group) return false; + + for( var i = 0; i < ds_list_size(nodes); i++ ) { + if(nodes[| i].hasInspectorUpdate()) + return true; + } + + return false; + } + static getNodeBase = function() { if(instanceBase == noone) return self; return instanceBase.getNodeBase(); @@ -156,18 +177,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc } } - static inspectorGroupUpdate = function() { - var node_list = getNodeList(); - for(var i = 0; i < ds_list_size(node_list); i++) { - var _node = node_list[| i]; - if(_node.hasInspectorUpdate() == noone) - _node.inspectorUpdate(); - } - } - static stepBegin = function() { use_cache = false; - inspectorUpdate = noone; array_safe_set(cache_result, ANIMATOR.current_frame, true); @@ -175,8 +186,6 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc for(var i = 0; i < ds_list_size(node_list); i++) { var n = node_list[| i]; n.stepBegin(); - if(n.hasInspectorUpdate()) - inspectorUpdate = inspectorGroupUpdate; if(!n.use_cache) continue; use_cache = true; diff --git a/scripts/node_colorize/node_colorize.gml b/scripts/node_colorize/node_colorize.gml index 49927351c..c15222bdb 100644 --- a/scripts/node_colorize/node_colorize.gml +++ b/scripts/node_colorize/node_colorize.gml @@ -11,7 +11,7 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 1] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_black), new gradientKey(1, c_white) ] ) + inputs[| 1] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject([ c_black, c_white ]) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 2] = nodeValue("Gradient shift", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) @@ -36,11 +36,10 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) static process_data = function(_outSurf, _data, _output_index, _array_index) { var _gra = _data[1]; - var _gra_data = inputs[| 1].getExtraData(); var _gra_shift = _data[2]; var _alpha = _data[6]; - var _grad = gradient_to_array(_gra); + var _grad = _gra.toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -49,11 +48,11 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) BLEND_OVERRIDE; shader_set(shader); - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_color, _grad_color); shader_set_uniform_f_array_safe(uniform_time, _grad_time); shader_set_uniform_f(uniform_shift, _gra_shift); - shader_set_uniform_i(uniform_key, array_length(_gra)); + shader_set_uniform_i(uniform_key, array_length(_gra.keys)); shader_set_uniform_i(uniform_alpha, _alpha); draw_surface_safe(_data[0], 0, 0); diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 2068fae73..83786f84e 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -492,24 +492,35 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { var frx = jun.value_from.x; var fry = jun.value_from.y; - var c0 = value_color(jun.value_from.type); - var c1 = value_color(jun.type); + var c0 = value_color(jun.value_from.type); + var c1 = value_color(jun.type); + + var shx = jun.draw_line_shift_x * _s; + var shy = jun.draw_line_shift_y * _s; + + var cx = round((frx + jx) / 2 + shx); + var cy = round((fry + jy) / 2 + shy); + var hover = false; var th = max(1, PREF_MAP[? "connection_line_width"] * _s); if(PANEL_GRAPH.pHOVER) switch(PREF_MAP[? "curve_connection_line"]) { case 0 : - hover = distance_to_line(mx, my, jx, jy, frx, fry) < 6; + hover = distance_to_line(mx, my, jx, jy, frx, fry) < max(th * 2, 6); break; case 1 : - hover = distance_to_curve(mx, my, jx, jy, frx, fry) < 6; + hover = distance_to_curve(mx, my, jx, jy, frx, fry, cx, cy, _s) < max(th * 2, 6); + jun.draw_line_shift_hover = hover; break; case 2 : - var cx = (jx + frx) / 2; - hover = distance_to_line(mx, my, jx, jy, cx, jy) < 6; - hover |= distance_to_line(mx, my, cx, jy, cx, fry) < 6; - hover |= distance_to_line(mx, my, cx, fry, frx, fry) < 6; + var ch = distance_to_line(mx, my, cx, jy, cx, fry) < max(th * 2, 6); + + hover = distance_to_line(mx, my, jx, jy, cx, jy) < max(th * 2, 6); + hover |= ch; + hover |= distance_to_line(mx, my, cx, fry, frx, fry) < max(th * 2, 6); + + jun.draw_line_shift_hover = ch; break; } @@ -530,8 +541,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { else draw_line_dashed_color(jx, jy, frx, fry, th, c1, c0, 12 * _s); break; - case 1 : draw_line_curve_color(jx, jy, frx, fry, th, c0, c1, ty); break; - case 2 : draw_line_elbow_color(jx, jy, frx, fry, th, c0, c1, ty); break; + case 1 : draw_line_curve_color(jx, jy, frx, fry, cx, cy, _s, th, c0, c1, ty); break; + case 2 : draw_line_elbow_color(jx, jy, frx, fry, cx, th, c1, c0, ty); break; } } @@ -781,9 +792,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { if(_to.node.isUpdateReady()) { ds_queue_enqueue(RENDER_QUEUE, _to.node); - printIf(global.RENDER_LOG, " > Push " + _to.node.name + " node to stack"); + printIf(global.RENDER_LOG, " >| Push " + _to.node.name + " (" + _to.node.display_name + ") node to stack"); } else - printIf(global.RENDER_LOG, " > Node " + _to.node.name + " not ready"); + printIf(global.RENDER_LOG, " >| Node " + _to.node.name + " not ready"); } } } @@ -794,22 +805,25 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { } static cacheArrayCheck = function() { - if(array_length(cached_output) != ANIMATOR.frames_total + 1) - array_resize(cached_output, ANIMATOR.frames_total + 1); - if(array_length(cache_result) != ANIMATOR.frames_total + 1) - array_resize(cache_result, ANIMATOR.frames_total + 1); + if(array_length(cached_output) != ANIMATOR.frames_total) + array_resize(cached_output, ANIMATOR.frames_total); + if(array_length(cache_result) != ANIMATOR.frames_total) + array_resize(cache_result, ANIMATOR.frames_total); } static cacheCurrentFrame = function(_frame) { cacheArrayCheck(); - if(ANIMATOR.current_frame > ANIMATOR.frames_total) return; + if(ANIMATOR.current_frame < 0) return; - cached_output[ANIMATOR.current_frame] = surface_clone(_frame, cached_output[ANIMATOR.current_frame]); + surface_array_free(cached_output[ANIMATOR.current_frame]); + cached_output[ANIMATOR.current_frame] = surface_array_clone(_frame); array_safe_set(cache_result, ANIMATOR.current_frame, true); } static cacheExist = function(frame = ANIMATOR.current_frame) { + if(frame < 0) return false; + if(frame >= array_length(cached_output)) return false; if(frame >= array_length(cache_result)) return false; if(!array_safe_get(cache_result, frame, false)) return false; @@ -817,6 +831,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { } static getCacheFrame = function(frame = ANIMATOR.current_frame) { + if(frame < 0) return false; + if(!cacheExist(frame)) return noone; var surf = array_safe_get(cached_output, frame); return surf; @@ -826,23 +842,15 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { if(!cacheExist(frame)) return false; var _s = cached_output[ANIMATOR.current_frame]; - if(!is_surface(_s)) return false; - - var _outSurf = outputs[| 0].getValue(); - if(is_surface(_outSurf)) - surface_copy_size(_outSurf, _s); - else { - _outSurf = surface_clone(_s); - outputs[| 0].setValue(_outSurf); - } + outputs[| 0].setValue(_s); return true; } - static clearCache = function() { + static clearCache = function() { if(!use_cache) return; - if(array_length(cached_output) != ANIMATOR.frames_total + 1) - array_resize(cached_output, ANIMATOR.frames_total + 1); + if(array_length(cached_output) != ANIMATOR.frames_total) + array_resize(cached_output, ANIMATOR.frames_total); for(var i = 0; i < array_length(cached_output); i++) { var _s = cached_output[i]; if(is_surface(_s)) @@ -986,7 +994,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) constructor { if(ds_map_exists(load_map, "name")) display_name = ds_map_try_get(load_map, "name", ""); - _group = ds_map_try_get(load_map, "group"); + _group = ds_map_try_get(load_map, "group", noone); + if(_group == -1) _group = noone; x = ds_map_try_get(load_map, "x"); y = ds_map_try_get(load_map, "y"); diff --git a/scripts/node_export/node_export.gml b/scripts/node_export/node_export.gml index 6f5a9f0e5..f2c11b5b8 100644 --- a/scripts/node_export/node_export.gml +++ b/scripts/node_export/node_export.gml @@ -79,6 +79,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor .setDisplay(VALUE_DISPLAY.slider, [0, 100, 1]) .rejectArray(); + inputs[| 11] = nodeValue("Sequence begin", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + outputs[| 0] = nodeValue("Loop exit", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0); outputs[| 1] = nodeValue("Preview", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone) @@ -87,7 +89,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor input_display_list = [ ["Export", false], 0, 1, 2, 4, ["Format ", false], 3, 9, - ["Settings", false], 8, 5, 6, 7, 10, + ["Settings", false], 8, 5, 6, 7, 10, 11, ]; directory = DIRECTORY + "temp\\" + string(irandom_range(100000, 999999)); @@ -173,7 +175,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } static pathString = function(path, suff, index = 0) { - var form = inputs[| 3].getValue(); + var form = inputs[| 3].getValue(); + var strt = inputs[| 11].getValue(); var s = "", i = 1, ch, ch_s; var len = string_length(suff); @@ -191,12 +194,12 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var float_str = string_digits(str); if(float_str != "") { var float_val = string_digits(float_str); - var str_val = max(float_val - string_length(string(ANIMATOR.current_frame + 1)), 0); + var str_val = max(float_val - string_length(string(ANIMATOR.current_frame + strt)), 0); repeat(str_val) s += "0"; } - s += string(ANIMATOR.current_frame + 1); + s += string(ANIMATOR.current_frame + strt); res = true; break; case "i" : @@ -299,7 +302,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(!is_surface(_surf)) continue; if(form == NODE_EXPORT_FORMAT.gif) { - p = directory + "\\" + string(i) + "\\" + string(100000 + ANIMATOR.current_frame + 1) + ".png"; + p = directory + "\\" + string(i) + "\\" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png"; } else { if(is_array(path) && array_length(path) == array_length(surf)) p = pathString(path[ safe_mod(i, array_length(path)) ], suff, i); @@ -322,7 +325,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(is_array(path)) p = path[0]; if(form == NODE_EXPORT_FORMAT.gif) - p = directory + "\\" + string(100000 + ANIMATOR.current_frame + 1) + ".png"; + p = directory + "\\" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png"; else p = pathString(p, suff); @@ -344,7 +347,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor insp2UpdateTooltip = "Export All"; insp2UpdateIcon = [ THEME.play_all, 0, COLORS._main_value_positive ]; - static onInspectorUpdate = function() { + static onInspectorUpdate = function() { if(isInLoop()) UPDATE |= RENDER_TYPE.full; else doInspectorAction(); } @@ -366,7 +369,6 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor static doInspectorAction = function() { if(LOADING || APPENDING) return; - if(playing) return; var path = inputs[| 1].getValue(); if(path == "") return; @@ -404,10 +406,11 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var anim = inputs[| 3].getValue(); var extn = inputs[| 9].getValue(); - inputs[| 5].setVisible(anim == 2); - inputs[| 6].setVisible(anim == 2); - inputs[| 7].setVisible(anim == 2); - inputs[| 8].setVisible(anim == 2); + inputs[| 5].setVisible(anim == 2); + inputs[| 6].setVisible(anim == 2); + inputs[| 7].setVisible(anim == 2); + inputs[| 8].setVisible(anim == 2); + inputs[| 11].setVisible(anim == 1); if(anim == NODE_EXPORT_FORMAT.gif) { inputs[| 9].display_data = format_animation; diff --git a/scripts/node_fluid_render/node_fluid_render.gml b/scripts/node_fluid_render/node_fluid_render.gml index 05311e2a1..7276f637c 100644 --- a/scripts/node_fluid_render/node_fluid_render.gml +++ b/scripts/node_fluid_render/node_fluid_render.gml @@ -2,6 +2,7 @@ function Node_Fluid_Render(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) name = "Render Domain"; color = COLORS.node_blend_fluid; icon = THEME.fluid_sim; + use_cache = true; inputs[| 0] = nodeValue("Fluid Domain", self, JUNCTION_CONNECT.input, VALUE_TYPE.fdomain, noone) .setVisible(true, true); @@ -22,7 +23,15 @@ function Node_Fluid_Render(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) outputs[| 1] = nodeValue("Domain", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + insp2UpdateTooltip = "Clear cache"; + insp2UpdateIcon = [ THEME.cache, 0, COLORS._main_icon ]; + + static onInspector2Update = function() { clearCache(); } + static update = function(frame = ANIMATOR.current_frame) { + if(recoverCache() || !ANIMATOR.is_playing) + return; + var _dom = inputs[| 0].getValue(frame); var _dim = inputs[| 1].getValue(frame); var _int = inputs[| 2].getValue(frame); @@ -52,5 +61,7 @@ function Node_Fluid_Render(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) if(_drw && is_surface(_dom.sf_world)) draw_surface_stretched(_dom.sf_world, 0, 0, _dim[0], _dim[1]); surface_reset_target(); + + cacheCurrentFrame(_outSurf); } } \ No newline at end of file diff --git a/scripts/node_fluid_update/node_fluid_update.gml b/scripts/node_fluid_update/node_fluid_update.gml index 4cf81f114..7f8ee6bcd 100644 --- a/scripts/node_fluid_update/node_fluid_update.gml +++ b/scripts/node_fluid_update/node_fluid_update.gml @@ -18,6 +18,8 @@ function Node_Fluid_Update(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) outputs[| 0] = nodeValue("Fluid Domain", self, JUNCTION_CONNECT.output, VALUE_TYPE.fdomain, noone); static update = function(frame = ANIMATOR.current_frame) { + if(!ANIMATOR.is_playing) return; + var _dom = inputs[| 0].getValue(frame); var _act = inputs[| 1].getValue(frame); if(_dom == noone || !instance_exists(_dom)) return; diff --git a/scripts/node_gradient/node_gradient.gml b/scripts/node_gradient/node_gradient.gml index cb997f533..bea34b3d0 100644 --- a/scripts/node_gradient/node_gradient.gml +++ b/scripts/node_gradient/node_gradient.gml @@ -18,7 +18,7 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2 ) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 1] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 1] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 2] = nodeValue("Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) @@ -58,7 +58,6 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) _outSurf = surface_verify(_outSurf, _dim[0], _dim[1]); var _gra = _data[1]; - var _gra_data = inputs[| 1].getExtraData(); var _typ = _data[2]; var _ang = _data[3]; @@ -68,7 +67,7 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) var _lop = _data[7]; var _msk = _data[8]; - var _grad = gradient_to_array(_gra); + var _grad = _gra.toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -83,10 +82,10 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) surface_set_target(_outSurf); draw_clear_alpha(0, 0); shader_set(shader); - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_gra)); + shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys)); shader_set_uniform_i(uniform_grad_loop, _lop); shader_set_uniform_f_array_safe(uniform_center, [_cnt[0] / _dim[0], _cnt[1] / _dim[1]]); diff --git a/scripts/node_gradient_extract/node_array.yy b/scripts/node_gradient_extract/node_array.yy new file mode 100644 index 000000000..7d8787e65 --- /dev/null +++ b/scripts/node_gradient_extract/node_array.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_array", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_gradient_extract/node_counter.yy b/scripts/node_gradient_extract/node_counter.yy new file mode 100644 index 000000000..10832a0b0 --- /dev/null +++ b/scripts/node_gradient_extract/node_counter.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_counter", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_gradient_extract/node_gradient_extract.gml b/scripts/node_gradient_extract/node_gradient_extract.gml new file mode 100644 index 000000000..721c0b9ff --- /dev/null +++ b/scripts/node_gradient_extract/node_gradient_extract.gml @@ -0,0 +1,52 @@ +function Node_Gradient_Extract(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Gradient Data"; + previewable = false; + + w = 96; + + inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) + .setDisplay(VALUE_DISPLAY.gradient) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Colors", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, [] ) + .setDisplay(VALUE_DISPLAY.palette); + + outputs[| 1] = nodeValue("Positions", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [] ); + outputs[| 1].array_depth = 1; + + outputs[| 2] = nodeValue("Type", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0 ); + + static process_data = function(_outSurf, _data, _output_index, _array_index) { + var gra = _data[0]; + + switch(_output_index) { + case 0 : + var pal = []; + for( var i = 0; i < array_length(gra.keys); i++ ) + pal[i] = gra.keys[i].value; + return pal; + case 1 : + var pos = []; + for( var i = 0; i < array_length(gra.keys); i++ ) + pos[i] = gra.keys[i].time; + return pos; + case 2 : + return gra.type; + } + + return 0; + } + + static onDrawNode = function(xx, yy, _mx, _my, _s) { + var bbox = drawGetBbox(xx, yy, _s); + if(bbox.h < 1) return; + + var grad = inputs[| 0].getValue(); + if(is_array(grad)) { + if(array_length(grad) == 0) return; + grad = grad[0]; + } + + grad.draw(bbox.x0, bbox.y0, bbox.w, bbox.h); + } +} \ No newline at end of file diff --git a/scripts/node_gradient_extract/node_gradient_extract.yy b/scripts/node_gradient_extract/node_gradient_extract.yy new file mode 100644 index 000000000..89eb26df1 --- /dev/null +++ b/scripts/node_gradient_extract/node_gradient_extract.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_gradient_extract", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "color", + "path": "folders/nodes/data/value/color.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_gradient_output/node_gradient_output.gml b/scripts/node_gradient_output/node_gradient_output.gml index 44d3f2064..b32eb79b9 100644 --- a/scripts/node_gradient_output/node_gradient_output.gml +++ b/scripts/node_gradient_output/node_gradient_output.gml @@ -4,14 +4,14 @@ function Node_Gradient_Out(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro w = 96; - inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 1] = nodeValue("Sample", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0, "Position to sample a color from the gradient.") .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]) .rejectArray(); - outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); outputs[| 1] = nodeValue("Color", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, c_white); @@ -23,7 +23,7 @@ function Node_Gradient_Out(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro var pos = _data[1]; if(_output_index == 0) return pal; - if(_output_index == 1) return gradient_eval(pal, pos); + if(_output_index == 1) return pal.eval(pos); return 0; } @@ -32,6 +32,6 @@ function Node_Gradient_Out(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro if(bbox.h < 1) return; var grad = getSingleValue(0); - draw_gradient(bbox.x0, bbox.y0, bbox.w, bbox.h, grad, inputs[| 0].extra_data[| 0]); + grad.draw(bbox.x0, bbox.y0, bbox.w, bbox.h); } } \ No newline at end of file diff --git a/scripts/node_gradient_palette/node_array.yy b/scripts/node_gradient_palette/node_array.yy new file mode 100644 index 000000000..7d8787e65 --- /dev/null +++ b/scripts/node_gradient_palette/node_array.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_array", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_gradient_palette/node_counter.yy b/scripts/node_gradient_palette/node_counter.yy new file mode 100644 index 000000000..10832a0b0 --- /dev/null +++ b/scripts/node_gradient_palette/node_counter.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_counter", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_gradient_palette/node_gradient_palette.gml b/scripts/node_gradient_palette/node_gradient_palette.gml new file mode 100644 index 000000000..0250b1c4d --- /dev/null +++ b/scripts/node_gradient_palette/node_gradient_palette.gml @@ -0,0 +1,66 @@ +function Node_Gradient_Palette(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Gradient Palette"; + previewable = false; + + w = 96; + + inputs[| 0] = nodeValue("Palette", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ c_black ] ) + .setDisplay(VALUE_DISPLAY.palette) + .setVisible(true, true); + + inputs[| 1] = nodeValue("Custom positions", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + + inputs[| 2] = nodeValue("Positions", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [], "Array of number indicating color position (0 - 1).") + .setVisible(true, true); + inputs[| 2].array_depth = 1; + + inputs[| 3] = nodeValue("Blending", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + .setDisplay(VALUE_DISPLAY.enum_button, [ "RGB", "HSV", "Hard" ]); + + outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, new gradientObject(c_white) ) + .setDisplay(VALUE_DISPLAY.gradient); + + _pal = -1; + + static step = function() { + var usePos = array_safe_get(current_data, 1); + inputs[| 2].setVisible(usePos, usePos); + } + + static process_data = function(_outSurf, _data, _output_index, _array_index) { + var pal = _data[0]; + var pos_use = _data[1]; + var _pos = _data[2]; + var type = _data[3]; + + var grad = new gradientObject(); + grad.keys = []; + + for( var i = 0; i < array_length(pal); i++ ) { + var clr = pal[i]; + var pos = pos_use? array_safe_get(_pos, i, 0) : i / array_length(pal); + + grad.keys[i] = new gradientKey(pos, clr); + } + switch(type) { + case 0 : grad.type = GRADIENT_INTER.smooth; break; + case 1 : grad.type = GRADIENT_INTER.hue; break; + case 2 : grad.type = GRADIENT_INTER.none; break; + } + + return grad; + } + + static onDrawNode = function(xx, yy, _mx, _my, _s) { + var bbox = drawGetBbox(xx, yy, _s); + if(bbox.h < 1) return; + + var grad = outputs[| 0].getValue(); + if(is_array(grad)) { + if(array_length(grad) == 0) return; + grad = grad[0]; + } + + grad.draw(bbox.x0, bbox.y0, bbox.w, bbox.h); + } +} \ No newline at end of file diff --git a/scripts/node_gradient_palette/node_gradient_palette.yy b/scripts/node_gradient_palette/node_gradient_palette.yy new file mode 100644 index 000000000..add49188a --- /dev/null +++ b/scripts/node_gradient_palette/node_gradient_palette.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_gradient_palette", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "color", + "path": "folders/nodes/data/value/color.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_gradient_replace/node_array.yy b/scripts/node_gradient_replace/node_array.yy new file mode 100644 index 000000000..7d8787e65 --- /dev/null +++ b/scripts/node_gradient_replace/node_array.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_array", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_gradient_replace/node_counter.yy b/scripts/node_gradient_replace/node_counter.yy new file mode 100644 index 000000000..10832a0b0 --- /dev/null +++ b/scripts/node_gradient_replace/node_counter.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_counter", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_gradient_replace/node_gradient_replace.gml b/scripts/node_gradient_replace/node_gradient_replace.gml new file mode 100644 index 000000000..af8045aec --- /dev/null +++ b/scripts/node_gradient_replace/node_gradient_replace.gml @@ -0,0 +1,66 @@ +function Node_Gradient_Replace_Color(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Gradient Replace"; + previewable = false; + + w = 96; + + inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) + .setDisplay(VALUE_DISPLAY.gradient) + .setVisible(true, true); + + inputs[| 1] = nodeValue("Color from", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ c_black ]) + .setDisplay(VALUE_DISPLAY.palette); + + inputs[| 2] = nodeValue("Color to", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ c_black ]) + .setDisplay(VALUE_DISPLAY.palette); + + inputs[| 3] = nodeValue("Threshold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1) + .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]); + + outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, new gradientObject(c_white) ) + .setDisplay(VALUE_DISPLAY.gradient); + + static process_data = function(_outSurf, _data, _output_index, _array_index) { + var gra = _data[0]; + var pfr = _data[1]; + var pto = _data[2]; + var thr = _data[3]; + var graO = new gradientObject(); + + for( var i = 0; i < array_length(gra.keys); i++ ) { + var k = gra.keys[i]; + + var fromValue = 999; + var fromIndex = -1; + for( var j = 0; j < array_length(pfr); j++ ) { + var fr = pfr[j]; + + var dist = color_diff(k.value, fr); + if(dist <= thr && dist < fromValue) { + fromValue = dist; + fromIndex = j; + } + } + + var cTo = fromIndex == -1? k.value : array_safe_get(pto, fromIndex, k.value, ARRAY_OVERFLOW.loop); + graO.keys[i] = new gradientKey(k.time, cTo); + } + + graO.type = gra.type; + + return graO; + } + + static onDrawNode = function(xx, yy, _mx, _my, _s) { + var bbox = drawGetBbox(xx, yy, _s); + if(bbox.h < 1) return; + + var grad = outputs[| 0].getValue(); + if(is_array(grad)) { + if(array_length(grad) == 0) return; + grad = grad[0]; + } + + grad.draw(bbox.x0, bbox.y0, bbox.w, bbox.h); + } +} \ No newline at end of file diff --git a/scripts/node_gradient_replace/node_gradient_replace.yy b/scripts/node_gradient_replace/node_gradient_replace.yy new file mode 100644 index 000000000..26d9027ab --- /dev/null +++ b/scripts/node_gradient_replace/node_gradient_replace.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_gradient_replace", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "color", + "path": "folders/nodes/data/value/color.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_gradient_shift/node_gradient_shift.gml b/scripts/node_gradient_shift/node_gradient_shift.gml index f2c16f81b..fa64f9ebb 100644 --- a/scripts/node_gradient_shift/node_gradient_shift.gml +++ b/scripts/node_gradient_shift/node_gradient_shift.gml @@ -4,15 +4,16 @@ function Node_Gradient_Shift(_x, _y, _group = noone) : Node_Processor(_x, _y, _g w = 96; - inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) - .setDisplay(VALUE_DISPLAY.gradient); + inputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) + .setDisplay(VALUE_DISPLAY.gradient) + .setDisplay(true, true); inputs[| 1] = nodeValue("Shift", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]); inputs[| 2] = nodeValue("Loop", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false) - outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); _pal = -1; @@ -22,13 +23,14 @@ function Node_Gradient_Shift(_x, _y, _group = noone) : Node_Processor(_x, _y, _g var sft = _data[1]; var lop = _data[2]; - _outSurf = []; - for( var i = 0; i < array_length(pal); i++ ) { - var k = pal[i]; - _outSurf[i] = new gradientKey(k.time + sft, k.value); - if(lop) _outSurf[i].time = frac(_outSurf[i].time); + _outSurf = new gradientObject(); + for( var i = 0; i < array_length(pal.keys); i++ ) { + var k = pal.keys[i]; + _outSurf.keys[i] = new gradientKey(k.time + sft, k.value); + if(lop) _outSurf.keys[i].time = frac(_outSurf.keys[i].time); } + _outSurf.type = pal.type; return _outSurf; } @@ -37,6 +39,6 @@ function Node_Gradient_Shift(_x, _y, _group = noone) : Node_Processor(_x, _y, _g if(bbox.h < 1) return; var grad = outputs[| 0].getValue(); - draw_gradient(bbox.x0, bbox.y0, bbox.w, bbox.h, grad, inputs[| 0].extra_data[| 0]); + grad.draw(bbox.x0, bbox.y0, bbox.w, bbox.h); } } \ No newline at end of file diff --git a/scripts/node_grid/node_grid.gml b/scripts/node_grid/node_grid.gml index ff87362b6..448c300ad 100644 --- a/scripts/node_grid/node_grid.gml +++ b/scripts/node_grid/node_grid.gml @@ -34,7 +34,7 @@ function Node_Grid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons inputs[| 4] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.rotation); - inputs[| 5] = nodeValue("Tile color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 5] = nodeValue("Tile color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 6] = nodeValue("Gap color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black); @@ -79,8 +79,7 @@ function Node_Grid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons var _col_gap = _data[6]; var _gra = _data[5]; - var _gra_data = inputs[| 5].getExtraData(); - var _grad = gradient_to_array(_gra); + var _grad = _gra.toArray();; var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -105,10 +104,10 @@ function Node_Grid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons shader_set_uniform_f_array_safe(uniform_col_gap, colToVec4(_col_gap)); - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_gra)); + shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys)); if(is_surface(_sam)) draw_surface_stretched(_sam, 0, 0, _dim[0], _dim[1]); diff --git a/scripts/node_grid_hex/node_grid_hex.gml b/scripts/node_grid_hex/node_grid_hex.gml index c9748c59e..330d5e494 100644 --- a/scripts/node_grid_hex/node_grid_hex.gml +++ b/scripts/node_grid_hex/node_grid_hex.gml @@ -32,7 +32,7 @@ function Node_Grid_Hex(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) inputs[| 4] = nodeValue("Gap", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1) .setDisplay(VALUE_DISPLAY.slider, [0, 0.5, 0.01]); - inputs[| 5] = nodeValue("Tile color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 5] = nodeValue("Tile color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 6] = nodeValue("Gap color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black); @@ -69,8 +69,7 @@ function Node_Grid_Hex(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) var _col_gap = _data[6]; var _gra = _data[5]; - var _gra_data = inputs[| 5].getExtraData(); - var _grad = gradient_to_array(_gra); + var _grad = _gra.toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -93,10 +92,10 @@ function Node_Grid_Hex(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) shader_set_uniform_f_array_safe(uniform_col_gap, colToVec4(_col_gap)); - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_gra)); + shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys)); if(is_surface(_sam)) draw_surface_stretched(_sam, 0, 0, _dim[0], _dim[1]); diff --git a/scripts/node_grid_tri/node_grid_tri.gml b/scripts/node_grid_tri/node_grid_tri.gml index fe18cdde9..35f5e6cd1 100644 --- a/scripts/node_grid_tri/node_grid_tri.gml +++ b/scripts/node_grid_tri/node_grid_tri.gml @@ -32,7 +32,7 @@ function Node_Grid_Tri(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) inputs[| 4] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY.rotation); - inputs[| 5] = nodeValue("Tile color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 5] = nodeValue("Tile color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 6] = nodeValue("Gap color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black); @@ -69,8 +69,7 @@ function Node_Grid_Tri(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) var _col_gap = _data[6]; var _gra = _data[5]; - var _gra_data = inputs[| 5].getExtraData(); - var _grad = gradient_to_array(_gra); + var _grad = _gra.toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -93,10 +92,10 @@ function Node_Grid_Tri(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) shader_set_uniform_f_array_safe(uniform_col_gap, colToVec4(_col_gap)); - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_gra)); + shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys)); if(is_surface(_sam)) draw_surface_stretched(_sam, 0, 0, _dim[0], _dim[1]); diff --git a/scripts/node_group_input/node_group_input.gml b/scripts/node_group_input/node_group_input.gml index aed6c107e..d7727aa19 100644 --- a/scripts/node_group_input/node_group_input.gml +++ b/scripts/node_group_input/node_group_input.gml @@ -153,7 +153,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru break; case "Gradient": - inParent.animator = new valueAnimator([ new gradientKey(0, c_white) ], inParent); + inParent.animator = new valueAnimator(new gradientObject(c_white), inParent); inParent.setDisplay(VALUE_DISPLAY.gradient); break; default: inParent.setDisplay(VALUE_DISPLAY._default); break; diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index 32db11863..c529fe794 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -21,7 +21,7 @@ function valueKey(_time, _value, _anim = noone, _in = 0, _ot = 0) constructor { ratio = time / (ANIMATOR.frames_total - 1); } - static clone = function(target) { + static clone = function(target = noone) { var key = new valueKey(time, value, target); key.ease_in = ease_in; key.ease_out = ease_out; @@ -30,6 +30,21 @@ function valueKey(_time, _value, _anim = noone, _in = 0, _ot = 0) constructor { return key; } + + static cloneAnimator = function(shift = 0, value = noone, anim = noone) { + anim = anim == noone? self.anim : anim; + value = value == noone? self.value : value; + + var key = new valueKey(time + shift, value, anim); + key.ease_in = ease_in; + key.ease_out = ease_out; + key.ease_in_type = ease_in_type; + key.ease_out_type = ease_out_type; + ds_list_add(anim.values, key); + anim.setKeyTime(key, time + shift); + + return key; + } } function valueAnimator(_val, _prop) constructor { @@ -281,7 +296,9 @@ function valueAnimator(_val, _prop) constructor { _value_list[| 0] = values[| i].time; var val = values[| i].value; - if(typeArray(prop.display_type) && is_array(val)) { + if(is_struct(val)) { + _value_list[| 1] = val.serialize(); + } else if(typeArray(prop.display_type) && is_array(val)) { var __v = ds_list_create(); for(var j = 0; j < array_length(val); j++) { if(is_struct(val[j]) && struct_has(val[j], "serialize")) @@ -312,19 +329,22 @@ function valueAnimator(_val, _prop) constructor { static deserialize = function(_list, scale = false) { ds_list_clear(values); - if(prop.type == VALUE_TYPE.color && prop.display_type == VALUE_DISPLAY.gradient && LOADING_VERSION < 1300) { //backward compat: Gradient + if(prop.type == VALUE_TYPE.color && prop.display_type == VALUE_DISPLAY.gradient && LOADING_VERSION < SAVEFILE_VERSION) { //backward compat: Gradient var _val = []; + var value = _list[| 0][| 1]; - for(var i = 0; i < ds_list_size(_list); i++) { - var _keyframe = _list[| i]; - var time = ds_list_get(_keyframe, 0); - var value = ds_list_get(_keyframe, 1); + if(ds_exists(value, ds_type_list)) + for(var i = 0; i < ds_list_size(value); i++) { + var _keyframe = value[| i]; + var _t = ds_map_try_get(_keyframe, "time"); + var _v = ds_map_try_get(_keyframe, "value"); - array_push(_val, new gradientKey(time, value)); + array_push(_val, new gradientKey(_t, _v)); } - var vk = new valueKey(0, _val, self); - ds_list_add(values, vk); + var grad = new gradientObject(); + grad.keys = _val; + ds_list_add(values, new valueKey(0, grad, self)); return; } @@ -353,14 +373,8 @@ function valueAnimator(_val, _prop) constructor { for(var j = 0; j < ds_list_size(value); j++) _val[j] = value[| j]; } else if(prop.type == VALUE_TYPE.color && prop.display_type == VALUE_DISPLAY.gradient) { - _val = []; - - if(ds_exists(value, ds_type_list)) { - for(var j = 0; j < ds_list_size(value); j++) { - var gKey = value[| j]; - _val[j] = new gradientKey(gKey[? "time"], gKey[? "value"]); - } - } + var grad = new gradientObject(); + _val = grad.deserialize(value); } else if(typeArray(prop.display_type)) { _val = []; diff --git a/scripts/node_line/node_line.gml b/scripts/node_line/node_line.gml index 166e9b2b9..6a473db20 100644 --- a/scripts/node_line/node_line.gml +++ b/scripts/node_line/node_line.gml @@ -29,7 +29,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons inputs[| 9] = nodeValue("Shift", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) .setDisplay(VALUE_DISPLAY._default, 1 / 64); - inputs[| 10] = nodeValue("Color over length", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 10] = nodeValue("Color over length", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 11] = nodeValue("Width over length", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11); @@ -68,7 +68,6 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons var _shift = _data[9]; var _color = _data[10]; - var _col_data = inputs[| 10].getExtraData(); var _widc = _data[11]; var _widap = _data[12]; @@ -147,7 +146,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons _na = point_direction(n0[0], n0[1], n1[0], n1[1]) + 90; } - _nc = gradient_eval(_color, _colP? _prog_eli / _rtLen : _prog_curr, ds_list_get(_col_data, 0)); + _nc = _color.eval(_colP? _prog_eli / _rtLen : _prog_curr); if(_prog_curr > _prog) { if(_cap) { @@ -210,7 +209,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons _nw = random_range(_wid[0], _wid[1]); _nw *= eval_curve_x(_widc, _widap? _prog_eli / _rtLen : _prog_curr); - _nc = gradient_eval(_color, _colP? _prog_eli / _rtLen : _prog_curr, ds_list_get(_col_data, 0)); + _nc = _color.eval(_colP? _prog_eli / _rtLen : _prog_curr); if(_prog_curr > _prog) { if(_cap) { diff --git a/scripts/node_math/node_math.gml b/scripts/node_math/node_math.gml index 3e7a00f4c..1a609b05d 100644 --- a/scripts/node_math/node_math.gml +++ b/scripts/node_math/node_math.gml @@ -163,6 +163,7 @@ function Node_Math(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { inputs[| 2].setVisible(false); break; case MATH_OPERATOR.lerp : + inputs[| 2].setVisible(true); inputs[| 5].setVisible(true); break; default: return; diff --git a/scripts/node_particle/node_particle.gml b/scripts/node_particle/node_particle.gml index d2aa98cc4..6d7d68578 100644 --- a/scripts/node_particle/node_particle.gml +++ b/scripts/node_particle/node_particle.gml @@ -53,7 +53,6 @@ function Node_Particle(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y, _ var _blend = inputs[| input_len + 2].getValue(_time); var _outSurf = outputs[| 0].getValue(); - _outSurf = surface_verify(_outSurf, _dim[0], _dim[1]); outputs[| 0].setValue(_outSurf); diff --git a/scripts/node_pixel_cloud/node_pixel_cloud.gml b/scripts/node_pixel_cloud/node_pixel_cloud.gml index b8435fdf6..99021d67a 100644 --- a/scripts/node_pixel_cloud/node_pixel_cloud.gml +++ b/scripts/node_pixel_cloud/node_pixel_cloud.gml @@ -27,7 +27,7 @@ function Node_Pixel_Cloud(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou inputs[| 3] = nodeValue("Strength map", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 4] = nodeValue("Color over lifetime", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 4] = nodeValue("Color over lifetime", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 5] = nodeValue("Distance", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1); @@ -51,16 +51,13 @@ function Node_Pixel_Cloud(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou static process_data = function(_outSurf, _data, _output_index, _array_index) { var _sed = _data[1]; var _str = _data[2]; - var _map = _data[3]; - - var _gra = _data[4]; - var _gra_data = inputs[| 4].getExtraData(); - + var _map = _data[3]; + var _gra = _data[4]; var _dis = _data[5]; var _alp = _data[6]; var _rnd = _data[7]; - var _grad = gradient_to_array(_gra); + var _grad = _gra.toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; @@ -79,10 +76,10 @@ function Node_Pixel_Cloud(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou shader_set_uniform_i(uniform_map_use, 0); } - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_gra)); + shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys)); shader_set_uniform_f_array_safe(uniform_alpha, _alp); shader_set_uniform_i(uniform_alamo, array_length(_alp)); diff --git a/scripts/node_processor/node_processor.gml b/scripts/node_processor/node_processor.gml index 808a5b310..18819eac4 100644 --- a/scripts/node_processor/node_processor.gml +++ b/scripts/node_processor/node_processor.gml @@ -5,6 +5,8 @@ enum ARRAY_PROCESS { expand_inv, } +#macro PROCESSOR_OVERLAY_CHECK if(array_length(current_data) != ds_list_size(inputs)) return; + function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { array_process = ARRAY_PROCESS.loop; current_data = []; diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index ef6832589..07b7b8784 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -409,8 +409,6 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(color, "Color", s_node_color_out, "Node_Color", [1, Node_Color]); addNodeObject(color, "RGB Color", s_node_color_from_rgb, "Node_Color_RGB", [1, Node_Color_RGB]); addNodeObject(color, "HSV Color", s_node_color_from_hsv, "Node_Color_HSV", [1, Node_Color_HSV]); - addNodeObject(color, "Gradient", s_node_gradient_out, "Node_Gradient_Out", [1, Node_Gradient_Out]); - addNodeObject(color, "Gradient Shift", s_node_gradient_shift, "Node_Gradient_Shift", [1, Node_Gradient_Shift]); addNodeObject(color, "Sampler", s_node_sampler, "Node_Sampler", [1, Node_Sampler]); addNodeObject(color, "Color Data", s_node_color_data, "Node_Color_Data", [1, Node_Color_Data]); addNodeObject(color, "Find pixel", s_node_pixel_find, "Node_Find_Pixel", [1, Node_Find_Pixel]).set_version(1130); @@ -420,6 +418,13 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(color, "Sort Palette", s_node_palette_sort, "Node_Palette_Sort", [1, Node_Palette_Sort]).set_version(1130); addNodeObject(color, "Palette Extract", s_node_palette_extract, "Node_Palette_Extract", [1, Node_Palette_Extract]).set_version(1100); addNodeObject(color, "Palette Replace", s_node_palette_replace, "Node_Palette_Replace", [1, Node_Palette_Replace]).set_version(1120); + + ds_list_add(color, "Gradient"); + addNodeObject(color, "Gradient", s_node_gradient_out, "Node_Gradient_Out", [1, Node_Gradient_Out]); + addNodeObject(color, "Gradient Palette", s_node_gradient_palette, "Node_Gradient_Palette", [1, Node_Gradient_Palette]).set_version(1135); + addNodeObject(color, "Gradient Shift", s_node_gradient_shift, "Node_Gradient_Shift", [1, Node_Gradient_Shift]); + addNodeObject(color, "Gradient Replace", s_node_gradient_replace, "Node_Gradient_Replace_Color", [1, Node_Gradient_Replace_Color]).set_version(1135); + addNodeObject(color, "Gradient Data", s_node_gradient_data, "Node_Gradient_Extract", [1, Node_Gradient_Extract]).set_version(1135); var animation = ds_list_create(); addNodeCatagory("Animation", animation); @@ -452,7 +457,11 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(node, "Tunnel Out", s_node_tunnel_out, "Node_Tunnel_Out", [1, Node_Tunnel_Out]); addNodeObject(node, "Display Text", s_node_text_display,"Node_Display_Text", [1, Node_Display_Text]); addNodeObject(node, "Display Image", s_node_image, "Node_Display_Image", [0, Node_create_Display_Image]); - + + ds_list_add(node, "Cache"); + addNodeObject(node, "Cache", s_node_cache, "Node_Cache", [1, Node_Cache]).set_version(1134); + addNodeObject(node, "Cache Array", s_node_cache_array, "Node_Cache_Array", [1, Node_Cache_Array]).set_version(1130); + var hid = ds_list_create(); addNodeCatagory("Hidden", hid, ["Hidden"]); addNodeObject(hid, "Input", s_node_feedback_input, "Node_Iterator_Each_Input", [1, Node_Iterator_Each_Input]); diff --git a/scripts/node_repeat/node_repeat.gml b/scripts/node_repeat/node_repeat.gml index 389434dad..211b67081 100644 --- a/scripts/node_repeat/node_repeat.gml +++ b/scripts/node_repeat/node_repeat.gml @@ -39,7 +39,7 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor inputs[| 13] = nodeValue("Path shift", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0); - inputs[| 14] = nodeValue("Color over copy", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 14] = nodeValue("Color over copy", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 15] = nodeValue("Alpha over copy", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11 ); @@ -143,7 +143,6 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var _prsh = inputs[| 13].getValue(); var _grad = inputs[| 14].getValue(); - var _grad_data = inputs[| 14].getExtraData(); var _alph = inputs[| 15].getValue(); var _arr = inputs[| 16].getValue(); @@ -237,7 +236,7 @@ function Node_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } var pos = point_rotate(-sw / 2, -sh / 2, 0, 0, rot); - var cc = gradient_eval(_grad, i / (_amo - 1), ds_list_get(_grad_data, 0)); + var cc = _grad.eval(i / (_amo - 1)); var aa = eval_curve_x(_alph, i / (_amo - 1)); cc = merge_color(cc, colorMultiply(cc, _an_bld), _inf); diff --git a/scripts/node_rigid_render/node_rigid_render.gml b/scripts/node_rigid_render/node_rigid_render.gml index f4b49ea2d..80bd8ca3e 100644 --- a/scripts/node_rigid_render/node_rigid_render.gml +++ b/scripts/node_rigid_render/node_rigid_render.gml @@ -2,6 +2,7 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr name = "Render"; color = COLORS.node_blend_simulation; icon = THEME.rigidSim; + use_cache = true; inputs[| 0] = nodeValue("Render dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, def_surf_size2) .setDisplay(VALUE_DISPLAY.vector) @@ -19,6 +20,11 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr } if(!LOADING && !APPENDING) createNewInput(); + insp2UpdateTooltip = "Clear cache"; + insp2UpdateIcon = [ THEME.cache, 0, COLORS._main_icon ]; + + static onInspector2Update = function() { clearCache(); } + static refreshDynamicInput = function() { var _l = ds_list_create(); for( var i = 0; i < ds_list_size(inputs); i++ ) { @@ -45,6 +51,9 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr } static update = function(frame = ANIMATOR.current_frame) { + if(recoverCache() || !ANIMATOR.is_playing) + return; + var _dim = inputs[| 0].getValue(); var _outSurf = outputs[| 0].getValue(); @@ -65,7 +74,7 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr if(!is_array(obj)) obj = [ obj ]; for( var k = 0; k < array_length(obj); k++ ) { - var _o = obj[k]; + var _o = obj[k]; if(_o == noone || !instance_exists(_o)) continue; if(is_undefined(_o.phy_active)) continue; @@ -89,6 +98,7 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr } surface_reset_target(); + cacheCurrentFrame(_outSurf); } static postDeserialize = function() { diff --git a/scripts/node_rigid_sim/node_rigid_sim.gml b/scripts/node_rigid_sim/node_rigid_sim.gml index 7631ef5f7..0a04df9e6 100644 --- a/scripts/node_rigid_sim/node_rigid_sim.gml +++ b/scripts/node_rigid_sim/node_rigid_sim.gml @@ -17,7 +17,7 @@ function Node_Rigid_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _gro //physics_world_update_iterations(30); //physics_world_update_speed(100) - static reset = function() { + static reset = function() { instance_destroy(oRigidbody); physics_pause_enable(true); @@ -35,7 +35,7 @@ function Node_Rigid_Group(_x, _y, _group = noone) : Node_Collection(_x, _y, _gro static onStep = function() { RETURN_ON_REST - if(ANIMATOR.current_frame == 0) + if(ANIMATOR.current_frame == 0) reset(); setRenderStatus(false); diff --git a/scripts/node_scatter/node_scatter.gml b/scripts/node_scatter/node_scatter.gml index 1096df481..31776a095 100644 --- a/scripts/node_scatter/node_scatter.gml +++ b/scripts/node_scatter/node_scatter.gml @@ -30,7 +30,7 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c inputs[| 10] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, irandom(9999999)); - inputs[| 11] = nodeValue("Random blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 11] = nodeValue("Random blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 12] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) @@ -112,7 +112,6 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c var seed = _data[10]; var color = _data[11]; - var _bldTyp = inputs[| 11].getExtraData(); var alpha = _data[12]; var mulpA = _data[16]; var useV = _data[17]; @@ -189,7 +188,7 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c if(vCol && _v != noone) grSamp *= _v; - var clr = gradient_eval(color, grSamp, _bldTyp[| 0]); + var clr = color.eval(grSamp); var alp = random_range_seed(alpha[0], alpha[1], posS); posS++; draw_surface_ext_safe(surf, _x, _y, _scx, _scy, _r, clr, alp); diff --git a/scripts/node_sprite_sheet/node_sprite_sheet.gml b/scripts/node_sprite_sheet/node_sprite_sheet.gml index 30e6bacc1..845901d93 100644 --- a/scripts/node_sprite_sheet/node_sprite_sheet.gml +++ b/scripts/node_sprite_sheet/node_sprite_sheet.gml @@ -35,6 +35,8 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + refreshSurface = false; + static step = function() { var grup = inputs[| 1].getValue(); var pack = inputs[| 3].getValue(); @@ -51,12 +53,51 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) var grid = inputs[| 4].getValue(); var alig = inputs[| 5].getValue(); - var oupt = outputs[| 0].getValue(); - if(grup != SPRITE_ANIM_GROUP.animation) { - onInspectorUpdate(); + initRender(); return; + } else if(ANIMATOR.rendering & ANIMATOR.frame_progress && ANIMATOR.current_frame == 0 && !refreshSurface) { + var skip = inputs[| 2].getValue(); + + if(is_array(inpt) && array_length(inpt) == 0) return; + var arr = is_array(inpt); + if(!arr) inpt = [ inpt ]; + var _surf = []; + + for(var i = 0; i < array_length(inpt); i++) { + if(!is_surface(inpt[i])) continue; + var ww = surface_get_width(inpt[i]); + var hh = surface_get_height(inpt[i]); + + switch(pack) { + case SPRITE_STACK.horizontal : + ww *= floor(ANIMATOR.frames_total / skip); + break; + case SPRITE_STACK.vertical : + hh *= floor(ANIMATOR.frames_total / skip); + break; + case SPRITE_STACK.grid : + var amo = floor(ANIMATOR.frames_total / skip); + var col = inputs[| 4].getValue(); + var row = ceil(amo / col); + + ww *= col; + hh *= row; + break; + } + + _surf[i] = surface_create_valid(ww, hh); + surface_set_target(_surf[i]); + draw_clear_alpha(0, 0); + surface_reset_target(); + + refreshSurface = true; + } + + if(!arr) _surf = array_safe_get(_surf, 0); + outputs[| 0].setValue(_surf); } + if(safe_mod(ANIMATOR.current_frame, skip) != 0) return; if(array_length(anim_drawn) != ANIMATOR.frames_total) @@ -71,6 +112,7 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) } } + var oupt = outputs[| 0].getValue(); if(is_array(oupt) && (array_length(inpt) != array_length(oupt))) return; var px = 0, py = 0; @@ -130,6 +172,7 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) px = _col * _w; py = _row * _h; + //print(display_name + ": " + string(ANIMATOR.current_frame) + ", " + string(inpt[i]) + "| " + string(px) + ", " + string(py)); draw_surface_safe(inpt[i], px, py); break; } @@ -143,7 +186,7 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) anim_drawn[ANIMATOR.current_frame] = true; } - static onInspectorUpdate = function() { + static onInspectorUpdate = function(updateAll = true) { var key = ds_map_find_first(NODE_MAP); repeat(ds_map_size(NODE_MAP)) { var node = NODE_MAP[? key]; @@ -156,7 +199,7 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) } } - static initRender = function() { + static initRender = function() { for(var i = 0; i < array_length(anim_drawn); i++) anim_drawn[i] = false; var inpt = inputs[| 0].getValue(); @@ -165,50 +208,13 @@ function Node_Render_Sprite_Sheet(_x, _y, _group = noone) : Node(_x, _y, _group) var alig = inputs[| 5].getValue(); if(grup == SPRITE_ANIM_GROUP.animation) { + refreshSurface = false; if(!LOADING && !APPENDING) { ANIMATOR.setFrame(-1); ANIMATOR.is_playing = true; ANIMATOR.rendering = true; ANIMATOR.frame_progress = true; } - - var skip = inputs[| 2].getValue(); - - if(is_array(inpt) && array_length(inpt) == 0) return; - var arr = is_array(inpt); - if(!arr) inpt = [ inpt ]; - var _surf = []; - - for(var i = 0; i < array_length(inpt); i++) { - if(!is_surface(inpt[i])) continue; - var ww = surface_get_width(inpt[i]); - var hh = surface_get_height(inpt[i]); - - switch(pack) { - case SPRITE_STACK.horizontal : - ww *= floor(ANIMATOR.frames_total / skip); - break; - case SPRITE_STACK.vertical : - hh *= floor(ANIMATOR.frames_total / skip); - break; - case SPRITE_STACK.grid : - var amo = floor(ANIMATOR.frames_total / skip); - var col = inputs[| 4].getValue(); - var row = ceil(amo / col); - - ww *= col; - hh *= row; - break; - } - - _surf[i] = surface_create_valid(ww, hh); - surface_set_target(_surf[i]); - draw_clear_alpha(0, 0); - surface_reset_target(); - } - - if(!arr) _surf = array_safe_get(_surf, 0); - outputs[| 0].setValue(_surf); } else { if(is_array(inpt)) { if(array_length(inpt) == 0) return; diff --git a/scripts/node_stripe/node_stripe.gml b/scripts/node_stripe/node_stripe.gml index 49e0d3c29..4dc94c0a8 100644 --- a/scripts/node_stripe/node_stripe.gml +++ b/scripts/node_stripe/node_stripe.gml @@ -38,7 +38,7 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co inputs[| 6] = nodeValue("Random color", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); - inputs[| 7] = nodeValue("Colors", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, [ new gradientKey(0, c_white) ] ) + inputs[| 7] = nodeValue("Colors", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); inputs[| 8] = nodeValue("Color 1", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); @@ -79,9 +79,8 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co inputs[| 9].setVisible(!_grad_use); var _gra = _data[7]; - var _gra_data = inputs[| 7].getExtraData(); - var _g = gradient_to_array(_gra); + var _g = _gra.toArray(); var _grad_color = _g[0]; var _grad_time = _g[1]; @@ -100,10 +99,10 @@ function Node_Stripe(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co shader_set_uniform_f_array_safe(uniform_clr1, colToVec4(_clr1)); shader_set_uniform_i(uniform_grad_use, _grad_use); - shader_set_uniform_i(uniform_grad_blend, ds_list_get(_gra_data, 0)); + shader_set_uniform_i(uniform_grad_blend, _gra.type); shader_set_uniform_f_array_safe(uniform_grad, _grad_color); shader_set_uniform_f_array_safe(uniform_grad_time, _grad_time); - shader_set_uniform_i(uniform_grad_key, array_length(_gra)); + shader_set_uniform_i(uniform_grad_key, array_length(_gra.keys)); draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1); shader_reset(); diff --git a/scripts/node_tunnel_in/node_tunnel_in.gml b/scripts/node_tunnel_in/node_tunnel_in.gml index 9f7c4d959..a0f9c866e 100644 --- a/scripts/node_tunnel_in/node_tunnel_in.gml +++ b/scripts/node_tunnel_in/node_tunnel_in.gml @@ -13,6 +13,14 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct error_notification = noone; + insp2UpdateTooltip = "Create tunnel out"; + insp2UpdateIcon = [ THEME.tunnel, 0, c_white ]; + + static onInspector2Update = function() { + var n = nodeBuild("Node_Tunnel_Out", x + 128, y); + n.inputs[| 0].setValue(inputs[| 0].getValue()); + } + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { var xx = _x + x * _s; var yy = _y + y * _s; @@ -30,7 +38,11 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct draw_set_color(COLORS.node_blend_tunnel); draw_set_alpha(0.35); - draw_line_width(xx + w * _s / 2, yy + h * _s / 2, _x + (node.x + node.w / 2) * _s, _y + (node.y + node.h / 2) * _s, 6 * _s); + var frx = xx + w * _s / 2; + var fry = yy + h * _s / 2; + var tox = _x + (node.x + node.w / 2) * _s; + var toy = _y + (node.y + node.h / 2) * _s; + draw_line_dashed(frx, fry, tox, toy, 8 * _s, 16 * _s, current_time / 100); draw_set_alpha(1); } diff --git a/scripts/node_tunnel_out/node_tunnel_out.gml b/scripts/node_tunnel_out/node_tunnel_out.gml index b97c8514d..bbe9d6721 100644 --- a/scripts/node_tunnel_out/node_tunnel_out.gml +++ b/scripts/node_tunnel_out/node_tunnel_out.gml @@ -27,7 +27,11 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc draw_set_color(COLORS.node_blend_tunnel); draw_set_alpha(0.35); - draw_line_width(xx + w * _s / 2, yy + h * _s / 2, _x + (node.x + node.w / 2) * _s, _y + (node.y + node.h / 2) * _s, 6 * _s); + var frx = _x + (node.x + node.w / 2) * _s; + var fry = _y + (node.y + node.h / 2) * _s; + var tox = xx + w * _s / 2; + var toy = yy + h * _s / 2; + draw_line_dashed(frx, fry, tox, toy, 8 * _s, 16 * _s, current_time / 100); draw_set_alpha(1); } diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index f3cf1bcf6..82f0262d0 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -157,7 +157,6 @@ function typeArray(_type) { case VALUE_DISPLAY.path_array : case VALUE_DISPLAY.palette : - case VALUE_DISPLAY.gradient : case VALUE_DISPLAY.text_array : return 1; } @@ -332,6 +331,10 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru extra_data = ds_list_create(); dyna_depo = ds_list_create(); + draw_line_shift_x = 0; + draw_line_shift_y = 0; + draw_line_shift_hover = false; + visible = _connect == JUNCTION_CONNECT.output || _type == VALUE_TYPE.surface || _type == VALUE_TYPE.path; show_in_inspector = true; @@ -777,10 +780,12 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru var grad = array_create(amo); for( var i = 0; i < amo; i++ ) grad[i] = new gradientKey(i / amo, value[i]); - return grad; + var g = new gradientObject(); + g.keys = grad; + return g; } - var grad = [ new gradientKey(0, value) ]; + var grad = new gradientObject(value); return grad; } @@ -827,10 +832,10 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru } if(typeFrom == VALUE_TYPE.integer && type == VALUE_TYPE.color) - return make_color_hsv(0, 0, value); + return value; - if((typeFrom == VALUE_TYPE.float || typeFrom == VALUE_TYPE.boolean) && type == VALUE_TYPE.color) - return make_color_hsv(0, 0, value * 255); + if((typeFrom == VALUE_TYPE.integer || typeFrom == VALUE_TYPE.float || typeFrom == VALUE_TYPE.boolean) && type == VALUE_TYPE.color) + return value >= 1? value : make_color_hsv(0, 0, value * 255); if(typeFrom == VALUE_TYPE.boolean && type == VALUE_TYPE.text) return value? "true" : "false"; @@ -1022,9 +1027,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru node.triggerRender(); if(_update) node.valueUpdate(index); + node.clearCacheForward(); } - node.clearCacheForward(); cache_array[0] = false; cache_value[0] = false; } @@ -1119,6 +1124,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru cache_array[0] = false; cache_value[0] = false; + draw_line_shift_x = 0; + draw_line_shift_y = 0; + if(!LOADING) MODIFIED = true; return true; } @@ -1356,10 +1364,12 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru ds_map_add_list(_map, "raw value", animator.serialize(scale)); - _map[? "on end"] = on_end; - _map[? "visible"] = visible; - _map[? "unit"] = unit.mode; - _map[? "anim"] = animator.is_anim; + _map[? "on end"] = on_end; + _map[? "visible"] = visible; + _map[? "unit"] = unit.mode; + _map[? "anim"] = animator.is_anim; + _map[? "shift x"] = draw_line_shift_x; + _map[? "shift y"] = draw_line_shift_y; _map[? "from node"] = !preset && value_from? value_from.node.node_id : -1; _map[? "from index"] = !preset && value_from? value_from.index : -1; @@ -1376,9 +1386,11 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru if(_map == noone) return; printIf(TESTING, " |- Applying deserialize to junction " + name + " of node " + node.name); - on_end = ds_map_try_get(_map, "on end", on_end); - visible = ds_map_try_get(_map, "visible", visible); - unit.mode = ds_map_try_get(_map, "unit", VALUE_UNIT.constant); + on_end = ds_map_try_get(_map, "on end", on_end); + visible = ds_map_try_get(_map, "visible", visible); + unit.mode = ds_map_try_get(_map, "unit", VALUE_UNIT.constant); + draw_line_shift_x = ds_map_try_get(_map, "shift x"); + draw_line_shift_y = ds_map_try_get(_map, "shift y"); animator.deserialize(_map[? "raw value"], scale); diff --git a/scripts/panel_animation/panel_animation.gml b/scripts/panel_animation/panel_animation.gml index 49ebd5d3c..cc7d6be77 100644 --- a/scripts/panel_animation/panel_animation.gml +++ b/scripts/panel_animation/panel_animation.gml @@ -79,8 +79,11 @@ function Panel_Animation() : PanelContent() constructor { addHotkey("", "Play/Pause", vk_space, MOD_KEY.none, function() { ANIMATOR.is_playing = !ANIMATOR.is_playing; ANIMATOR.frame_progress = true; - if(ANIMATOR.is_playing && ANIMATOR.frames_total) + ANIMATOR.time_since_last_frame = 0; + + if(ANIMATOR.is_playing && ANIMATOR.frames_total) ANIMATOR.setFrame(0); + }); addHotkey("", "First frame", vk_home, MOD_KEY.none, function() { ANIMATOR.setFrame(0); }); addHotkey("", "Last frame", vk_end, MOD_KEY.none, function() { ANIMATOR.setFrame(ANIMATOR.frames_total - 1); }); @@ -90,7 +93,10 @@ function Panel_Animation() : PanelContent() constructor { addHotkey("", "Previous frame", vk_left, MOD_KEY.none, function() { ANIMATOR.setFrame(max(ANIMATOR.real_frame - 1, 0)); }); - addHotkey("Animation", "Delete keys", vk_delete, MOD_KEY.none, function() { deleteKeys(); }); + addHotkey("Animation", "Delete keys", vk_delete, MOD_KEY.none, function() { deleteKeys(); }); + addHotkey("Animation", "Duplicate", "D", MOD_KEY.ctrl, function() { doDuplicate(); }); + addHotkey("Animation", "Copy", "C", MOD_KEY.ctrl, function() { doCopy(); }); + addHotkey("Animation", "Paste", "V", MOD_KEY.ctrl, function() { doPaste(); }); function deleteKeys() { for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { @@ -98,6 +104,7 @@ function Panel_Animation() : PanelContent() constructor { k.anim.removeKey(k); } ds_list_clear(keyframe_selecting); + updatePropertyList(); } function alignKeys(halign = fa_left) { @@ -239,7 +246,10 @@ function Panel_Animation() : PanelContent() constructor { ]), menuItem(get_text("panel_animation_stagger", "Stagger"), function() { stagger_mode = 1; }), -1, - menuItem(get_text("delete", "Delete"), function() { deleteKeys(); }, noone, [ "Animation", "Delete keys" ]), + menuItem(get_text("delete", "Delete"), function() { deleteKeys(); }, noone, [ "Animation", "Delete keys" ]), + menuItem(get_text("duplicate", "Duplicate"), function() { doDuplicate(); }, THEME.duplicate, [ "Animation", "Duplicate" ]), + menuItem(get_text("copy", "Copy"), function() { doCopy(); }, THEME.copy, [ "Animation", "Copy" ]), + menuItem(get_text("paste", "Paste"), function() { doPaste(); }, THEME.paste, [ "Animation", "Paste" ]), ]; function onResize() { @@ -1091,6 +1101,77 @@ function Panel_Animation() : PanelContent() constructor { if(mouse_release(mb_left)) keyframe_boxing = false; } + #region drag key + if(keyframe_dragging) { + if(keyframe_drag_type == KEYFRAME_DRAG_TYPE.move) { + var tt = round((mx - bar_x - timeline_shift) / ui(timeline_scale)) - 1; + tt = max(tt, 0); + var sh = tt - keyframe_dragging.time; + + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + var kt = k.time + sh; + + k.anim.setKeyTime(k, kt, false); + } + + timeline_show_time = floor(tt); + + if(mouse_release(mb_left) || mouse_press(mb_left)) { + keyframe_dragging = noone; + + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.anim.setKeyTime(k, k.time); + } + } + } else { + var dx = abs((keyframe_dragging.time + 1) - (mx - bar_x - timeline_shift) / ui(timeline_scale)) / 2; + dx = clamp(dx, 0, 1); + if(dx > 0.2) keyframe_dragout = true; + + var dy = (my - keyframe_drag_my) / 32; + + var _in = keyframe_dragging.ease_in; + var _ot = keyframe_dragging.ease_out; + + switch(keyframe_drag_type) { + case KEYFRAME_DRAG_TYPE.ease_in : + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; + k.ease_in[0] = dx; + } + + break; + case KEYFRAME_DRAG_TYPE.ease_out : + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_out_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; + k.ease_out[0] = dx; + } + break; + case KEYFRAME_DRAG_TYPE.ease_both : + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; + k.ease_out_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; + + k.ease_in[0] = dx; + k.ease_out[0] = dx; + } + break; + } + + if(mouse_release(mb_left)) { + recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_in, "ease_in"]); + recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_ot, "ease_out"]); + + keyframe_dragging = noone; + } + } + } + #endregion #region draw keys for( var i = 0; i < ds_list_size(anim_properties); i++ ) { @@ -1205,77 +1286,7 @@ function Panel_Animation() : PanelContent() constructor { if(!ds_list_empty(keyframe_selecting)) menuCall(,, keyframe_menu); } - - if(keyframe_dragging) { - if(keyframe_drag_type == KEYFRAME_DRAG_TYPE.move) { - var tt = round((mx - bar_x - timeline_shift) / ui(timeline_scale)) - 1; - tt = max(tt, 0); - var sh = tt - keyframe_dragging.time; - - for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { - var k = keyframe_selecting[| i]; - var kt = k.time + sh; - - k.anim.setKeyTime(k, kt, false); - } - - timeline_show_time = floor(tt); - - if(mouse_release(mb_left)) { - keyframe_dragging = noone; - - for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { - var k = keyframe_selecting[| i]; - k.anim.setKeyTime(k, k.time); - } - } - } else { - var dx = abs((keyframe_dragging.time + 1) - (mx - bar_x - timeline_shift) / ui(timeline_scale)) / 2; - dx = clamp(dx, 0, 1); - if(dx > 0.2) keyframe_dragout = true; - var dy = (my - keyframe_drag_my) / 32; - - var _in = keyframe_dragging.ease_in; - var _ot = keyframe_dragging.ease_out; - - switch(keyframe_drag_type) { - case KEYFRAME_DRAG_TYPE.ease_in : - for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { - var k = keyframe_selecting[| i]; - k.ease_in_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; - k.ease_in[0] = dx; - } - - break; - case KEYFRAME_DRAG_TYPE.ease_out : - for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { - var k = keyframe_selecting[| i]; - k.ease_out_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; - k.ease_out[0] = dx; - } - break; - case KEYFRAME_DRAG_TYPE.ease_both : - for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { - var k = keyframe_selecting[| i]; - k.ease_in_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; - k.ease_out_type = keyframe_dragout? CURVE_TYPE.bezier : CURVE_TYPE.none; - - k.ease_in[0] = dx; - k.ease_out[0] = dx; - } - break; - } - - if(mouse_release(mb_left)) { - recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_in, "ease_in"]); - recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_ot, "ease_out"]); - - keyframe_dragging = noone; - } - } - } - if(stagger_mode == 2) { var ts = keyframe_selecting[| stagger_index].time; var tm = round((mx - bar_x - timeline_shift) / ui(timeline_scale)) - 1; @@ -1390,4 +1401,41 @@ function Panel_Animation() : PanelContent() constructor { timeline_show_time = -1; } } + + function doDuplicate() { + if(ds_list_empty(keyframe_selecting)) return; + + var clones = ds_list_create(); + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + ds_list_add(clones, keyframe_selecting[| i].cloneAnimator()); + } + + ds_list_destroy(keyframe_selecting); + keyframe_selecting = clones; + + keyframe_dragging = keyframe_selecting[| 0]; + keyframe_drag_type = KEYFRAME_DRAG_TYPE.move; + keyframe_drag_mx = mx; + keyframe_drag_my = my; + } + + copy_clipboard = ds_list_create(); + function doCopy() { + ds_list_clear(copy_clipboard); + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) + ds_list_add(copy_clipboard, keyframe_selecting[| i]); + } + + function doPaste() { + if(ds_list_empty(copy_clipboard)) return; + + var shf = 0; + var minx = ANIMATOR.frames_total + 2; + for( var i = 0; i < ds_list_size(copy_clipboard); i++ ) + minx = min(minx, copy_clipboard[| i].time); + shf = ANIMATOR.current_frame - minx; print(minx); + + for( var i = 0; i < ds_list_size(copy_clipboard); i++ ) + copy_clipboard[| i].cloneAnimator(shf); + } } \ No newline at end of file diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index ead531f78..ba771692d 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -51,6 +51,10 @@ function Panel_Graph() : PanelContent() constructor { nodes_select_mx = 0; nodes_select_my = 0; + nodes_junction_d = noone; + nodes_junction_dx = 0; + nodes_junction_dy = 0; + node_hovering = noone; node_hover = noone; node_focus = noone; @@ -202,7 +206,7 @@ function Panel_Graph() : PanelContent() constructor { addHotkey("Graph", "Duplicate", "D", MOD_KEY.ctrl, function() { doDuplicate(); }); addHotkey("Graph", "Copy", "C", MOD_KEY.ctrl, function() { doCopy(); }); - addHotkey("Graph", "Paste", "V", MOD_KEY.ctrl, function() { doPaste(clipboard_get_text()); }); + addHotkey("Graph", "Paste", "V", MOD_KEY.ctrl, function() { doPaste(); }); function stepBegin() { var gr_x = graph_x * graph_s; @@ -536,21 +540,18 @@ function Panel_Graph() : PanelContent() constructor { menuCall(,, menu ); } else { var menu = []; - if(node_focus != noone || ds_list_size(nodes_select_list)) { - array_push(menu, - menuItem(get_text("copy", "Copy"), function() { - doCopy(); - }, THEME.copy, ["Graph", "Copy"]) - ); - } - if(clipboard_get_text() != "") { - array_push(menu, - menuItem(get_text("paste", "Paste"), function() { - doPaste(clipboard_get_text()); - }, THEME.paste, ["Graph", "Paste"]) - ); - } + array_push(menu, + menuItem(get_text("copy", "Copy"), function() { + doCopy(); + }, THEME.copy, ["Graph", "Copy"]).setActive(node_focus != noone || ds_list_size(nodes_select_list)) + ); + + array_push(menu, + menuItem(get_text("paste", "Paste"), function() { + doPaste(); + }, THEME.paste, ["Graph", "Paste"]).setActive(clipboard_get_text() != "") + ); callAddDialog(); menuCall(o_dialog_add_node.dialog_x - ui(8), o_dialog_add_node.dialog_y + ui(4), menu, fa_right ); @@ -586,10 +587,12 @@ function Panel_Graph() : PanelContent() constructor { #region draw node //var t = current_time; + for(var i = 0; i < ds_list_size(nodes_list); i++) + nodes_list[| i].onDrawNodeBehind(gr_x, gr_y, mx, my, graph_s); + for(var i = 0; i < ds_list_size(nodes_list); i++) { var n = nodes_list[| i]; if(instanceof(n) == "Node_Frame") continue; - n.onDrawNodeBehind(gr_x, gr_y, mx, my, graph_s); var val = n.drawNode(gr_x, gr_y, mx, my, graph_s); if(val) { @@ -774,9 +777,29 @@ function Panel_Graph() : PanelContent() constructor { if(mouse_release(mb_left)) nodes_select_drag = false; } + + if(nodes_junction_d != noone) { + var shx = nodes_junction_dx + (mx - nodes_select_mx) / graph_s; + var shy = nodes_junction_dy + (my - nodes_select_my) / graph_s; + + shx = value_snap(shx, key_mod_press(CTRL)? 1 : 4); + shy = value_snap(shy, key_mod_press(CTRL)? 1 : 4); + + nodes_junction_d.draw_line_shift_x = shx; + nodes_junction_d.draw_line_shift_y = shy; + + if(mouse_release(mb_left)) + nodes_junction_d = noone; + } if(mouse_on_graph && mouse_press(mb_left, pFOCUS) && !key_mod_press(ALT)) { - if(!node_focus && !value_focus && !drag_locking) { + if(junction_hovering && junction_hovering.draw_line_shift_hover) { + nodes_select_mx = mx; + nodes_select_my = my; + nodes_junction_d = junction_hovering; + nodes_junction_dx = junction_hovering.draw_line_shift_x; + nodes_junction_dy = junction_hovering.draw_line_shift_y; + } else if(!node_focus && !value_focus && !drag_locking) { nodes_select_drag = true; nodes_select_mx = mx; nodes_select_my = my; @@ -878,7 +901,8 @@ function Panel_Graph() : PanelContent() constructor { ds_map_destroy(_map); } - function doPaste(txt = "") { + function doPaste() { + var txt = clipboard_get_text(); var _map = json_decode(txt); if(_map != -1) { ds_map_clear(APPEND_MAP); diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 54f9d9586..e07a26246 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -409,7 +409,7 @@ function Panel_Inspector() : PanelContent() constructor { case VALUE_TYPE.color : switch(jun.display_type) { case VALUE_DISPLAY.gradient : - jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.showValue(), jun.extra_data, _m); + jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.showValue(), _m); break; default : jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.showValue(), _m); @@ -703,16 +703,18 @@ function Panel_Inspector() : PanelContent() constructor { var bx = w - ui(44); var by = ui(12); - if(inspecting.hasInspectorUpdate()) { - if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, inspecting.inspUpdateTooltip, inspecting.inspUpdateIcon[0], inspecting.inspUpdateIcon[1], inspecting.inspUpdateIcon[2]) == 2) + if(inspecting.hasInspectorUpdate(true)) { + var icon = inspecting.inspUpdateIcon; + if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, inspecting.inspUpdateTooltip, icon[0], icon[1], icon[2]) == 2) inspecting.inspectorUpdate(); } else draw_sprite_ui(THEME.sequence_control, 1, bx + ui(16), by + ui(16),,,, COLORS._main_icon_dark); if(inspecting.hasInspector2Update()) { by += ui(36); + var icon = inspecting.insp2UpdateIcon; - if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, inspecting.insp2UpdateTooltip, inspecting.insp2UpdateIcon[0], inspecting.insp2UpdateIcon[1], inspecting.insp2UpdateIcon[2]) = 2) + if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, inspecting.insp2UpdateTooltip, icon[0], icon[1], icon[2]) = 2) inspecting.inspector2Update(); } } diff --git a/scripts/panel_menu/panel_menu.gml b/scripts/panel_menu/panel_menu.gml index a5c633b04..8176557e9 100644 --- a/scripts/panel_menu/panel_menu.gml +++ b/scripts/panel_menu/panel_menu.gml @@ -7,6 +7,8 @@ function Panel_Menu() : PanelContent() constructor { noti_icon_show = 0; noti_icon_time = 0; + + menu_file = [ menuItem(get_text("panel_menu_new", "New"), function() { NEW(); }, THEME.new_file, ["", "New file"]), menuItem(get_text("panel_menu_open", "Open") + "...", function() { LOAD(); }, THEME.noti_icon_file_load, ["", "Open"]), @@ -34,7 +36,8 @@ function Panel_Menu() : PanelContent() constructor { } instance_create_depth(0, 0, 0, addon_key_displayer); - }) + }), + ]); }, THEME.addon ).setIsShelf(), -1, @@ -301,22 +304,21 @@ function Panel_Menu() : PanelContent() constructor { nx0 += nw + ui(8); #endregion - #region window + #region addons var wh = ui(32); - var cc = c_white; with(addon) { draw_set_text(f_p0, fa_center, fa_center, COLORS._main_text); var ww = string_width(name) + ui(16); if(other.pHOVER && point_in_rectangle(other.mx, other.my, nx0, ny0 - wh / 2, nx0 + ww, ny0 + wh / 2)) { - draw_sprite_stretched_ext(THEME.menu_button, 1, nx0, ny0 - wh / 2, ww, wh, cc, 1); + draw_sprite_stretched(THEME.menu_button, 1, nx0, ny0 - wh / 2, ww, wh); if(mouse_press(mb_left, other.pFOCUS)) instance_destroy(); if(mouse_press(mb_right, other.pFOCUS)) menuCall(,, menu); } else - draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, nx0, ny0 - wh / 2, ww, wh, cc, 1); + draw_sprite_stretched(THEME.ui_panel_bg, 1, nx0, ny0 - wh / 2, ww, wh); draw_text(nx0 + ww / 2, ny0, name); nx0 += ww + ui(4); diff --git a/scripts/preferences/preferences.gml b/scripts/preferences/preferences.gml index 177fa3978..b2609150e 100644 --- a/scripts/preferences/preferences.gml +++ b/scripts/preferences/preferences.gml @@ -59,6 +59,8 @@ PREF_MAP[? "dialog_add_node_w"] = 532; PREF_MAP[? "dialog_add_node_h"] = 400; + + PREF_MAP[? "panel_menu_resource_monitor"] = false; #endregion #region hotkeys diff --git a/scripts/render_data/render_data.gml b/scripts/render_data/render_data.gml index 508dd01e8..6082db5d4 100644 --- a/scripts/render_data/render_data.gml +++ b/scripts/render_data/render_data.gml @@ -4,7 +4,7 @@ enum RENDER_TYPE { full = 2 } -global.RENDER_LOG = false; +global.RENDER_LOG = false; global.group_inputs = [ "Node_Group_Input", "Node_Feedback_Input", "Node_Iterator_Input", "Node_Iterator_Each_Input" ]; function __nodeLeafList(_list, _queue) { @@ -40,7 +40,7 @@ function __nodeInLoop(_node) { return false; } -function Render(partial = false) { +function Render(partial = false, runAction = false) { try { var rendering = noone; var error = 0; @@ -78,7 +78,7 @@ function Render(partial = false) { var _startNode = _node.isRenderable(); if(_startNode) { ds_queue_enqueue(RENDER_QUEUE, _node); - printIf(global.RENDER_LOG, " > Push " + _node.name + " node to stack"); + printIf(global.RENDER_LOG, " > Push " + _node.name + " (" + _node.display_name + ") node to stack"); } } @@ -86,13 +86,76 @@ function Render(partial = false) { while(!ds_queue_empty(RENDER_QUEUE)) { rendering = ds_queue_dequeue(RENDER_QUEUE); - var txt = rendering.rendered? " [Skip]" : " [Update]"; if(!rendering.rendered) { rendering.doUpdate(); + rendering.setRenderStatus(true); + printIf(global.RENDER_LOG, "Rendered " + rendering.name + " (" + rendering.display_name + ") [" + string(instanceof(rendering)) + "] (Update)"); + + rendering.getNextNodes(); + + if(runAction && rendering.hasInspectorUpdate()) + rendering.inspectorUpdate(); + } else + printIf(global.RENDER_LOG, "Rendered " + rendering.name + " (" + rendering.display_name + ") [" + string(instanceof(rendering)) + "] (Skip)"); + } + + printIf(global.RENDER_LOG, "=== RENDER COMPLETE IN {" + string(current_time - t) + "ms} ===\n"); + } catch(e) + noti_warning(exception_print(e)); +} + +function __renderListReset(list) { + for( var i = 0; i < ds_list_size(list); i++ ) { + list[| i].setRenderStatus(false); + if(struct_has(list[| i], "nodes")) + __renderListReset(list[| i].nodes); + } +} + +function RenderListAction(list, context = PANEL_GRAPH.getCurrentContext()) { + try { + var rendering = noone; + var error = 0; + var t = current_time; + printIf(global.RENDER_LOG, "=== RENDER ACTION START [frame " + string(ANIMATOR.current_frame) + "] ==="); + + __renderListReset(list); + + // get leaf node + ds_queue_clear(RENDER_QUEUE); + for( var i = 0; i < ds_list_size(list); i++ ) { + var _node = list[| i]; + + if(is_undefined(_node)) continue; + if(!is_struct(_node)) continue; + + if(!_node.active) continue; + if(!_node.renderActive) continue; + if(_node.rendered) continue; + if(__nodeInLoop(_node)) continue; + + var _startNode = _node.isRenderable(); + if(_startNode) { + ds_queue_enqueue(RENDER_QUEUE, _node); + printIf(global.RENDER_LOG, " > Push " + _node.name + " (" + _node.display_name + ") node to stack"); + } + } + + // render forward + while(!ds_queue_empty(RENDER_QUEUE)) { + rendering = ds_queue_dequeue(RENDER_QUEUE); + if(rendering.group == context) break; + + var txt = rendering.rendered? " [Skip]" : " [Update]"; + if(!rendering.rendered) { + rendering.doUpdate(); + if(rendering.hasInspectorUpdate()) + rendering.inspectorUpdate(); + rendering.setRenderStatus(true); rendering.getNextNodes(); } - printIf(global.RENDER_LOG, "Rendered " + rendering.name + " [" + string(instanceof(rendering)) + "]" + txt); + printIf(global.RENDER_LOG, "Rendered " + rendering.name + " (" + rendering.display_name + ") [" + string(instanceof(rendering)) + "]" + txt); } printIf(global.RENDER_LOG, "=== RENDER COMPLETE IN {" + string(current_time - t) + "ms} ===\n"); diff --git a/scripts/string_hexadecimal/string_hexadecimal.gml b/scripts/string_hexadecimal/string_hexadecimal.gml index 602d789e1..01a789960 100644 --- a/scripts/string_hexadecimal/string_hexadecimal.gml +++ b/scripts/string_hexadecimal/string_hexadecimal.gml @@ -1,5 +1,5 @@ function string_hexadecimal(str){ - static HEX = "0123456789abcdef"; + static HEX = "0123456789ABCDEF"; var i = string_length(str); var d = 1; @@ -7,7 +7,7 @@ function string_hexadecimal(str){ while(i > 0) { var ch = string_char_at(str, i); - var val = string_pos(ch, HEX) - 1; + var val = string_pos(string_upper(ch), HEX) - 1; v += val * d; d *= 16; @@ -32,10 +32,6 @@ function number_to_hex(val) { return ss; } -function color_get_alpha(color) { - return (color & (0xFF << 24)) >> 24; -} - function color_get_hex(color, alpha = false) { var r = color_get_red(color); var g = color_get_green(color); diff --git a/scripts/surface_functions/surface_functions.gml b/scripts/surface_functions/surface_functions.gml index 08e7ca46c..255b26e39 100644 --- a/scripts/surface_functions/surface_functions.gml +++ b/scripts/surface_functions/surface_functions.gml @@ -174,5 +174,51 @@ function surface_array_clone(arr) { for( var i = 0; i < array_length(arr); i++ ) _arr[i] = surface_array_clone(arr[i]); + return _arr; +} + +function surface_array_serialize(arr) { + var _arr = __surface_array_serialize(arr); + return json_stringify(_arr); +} + +function __surface_array_serialize(arr) { + if(!is_array(arr)) { + if(is_surface(arr)) { + var buff = buffer_create(surface_get_width(arr) * surface_get_height(arr) * 4, buffer_fixed, 1); + buffer_get_surface(buff, arr, 0); + var comp = buffer_compress(buff, 0, buffer_get_size(buff)); + var enc = buffer_base64_encode(comp, 0, buffer_get_size(comp)); + buffer_delete(buff); + return { width: surface_get_width(arr), height: surface_get_height(arr), buffer: enc }; + } else + return arr; + } + + var _arr = []; + + for( var i = 0; i < array_length(arr); i++ ) + _arr[i] = __surface_array_serialize(arr[i]); + + return _arr; +} + +function surface_array_deserialize(arr, index = -1) { + var _arr = json_parse(arr); + return index == -1? __surface_array_deserialize(_arr, index) : __surface_array_deserialize(_arr[index]); +} + +function __surface_array_deserialize(arr) { + if(!is_array(arr)) { + var buff = buffer_base64_decode(arr.buffer); + var buff = buffer_decompress(buff); + return surface_create_from_buffer(arr.width, arr.height, buff); + } + + var _arr = []; + + for( var i = 0; i < array_length(arr); i++ ) + _arr[i] = __surface_array_deserialize(arr[i]); + return _arr; } \ No newline at end of file diff --git a/shaders/sh_color_picker_hue/sh_color_picker_hue.fsh b/shaders/sh_color_picker_hue/sh_color_picker_hue.fsh index f4ab2392e..7df260170 100644 --- a/shaders/sh_color_picker_hue/sh_color_picker_hue.fsh +++ b/shaders/sh_color_picker_hue/sh_color_picker_hue.fsh @@ -14,6 +14,6 @@ vec3 hsv2rgb(vec3 c) { void main() { vec3 _rgb = hsv2rgb(vec3(hue, v_vTexcoord.x, 1.0 - v_vTexcoord.y)); - vec4 color = vec4(_rgb.r, _rgb.g, _rgb.b, 1.0); + vec4 color = vec4(_rgb.r, _rgb.g, _rgb.b, v_vColour.a); gl_FragColor = color; } \ No newline at end of file diff --git a/shaders/sh_color_picker_value/sh_color_picker_value.fsh b/shaders/sh_color_picker_value/sh_color_picker_value.fsh index 15a41fe16..00c7da286 100644 --- a/shaders/sh_color_picker_value/sh_color_picker_value.fsh +++ b/shaders/sh_color_picker_value/sh_color_picker_value.fsh @@ -14,6 +14,6 @@ vec3 hsv2rgb(vec3 c) { void main() { vec3 _rgb = hsv2rgb(vec3(v_vTexcoord.x, 1.0 - v_vTexcoord.y, value)); - vec4 color = vec4(_rgb.r, _rgb.g, _rgb.b, 1.0); + vec4 color = vec4(_rgb.r, _rgb.g, _rgb.b, v_vColour.a); gl_FragColor = color; } \ No newline at end of file diff --git a/shaders/sh_flood_fill_thres/sh_flood_fill_thres.fsh b/shaders/sh_flood_fill_thres/sh_flood_fill_thres.fsh index 9d3b962c2..bd128b6fe 100644 --- a/shaders/sh_flood_fill_thres/sh_flood_fill_thres.fsh +++ b/shaders/sh_flood_fill_thres/sh_flood_fill_thres.fsh @@ -9,6 +9,6 @@ uniform float thres; void main() { vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ); - float n = step(distance(col, color), thres); + float n = step(distance(col * col.a, color * color.a), thres); gl_FragColor = vec4(vec3(n), 1.); } diff --git a/sprites/s_node_cache/45e30c88-dd44-47e8-8abe-7f9fc48abf59.png b/sprites/s_node_cache/45e30c88-dd44-47e8-8abe-7f9fc48abf59.png new file mode 100644 index 000000000..0addeaf4e Binary files /dev/null and b/sprites/s_node_cache/45e30c88-dd44-47e8-8abe-7f9fc48abf59.png differ diff --git a/sprites/s_node_cache/layers/45e30c88-dd44-47e8-8abe-7f9fc48abf59/d49d48d8-dc4a-4080-b68b-3ee6a54e0170.png b/sprites/s_node_cache/layers/45e30c88-dd44-47e8-8abe-7f9fc48abf59/d49d48d8-dc4a-4080-b68b-3ee6a54e0170.png new file mode 100644 index 000000000..0addeaf4e Binary files /dev/null and b/sprites/s_node_cache/layers/45e30c88-dd44-47e8-8abe-7f9fc48abf59/d49d48d8-dc4a-4080-b68b-3ee6a54e0170.png differ diff --git a/sprites/s_node_cache/s_node_cache.yy b/sprites/s_node_cache/s_node_cache.yy new file mode 100644 index 000000000..e63ef66ed --- /dev/null +++ b/sprites/s_node_cache/s_node_cache.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_cache", + "bbox_bottom": 58, + "bbox_left": 5, + "bbox_right": 58, + "bbox_top": 4, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"45e30c88-dd44-47e8-8abe-7f9fc48abf59",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"d49d48d8-dc4a-4080-b68b-3ee6a54e0170","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "node", + "path": "folders/nodes/icons/node.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_cache", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"45e30c88-dd44-47e8-8abe-7f9fc48abf59","path":"sprites/s_node_cache/s_node_cache.yy",},},},"Disabled":false,"id":"2e954071-098b-48ff-a036-fd5969396731","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file diff --git a/sprites/s_node_cache_array/32d30ea4-f058-42d5-be58-facfee2d02e8.png b/sprites/s_node_cache_array/32d30ea4-f058-42d5-be58-facfee2d02e8.png deleted file mode 100644 index 3fce4e5ac..000000000 Binary files a/sprites/s_node_cache_array/32d30ea4-f058-42d5-be58-facfee2d02e8.png and /dev/null differ diff --git a/sprites/s_node_cache_array/6c3ba159-8e0b-4ffc-879c-75f2ae725189.png b/sprites/s_node_cache_array/6c3ba159-8e0b-4ffc-879c-75f2ae725189.png new file mode 100644 index 000000000..681a04e6c Binary files /dev/null and b/sprites/s_node_cache_array/6c3ba159-8e0b-4ffc-879c-75f2ae725189.png differ diff --git a/sprites/s_node_cache_array/layers/32d30ea4-f058-42d5-be58-facfee2d02e8/0ab9f754-9684-4551-ba84-8e94f04c058b.png b/sprites/s_node_cache_array/layers/32d30ea4-f058-42d5-be58-facfee2d02e8/0ab9f754-9684-4551-ba84-8e94f04c058b.png deleted file mode 100644 index 3fce4e5ac..000000000 Binary files a/sprites/s_node_cache_array/layers/32d30ea4-f058-42d5-be58-facfee2d02e8/0ab9f754-9684-4551-ba84-8e94f04c058b.png and /dev/null differ diff --git a/sprites/s_node_cache_array/layers/6c3ba159-8e0b-4ffc-879c-75f2ae725189/7c632fb8-cb86-4ee0-868c-5a7e51e1b0cf.png b/sprites/s_node_cache_array/layers/6c3ba159-8e0b-4ffc-879c-75f2ae725189/7c632fb8-cb86-4ee0-868c-5a7e51e1b0cf.png new file mode 100644 index 000000000..681a04e6c Binary files /dev/null and b/sprites/s_node_cache_array/layers/6c3ba159-8e0b-4ffc-879c-75f2ae725189/7c632fb8-cb86-4ee0-868c-5a7e51e1b0cf.png differ diff --git a/sprites/s_node_cache_array/s_node_cache_array.yy b/sprites/s_node_cache_array/s_node_cache_array.yy index 43d72bdce..09c5caf31 100644 --- a/sprites/s_node_cache_array/s_node_cache_array.yy +++ b/sprites/s_node_cache_array/s_node_cache_array.yy @@ -2,10 +2,10 @@ "resourceType": "GMSprite", "resourceVersion": "1.0", "name": "s_node_cache_array", - "bbox_bottom": 49, + "bbox_bottom": 48, "bbox_left": 0, "bbox_right": 63, - "bbox_top": 14, + "bbox_top": 13, "bboxMode": 0, "collisionKind": 1, "collisionTolerance": 0, @@ -13,14 +13,14 @@ "edgeFiltering": false, "For3D": false, "frames": [ - {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"32d30ea4-f058-42d5-be58-facfee2d02e8",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6c3ba159-8e0b-4ffc-879c-75f2ae725189",}, ], "gridX": 0, "gridY": 0, "height": 64, "HTile": false, "layers": [ - {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"0ab9f754-9684-4551-ba84-8e94f04c058b","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"7c632fb8-cb86-4ee0-868c-5a7e51e1b0cf","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, ], "nineSlice": null, "origin": 4, @@ -54,7 +54,7 @@ "timeUnits": 1, "tracks": [ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ - {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"32d30ea4-f058-42d5-be58-facfee2d02e8","path":"sprites/s_node_cache_array/s_node_cache_array.yy",},},},"Disabled":false,"id":"fa4b839f-08f2-435c-beae-3fa1270286ce","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"6c3ba159-8e0b-4ffc-879c-75f2ae725189","path":"sprites/s_node_cache_array/s_node_cache_array.yy",},},},"Disabled":false,"id":"629f7073-5035-4e21-b151-140518606fdb","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, ], "visibleRange": null, diff --git a/sprites/s_node_gradient_data/a313ffc2-462b-4d5e-9fea-d29f34773a54.png b/sprites/s_node_gradient_data/a313ffc2-462b-4d5e-9fea-d29f34773a54.png new file mode 100644 index 000000000..877871c10 Binary files /dev/null and b/sprites/s_node_gradient_data/a313ffc2-462b-4d5e-9fea-d29f34773a54.png differ diff --git a/sprites/s_node_gradient_data/layers/a313ffc2-462b-4d5e-9fea-d29f34773a54/f09ae8ba-c120-473d-953c-f67148791661.png b/sprites/s_node_gradient_data/layers/a313ffc2-462b-4d5e-9fea-d29f34773a54/f09ae8ba-c120-473d-953c-f67148791661.png new file mode 100644 index 000000000..877871c10 Binary files /dev/null and b/sprites/s_node_gradient_data/layers/a313ffc2-462b-4d5e-9fea-d29f34773a54/f09ae8ba-c120-473d-953c-f67148791661.png differ diff --git a/sprites/s_node_gradient_data/s_node_gradient_data.yy b/sprites/s_node_gradient_data/s_node_gradient_data.yy new file mode 100644 index 000000000..b7c42f2f9 --- /dev/null +++ b/sprites/s_node_gradient_data/s_node_gradient_data.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_gradient_data", + "bbox_bottom": 50, + "bbox_left": 0, + "bbox_right": 63, + "bbox_top": 10, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"a313ffc2-462b-4d5e-9fea-d29f34773a54",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"f09ae8ba-c120-473d-953c-f67148791661","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "color", + "path": "folders/nodes/icons/value/color.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_gradient_data", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"a313ffc2-462b-4d5e-9fea-d29f34773a54","path":"sprites/s_node_gradient_data/s_node_gradient_data.yy",},},},"Disabled":false,"id":"99708ef0-35c6-449d-87b0-58661655567d","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file diff --git a/sprites/s_node_gradient_palette/6d4718e6-0463-4dc9-9ab2-8b0a463475aa.png b/sprites/s_node_gradient_palette/6d4718e6-0463-4dc9-9ab2-8b0a463475aa.png new file mode 100644 index 000000000..d9dbf608e Binary files /dev/null and b/sprites/s_node_gradient_palette/6d4718e6-0463-4dc9-9ab2-8b0a463475aa.png differ diff --git a/sprites/s_node_gradient_palette/layers/6d4718e6-0463-4dc9-9ab2-8b0a463475aa/50312e3b-6b5d-47ab-b79c-df318aec68de.png b/sprites/s_node_gradient_palette/layers/6d4718e6-0463-4dc9-9ab2-8b0a463475aa/50312e3b-6b5d-47ab-b79c-df318aec68de.png new file mode 100644 index 000000000..d9dbf608e Binary files /dev/null and b/sprites/s_node_gradient_palette/layers/6d4718e6-0463-4dc9-9ab2-8b0a463475aa/50312e3b-6b5d-47ab-b79c-df318aec68de.png differ diff --git a/sprites/s_node_gradient_palette/s_node_gradient_palette.yy b/sprites/s_node_gradient_palette/s_node_gradient_palette.yy new file mode 100644 index 000000000..b39f1d3b1 --- /dev/null +++ b/sprites/s_node_gradient_palette/s_node_gradient_palette.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_gradient_palette", + "bbox_bottom": 63, + "bbox_left": 0, + "bbox_right": 63, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6d4718e6-0463-4dc9-9ab2-8b0a463475aa",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"50312e3b-6b5d-47ab-b79c-df318aec68de","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "color", + "path": "folders/nodes/icons/value/color.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_gradient_palette", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"6d4718e6-0463-4dc9-9ab2-8b0a463475aa","path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",},},},"Disabled":false,"id":"8396744f-95c6-4c35-bbfb-dfc8f39137ec","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file diff --git a/sprites/s_node_gradient_replace/b4cd33be-d06b-4a3c-b633-9bddf97a3d64.png b/sprites/s_node_gradient_replace/b4cd33be-d06b-4a3c-b633-9bddf97a3d64.png new file mode 100644 index 000000000..9cf967434 Binary files /dev/null and b/sprites/s_node_gradient_replace/b4cd33be-d06b-4a3c-b633-9bddf97a3d64.png differ diff --git a/sprites/s_node_gradient_replace/layers/b4cd33be-d06b-4a3c-b633-9bddf97a3d64/a6fcc044-cd27-4958-b29f-82ab43e22a51.png b/sprites/s_node_gradient_replace/layers/b4cd33be-d06b-4a3c-b633-9bddf97a3d64/a6fcc044-cd27-4958-b29f-82ab43e22a51.png new file mode 100644 index 000000000..9cf967434 Binary files /dev/null and b/sprites/s_node_gradient_replace/layers/b4cd33be-d06b-4a3c-b633-9bddf97a3d64/a6fcc044-cd27-4958-b29f-82ab43e22a51.png differ diff --git a/sprites/s_node_gradient_replace/s_node_gradient_replace.yy b/sprites/s_node_gradient_replace/s_node_gradient_replace.yy new file mode 100644 index 000000000..220ad2f05 --- /dev/null +++ b/sprites/s_node_gradient_replace/s_node_gradient_replace.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_gradient_replace", + "bbox_bottom": 63, + "bbox_left": 0, + "bbox_right": 63, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b4cd33be-d06b-4a3c-b633-9bddf97a3d64",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a6fcc044-cd27-4958-b29f-82ab43e22a51","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "color", + "path": "folders/nodes/icons/value/color.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_gradient_replace", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"b4cd33be-d06b-4a3c-b633-9bddf97a3d64","path":"sprites/s_node_gradient_replace/s_node_gradient_replace.yy",},},},"Disabled":false,"id":"e03faa79-1824-4da5-8997-f4c09b8e028f","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file