pax_global_header00006660000000000000000000000064151310271000014500gustar00rootroot0000000000000052 comment=5c819c41663b0dd286417d5fadf269c1d93892ef reform-tools-1.83/000077500000000000000000000000001513102710000140635ustar00rootroot00000000000000reform-tools-1.83/.clang-format000066400000000000000000000566061513102710000164530ustar00rootroot00000000000000# SPDX-License-Identifier: GPL-2.0 # # clang-format configuration file. Intended for clang-format >= 11. # # For more information, see: # # Documentation/dev-tools/clang-format.rst # https://clang.llvm.org/docs/ClangFormat.html # https://clang.llvm.org/docs/ClangFormatStyleOptions.html # --- AccessModifierOffset: -4 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: Left AlignOperands: true AlignTrailingComments: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: false BinPackArguments: true BinPackParameters: true BraceWrapping: AfterClass: false AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: true AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None BreakBeforeBraces: Custom BreakBeforeInheritanceComma: false BreakBeforeTernaryOperators: false BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeComma BreakAfterJavaFieldAnnotations: false BreakStringLiterals: false ColumnLimit: 80 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 8 ContinuationIndentWidth: 8 Cpp11BracedListStyle: false DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false FixNamespaceComments: false # Taken from: # git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' include/ tools/ \ # | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \ # | LC_ALL=C sort -u ForEachMacros: - '__ata_qc_for_each' - '__bio_for_each_bvec' - '__bio_for_each_segment' - '__evlist__for_each_entry' - '__evlist__for_each_entry_continue' - '__evlist__for_each_entry_from' - '__evlist__for_each_entry_reverse' - '__evlist__for_each_entry_safe' - '__for_each_mem_range' - '__for_each_mem_range_rev' - '__for_each_thread' - '__hlist_for_each_rcu' - '__map__for_each_symbol_by_name' - '__pci_bus_for_each_res0' - '__pci_bus_for_each_res1' - '__pci_dev_for_each_res0' - '__pci_dev_for_each_res1' - '__perf_evlist__for_each_entry' - '__perf_evlist__for_each_entry_reverse' - '__perf_evlist__for_each_entry_safe' - '__rq_for_each_bio' - '__shost_for_each_device' - '__sym_for_each' - '_for_each_counter' - 'apei_estatus_for_each_section' - 'ata_for_each_dev' - 'ata_for_each_link' - 'ata_qc_for_each' - 'ata_qc_for_each_raw' - 'ata_qc_for_each_with_internal' - 'ax25_for_each' - 'ax25_uid_for_each' - 'bio_for_each_bvec' - 'bio_for_each_bvec_all' - 'bio_for_each_folio_all' - 'bio_for_each_integrity_vec' - 'bio_for_each_segment' - 'bio_for_each_segment_all' - 'bio_list_for_each' - 'bip_for_each_vec' - 'bond_for_each_slave' - 'bond_for_each_slave_rcu' - 'bpf_for_each' - 'bpf_for_each_reg_in_vstate' - 'bpf_for_each_reg_in_vstate_mask' - 'bpf_for_each_spilled_reg' - 'bpf_object__for_each_map' - 'bpf_object__for_each_program' - 'btree_for_each_safe128' - 'btree_for_each_safe32' - 'btree_for_each_safe64' - 'btree_for_each_safel' - 'card_for_each_dev' - 'cgroup_taskset_for_each' - 'cgroup_taskset_for_each_leader' - 'cpu_aggr_map__for_each_idx' - 'cpufreq_for_each_efficient_entry_idx' - 'cpufreq_for_each_entry' - 'cpufreq_for_each_entry_idx' - 'cpufreq_for_each_valid_entry' - 'cpufreq_for_each_valid_entry_idx' - 'css_for_each_child' - 'css_for_each_descendant_post' - 'css_for_each_descendant_pre' - 'damon_for_each_region' - 'damon_for_each_region_from' - 'damon_for_each_region_safe' - 'damon_for_each_scheme' - 'damon_for_each_scheme_safe' - 'damon_for_each_target' - 'damon_for_each_target_safe' - 'damos_for_each_filter' - 'damos_for_each_filter_safe' - 'damos_for_each_ops_filter' - 'damos_for_each_ops_filter_safe' - 'damos_for_each_quota_goal' - 'damos_for_each_quota_goal_safe' - 'data__for_each_file' - 'data__for_each_file_new' - 'data__for_each_file_start' - 'def_for_each_cpu' - 'device_for_each_child_node' - 'device_for_each_child_node_scoped' - 'dma_fence_array_for_each' - 'dma_fence_chain_for_each' - 'dma_fence_unwrap_for_each' - 'dma_resv_for_each_fence' - 'dma_resv_for_each_fence_unlocked' - 'do_for_each_ftrace_op' - 'drm_atomic_crtc_for_each_plane' - 'drm_atomic_crtc_state_for_each_plane' - 'drm_atomic_crtc_state_for_each_plane_state' - 'drm_atomic_for_each_plane_damage' - 'drm_client_for_each_connector_iter' - 'drm_client_for_each_modeset' - 'drm_connector_for_each_possible_encoder' - 'drm_exec_for_each_locked_object' - 'drm_exec_for_each_locked_object_reverse' - 'drm_for_each_bridge_in_chain' - 'drm_for_each_connector_iter' - 'drm_for_each_crtc' - 'drm_for_each_crtc_reverse' - 'drm_for_each_encoder' - 'drm_for_each_encoder_mask' - 'drm_for_each_fb' - 'drm_for_each_legacy_plane' - 'drm_for_each_plane' - 'drm_for_each_plane_mask' - 'drm_for_each_privobj' - 'drm_gem_for_each_gpuvm_bo' - 'drm_gem_for_each_gpuvm_bo_safe' - 'drm_gpusvm_for_each_range' - 'drm_gpuva_for_each_op' - 'drm_gpuva_for_each_op_from_reverse' - 'drm_gpuva_for_each_op_reverse' - 'drm_gpuva_for_each_op_safe' - 'drm_gpuvm_bo_for_each_va' - 'drm_gpuvm_bo_for_each_va_safe' - 'drm_gpuvm_for_each_va' - 'drm_gpuvm_for_each_va_range' - 'drm_gpuvm_for_each_va_range_safe' - 'drm_gpuvm_for_each_va_safe' - 'drm_mm_for_each_hole' - 'drm_mm_for_each_node' - 'drm_mm_for_each_node_in_range' - 'drm_mm_for_each_node_safe' - 'dsa_switch_for_each_available_port' - 'dsa_switch_for_each_cpu_port' - 'dsa_switch_for_each_cpu_port_continue_reverse' - 'dsa_switch_for_each_port' - 'dsa_switch_for_each_port_continue_reverse' - 'dsa_switch_for_each_port_safe' - 'dsa_switch_for_each_user_port' - 'dsa_switch_for_each_user_port_continue_reverse' - 'dsa_tree_for_each_cpu_port' - 'dsa_tree_for_each_user_port' - 'dsa_tree_for_each_user_port_continue_reverse' - 'dso__for_each_symbol' - 'elf_hash_for_each_possible' - 'elf_symtab__for_each_symbol' - 'evlist__for_each_cpu' - 'evlist__for_each_entry' - 'evlist__for_each_entry_continue' - 'evlist__for_each_entry_from' - 'evlist__for_each_entry_reverse' - 'evlist__for_each_entry_safe' - 'flow_action_for_each' - 'for_each_acpi_consumer_dev' - 'for_each_acpi_dev_match' - 'for_each_active_dev_scope' - 'for_each_active_drhd_unit' - 'for_each_active_iommu' - 'for_each_active_irq' - 'for_each_active_route' - 'for_each_aggr_pgid' - 'for_each_alloc_capable_rdt_resource' - 'for_each_and_bit' - 'for_each_andnot_bit' - 'for_each_available_child_of_node' - 'for_each_available_child_of_node_scoped' - 'for_each_bench' - 'for_each_bio' - 'for_each_board_func_rsrc' - 'for_each_btf_ext_rec' - 'for_each_btf_ext_sec' - 'for_each_bvec' - 'for_each_capable_rdt_resource' - 'for_each_card_auxs' - 'for_each_card_auxs_safe' - 'for_each_card_components' - 'for_each_card_dapms' - 'for_each_card_pre_auxs' - 'for_each_card_prelinks' - 'for_each_card_rtds' - 'for_each_card_rtds_safe' - 'for_each_card_widgets' - 'for_each_card_widgets_safe' - 'for_each_cgroup_storage_type' - 'for_each_child_of_node' - 'for_each_child_of_node_scoped' - 'for_each_child_of_node_with_prefix' - 'for_each_clear_bit' - 'for_each_clear_bit_from' - 'for_each_clear_bitrange' - 'for_each_clear_bitrange_from' - 'for_each_cmd' - 'for_each_cmsghdr' - 'for_each_collection' - 'for_each_comp_order' - 'for_each_compatible_node' - 'for_each_component_dais' - 'for_each_component_dais_safe' - 'for_each_conduit' - 'for_each_console' - 'for_each_console_srcu' - 'for_each_cpu' - 'for_each_cpu_and' - 'for_each_cpu_andnot' - 'for_each_cpu_from' - 'for_each_cpu_or' - 'for_each_cpu_wrap' - 'for_each_dapm_widgets' - 'for_each_dedup_cand' - 'for_each_dev_addr' - 'for_each_dev_scope' - 'for_each_dma_cap_mask' - 'for_each_dpcm_be' - 'for_each_dpcm_be_rollback' - 'for_each_dpcm_be_safe' - 'for_each_dpcm_fe' - 'for_each_drhd_unit' - 'for_each_dss_dev' - 'for_each_efi_memory_desc' - 'for_each_efi_memory_desc_in_map' - 'for_each_element' - 'for_each_element_extid' - 'for_each_element_id' - 'for_each_enabled_cpu' - 'for_each_endpoint_of_node' - 'for_each_event' - 'for_each_event_tps' - 'for_each_evictable_lru' - 'for_each_fib6_node_rt_rcu' - 'for_each_fib6_walker_rt' - 'for_each_file_lock' - 'for_each_free_mem_pfn_range_in_zone_from' - 'for_each_free_mem_range' - 'for_each_free_mem_range_reverse' - 'for_each_func_rsrc' - 'for_each_gpiochip_node' - 'for_each_group_evsel' - 'for_each_group_evsel_head' - 'for_each_group_member' - 'for_each_group_member_head' - 'for_each_hstate' - 'for_each_hwgpio' - 'for_each_hwgpio_in_range' - 'for_each_if' - 'for_each_inject_fn' - 'for_each_insn' - 'for_each_insn_op_loc' - 'for_each_insn_prefix' - 'for_each_intid' - 'for_each_iommu' - 'for_each_ip_tunnel_rcu' - 'for_each_irq_desc' - 'for_each_irq_nr' - 'for_each_lang' - 'for_each_link_ch_maps' - 'for_each_link_codecs' - 'for_each_link_cpus' - 'for_each_link_platforms' - 'for_each_lru' - 'for_each_matching_node' - 'for_each_matching_node_and_match' - 'for_each_media_entity_data_link' - 'for_each_mem_pfn_range' - 'for_each_mem_range' - 'for_each_mem_range_rev' - 'for_each_mem_region' - 'for_each_member' - 'for_each_memory' - 'for_each_migratetype_order' - 'for_each_missing_reg' - 'for_each_mle_subelement' - 'for_each_mod_mem_type' - 'for_each_mon_capable_rdt_resource' - 'for_each_mp_bvec' - 'for_each_net' - 'for_each_net_continue_reverse' - 'for_each_net_rcu' - 'for_each_netdev' - 'for_each_netdev_continue' - 'for_each_netdev_continue_rcu' - 'for_each_netdev_continue_reverse' - 'for_each_netdev_dump' - 'for_each_netdev_feature' - 'for_each_netdev_in_bond_rcu' - 'for_each_netdev_rcu' - 'for_each_netdev_reverse' - 'for_each_netdev_safe' - 'for_each_new_connector_in_state' - 'for_each_new_crtc_in_state' - 'for_each_new_mst_mgr_in_state' - 'for_each_new_plane_in_state' - 'for_each_new_plane_in_state_reverse' - 'for_each_new_private_obj_in_state' - 'for_each_new_reg' - 'for_each_nhlt_endpoint' - 'for_each_nhlt_endpoint_fmtcfg' - 'for_each_nhlt_fmtcfg' - 'for_each_node' - 'for_each_node_by_name' - 'for_each_node_by_type' - 'for_each_node_mask' - 'for_each_node_numadist' - 'for_each_node_state' - 'for_each_node_with_cpus' - 'for_each_node_with_property' - 'for_each_nonreserved_multicast_dest_pgid' - 'for_each_numa_hop_mask' - 'for_each_of_allnodes' - 'for_each_of_allnodes_from' - 'for_each_of_cpu_node' - 'for_each_of_graph_port' - 'for_each_of_graph_port_endpoint' - 'for_each_of_pci_range' - 'for_each_old_connector_in_state' - 'for_each_old_crtc_in_state' - 'for_each_old_mst_mgr_in_state' - 'for_each_old_plane_in_state' - 'for_each_old_private_obj_in_state' - 'for_each_oldnew_connector_in_state' - 'for_each_oldnew_crtc_in_state' - 'for_each_oldnew_mst_mgr_in_state' - 'for_each_oldnew_plane_in_state' - 'for_each_oldnew_plane_in_state_reverse' - 'for_each_oldnew_private_obj_in_state' - 'for_each_online_cpu' - 'for_each_online_cpu_wrap' - 'for_each_online_node' - 'for_each_online_pgdat' - 'for_each_or_bit' - 'for_each_page_ext' - 'for_each_path' - 'for_each_pci_bridge' - 'for_each_pci_dev' - 'for_each_pcm_streams' - 'for_each_physmem_range' - 'for_each_populated_zone' - 'for_each_possible_cpu' - 'for_each_possible_cpu_wrap' - 'for_each_present_blessed_reg' - 'for_each_present_cpu' - 'for_each_present_section_nr' - 'for_each_prime_number' - 'for_each_prime_number_from' - 'for_each_probe_cache_entry' - 'for_each_process' - 'for_each_process_thread' - 'for_each_prop_codec_conf' - 'for_each_prop_dai_codec' - 'for_each_prop_dai_cpu' - 'for_each_prop_dlc_codecs' - 'for_each_prop_dlc_cpus' - 'for_each_prop_dlc_platforms' - 'for_each_property_of_node' - 'for_each_rdt_resource' - 'for_each_reg' - 'for_each_reg_filtered' - 'for_each_reloc' - 'for_each_reloc_from' - 'for_each_requested_gpio' - 'for_each_requested_gpio_in_range' - 'for_each_reserved_child_of_node' - 'for_each_reserved_mem_range' - 'for_each_reserved_mem_region' - 'for_each_rtd_ch_maps' - 'for_each_rtd_codec_dais' - 'for_each_rtd_components' - 'for_each_rtd_cpu_dais' - 'for_each_rtd_dais' - 'for_each_rtd_dais_reverse' - 'for_each_sband_iftype_data' - 'for_each_script' - 'for_each_sec' - 'for_each_set_bit' - 'for_each_set_bit_from' - 'for_each_set_bit_wrap' - 'for_each_set_bitrange' - 'for_each_set_bitrange_from' - 'for_each_set_clump8' - 'for_each_sg' - 'for_each_sg_dma_page' - 'for_each_sg_page' - 'for_each_sgtable_dma_page' - 'for_each_sgtable_dma_sg' - 'for_each_sgtable_page' - 'for_each_sgtable_sg' - 'for_each_sibling_event' - 'for_each_sta_active_link' - 'for_each_subelement' - 'for_each_subelement_extid' - 'for_each_subelement_id' - 'for_each_sublist' - 'for_each_subsystem' - 'for_each_suite' - 'for_each_supported_activate_fn' - 'for_each_supported_inject_fn' - 'for_each_sym' - 'for_each_thread' - 'for_each_token' - 'for_each_unicast_dest_pgid' - 'for_each_valid_link' - 'for_each_vif_active_link' - 'for_each_vma' - 'for_each_vma_range' - 'for_each_vsi' - 'for_each_wakeup_source' - 'for_each_zone' - 'for_each_zone_zonelist' - 'for_each_zone_zonelist_nodemask' - 'func_for_each_insn' - 'fwnode_for_each_available_child_node' - 'fwnode_for_each_child_node' - 'fwnode_for_each_parent_node' - 'fwnode_graph_for_each_endpoint' - 'gadget_for_each_ep' - 'genradix_for_each' - 'genradix_for_each_from' - 'genradix_for_each_reverse' - 'hash_for_each' - 'hash_for_each_possible' - 'hash_for_each_possible_rcu' - 'hash_for_each_possible_rcu_notrace' - 'hash_for_each_possible_safe' - 'hash_for_each_rcu' - 'hash_for_each_safe' - 'hashmap__for_each_entry' - 'hashmap__for_each_entry_safe' - 'hashmap__for_each_key_entry' - 'hashmap__for_each_key_entry_safe' - 'hctx_for_each_ctx' - 'hists__for_each_format' - 'hists__for_each_sort_list' - 'hlist_bl_for_each_entry' - 'hlist_bl_for_each_entry_rcu' - 'hlist_bl_for_each_entry_safe' - 'hlist_for_each' - 'hlist_for_each_entry' - 'hlist_for_each_entry_continue' - 'hlist_for_each_entry_continue_rcu' - 'hlist_for_each_entry_continue_rcu_bh' - 'hlist_for_each_entry_from' - 'hlist_for_each_entry_from_rcu' - 'hlist_for_each_entry_rcu' - 'hlist_for_each_entry_rcu_bh' - 'hlist_for_each_entry_rcu_notrace' - 'hlist_for_each_entry_safe' - 'hlist_for_each_entry_srcu' - 'hlist_for_each_safe' - 'hlist_nulls_for_each_entry' - 'hlist_nulls_for_each_entry_from' - 'hlist_nulls_for_each_entry_rcu' - 'hlist_nulls_for_each_entry_safe' - 'i3c_bus_for_each_i2cdev' - 'i3c_bus_for_each_i3cdev' - 'idr_for_each_entry' - 'idr_for_each_entry_continue' - 'idr_for_each_entry_continue_ul' - 'idr_for_each_entry_ul' - 'iio_for_each_active_channel' - 'in_dev_for_each_ifa_rcu' - 'in_dev_for_each_ifa_rtnl' - 'in_dev_for_each_ifa_rtnl_net' - 'inet_bind_bucket_for_each' - 'interval_tree_for_each_span' - 'intlist__for_each_entry' - 'intlist__for_each_entry_safe' - 'kcore_copy__for_each_phdr' - 'key_for_each' - 'key_for_each_safe' - 'klp_for_each_func' - 'klp_for_each_func_safe' - 'klp_for_each_func_static' - 'klp_for_each_object' - 'klp_for_each_object_safe' - 'klp_for_each_object_static' - 'kunit_suite_for_each_test_case' - 'kvm_for_each_memslot' - 'kvm_for_each_memslot_in_gfn_range' - 'kvm_for_each_vcpu' - 'libbpf_nla_for_each_attr' - 'list_for_each' - 'list_for_each_codec' - 'list_for_each_codec_safe' - 'list_for_each_continue' - 'list_for_each_entry' - 'list_for_each_entry_continue' - 'list_for_each_entry_continue_rcu' - 'list_for_each_entry_continue_reverse' - 'list_for_each_entry_from' - 'list_for_each_entry_from_rcu' - 'list_for_each_entry_from_reverse' - 'list_for_each_entry_lockless' - 'list_for_each_entry_rcu' - 'list_for_each_entry_reverse' - 'list_for_each_entry_safe' - 'list_for_each_entry_safe_continue' - 'list_for_each_entry_safe_from' - 'list_for_each_entry_safe_reverse' - 'list_for_each_entry_srcu' - 'list_for_each_from' - 'list_for_each_prev' - 'list_for_each_prev_safe' - 'list_for_each_rcu' - 'list_for_each_safe' - 'llist_for_each' - 'llist_for_each_entry' - 'llist_for_each_entry_safe' - 'llist_for_each_safe' - 'lwq_for_each_safe' - 'map__for_each_symbol' - 'map__for_each_symbol_by_name' - 'mas_for_each' - 'mas_for_each_rev' - 'mci_for_each_dimm' - 'media_device_for_each_entity' - 'media_device_for_each_intf' - 'media_device_for_each_link' - 'media_device_for_each_pad' - 'media_entity_for_each_pad' - 'media_pipeline_for_each_entity' - 'media_pipeline_for_each_pad' - 'mlx5_lag_for_each_peer_mdev' - 'mptcp_for_each_subflow' - 'msi_domain_for_each_desc' - 'msi_for_each_desc' - 'mt_for_each' - 'nanddev_io_for_each_block' - 'nanddev_io_for_each_page' - 'neigh_for_each_in_bucket' - 'neigh_for_each_in_bucket_rcu' - 'neigh_for_each_in_bucket_safe' - 'netdev_for_each_lower_dev' - 'netdev_for_each_lower_private' - 'netdev_for_each_lower_private_rcu' - 'netdev_for_each_mc_addr' - 'netdev_for_each_synced_mc_addr' - 'netdev_for_each_synced_uc_addr' - 'netdev_for_each_uc_addr' - 'netdev_for_each_upper_dev_rcu' - 'netdev_hw_addr_list_for_each' - 'nft_rule_for_each_expr' - 'nla_for_each_attr' - 'nla_for_each_attr_type' - 'nla_for_each_nested' - 'nla_for_each_nested_type' - 'nlmsg_for_each_attr' - 'nlmsg_for_each_msg' - 'nr_neigh_for_each' - 'nr_neigh_for_each_safe' - 'nr_node_for_each' - 'nr_node_for_each_safe' - 'of_for_each_phandle' - 'of_property_for_each_string' - 'of_property_for_each_u32' - 'pci_bus_for_each_resource' - 'pci_dev_for_each_resource' - 'pcl_for_each_chunk' - 'pcl_for_each_segment' - 'pcm_for_each_format' - 'perf_config_items__for_each_entry' - 'perf_config_sections__for_each_entry' - 'perf_config_set__for_each_entry' - 'perf_cpu_map__for_each_cpu' - 'perf_cpu_map__for_each_cpu_skip_any' - 'perf_cpu_map__for_each_idx' - 'perf_evlist__for_each_entry' - 'perf_evlist__for_each_entry_reverse' - 'perf_evlist__for_each_entry_safe' - 'perf_evlist__for_each_evsel' - 'perf_evlist__for_each_mmap' - 'perf_evsel_for_each_per_thread_period_safe' - 'perf_hpp_list__for_each_format' - 'perf_hpp_list__for_each_format_safe' - 'perf_hpp_list__for_each_sort_list' - 'perf_hpp_list__for_each_sort_list_safe' - 'plist_for_each' - 'plist_for_each_continue' - 'plist_for_each_entry' - 'plist_for_each_entry_continue' - 'plist_for_each_entry_safe' - 'plist_for_each_safe' - 'pnp_for_each_card' - 'pnp_for_each_dev' - 'protocol_for_each_card' - 'protocol_for_each_dev' - 'queue_for_each_hw_ctx' - 'radix_tree_for_each_slot' - 'radix_tree_for_each_tagged' - 'rb_for_each' - 'rbtree_postorder_for_each_entry_safe' - 'rdma_for_each_block' - 'rdma_for_each_port' - 'rdma_umem_for_each_dma_block' - 'resource_list_for_each_entry' - 'resource_list_for_each_entry_safe' - 'rhl_for_each_entry_rcu' - 'rhl_for_each_rcu' - 'rht_for_each' - 'rht_for_each_entry' - 'rht_for_each_entry_from' - 'rht_for_each_entry_rcu' - 'rht_for_each_entry_rcu_from' - 'rht_for_each_entry_safe' - 'rht_for_each_from' - 'rht_for_each_rcu' - 'rht_for_each_rcu_from' - 'rq_for_each_bvec' - 'rq_for_each_segment' - 'rq_list_for_each' - 'rq_list_for_each_safe' - 'sample_read_group__for_each' - 'scsi_for_each_prot_sg' - 'scsi_for_each_sg' - 'sctp_for_each_hentry' - 'sctp_skb_for_each' - 'sec_for_each_insn' - 'sec_for_each_insn_continue' - 'sec_for_each_insn_from' - 'sec_for_each_sym' - 'shdma_for_each_chan' - 'shost_for_each_device' - 'sk_for_each' - 'sk_for_each_bound' - 'sk_for_each_bound_safe' - 'sk_for_each_entry_offset_rcu' - 'sk_for_each_from' - 'sk_for_each_rcu' - 'sk_for_each_safe' - 'sk_nulls_for_each' - 'sk_nulls_for_each_from' - 'sk_nulls_for_each_rcu' - 'snd_array_for_each' - 'snd_pcm_group_for_each_entry' - 'snd_soc_dapm_widget_for_each_path' - 'snd_soc_dapm_widget_for_each_path_safe' - 'snd_soc_dapm_widget_for_each_sink_path' - 'snd_soc_dapm_widget_for_each_source_path' - 'sparsebit_for_each_set_range' - 'strlist__for_each_entry' - 'strlist__for_each_entry_safe' - 'sym_for_each_insn' - 'sym_for_each_insn_continue_reverse' - 'symbols__for_each_entry' - 'tb_property_for_each' - 'tcf_act_for_each_action' - 'tcf_exts_for_each_action' - 'test_suite__for_each_test_case' - 'tool_pmu__for_each_event' - 'ttm_bo_lru_for_each_reserved_guarded' - 'ttm_resource_manager_for_each_res' - 'udp_lrpa_for_each_entry_rcu' - 'udp_portaddr_for_each_entry' - 'udp_portaddr_for_each_entry_rcu' - 'usb_hub_for_each_child' - 'v4l2_device_for_each_subdev' - 'v4l2_m2m_for_each_dst_buf' - 'v4l2_m2m_for_each_dst_buf_safe' - 'v4l2_m2m_for_each_src_buf' - 'v4l2_m2m_for_each_src_buf_safe' - 'virtio_device_for_each_vq' - 'while_for_each_ftrace_op' - 'workloads__for_each' - 'xa_for_each' - 'xa_for_each_marked' - 'xa_for_each_range' - 'xa_for_each_start' - 'xas_for_each' - 'xas_for_each_conflict' - 'xas_for_each_marked' - 'xbc_array_for_each_value' - 'xbc_for_each_key_value' - 'xbc_node_for_each_array_value' - 'xbc_node_for_each_child' - 'xbc_node_for_each_key_value' - 'xbc_node_for_each_subkey' - 'ynl_attr_for_each' - 'ynl_attr_for_each_nested' - 'ynl_attr_for_each_payload' - 'zorro_for_each_dev' IncludeBlocks: Preserve IncludeCategories: - Regex: '.*' Priority: 1 IncludeIsMainRegex: '(Test)?$' IndentCaseLabels: false IndentGotoLabels: false IndentPPDirectives: None IndentWidth: 8 IndentWrappedFunctionNames: false JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: false MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 8 ObjCSpaceAfterProperty: true ObjCSpaceBeforeProtocolList: true # Taken from git's rules PenaltyBreakAssignment: 10 PenaltyBreakBeforeFirstCallParameter: 30 PenaltyBreakComment: 10 PenaltyBreakFirstLessLess: 0 PenaltyBreakString: 10 PenaltyExcessCharacter: 100 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right ReflowComments: false SortIncludes: false SortUsingDeclarations: false SpaceAfterCStyleCast: false SpaceAfterTemplateKeyword: true SpaceBeforeAssignmentOperators: true SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatementsExceptForEachMacros SpaceBeforeRangeBasedForLoopColon: true SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInContainerLiterals: false SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Cpp03 TabWidth: 8 UseTab: Always ... reform-tools-1.83/.gitignore000066400000000000000000000000611513102710000160500ustar00rootroot00000000000000plymouth/background.png man/ plymouth/monobar.so reform-tools-1.83/.gitlab-ci.yml000066400000000000000000000020101513102710000165100ustar00rootroot00000000000000image: debian:trixie-slim build: script: | set -x apt-get update -o Acquire::AllowReleaseInfoChange=true -o quiet::ReleaseInfoChange=true apt-get --no-install-recommends --yes install make clang-format black shfmt shellcheck libglib2.0-bin help2man imagemagick build-essential pkgconf libevdev-dev libudev-dev libxkbcommon-dev libplymouth-dev make lint make test # make sure all files get installed make DESTDIR=prefix install diff -u <(find -type f -and -not -path '\./CHANGELOG.md' -and -not -path '\./lpc/*' -and -not -path ./Makefile -and -not -path ./LICENSE.txt -and -not -path ./README.md -and -not -path ./.gitlab-ci.yml -and -not -path '\./\.git/*' -and -not -path '\./prefix/*' -and -not -path '\./plymouth/monobar\.c' -and -not -path '\./\.mailmap' -and -not -path '\./\.gitignore' -and -not -name '\.clang-format' -print0 | xargs -0 md5sum | sort | sed 's/\.\?\/.*\///') <(env --chdir ./prefix find -type f -print0 | xargs -0 env --chdir ./prefix md5sum | sort | sed 's/\.\?\/.*\///') reform-tools-1.83/.mailmap000066400000000000000000000002531513102710000155040ustar00rootroot00000000000000Lucie L. Hartmann Johannes Schauer Marin Rodrigues Johannes Schauer Marin Rodrigues reform-tools-1.83/CHANGELOG.md000066400000000000000000001134531513102710000157030ustar00rootroot000000000000001.83 (2026-01-12) ================= * Add support for QUASAR QCS6490 and QCS8550 * machines: - LS1028A: update to 2025-12-24 with new offset at 1048576 - RK3588, A311D, i.mx8mq, i.mx8m+: update to 2026-01-11 with 512 byte alignment * Add plymouth.ignore-serial-consoles to bootargs * audio/ucm2.conf.d: enable microphone in profile for rk3588 pocket/next * bin/{pocket-,}reform-handbook: make handbook package optional by printing an error if it's not installed * bin/reform-chat: allow to specify a nickname * bin/reform-check: - apt-get indextargets can output multiple entries for the reform repository: one for each configured architecture - check for leftovers of reform-setup-wizard: /etc/profile.d/reform-setup.sh - check if reform-branding is installed - check if /sys/class/power_supply/BAT0 exists and has the right symlink - emmc-bootstrap},libexec/reform-tools/reform-power-daemon: run jq with --raw-output to prevent extra quotes from being added to string output - fix missing double quote in suggested 00reform2_tuigreet_loglevel - lpc firmware check also works on pocket reform - LS1028A also uses /sys/bus/spi/drivers/reform2_lpc/spi0.0 - parse the new u-boot version format - print a warning if 'single' is in the kernel cmdline - print error if dtb is zero bytes long - print reason why header packages are needed - remove redundant text on imx8mq - test /boot/boot.scr for syntax errors if shellcheck is installed - warn if header files do not exist in /usr/lib/modules/$(uname -r)/build/include * bin/reform-flash-uboot: - add --dry-run - add --verbose - allow a dot in the machine name (i.mx8m+ has one) - also abort flashing if u-boot would override GUID partition table (like a311d u-boot does because it starts at 512 bytes) - clarify error message when trying to write u-boot for a platform that cannot boot from sd-card to an sd-card - prefix messages with I: and E: - verify what got written using cmp and sha1sum - only write as many zeroes as u-boot is large - warn that u-boot >= 2026-01-11 prefers nvme over emmc * libexec/reform-tools/reform-power-daemon: - test if hid device exists before redirecting into it - silence grep output * etc/profile.d: - export variables instead of just setting them - scripts are sourced and do not need to have execute permissions * kernel/zz-reform-tools: - fail if dtb required for the running machine was not found - respect /usr/lib/modules/$version/dtb as the new default for dtbs - Run find with -H because /usr/lib/linux-image-$version might be a symlink * examples/keyboard_rainbow.py: - make setproctitle optional - print error messages when device cannot be opened for writing - use /dev/input/by-id/*-hidraw symlinks to discover correct hidraw device * Makefile: install /etc/profile.d/reform-mali.sh * Stop installing /usr/share/xdg-terminal-exec/sway-xdg-terminals.list * Add .gitignore * Add .mailmap 1.82 (2025-11-18) ================= * add reform-power-daemon * add monobar plymouth theme * etc/profile.d/reform-mali.sh: set PAN_MESA_DEBUG=gl3 1.81 (2025-11-04) ================= * add reform-waybar-icon-wedge * modernize reform-tray.py * add xdg-terminal-exec/sway-xdg-terminals.list * bin/reform-hw-setup: remove rk3588 ethernet hack * bin/reform-flash-uboot: better error message if /boot/flash.bin does not exist * machines/MNT * with RCORE RK3588 Module.conf: update to u-boot 2025-11-04 1.80 (2025-11-03) ================= * bin/reform-flash-rescue: - regenerate filesystem UUIDs - only run reform-flash-uboot if u-boot is written to the boot0 partition * bin/reform-check: - indicate whether the space that would've been occupied by u-boot is all zeroes - test if cpu features are missing on RK3588 * bin/reform-setup-encrypted-disk: run rsync with --no-inc-recursive to have a useful progress meter * bin/reform-flash-uboot: - add --zero option to delete u-boot - add --machine option to override the contents of /proc/device-tree/model * revert pipewire{-pulse,} systemd service and socket override * schemas/20_reform.gschema.override: - move screen-brightness-{up,down} from to org.gnome.shell.keybindings - fix altgr for gnome - select useful default apps for the gnome dock - don't attach modal windows * lpc/reform2_lpc.c: pad with zeroes * add examples/keyboard_rainbow.py 1.79 (2025-09-25) ================= * bin/reform-check: - /boot can be on emmc or sd-card even if u-boot cannot - also warn about outdated u-boot on platforms where updating it is not without risk - when checking u-boot version, respect DEV_MMC_BOOT0 setting - retrieve latest pocket reform system controller firmware version - print installed u-boot version and latest u-boot version if it differs - print version of classic reform lpc firmware * reform-mcu-tool: - add list --json for stable JSON output - add support for MNT Reform Next system controller * reform2_lpc: - don't report EBUSY on clipped values; allow reporting negative current - negate dis/charging current sign * initramfs-tools/hooks/reform-plymouth: - copy Inter-Medium font into ramdisk - do not act if plymouth-set-default-theme is not available * add pipewire{-pulse,} systemd service and socket override * wireplumber: lower hdmi audio priority * /etc/profile.d/reform-kwin.sh: KWIN_FORCE_SW_CURSOR=1 1.78 (2025-08-30) ================= * reform-mcu-tool: - handle non-root better - drop leftover debug print - handle usb1 missing better - send errors to stderr * bin/reform-check: - fix copypaste error HAVE_BOOTSCR=yes -> HAVE_EXTLINUX=yes - remove errornous .conf suffix in comparison * bin/reform-hw-setup: select soundcard by name, not by number * bin/reform-setup-encrypted-disk: disallow empty passphrase * Add reform-y2k plymouth theme based on the two-step module * bin/reform-flash-rescue: add --force argument for unattended operation 1.77 (2025-08-27) ================= * bin/reform-mcu-tool: read Version from DS20 quirk data * bin/reform-check: - demote missing depends from 'W:' to 'I:' - print version of the system image that the system was installed from - try to infer how the system was booted - add additional platforms on which /etc/flash-kernel/machine is not needed - suggest to remove reform-qcacld2 if not on the i.mx8m+ - print version of system controller and keyboard firmware on the pocket - reform-help was never removed from /etc/skel/profile * bin/reform-hw-setup: select soundcard by name, not by number * reform2_lpc.c: switch from of_node to fwnode in 6.17 or later 1.76 (2025-07-19) ================= * disable gnome fractional scaling by default * ucm2 profiles: - fix alsa ucm2 profile paths - main speaker switch needs to be on for headphones * bin/reform-check: - move 'apt-cache policy' calls to the end as they do not work with --offline - check for the correct contents of /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel 1.75 (2025-07-01) ================= * add alsa ucm2 profile for rk3588 pocket reform and next * lpc: use correct kernel api for poweroff * add bin/pocket-reform-handbook 1.74 (2025-06-12) ================= * no longer set loglevel=3 now that tuigreet is no longer the default * lpc: - bump speed by 10x - simplify error handling - add uart command support - detect api version - clamp gauge to 6%-100% to prevent upower actions 1.73 (2025-05-28) ================= * kernel/zz-reform-tools: always print something to STDERR * bin/reform-hw-setup: Fix gpioset in LS1028a section * bin/reform-check: - fix --mirror auto-detection - add support for trixie - diff gsettings configuration * reform-help: exchange wayfire for GNOME * new background image mnt-reform-next-y2k.jpg * gnome and gdm customization via gschema overrides and dconf * u-boot-menu/reform.conf: disable u-boot-menu selection 1.72 (2025-05-07) ================= * machines/MNT * with RCORE RK3588 Module.conf: update to u-boot 2025-05-06 * machines: add file for reform2 rk3588 variant with dsi display * bin/reform-check: use apt-cache instead of dpkg-query * bin/reform-hw-setup & initramfs-tools/hooks/reform: add MNT Reform 2 with RCORE-DSI RK3588 Module 1.71 (2025-04-11) ================= * `bin/reform-boot-config`: - use `lsblk` to check whether partition is a LUKS device - check whether block device exists before mounting - print what is still mounted on `/boot` - print the name of the platform instead of calling everything 'MNT Reform' - use old fstab entry to decide where the old `/boot` was mounted from instead of `findmnt` output - add `--no-copy-old-boot` switch for `reform-flash-rescue` * `bin/reform-check`: - check meta-packages instead of carrying a long list of dependencies - small cosmetic fixes * `bin/reform-flash-rescue`: - use `--keyring` and `--fingerprint` for `bmaptool` when copying from reform.debian.net - add `--mirror` argument * `bin/reform-emmc-bootstrap`: use `lsblk` to check whether partition is a LUKS device 1.70 (2025-04-05) ================= * `bin/reform-boot-config`: - set `EMMC` variable default to `false` - create a partition table on the device with future `/boot` if partition does not exist yet - if `/boot` is still mounted somewhere, output what the mountpoint is - do not suggest to reboot if the current system is running from SD-card and configured `/boot` on `eMMC` - explain what the script is not able to do and refer to `reform-emmc-bootstrap` - try to open a LUKS device if there are no partitions on the SSD - more annotations whether a device is the SD-card or eMMC - print extra warning for imx8mq - make `lsblk` failures non-fatal (ignore if the block device does not exist) * `bin/reform-check`: - do not print version of `linux-image-mnt-reform-arm64` if it is not installed - print an error if `linux-image-mnt-reform-arm64` and/or `linux-headers-mnt-reform-arm64` are not installed - print an error if `reform-qcacld2` is not installed with the mntre.com mirror or installed with the reform.debian.net mirror - explain what the effect of `reform2_lpc` not being loaded is - suggest fixing an outdated line in `~/.profile` which attempts to cat `/etc/reform-root-help` or `/etc/reform-help` * `bin/reform-emmc-bootstrap`: - error out if root partition does not have `/dev`, `/sys` or `/proc` - print out where the root filesystem was assumed to be located * `bin/reform-setup-encrypted-disk`: add device short-hands `sd`, `ssd`, `emmc` and `usb` * `bin/reform-setup-encrypted-nvme`: print migration to `reform-setup-encrypted-disk` in all cases * `lpc/reform2_lpc.c`: provide `POWER_SUPPLY_PROP_PRESENT` with a constant value of `1` * `bin/reform-help`: add `reform-migrate`, `reform-flash-uboot`, `reform-emmc-bootstrap` and `reform-flash-rescue` 1.69 (2025-03-10) ================= * Add SPDX license information * Add `README.md` * move all tools from `/usr/sbin` to `/usr/bin` * rename `reform-setup-encrypted-nvme` -> `reform-setup-encrypted-disk` * `bin/reform-setup-encrypted-disk`: - allow setting up eMMC or SD-card with LUKS - `-h` does not take arguments - move superuser check above check for installed commands - support `EMMC_USE=warn` * `bin/reform-migrate`: - device agnostic `--help` output - use getopts for command line parsing - support `EMMC_USE=warn` * `bin/reform-boot-config`: - device agnostic `--help` output - support `EMMC_USE=warn` * `bin/reform-flash-uboot`: - new `--image` option for custom flash.bin - device agnostic `--help` output - proper cli parsing with getopts - allow flashing to devices other than SD or eMMC * `bin/reform-emmc-bootstrap`: - print unknown option for any option other than --help - expect rootfs mountpoint to be `/dev/reformvg/root` instead of `/dev/mapper/reformvg-root` - do not attempt re-mounting root partition if it's already mounted as `/` - check if partition is in use before mounting it - `/dev/sda` partitions are `sda1` and `sda2` and not `sdap1` and `sdap2` - do not run `reform-flash-uboot` with `--force` - create a second partition on eMMC as expected by `reform-check` * `bin/reform-check`: - replace `ntp`,`ntpdate` with `ntpsec`,`ntpsec-ntpdate` - add `--offline` switch * `bin/reform-display-config`: - drop workaround for #1091979 in favour of patching u-boot-menu * `bin/reform-flash-rescue`: - support `EMMC_USE=warn` * `machines/MNT Reform 2.conf`: add cryptomgr.notests loglevel=3 * `machines/MNT * with BPI-CM4 Module.conf`: set EMMC_USE=warn * `Makefile`: - install man pages - install systemd service files 1.68 (2025-02-18) ================= * bin/reform-check: make output more verbose * lpc/reform2_lpc.c: support linux 6.13 * sbin/reform-setup-encrypted-nvme: fix manually passing path to /dev/nvme0n1 1.67 (2025-02-12) ================= * run `lsblk` with `--nodeps` where appropriate * `machines/MNT Pocket Reform with RCORE RK3588 Module.conf`: update `BOOTARGS` with `fbcon=font:TER16x32` * `sbin/reform-boot-config`: - delete the contents of the old `/boot` - add `--force` option to proceed without user interaction * `sbin/reform-setup-encrypted-nvme`: add `--force` option to run `reform-migrate` and put `/boot` on eMMC if allowed * `sbin/reform-display-config`: always write out `/etc/u-boot-menu/conf.d/reform.conf` * `bin/reform-check`: - be more verbose in error messages - make sure that `/etc/u-boot-menu/conf.d/reform.conf` exists with the right contents 1.66 (2025-02-03) ================= * Replace remaining uses of blkid by lsblk. Thanks to Chris Hofstaedtler * machines/* with i.MX8MP Module.conf: update to u-boot 2025-01-12 * Makefile: install files in /usr/sbin with 755 * sbin/reform-emmc-bootstrap: only run reform-flash-uboot if EMMC_BOOT != false * sbin/reform-emmc-bootstrap: - allow execution when actual root is on nvme - ensure emmc is not being used 1.65 (2025-01-11) ================= * machines/* with BPI-CM4 Module.conf: update u-boot to 2024-12-23 * add reform-emmc-bootstrap * sbin/reform-flash-uboot: - restore support for --offline switch - instead of finding the end of the first free space, find the beginning of the first partition - add --force * sbin/reform-boot-config: - reset MOUNTROOT after umounting, so that the right partition gets mounted afterward - make sure that OLDMOUNTBOOT actually is a mount point as a sanity check - run mountpoint with --quiet - do not update, but create the initramfs * sbin/reform-setup-encrypted-nvme: fix incorrectly placed double quote * install usr/lib/sddm/sddm.conf.d/10-wayland.conf to make sddm use wayland by default instead of Xorg * add x-initrd.attach to /etc/crypttab * move 99-reform.rules -> 99-reform-audio.rules * imx8mq: replace writing 'enabled' to /sys path in reform-hw-setup and reform-standby by udev rule * Makefile: - let help2man error out in case of problems - expect all tools to start with reform- prefix * reform-mcu-tool: allow USBErrorPipe on reset 1.64 (2024-12-06) ================= * add Makefile * add CHANGELOG.md * sbin/reform-flash-uboot: do not download anything if flash.bin is up-to-date * bin/reform-check: - synchronize with reform-system-image:mkimage.sh - warn about reform-qcacld2 on bookworm - improve modprobe.d/reform.conf wording * bin/reform-compstat: use read_time instead of read_bytes to determine disk activity percent * make everything shellcheck-clean * reform-flash-uboot: require using shorthands * add dracut/20-pocket-reform.conf * reform2_lpc: add backlight support for pocket reform display v2 * reform2_lpc: convert camelCase to conform to kernel coding style 1.63 (2024-11-20) ================= * kernel/zz-reform-tools: turn error messages into warnings, they are not fatal * machines/* with RCORE RK3588 Module.conf: set EMMC_BOOT=warn * sbin/reform-flash-uboot: add support for rk3588 eMMC which is not using the boot0 partition for u-boot * bin/reform-compstat: - add copyright header - add --percpu - use four six-per-em space U+2006 characters to create an empty box - let 98% CPU utilization already print the full bar * Add reform-mcu-tool 1.62 (2024-11-18) ================= * lpc/reform2_lpc.c: fixup ifdef 1.61 (2024-11-14) ================= * sbin/reform-hw-setup: print error if gpiod is too old * new script: reform-handbook * machines/* with RCORE RK3588 Module.conf: update u-boot to 2024-11-13b * machines/* with i.MX8MP Module.conf: update u-boot to 2024-11-14 * lpc/reform2_lpc.c: add abs_diff implementation for linux (<< 6.6) 1.60 (2024-11-06) ================= * machines: make EMMC_BOOT a tri-state option * move MNT icon font to reform-branding package * Add postinst script to set font on upgrade * Do not set hardcoded terminal font 1.59 (2024-10-30) ================= * debian/reform-tools.postinst: do not remove the world-readable bit from files in /etc/skel. The bash package also installs files into /etc/skel with mode 644 1.58 (2024-10-30) ================= * bin/reform-check: add more checks for wrong permissions in /etc * Revert "initramfs: Load font early on Pocket Reform" * Clean up old /etc/modprobe.d/reform.conf conffile 1.57 (2024-10-29) ================= * fix permission 666 -> 644 for reform apt sources.list files * machines/* with RCORE RK3588 Module.conf: set EMMC_USE=true because even when u-boot was borked, rk3588 will prefer u-boot from sd-card if present * bin/reform-check: check for wrong permissions of apt sources.list * sbin/reform-{boot-config,migrate}: check if $BOOTPART exists before starting to operate 1.56 (2024-10-24) ================= * reform-hw-setup: add eth reset workaround and audio setup for rk3588 1.55 (2024-10-11) ================= * reform2_lpc: Run through clang-format using the Linux config * reform2_lpc: Set battery technology to Unknown * reform2_lpc: Detect battery reading glitches * reformat shell scripts with shfmt * machines/*RK3588 Module.conf: update to 2024-10-11b 1.54 (2024-10-08) ================= * bump rk3588 u-boot to 2024-10-08 * add missing dependency of reform-wallpaper as Recommends * initramfs: Load font early on Pocket Reform * reform-hw-setup: fixup a311d ethernet re-probing 1.53 (2024-09-06) ================= * sbin/reform-flash-uboot: fix functionality that running without arguments just updates /boot/flash.bin * kernel/zz-reform-tools: - make sure /usr/lib/linux-image-* exists - print error if there was no dtb found - print warning for irregular dtb paths * install /usr/share/glib-2.0/schemas/20_reform.gschema.override setting the default theme and font * add libexec/reform-tools/reform-wallpaper.py 1.52 (2024-08-22) ================= * sbin/reform-hw-setup: do not run init_qca9377_wifi if qcacld2 is already loaded * sbin/reform-hw-setup: run insmod with -f or otherwise it will fail with 'Invalid module format' even if the version is correct 1.51 (2024-08-22) ================= * kernel/zz-reform-tools: fix variable name mode -> action * sbin/reform-hw-setup: make init_qca9377_wifi failing non-fatal 1.50 (2024-08-22) ================= * Add Recommends on bmap-tools * machines/MNT * with RCORE RK3588 Module.conf: bump u-boot version * add /usr/share/kernel/postinst.d/zz-reform-tools * sbin/reform-flash-uboot (Thanks to deianara) - fix typo MMC_BOOT -> EMMC_BOOT. - run parted with --script. * sbin/reform-display-config: support for u-boot-menu * sbin/reform-hw-setup: - run with set -e - prefix messages with type indicator - add support for pocket reform and reform next with rk3588 * sbin/reform-hw-setup: Change how the qcacld2 driver is loaded. Try to load exact match otherwise try every other available option 1.49 (2024-08-09) ================= * initramfs-tools/hooks/reform: add rk3588 for next and pocket * add machines/MNT Pocket Reform with RCORE RK3588 Module.conf * reform-check: stop warning about missing policykit-1 * reform-check: stop warning about missing /etc/modprobe.d/reform.conf 1.48 (2024-08-07) ================= * sbin/reform-flash-uboot: allow flashing to emmc on platforms with SD_BOOT set to false * disallow flashing u-boot to emmc on i.MX8MP to avoid accidentally soft-bricking it * The u-boot offset for i.MX8MP is zero bytes * remove reform-synaptic * add .gitlab-ci.yml 1.47 (2024-08-02) ================= * stop shipping files in /etc * move modprobe.d/reform.conf from /etc to /usr/lib * bin/reform-check: - fix deprecated kernel detection - respect xz-compressed dkms kernel modules * add machine/*.conf files for RCORE RK3588 1.46 (2024-08-01) ================= * add --help output and man pages for all tools * replace Iosevka Term font with JetBrains Mono Regular * Stop shipping the following files: - /etc/reform-help - /etc/reform-desktop-help - /etc/reform-root-help - /sbin/reform-init - /usr/bin/reform-desktop-help * machines/MNT Reform 2.conf: update to u-boot 2024-07-19 * machines/MNT * with BPI-CM4 Module.conf: u-boot 2024-08-01 (nvme support) * instead of explicitly running foot, run x-terminal-emulator which defaults to foot in the system images. Change the default terminal by running $ sudo update-alternatives --config x-terminal-emulator * bin/reform-check: - download uboot with dtbpath prefix - do not fail script if u-boot cannot be downloaded - allow --mirror=reform.debian.net - fix FLASHBIN_OFFSET computation - update package list * bin/reform-compstat: format with black * bin/reform-help: point out that reform-display-config is only for imx8mq * sbin/reform-flash-rescue - use bmaptool if available - resize root partition to fill remaining space on emmc * sbin/reform-boot-config: do not offer unmounting /boot twice * flash-kernel: put markers around preboot.d and ubootenv.d snippets * only inform about the dip-switch position on imx8mq * systemd/*.service: add Documentation field * add "sudo" to root commands in reform-help * Rename battery under /sys from 8xlifepo4 to BAT0 1.45 (2024-06-30) ================= * reform-hw-setup: a311d: rebind wifi sdio after booting to make sure it works * a311d: disable wifi powersaving to make wifi more reliable * sbin/reform-boot-config: add missing space * place default-wifi-powersave-off.conf into /usr/lib/NetworkManager/conf.d/ * machines/*.conf: update u-boot tags and hashes for reform with imx8mq, a311d and ls1028a * sbin/reform-flash-uboot: download flash.bin by dtb basename 1.44 (2024-06-10) ================= * imx8mp: add missing initramfs drivers; fixes display, pcie and usb in initramfs * sbin/reform-setup-encrypted-nvme: make /boot on eMMC the default for reform-boot-config * sbin/reform-boot-config: allow interactive umount * initramfs-tools/scripts/reform: run 'dmesg -n 7' in the initramfs on ls1028 as workaround for dwc3 unreliability * sbin/reform-setup-encrypted-nvme: if reform-boot-config fails, print steps how to re-run it 1.43 (2024-06-03) ================= * reform-check: adjustments for new kernel flavour mnt-reform-arm64 in 6.8 * machines: on imx8mp, mmc is mmcblk2 and sd is mmcblk0 * sbin/reform-hw-setup: adjust for different /sys path in linux 6.8 * sbin/reform-hw-setup: add loglevel=7 workaround for dwc3 module on ls1028a 1.42 (2024-05-07) ================= * reform-setup-cleanup.sh and reform-setup-sway-config are now shipped by reform-setup-wizard * imx8mp machines: add u-boot sha1 and tag * machines: add BOOTARGS * reform-check: check for abnormalities in kernel cmdline 1.41 (2024-05-06) ================= * etc/profile.d/reform.sh: remove harmful QT_QPA_PLATFORM=wayland and outdated ETNA_MESA_DEBUG=nir 1.40 (2024-04-17) ================= * wayfire: allow brightness ctrl also by super+f1/f2 1.39 (2024-04-16) ================= * sbin/reform-flash-uboot: fixup MMCDEV -> DEV_MMC * bin/reform-check: print additional information about the current system * machines/*: introduce SD_BOOT which is false on i.MX8MP * reform-hw-setup: add loader for qca9377 wifi on imx8mp platforms * firefox syspref.js: remove ads on new tab page * modprobe: block ath10k_sdio for imx8mp * reform-tray: include reform-help in reform-desktop-help * reform-hw-setup: add audio init for pocket reform 1.38 (2024-03-24) ================= * libexec/reform-tools/reform-tray.py: make GUI utilities optional * bin/reform-check: more reform2_lpc.ko and linux-headers package check * sway+wayfire: properly rotate and scale the pocket reform display * sway+wayfire: use hyper f1/f2 for brightness, use percentages, use 10% steps * refactor reform-hw-setup a bit and set big console font on pocket reform 1.37 (2024-03-20) ================= * install /usr/share/reform-setup-wizard/cleanup.d/reform-setup-cleanup.sh * install /usr/share/reform-setup-wizard/reform-setup-sway-config 1.36 (2024-03-19) ================= * reform-tray: update icon to view-more-symbolic (3 dots) * waybar: add mnt logo, add tooltip and instructions for launcher, fix battery icons * reform-tray: change icon, reorder menu to be more logical, open handbook on 'Help' * sbin/reform-hw-setup: do not run with set -e 1.35 (2024-03-19) ================= * Add support for four new setups: - MNT Pocket Reform with i.MX8MP Module - MNT Pocket Reform with BPI-CM4 Module - MNT Reform 2 with i.MX8MP Module - MNT Reform 2 with RCORE RK3588 Module * bin/reform-check: check if reform2_lpc is loaded * bin/reform-check: check whether dtb and symlinks to it are set up correctly * bin/reform-check: instruct to run 'apt update' first * sbin/reform-boot-config: do not fail if /boot is not mounted * sbin/reform-boot-config: make --help output dependent on the platform * sbin/reform-flash-uboot: forbid flashing u-boot to emmc on A311D and LS1028A * sbin/reform-migrate: give approximate numbers that have to be copied * initramfs-tools/hooks/reform: warn instead of error if platform unknown * initramfs-tools/scripts/reform: disable manual modprobing * flash-kernel/ubootenv.d/00reform2_ubootenv, u-boot-menu/reform.conf: set loglevel=3 * remove X11 settings for etnaviv -- this removes /etc/X11/xorg.conf as well as /usr/share/X11/xorg.conf.d/10-reform-etnaviv.conf 1.34 (2024-01-02) ================= * etc/skel/.config/sway/config: replace dmps on/off with brightnessctl --save and brightnessctl --restore * reform-hw-setup: add comment explaining a311d amixer settings * reform-boot-config: fix /boot message for a311d * reform-boot-config: allow unmount /boot after prompt if current system is rescue sd-card * reform-boot-config: remove the rescue system disk label if necessary * reform-flash-uboot: inform about the DIP switch on imx8mq * reform-check: support for reform.debian.net * reform-flash-rescue: support for flashing reform.d.n images to emmc * stop installing /usr/lib/systemd/system-shutdown/reform-poweroff now that the reform-lpc module does the right thing * use symlinks to install systemd services to let dh_installsystemd choose whether to install into /lib or into /usr/lib * etc/reform-help: instruct to run reform-config with sudo * lpc/reform2_lpc.c: send poweroff * skel: fix qt5 icon theme and dialogs for KDE * skel: prevent autostarting of waybar, blueman, pasystray, lxpolkit in non-wlroots DEs * skel: don't set QT_QPA_PLATFORMTHEME as it interferes with KDE * skel: set adwaita cursor theme for gtk apps in sway and wayfire 1.33 (2023-10-16) ================= * bin/reform-check: support skipping the first X bytes of flash.bin when comparing * add multiplatform support in sysimage-v4 * move remaining scripts from bash to posix shell * sbin/reform-setup-encrypted-nvme: compute swap space depending on total memory * update to latest u-boot 2023-10-10 on all platforms * set cma=512M on imx and cma=512M@3G on ls1028a 1.32 (2023-10-10) ================= * do not restart reform-sleep.service on upgrades * sbin/reform-standby: make 'Device or resource busy' and 'No such device' non-fatal * run wrap-and-sort -astb * update to u-boot 2023-10-10 * sbin/reform-flash-uboot: skip checks on disks without a partition table * install /usr/share/u-boot-menu/conf.d/reform.conf respecting ${bootargs} 1.31 (2023-10-04) ================= * bin/reform-check: - warn about /etc/flash-kernel/preboot.d/00reform2_preboot and /etc/flash-kernel/ubootenv.d/00reform2_ubootenv - allow /etc/flash-kernel/machine to not exist on platforms other than imx8mq - update default content of /etc/default/flash-kernel - update list of packages from sysimage-v4 - make checking for latest u-boot platform dependant - warn about missing non-free-firmware on a311d * flash-kernel/ubootenv.d/00reform2_ubootenv: - respect ${bootargs} again - put console=tty1 at the end of the cmdline to make sure that luks passphrase prompt shows up there and not on the serial line * stop installing /usr/share/u-boot-menu/conf.d/reform.conf as it does not allow for platform specific settings -- use /etc/default/u-boot instead 1.30 (2023-09-28) ================= * reform-hw-setup: a311d: reload ethernet modules to complete phy reset * Update 00reform2_ubootenv * reform-tray: add missing dependencies, change reboot/poweroff to systemctl * flash-kernel/uboot: add missing reform board variant 1.29 (2023-09-24) ================= * flash-kernel/ubootenv.d/00reform2_ubootenv: set bootargs for each platform 1.28 (2023-09-23) ================= * initramfs-tools/hooks/reform: also support 'MNT Reform 2 HDMI' * flash-kernel: first stab at setting cpu specific kernel command lines in ubootenv * initramfs-tools: add missing modules for ls1028a display * reform-hw-setup: add LS1028A usb workaround and default scaling_governor 1.27 (2023-09-21) ================= * copy /boot/ls1028a-mhdpfw.bin into initramfs * sbin/reform-flash-rescue: check all partitions of /dev/mmcblk0 * let reform-tools activate update-initramfs and flash-kernel triggers * sbin/reform-migrate: check whether partition for /boot is mounted before proceeding 1.26 (2023-09-11) ================= * sbin/reform-flash-rescue: change disk labels after dd 1.25 (2023-07-12) ================= * updates for sysimage-v4 - switch default sway terminal to foot and include a nice foot config - sway: modernize config, switch to wofi - update reform-help - update waybar config - add wallpaper - add default wayfire.ini - update reform-flash-rescue's image download URL - update reform-desktop-help content - skel: add configs for gtk3, qt5ct, dunst * let imx8mq specific tools exit early on the wrong platform * add a311d support to reform-hw-setup * install /usr/share/initramfs-tools/modules.d/reform.conf replacing /etc/initramfs-tools/modules * new script: reform-synaptic * add dependency on parted needed by reform-flash-uboot * add Protected: yes to make it really hard to remove * add --help option to reform-flash-uboot 1.24 (2023-07-11) ================= * sbin/reform-flash-uboot: adjust checksum for u-boot 2023-07-04 1.23 (2023-06-13) ================= * reform2-lpc-dkms: add missing header for linux 6.4 1.22 (2023-07-04) ================= * bump uboot version to 2023-07-04 1.21 (2023-05-30) ================= * reform-check: check for old /etc/flash-kernel/preboot.d/00reform2_preboot overwriting /usr/share/flash-kernel/preboot.d/00reform2_preboot 1.20 (2023-04-08) ================= * add reform-flash-uboot 1.19 (2023-02-18) ================= * reform2-lpc-dkms.dkms: AUTOINSTALL="yes" 1.18 (2023-01-27) ================= * install /usr/share/u-boot-menu/conf.d/reform.conf 1.17 (2023-01-27) ================= * bump uboot version to 2023-01-25 1.16 (2022-12-18) ================= * add reform-check utility * etc/profile.d/reform.sh: remove call to unicode_start as its functionality is provided automatically by console-setup * etc/motd-rescue: adjust message to not specifically talk about eMMC, SDcard or NVMe anymore * etc/motd: use reform-tools date in message * etc/profile.d/reform.sh: export MOZ_ENABLE_WAYLAND and _JAVA_AWT_WM_NONREPARENTING * sbin/reform-flash-rescue: check all mmcblk0 partitions in a loop before proceeding * sbin/reform-migrate: expand usage message * sbin/reform-setup-encrypted-nvme: mount to tmpdir instead of /mnt * sbin/reform-migrate: mount to tmpdir instead of /mnt 1.15 (2022-12-03) ================= * rework reform-boot-config - support all combinations of: * new root partition is already monted as / * new root partition lives elsewhere * new /boot partition is the same as the already configured one * new /boot is already mounted * new /boot device doesn't exist - error out if anything is still mounted that shouldn't be mounted - only mount when necessary - only use chroot if new root device is not / - use traps to always unmount everything and clean tmpfiles upon failure - consult /etc/fstab of new root for location of old /boot - copy over contents of old /boot to new one if necessary 1.14 (2022-11-06) ================= * Disable the raid456 kernel module to prevent losing wm8960audio 1.13 (2022-11-06) ================= * install flash-kernel boot scripts to /usr/share instead of /etc * flash-kernel/preboot.d/00reform2_preboot: even if ${fdtfile} is set, use dtb-${fk_kvers} if it exists 1.12 (2022-10-12) ================= * install /usr/share/initramfs-tools/scripts/init-top/reform as a temporary workaround to mxsfb producing a blank screen on roughly 50% of boots 1.11 (2022-09-13) ================= * reform-{boot-config,setup-encrypted-nvme}: add more cleanup code to exit traps and be verbose about script failure * reform-boot-config: allow messing up the currently running system by using an interactive prompt 1.10 (2022-09-12) ================= * add reform2-lpc-dkms package with the reform2_lpc module 1.9 (2022-09-07) ================ * install /usr/share/X11/xorg.conf.d/10-reform-etnaviv.conf 1.8 (2022-07-09) ================ * etc/skel/.config/mpv/mpv.conf: set maximum resolution of ytdl to 1080p * sway: fix KDE cursor appearing in sway * sbin/reform-{flash-rescue,boot-config,migrate,display-config, setup-encrypted-nvme}: check if devices are in use before proceeding * sbin/reform-boot-config: allow passing the device name explicitly * sbin/reform-migrate: add --emmc option * sbin/reform-{boot-config,display-config,migrate}: inform about the DIP switch if --emmc option is used * sbin/reform-setup-encrypted-nvme: replicate what reform-migrate does to avoid modifying the currently running system and ask whether /boot should be on emmc or sd-card * sbin/reform-{boot,display}-config: output meaningful error if /dev/mmcblk0p1 is missing * sbin/reform-{boot,display}-config: inform about the DIP switch always * sbin/reform-{display-config,migrate,setup-encrypted-nvme}: umount in a shell trap 1.7 (2022-06-17) ================ * sbin/reform-flash-rescue: download from main branch instead of old sysimage-v3 1.6 (2022-06-08) ================ * add etc/skel/.local/bin/kde for KDE Plasma desktop with wayland 1.5 (2022-04-22) ================ * sbin/reform-boot-config: add option to boot with rootfs on eMMC and document ROOTPART envvar * sbin/reform-flash-rescue: extend from one-liner to interactive flasher and downloader to eMMC 1.4 (2022-03-30) ================ * sbin/reform-migrate: reuse reform-boot-config to reduce code duplication * sbin/reform-setup-encrypted-nvme: use same crypttab options as debian-installer * sbin/reform-setup-encrypted-nvme: offer to run write resume, crypttab and fstab and run reform-migrate * sbin/reform-boot-config,reform-migrate: do not overwrite swap settings * sbin/reform-display-config: use findmnt instead of grepping mount output * sbin/reform-boot-config: allow operating on rootfs other than the currently running one * sbin/reform-migrate: use here-document to prevent globbing and word splitting of $TARGET * sbin/reform-migrate: prefixing with x is no longer necessary since bash 2.0 released in 1996 * sbin/reform-migrate: abort early if something is mounted on /mnt already * sbin/reform-migrate: add instructions how to partition NVMe 1.3 (2022-03-30) ================ * waybar/config: pass arguments to reform-compstat * remove reform-connman-gtk 1.2 (2022-02-20) ================ * rename etc/motd -> etc/motd-full to avoid conflict with existing /etc/motd * reform-hw-setup: some bits got lost when moving from reform-system-image to reform-tools * choose our pulse profile set when udev finds wm8960audio * enable systemd services after installation * fixup scripts to work with sysimage-v3 1.1 (2022-02-20) ================ * Initial release for sysimage-v3 reform-tools-1.83/LICENSE.txt000066400000000000000000001045151513102710000157140ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . reform-tools-1.83/Makefile000066400000000000000000000247211513102710000155310ustar00rootroot00000000000000#!/usr/bin/make -f # SPDX-License-Identifier: GPL-3.0+ # Copyright 2024-2025 Johannes Schauer Marin Rodrigues SHELL = /bin/sh INSTALL = /usr/bin/install INSTALLDATA = /usr/bin/install -m 644 prefix = /usr datadir = $(prefix)/share bindir = $(prefix)/bin libexecdir = $(prefix)/libexec libdir = $(prefix)/lib libdirarch = $(prefix)/lib/$(shell $(CC) --print-multiarch) statedir = /var sysconfdir = /etc BINPROGS=$(wildcard bin/*) MAN1=$(patsubst bin/%,man/%.1,$(BINPROGS)) .PHONY: all all: $(MAN1) plymouth/background.png plymouth/monobar.so man/%.1: bin/% set -e; \ mkdir -p man; \ tool2whatis () { case $${1#reform-} in \ boot-config) echo "choose rootfs to boot from" ;; \ chat) echo "chat on #mnt-reform" ;; \ check) echo "check your setup" ;; \ compstat) echo "system statistics for waybar" ;; \ config) echo "select keyboard and timezone" ;; \ display-config) echo "select single/dual display" ;; \ emmc-bootstrap) echo "set up /boot on emmc for / on nvme" ;; \ flash-rescue) echo "flash rescue image to eMMC" ;; \ flash-uboot) echo "download and flash u-boot" ;; \ gnome-config) echo "apply default config to GNOME" ;; \ handbook) echo "show Reform Handbook" ;; \ pocket-reform-handbook) echo "show Pocket Reform Handbook" ;; \ help) echo "help with MNT Reform" ;; \ hw-setup) echo "perform hardware tweaks" ;; \ migrate) echo "copy rootfs to device" ;; \ mcu-tool) echo "manage microcontrollers" ;; \ pavucontrol) echo "kill and restart pavucontrol" ;; \ setup-encrypted-disk) echo "setup encrypted disk" ;; \ setup-encrypted-nvme) echo "use setup-encrypted-disk" ;; \ standby) echo "suspend/wakeup tweaks" ;; \ waybar-icon-wedge) echo "launch waybar with custom icon theme" ;; \ *) echo "unknown tool: $$1" 2>&1; exit 1 ;; \ esac; }; \ whatis="$$(tool2whatis "$*")"; \ version=$$(head -c4 CHANGELOG.md); \ case $$version in 1.[0-9][0-9]) : ;; *) echo invalid;exit 1;; esac; \ env "PATH=./bin:$$PATH" help2man \ --section=1 \ --name="$$whatis" \ --no-info --version-string="$$version" \ --no-discard-stderr "$*" \ --output="$@"; \ plymouth/monobar.so: plymouth/monobar.c $(CC) $< -o $@ $(CPPFLAGS) $(CFLAGS) $(shell pkgconf --cflags --libs ply-splash-core) -Wall -fPIC -pedantic -Wextra -std=c23 -shared $(LDFLAGS) plymouth/background.png: ./share/backgrounds/mnt-reform-next-y2k.jpg convert $< -resize 1920x1080 $@ .PHONY: install install: $(MAN1) plymouth/background.png plymouth/monobar.so $(INSTALL) -d $(DESTDIR)$(libdir)/NetworkManager/conf.d $(INSTALLDATA) -t $(DESTDIR)$(libdir)/NetworkManager/conf.d NetworkManager/default-wifi-powersave-off.conf $(INSTALL) -d $(DESTDIR)$(libdir)/udev/rules.d $(INSTALLDATA) -t $(DESTDIR)$(libdir)/udev/rules.d audio/99-reform-audio.rules $(INSTALLDATA) -t $(DESTDIR)$(libdir)/udev/rules.d udev/reform-ttymxc-wakeup.rules $(INSTALL) -d $(DESTDIR)$(datadir)/pulseaudio/alsa-mixer/paths $(INSTALLDATA) -t $(DESTDIR)$(datadir)/pulseaudio/alsa-mixer/paths audio/analog-input-reform.conf $(INSTALL) -d $(DESTDIR)$(statedir)/lib/alsa $(INSTALLDATA) -t $(DESTDIR)$(statedir)/lib/alsa audio/asound.state $(INSTALL) -d $(DESTDIR)$(datadir)/pulseaudio/alsa-mixer/profile-sets $(INSTALLDATA) -t $(DESTDIR)$(datadir)/pulseaudio/alsa-mixer/profile-sets audio/reform.conf $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) -t $(DESTDIR)$(bindir) $(BINPROGS) $(INSTALL) -d $(DESTDIR)$(datadir)/flash-kernel/preboot.d $(INSTALLDATA) -t $(DESTDIR)$(datadir)/flash-kernel/preboot.d flash-kernel/preboot.d/00reform2_preboot $(INSTALL) -d $(DESTDIR)$(datadir)/flash-kernel/ubootenv.d $(INSTALLDATA) -t $(DESTDIR)$(datadir)/flash-kernel/ubootenv.d flash-kernel/ubootenv.d/00reform2_ubootenv $(INSTALL) -d $(DESTDIR)$(datadir)/initramfs-tools/hooks $(INSTALL) -t $(DESTDIR)$(datadir)/initramfs-tools/hooks initramfs-tools/hooks/reform $(INSTALL) -t $(DESTDIR)$(datadir)/initramfs-tools/hooks initramfs-tools/hooks/reform-plymouth $(INSTALL) -d $(DESTDIR)$(datadir)/initramfs-tools/modules.d $(INSTALLDATA) -t $(DESTDIR)$(datadir)/initramfs-tools/modules.d initramfs-tools/reform.conf $(INSTALL) -d $(DESTDIR)$(datadir)/initramfs-tools/scripts/init-top $(INSTALL) -t $(DESTDIR)$(datadir)/initramfs-tools/scripts/init-top initramfs-tools/scripts/reform $(INSTALL) -d $(DESTDIR)$(datadir)/kernel/postinst.d $(INSTALL) -t $(DESTDIR)$(datadir)/kernel/postinst.d kernel/zz-reform-tools $(INSTALL) -d $(DESTDIR)$(libexecdir)/reform-tools $(INSTALL) -t $(DESTDIR)$(libexecdir)/reform-tools libexec/reform-tools/reform-tray.py $(INSTALL) -t $(DESTDIR)$(libexecdir)/reform-tools libexec/reform-tools/reform-wallpaper.py $(INSTALL) -t $(DESTDIR)$(libexecdir)/reform-tools libexec/reform-tools/reform-power-daemon $(INSTALL) -d $(DESTDIR)$(datadir)/reform-tools/machines $(INSTALLDATA) -t $(DESTDIR)$(datadir)/reform-tools/machines machines/* $(INSTALL) -d $(DESTDIR)$(libdir)/modprobe.d $(INSTALLDATA) -t $(DESTDIR)$(libdir)/modprobe.d modprobe.d/reform.conf $(INSTALL) -d $(DESTDIR)$(datadir)/glib-2.0/schemas $(INSTALLDATA) -t $(DESTDIR)$(datadir)/glib-2.0/schemas schemas/20_reform.gschema.override $(INSTALL) -d $(DESTDIR)$(datadir)/gdm/dconf $(INSTALLDATA) -t $(DESTDIR)$(datadir)/gdm/dconf share/gdm/dconf/95-mnt-reform-settings $(INSTALL) -d $(DESTDIR)$(datadir)/backgrounds $(INSTALLDATA) -t $(DESTDIR)$(datadir)/backgrounds share/backgrounds/reform-mountains.jpg $(INSTALLDATA) -t $(DESTDIR)$(datadir)/backgrounds share/backgrounds/mnt-reform-next-y2k.jpg $(INSTALL) -d $(DESTDIR)$(libdir)/systemd/sleep.conf.d $(INSTALLDATA) -t $(DESTDIR)$(libdir)/systemd/sleep.conf.d systemd/reform-sleep.conf $(INSTALL) -d $(DESTDIR)$(libdir)/systemd/system $(INSTALLDATA) -t $(DESTDIR)$(libdir)/systemd/system systemd/reform-hw-setup.service systemd/reform-sleep.service systemd/reform-power-daemon.service $(INSTALL) -d $(DESTDIR)$(datadir)/u-boot-menu/conf.d $(INSTALLDATA) -t $(DESTDIR)$(datadir)/u-boot-menu/conf.d u-boot-menu/reform.conf $(INSTALL) -d $(DESTDIR)$(libdir)/dracut/dracut.conf.d $(INSTALLDATA) -t $(DESTDIR)$(libdir)/dracut/dracut.conf.d dracut/20-pocket-reform.conf $(INSTALL) -d $(DESTDIR)$(libdir)/sddm/sddm.conf.d $(INSTALLDATA) -t $(DESTDIR)$(libdir)/sddm/sddm.conf.d sddm/10-wayland.conf $(INSTALL) -d $(DESTDIR)$(datadir)/man/man1 $(INSTALLDATA) -t $(DESTDIR)$(datadir)/man/man1 $(MAN1) $(INSTALL) -d $(DESTDIR)$(datadir)/alsa/ucm2/conf.d/rk3588-tlv320ai/ $(INSTALLDATA) -t $(DESTDIR)$(datadir)/alsa/ucm2/conf.d/rk3588-tlv320ai/ audio/ucm2.conf.d/rk3588-tlv320ai/rk3588-tlv320aic3100.conf $(INSTALLDATA) -t $(DESTDIR)$(datadir)/alsa/ucm2/conf.d/rk3588-tlv320ai/ audio/ucm2.conf.d/rk3588-tlv320ai/HiFi.conf $(INSTALL) -d $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k set -e; for f in bullet capslock entry keyboard keymap-render lock; do \ ln --force --symbolic --no-target-directory ../spinner/$${f}.png $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k/$${f}.png; \ done #$(INSTALLDATA) -t $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k/ "plymouth/$${f}.png"; set -e; for i in $$(seq 1 36); do \ filename=$$(printf "animation-%04d.png" "$$i"); \ ln --force --symbolic --no-target-directory ../spinner/$$filename $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k/$$filename; \ done #$(INSTALLDATA) -t $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k/ "plymouth/$$filename"; set -e; for i in $$(seq 1 30); do \ filename=$$(printf "throbber-%04d.png" "$$i"); \ ln --force --symbolic --no-target-directory ../spinner/$$filename $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k/$$filename; \ done #$(INSTALLDATA) -t $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k/ "plymouth/$$filename"; $(INSTALLDATA) -t $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k plymouth/background.png $(INSTALLDATA) -t $(DESTDIR)$(datadir)/plymouth/themes/reform-y2k plymouth/reform-y2k.plymouth $(INSTALL) -d $(DESTDIR)$(datadir)/wireplumber/wireplumber.conf.d $(INSTALLDATA) -t $(DESTDIR)$(datadir)/wireplumber/wireplumber.conf.d audio/reform-hdmi-audio-priority.conf $(INSTALL) -d $(DESTDIR)$(sysconfdir)/profile.d $(INSTALLDATA) -t $(DESTDIR)$(sysconfdir)/profile.d etc/profile.d/reform-kwin.sh $(INSTALLDATA) -t $(DESTDIR)$(sysconfdir)/profile.d etc/profile.d/reform-mali.sh $(INSTALL) -d $(DESTDIR)$(datadir)/doc/reform-tools/examples $(INSTALLDATA) -t $(DESTDIR)$(datadir)/doc/reform-tools/examples examples/keyboard_rainbow.py $(INSTALL) -d $(DESTDIR)$(libdirarch)/plymouth $(INSTALLDATA) -t $(DESTDIR)$(libdirarch)/plymouth plymouth/monobar.so $(INSTALL) -d $(DESTDIR)$(datadir)/plymouth/themes/monobar/ $(INSTALLDATA) -t $(DESTDIR)$(datadir)/plymouth/themes/monobar/ plymouth/monobar.plymouth .PHONY: clean clean: rm -f man/*.1 plymouth/background.png .PHONY: lint lint: clang-format lpc/reform2_lpc.c | diff -u lpc/reform2_lpc.c - shfmt --posix --simplify --binary-next-line --case-indent --indent 2 --diff \ bin kernel/* initramfs-tools/*/* flash-kernel/*/* shfmt --language-dialect=bash --simplify --binary-next-line --case-indent --indent 2 --diff \ libexec/reform-tools/reform-power-daemon black --check --diff bin/reform-compstat libexec/reform-tools/reform-tray.py libexec/reform-tools/reform-wallpaper.py examples/keyboard_rainbow.py black --line-length 120 --check --diff bin/reform-mcu-tool shellcheck bin/* kernel/* initramfs-tools/*/* flash-kernel/*/* libexec/reform-tools/reform-power-daemon test: # check the validity of gschema overrides # Create a dummy placeholder file to convince glib-compile-schemas to # not skip processing this directory echo '' > schemas/dummy.gschema.xml glib-compile-schemas --dry-run --strict schemas rm schemas/dummy.gschema.xml reform-tools-1.83/NetworkManager/000077500000000000000000000000001513102710000170075ustar00rootroot00000000000000reform-tools-1.83/NetworkManager/default-wifi-powersave-off.conf000066400000000000000000000000411513102710000250120ustar00rootroot00000000000000[connection] wifi.powersave = 2 reform-tools-1.83/README.md000066400000000000000000000027311513102710000153450ustar00rootroot00000000000000reform-tools ============ This package contains a collection of scripts and configuration files for GNU/Linux operating systems running on the MNT Reform, MNT Pocket Reform and MNT Reform Next with i.MX8MQ, i.MX8MPlus, Banana PI CM4, LS1028A or RK3588 processor modules. It contains system utilities to manage your installation as well as configuration files for initramfs, flash-kernel, pulseaudio, alsa, u-boot-menu, udev and NetworkManager. reform2-lpc-dkms ---------------- The reform2_lpc kernel module allows for interaction with the NXP LPC11U24 Cortex-M0 MCU system controller in the Reform 2 open hardware laptop. It controls an analog monitor chip for the eight battery cells as well as the charger. It is connected to the Processor Module via SPI, and has GPIO lines to the main power rail switchers in the system. It has a UART (SYSCTL) that the keyboard can talk to directly for issuing power on/off commands and battery status queries. The reform2_lpc module provides battery status information and is necessary to completely shut down the system when powering it off via userspace. License ------- Copyright 2020-2025 Lukas F. Hartmann Copyright 2022-2025 Johannes Schauer Marin Rodrigues Unless otherwise stated, reform-tools can be redistributed and/or modified under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. reform-tools-1.83/audio/000077500000000000000000000000001513102710000151645ustar00rootroot00000000000000reform-tools-1.83/audio/99-reform-audio.rules000066400000000000000000000001631513102710000210700ustar00rootroot00000000000000ACTION=="add", SUBSYSTEM=="sound", KERNEL=="card*", ATTRS{id}=="wm8960audio", ENV{PULSE_PROFILE_SET}="reform.conf" reform-tools-1.83/audio/analog-input-reform.conf000066400000000000000000000036401513102710000217240ustar00rootroot00000000000000# This file is part of PulseAudio. # # PulseAudio is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 2.1 of the # License, or (at your option) any later version. # # PulseAudio is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with PulseAudio; if not, see . ; Analog input path for MNT Reform, which has a headset mic input ; that is only on the left channel (mono). [General] priority = 100 [Element Capture] switch = mute volume = ignore [Element Mic] required-absent = any [Element Mic Boost] required-absent = any [Element Dock Mic] required-absent = any [Element Dock Mic Boost] required-absent = any [Element Front Mic] required-absent = any [Element Front Mic Boost] required-absent = any [Element Int Mic] required-absent = any [Element Int Mic Boost] required-absent = any [Element Internal Mic] required-absent = any [Element Internal Mic Boost] required-absent = any [Element Rear Mic] required-absent = any [Element Rear Mic Boost] required-absent = any [Element Headset] required-absent = any [Element Headset Mic] required-absent = any [Element Headset Mic Boost] required-absent = any [Element Headphone Mic] required-absent = any [Element Headphone Mic Boost] required-absent = any [Element Line] required-absent = any [Element Line Boost] required-absent = any [Element Aux] required-absent = any [Element Video] required-absent = any [Element Mic/Line] required-absent = any [Element TV Tuner] required-absent = any [Element FM] required-absent = any .include analog-input.conf.common reform-tools-1.83/audio/asound.state000066400000000000000000000245531513102710000175300ustar00rootroot00000000000000state.wm8960audio { control.1 { iface MIXER name 'Capture Volume' value.0 39 value.1 39 comment { access 'read write' type INTEGER count 2 range '0 - 63' dbmin -1725 dbmax 3000 dbvalue.0 1200 dbvalue.1 1200 } } control.2 { iface MIXER name 'Capture Volume ZC Switch' value.0 0 value.1 0 comment { access 'read write' type INTEGER count 2 range '0 - 1' } } control.3 { iface MIXER name 'Capture Switch' value.0 true value.1 true comment { access 'read write' type BOOLEAN count 2 } } control.4 { iface MIXER name 'Left Input Boost Mixer LINPUT3 Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -9999999 dbmax 600 dbvalue.0 -9999999 } } control.5 { iface MIXER name 'Left Input Boost Mixer LINPUT2 Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -9999999 dbmax 600 dbvalue.0 -9999999 } } control.6 { iface MIXER name 'Right Input Boost Mixer RINPUT3 Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -9999999 dbmax 600 dbvalue.0 -9999999 } } control.7 { iface MIXER name 'Right Input Boost Mixer RINPUT2 Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -9999999 dbmax 600 dbvalue.0 -9999999 } } control.8 { iface MIXER name 'Right Input Boost Mixer RINPUT1 Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 3' dbmin 0 dbmax 2900 dbvalue.0 0 } } control.9 { iface MIXER name 'Left Input Boost Mixer LINPUT1 Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 3' dbmin 0 dbmax 2900 dbvalue.0 0 } } control.10 { iface MIXER name 'Playback Volume' value.0 215 value.1 215 comment { access 'read write' type INTEGER count 2 range '0 - 255' dbmin -9999999 dbmax 0 dbvalue.0 -2000 dbvalue.1 -2000 } } control.11 { iface MIXER name 'Headphone Playback Volume' value.0 0 value.1 0 comment { access 'read write' type INTEGER count 2 range '0 - 127' dbmin -9999999 dbmax 600 dbvalue.0 -9999999 dbvalue.1 -9999999 } } control.12 { iface MIXER name 'Headphone Playback ZC Switch' value.0 false value.1 false comment { access 'read write' type BOOLEAN count 2 } } control.13 { iface MIXER name 'Speaker Playback Volume' value.0 101 value.1 101 comment { access 'read write' type INTEGER count 2 range '0 - 127' dbmin -9999999 dbmax 600 dbvalue.0 -2000 dbvalue.1 -2000 } } control.14 { iface MIXER name 'Speaker Playback ZC Switch' value.0 false value.1 false comment { access 'read write' type BOOLEAN count 2 } } control.15 { iface MIXER name 'Speaker DC Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 5' } } control.16 { iface MIXER name 'Speaker AC Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 5' } } control.17 { iface MIXER name 'PCM Playback -6dB Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.18 { iface MIXER name 'ADC Polarity' value 'No Inversion' comment { access 'read write' type ENUMERATED count 1 item.0 'No Inversion' item.1 'Left Inverted' item.2 'Right Inverted' item.3 'Stereo Inversion' } } control.19 { iface MIXER name 'ADC High Pass Filter Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.20 { iface MIXER name 'DAC Polarity' value 'No Inversion' comment { access 'read write' type ENUMERATED count 1 item.0 'No Inversion' item.1 'Left Inverted' item.2 'Right Inverted' item.3 'Stereo Inversion' } } control.21 { iface MIXER name 'DAC Deemphasis Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.22 { iface MIXER name 'DAC Slope' value true comment { access 'read write' type BOOLEAN count 1 } } control.23 { iface MIXER name '3D Filter Upper Cut-Off' value High comment { access 'read write' type ENUMERATED count 1 item.0 High item.1 Low } } control.24 { iface MIXER name '3D Filter Lower Cut-Off' value Low comment { access 'read write' type ENUMERATED count 1 item.0 Low item.1 High } } control.25 { iface MIXER name '3D Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 15' } } control.26 { iface MIXER name '3D Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.27 { iface MIXER name 'ALC Function' value Off comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 Right item.2 Left item.3 Stereo } } control.28 { iface MIXER name 'ALC Max Gain' value 7 comment { access 'read write' type INTEGER count 1 range '0 - 7' } } control.29 { iface MIXER name 'ALC Target' value 4 comment { access 'read write' type INTEGER count 1 range '0 - 15' } } control.30 { iface MIXER name 'ALC Min Gain' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 7' } } control.31 { iface MIXER name 'ALC Hold Time' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 15' } } control.32 { iface MIXER name 'ALC Mode' value ALC comment { access 'read write' type ENUMERATED count 1 item.0 ALC item.1 Limiter } } control.33 { iface MIXER name 'ALC Decay' value 3 comment { access 'read write' type INTEGER count 1 range '0 - 15' } } control.34 { iface MIXER name 'ALC Attack' value 2 comment { access 'read write' type INTEGER count 1 range '0 - 15' } } control.35 { iface MIXER name 'Noise Gate Threshold' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 31' } } control.36 { iface MIXER name 'Noise Gate Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.37 { iface MIXER name 'ADC PCM Capture Volume' value.0 195 value.1 195 comment { access 'read write' type INTEGER count 2 range '0 - 255' dbmin -9999999 dbmax 3000 dbvalue.0 0 dbvalue.1 0 } } control.38 { iface MIXER name 'Left Output Mixer Boost Bypass Volume' value 2 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -2100 dbmax 0 dbvalue.0 -1500 } } control.39 { iface MIXER name 'Left Output Mixer LINPUT3 Volume' value 2 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -2100 dbmax 0 dbvalue.0 -1500 } } control.40 { iface MIXER name 'Right Output Mixer Boost Bypass Volume' value 2 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -2100 dbmax 0 dbvalue.0 -1500 } } control.41 { iface MIXER name 'Right Output Mixer RINPUT3 Volume' value 2 comment { access 'read write' type INTEGER count 1 range '0 - 7' dbmin -2100 dbmax 0 dbvalue.0 -1500 } } control.42 { iface MIXER name 'ADC Data Output Select' value 'Left Data = Left ADC; Right Data = Right ADC' comment { access 'read write' type ENUMERATED count 1 item.0 'Left Data = Left ADC; Right Data = Right ADC' item.1 'Left Data = Left ADC; Right Data = Left ADC' item.2 'Left Data = Right ADC; Right Data = Right ADC' item.3 'Left Data = Right ADC; Right Data = Left ADC' } } control.43 { iface MIXER name 'DAC Mono Mix' value Stereo comment { access 'read write' type ENUMERATED count 1 item.0 Stereo item.1 Mono } } control.44 { iface MIXER name 'Left Boost Mixer LINPUT2 Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.45 { iface MIXER name 'Left Boost Mixer LINPUT3 Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.46 { iface MIXER name 'Left Boost Mixer LINPUT1 Switch' value true comment { access 'read write' type BOOLEAN count 1 } } control.47 { iface MIXER name 'Right Boost Mixer RINPUT2 Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.48 { iface MIXER name 'Right Boost Mixer RINPUT3 Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.49 { iface MIXER name 'Right Boost Mixer RINPUT1 Switch' value true comment { access 'read write' type BOOLEAN count 1 } } control.50 { iface MIXER name 'Left Input Mixer Boost Switch' value true comment { access 'read write' type BOOLEAN count 1 } } control.51 { iface MIXER name 'Right Input Mixer Boost Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.52 { iface MIXER name 'Left Output Mixer PCM Playback Switch' value true comment { access 'read write' type BOOLEAN count 1 } } control.53 { iface MIXER name 'Left Output Mixer LINPUT3 Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.54 { iface MIXER name 'Left Output Mixer Boost Bypass Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.55 { iface MIXER name 'Right Output Mixer PCM Playback Switch' value true comment { access 'read write' type BOOLEAN count 1 } } control.56 { iface MIXER name 'Right Output Mixer RINPUT3 Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.57 { iface MIXER name 'Right Output Mixer Boost Bypass Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.58 { iface MIXER name 'Mono Output Mixer Left Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.59 { iface MIXER name 'Mono Output Mixer Right Switch' value false comment { access 'read write' type BOOLEAN count 1 } } } reform-tools-1.83/audio/reform-hdmi-audio-priority.conf000066400000000000000000000003361513102710000232240ustar00rootroot00000000000000monitor.alsa.rules = [ { matches = [ { node.name = "alsa_output.platform-hdmi1-sound.stereo-fallback" } ] actions = { update-props = { priority.driver = 100 priority.session = 100 } } } ] reform-tools-1.83/audio/reform.conf000066400000000000000000000007661513102710000173360ustar00rootroot00000000000000[General] auto-profiles = yes [Mapping stereo-out] device-strings = hw:%f fallback = yes channel-map = left,right paths-output = analog-output analog-output-speaker analog-output-headphones direction = output priority = 1 [Mapping headset-mono-in] device-strings = hw:%f fallback = yes channel-map = mono paths-input = analog-input-reform direction = input priority = 1 [Profile output:stereo-out+input:mono-in] description = MNT Reform output-mappings = stereo-out input-mappings = headset-mono-in reform-tools-1.83/audio/ucm2.conf.d/000077500000000000000000000000001513102710000172005ustar00rootroot00000000000000reform-tools-1.83/audio/ucm2.conf.d/rk3588-tlv320ai/000077500000000000000000000000001513102710000215065ustar00rootroot00000000000000reform-tools-1.83/audio/ucm2.conf.d/rk3588-tlv320ai/HiFi.conf000066400000000000000000000043201513102710000231730ustar00rootroot00000000000000SectionDevice."Headphones" { Comment "Headphones" EnableSequence [ cset "name='Speaker Driver Playback Switch' off" cset "name='Speaker Switch' on" cset "name='HP Driver Playback Switch' on" cset "name='HP Left Switch' on" cset "name='HP Right Switch' on" cset "name='Output Left From Left DAC' on" cset "name='Output Right From Right DAC' on" cset "name='DAC Playback Volume' 127" cset "name='HP Driver Playback Volume' 0" cset "name='HP Analog Playback Volume' 127" cset "name='Speaker Analog Playback Volume' 127" cset "name='Speaker Driver Playback Volume' 0" ] DisableSequence [ ] Value { PlaybackPCM "hw:${CardId}" PlaybackChannels 2 } } SectionDevice."Speaker" { Comment "Speaker" EnableSequence [ cset "name='HP Driver Playback Switch' off" cset "name='HP Left Switch' off" cset "name='HP Right Switch' off" cset "name='Speaker Driver Playback Switch' on" cset "name='Speaker Switch' on" cset "name='Output Left From Left DAC' on" cset "name='Output Right From Right DAC' on" cset "name='DAC Playback Volume' 127" cset "name='HP Driver Playback Volume' 0" cset "name='HP Analog Playback Volume' 127" cset "name='Speaker Analog Playback Volume' 127" cset "name='Speaker Driver Playback Volume' 0" ] DisableSequence [ ] Value { PlaybackPCM "hw:${CardId}" } } SectionDevice."Microphone" { Comment "Microphone" EnableSequence [ cset "name='Mic PGA Capture Volume' 80" cset "name='ADC Capture Switch' on" cset "name='ADC Capture Volume' 127" cset "name='MIC1LM M-Terminal' 0" cset "name='MIC1LM P-Terminal' 0" cset "name='MIC1LP P-Terminal' 0" cset "name='MIC1RP P-Terminal' 3" cset "name='Output Left from MIC1LP' off" cset "name='Output Left from MIC1RP' off" cset "name='Output Right from MIC1RP' off" ] DisableSequence [ cset "name='ADC Switch' off" cset "name='ADC Volume' 0" cset "name='ADC Capture Switch' off" cset "name='MIC1LM M-Terminal' 0" cset "name='MIC1LM P-Terminal' 0" cset "name='MIC1LP P-Terminal' 0" cset "name='MIC1RP P-Terminal' 0" ] Value { CapturePCM "hw:${CardId}" CaptureChannels 2 } } reform-tools-1.83/audio/ucm2.conf.d/rk3588-tlv320ai/rk3588-tlv320aic3100.conf000066400000000000000000000001331513102710000253270ustar00rootroot00000000000000Syntax 2 SectionUseCase."HiFi" { File "HiFi.conf" Comment "MNT Reform Hi-Fi Audio" } reform-tools-1.83/bin/000077500000000000000000000000001513102710000146335ustar00rootroot00000000000000reform-tools-1.83/bin/pocket-reform-handbook000077500000000000000000000015131513102710000211210ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2023 Lukas F. Hartmann # Copyright 2024 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Open the MNT Pocket Reform handbook in a browser" >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ $# -gt 0 ]; then if [ "$1" != "--help" ]; then echo "E: too many arguments" >&2 usage exit 1 fi usage exit 0 fi if [ ! -e /usr/share/doc/pocket-reform-handbook/html/index.html ]; then echo "E: install pocket-reform-handbook" >&2 exit 1 fi if [ -z ${DISPLAY+x} ]; then # not running under X/wayland set -- elinks else set -- xdg-open fi set -- "$@" /usr/share/doc/pocket-reform-handbook/html/index.html exec "$@" reform-tools-1.83/bin/reform-boot-config000077500000000000000000000562141513102710000202670ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2020-2023 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues # # uboot on either emmc or the sd-card (as decided by the position of the DIP # switch) will load the kernel and initramfs from the first /boot partiton # where it finds a valid boot.scr (or extlinux.conf). It will attempt to find # a boot.scr on the first partition of the sd-card first and then will try # the first partition on emmc. # # This script sets up the first partition on the sd-card or emmc (as decided # by whether the --emmc option was passed or not) such that the initramfs on # that partition will load the correct rootfs. The rootfs can either reside on # the sd-card, emmc, ssd/nvme, sata or a usb mass storage device. # # The initramfs is tightly tied to the rootfs and the kernel version because it # is generated from the contents of the rootfs and contains the kernel modules # that must fit the correct kernel version. The choice of rootfs stored inside # the initramfs is derived from the settings of /etc/fstab in the rootfs. set -eu usage() { echo "Usage: " >&2 echo " reform-boot-config [--emmc] sd # rootfs on SD card (default)" >&2 echo " reform-boot-config [--emmc] ssd # rootfs on SSD or NVMe" >&2 echo " reform-boot-config [--emmc] usb # rootfs on USB storage device" >&2 echo " reform-boot-config [--emmc] emmc # rootfs on eMMC" >&2 echo " reform-boot-config [--emmc] /dev/... # custom rootfs device" >&2 echo "" >&2 echo "Adjust /etc/fstab of the given root file system and regenerate the" >&2 echo "initramfs in /boot on eMMC or SD-card (as indicated by the --emmc" >&2 echo "switch) to boot that rootfs." >&2 echo "" >&2 echo "Options:" >&2 echo " --emmc Record boot preference in /boot partition on eMMC instead of SD-card." >&2 echo " --no-copy-old-boot Do not copy contents from old /boot partition to new /boot." >&2 echo "" >&2 echo "Instead of using the short-hands sd, ssd, usb or emmc," >&2 echo "you can choose another root partition by passing" >&2 echo "the absolute device path starting with /dev/ explicitly." >&2 echo "For example, to boot a rootfs on an LVM volume with /boot" >&2 echo "on eMMC, run:" >&2 echo "" >&2 echo " reform-boot-config --emmc /dev/reformvg/root" >&2 echo "" >&2 echo "Note: The Debian kernel package installs files into /boot. Thus, the" >&2 echo "selected partition for /boot must already contain the kernel image" >&2 echo "belonging to the Debian kernel package installed in the selected" >&2 echo "rootfs. This script will not attempt to re-install the Debian kernel" >&2 echo "package to re-populate an empty or non-matching /boot partition." >&2 echo "" >&2 echo "To re-create a /boot partition on eMMC from scratch, use" >&2 echo "reform-emmc-bootstrap." >&2 echo "" >&2 echo "If 'ssd' was chosen as the root file system and there are no" >&2 echo "partitions on the SSD, this script will attempt to open the SSD" >&2 echo "as a LUKS device and assume a setup created by" >&2 echo "reform-setup-encrypted-disk." >&2 } maybe_umount() { what="$1" if [ "$FORCE" = true ]; then echo "Unmounting without user interaction because of --force" response="y" else printf "Should this script run 'umount %s' for you? [y/N] " "$what" read -r response fi if [ "$response" != "y" ]; then echo "I: Not unmounting as requested." >&2 return 1 else echo "I: Unmounting $what..." ret=0 umount "$what" || ret=$? if [ "$ret" -eq 0 ]; then echo "I: Unmounting $what successful." >&2 return 0 else echo "E: Tried to unmount $what but failed." >&2 return 1 fi fi } FORCE=false EMMC=false COPY_OLDBOOT=true while getopts :h-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; -) case "$OPTARG" in help) usage exit 0 ;; force) FORCE=true ;; emmc) EMMC=true ;; no-copy-old-boot) COPY_OLDBOOT=false ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; :) echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" if [ "$#" -ne 1 ]; then echo "E: invalid number of arguments" >&2 usage exit 1 fi ARGV1="$1" if [ "$(id -u)" -ne 0 ]; then echo "reform-boot-config has to be run as root / using sudo." >&2 exit 1 fi # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi if [ "$EMMC" = true ]; then case $EMMC_USE in false) echo "E: writing to eMMC not supported on $(cat /proc/device-tree/model)" >&2 exit 1 ;; warn) echo "W: Using eMMC on $(cat /proc/device-tree/model) is not without risk." >&2 echo "W: For example, flashing the wrong u-boot or if the flashing process goes wrong, it is" >&2 echo "W: possible to soft-brick your board. Restoring it might need some extra hardware." >&2 echo "W: Please only proceed if you are sure that the benefits outweigh the risks for you." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi ;; esac BOOTPART="$DEV_MMC" HUMAN_BOOT="eMMC" else BOOTPART="$DEV_SD" HUMAN_BOOT="SD-card" fi # Try opening with an exclusive write lock to check whether a device is still # opened by consumers like device-mapper, raid or luks, to name some examples. # reform-emmc-bootstrap does the same thing (could share code?) get_exclusive_write_lock() { ret=0 python3 - "$1" <&2 echo "W: This script can create a new partition table on $HUMAN_BOOT for you." >&2 echo "WARNING: doing so will destroy the contents of your $HUMAN_BOOT." >&2 if [ "$FORCE" = true ]; then echo "I: Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi if ! get_exclusive_write_lock "/dev/${BOOTPART}"; then echo "E: device /dev/${BOOTPART} ($HUMAN_BOOT) is still in use" >&2 exit 1 fi # reform-emmc-bootstrap does the same thing (could share code?) parted --script --machine "/dev/$BOOTPART" "mklabel msdos" # create two partitions as expected by reform-check (but we only format /boot) # make /boot as big as mkimage.sh would parted --script --machine "/dev/$BOOTPART" "mkpart primary ext4 16MiB $((16 + 488))MiB" parted --script --machine "/dev/$BOOTPART" "mkpart primary ext4 $((16 + 488))MiB 100%" udevadm settle partprobe "/dev/$BOOTPART" mkfs.ext4 -F "/dev/${BOOTPART}p1" fi BOOTPART="${BOOTPART}p1" if [ ! -b "/dev/$BOOTPART" ]; then echo "/dev/$BOOTPART is not a block device" >&2 exit 1 fi case $ARGV1 in sd) ROOTPART="${DEV_SD}p2" ;; nvme | ssd) if [ "$DEV_SSD" = "sda" ]; then ROOTPART="${DEV_SSD}1" else ROOTPART="${DEV_SSD}p1" fi if [ ! -e "/dev/$ROOTPART" ]; then echo "W: First partition on SSD (/dev/$ROOTPART) does not exist." >&2 if [ "$(lsblk --nodeps --noheadings --output=FSTYPE "/dev/${DEV_SSD}")" = "crypto_LUKS" ]; then echo "I: Assuming full disk encryption with LUKS on /dev/reformvg/root" >&2 ROOTPART="reformvg/root" else echo "E: Your SSD at /dev/${DEV_SSD} does not seem to be a LUKS device" >&2 exit 1 fi fi ;; usb) ROOTPART="${DEV_USB}1" ;; emmc) ROOTPART="${DEV_MMC}p2" ;; /dev/*) if [ ! -b "$1" ]; then echo "there is no block device called $1" >&2 exit 1 fi ROOTPART="$1" ;; *) usage exit 1 ;; esac echo "This script selects your preferred boot medium. It writes your choice to the file /etc/fstab" echo ROOTPART="${ROOTPART#/dev/}" # POSIX shell only has a single array: $@ # Instead of storing the list of directories that need to be unmounted or # removed in a string separated by whitespaces (and thus not supporting # whitespace characters in path names) we use $@ to store that list. # We push each new entry to the beginning of the list so that we can use # shift to pop the first entry. cleanup() { : "${TMPDIR:=/tmp}" for dir; do # $dir is either a device that has to be unmounted or an empty # temporary directory that used to be a mountpoint echo "cleaning up $dir" >&2 ret=0 if [ -d "$dir" ]; then # special handling for /dev, /sys and /proc case "$dir" in */dev | */sys | */proc) umount "$dir" || ret=$? ;; *) rmdir "$dir" || ret=$? ;; esac else umount "$dir" || ret=$? fi if [ "$ret" != 0 ]; then echo "cleaning up $dir failed" >&2 fi # remove this item from $@ shift done if [ "${MOUNTROOT-}" = "/" ]; then ret=0 mount /boot || ret=$? if [ "$ret" != 0 ]; then echo "mounting /boot failed" >&2 fi fi if [ "${MOUNTROOT-}" != "/" ] && [ "$ROOTPART" = "reformvg/root" ] && [ "$ARGV1" != "/dev/reformvg/root" ]; then if [ -e /dev/reformvg ]; then vgchange -an reformvg fi if [ -e /dev/mapper/reform_crypt ]; then cryptsetup luksClose reform_crypt fi fi echo reform-boot-config FAILED to run >&2 } set -- trap 'cleanup "$@"' EXIT INT TERM # check if rootfs is already mounted somewhere that is not / if [ -b "/dev/$ROOTPART" ]; then MOUNTROOT="$(lsblk --noheadings --output=MOUNTPOINT "/dev/$ROOTPART" || :)" if [ "$MOUNTROOT" != "" ] && [ "$MOUNTROOT" != "/" ]; then echo "/dev/$ROOTPART is still mounted on $MOUNTROOT." >&2 if ! maybe_umount "/dev/$ROOTPART"; then echo "Please unmount before running this script" >&2 exit 1 fi MOUNTROOT= fi else # if /dev/$ROOTPART is not a block device, then it can also not be mounted anywhere MOUNTROOT= fi # If reformvg/root was chosen as the rootfs (either explicitly or implicitly # because there are no partitions on the SSD), attempt opening the SSD as a # LUKS device, except if either # - it is already mounted as the current rootfs or # - the user explicitly selected /dev/reformvg/root as the rootfs in which # case we assume it is already unlocked by the user if [ "$MOUNTROOT" != "/" ] && [ "$ROOTPART" = "reformvg/root" ] && [ "$ARGV1" != "/dev/reformvg/root" ]; then if [ "$(lsblk --nodeps --noheadings --output=FSTYPE "/dev/${DEV_SSD}")" != "crypto_LUKS" ]; then echo "W: SSD (/dev/${DEV_SSD}) does not look like a LUKS device" >&2 fi cryptsetup luksOpen "/dev/${DEV_SSD}" reform_crypt vgchange -ay reformvg fi # mount the desired root partition somewhere if it isn't mounted yet if [ "$MOUNTROOT" = "" ]; then if [ ! -e "/dev/$ROOTPART" ]; then echo "E: root partition (/dev/$ROOTPART) does not exist" >&2 exit 1 fi MOUNTROOT="$(mktemp --tmpdir --directory reform-boot-config.XXXXXXXXXX)" set -- "/dev/$ROOTPART" "$MOUNTROOT" "$@" mount "/dev/$ROOTPART" "$MOUNTROOT" fi if [ ! -d "$MOUNTROOT/boot" ]; then echo "the rootfs does not contain a /boot directory" >&2 exit 1 fi # check if the new boot is still mounted somewhere MOUNT_BOOT="$(lsblk --noheadings --output=MOUNTPOINT "/dev/$BOOTPART" || :)" if [ -n "$MOUNT_BOOT" ]; then echo "W: /dev/$BOOTPART ($HUMAN_BOOT) is still mounted on $MOUNT_BOOT, which means that it is" >&2 echo "probably used by the currently running system and that replacing" >&2 echo "its contents might make the currently running system unbootable." if [ "$(lsblk --noheadings --output=MOUNTPOINT "/dev/$BOOTPART")" != "/boot" ]; then echo "W: /dev/$BOOTPART ($HUMAN_BOOT) was expected to be mounted at /boot, but was found be" >&2 echo "W: mounted at $(lsblk --noheadings --output=MOUNTPOINT "/dev/$BOOTPART")" >&2 fi if ! maybe_umount "/dev/$BOOTPART"; then echo "Please unmount before running this script" >&2 exit 1 fi fi # check that the new mountpoint for /boot is empty if mountpoint --quiet "$MOUNTROOT/boot"; then echo "Something ($(findmnt --noheadings --evaluate --mountpoint "$MOUNTROOT/boot" --output SOURCE)) is still mounted on $MOUNTROOT/boot." >&2 if ! maybe_umount "$MOUNTROOT/boot"; then echo "Please unmount before running this script" >&2 exit 1 fi fi # mount the new boot partition set -- "/dev/$BOOTPART" "$@" mount "/dev/$BOOTPART" "$MOUNTROOT/boot" # find the device that was mounted as /boot according to the /etc/fstab in the # given rootfs OLDBOOTPART="$(LIBMOUNT_FSTAB="$MOUNTROOT/etc/fstab" findmnt --fstab --noheadings --evaluate --mountpoint /boot --output SOURCE || :)" if [ "$COPY_OLDBOOT" = true ]; then if [ -z "$OLDBOOTPART" ]; then echo "cannot find /boot device referenced by /etc/fstab in rootfs at /dev/$ROOTPART" >&2 exit 1 fi if [ ! -e "$OLDBOOTPART" ]; then echo "/boot device $OLDBOOTPART from /etc/fstab in /dev/$ROOTPART doesn't exist" >&2 exit 1 fi case $OLDBOOTPART in "/dev/${DEV_SD}"*) HUMAN_OLDBOOT="SD-card" ;; "/dev/${DEV_MMC}"*) HUMAN_OLDBOOT="eMMC" ;; *) HUMAN_OLDBOOT="unknown" ;; esac if [ "$OLDBOOTPART" = "/dev/$BOOTPART" ]; then echo "the /boot partition /dev/$BOOTPART ($HUMAN_BOOT) referenced by the rootfs at /dev/$ROOTPART remains the same" >&2 else echo "This script will copy the contents from the old /boot partition" >&2 echo "$OLDBOOTPART ($HUMAN_OLDBOOT) to the new /boot partition $BOOTPART ($HUMAN_BOOT) and delete all" >&2 echo "files from the latter that were not present in the former." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else echo "Are you sure that you want to remove the contents of $BOOTPART ($HUMAN_BOOT)" >&2 printf "and replace it with the contents of %s? [y/N] " "$OLDBOOTPART ($HUMAN_OLDBOOT)" >&2 read -r response fi if [ "$response" != "y" ]; then echo "I: Not overwriting the contents of $BOOTPART ($HUMAN_BOOT) as requested." >&2 exit 1 fi # copy the contents of the old /boot to the new /boot OLDMOUNTBOOT="$(lsblk --nodeps --noheadings --output=MOUNTPOINT "$OLDBOOTPART")" needumount="no" if [ "$OLDMOUNTBOOT" = "" ]; then OLDMOUNTBOOT="$(mktemp --tmpdir --directory reform-boot-config.XXXXXXXXXX)" set -- "$OLDBOOTPART" "$OLDMOUNTBOOT" "$@" mount "$OLDBOOTPART" "$OLDMOUNTBOOT" needumount="yes" fi # sanity check if ! mountpoint --quiet "$OLDMOUNTBOOT"; then echo "E: expected $OLDBOOTPART ($HUMAN_OLDBOOT) mounted on $OLDMOUNTBOOT but nothing mounted there" >&2 exit 1 fi rsync --archive --one-file-system --hard-links --acls --xattrs --whole-file \ --sparse --numeric-ids --delete-delay "$OLDMOUNTBOOT/" "$MOUNTROOT/boot" if [ "$needumount" = "yes" ]; then [ "$1" = "$OLDBOOTPART" ] && shift && umount "$OLDBOOTPART" [ "$1" = "$OLDMOUNTBOOT" ] && shift && rmdir "$OLDMOUNTBOOT" fi fi fi if LIBMOUNT_FSTAB="$MOUNTROOT/etc/fstab" findmnt --fstab --noheadings --source "/dev/$ROOTPART" --mountpoint "/" >/dev/null \ && LIBMOUNT_FSTAB="$MOUNTROOT/etc/fstab" findmnt --fstab --noheadings --source "/dev/$BOOTPART" --mountpoint "/boot" >/dev/null; then echo "/etc/fstab already contains the correct entries" >&2 else echo "commenting original /etc/fstab contents" >&2 SWAP= if LIBMOUNT_FSTAB="$MOUNTROOT/etc/fstab" findmnt --fstab --types swap >/dev/null; then SWAP="$(LIBMOUNT_FSTAB="$MOUNTROOT/etc/fstab" findmnt --noheadings --fstab --types swap --output SOURCE,TARGET,FSTYPE,OPTIONS,FREQ,PASSNO)" fi sed -i -e 's/^/#/' "$MOUNTROOT/etc/fstab" cat <>"$MOUNTROOT/etc/fstab" /dev/$ROOTPART / auto errors=remount-ro 0 1 /dev/$BOOTPART /boot auto errors=remount-ro 0 1 END if [ -n "$SWAP" ]; then echo "$SWAP" >>"$MOUNTROOT/etc/fstab" fi fi if [ "$MOUNTROOT" = "/" ]; then update-initramfs -u else set -- "$MOUNTROOT/proc" "$MOUNTROOT/sys" "$MOUNTROOT/dev" "$@" mount -o bind /dev "$MOUNTROOT/dev" mount -t sysfs sys "$MOUNTROOT/sys" mount -t proc proc "$MOUNTROOT/proc" # We do not run update-initramfs with -u as that will attempt to update an # existing initramfs and /boot may already contain an initramfs for a kernel # version that we do not have. # FIXME: this will fail if /boot contains a kernel that is newer than the # latest kernel the system has installed, see #1092765 chroot "$MOUNTROOT" update-initramfs -c -k all [ "$1" = "$MOUNTROOT/proc" ] && shift && umount "$MOUNTROOT/proc" [ "$1" = "$MOUNTROOT/sys" ] && shift && umount "$MOUNTROOT/sys" [ "$1" = "$MOUNTROOT/dev" ] && shift && umount "$MOUNTROOT/dev" fi # unmount /boot partition [ "$1" = "/dev/$BOOTPART" ] && shift && umount "/dev/$BOOTPART" # unmount the root partition if necessary if [ "$MOUNTROOT" != "/" ]; then [ "$1" = "/dev/$ROOTPART" ] && shift && umount "/dev/$ROOTPART" [ "$1" = "$MOUNTROOT" ] && shift && rmdir "$MOUNTROOT" fi # make sure that the cleanup array is empty now [ $# -eq 0 ] trap - EXIT INT TERM if [ "$MOUNTROOT" != "/" ] && [ "$ROOTPART" = "reformvg/root" ] && [ "$ARGV1" != "/dev/reformvg/root" ]; then vgchange -an reformvg cryptsetup luksClose reform_crypt fi # make sure that the new boot partition does not still have the reformsdboot # or reformemmcboot labels in case it used to be the /boot partition from a # rescue system on sd-card or emmc, respectively case "$BOOTPART" in "${DEV_SD}p1") if [ "$(lsblk --nodeps --noheadings --output=LABEL "/dev/$BOOTPART")" = "reformsdboot" ]; then e2label "/dev/$BOOTPART" "" fi ;; "${DEV_MMC}p1") if [ "$(lsblk --nodeps --noheadings --output=LABEL "/dev/$BOOTPART")" = "reformemmcboot" ]; then e2label "/dev/$BOOTPART" "" fi ;; esac # since /boot had to be unmounted before running this script, make sure to # mount it again if [ "$MOUNTROOT" = "/" ]; then mount /boot fi # Maybe the human platform name should be part of the machine/*.conf if it is # used more than just here. case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with "*) PLATFORM_HUMAN="MNT Pocket Reform" ;; "MNT Reform Next with "*) PLATFORM_HUMAN="MNT Reform Next" ;; "MNT Reform 2" | "MNT Reform 2 HDMI") PLATFORM_HUMAN="Reform 2" ;; "MNT Reform 2 with "*) PLATFORM_HUMAN="MNT Reform" ;; "MNT "*) PLATFORM_HUMAN="MNT Reform (unknown)" ;; esac if [ "$EMMC" = true ]; then echo "Your /boot partition is on emmc (/dev/$BOOTPART)." >&2 # If the current system runs on SD-card and the user set up /boot on eMMC # then they need to remove the SD-card before booting again or otherwise # u-boot will prefer /boot from this system. case $OLDBOOTPART in "/dev/${DEV_SD}"*) # If the user booted from sd-card before and is now told to remove the # SD-card for booting, it is possible that emmc does not contain u-boot # and in that case, the system will not boot anymore. # * is there enough space in front of the first partition for u-boot? # * if not, then there cannot be u-boot on emmc # * if yes, check if it's the expected u-boot version # The above check is only sensible on platforms which store u-boot # directly on the main device and not in a /boot0 partition. if [ "$DEV_MMC_BOOT0" = false ] \ && [ "$(parted --json --script "/dev/$DEV_MMC" unit B print 2>/dev/null | jq --raw-output '.disk.label')" != "unknown" ] \ && [ "$(parted --json --script "/dev/$DEV_MMC" unit B print | jq --raw-output '.disk.partitions | length')" -ne 0 ] \ && [ "$(parted --json --script "/dev/$DEV_MMC" unit B print | jq --raw-output '.disk.partitions[0].start' | sed 's/B$//')" -lt "16777216" ]; then echo "E: The first partition on your eMMC (/dev/$DEV_MMC) starts before 16 MiB" >&2 echo "E: This is usually not sufficient space for u-boot (for example on RK3588)" >&2 echo "E: If you do not have u-boot on eMMC, then removal of your SD-card will" >&2 echo "E: likely make your system unbootable but leaving your SD-card plugged in" >&2 echo "E: will make u-boot prefer booting the system on SD-card. Best prepare a" >&2 echo "E: SD-card containing only u-boot and no bootable system or flash u-boot" >&2 echo "E: to emmc using reform-flash-uboot." >&2 echo >&2 fi if [ -e /boot/flash.bin ]; then ubootsize=$(stat --format=%s "/boot/flash.bin") realdev="/dev/${DEV_MMC}" if [ "$DEV_MMC_BOOT0" = true ]; then realdev="/dev/${DEV_MMC}boot0" fi if cmp --quiet --bytes="$((ubootsize - FLASHBIN_OFFSET))" "--ignore-initial=0:$UBOOT_OFFSET" /dev/zero "$realdev" 2>/dev/null; then echo "E: The space where u-boot would've been on eMMC is all zeroes." >&2 echo "E: Removal of your SD-card will make your system unbootable but" >&2 echo "E: leaving your SD-card plugged in will make u-boot prefer booting" >&2 echo "E: the system on SD-card. Best prepare a SD-card containing only" >&2 echo "E: u-boot and no bootable system or flash u-boot to emmc using" >&2 echo "E: reform-flash-uboot" >&2 fi fi echo "I: u-boot will prefer the first partition on SD-card over the first partition on eMMC" >&2 echo "I: Your current system has its /boot mounted from SD-card." >&2 echo "I: You requested to configure a new /boot on eMMC" >&2 echo "I: Instead of just rebooting, power off the system." >&2 echo "I: Then remove the SD-card." >&2 echo "I: Lastly, power the system on again." >&2 echo "I: Power off your ${PLATFORM_HUMAN} by running 'systemctl poweroff'." >&2 case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") echo "I: WARNING: If you have the DIP switch on your i.MX8MQ set to load u-boot" >&2 echo "I: from SD-card instead of eMMC, you cannot boot the system without" >&2 echo "I: an SD-card inserted. In that case, either:" >&2 echo "I: a) mv /boot/boot.scr /boot/boot.scr.bak" >&2 echo "I: b) or put in a different SD-card with u-boot but without /boot/boot.scr" >&2 ;; esac ;; *) echo "I: Reboot your ${PLATFORM_HUMAN} by running 'systemctl reboot'." >&2 ;; esac else echo "Your /boot partition is on your SD-Card (/dev/$BOOTPART)." >&2 echo "I: Reboot your ${PLATFORM_HUMAN} by running 'systemctl reboot'." >&2 fi reform-tools-1.83/bin/reform-chat000077500000000000000000000023721513102710000167740ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2020-2022 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Join the #mnt-reform chat room on irc.libera.chat" >&2 echo "under a random pseudonym or a given nickname" >&2 echo >&2 echo "Usage: $0 [--help] [nickname]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } NICKNAME="reform$(shuf -i 0-32767 -n 1)" while getopts :h-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; -) case "$OPTARG" in help) usage exit 0 ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; :) echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" case "$#" in 0) : ;; 1) NICKNAME="$1" ;; *) echo "E: too many positional arguments" >&2 exit 1 ;; esac exec irc -c '#mnt-reform' -p 6697 "$NICKNAME" SSLIRC/irc.libera.chat reform-tools-1.83/bin/reform-check000077500000000000000000001432731513102710000171400ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2022-2025 Johannes Schauer Marin Rodrigues # # This script checks the integrity of your MNT reform setup. It is meant for # two main use-cases: # # 1. somebody has a problem with their reform and to debug the problem it # would be useful to know how their system differs from the default # 2. somebody installed their system several months ago and now wants to find # out which things have since been added or changed in the defaults that # they might want to apply to their running setup as well # # Running this script as non-root will give you a diff between the files in # /etc/skel and those in your $HOME. Running this script as root performs the # system-wide checks. # # shellcheck disable=SC2059 set -eu usage() { echo "This script checks the integrity of your MNT reform setup. It is meant for" >&2 echo "two main use-cases:" >&2 echo >&2 echo " 1. somebody has a problem with their reform and to debug the problem it" >&2 echo " would be useful to know how their system differs from the default" >&2 echo " 2. somebody installed their system several months ago and now wants to find" >&2 echo " out which things have since been added or changed in the defaults that" >&2 echo " they might want to apply to their running setup as well" >&2 echo >&2 echo "Running this script as non-root will give you a diff between the files in" >&2 # shellcheck disable=SC2016 echo '/etc/skel and those in your $HOME. Running this script as root performs the' >&2 echo "system-wide checks." >&2 echo >&2 echo "Usage: $0 [--help] [--mirror={mntre.com,reform.debian.net}] [--offline]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 echo " --mirror=MIRROR Force MIRROR, either mntre.com or reform.debian.net" >&2 echo " --offline Disable all checks that require an internet connection" >&2 echo " and a filled apt cache." >&2 } nth_arg() { shift "$1" printf "%s" "$1" } OFFLINE= MIRROR= while getopts :h-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; -) case "$OPTARG" in help) usage exit 0 ;; offline) OFFLINE=yes ;; mirror) if [ "$OPTIND" -gt "$#" ]; then echo "E: missing argument for --mirror" >&2 exit 1 fi MIRROR="$(nth_arg "$OPTIND" "$@")" OPTIND=$((OPTIND + 1)) ;; mirror=*) MIRROR="${OPTARG#*=}" ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; :) echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" if [ "$#" -gt 0 ]; then usage exit 1 fi if [ -n "$MIRROR" ] && [ "$MIRROR" != "mntre.com" ] && [ "$MIRROR" != "reform.debian.net" ]; then echo "E: invalid value for --mirror: $MIRROR -- only mntre.com and reform.debian.net are supported" >&2 exit 1 fi if [ "$(id -u)" -ne 0 ]; then # check several versions of ~/.profile that older versions of reform-system-image placed into /etc/skel # shellcheck disable=SC2016 if grep --silent -F 'if [ $(whoami) == "root" ]; then cat /etc/reform-root-help; elif [ -z $WAYLAND_DISPLAY ]; then cat /etc/reform-help; fi' ~/.profile \ || grep --silent -F 'if [ $(whoami) = "root" ]; then cat /etc/reform-root-help; elif [ -z $WAYLAND_DISPLAY ]; then cat /etc/reform-help; fi' ~/.profile \ || grep --silent -F 'if [ "$(whoami)" = "root" ]; then cat /etc/reform-root-help; elif [ -z "$WAYLAND_DISPLAY" ]; then cat /etc/reform-help; fi' ~/.profile; then echo "E: Your ~/.profile contains an outdated line that attempts to print /etc/reform-root-help or /etc/reform-help." >&2 echo "E: Consider replacing it with this version:" >&2 echo 'if [ "$(whoami)" = "root" ]; then reform-help --root; elif [ -z "$WAYLAND_DISPLAY" ]; then reform-help; fi' >&2 fi python3 - /usr/share/glib-2.0/schemas/20_reform.gschema.override <<'END' import gi from gi.repository import GLib, Gio import sys kf = GLib.KeyFile.new() kf.load_from_file(sys.argv[1], GLib.KeyFileFlags.NONE) source = Gio.SettingsSchemaSource.get_default() suggestions = [] for group in kf.get_groups()[0]: if not source.lookup(group, False): print(f"N: schema {group} does not exist") continue settings = Gio.Settings(schema_id=group) for key in kf.get_keys(group)[0]: if not settings.get_property("settings_schema").has_key(key): print(f"N: {group} has no setting called {key}") continue if settings.get_user_value(key): print(f"I: {group} {key} was changed") print(f"I: default value: {kf.get_value(group, key)}") print(f"I: current value: {settings.get_user_value(key)}") suggestions.append(f"gsettings reset {group} {key}") if not suggestions: exit(1) print("I: the following commands return the respective settings to their defaults") print(" " + "\n ".join(suggestions)) END for path in $(cd /etc/skel && find . -type f); do if [ ! -e "$HOME/$path" ]; then echo "W: $path doesn't exist in current \$HOME" >&2 elif ! cmp --quiet "/etc/skel/$path" "$HOME/$path"; then echo "W: local version of $path has modifications:" >&2 diff -u "/etc/skel/$path" "$HOME/$path" || true fi done echo "I: Running reform-check as the normal user only diffs your current" # shellcheck disable=SC2016 echo 'I: configuration in your $HOME against the contents in /etc/skel.' echo "I: To run a system-wide check, run this script as the root user." exit 0 fi if [ -z "$MIRROR" ] && grep --silent '^URIs: https://reform.debian.net/debian/\?$' /etc/apt/sources.list.d/reform*.sources 2>/dev/null; then echo "I: reform.debian.net is configured as a mirror in /etc/apt/sources.list.d" >&2 echo "I: Assuming reform.debian.net stable mirror for this script" >&2 echo "I: If this is incorrect, you can set the mirror to its default by re-running this script with --mirror=mntre.com" MIRROR="reform.debian.net" fi if [ -z "$MIRROR" ]; then MIRROR="mntre.com" fi if [ -z "$(apt-get indextargets)" ] && [ "$OFFLINE" != "yes" ]; then echo "E: reform-check needs a populated apt cache for some of its operation." >&2 echo "E: re-run with --offline (disabling some checks) or choose to run 'apt update' now." >&2 printf "Should reform-check run 'apt update' for you? [y/N]" >&2 read -r response if [ "$response" != "y" ]; then echo "Exiting." exit 1 fi apt-get update --error-on=any fi # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi echo "I: Contents of /proc/device-tree/model: $(cat /proc/device-tree/model)" >&2 echo "I: \`uname -a\` output: $(uname -a)" >&2 if dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-mnt-reform-arm64" 2>/dev/null | grep -q '^installed$'; then echo "I: Version of linux-image-mnt-reform-arm64: $(dpkg-query --show --showformat '${Version}' linux-image-mnt-reform-arm64)" >&2 else # The error message below is not quite correct. dpkg *will* tell us a version # even when a package was removed (but not purged). But showing a version # for a removed package is misleading the reader of the reform-check output # into believing that the package is actually installed (or why else would # it show the version of the package?). Thus, when the package is not # installed, we forcefully do not show the version even though we could. echo "E: Cannot get version of linux-image-mnt-reform-arm64 as it is not installed" >&2 fi echo "I: Version of reform-tools: $(dpkg-query --show --showformat '${Version}' reform-tools)" >&2 if grep --quiet "System Image " /etc/motd; then echo "I: Version of system image: $(grep --only-matching "System Image .*" /etc/motd)" >&2 else echo "W: Unable to infer version of system image from /etc/motd" >&2 fi case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with "*" Module") if [ "$OFFLINE" != "yes" ] && [ ! -e /var/cache/fwupd/metadata.xmlb ] && command -v fwupdtool >/dev/null; then echo "I: running fwupdtool refresh" >&2 fwupdtool refresh fi # fwupd might add functionality in the future to perform the below for us # https://github.com/fwupd/fwupd/issues/9192 LATEST_SYS_VER="" if command -v xb-tool >/dev/null && [ -e /var/cache/fwupd/metadata.xmlb ]; then LATEST_SYS_VER=$(xb-tool query /var/cache/fwupd/metadata.xmlb "components/component/id[text()='com.mntre.pocket_reform.sysctl10.firmware']/../releases/release[1]") elif [ "$OFFLINE" != "yes" ] && command -v unxz >/dev/null && command -v curl >/dev/null && command -v xmllint >/dev/null; then LATEST_SYS_VER=$(curl --silent https://fwupd.org//downloads/firmware.xml.xz | unxz | xmllint --xpath "string(/components/component[id[text()='com.mntre.pocket_reform.sysctl10.firmware']]/releases/release[1]/@version)" -) fi if [ -z "$LATEST_SYS_VER" ]; then echo "I: To retrieve the latest sysctl and keyboard firmware versions either install libxmlb-utils or install curl, xz-utils and libxml2-utils" >&2 fi SYS_VER="$(reform-mcu-tool list --json | jq --raw-output 'map(select(.device.name == "pocket-sysctl-1.0")) | .[] | .version')" if [ -n "$SYS_VER" ]; then echo "I: Version of system controller firmware: $SYS_VER" >&2 if [ -n "$LATEST_SYS_VER" ] && [ "$LATEST_SYS_VER" != "$SYS_VER" ]; then echo "I: Latest version of system controller firmware: $LATEST_SYS_VER" >&2 fi else echo "W: unable to obtain version of system controller firmware -- firmware too old?" >&2 fi KBD_VER="$(reform-mcu-tool list --json | jq --raw-output 'map(select(.device.name == "pocket-input-1.0")) | .[] | .version')" if [ -n "$KBD_VER" ]; then echo "I: Version of keyboard firmware: $KBD_VER" >&2 else echo "W: unable to obtain version of keyboard firmware -- firmware too old?" >&2 fi ;; esac case "$(cat /proc/device-tree/model)" in "MNT Reform Next with "*) : ;; # not implemented for Reform Next yet "MNT Reform 2 with LS1028A Module" | \ "MNT Reform 2 with BPI-CM4 Module" | \ "MNT Pocket Reform with BPI-CM4 Module") if [ -e "/sys/bus/spi/drivers/reform2_lpc/spi0.0/firmware" ]; then # A311D echo "I: Version of LPC firmware: $(cat /sys/bus/spi/drivers/reform2_lpc/spi0.0/firmware)" else echo "W: /sys/bus/spi/drivers/reform2_lpc/spi0.0/firmware does not exist -- is the reform2_lpc module loaded?" >&2 fi ;; "MNT Reform 2" | "MNT Reform 2 HDMI" | \ "MNT Reform 2 with i.MX8MP Module" | \ "MNT Reform 2 with QUASAR QCS8550 Module" | \ "MNT Reform 2 with RCORE-DSI RK3588 Module" | \ "MNT Reform 2 with RCORE RK3588 Module" | \ "MNT Pocket Reform with i.MX8MP Module" | \ "MNT Pocket Reform with RCORE RK3588 Module") if [ -e "/sys/bus/spi/drivers/reform2_lpc/spi1.0/firmware" ]; then echo "I: Version of LPC firmware: $(cat /sys/bus/spi/drivers/reform2_lpc/spi1.0/firmware)" else echo "W: /sys/bus/spi/drivers/reform2_lpc/spi1.0/firmware does not exist -- is the reform2_lpc module loaded?" >&2 fi ;; *) echo "E: unexpected content in /proc/device-tree/model: $(cat /proc/device-tree/model)" >&2 ;; esac parse_uboot_version() { version=$1 # MNT u-boot version starts with upstream u-boot version case $version in [0-9][0-9][0-9][0-9].[0-9][0-9]" MNT "*) : ;; *) echo "E: expected u-boot version string to start with upstream version but got: $version" >&2 return ;; esac # Strip off everything following the first space for the upstream version upstream_version=${version%% *} echo "I: Version of upstream U-Boot: $upstream_version" >&2 # Remove the upstream version to parse the remainder version=${version#[0-9][0-9][0-9][0-9].[0-9][0-9] } # After the upstream version comes the machine name # The part after the machine name does not contain any spaces, so we can # split the version again here machine=${version% *} case $machine in "MNT Pocket Reform with BPI-CM4 Module" | \ "MNT Pocket Reform with i.MX8MP Module" | \ "MNT Pocket Reform with RCORE RK3588 Module" | \ "MNT Reform 2" | \ "MNT Reform 2 HDMI" | \ "MNT Reform 2 with BPI-CM4 Module" | \ "MNT Reform 2 with i.MX8MP Module" | \ "MNT Reform 2 with LS1028A Module" | \ "MNT Reform 2 with QUASAR 8550 Module" | \ "MNT Reform 2 with RCORE-DSI RK3588 Module" | \ "MNT Reform 2 with RCORE RK3588 Module" | \ "MNT Reform Next with RCORE RK3588 Module") : ;; *) echo "E: unknown machine name in u-boot version string: $machine" return ;; esac if [ "$machine" != "$(cat /proc/device-tree/model)" ]; then case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") case $machine in "MNT Reform 2" | "MNT Reform 2 HDMI") : ;; *) echo "E: machine name in u-boot version does not match system: $machine != $(cat /proc/device-tree/model)" return ;; esac ;; *) echo "E: machine name in u-boot version does not match system: $machine != $(cat /proc/device-tree/model)" return ;; esac fi version=${version##* } # The remaining version was generated from a "git describe" from the MNT # u-boot project together with "git describe" from upstream u-boot. # The latter will likely be suffixed with "-dirty" because we applied # patches, strip that off version=${version%-dirty} # The remaining version should start with the latest MNT u-boot git tag # which is a ISO8601 date case $version in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]) # In case of i.MX8MQ u-boot, upstream u-boot is not a sub-project and thus, # there is no additional content after the date # In this case, we are done. echo "$version" return ;; [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-*) : ;; *) echo "E: unable to parse U-Boot version git suffix: $version" >&2 return ;; esac year=${version%%-*} version=${version#*-} month=${version%%-*} version=${version#*-} day=${version%%-*} version=${version#*-} # If the remaining version contains no hyphen, then that should be the # abbreviated git object name and should start with a g. case $version in - | -* | *- | *-*) # If there is a hyphen in the remainder, then the U-Boot build is not # from a tag but contains changes echo "W: U-Boot version not from tagged commit but with local changes: $version" >&2 ;; g*) : ;; *) echo "E: Unable to parse U-Boot version git suffix: $version" >&2 return ;; esac # Finally, if successful, print the MNT U-Boot version for the caller echo "$year-$month-$day" } if [ -e "/proc/device-tree/chosen/u-boot,version" ]; then version=$(parse_uboot_version "$(cat /proc/device-tree/chosen/u-boot,version)") if [ -z "$version" ]; then echo "I: Contents of /proc/device-tree/chosen/u-boot,version: $(cat /proc/device-tree/chosen/u-boot,version)" >&2 echo "W: Unable to parse contents of /proc/device-tree/chosen/u-boot,version -- U-Boot too old?" >&2 else if [ "$version" != "$UBOOT_TAG" ]; then echo "I: Contents of /proc/device-tree/chosen/u-boot,version: $(cat /proc/device-tree/chosen/u-boot,version)" >&2 echo "I: Booting with outdated U-Boot. Local version is $version while latest version is $UBOOT_TAG" >&2 fi echo "I: Version of MNT U-Boot: $version" >&2 fi else echo "W: /proc/device-tree/chosen/u-boot,version does not exist -- U-Boot version too old?" >&2 fi HAVE_BOOTSCR=no if test -e /boot/boot.scr; then HAVE_BOOTSCR=yes fi HAVE_EXTLINUX=no if test -e /boot/extlinux/extlinux.conf; then HAVE_EXTLINUX=yes fi HAVE_FLASH_KERNEL=no if dpkg-query --showformat '${db:Status-Status}\n' --show "flash-kernel" 2>/dev/null | grep -q '^installed$'; then HAVE_FLASH_KERNEL=yes fi HAVE_U_BOOT_MENU=no if dpkg-query --showformat '${db:Status-Status}\n' --show "u-boot-menu" 2>/dev/null | grep -q '^installed$'; then HAVE_U_BOOT_MENU=yes fi case "$HAVE_BOOTSCR$HAVE_EXTLINUX" in nono) echo "W: neither /boot/boot.scr nor /boot/extlinux/extlinux.conf exists" >&2 case "$HAVE_FLASH_KERNEL$HAVE_U_BOOT_MENU" in nono) echo "E: neither flash-kernel nor u-boot-menu are installed" >&2 ;; noyes) echo "E: /boot/extlinux/extlinux.conf should exist because u-boot-menu is installed" >&2 ;; yesno) echo "E: /boot/boot.scr should exist because flash-kernel is installed" >&2 ;; yesyes) echo "E: both files should exist as both flash-kernel and u-boot-menu are installed" >&2 ;; esac ;; noyes) echo "I: probably booting via /boot/extlinux/extlinux.conf (/boot/boot.scr does not exist)" >&2 if [ "$HAVE_U_BOOT_MENU" = "no" ]; then echo "W: /boot/extlinux/extlinux.conf is not managed by u-boot-menu (not installed)" >&2 fi ;; yesno) echo "I: probably booting via /boot/boot.scr (/boot/extlinux/extlinux.conf does not exist)" >&2 if [ "$HAVE_FLASH_KERNEL" = "no" ]; then echo "W: /boot/boot.scr is not managed by flash-kernel (not installed)" >&2 fi ;; yesyes) echo "I: probably booting via /boot/extlinux/extlinux.conf (/boot/boot.scr also exists)" >&2 if [ "$HAVE_U_BOOT_MENU" = "no" ]; then echo "W: /boot/extlinux/extlinux.conf is not managed by u-boot-menu (not installed)" >&2 fi if [ "$HAVE_FLASH_KERNEL" = "no" ]; then echo "W: /boot/boot.scr is not managed by flash-kernel (not installed)" >&2 fi ;; esac HUMAN_ROOT= case $(findmnt --noheadings --evaluate --mountpoint / --output SOURCE) in "/dev/reformvg/root") pv_device="$(pvdisplay --noheadings --select vgname=reformvg --columns --options pv_name)" pv_device="${pv_device# }" # remove whitespace prefix if [ "$pv_device" = "/dev/mapper/reform_crypt" ]; then luks_disk="$(lsblk --json -o PATH,PKNAME | jq --raw-output '.blockdevices[] | select(.path == "/dev/mapper/reform_crypt") | .pkname')" if [ "$luks_disk" = "${DEV_SSD}" ]; then HUMAN_ROOT="LVM vg 'reformvg' on LUKS device 'reform_crypt' on SSD" else echo "W: reform_crypt LUKS device on unusual disk: /dev/$luks_disk" >&2 fi else echo "W: LVM volume group reformvg on unexpected partition: $pv_device" >&2 fi ;; "/dev/${DEV_MMC}"*) HUMAN_ROOT="eMMC" ;; "/dev/${DEV_SD}"*) HUMAN_ROOT="SD-card" ;; "/dev/${DEV_SSD}"*) HUMAN_ROOT="SSD" ;; esac echo "I: Mount source of /: $(findmnt --noheadings --evaluate --mountpoint / --output SOURCE) (${HUMAN_ROOT:-n.a.})" >&2 HUMAN_BOOT= case $(findmnt --noheadings --evaluate --mountpoint /boot --output SOURCE) in "/dev/${DEV_MMC}"*) HUMAN_BOOT="eMMC" ;; "/dev/${DEV_SD}"*) HUMAN_BOOT="SD-card" ;; esac echo "I: Mount source of /boot: $(findmnt --noheadings --evaluate --mountpoint /boot --output SOURCE) (${HUMAN_BOOT})" >&2 if [ ! -e "/proc/device-tree/model" ]; then echo "E: /proc/device-tree/model does not exist" >&2 fi if [ -e "/etc/flash-kernel/machine" ] && [ -e "/proc/device-tree/model" ] && [ "$(cat /proc/device-tree/model)" != "$(cat /etc/flash-kernel/machine)" ]; then echo "E: your currently loaded dtb is not the one referenced by flash-kernel" >&2 echo "E: contents of /proc/device-tree/model: $(cat /proc/device-tree/model)" >&2 echo "E: contents of /etc/flash-kernel/machine: $(cat /etc/flash-kernel/machine)" >&2 fi case "$MIRROR" in mntre.com) aptprefcontent="Package: *\nPin: release n=reform, l=reform\nPin-Priority: 990\n" ;; reform.debian.net) aptprefcontent="Package: *\nPin: origin \"reform.debian.net\"\nPin-Priority: 999\n" ;; esac if [ ! -e /etc/apt/preferences.d/reform.pref ]; then echo "E: /etc/apt/preferences.d/reform.pref doesn't exist" >&2 echo "E: you should not install packages on this system unless you know what you are doing" >&2 echo "E: /etc/apt/preferences.d/reform.pref should contain the following lines:" >&2 printf "$aptprefcontent" >&2 else if ! printf "$aptprefcontent" | cmp --quiet - /etc/apt/preferences.d/reform.pref; then echo "W: unexpected content in /etc/apt/preferences.d/reform.pref:" >&2 printf "$aptprefcontent" | diff -u - /etc/apt/preferences.d/reform.pref || true echo "W: you should not install packages on this system unless you know what you are doing" >&2 fi fi for META in reform-desktop-full reform-desktop-minimal; do # if meta package is installed, we don't need to check its Depends RELATIONS="Recommends Suggests" if ! dpkg-query --showformat '${db:Status-Status}\n' --show "$META" 2>/dev/null | grep -q '^installed$'; then echo "I: MNT Reform Desktop meta-package is not installed: $META" >&2 RELATIONS="Depends $RELATIONS" fi for REL in $RELATIONS; do OIFS=$IFS IFS=',' # split field by comma for PKG in $(apt-cache show --no-all-versions $META | sed -ne 's/^'"$REL"': \(.*\)/\1/p'); do PKG="${PKG## }" # strip whitespace if ! dpkg-query --showformat '${db:Status-Status}\n' --show "$PKG" 2>/dev/null | grep -q '^installed$'; then echo "I: $REL of $META is not installed: $PKG" >&2 fi done IFS=$OIFS done done if ! dpkg-query --showformat '${db:Status-Status}\n' --show "reform-branding" 2>/dev/null | grep -q '^installed$'; then case "$MIRROR" in mntre.com) echo "W: reform-branding (non-free) is not installed" >&2 ;; reform.debian.net) echo "I: reform-branding (non-free) is not installed" >&2 ;; *) echo "invalid mirror: $MIRROR" >&2 exit 1 ;; esac fi if [ -z "$(findmnt --fstab --noheadings --evaluate --mountpoint / --output SOURCE)" ]; then echo "E: your /etc/fstab does not have an entry for /" >&2 echo "E: your / device probably is: $(findmnt --noheadings --evaluate --mountpoint / --output SOURCE)" >&2 echo "E: add this to your /etc/fstab:" >&2 echo "$(findmnt --noheadings --evaluate --mountpoint / --output SOURCE) / auto errors=remount-ro 0 1" >&2 fi if [ -z "$(findmnt --fstab --noheadings --evaluate --mountpoint /boot --output SOURCE)" ]; then echo "E: your /etc/fstab does not have an entry for /boot" >&2 if [ "$EMMC_USE" = true ]; then echo "E: for eMMC booting, add:" >&2 echo "/dev/${DEV_MMC}p1 /boot auto errors=remount-ro 0 1" >&2 fi echo "E: for SD-Card booting, add:" >&2 echo "/dev/${DEV_SD}p1 /boot auto errors=remount-ro 0 1" >&2 fi if ! mountpoint --quiet /boot; then echo "E: your /boot has nothing mounted on it -- fix your /etc/fstab" >&2 fi if [ "$EMMC_USE" = true ] && [ ! -e "/dev/${DEV_MMC}p2" ]; then echo "W: /dev/${DEV_MMC}p2 doesn't exist." >&2 echo "W: To update your eMMC to sysimage-v5 you can run reform-flash-rescue" >&2 echo "W: Only run reform-flash-rescue if you intend a factory-reset of your eMMC" >&2 echo "W: Do not use reform-flash-rescue if you boot from eMMC because this will overwrite your /boot partition" >&2 fi if [ ! -e /etc/flash-kernel/machine ]; then # /etc/flash-kernel/machine not existing is only a potential problem # on imx8mq case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") echo "E: /etc/flash-kernel/machine doesn't exist" >&2 echo "E: It should contain either 'MNT Reform 2' (for single display) or 'MNT Reform 2 HDMI' (for dual display)." >&2 echo "E: You can run reform-display-config as root to create a working version." >&2 ;; esac else # we can check only /etc/flash-kernel/machine and not /proc/device-tree/model # as well because above we check (and print) if their contents diff case "$(cat /etc/flash-kernel/machine)" in "MNT Reform 2") : ;; "MNT Reform 2 HDMI") : ;; "MNT Pocket Reform with BPI-CM4 Module.conf" | \ "MNT Pocket Reform with i.MX8MP Module.conf" | \ "MNT Pocket Reform with RCORE RK3588 Module.conf" | \ "MNT Reform 2 with BPI-CM4 Module.conf" | \ "MNT Reform 2 with i.MX8MP Module.conf" | \ "MNT Reform 2 with LS1028A Module.conf" | \ "MNT Reform 2 with QUASAR 8550 Module" | \ "MNT Reform 2 with RCORE-DSI RK3588 Module.conf" | \ "MNT Reform 2 with RCORE RK3588 Module.conf" | \ "MNT Reform Next with RCORE RK3588 Module.conf") echo "W: /etc/flash-kernel/machine is not needed on $(cat /etc/flash-kernel/machine). Consider removing it." >&2 ;; *) echo "E: unexpected content in /etc/flash-kernel/machine" >&2 ;; esac fi flashkerneldefaultcontent="LINUX_KERNEL_CMDLINE=\"\"\nLINUX_KERNEL_CMDLINE_DEFAULTS=\"\"\n" if [ ! -e /etc/default/flash-kernel ]; then echo "E: /etc/default/flash-kernel doesn't exist" >&2 echo "E: /etc/default/flash-kernel should contain the following lines:" >&2 printf "$flashkerneldefaultcontent" >&2 else if ! printf "$flashkerneldefaultcontent" | cmp --quiet - /etc/default/flash-kernel; then echo "W: unexpected content in /etc/default/flash-kernel:" >&2 printf "$flashkerneldefaultcontent" | diff -u - /etc/default/flash-kernel || true fi fi if [ -e /etc/flash-kernel/preboot.d/00reform2_preboot ]; then if printf "# place here any u-boot commands to be executed before boot\n" | cmp --quiet - /etc/flash-kernel/preboot.d/00reform2_preboot; then echo "E: /etc/flash-kernel/preboot.d/00reform2_preboot contains default content overriding /usr/share/flash-kernel/preboot.d/00reform2_preboot" >&2 echo "E: consider deleting /etc/flash-kernel/preboot.d/00reform2_preboot in favour of /usr/share/flash-kernel/preboot.d/00reform2_preboot" >&2 else echo "W: your custom /etc/flash-kernel/preboot.d/00reform2_preboot is overriding /usr/share/flash-kernel/preboot.d/00reform2_preboot" >&2 fi fi if [ -e /etc/flash-kernel/ubootenv.d/00reform2_ubootenv ]; then if printf '# setenv bootpart "1"\n# setenv prefix "/"\n# setenv kernel_addr_r "0x40480000"\n# setenv fdt_addr_r "0x50000000"\n# setenv ramdisk_addr_r "0x51000000"\n' | cmp --quiet - /etc/flash-kernel/ubootenv.d/00reform2_ubootenv; then echo "E: /etc/flash-kernel/ubootenv.d/00reform2_ubootenv contains default content overriding /usr/share/flash-kernel/ubootenv.d/00reform2_ubootenv" >&2 echo "E: consider deleting /etc/flash-kernel/ubootenv.d/00reform2_ubootenv in favour of /usr/share/flash-kernel/ubootenv.d/00reform2_ubootenv" >&2 else echo "W: your custom /etc/flash-kernel/ubootenv.d/00reform2_ubootenv is overriding /usr/share/flash-kernel/ubootenv.d/00reform2_ubootenv" fi fi if command -v systemctl >/dev/null 2>&1 \ && systemctl is-active --quiet greetd \ && test -e /etc/greetd/config.toml \ && grep --quiet '^ *command *= *["'"'"']/usr/bin/tuigreet *' /etc/greetd/config.toml; then if [ -e /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel ]; then # shellcheck disable=SC2016 if ! echo 'setenv bootargs "${bootargs} loglevel=3"' | cmp --quiet - /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel; then echo "I: /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel exists but with the wrong content." >&2 echo 'I: it should contain this: setenv bootargs "${bootargs} loglevel=3"' fi else # shellcheck disable=SC2016 echo 'I: your system is booting using greetd with tuigreet. You may want to put the following line into your /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel: setenv bootargs "${bootargs} loglevel=3' >&2 echo "I: Then run 'sudo flash-kernel' to regenerate your /boot/boot.scr. This will do away with your kernel overwriting your login prompt" >&2 fi else # shellcheck disable=SC2016 if [ -e /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel ] && echo 'setenv bootargs "${bootargs} loglevel=3"' | cmp --quiet - /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel; then echo "W: you do not seem to boot using tuigreet but the following file sets your loglevel to 3: /etc/flash-kernel/ubootenv.d/00reform2_tuigreet_loglevel -- you may consider removing it and re-running 'sudo flash-kernel'" >&2 fi fi initramfstoolsmodulescontent="pwm_imx27\nnwl-dsi\nti-sn65dsi86\nimx-dcss\npanel-edp\nmux-mmio\nmxsfb\nusbhid\nimx8mq-interconnect\n" if [ -e /etc/initramfs-tools/modules ] && printf "$initramfstoolsmodulescontent" | cmp --quiet - /etc/initramfs-tools/modules; then echo "W: /etc/initramfs-tools/modules contains default content superseded by /usr/share/initramfs-tools/modules.d/reform.conf" >&2 echo "W: consider restoring /etc/initramfs-tools/modules to its original state by running:" >&2 echo "sed '/^###/d' /usr/share/initramfs-tools/modules | sudo tee /etc/initramfs-tools/modules" >&2 fi if [ ! -e /etc/motd ]; then echo "I: /etc/motd does not exist" >&2 elif [ ! -L /etc/motd ]; then echo "I: /etc/motd does not exist" >&2 elif [ "$(readlink /etc/motd)" != "motd-rescue" ] && [ "$(readlink /etc/motd)" != "motd-full" ]; then echo "I: /etc/motd does neither point to motd-rescue nor to motd-full" >&2 fi if grep --quiet '^root::' /etc/shadow; then echo "E: root account has no password (maybe run passwd -l root)" >&2 fi if [ ! -e /etc/skel/.profile ]; then echo "E: /etc/skel/.profile doesn't exist" >&2 echo "E: install the package bash to create it" >&2 else # shellcheck disable=SC2016 skelprofilecontent='if [ "$(whoami)" = "root" ]; then reform-help --root; elif [ -z "$WAYLAND_DISPLAY" ]; then reform-help; fi' if [ "$(tail -1 /etc/skel/.profile)" != "$skelprofilecontent" ]; then echo "E: unexpected last line in /etc/skel/.profile, should be:" >&2 echo "$skelprofilecontent" >&2 fi fi if [ -n "$(dpkg --verify reform-tools)" ]; then echo "I: the following files differ from how they are shipped by reform-tools (ignore /var/lib/alsa/asound.state):" >&2 dpkg --verify reform-tools fi if dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-arm64" 2>/dev/null | grep -q '^installed$'; then echo "W: The deprecated meta-package linux-image-arm64 is installed." >&2 if dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-mnt-reform-arm64" 2>/dev/null | grep -q '^installed$'; then echo "W: Since the new meta-package linux-image-mnt-reform-arm64 is installed," >&2 echo "W: the old meta-package linux-image-arm64 should be removed." >&2 else echo "W: Please install the new meta-package linux-image-mnt-reform-arm64" >&2 echo "W: and remove the old meta-package linux-image-arm64." >&2 fi if ! dpkg-query --showformat '${Version}' --show linux-image-arm64 | grep --quiet reform; then echo "E: the currently installed package linux-image-arm64 does not come with Reform patches" >&2 fi fi if ! dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-mnt-reform-arm64" 2>/dev/null | grep -q '^installed$'; then echo "E: linux-image-mnt-reform-arm64 is not installed" >&2 fi if ! dpkg-query --showformat '${db:Status-Status}\n' --show "linux-headers-mnt-reform-arm64" 2>/dev/null | grep -q '^installed$'; then echo "E: linux-headers-mnt-reform-arm64 is not installed (cannot compile reform2_lpc.ko DKMS module for battery status)" >&2 fi for file in /boot/initrd.img-*-reform2-arm64 /boot/vmlinuz-*-reform2-arm64; do if [ ! -e "$file" ]; then continue fi echo "I: file from deprecated kernel flavour found: $file" >&2 done for file in /boot/initrd.img-*-mnt-reform-arm64 /boot/vmlinuz-*-mnt-reform-arm64; do suffix="${file##/boot/}" suffix="${suffix##initrd.img-}" suffix="${suffix##vmlinuz-}" if ! dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-$suffix" 2>/dev/null | grep -q '^installed$'; then echo "I: $file does not belong to any installed kernel package" >&2 fi done if ! dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-$(uname -r)" 2>/dev/null | grep -q '^installed$'; then echo "E: the currently running kernel is not installed as a package" >&2 fi if ! uname --kernel-version | grep --quiet --fixed-strings " $(dpkg-query --show --showformat '${Version}' linux-image-mnt-reform-arm64) "; then echo "E: the currently running kernel is not the one provided by linux-image-mnt-reform-arm64" >&2 fi if [ "$MIRROR" = "reform.debian.net" ] && dpkg-query --showformat '${db:Status-Status}\n' --show "reform-qcacld2" 2>/dev/null | grep -q '^installed$'; then echo "E: Having reform-qcacld2 on a system configured to use packages for Debian stable from reform.debian.net will attempt installing the kernel package from the MNT repositories in the kernel postinstallation hook" >&2 echo "W: Consider replacing reform-qcacld2 with ezurio-qcacld-2.0-dkms for Debian stable and stable-backports kernels from reform.debian.net" >&2 fi if [ "$MIRROR" = "mntre.com" ]; then if dpkg-query --showformat '${db:Status-Status}\n' --show "reform-qcacld2" 2>/dev/null | grep -q '^installed$'; then case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with i.MX8MP Module" | "MNT Reform 2 with i.MX8MP Module") : ;; # this is imx8m+, nothing to do *) echo "I: the reform-qcacld2 package is only required for wifi on the Pocket Reform with i.MX8MP, you can safely remove it unless you plan to go back to the imx8m+" >&2 ;; esac else case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with i.MX8MP Module.conf") echo "E: For the official MNT Debian on Pocket Reform with i.MX8MP, the reform-qcacld2 package needs to be installed for working wifi" >&2 ;; *) : ;; # this is not imx8m+, nothing to do esac fi fi if [ -e /boot/boot.scr ]; then if ! grep --quiet "setenv fk_kvers '$(uname -r)'" /boot/boot.scr; then echo "E: /boot/boot.scr doesn't reference the currently running kernel" >&2 fi if command -v shellcheck >/dev/null; then tail -n +2 /boot/boot.scr | shellcheck --shell sh --exclude=SC2086,SC2154 - else echo "I: Install the package shellcheck for checking /boot/boot.scr for problems" >&2 fi else echo "E: /boot/boot.scr doesn't exist" >&2 echo "E: run 'sudo flash-kernel' to create it" >&2 fi if [ ! -e "/boot/vmlinuz-$(uname -r)" ]; then echo "E: no vmlinuz in /boot for the currently running kernel" >&2 fi if [ ! -e "/boot/initrd.img-$(uname -r)" ]; then echo "E: no initrd.img in /boot for the currently running kernel" >&2 fi if [ ! -e "/boot/dtb-$(uname -r)" ]; then echo "E: no dtb-* symlink for the currently running kernel" >&2 echo "E: run 'sudo flash-kernel' to create it" >&2 elif [ ! -e "/boot/dtbs/$(uname -r)/$DTBPATH" ]; then echo "E: device tree file $DTBPATH is missing from /boot/dtbs" >&2 elif [ ! -s "/boot/dtbs/$(uname -r)/$DTBPATH" ]; then echo "E: device tree file /boot/dtbs/$DTBPATH is empty (zero bytes)" >&2 elif [ "$(readlink "/boot/dtb-$(uname -r)")" != "dtbs/$(uname -r)/$DTBPATH" ]; then echo "E: /boot/dtb-$(uname -r) symlink does not reference dtbs/$(uname -r)/$DTBPATH but: $(readlink "/boot/dtb-$(uname -r)")" >&2 fi if [ -e "/etc/modprobe.d/reform.conf" ]; then if cmp --quiet "/usr/lib/modprobe.d/reform.conf" "/etc/modprobe.d/reform.conf"; then echo "W: Your /etc/modprobe.d/reform.conf is identical to /usr/lib/modprobe.d/reform.conf" >&2 echo "W: The reform.conf in /etc overrides the file in /usr which is shipped by the reform-tools package." >&2 echo "W: You can thus safely delete your /etc/modprobe.d/reform.conf in favour of the copy shipped by reform-tools in /usr." >&2 else echo "W: your custom /etc/modprobe.d/reform.conf overrides /usr/lib/modprobe.d/reform.conf" >&2 fi fi if [ -e /proc/modules ] && ! grep --quiet '^reform2_lpc ' /proc/modules; then echo "E: reform2_lpc is not loaded (battery status information will be missing)" >&2 fi if [ ! -e "/usr/lib/modules/$(uname -r)/updates/dkms/reform2_lpc.ko" ] \ && [ ! -e "/usr/lib/modules/$(uname -r)/updates/dkms/reform2_lpc.ko.xz" ]; then echo "E: /usr/lib/modules/$(uname -r)/updates/dkms/reform2_lpc.ko{.xz} does not exist" >&2 fi if [ ! -e "/sys/class/power_supply/BAT0" ]; then echo "E: /sys/class/power_supply/BAT0 is missing -- reform2_lpc module not loaded?" >&2 elif [ ! -L "/sys/class/power_supply/BAT0" ]; then echo "E: /sys/class/power_supply/BAT0 exists but is not a symlink" >&2 else case "$(cat /proc/device-tree/model)" in "MNT Reform Next with "*) : ;; # not implemented for Reform Next yet "MNT Reform 2 with LS1028A Module" | \ "MNT Reform 2 with BPI-CM4 Module" | \ "MNT Pocket Reform with BPI-CM4 Module") case "$(readlink /sys/class/power_supply/BAT0)" in ../../devices/platform/*/spi_master/spi0/spi0.0/power_supply/BAT0) : ;; *) echo "E: unexpected link target of /sys/class/power_supply/BAT0: $(readlink /sys/class/power_supply/BAT0)" >&2 ;; esac ;; "MNT Reform 2" | "MNT Reform 2 HDMI" | \ "MNT Reform 2 with i.MX8MP Module" | \ "MNT Reform 2 with QUASAR 8550 Module" | \ "MNT Reform 2 with RCORE-DSI RK3588 Module" | \ "MNT Reform 2 with RCORE RK3588 Module" | \ "MNT Pocket Reform with i.MX8MP Module" | \ "MNT Pocket Reform with RCORE RK3588 Module") case "$(readlink /sys/class/power_supply/BAT0)" in ../../devices/platform/*/spi_master/spi1/spi1.0/power_supply/BAT0) : ;; *) echo "E: unexpected link target of /sys/class/power_supply/BAT0: $(readlink /sys/class/power_supply/BAT0)" >&2 ;; esac ;; *) echo "E: unexpected content in /proc/device-tree/model: $(cat /proc/device-tree/model)" >&2 ;; esac fi worddiff() { for word in $1; do case $2 in "$word" | "$word "* | *" $word" | *" $word "*) : ;; *) echo "$word" ;; esac done } if [ "$(tr ' ' '\n' &2 worddiff "$(cat /proc/cmdline)" "$BOOTARGS" | sed 's/^/ + /' >&2 fi if [ -n "$(worddiff "$BOOTARGS" "$(cat /proc/cmdline)")" ]; then echo "I: kernel boot parameters which are the default but your system doesn't use them:" >&2 worddiff "$BOOTARGS" "$(cat /proc/cmdline)" | sed 's/^/ - /' >&2 fi fi if [ "$(tr ' ' '\n' &2 echo "W: This could lead to the luks password prompt being printed to serial instead of your screen." >&2 fi case "$(cat /proc/cmdline)" in *" single "* | "single "* | *" single" | "single") echo "W: Your kernel cmdline has 'single' in it and will boot into rescue mode on each boot. Maybe booting via extlinux.conf failed?" >&2 ;; esac case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with RCORE RK3588 Module" | \ "MNT Reform 2 with RCORE-DSI RK3588 Module" | \ "MNT Reform 2 with RCORE RK3588 Module" | \ "MNT Reform Next with RCORE RK3588 Module") features=$(awk -F": " '/^Features\t: / { print $2; }' /proc/cpuinfo | sort) # features aes, pmull, sha1 and sha2 were found to be missing with wrong TF-A version # https://mntre.com/reform-irc-logs/2025-10-25.log.html # https://tooting.ch/@vimja/115435628986765190 for feature in fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp; do case " $features " in *" $feature "*) : ;; # feature is part of features *) echo "E: /proc/cpuinfo does not list $feature as feature -- wrong TF-A version?" >&2 ;; esac done ;; esac if ! dpkg-query --showformat '${db:Status-Status}\n' --show "linux-headers-$(uname -r)" 2>/dev/null | grep -q '^installed$'; then echo "E: the linux header package linux-headers-$(uname -r) for the currently running kernel is not installed (cannot compile reform2_lpc.ko DKMS module for battery status)" >&2 else # even if the package is installed, the directory might be missing for some reason if [ ! -d "/usr/lib/modules/$(uname -r)/build/include" ]; then echo "E: the kernel header files cannot be found at /usr/lib/modules/$(uname -r)/build/include even though the package linux-headers-$(uname -r) is installed" >&2 fi fi for f in mntre reform_bookworm reform_bookworm-backports; do file="/etc/apt/sources.list.d/${f}.sources" if [ ! -e "$file" ]; then continue fi if [ "$(stat -c %a "$file")" != 666 ]; then # nothing to do continue fi echo "E: $file has insecure permissions 0666, consider a chmod 644" >&2 done for f in . firefox firefox/syspref.js motd-full motd-rescue profile.d profile.d/reform.sh profile.d/reform-setup.sh; do file="/etc/$f" if [ ! -e "$file" ]; then continue fi # only process world-writable files if [ -z "$(find "$file" -maxdepth 0 \( \! -type l \) -perm /o+w)" ]; then continue fi echo "E: $file has insecure permissions (it is world-writable)" >&2 done if [ -e /etc/profile.d/reform-setup.sh ]; then echo "W: reform-setup-wizard failed to clean up /etc/profile.d/reform-setup.sh. It can be safely removed." >&2 fi if [ -e /etc/skel ] && [ "$(stat -c %a /etc/skel)" = "777" ]; then echo "E: /etc/skel has insecure permissions 0777, consider a chmod -R g-w,o-rw" >&2 fi if [ -n "$(find /etc \( \! -type l \) -perm /o+w)" ]; then echo "E: the following files in /etc are world-writable, consider removing world-writable permissions:" >&2 find /etc \( \! -type l \) -perm /o+w >&2 fi if [ -n "$(find /root \( \! -type l \) -perm /o+w)" ]; then echo "E: the following files in /root are world-writable, consider removing world-writable permissions:" >&2 find /root \( \! -type l \) -perm /o+w >&2 fi case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") if [ ! -e /etc/u-boot-menu/conf.d ]; then echo "W: /etc/u-boot-menu/conf.d does not exist -- create it by running reform-display-config" >&2 fi if [ ! -e /etc/u-boot-menu/conf.d/reform.conf ]; then echo "W: /etc/u-boot-menu/conf.d/reform.conf does not exist -- create it by running reform-display-config" >&2 else case "$(cat /proc/device-tree/model)" in "MNT Reform 2") reformconfcontent="# the content of this file is auto-generated by reform-display-config\nU_BOOT_FDT=/freescale/imx8mq-mnt-reform2.dtb\n" ;; "MNT Reform 2 HDMI") reformconfcontent="# the content of this file is auto-generated by reform-display-config\nU_BOOT_FDT=/freescale/imx8mq-mnt-reform2-hdmi.dtb\n" ;; esac if ! printf "$reformconfcontent" | cmp --quiet - /etc/u-boot-menu/conf.d/reform.conf; then echo "W: unexpected content in /etc/u-boot-menu/conf.d/reform.conf:" >&2 printf "$reformconfcontent" | diff -u - /etc/u-boot-menu/conf.d/reform.conf || true echo "W: re-run reform-display-config for the corrent content" >&2 fi fi ;; esac if [ "$OFFLINE" = "yes" ]; then echo "I: skipping the remaining checks because --offline was used" >&2 else # shellcheck disable=SC2016 case "$MIRROR" in mntre.com) if [ "$(apt-get indextargets 'Created-By: Packages' 'Repo-URI: https://mntre.com/reform-debian-repo/' --format '$(RELEASE)' | sort -u)" != "reform" ]; then echo "E: the reform repository is not known to apt" >&2 echo "E: add the following line to your /etc/apt/sources.list to fix this" >&2 echo "deb [arch=arm64 trusted=yes] https://mntre.com/reform-debian-repo reform main" >&2 fi if [ -n "$(apt-get indextargets 'Created-By: Packages' 'Repo-URI: https://reform.debian.net/debian/' --format '$(RELEASE)')" ]; then echo "E: you have the reform.debian.net repository enabled while also using the mntre.com mirror. Consider choosing one or the other but not both." >&2 fi ;; reform.debian.net) release="$(apt-get indextargets 'Created-By: Packages' 'Repo-URI: https://reform.debian.net/debian/' --format '$(RELEASE)')" case "$release" in "") echo "E: unable to obtain release name for reform.debian.net repository" >&2 ;; bookworm*) : ;; trixie*) : ;; *) echo "E: unknown reform.debian.net repository release name: $release" >&2 ;; esac if [ "$(apt-get indextargets 'Created-By: Packages' 'Repo-URI: https://mntre.com/reform-debian-repo/' --format '$(RELEASE)')" = reform ]; then echo "E: you have the mntre.com repository enabled while also using the reform.debian.net mirror. Consider choosing one or the other but not both." >&2 fi ;; *) echo "invalid mirror: $MIRROR" >&2 exit 1 ;; esac # on a311d we need non-free-firmware # shellcheck disable=SC2016 if [ "$NEED_NONFREE" = true ] && ! apt-get indextargets 'Created-By: Packages' 'Origin: Debian' 'Repo-URI: http://deb.debian.org/debian/' --format '$(COMPONENT)' | sort -u | grep --silent non-free-firmware; then echo "W: you do not have non-free-firmware enabled" >&2 echo "W: this is required to install non-free firmware blobs that are required for platforms like Banana Pi A311D" >&2 echo "W: you can add a line like this to your /etc/apt/sources.list:" >&2 echo "deb http://deb.debian.org/debian unstable non-free-firmware" >&2 fi ubooturl="https://source.mnt.re/reform/${UBOOT_PROJECT}/-/jobs/artifacts/${UBOOT_TAG}/raw/$(basename "$DTBPATH" .dtb)-flash.bin?job=build" ubootbin=$(mktemp) ret=0 /usr/lib/apt/apt-helper download-file "$ubooturl" "$ubootbin" "SHA1:$UBOOT_SHA1" >/dev/null || ret=$? if [ "$ret" != 0 ]; then echo "E: download of $ubooturl failed" >&2 else if [ ! -e /boot/flash.bin ]; then echo "W: /boot/flash.bin doesn't exist" >&2 echo "W: You can download the latest version by running as root:" >&2 echo "reform-flash-uboot" >&2 elif ! cmp --quiet /boot/flash.bin "$ubootbin"; then echo "W: /boot/flash.bin is not the latest uboot" >&2 echo "W: You can update it to the latest version by running as root:" >&2 echo "reform-flash-uboot" >&2 fi ubootsize=$(stat --format=%s "$ubootbin") if [ "$EMMC_BOOT" != false ]; then realdev="/dev/${DEV_MMC}" if [ "$DEV_MMC_BOOT0" = true ]; then realdev="/dev/${DEV_MMC}boot0" fi if cmp --quiet --bytes="$((ubootsize - FLASHBIN_OFFSET))" "--ignore-initial=$FLASHBIN_OFFSET:$UBOOT_OFFSET" "$ubootbin" "$realdev" 2>/dev/null; then echo "I: eMMC contains the latest u-boot version ${UBOOT_TAG}" >&2 else echo "W: eMMC does not contain latest uboot" >&2 echo "W: You can update it to the latest version by running as root:" >&2 echo "reform-flash-uboot emmc" >&2 if [ "$EMMC_BOOT" = warn ]; then echo "I: note that updating u-boot on eMMC on your platform is not without risk!" >&2 fi if cmp --quiet --bytes="$((ubootsize - FLASHBIN_OFFSET))" "--ignore-initial=0:$UBOOT_OFFSET" /dev/zero "$realdev" 2>/dev/null; then echo "I: The space where u-boot would've been on eMMC is all zeroes." >&2 fi fi fi if [ "$SD_BOOT" != false ] && [ -e "/dev/$DEV_SD" ]; then if cmp --quiet --bytes="$((ubootsize - FLASHBIN_OFFSET))" --ignore-initial="$FLASHBIN_OFFSET:$UBOOT_OFFSET" "$ubootbin" "/dev/$DEV_SD" 2>/dev/null; then echo "I: SD-card contains the latest u-boot version ${UBOOT_TAG}" >&2 else echo "W: SD-Card does not contain latest uboot" >&2 echo "W: You can update it to the latest version by running as root:" >&2 echo "reform-flash-uboot sd" >&2 if [ "$SD_BOOT" = warn ]; then echo "I: note that updating u-boot on SD-card on your platform is not without risk!" >&2 fi if cmp --quiet --bytes="$((ubootsize - FLASHBIN_OFFSET))" "--ignore-initial=0:$UBOOT_OFFSET" /dev/zero "/dev/$DEV_SD" 2>/dev/null; then echo "I: The space where u-boot would've been on SD-Card is all zeroes." >&2 fi fi fi fi rm "$ubootbin" case "$(cat /proc/device-tree/model)" in "MNT Reform 2 with LS1028A Module") mhdpfwbin=$(mktemp) /usr/lib/apt/apt-helper download-file \ "https://source.mnt.re/reform/reform-ls1028a-uboot/-/raw/main/ls1028a-mhdpfw.bin" \ "$mhdpfwbin" "SHA1:fa96b9aa59d7c1e9e6ee1c0375d0bcc8f8e5b78c" >/dev/null if [ ! -e /boot/ls1028a-mhdpfw.bin ]; then echo "W: /boot/ls1028a-mhdpfw.bin doesn't exist" >&2 echo "W: You can download the latest version by running as root:" >&2 echo "reform-flash-uboot" >&2 elif ! cmp --quiet /boot/ls1028a-mhdpfw.bin "$mhdpfwbin"; then echo "W: /boot/ls1028a-mhdpfw.bin is not the latest uboot" >&2 echo "W: You can update it to the latest version by running as root:" >&2 echo "reform-flash-uboot" >&2 fi rm "$mhdpfwbin" ;; esac if dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-arm64" 2>/dev/null | grep -q '^installed$'; then case "$MIRROR" in mntre.com) if ! apt-cache policy linux-image-arm64 | grep --quiet mntre.com; then echo "E: the linux-image-arm64 package cannot come from the MNT repos" >&2 fi ;; reform.debian.net) if ! apt-cache policy linux-image-arm64 | grep --quiet /reform.debian.net/; then echo "E: the linux-image-arm64 package cannot come from the reform.debian.net repos" >&2 fi ;; *) echo "invalid mirror: $MIRROR" >&2 exit 1 ;; esac fi if dpkg-query --showformat '${db:Status-Status}\n' --show "linux-image-mnt-reform-arm64" 2>/dev/null | grep -q '^installed$'; then case "$MIRROR" in mntre.com) if ! apt-cache policy linux-image-mnt-reform-arm64 | grep --quiet mntre.com; then echo "E: the linux-image-mnt-reform-arm64 package cannot come from the MNT repos" >&2 fi ;; reform.debian.net) if ! apt-cache policy linux-image-mnt-reform-arm64 | grep --quiet /reform.debian.net/; then echo "E: the linux-image-mnt-reform-arm64 package cannot come from the reform.debian.net repos" >&2 fi ;; *) echo "invalid mirror: $MIRROR" >&2 exit 1 ;; esac fi fi reform-tools-1.83/bin/reform-compstat000077500000000000000000000067551513102710000177200ustar00rootroot00000000000000#!/usr/bin/python3 # SPDX-License-Identifier: GPL-3.0+ # Copyright 2022-2022 Lukas F. Hartmann # Copyright 2024-2025 Johannes Schauer Marin Rodrigues # # Do not run shellcheck on this file # shellcheck disable=SC1071 import time, psutil, sys, getopt def draw_bar(val, maxval): if val < 0: return "    " bars = ["    ", "▁", "▁", "▂", "▂", "▃", "▄", "▅", "▆", "▆", "▇", "█"] return bars[int((len(bars) - 1) * min(max(0, val / maxval), 1))] def draw_chart(lst, maxval): chart = "" l = len(lst) for x in range(l): chart += draw_bar(lst[l - x - 1], maxval) return chart def history_insert(lst, item, depth): lst.insert(0, item) if len(lst) > depth: lst.pop() return lst def usage(): print( "Visualize CPU usage and disk read/writes as text using box-drawing characters.", file=sys.stderr, ) print(file=sys.stderr) print( "Usage: compstat -d -i ", file=sys.stderr, ) print(file=sys.stderr) print("Options:", file=sys.stderr) print(" --help Display this help text and exit.", file=sys.stderr) print(" -d NUM Set number of bars to NUM.", file=sys.stderr) print(" -i SECS Set the update interval to SEC seconds.", file=sys.stderr) print(" --percpu Display the CPU utilization per CPU core.", file=sys.stderr) def main(argv): depth = 5 interval = 0.3 percpu = False try: opts, args = getopt.getopt(argv, "hd:i:", longopts=["percpu", "help"]) except getopt.GetoptError as e: print(f"E: {e.msg}", file=sys.stderr) print(file=sys.stderr) usage() sys.exit(2) for opt, arg in opts: if opt == "-d": depth = int(arg) elif opt == "-i": interval = float(arg) elif opt == "--percpu": percpu = True elif opt in ["-h", "--help"]: usage() exit() if percpu: cpu_history = {i: [] for i in range(psutil.cpu_count())} else: cpu_history = [] read_history = [] write_history = [] ldisk_activity = psutil.disk_io_counters() while True: cpu_usage = psutil.cpu_percent(percpu=percpu) disk_activity = psutil.disk_io_counters() if percpu: for i, cpu in enumerate(cpu_usage): history_insert(cpu_history[i], cpu, depth) else: history_insert(cpu_history, cpu_usage, depth) history_insert( read_history, max(0, disk_activity.read_time - ldisk_activity.read_time) / (interval * 1000), depth, ) history_insert( write_history, max(0, disk_activity.write_time - ldisk_activity.write_time) / (interval * 1000), depth, ) print( "CPU " + ( ( "".join( draw_chart(cpu_history[i], 98.0) for i in range(psutil.cpu_count()) ) ) if percpu else draw_chart(cpu_history, 98.0) ) + " R/W " + draw_chart(read_history, 0.98) + " " + draw_chart(write_history, 0.98), flush=True, ) ldisk_activity = disk_activity time.sleep(interval) main(sys.argv[1:]) reform-tools-1.83/bin/reform-config000077500000000000000000000013421513102710000173160ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2020-2022 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Run dpkg-reconfigure for keyboard-configuration and tzdata under sudo" >&2 echo "to configure the keyboard layout and timezone." >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ "$#" -gt 0 ]; then if [ "$1" != "--help" ]; then echo "E: too many arguments" >&2 usage exit 1 fi usage exit 0 fi sudo dpkg-reconfigure keyboard-configuration sudo systemctl restart console-setup sudo dpkg-reconfigure tzdata reform-tools-1.83/bin/reform-display-config000077500000000000000000000064541513102710000207720ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2020-2023 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -e usage() { echo "On the i.MX8MQ, choose whether to use the single or dual display device tree" >&2 echo "by writing the correct value into /etc/flash-kernel/machine and re-generating" >&2 echo "the initramfs and running flash-kernel." >&2 echo >&2 echo "Usage: $0 [--help] [--emmc] dual|single" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 echo " --emmc Record choice on /boot on eMMC." >&2 } if [ "$#" -gt 0 ] && [ "$1" = "--help" ]; then usage exit 0 fi if [ "$(id -u)" -ne 0 ]; then echo "reform-display-config has to be run as root / using sudo." exit fi case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") : ;; *) echo "Sorry, reform-display-config is only supported on MNT Reform 2 with i.MX8MQ processor module." exit 1 ;; esac CHOICE="$1" BOOTPART="mmcblk1p1" BOOTDISK="SD card" if [ "--emmc" = "$1" ]; then CHOICE="$2" BOOTPART="mmcblk0p1" BOOTDISK="eMMC" if [ ! -b "/dev/mmcblk0p1" ]; then echo "/dev/mmcblk0p1 doesn't exist -- run reform-flash-rescue" >&2 exit 1 fi fi # even if u-boot-menu is not installed, create the config file so that once it # is installed, it will immediately work without having to re-run # reform-display-config mkdir -p "/etc/u-boot-menu/conf.d/" case "$CHOICE" in dual) echo "MNT Reform 2 HDMI" >/etc/flash-kernel/machine cat </etc/u-boot-menu/conf.d/reform.conf # the content of this file is auto-generated by reform-display-config U_BOOT_FDT=/freescale/imx8mq-mnt-reform2-hdmi.dtb END ;; single) echo "MNT Reform 2" >/etc/flash-kernel/machine cat </etc/u-boot-menu/conf.d/reform.conf # the content of this file is auto-generated by reform-display-config U_BOOT_FDT=/freescale/imx8mq-mnt-reform2.dtb END ;; *) echo "Usage: " echo " reform-display-config dual Select dual-display support (internal + HDMI)." echo " reform-display-config single Select only internal display (turns off HDMI)." echo " reform-display-config --emmc dual|single Record choice on eMMC." exit ;; esac if ! findmnt --noheadings --source /dev/$BOOTPART --mountpoint /boot >/dev/null; then echo "Assuming boot files are on $BOOTDISK, but your system doesn't have it mounted." >&2 echo "Mounting /dev/$BOOTPART on /boot." >&2 if mountpoint --quiet /boot; then echo "/boot already has something mounted on it" >&2 exit 1 fi if [ -n "$(lsblk --noheadings --output=MOUNTPOINT /dev/$BOOTPART)" ]; then echo "/dev/$BOOTPART is still in use" >&2 exit 1 fi trap "umount /boot" EXIT INT TERM mount /dev/$BOOTPART /boot fi if command -v flash-kernel >/dev/null; then flash-kernel fi if command -v u-boot-update >/dev/null; then u-boot-update fi if [ "--emmc" = "$1" ]; then echo "Your /boot partition is on emmc (/dev/$BOOTPART)." >&2 else echo "Your /boot partition is on your SD-Card (/dev/$BOOTPART)." >&2 fi echo "Restart MNT Reform (type: reboot) after saving your work to activate the changes." # exit trap will automatically unmount /boot if necessary once the script exits reform-tools-1.83/bin/reform-emmc-bootstrap000077500000000000000000000217611513102710000210140ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Set up eMMC with a /boot partition which loads the OS from the SSD." >&2 echo "This tool is usually run from a rescue system on an SD-card to" >&2 echo "migrate a system from one SoM to another." >&2 echo "WARNING: this tool will erase the contents of your eMMC." >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 echo >&2 echo "This utility is not able to create a working /boot partition on" >&2 echo "eMMC for arbitrary installations. It currently understands" >&2 echo >&2 echo " - single partition on SSD with the rootfs" >&2 echo " - two partitions on SSD, one with the rootfs the other swap" >&2 echo " - the luks/lvm setup created by reform-setup-encrypted-disk" >&2 } is_current_root() { FSTAB_ROOT="$(findmnt --fstab --noheadings --evaluate --mountpoint / --output SOURCE)" [ "${1}" = "${FSTAB_ROOT}" ] } if [ "$#" -gt 0 ]; then case $1 in --help) usage exit 0 ;; *) echo "E: unknown option: $1" >&2 ;; esac fi # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi cleanup() { if [ -n "$MOUNTROOT" ]; then if mountpoint --quiet "$MOUNTROOT"; then umount --recursive "$MOUNTROOT" fi rmdir "$MOUNTROOT" fi if ! is_current_root /dev/reformvg/root; then if [ -e /dev/reformvg ]; then vgchange -an reformvg fi if [ -e /dev/mapper/reform_crypt ]; then cryptsetup luksClose reform_crypt fi fi } main() { ROOTPART="$1" trap cleanup EXIT INT TERM MOUNTROOT="$(lsblk --noheadings --output=MOUNTPOINT "$ROOTPART")" if [ -z "$MOUNTROOT" ]; then if ! get_exclusive_write_lock "$ROOTPART"; then echo "E: device $ROOTPART is still in use" >&2 exit 1 fi MOUNTROOT="$(mktemp --tmpdir --directory reform-emmc-bootstrap.XXXXXXXXXX)" mount "$ROOTPART" "$MOUNTROOT" for dir in dev sys proc; do if [ ! -d "$MOUNTROOT/$dir" ]; then echo "E: The directory '$dir' does not exist in the filesystem on $ROOTPART" >&2 exit 1 fi done mount -o bind /dev "$MOUNTROOT/dev/" mount -t sysfs sys "$MOUNTROOT/sys/" mount -t proc proc "$MOUNTROOT/proc/" elif [ -n "$MOUNTROOT" ]; then if [ "$MOUNTROOT" = "/" ]; then if mountpoint --quiet "/boot"; then echo "E: /boot still has something mounted on it" >&2 exit 1 fi else echo "E: $ROOTPART is still being mounted on $MOUNTROOT -- umount before proceeding" >&2 exit 1 fi fi # comment out old /etc/fstab sed -e 's/^/#/' "$MOUNTROOT/etc/fstab" >"$MOUNTROOT/etc/fstab.new" # write new mountpoints cat <>"$MOUNTROOT/etc/fstab.new" $ROOTPART / auto errors=remount-ro 0 1 /dev/${DEV_MMC}p1 /boot auto errors=remount-ro 0 1 END cat </dev/null; then echo "I: No kernel package installed." >&2 printf "Do you want this script to install linux-image-mnt-reform-arm64 for you? [y/N] " read -r response if [ "$response" != "y" ]; then echo "E: no kernel packages installed, exiting." >&2 exit 1 fi chroot "$MOUNTROOT" apt-get install --yes linux-image-mnt-reform-arm64 else # upgrade linux-image-mnt-reform-arm64 in case that the installed kernel is # not downloadable anymore chroot "$MOUNTROOT" apt-get install --yes --only-upgrade linux-image-mnt-reform-arm64 fi # also regenerate everything for other installed kernel packages chroot "$MOUNTROOT" dpkg-query --search '/boot/vmlinuz*' | sed 's/:.*//' | while read -r pkg; do # if a package cannot be downloaded, apt will still exit # successfully chroot "$MOUNTROOT" apt-get install --yes --reinstall "$pkg" done if [ -z "$(find "$MOUNTROOT/boot" -name 'vmlinuz-*')" ]; then echo "E: no kernel images were installed into /boot" >&2 exit 1 fi if [ "$MOUNTROOT" != "/" ]; then umount "$MOUNTROOT" --recursive else # if we are working on /, unmount /boot as that is required for reform-boot-config umount /boot fi reform-boot-config --emmc "$ROOTPART" trap - EXIT INT TERM } # eMMC device is being used (case 1): mount points are known, show them. Includes swap. if [ -n "$(lsblk --noheadings --output=MOUNTPOINT "/dev/${DEV_MMC}")" ]; then echo "E: eMMC has the following mounted volumes, unmount them before running this tool" >&2 lsblk --noheadings --output=MOUNTPOINT "/dev/${DEV_MMC}" | xargs --no-run-if-empty -I '{}' echo "E: {}" >&2 exit 1 fi # eMMC device is being used (case 2): there are not file systems directly mounted on the block device # but it is opened by consumers like device-mapper, raid or luks, to name some examples. In this situation # it is not trivial to locate the consumer. # reform-boot-config does the same thing (could share code?) get_exclusive_write_lock() { ret=0 python3 - "$1" <&2 exit 1 fi MOUNTROOT= disk_label=$(parted --json "/dev/${DEV_SSD}" print 2>/dev/null | jq --raw-output '.disk.label') case $disk_label in msdos | gpt) num_parts=$(parted --json "/dev/${DEV_SSD}" print 2>/dev/null | jq --raw-output '.disk.partitions | length') DEV_SSD_BASE="$DEV_SSD" if [ "$DEV_SSD" != "sda" ]; then DEV_SSD_BASE="${DEV_SSD}p" fi case $num_parts in 1) echo "I: assuming root file system on /dev/${DEV_SSD_BASE}1" >&2 main "/dev/${DEV_SSD_BASE}1" ;; 2) # assume one partition to be swap and the other to be the rootfs part1type=$(lsblk --nodeps --noheadings --output=FSTYPE "/dev/${DEV_SSD_BASE}1") part2type=$(lsblk --nodeps --noheadings --output=FSTYPE "/dev/${DEV_SSD_BASE}2") case "${part1type}_${part2type}" in swap_ext4) echo "I: assuming root file system on /dev/${DEV_SSD_BASE}2" >&2 main "/dev/${DEV_SSD_BASE}2" ;; ext4_swap) echo "I: assuming root file system on /dev/${DEV_SSD_BASE}1" >&2 main "/dev/${DEV_SSD_BASE}1" ;; *) echo "E: no support for partitions other than one swap and one ext4" >&2 exit 1 ;; esac ;; *) echo "E: more than 2 partitions not implemented yet" >&2 exit 1 ;; esac ;; unknown) echo "I: no partition table found trying to open LUKS device" >&2 if ! is_current_root /dev/reformvg/root; then if [ "$(lsblk --nodeps --noheadings --output=FSTYPE "/dev/${DEV_SSD}")" != "crypto_LUKS" ]; then echo "W: SSD (/dev/${DEV_SSD}) does not look like a LUKS device" >&2 fi cryptsetup luksOpen "/dev/${DEV_SSD}" reform_crypt vgchange -ay reformvg fi main /dev/reformvg/root if ! is_current_root /dev/reformvg/root; then vgchange -an reformvg cryptsetup luksClose reform_crypt fi ;; *) ;; esac if [ "$EMMC_BOOT" != false ]; then reform-flash-uboot emmc fi reform-tools-1.83/bin/reform-flash-rescue000077500000000000000000000241441513102710000204370ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2022-2025 Johannes Schauer Marin Rodrigues # Copyright 2023 Lukas F. Hartmann set -eu usage() { echo "Download and flash the latest sysimage-v5 to eMMC." >&2 echo "Calls reform-flash-uboot to install u-boot on eMMC, grows the root" >&2 echo "filesystem and adjusts filesystem labels." >&2 echo "Calls reform-boot-config to set up /boot on eMMC to load the rootfs from eMMC." >&2 echo >&2 echo "Usage: $0 [--help] [--force] [--mirror={mntre.com,reform.debian.net}]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 echo " --mirror=MIRROR Force MIRROR, either mntre.com (default) or reform.debian.net" >&2 echo " -f, --force No user interaction, overwriting data without confirmation" >&2 echo " and flash to devices marked as 'warn'" >&2 } FORCE=false MIRROR="mntre.com" while getopts :h-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; -) case "$OPTARG" in help) usage exit 0 ;; force) FORCE=true ;; mirror) if [ "$OPTIND" -gt "$#" ]; then echo "E: missing argument for --mirror" >&2 exit 1 fi MIRROR="$(nth_arg "$OPTIND" "$@")" OPTIND=$((OPTIND + 1)) ;; mirror=*) MIRROR="${OPTARG#*=}" ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; :) echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" if [ "$#" -gt 0 ]; then usage exit 1 fi if [ "$MIRROR" != "mntre.com" ] && [ "$MIRROR" != "reform.debian.net" ]; then echo "E: invalid value for --mirror: $MIRROR -- only mntre.com and reform.debian.net are supported" >&2 exit 1 fi # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi case $EMMC_USE in false) echo "E: writing to eMMC not supported on $(cat /proc/device-tree/model)" >&2 exit 1 ;; warn) echo "W: Using eMMC on $(cat /proc/device-tree/model) is not without risk." >&2 echo "W: For example, flashing the wrong u-boot or if the flashing process goes wrong, it is" >&2 echo "W: possible to soft-brick your board. Restoring it might need some extra hardware." >&2 echo "W: Please only proceed if you are sure that the benefits outweigh the risks for you." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi ;; esac # Only run reform-flash-uboot if u-boot is written to the boot0 partition. # If u-boot is on the regular disk, then it will be overwritten by flashing the # image later, so we do not need to flash it here. if [ "$DEV_MMC_BOOT0" = true ] && [ "$EMMC_BOOT" != false ]; then if [ "$EMMC_BOOT" = warn ]; then echo "W: Flashing u-boot to eMMC on $(cat /proc/device-tree/model) is not without risk." >&2 echo "W: If you flash the wrong u-boot or if the flashing process goes wrong, it is" >&2 echo "W: possible to soft-brick your board. Restoring it might need some extra hardware." >&2 echo "W: Please only proceed if you are sure that the benefits outweigh the risks for you." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi fi if [ ! -e "/sys/class/block/${DEV_MMC}boot0/force_ro" ]; then echo "/sys/class/block/${DEV_MMC}boot0/force_ro doesn't exist" >&2 exit 1 fi if [ ! -w "/sys/class/block/${DEV_MMC}boot0/force_ro" ]; then echo "/sys/class/block/${DEV_MMC}boot0/force_ro is not writable" >&2 exit 1 fi if [ ! -e /boot/flash.bin ]; then echo "/boot/flash.bin doesn't exist" >&2 if [ "$FORCE" = true ]; then echo "Running reform-flash-uboot without user interaction because of --force" >&2 response="y" else printf "Should reform-flash-uboot be run to download it? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit 1 fi reform-flash-uboot fi for p in $(lsblk --list --noheadings --output=NAME "/dev/$DEV_MMC") "${DEV_MMC}boot0" "${DEV_MMC}boot1"; do [ -b "/dev/$p" ] || continue if [ -n "$(lsblk --nodeps --noheadings --output=MOUNTPOINT "/dev/$p")" ]; then echo "/dev/$p is still in use" >&2 exit 1 fi done echo "WARNING: This overwrites the bootloader on the eMMC rescue disk with the" >&2 echo "backup stored as /boot/flash.bin!" >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi if [ "$FORCE" = true ]; then reform-flash-uboot --force --offline emmc else reform-flash-uboot --offline emmc fi echo "Bootloader was successfully written to /dev/${DEV_MMC}boot0." >&2 echo "" >&2 fi echo "Do you want to download and install the latest sysimage-v5 to eMMC as well?" >&2 echo "This step needs a working internet connection and either wget or curl installed." >&2 echo "" >&2 echo "WARNING: This overwrites partitions on eMMC, deleting all data." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi if [ "$MIRROR" = "mntre.com" ]; then URL="https://source.mnt.re/reform/reform-system-image/-/jobs/artifacts/main/raw/${SYSIMAGE}.img.gz?job=build" DECOMPRESSOR=gzip if grep --silent '^URIs: https://reform.debian.net/debian/\?$' /etc/apt/sources.list.d/reform*.sources 2>/dev/null; then echo "The current system image is configured to use the Debian stable mirror from" >&2 echo "reform.debian.net. Do you want to flash the system image from reform.debian.net" >&2 echo 'to your eMMC? If you answer anything but "y", the official MNT system image will' >&2 echo "be downloaded and written to eMMC instead." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Do you want to download and use the rescue system image from reform.debian.net? [y/N] " read -r response fi if [ "$response" = "y" ]; then # no need to use the backports kernel because a311d is not # allowed to write to emmc anyways URL="https://reform.debian.net/images/${SYSIMAGE}.img.xz" DECOMPRESSOR=xz fi fi elif [ "$MIRROR" = "reform.debian.net" ]; then URL="https://reform.debian.net/images/${SYSIMAGE}.img.xz" DECOMPRESSOR=xz else echo "E: unsupported value for --mirror: $MIRROR" >&2 exit 1 fi echo "Downloading $URL..." # flash with bmaptool if available and use dd otherwise if command -v bmaptool >/dev/null 2>&1; then case $URL in https://reform.debian.net/images/*) # force gpg signature verification when downloading from reform.d.n bmaptool copy \ --fingerprint 3AC6EB840FA5CE3FF31BAD80EF93221F8A44FEB2 \ --keyring /usr/share/keyrings/debian-keyring.gpg \ "$URL" "/dev/$DEV_MMC" ;; *) bmaptool copy "$URL" "/dev/$DEV_MMC" ;; esac else { if curl --version >/dev/null; then curl --silent --location "$URL" elif wget --version >/dev/null; then wget --quiet --output-document=- "$URL" else echo "need curl or wget" >&2 exit 1 fi } | "$DECOMPRESSOR" --decompress --to-stdout | dd of="/dev/$DEV_MMC" status=progress fi partprobe "/dev/$DEV_MMC" # resize the second partition to fill the emmc parted --script --machine "/dev/$DEV_MMC" resizepart 2 100% partprobe "/dev/$DEV_MMC" sync # resize the filesystem e2fsck -fy "/dev/${DEV_MMC}p2" resize2fs -p "/dev/${DEV_MMC}p2" e2fsck -fy "/dev/${DEV_MMC}p2" # overwrite the partition label e2label "/dev/${DEV_MMC}p1" reformemmcboot e2label "/dev/${DEV_MMC}p2" reformemmcroot # regenerate UUIDs tune2fs "/dev/${DEV_MMC}p1" -U random tune2fs "/dev/${DEV_MMC}p2" -U random # TODO: also regenerate partition uuids if partition table is GUID and not DOS # The rescue system image that we downloaded and wrote to the eMMC above is # configured to use the rootfs on the SD-Card but we want the initramfs on eMMC # to boot the rootfs on eMMC and not the rootfs from SD-Card. Use # reform-boot-config to update the /etc/fstab and initramfs to use the eMMC # # We use --no-copy-old-boot because by flashing the system image, the new /boot # partition already has the correct contents and we don't want to use the /boot # partition of the current system as that one might be wildly different. if [ "$FORCE" = true ]; then reform-boot-config --force --no-copy-old-boot --emmc emmc else reform-boot-config --no-copy-old-boot --emmc emmc fi case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") echo "If the SoM dip switch is turned off and no SD-Card is present, your" >&2 echo "system will now boot from eMMC and load the rootfs from there as well." >&2 echo "If you want to boot from eMMC but load the rootfs from elsewhere, run" >&2 echo "reform-boot-config with the --emmc switch." >&2 ;; esac reform-tools-1.83/bin/reform-flash-uboot000077500000000000000000000414641513102710000203050ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2023-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Usage: " >&2 echo " reform-flash-uboot [--offline] [--force] [DEVICE...]" >&2 echo >&2 echo "Download and flash u-boot for the current platform to DEVICE. Unless" >&2 echo "the --offline option is given, download latest u-boot to /boot/flash.bin." >&2 echo "If one or more DEVICE is given, flash /boot/flash.bin with the correct" >&2 echo "offset to DEVICE. The short-hands 'sd' and 'emmc' can be used to flash" >&2 echo "u-boot to the SD-card or eMMC, respectively." >&2 echo >&2 echo "Options:" >&2 echo " DEVICE One or more block device(s) to flash or short-hands 'sd' or 'emmc'" >&2 echo " -h, --help Display this help and exit." >&2 echo " -i IMAGE, --image=IMAGE" >&2 echo " Custom image (default: /boot/flash.bin). Implies --offline and" >&2 echo " disables checksum verification." >&2 echo " --offline Do not download latest u-boot to /boot/flash.bin." >&2 echo " -f, --force No user interaction and flash to devices marked as 'warn'" >&2 echo " --zero Fill the space where u-boot would've been flashed to with zeroes" >&2 echo " --machine=MACHINE" >&2 echo " Force a different machine than the one this script is running on" >&2 echo " using the values from /proc/device-tree/model or the basenames of" >&2 echo " config files in /usr/share/reform-tools/machines/. This will change" >&2 echo " flashing offsets. Implies --offline. Requires a custom u-boot binary" >&2 echo " via --image. Device short-hands are disabled. Flashing to emmc is" >&2 echo " disabled." >&2 echo " --verbose Print with higher verbosity." >&2 echo " --dry-run Do not perform the actual flashing." >&2 echo "" >&2 } nth_arg() { shift "$1" printf "%s" "$1" } OFFLINE= FORCE= IMAGE= ZERO= MACHINE= VERBOSE= DRYRUN= while getopts :hfi:-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; f) FORCE=yes ;; i) IMAGE="$OPTARG" ;; -) case "$OPTARG" in help) usage exit 0 ;; force) FORCE=yes ;; image) if [ "$OPTIND" -gt "$#" ]; then echo "E: missing argument for --image" >&2 exit 1 fi IMAGE="$(nth_arg "$OPTIND" "$@")" OPTIND=$((OPTIND + 1)) OFFLINE=yes ;; image=*) IMAGE="${OPTARG#*=}" OFFLINE=yes ;; machine) if [ "$OPTIND" -gt "$#" ]; then echo "E: missing argument for --machine" >&2 exit 1 fi MACHINE="$(nth_arg "$OPTIND" "$@")" OPTIND=$((OPTIND + 1)) OFFLINE=yes ;; machine=*) MACHINE="${OPTARG#*=}" OFFLINE=yes ;; offline) OFFLINE=yes ;; zero) ZERO=yes ;; verbose) VERBOSE=yes ;; dry-run) DRYRUN=yes ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; ':') echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" if [ "$(id -u)" -ne 0 ] && [ "$DRYRUN" != "yes" ]; then echo "reform-flash-uboot has to be run as root / using sudo." exit 1 fi if ! command -v parted >/dev/null && [ "$DRYRUN" = "yes" ]; then # parted was not found in $PATH # try adding /bin/sbin and /sbin to $PATH PATH="$PATH:/usr/sbin:/sbin" export PATH fi if ! command -v parted >/dev/null; then echo "E: unable to find parted utility" >&2 exit 1 fi # Even with --machine is used to override the machine config to load, we are # loading the native machine config to be able to forbid flashing to eMMC. # Since eMMC might be named differently in the config passed via --machine # we need to load the native one for that information first. # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi if [ -n "$MACHINE" ]; then if [ -z "$IMAGE" ]; then echo "E: using the --machine option requires a custom image passed via the --image option" >&2 exit 1 fi for dev in "$@"; do case $dev in "/dev/${DEV_MMC}"*) echo "E: flashing to eMMC not supported with --machine" >&2 exit 1 ;; "sd" | "emmc") echo "E: short-hands not supported with --machine. Supply the device path explicitly." >&2 exit 1 ;; esac done case $MACHINE in *"/"*) echo "E: invalid machine name (contains a slash)" >&2 exit 1 ;; *.conf) echo "E: invalid machine name (ends with .conf)" >&2 exit 1 ;; esac # shellcheck source=/dev/null if [ -e "./machines/$MACHINE.conf" ]; then . "./machines/$MACHINE.conf" elif [ -e "/usr/share/reform-tools/machines/$MACHINE.conf" ]; then . "/usr/share/reform-tools/machines/$MACHINE.conf" else echo "E: unable to find config for $MACHINE" >&2 exit 1 fi # Make sure that the given device name can never be interpreted as meaning # the eMMC. This is because the other machine config might indicate a device # to be eMMC which it is not on this platform. DEV_MMC="i-do-not-exist" fi for dev in "$@"; do case $dev in emmc | "/dev/${DEV_MMC}"*) if [ "$EMMC_BOOT" = false ]; then echo "E: writing uboot to eMMC not supported on $(cat /proc/device-tree/model)" >&2 exit 1 fi ;; sd | "/dev/${DEV_SD}"*) if [ "$SD_BOOT" = false ]; then printf "E: Refusing to write u-boot for this platform to SD-Card because this SoM is unable to load u-boot from SD-Card: " >&2 if [ -z "$MACHINE" ]; then printf "%s\n" "$(cat /proc/device-tree/model)" >&2 else echo "$MACHINE" >&2 fi exit 1 fi ;; esac done if [ "$OFFLINE" != "yes" ]; then if echo "$UBOOT_SHA1 /boot/flash.bin" | sha1sum --strict --check >/dev/null 2>&1; then echo "I: /boot/flash.bin is up-to-date and has expected sha1sum -- not downloading it again" >&2 else echo "I: Downloading uboot to /boot/flash.bin and comparing checksum" >&2 ubooturl="https://source.mnt.re/reform/${UBOOT_PROJECT}/-/jobs/artifacts/${UBOOT_TAG}/raw/$(basename "$DTBPATH" .dtb)-flash.bin?job=build" /usr/lib/apt/apt-helper -oAPT::Sandbox::User=root download-file "$ubooturl" "/boot/flash.bin" "SHA1:$UBOOT_SHA1" fi # download mhdpfw.bin on ls1028a case "$(cat /proc/device-tree/model)" in "MNT Reform 2 with LS1028A Module") if echo "fa96b9aa59d7c1e9e6ee1c0375d0bcc8f8e5b78c /boot/ls1028a-mhdpfw.bin"; then echo "I: /boot/ls1028a-mhdpfw.bin is up-to-date -- not downloading it again" >&2 else echo "I: Downloading LS1028A MHDP firmware to /boot/ls1028a-mhdpfw.bin and comparing checksum" >&2 /usr/lib/apt/apt-helper -oAPT::Sandbox::User=root download-file \ "https://source.mnt.re/reform/reform-ls1028a-uboot/-/raw/main/ls1028a-mhdpfw.bin" \ "/boot/ls1028a-mhdpfw.bin" \ "SHA1:fa96b9aa59d7c1e9e6ee1c0375d0bcc8f8e5b78c" fi ;; esac fi if [ "$#" -eq 0 ]; then echo "I: No device unto which to flash uboot provided. Exiting." >&2 exit 0 fi if [ -z "$IMAGE" ]; then if [ ! -e /boot/flash.bin ]; then echo "E: /boot/flash.bin does not exist" >&2 exit 1 fi if ! echo "$UBOOT_SHA1 /boot/flash.bin" | sha1sum --strict --check >/dev/null 2>&1; then echo "Incorrect checksum for /boot/flash.bin" >&2 echo "Either flash a custom image with --image, or run without --offline to download the latest uboot version" >&2 exit 1 fi IMAGE="/boot/flash.bin" fi if [ ! -e "$IMAGE" ]; then echo "E: $IMAGE does not exist" >&2 exit 1 fi ubootsize=$(stat --format=%s "$IMAGE") # check if there is enough free space at the beginning of the disk for dev in "$@"; do case $dev in emmc | "/dev/${DEV_MMC}"*) if [ "$DEV_MMC_BOOT0" = true ]; then # there are no partitions on boot0, so no need to check here continue else realdev=/dev/${DEV_MMC} fi ;; sd) realdev=/dev/${DEV_SD} ;; *) realdev="$dev" ;; esac if [ ! -e "$realdev" ]; then if [ "$DRYRUN" = "yes" ]; then echo "S: $realdev does not exist but that's okay because this is a simulation" >&2 continue else echo "E: $realdev does not exist" >&2 exit 1 fi elif [ ! -b "$realdev" ]; then if [ "$DRYRUN" = "yes" ]; then echo "S: $realdev is not a block device but that's okay because this is a simulation" >&2 continue else echo "E: $realdev is not a block device" >&2 exit 1 fi elif [ ! -r "$realdev" ]; then if [ "$DRYRUN" = "yes" ]; then echo "S: $realdev is not readable but that's okay because this is a simulation" >&2 continue else echo "E: $realdev is not readable" >&2 exit 1 fi fi disk_label=$(parted --json --script "$realdev" unit B print 2>/dev/null | jq --raw-output '.disk.label') # no further tests for disks without a partition table case $disk_label in unknown) echo "I: No partition table found on $realdev" >&2 continue ;; msdos) if [ "$UBOOT_OFFSET" -lt 512 ]; then echo "E: u-boot would be flashed with an offset of $UBOOT_OFFSET which would overwrite parts of the" >&2 echo "E: MBR partition table which requires 512 bytes of space at the beginning of $realdev" >&2 exit 1 fi ;; gpt) if [ "$UBOOT_OFFSET" -lt 17408 ]; then echo "E: u-boot would be flashed with an offset of $UBOOT_OFFSET which would overwrite parts of the" >&2 echo "E: GUID partition table which requires 17408 bytes of space at the beginning of $realdev" >&2 exit 1 fi ;; esac num_parts=$(parted --json --script "$realdev" unit B print | jq --raw-output '.disk.partitions | length') if [ "$num_parts" -eq 0 ]; then echo "I: No partition was found on $realdev" >&2 continue fi firstpartstart=$(parted --json --script "$realdev" unit B print | jq --raw-output '.disk.partitions[0].start') # strip off trailing B firstpartstart=${firstpartstart%B} if [ "$((UBOOT_OFFSET - FLASHBIN_OFFSET + ubootsize))" -ge "$firstpartstart" ]; then echo "E: The first partition on $realdev starts at $firstpartstart and would be overwritten by uboot" >&2 echo "E: make sure that the first $((UBOOT_OFFSET - FLASHBIN_OFFSET + ubootsize)) bytes are free on $realdev" >&2 exit 1 fi done # rk3588 and a311d u-boot version 2026-01-11 starts preferring NVMe over eMMC, so warn the # user about it in case they have a bootflow on NVMe but want to use eMMC # for their /boot instead case $(findmnt --noheadings --evaluate --mountpoint /boot --output SOURCE) in "/dev/${DEV_MMC}"*) case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with BPI-CM4 Module" | \ "MNT Pocket Reform with RCORE RK3588 Module" | \ "MNT Reform 2 with BPI-CM4 Module" | \ "MNT Reform 2 with RCORE-DSI RK3588 Module" | \ "MNT Reform 2 with RCORE RK3588 Module" | \ "MNT Reform Next with RCORE RK3588 Module") if dpkg --compare-versions "$UBOOT_TAG" "ge" "2026-01-11"; then echo "W: u-boot version 2026-01-11 for A311D and RK3588 moved the bootflow for NVMe to be preferred over eMMC." >&2 echo "W: Make sure that you do not have a boot.scr or extlinux.conf on your NVMe if you were" >&2 echo "W: using eMMC for your /boot before" >&2 if [ "$FORCE" = "yes" ]; then echo "Proceeding without user interaction because of --force" >&2 response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi fi ;; esac ;; esac if [ "$EMMC_BOOT" = warn ] && [ "$FORCE" != "yes" ]; then for dev in "$@"; do case $dev in emmc | "/dev/${DEV_MMC}"*) echo "W: Flashing u-boot to eMMC on $(cat /proc/device-tree/model) is not without risk." >&2 echo "W: If you flash the wrong u-boot or if the flashing process goes wrong, it is" >&2 echo "W: possible to soft-brick your board. Restoring it might need some extra hardware." >&2 echo "W: Please only proceed if you are sure that the benefits outweigh the risks for you." >&2 printf "Are you sure you want to proceed? [y/N] " read -r response if [ "$response" != "y" ]; then echo "Exiting." exit fi break ;; esac done fi # do the flashing for dev in "$@"; do case $dev in emmc | "/dev/${DEV_MMC}"*) if [ "$DEV_MMC_BOOT0" = true ]; then realdev=/dev/${DEV_MMC}boot0 else realdev=/dev/${DEV_MMC} fi ;; sd) realdev=/dev/${DEV_SD} ;; *) realdev="$dev" ;; esac if [ "$DRYRUN" = "yes" ]; then if [ "$ZERO" != "yes" ]; then echo "I: Simulate writing $IMAGE to $realdev" >&2 else echo "I: Simulate overwriting u-boot on $realdev with zeroes" >&2 fi else if [ "$ZERO" != "yes" ]; then echo "I: Writing $IMAGE to $realdev" >&2 else echo "I: Overwriting u-boot on $realdev with zeroes" >&2 fi fi case $dev in emmc | "/dev/${DEV_MMC}"*) if [ "$DEV_MMC_BOOT0" = true ]; then echo 0 >"/sys/class/block/${DEV_MMC}boot0/force_ro" fi ;; esac set -- of="$realdev" bs=512 seek="$((UBOOT_OFFSET / 512))" skip="$((FLASHBIN_OFFSET / 512))" conv=fdatasync if [ "$ZERO" != "yes" ]; then # write u-boot binary set -- if="$IMAGE" "$@" else # write zeroes instead of the u-boot image set -- if="/dev/zero" "$@" count="$(((ubootsize - FLASHBIN_OFFSET) / 512))" fi if [ "$DRYRUN" = "yes" ]; then echo "S: Simulating: dd $*" >&2 else if [ "$VERBOSE" = "yes" ]; then echo "D: Running: dd $*" >&2 fi dd "$@" fi case $dev in emmc | "/dev/${DEV_MMC}"*) if [ "$DEV_MMC_BOOT0" = true ]; then echo 1 >"/sys/class/block/${DEV_MMC}boot0/force_ro" fi ;; esac if [ "$DRYRUN" = "yes" ]; then echo "S: Skipping verification because this is a simulation" >&2 continue elif [ "$ZERO" != "yes" ]; then echo "I: Reading u-boot from $realdev and comparing it to $IMAGE" >&2 else echo "I: Reading u-boot from $realdev and making sure it's all zeroed out" >&2 fi # For the extra paranoid, read back what got written and compare. set -- --bytes="$((ubootsize - FLASHBIN_OFFSET))" if [ "$ZERO" != "yes" ]; then set -- "$@" --ignore-initial="0:$FLASHBIN_OFFSET" - "$IMAGE" else set -- "$@" --bytes="$((ubootsize - FLASHBIN_OFFSET))" - /dev/zero fi # We use "dd iflag=direct" (which uses O_DIRECT) in the hopes that we read # from the device directly instead of re-using existing caches. if dd if="$realdev" bs=512 skip="$((UBOOT_OFFSET / 512))" count="$(((ubootsize - FLASHBIN_OFFSET) / 512))" iflag=direct \ | cmp "$@"; then echo "I: Successfully read the same bytes from $realdev as were written before" >&2 else echo "E: Did not get the same bytes back which were written" exit 1 fi if [ -n "$IMAGE" ] && [ "$ZERO" != "yes" ]; then echo "I: Reading u-boot from $realdev and comparing sha1sum" >&2 trap 'rm $tmpuboot' EXIT INT TERM tmpuboot="$(mktemp)" dd if="$realdev" of="$tmpuboot" bs=512 skip="$((UBOOT_OFFSET / 512))" count="$(((ubootsize - FLASHBIN_OFFSET) / 512))" if echo "$UBOOT_SHA1 $tmpuboot" | sha1sum --strict --check >/dev/null 2>&1; then echo "W: sha1sum hash sum mismatch: u-boot on $realdev has an unexpected checksum" >&2 else echo "I: sha1sum check successful" >&2 fi rm "$tmpuboot" trap - EXIT INT TERM fi done # inform about the DIP switch position only on imx8mq if [ -z "$MACHINE" ]; then case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") for dev in "$@"; do case $dev in emmc | "/dev/${DEV_MMC}"*) echo "I: For the i.MX8MQ to load u-boot from MMC, make sure" >&2 echo "I: that your DIP switch is set to OFF." >&2 continue ;; sd | "/dev/${DEV_SD}"*) echo "I: For the i.MX8MQ to load u-boot from SD-Card, make sure" >&2 echo "I: that your DIP switch is set to ON." >&2 continue ;; esac done ;; esac fi reform-tools-1.83/bin/reform-gnome-config000077500000000000000000000176211513102710000204300ustar00rootroot00000000000000#!/bin/bash # # FIXME: This is so far just a sketch until there is a proper mechanism for customizing GNOME # during installation. This script collects all necessary customizations in one place. # Currently, this is run from ~/.config/autostart/reform-gnome-config.desktop # To only run once, it could remove this .desktop file at the end. # # original lists generated by: # gsettings list-recursively | grep -E "(shell\.keybindings|wm\.keybindings|wayland\.keybindings) usage() { echo "Reset parts of GNOME configuration (like keyboard shortcuts and some window behavior) to the defaults customized for MNT Reform Series devices." >&2 } if [ "$#" -gt 0 ] && [ "$1" = "--help" ]; then usage exit 0 fi # disable "Automatic Screen Blank" gsettings set org.gnome.desktop.session idle-delay 0 # Make EURkey layout and compose work gsettings set org.gnome.desktop.input-sources show-all-sources true gsettings set org.gnome.desktop.input-sources xkb-options "['compose:rctrl', 'lv3:ralt_switch']" # Don't attach modal windows, it's annoying when some windows can't be moved individually gsettings set org.gnome.mutter attach-modal-dialogs false # this is hogging Super+Escape by default gsettings set org.gnome.mutter.wayland.keybindings restore-shortcuts "@as []" gsettings set org.gnome.settings-daemon.plugins.media-keys help "@as []" # these are hogging super+numbers / super+shift numbers by default gsettings set org.gnome.shell.keybindings switch-to-application-1 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-2 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-3 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-4 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-5 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-6 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-7 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-8 "@as []" gsettings set org.gnome.shell.keybindings switch-to-application-9 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-1 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-2 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-3 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-4 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-5 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-6 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-7 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-8 "@as []" gsettings set org.gnome.shell.keybindings open-new-window-application-9 "@as []" # MNT Reform customizations ## window actions gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['f']" gsettings set org.gnome.desktop.wm.keybindings close "['Escape']" gsettings set org.gnome.desktop.wm.keybindings maximize "['Up']" gsettings set org.gnome.desktop.wm.keybindings unmaximize "['Down']" ## window switcher gsettings set org.gnome.desktop.wm.keybindings switch-applications "['Tab']" gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "['Tab']" gsettings set org.gnome.desktop.wm.keybindings switch-group "['Tab']" gsettings set org.gnome.desktop.wm.keybindings switch-group-backward "['Tab']" ## workspaces gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['1']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-10 "['0']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['2']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "['3']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['4']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5 "['5']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6 "['6']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-7 "['7']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-8 "['8']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-9 "['9']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1 "['1']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-10 "['0']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2 "['2']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3 "['3']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['4']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-5 "['5']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-6 "['6']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-7 "['7']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-8 "['8']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-9 "['9']" ## screenshots gsettings set org.gnome.shell.keybindings screenshot "['s']" gsettings set org.gnome.shell.keybindings show-screenshot-ui "['x']" gsettings set org.gnome.shell.keybindings show-screen-recording-ui "['r']" ## media keys gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-down-static "@as []" gsettings set org.gnome.settings-daemon.plugins.media-keys keyboard-brightness-up-static "@as []" gsettings set org.gnome.shell.keybindings screen-brightness-down "['XF86MonBrightnessDown', 'F1']" gsettings set org.gnome.shell.keybindings screen-brightness-up "['XF86MonBrightnessUp', 'F2']" ## launchers dconf load /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ <' gsettings set org.gnome.desktop.wm.preferences resize-with-right-button true ## extensions gsettings set org.gnome.shell enabled-extensions "['dash-to-dock@micxgx.gmail.com']" gsettings set org.gnome.shell.extensions.dash-to-dock hot-keys false gsettings set org.gnome.shell.extensions.dash-to-dock disable-overview-on-startup true ## disable standby (the GDM part is set in /etc/gdm3/greeter.dconf-defaults) gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing' gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing' gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'interactive' gsettings set org.gnome.desktop.interface show-battery-percentage true ## fonts gsettings set org.gnome.desktop.interface monospace-font-name 'JetBrains Mono 12' gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita' gsettings set org.gnome.desktop.interface icon-theme 'Adwaita' gsettings set org.gnome.desktop.background picture-uri 'file:///usr/share/backgrounds/mnt-reform-next-y2k.jpg' gsettings set org.gnome.desktop.background picture-uri-dark 'file:///usr/share/backgrounds/mnt-reform-next-y2k.jpg' ## disable automatic downloads consuming bandwidth and noisy notifications about updates gsettings set org.gnome.software allow-updates false gsettings set org.gnome.software download-updates false gsettings set org.gnome.software download-updates-notify false reform-tools-1.83/bin/reform-handbook000077500000000000000000000014571513102710000176450ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2023 Lukas F. Hartmann # Copyright 2024 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Open the MNT Reform handbook in a browser" >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ $# -gt 0 ]; then if [ "$1" != "--help" ]; then echo "E: too many arguments" >&2 usage exit 1 fi usage exit 0 fi if [ ! -e /usr/share/doc/reform-handbook/html/index.html ]; then echo "E: install reform-handbook" >&2 exit 1 fi if [ -z ${DISPLAY+x} ]; then # not running under X/wayland set -- elinks else set -- xdg-open fi set -- "$@" /usr/share/doc/reform-handbook/html/index.html exec "$@" reform-tools-1.83/bin/reform-help000077500000000000000000000122311513102710000170000ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2020-2022 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Prints help text for how to use the MNT Reform." >&2 echo >&2 echo "Usage: $0 [--desktop,--root]" >&2 echo >&2 echo "Options:" >&2 echo " --desktop Print the MNT Reform desktop help text." >&2 echo " --root Print the MNT Reform root shell help text." >&2 } reform_help() { cat <<'END' Some useful commands to explore the system: Learn more about a command: man name-of-command Move around: ls, cd, cd .. See all running processes: htop See system services: systemctl Analyze disk usage: ncdu / List hardware/peripherals: lsblk lsusb lspci ip a View this message again: reform-help END case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with "*) cat <<'END' Read the Operator Handbook: pocket-reform-handbook (press % to fix contrast, Q to quit) END ;; *) cat <<'END' Read the Operator Handbook: reform-handbook (press % to fix contrast, Q to quit) END ;; esac cat <<'END' Set keyboard layout and timezone: sudo reform-config Chat in Reform community: reform-chat Select boot device: sudo reform-boot-config END case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") cat <<'END' Select display configuration: sudo reform-display-config # imx8mq only END ;; esac cat <<'END' Set up full disk encryption: sudo reform-setup-encrypted-disk Migrate system to a partition: sudo reform-migrate Flash latest u-boot: sudo reform-flash-uboot Re-initialize eMMC from scratch sudo reform-emmc-bootstrap Flash rescue system to eMMC sudo reform-flash-rescue Update / install software: sudo apt update apt search keyword sudo apt install package View a text file: less filename Edit a text file: micro filename Log out: exit Most programs can be quit with Ctrl+C, Q, or Ctrl+Q. Exit the chat with /quit. END } reform_root_help() { cat <<'END' You are logged in as root. This account can change anything in the system. To use the graphical environment sway, create a normal user account by entering: adduser your-name Afterwards, to be able to become root by using sudo, enter: adduser your-name sudo Then, log out using exit and log in as your-name. To read the MNT Reform Operator Handbook, enter: END case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with "*) cat <<'END' pocket-reform-handbook # (in the browser, press % # to fix contrast, Q to quit) END ;; *) cat <<'END' reform-handbook # (in the browser, press % # to fix contrast, Q to quit) END ;; esac } reform_desktop_help() { cat /etc/motd cat <<'END' Welcome to the MNT Reform desktop. Useful keyboard shortcuts (SUPER is the MNT logo key): SUPER ENTER Open a terminal SUPER ESC Close active window SUPER D Find and launch programs SUPER F1 Decrease backlight brightness SUPER F2 Decrease backlight brightness SUPER SHIFT S Take screenshot (in ~/Pictures) SUPER SHIFT X Take screenshot of an area SUPER 1 … Go to workspace 1 - 9 SUPER 9 To move the active window to a workspace, press the same combination, but together with SHIFT. Only on GNOME: SUPER ←/→ Tile window to left or right SUPER ↑/↓ (Un)maximize window SUPER Overview of all windows SUPER TAB Cycle through all windows ALT TAB Cycle through app's windows Customize the sway configuration: micro ~/.config/sway/config To learn more about the command line, enter: reform-help END case "$(cat /proc/device-tree/model)" in "MNT Pocket Reform with "*) cat <<'END' Read the MNT Pocket Reform handbook in a browser: pocket-reform-handbook END ;; *) cat <<'END' Read the MNT Reform handbook in a browser: reform-handbook END ;; esac echo reform_help } if [ "$#" -eq "0" ]; then reform_help exit elif [ "$#" -gt "1" ]; then echo "too many arguments" >&2 usage exit 1 fi case "$1" in --help) usage ;; --desktop) reform_desktop_help ;; --root) reform_root_help ;; *) echo "unknown option: $1" >&2 usage exit 1 ;; esac reform-tools-1.83/bin/reform-hw-setup000077500000000000000000000141461513102710000176330ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2021-2024 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Hardware setup specific to your MNT Reform platform." >&2 echo "Usually run by /lib/systemd/system/reform-hw-setup.service" >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ "$#" -gt 0 ]; then if [ "$1" != "--help" ]; then echo "E: too many arguments" >&2 usage exit 1 fi usage exit 0 fi if [ "$(id -u)" -ne 0 ]; then echo "reform-hw-setup has to be run as root / using sudo and is usually run by /lib/systemd/system/reform-hw-setup.service" >&2 exit 1 fi init_a311d() { # A311D sound controls # without setting these, there is no UCM profile and messages like this are produced: # no backend DAIs enabled for fe.dai-link-0, possibly missing ALSA mixer-based routing or UCM profile amixer -c 0 sset 'FRDDR_A SINK 1 SEL' 'OUT 1' amixer -c 0 sset 'FRDDR_A SRC 1 EN' 'on' amixer -c 0 sset 'TDMOUT_B SRC SEL' 'IN 0' amixer -c 0 sset 'TDMIN_B SRC SEL' 'IN 1' amixer -c 0 sset 'TODDR_A SRC SEL' 'IN 1' # Workaround for ethernet PHY reset problem for m in dwmac_meson8b dwmac_generic stmmac_platform stmmac mdio_mux_meson_g12a mdio_mux pcs_xpcs mdio_devres of_mdio; do grep --quiet "^$m " /proc/modules || continue rmmod "$m" done sleep 0.5 modprobe mdio_mux_meson_g12a modprobe dwmac_meson8b # Workaround for SDIO wifi not loading echo ffe03000.mmc >/sys/class/mmc_host/mmc2/device/driver/unbind echo ffe03000.mmc >/sys/bus/platform/drivers/meson-gx-mmc/bind } init_wm8960() { # Fix WM8960 being too quiet amixer -c "$1" sset Playback 255 amixer -c "$1" sset 'Left Output Mixer PCM' on amixer -c "$1" sset 'Right Output Mixer PCM' on # This switch in WM8960 needs to be on for the headset mic input to work amixer -c "$1" sset 'Left Input Mixer Boost' on } init_tlv320aic3100() { # Set up speaker on MNT Pocket Reform amixer -c "$1" sset 'Speaker Driver' on amixer -c "$1" sset 'Output Left From Left DAC' on amixer -c "$1" sset 'Output Right From Right DAC' on amixer -c "$1" sset 'Speaker Analog' 127 amixer -c "$1" sset 'DAC' 127 amixer -c "$1" sset 'HP Analog' 127 amixer -c "$1" sset 'HP Driver' on amixer -c "$1" sset 'HP Left' on amixer -c "$1" sset 'HP Right' on } init_qca9377_wifi() { if test -e /proc/modules && grep --quiet '^qcacld2 ' /proc/modules; then echo "I: Module qcacld2 is already loaded" >&2 return 0 fi # load out-of-tree Wi-Fi driver KERNVER_EXACT=$(dpkg-query --show --showformat '${Version}' "linux-image-$(uname -r)") modprobe cfg80211 # without "-f", insmod will fail with "Invalid module format" even though # the kernel version matches echo "I: Try to load exact match wifi driver: ${KERNVER_EXACT}" >&2 if [ -f "/opt/reform-qcacld2/qcacld2-${KERNVER_EXACT}.ko" ]; then echo "I: Found exact match for kernel ${KERNVER_EXACT}" >&2 if insmod -f "/opt/reform-qcacld2/qcacld2-${KERNVER_EXACT}.ko"; then echo "I: Successfully loaded exact match driver" >&2 return 0 else echo "W: Failed to load exact match driver. Try other available driver" >&2 fi fi # Find other potential qcacld2 drivers potential_drivers=$(find /opt/reform-qcacld2/qcacld2-*.ko -maxdepth 1 -type f -print0 | sort -Vzr) # Try to load available drivers, starting with the highest version number, until one works for driver in $potential_drivers; do echo "I: Attempting to load wifi driver: $driver" >&2 if insmod -f "$driver"; then echo "I: Successfully loaded driver: $driver" >&2 return 0 else echo "W: Failed to load driver: $driver, trying next" >&2 fi done echo "E: Failed to load any compatible qcacld2 driver" >&2 return 1 } case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") # Workaround for WM8960 sometimes not coming out of reset if [ ! -e /sys/bus/i2c/drivers/wm8960/2-001a ]; then echo 2-001a >/sys/bus/i2c/drivers/wm8960/bind fi test -e /sys/bus/i2c/drivers/wm8960/2-001a init_wm8960 0 ;; "MNT Reform 2 with BPI-CM4 Module") # Workaround for WM8960 sometimes not coming out of reset if [ ! -e /sys/bus/i2c/drivers/wm8960/1-001a ]; then echo 1-001a >/sys/bus/i2c/drivers/wm8960/bind fi test -e /sys/bus/i2c/drivers/wm8960/1-001a init_a311d init_wm8960 0 ;; "MNT Reform 2 with LS1028A Module") # Workaround for a DWC3 USB Controller regression # Assert USB hub reset while gpioset command is running. setpriv --pdeathsig TERM gpioset -c 2 -l 13=active & GPIOSET_PID=$! # Reload DWC3 module rmmod dwc3 modprobe dwc3 # Deassert USB hub reset by stopping gpioset command. kill $GPIOSET_PID # Select "ondemand" CPU frequency scaling governor echo ondemand >/sys/devices/system/cpu/cpufreq/policy0/scaling_governor # the functionality of the dwc3 module depends on the loglevel # loglevel=3 makes usb not work # loglevel=7 makes usb work most of the time # https://community.mnt.re/t/no-keyboard-input-with-ls1028-board-and-latest-image/1994/13 dmesg -n 7 ;; "MNT Pocket Reform with i.MX8MP Module") init_qca9377_wifi || echo "W: init_qca9377_wifi failed" >&2 init_tlv320aic3100 0 ;; "MNT Pocket Reform with BPI-CM4 Module") init_a311d init_tlv320aic3100 0 ;; "MNT Reform 2 with i.MX8MP Module") init_wm8960 0 init_qca9377_wifi || echo "W: init_qca9377_wifi failed" >&2 ;; "MNT Reform 2 with RCORE RK3588 Module") init_wm8960 rk3588wm8960 ;; "MNT Reform 2 with RCORE-DSI RK3588 Module") init_wm8960 rk3588wm8960 ;; "MNT Pocket Reform with RCORE RK3588 Module") init_tlv320aic3100 rk3588tlv320aic ;; "MNT Reform Next with RCORE RK3588 Module") init_tlv320aic3100 rk3588tlv320aic ;; "MNT Reform 2 with QUASAR QCS8550 Module") : ;; *) echo "E: Your platform $(cat /proc/device-tree/model) is not supported by reform-tools" >&2 exit 1 ;; esac reform-tools-1.83/bin/reform-mcu-tool000077500000000000000000000451611513102710000176170ustar00rootroot00000000000000#!/usr/bin/python3 # Copyright 2024-2025 Chris Hofstaedtler # SPDX-License-Identifier: GPL-3.0+ # # Use `black --line-length 120 bin/reform-mcu-tool` to reformat. # # Installation # # Install `python3-usb1` as a pre-requisite. No other dependencies should be necessary. # # Do not run shellcheck on this file # shellcheck disable=SC1071 _DOC = """ Tool to interact with Microcontrollers used by MNT Research in Reform projects. It can currently talk to the pocket sysctl firmware, and to the RP2040 bootrom. """ _EPILOG = """ Example usage: To reboot the pocket sysctl into the bootrom: $ sudo reform-mcu-tool bootsel pocket-sysctl-1.0 To reset the RP2040 bootrom back into the application: $ sudo reform-mcu-tool reset rp2040-boot """ import argparse import enum import json import struct import sys from dataclasses import dataclass from typing import Tuple try: import usb1 except ModuleNotFoundError as except_inst: print('E: Library "usb1" not found, please install python3-usb1.', file=sys.stderr) sys.exit(4) USB_VID_PIDCODES = 0x1209 USB_VID_RASPBERRY = 0x2E8A USB_PID_MNT_POCKET_REFORM_INPUT_10 = 0x6D06 USB_PID_MNT_POCKET_REFORM_SYSCTL_10 = 0x6D07 USB_PID_MNT_REFORM_NEXT_SYSCTL_10 = 0x6D08 USB_PID_RASPBERRY_RP2040_BOOT = 0x0003 USB_PID_RASPBERRY_RP2350_BOOT = 0x000F IS_APP = 0b0000_0001 IS_RP_BOOTROM = 0b0000_0010 class Bus(enum.StrEnum): USB = "usb" class TargetMode(enum.StrEnum): Runtime = "runtime" Bootloader = "bootloader" class TargetFlags(enum.StrEnum): RP_PICO = "rp-pico" FWUPD_SUPPORTED = "fwupd-supported" @dataclass(kw_only=True) class TargetDevice: vid: int pid: int name: str description: str bus: Bus mode: TargetMode flags: list[TargetFlags] def to_dict(self): return { "vid": f"{self.vid:04x}", "pid": f"{self.pid:04x}", "name": self.name, "description": self.description, "bus": self.bus, "mode": self.mode, "flags": self.flags, } @dataclass(kw_only=True) class DetectedDevice: device: TargetDevice version: str | None serial_number: str bus_number: str bus_address: str def to_dict(self): return { "device": self.device.to_dict(), "version": self.version, "serial_number": self.serial_number, "bus_number": self.bus_number, "bus_address": self.bus_address, } MCU_TYPES = { device.name: device for device in [ TargetDevice( vid=USB_VID_PIDCODES, pid=USB_PID_MNT_POCKET_REFORM_INPUT_10, name="pocket-input-1.0", description="MNT Pocket Reform Input 1.0", bus=Bus.USB, mode=TargetMode.Runtime, flags=[TargetFlags.RP_PICO, TargetFlags.FWUPD_SUPPORTED], ), TargetDevice( vid=USB_VID_PIDCODES, pid=USB_PID_MNT_POCKET_REFORM_SYSCTL_10, name="pocket-sysctl-1.0", description="MNT Pocket Reform System Controller 1.0", bus=Bus.USB, mode=TargetMode.Runtime, flags=[TargetFlags.RP_PICO, TargetFlags.FWUPD_SUPPORTED], ), TargetDevice( vid=USB_VID_PIDCODES, pid=USB_PID_MNT_REFORM_NEXT_SYSCTL_10, name="next-sysctl-1.0", description="MNT Reform Next System Controller 1.0", bus=Bus.USB, mode=TargetMode.Runtime, flags=[TargetFlags.RP_PICO, TargetFlags.FWUPD_SUPPORTED], ), TargetDevice( vid=USB_VID_RASPBERRY, pid=USB_PID_RASPBERRY_RP2040_BOOT, name="rp2040-boot", description="Raspberry Pi Pico RP2040 Boot ROM", bus=Bus.USB, mode=TargetMode.Bootloader, flags=[TargetFlags.RP_PICO], ), TargetDevice( vid=USB_VID_RASPBERRY, pid=USB_PID_RASPBERRY_RP2350_BOOT, name="rp2350-boot", description="Raspberry Pi Pico RP2350 Boot ROM", bus=Bus.USB, mode=TargetMode.Bootloader, flags=[TargetFlags.RP_PICO], ), ] } RESET_INTERFACE_SUBCLASS = 0 RESET_INTERFACE_PROTOCOL = 1 RESET_REQUEST_BOOTSEL = 1 RESET_REQUEST_FLASH = 2 PICOBOOT_MAGIC = 0x431FD10B PC_REBOOT = 0x2 PICOBOOT_IF_RESET = 0x41 @dataclass(kw_only=True) class BOSDescriptor: """Binary Device Object Store""" bLength: int bDescriptorType: int wTotalLength: int bNumDeviceCaps: int data: bytearray _header_format = " "BOSDescriptor": header_length = struct.calcsize(cls._header_format) bLength, bDescriptorType, wTotalLength, bNumDeviceCaps = struct.unpack( cls._header_format, data[0:header_length] ) if bDescriptorType != cls.DESCRIPTOR_TYPE: raise TypeError( f"Descriptor returned by USB device is of type {bDescriptorType} instead of {cls.DESCRIPTOR_TYPE}" ) return cls( bLength=bLength, bDescriptorType=bDescriptorType, wTotalLength=wTotalLength, bNumDeviceCaps=bNumDeviceCaps, data=data[header_length:], ) @dataclass(kw_only=True) class BOSDeviceCapability: bLength: int bDescriptorType: int bDevCapabilityType: int data: bytearray _header_format = " "BOSDeviceCapability": header_length = struct.calcsize(cls._header_format) bLength, bDescriptorType, bDevCapabilityType = struct.unpack(cls._header_format, data[0:header_length]) if bDescriptorType != cls.DESCRIPTOR_TYPE: raise TypeError( f"Descriptor returned by USB device is of type {bDescriptorType} instead of {cls.DESCRIPTOR_TYPE}" ) return cls( bLength=bLength, bDescriptorType=bDescriptorType, bDevCapabilityType=bDevCapabilityType, data=data[header_length : header_length + bLength], ) @dataclass(kw_only=True) class PlatformCapabilityDescriptor: """Defines a device capability specific to a particular platform/operating system""" bLength: int bDescriptorType: int bDevCapabilityType: int # uint8_t bReserved PlatformCapabilityUUID: str # 16byte data: bytearray # bLength - 20 _header_format = " "PlatformCapabilityDescriptor": header_length = struct.calcsize(cls._header_format) bLength, bDescriptorType, bDevCapabilityType, _, PlatformCapabilityUUID = struct.unpack( cls._header_format, data[0:header_length] ) if bDescriptorType != BOSDeviceCapability.DESCRIPTOR_TYPE: raise TypeError(f"Descriptor is of type {bDescriptorType} instead of {BOSDeviceCapability.DESCRIPTOR_TYPE}") if bDevCapabilityType != cls.DEV_CAPABILITY_TYPE: raise TypeError(f"DevCapability is of type {bDevCapabilityType} instead of {cls.DEV_CAPABILITY_TYPE}") return cls( bLength=bLength, bDescriptorType=bDescriptorType, bDevCapabilityType=bDevCapabilityType, PlatformCapabilityUUID=PlatformCapabilityUUID, data=data[header_length : header_length + bLength], ) @dataclass(kw_only=True) class DS20Descriptor: dwVersion: int wLength: int bVendorCode: int bAltEnumCmd: int _format = " "DS20Descriptor": dwVersion, wLength, bVendorCode, bAltEnumCmd = struct.unpack(cls._format, data) return cls(dwVersion=dwVersion, wLength=wLength, bVendorCode=bVendorCode, bAltEnumCmd=bAltEnumCmd) def device_reset(handle: usb1.USBDeviceHandle, reset_interface: int, reset_request: int): handle.claimInterface(reset_interface) try: handle.controlWrite( usb1.TYPE_CLASS | usb1.RECIPIENT_INTERFACE, reset_request, 0, reset_interface, b"", timeout=2000 ) except (usb1.USBErrorIO, usb1.USBErrorPipe): pass # Expected. MCU has reset and vanishes from USB. Exact error appears to be timing/fw-dependent. else: handle.releaseInterface(reset_interface) def picoboot_reset(handle: usb1.USBDeviceHandle, picoboot_interface: usb1.USBInterfaceSetting): handle.claimInterface(picoboot_interface.getNumber()) out_address = picoboot_interface[0].getAddress() handle.clearHalt(out_address) in_address = picoboot_interface[1].getAddress() handle.clearHalt(in_address) pc = 0 sp = 0 delay_ms = 500 reboot_cmd = struct.pack(" int | None: for setting in device.iterSettings(): if ( setting.getClass() == 0xFF and setting.getSubClass() == RESET_INTERFACE_SUBCLASS and setting.getProtocol() == RESET_INTERFACE_PROTOCOL and setting.getNumEndpoints() == 0 ): return setting.getNumber() return None def find_picoboot_interface(device: usb1.USBDevice) -> usb1.USBInterfaceSetting | None: for setting in device.iterSettings(): out_address = setting[0].getAddress() in_address = setting[1].getAddress() if ( setting.getClass() == 0xFF and setting.getNumEndpoints() == 2 and out_address & 0x80 == 0 and in_address & 0x80 == 0x80 ): return setting return None def _read_bos_descriptor(handle: usb1.USBDeviceHandle) -> None | BOSDescriptor: request_type = usb1.TYPE_STANDARD | usb1.RECIPIENT_DEVICE request_value = BOSDescriptor.DESCRIPTOR_TYPE << 8 timeout = 1000 # Read descriptor header first try: bos_data = handle.controlRead(request_type, usb1.REQUEST_GET_DESCRIPTOR, request_value, 0, 5, timeout=timeout) except usb1.USBErrorPipe: return None # unsupported descriptor = BOSDescriptor.parse(bos_data) # Read full descriptor now that we know how long it is bos_data = handle.controlRead( request_type, usb1.REQUEST_GET_DESCRIPTOR, request_value, 0, descriptor.wTotalLength, timeout=timeout ) if len(bos_data) != descriptor.wTotalLength: # USB device returned too little or too much data return None return BOSDescriptor.parse(bos_data) def _read_bos_ds20_version(handle: usb1.USBDeviceHandle) -> str | None: bos_descriptor = _read_bos_descriptor(handle) if bos_descriptor is None: return None offset = 0 while offset < len(bos_descriptor.data): device_cap = BOSDeviceCapability.parse(bos_descriptor.data[offset:]) offset += device_cap.bLength try: platform_desc = PlatformCapabilityDescriptor.parse(bos_descriptor.data[offset - device_cap.bLength :]) except TypeError as except_inst: continue # See https://github.com/fwupd/fwupd/blob/main/docs/ds20.md if platform_desc.PlatformCapabilityUUID != DS20Descriptor.UUID: continue ds20_desc = DS20Descriptor.parse(platform_desc.data) if ds20_desc.dwVersion < 0x0001090E: # Minimum version is 0x0001090e (1.9.14). continue if ds20_desc.bAltEnumCmd != 0: continue if ds20_desc.bVendorCode == 0: # Probably invalid, will read something we do not want. continue # Read quirk data from device (in UTF-8). response = handle.controlRead( usb1.TYPE_VENDOR | usb1.RECIPIENT_DEVICE, ds20_desc.bVendorCode, 0x00, # wValue per ds20.md 0x07, # wIndex per ds20.md ds20_desc.wLength, timeout=2000, ) if not response: return None response_str = response.decode("utf-8", errors="ignore") quirk_data = {} for line in response_str.splitlines(): line = line.strip() if line.startswith(";") or not "=" in line: continue k, v = line.split("=", maxsplit=1) quirk_data[k] = v version = quirk_data.get("Version") if version is None: continue version_format = quirk_data.get("VersionFormat") if version_format != "number": print(f"W: VersionFormat {version_format} not understood, ignoring") continue return version return None def read_bos_ds20_version(device: usb1.USBDevice) -> str | None: """Read BOS DS20 descriptor and extract Version string.""" try: handle = device.open() return _read_bos_ds20_version(handle) except (usb1.USBError, usb1.USBErrorAccess, usb1.USBErrorNoDevice, usb1.USBErrorTimeout) as except_inst: return None finally: handle.close() def action_bootsel(args, device: usb1.USBDevice): target = MCU_TYPES[args.target] if target.mode == TargetMode.Bootloader: print("E: Device is already in boot loader.", file=sys.stderr) return 2 if (reset_interface := find_reset_interface(device)) is None: print("E: Could not find Reset USB Interface.", file=sys.stderr) return 1 serial_number = device.getSerialNumber() print(f"I: Resetting device with serial {serial_number} into BOOTSEL") handle = device.open() device_reset(handle, reset_interface, RESET_REQUEST_BOOTSEL) print(f"I: You may now use: $ picotool info --ser {serial_number}") return 0 def action_reset(args, device: usb1.USBDevice): target = MCU_TYPES[args.target] if target.mode == TargetMode.Runtime: if (reset_interface := find_reset_interface(device)) is None: print("E: Could not find Reset USB Interface.", file=sys.stderr) return 1 print(f"I: Resetting device") handle = device.open() device_reset(handle, reset_interface, RESET_REQUEST_FLASH) elif target.mode == TargetMode.Bootloader and TargetFlags.RP_PICO in target.flags: if (reset_interface := find_picoboot_interface(device)) is None: print("E: Could not find PICOBOOT USB Interface.", file=sys.stderr) return 1 print(f"I: Resetting bootrom into application") handle = device.open() picoboot_reset(handle, reset_interface) return 0 def action_list(args, usb_context: usb1.USBContext): devices = [] for device in usb_context.getDeviceIterator(skip_on_error=True): vid = device.getVendorID() pid = device.getProductID() for mcu_name, target in MCU_TYPES.items(): if (vid, pid) != (target.vid, target.pid): continue version_info = read_bos_ds20_version(device) detected_device = DetectedDevice( device=target, version=version_info, serial_number=device.getSerialNumber(), bus_number=device.getBusNumber(), bus_address=device.getDeviceAddress(), ) if args.json: devices.append(detected_device) else: device_info = ( f'Target {target.name} "{target.description}" ID {target.vid:04x}:{target.pid:04x} Serial# {device.getSerialNumber()} ' f"USB bus {device.getBusNumber()} address {device.getDeviceAddress()}" ) if version_info: device_info += f" Version {version_info}" print(device_info) break if args.json: print(json.dumps([device.to_dict() for device in devices], indent=2)) return 0 def parse_args(): parser = argparse.ArgumentParser( prog="reform-mcu-tool", description=_DOC, epilog=_EPILOG, formatter_class=argparse.RawTextHelpFormatter ) subparsers = parser.add_subparsers(help="Action to execute") parser_bootsel = subparsers.add_parser("bootsel", help="Reboot MCU into BOOTSEL mode") parser_bootsel.set_defaults(func=action_bootsel) parser_bootsel.add_argument( "target", choices=MCU_TYPES.keys(), metavar="TARGET", help=f"Target device to operate on. Choices: {', '.join(MCU_TYPES.keys())}", ) parser_reset = subparsers.add_parser("reset", help="Reboot MCU into application mode") parser_reset.set_defaults(func=action_reset) parser_reset.add_argument( "target", choices=MCU_TYPES.keys(), metavar="TARGET", help=f"Target device to operate on. Choices: {', '.join(MCU_TYPES.keys())}", ) parser_list = subparsers.add_parser("list", help="List USB devices matching known VID/PIDs") parser_list.set_defaults(func=action_list) parser_list.add_argument( "--json", default=False, action="store_true", help=f"Emit machine-readable JSON format", ) args = parser.parse_args() if "func" not in args: parser.print_help() parser.exit() return args def run(args, usb_context: usb1.USBContext) -> int: if "target" in args: target = MCU_TYPES[args.target] vid = target.vid pid = target.pid device = usb_context.getByVendorIDAndProductID(vid, pid, skip_on_error=True) if not device: print(f"E: USB device with Vendor-ID {vid} Product-ID {pid} not found.", file=sys.stderr) return 1 print( f"I: Found {device.getManufacturer()} {device.getProduct()} " f"on bus {device.getBusNumber()} address {device.getDeviceAddress()}" ) return args.func(args, device) else: return args.func(args, usb_context) def main() -> int: args = parse_args() try: with usb1.USBContext() as usb_context: return run(args, usb_context) except usb1.USBErrorAccess: print("E: Accessing USB devices failed. -- Maybe you need to be root / use sudo.", file=sys.stderr) return 3 if __name__ == "__main__": sys.exit(main()) reform-tools-1.83/bin/reform-migrate000077500000000000000000000145351513102710000175110ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2021-2023 Lukas F. Hartmann # Copyright 2022-2024 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Usage:" >&2 echo " reform-migrate [--emmc] TARGET" >&2 echo "" >&2 echo "Mounts TARGET and copies the currently running system to it using rsync. This will" >&2 echo "overwrite all existing files in TARGET. At the end, reform-boot-config is run and" >&2 echo "will set up the first partition of the SD-card or eMMC (depending on the --emmc" >&2 echo "option) to load your newly copied rootfs and adjust /etc/fstab of TARGET accordingly." >&2 echo "" >&2 echo "Options:" >&2 echo "" >&2 echo " -h, --help Show this help message and exit." >&2 echo " --emmc Record boot preference on eMMC instead of SD card." >&2 echo >&2 echo "This script does not set up partitions for you. If you would like to configure" >&2 echo "full disk encryption and set up partitions accordingly automatically, consider" >&2 echo "using the reform-setup-encrypted-disk tool instead of reform-migrate." >&2 echo "" >&2 echo "Examples:" >&2 echo "" >&2 echo " reform-migrate --emmc /dev/nvme0n1p1" >&2 echo " Mounts the first partition of an NVMe disk and mirrors your system to it." >&2 echo " Configures booting from the first partition on eMMC." >&2 echo "" >&2 echo " reform-migrate /dev/mapper/crypt" >&2 echo " Mounts encrypted disk 'crypt' and mirrors your system to it." >&2 echo " The disk has to be unlocked first with: cryptsetup luksOpen /dev/nvme0n1p1 crypt" >&2 echo " Configures booting from the first partition on the SD-card as --emmc option is missing." >&2 } EMMC="" while getopts :h-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; -) case "$OPTARG" in help) usage exit 0 ;; emmc) EMMC="--emmc" ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; :) echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" if [ "$#" -eq 1 ]; then TARGET="$1" else echo "E: invalid number of arguments" >&2 usage exit 1 fi # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi if [ -n "$EMMC" ]; then case $EMMC_USE in false) echo "E: writing to eMMC not supported on $(cat /proc/device-tree/model)" >&2 exit 1 ;; warn) echo "W: Using eMMC on $(cat /proc/device-tree/model) is not without risk." >&2 echo "W: For example, flashing the wrong u-boot or if the flashing process goes wrong, it is" >&2 echo "W: possible to soft-brick your board. Restoring it might need some extra hardware." >&2 echo "W: Please only proceed if you are sure that the benefits outweigh the risks for you." >&2 printf "Are you sure you want to proceed? [y/N] " read -r response if [ "$response" != "y" ]; then echo "Exiting." exit fi ;; esac fi BOOTPART="${DEV_SD}p1" HUMAN_BOOT="SD-card" if [ -n "$EMMC" ]; then BOOTPART="${DEV_MMC}p1" HUMAN_BOOT="eMMC" fi if [ ! -e "$TARGET" ]; then echo "Error: The partition $TARGET does not exist." exit fi if [ -n "$(lsblk --noheadings --output=MOUNTPOINT "$TARGET")" ]; then echo "$TARGET is still in use" >&2 exit 1 fi if [ ! -e "/dev/$BOOTPART" ]; then echo "/dev/$BOOTPART does not exist" >&2 exit 1 fi if [ ! -b "/dev/$BOOTPART" ]; then echo "/dev/$BOOTPART is not a block device" >&2 exit 1 fi # check if the new boot is still mounted somewhere MOUNT_BOOT="$(lsblk --noheadings --output=MOUNTPOINT "/dev/$BOOTPART")" if [ -n "$MOUNT_BOOT" ]; then echo "E: /dev/$BOOTPART ($HUMAN_BOOT) is still mounted on $MOUNT_BOOT." >&2 echo "Please unmount before running this script" >&2 exit 1 fi if [ "$(id -u)" -ne 0 ]; then echo "reform-boot-config has to be run as root / using sudo." >&2 exit 1 fi echo "" echo "This script can copy your current OS and files to a different disk, such as an SSD installed in MNT Reform." echo "" echo "Warning: This will overwrite files on the target partition. Make sure you know what you're doing!" echo "" echo "Before using this script, your target partition has to be formatted. You can use the gnome-disks program for that." echo "gnome-disks can also help you set up an encrypted disk. You can also run the following commands for one single" echo "partition on NVMe:" echo "" echo ' parted /dev/nvme0n1 "mklabel msdos"' echo ' parted /dev/nvme0n1 "mkpart primary ext4 4MiB -1"' echo " mkfs.ext4 /dev/nvme0n1p1" echo "" echo "You can also setup full disk encryption by running reform-setup-encrypted-disk" echo "" # FIXME: mkimage.sh in reform-system-image could write out the exact values into a known location echo "Running rsync to copy approximately 3G of data in about 210k files..." >&2 command -v "rsync" >/dev/null 2>&1 || { echo >&2 'Please install "rsync" using: apt install rsync' exit 1 } echo "Trying to mount $TARGET... (if this fails, format the disk/partition as explained above)" MOUNTPOINT="$(mktemp --tmpdir --directory reform-migrate.XXXXXXXXXX)" trap 'umount $MOUNTPOINT' EXIT INT TERM mount "$TARGET" "$MOUNTPOINT" echo "Target partition successfully mounted. The next step will copy all your files over to the target, overwriting existing files in the process." echo "" printf "Are you sure you want to proceed? [y/N] " read -r response if [ "$response" != "y" ]; then echo "Exiting." umount "$MOUNTPOINT" trap - EXIT INT TERM exit fi echo "Starting the copy. This can take a while." rsync -axHAWXS --numeric-ids --info=progress2 --no-inc-recursive / "$MOUNTPOINT" echo "Files copied." umount "$MOUNTPOINT" trap - EXIT INT TERM echo "$TARGET unmounted." echo "Running reform-boot-config..." reform-boot-config $EMMC "$TARGET" reform-tools-1.83/bin/reform-pavucontrol000077500000000000000000000011031513102710000204200ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2020-2022 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Kill any pavucontrol process and re-exec it." >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ "$#" -gt 0 ]; then if [ "$1" != "--help" ]; then echo "E: too many arguments" >&2 usage exit 1 fi usage exit 0 fi pkill 'pavucontrol$' exec pavucontrol reform-tools-1.83/bin/reform-setup-encrypted-disk000077500000000000000000000307051513102710000221410ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2022-2025 Johannes Schauer Marin Rodrigues set -eu usage() { echo "Set up a disk with LUKS encryption containing LVM2 volumes for" >&2 echo "swap and the rootfs. Offers to run reform-migrate and " >&2 echo "reform-boot-config to set up the initramfs in /boot on the first" >&2 echo "partition of the eMMC or SD-card to load the rootfs from the " >&2 echo "encrypted disk." >&2 echo >&2 echo "Usage: $0 [--help] [DEVICE_PATH]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 echo " --force Avoid user interaction: run reform-migrate and" >&2 echo " put /boot on eMMC if allowed. Requires passphrase" >&2 echo " on standard input." >&2 echo >&2 echo "Arguments:" >&2 echo " [DEVICE_PATH] Disk, partition or regular file to set up with " >&2 echo " LUKS and LVM. If this argument is missing, defaults" >&2 echo " to the SSD." >&2 echo " If the eMMC device is provided, it will be" >&2 echo " partitioned with the first partition for /boot and" >&2 echo " the second partition for LUKS&LVM." >&2 echo " The shorthands ssd, emmc, sd and usb can be used" >&2 echo " to install to the SSD, the eMMC, the SD card or" >&2 echo " to a USB drive respectively." >&2 echo " To copy to a file of the same name as one of the" >&2 echo " shorthands, prefix the filename with a dot and" >&2 echo " and a slash for a relative path." >&2 echo >&2 echo "Example 1:" >&2 echo "When booted from SD-card set up the first partition on eMMC as /boot" >&2 echo "and set up the SSD with LUKS. Set up LVM inside LUKS with" >&2 echo "one volume for swap and the other for the root file system. Copy" >&2 echo "the current system to /dev/reformvg/root:" >&2 echo >&2 echo " $0" >&2 echo >&2 echo "Example 2:" >&2 echo "When booted from SD-card, set up eMMC with two partitions, the first" >&2 echo "one for /boot and the second for LUKS. Set up LVM inside LUKS with" >&2 echo "one volume for swap and the other for the root file system. Copy" >&2 echo "the current system to /dev/reformvg/root. Suppress any interactivity" >&2 echo "by using --force and obtain the LUKS passphrase from standard input." >&2 echo >&2 echo " echo hunter2 | $0 --force emmc" >&2 echo >&2 } FORCE=false while getopts :h-: OPTCHAR; do case "$OPTCHAR" in h) usage exit 0 ;; -) case "$OPTARG" in help) usage exit 0 ;; force) FORCE=true ;; *) echo "E: unrecognized option: --$OPTARG" >&2 exit 1 ;; esac ;; :) echo "E: missing argument for -$OPTARG" >&2 exit 1 ;; '?') echo "E: unrecognized option -$OPTARG" >&2 exit 1 ;; *) echo "E: error parsing options" >&2 exit 1 ;; esac done shift "$((OPTIND - 1))" if [ "$(id -u)" -ne 0 ]; then echo "reform-setup-encrypted-disk has to be run as root / using sudo." exit fi DEVICE_PATH= if [ "$#" -eq 1 ]; then DEVICE_PATH="$1" elif [ "$#" -gt 1 ]; then echo "E: invalid number of arguments" >&2 usage exit 1 fi command -v "cryptsetup" >/dev/null 2>&1 || { echo >&2 'Please install "cryptsetup" using: apt install cryptsetup' exit 1 } command -v "lvchange" >/dev/null 2>&1 || { echo >&2 'Please install "lvm2" using: apt install lvm2' exit 1 } command -v "mkfs.ext4" >/dev/null 2>&1 || { echo >&2 'Please install "e2fsprogs" using: apt install e2fsprogs' exit 1 } # shellcheck source=/dev/null if [ -e "./machines/$(cat /proc/device-tree/model).conf" ]; then . "./machines/$(cat /proc/device-tree/model).conf" elif [ -e "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" ]; then . "/usr/share/reform-tools/machines/$(cat /proc/device-tree/model).conf" else echo "E: unable to find config for $(cat /proc/device-tree/model)" >&2 exit 1 fi if [ -z "$DEVICE_PATH" ]; then DEVICE_PATH="/dev/$DEV_SSD" fi case $DEVICE_PATH in "/dev/$DEV_MMC"*) case $EMMC_USE in false) echo "E: writing to eMMC not supported on $(cat /proc/device-tree/model)" >&2 exit 1 ;; warn) echo "W: Using eMMC on $(cat /proc/device-tree/model) is not without risk." >&2 echo "W: For example, flashing the wrong u-boot or if the flashing process goes wrong, it is" >&2 echo "W: possible to soft-brick your board. Restoring it might need some extra hardware." >&2 echo "W: Please only proceed if you are sure that the benefits outweigh the risks for you." >&2 if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi ;; esac ;; esac case $DEVICE_PATH in sd) DEVICE_PATH="/dev/${DEV_SD}" ;; ssd) DEVICE_PATH="/dev/${DEV_SSD}" ;; emmc) DEVICE_PATH="/dev/${DEV_MMC}" ;; usb) DEVICE_PATH="/dev/${DEV_USB}" ;; esac if [ -b "$DEVICE_PATH" ]; then case $DEVICE_PATH in /dev/sda*) HUMAN="SATA SSD" ;; /dev/nvme0n1*) HUMAN="NVMe SSD" ;; "/dev/$DEV_MMC"*) HUMAN="eMMC" ;; "/dev/$DEV_SD"*) HUMAN="SD card" ;; *) HUMAN="SSD" ;; esac echo "This will ERASE ALL DATA from your $HUMAN." echo "" if [ "$FORCE" = true ]; then echo "Proceeding without user interaction because of --force" response="y" else printf "Are you sure you want to proceed? [y/N] " read -r response fi if [ "$response" != "y" ]; then echo "Exiting." exit fi elif [ -f "$DEVICE_PATH" ]; then # plain file -- do nothing HUMAN="reguar file" else echo "E: $DEVICE_PATH is neither block device nor regular file" >&2 exit 1 fi cleanupvg() { vgchange -an reformvg; } cleanupluks() { cryptsetup luksClose reform_crypt; } error() { echo "$0 FAILED to run" >&2; } trap error EXIT INT TERM if [ ! -f "$DEVICE_PATH" ] && [ -n "$(lsblk --noheadings --output=MOUNTPOINT "$DEVICE_PATH")" ]; then echo "$DEVICE_PATH is still in use" >&2 exit 1 fi # If the user chose eMMC or SD-card as the target device, then it has to be # partitioned first so that the unencrypted /boot partition can be in front # of the luks partition. Users who do not want this behaviour can manually # partition their eMMC or SD-card. case $DEVICE_PATH in "/dev/$DEV_MMC" | "/dev/$DEV_SD") # Space in MB which needs to be kept empty for u-boot before the first # partition starts. Biggest requirement comes from rk3588 which expects # u-boot at an offset of 8 MiB and a 4 MiB trust (ATF, OP-TEE) # partition after that. So the first partition can only start at byte # 16777216 or 16 MiB: https://opensource.rock-chips.com/wiki_Partitions MAX_UBOOT=16 BOOTSIZE=488 /sbin/parted --script --machine "$DEVICE_PATH" "mklabel msdos" /sbin/parted --script --machine "$DEVICE_PATH" "mkpart primary ext4 ${MAX_UBOOT}MiB $((BOOTSIZE + MAX_UBOOT))MiB" /sbin/parted --script --machine "$DEVICE_PATH" "mkpart primary $((BOOTSIZE + MAX_UBOOT))MiB 100%" mkfs.ext4 "${DEVICE_PATH}p1" case $DEVICE_PATH in "/dev/$DEV_MMC") DEVICE_PATH="/dev/${DEV_MMC}p2" ;; "/dev/$DEV_SD") DEVICE_PATH="/dev/${DEV_SD}p2" ;; esac ;; esac # /proc/meminfo contains the sizes in kibibytes mem="$(awk '/^MemTotal:/ {print $2}' /proc/meminfo)" case "$mem" in *[!0123456789]* | 0?* | "") echo "E: unable to acquire total memory from /proc/meminfo" >&2 exit 1 ;; esac # convert memory size to gigabytes, rounding up mem="$(awk 'BEGIN {printf("%.f",'"$mem"'/1024/1024+0.5)}')" # minimum swap size is 4G if [ "$mem" -lt 4 ]; then mem=4 fi if [ -f "$DEVICE_PATH" ]; then disksize="$(stat -c %s "$DEVICE_PATH")" else disksize=$(lsblk --nodeps --bytes --noheadings --output=SIZE "$DEVICE_PATH" | head -1) case "$disksize" in *[!0123456789]* | 0?* | "") echo "E: unable to acquire disk size of $DEVICE_PATH" >&2 exit 1 ;; esac fi # convert disk size to gigabytes, rounding down disksize="$((disksize / 1024 / 1024 / 1024))" case $DEVICE_PATH in "/dev/$DEV_MMC"* | "/dev/$DEV_SD"*) : # do not limit swap size for eMMC and SD-card ;; *) # maximum swap size is 5% of disk size if [ "$mem" -gt "$((disksize * 5 / 100))" ]; then mem="$((disksize * 5 / 100))" fi ;; esac if [ "$mem" -le 1 ]; then echo "E: your disk is too small for swap" >&2 exit 1 fi if [ "$FORCE" = true ]; then read -r PASSPHRASE printf "%s" "$PASSPHRASE" | cryptsetup luksFormat "$DEVICE_PATH" "-" else cryptsetup luksFormat "$DEVICE_PATH" fi # Check if the user supplied the empty string as the passphrase. # Theoretically this should work but the initramfs integration seems to not be # able to cope with an empty passphrase, see https://bugs.debian.org/1112484 if echo | cryptsetup luksOpen "$DEVICE_PATH" reform_crypt --test-passphrase 2>/dev/null; then echo "E: an empty passphrase is not supported by cryptsetup-initramfs, see #1112484" >&2 exit 1 fi trap "cleanupluks; error" EXIT INT TERM if [ "$FORCE" = true ]; then printf "%s" "$PASSPHRASE" | cryptsetup luksOpen --key-file=- "$DEVICE_PATH" reform_crypt else cryptsetup luksOpen "$DEVICE_PATH" reform_crypt fi pvcreate /dev/mapper/reform_crypt vgcreate reformvg /dev/mapper/reform_crypt trap "cleanupvg; cleanupluks; error" EXIT INT TERM lvcreate --name swap --size "${mem}G" reformvg mkswap /dev/reformvg/swap lvcreate --name root --extents 100%FREE reformvg mkfs.ext4 /dev/reformvg/root SWAPUUID=$(lsblk --nodeps --noheadings --output=UUID /dev/reformvg/swap) CRYPTUUID=$(cryptsetup luksUUID "$DEVICE_PATH") echo "" if [ "$FORCE" = true ]; then echo "Running reform-migrate because of --force" response="y" else printf "The encrypted %s is now set up. Do you want me to run reform-migrate now as well? [y/N] " "$HUMAN" read -r response fi if [ "$response" != "y" ]; then echo "If you want to migrate this system to $HUMAN you can now run:" echo "" echo "echo RESUME=UUID=$SWAPUUID > /etc/initramfs-tools/conf.d/resume" echo "echo reform_crypt UUID=$CRYPTUUID none luks,discard,x-initrd.attach > /etc/crypttab" echo "echo UUID=$SWAPUUID none swap sw 0 0 >> /etc/fstab" echo "cryptsetup luksOpen $DEVICE_PATH reform_crypt" echo "vgchange -ay reformvg" echo "reform-migrate /dev/reformvg/root" echo "vgchange -an reformvg" echo "cryptsetup luksClose reform_crypt" else # we are not really running reform-migrate but imitate what it does # instead because we want to write out some files after the rsync but # before running reform-boot-config ROOTMNT="$(mktemp --tmpdir --directory reform-setup-encrypted-disk.XXXXXXXXXX)" trap 'umount $ROOTMNT; cleanupvg; cleanupluks; error' EXIT INT TERM mount /dev/reformvg/root "$ROOTMNT" rsync -axHAWXS --numeric-ids --info=progress2 --no-inc-recursive / "$ROOTMNT" echo "RESUME=UUID=$SWAPUUID" >"$ROOTMNT/etc/initramfs-tools/conf.d/resume" echo "reform_crypt UUID=$CRYPTUUID none luks,discard,x-initrd.attach" >"$ROOTMNT/etc/crypttab" echo "UUID=$SWAPUUID none swap sw 0 0" >>"$ROOTMNT/etc/fstab" trap "cleanupvg; cleanupluks; error" EXIT INT TERM umount "$ROOTMNT" emmc_flag= if [ "$EMMC_USE" != false ]; then if [ "$FORCE" = true ]; then echo "Placing /boot on eMMC because of --force" emmc_flag="--emmc" else printf "Your /boot partition will be on eMMC by default. Do you want it on the SD-Card instead? [y/N] " read -r response if [ "$response" != "y" ]; then emmc_flag="--emmc" fi fi fi ret=0 if [ "$FORCE" = true ]; then reform-boot-config --force $emmc_flag /dev/reformvg/root || ret=$? else reform-boot-config $emmc_flag /dev/reformvg/root || ret=$? fi if [ "$ret" -ne 0 ]; then echo "reform-boot-config failed. To re-run it manually, perform the following steps:" >&2 echo " $ cryptsetup luksOpen \"$DEVICE_PATH\" reform_crypt" >&2 echo " $ vgchange -ay reformvg" >&2 echo " $ reform-boot-config $emmc_flag /dev/reformvg/root" >&2 echo " $ vgchange -an reformvg" >&2 echo " $ cryptsetup luksClose reform_crypt" >&2 exit "$ret" fi fi trap "cleanupluks; error" EXIT INT TERM cleanupvg trap "error" EXIT INT TERM cleanupluks trap - EXIT INT TERM echo "You can now reboot into your encrypted System." reform-tools-1.83/bin/reform-setup-encrypted-nvme000077500000000000000000000005241513102710000221500ustar00rootroot00000000000000#!/bin/sh set -eu echo "reform-setup-encrypted-nvme got renamed to reform-setup-encrypted-disk" >&2 echo "use reform-setup-encrypted-disk instead" if [ "$#" -eq "0" ]; then exit fi if [ "$#" -gt "1" ]; then echo "E: too many arguments" >&2 exit 1 fi if [ "$1" != "--help" ]; then echo "E: unknown argument: $1" >&2 exit 1 fi reform-tools-1.83/bin/reform-standby000077500000000000000000000037631513102710000175260ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-2.0+ # Copyright 2021-2023 Lukas F. Hartmann # Copyright 2022-2025 Johannes Schauer Marin Rodrigues # # MNT Reform Standby Handler (For i.MX8MQ) # Thanks to ruff for contributions set -eu usage() { echo "i.MX8MQ specific setup before suspend and after wakeup." >&2 echo "This script is called by the reform-sleep.service systemd service." >&2 echo "Do not call this script manually from the terminal but use" >&2 echo "systemctl suspend instead." >&2 echo >&2 echo "Usage: $0 [--help] suspend|resume" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ "$#" -gt 0 ] && [ "$1" = "--help" ]; then usage exit 0 fi if [ "$(id -u)" -ne 0 ]; then echo "reform-standby has to be run as root / using sudo." exit fi case "$(cat /proc/device-tree/model)" in "MNT Reform 2" | "MNT Reform 2 HDMI") : ;; *) echo "Sorry, reform-standby is only supported on MNT Reform 2 with i.MX8MQ processor module." exit ;; esac wifi_off() { echo 1 >/sys/class/pci_bus/0000:01/device/remove } wifi_on() { echo 1 >/sys/class/pci_bus/0000:00/rescan sleep 1 } hantro_off() { # with 5.18, hantro_vpu hangs on resume rmmod hantro_vpu } hantro_on() { modprobe hantro_vpu } kbd_backlight_off() { for d in /dev/hidraw*; do printf "xLITE0" >"$d" done } kbd_backlight_on() { for d in /dev/hidraw*; do printf "xLITE6" >"$d" done } hid_bind() { echo 0003:03EB:2041.0002 >/sys/bus/hid/drivers/hid-generic/bind || : echo 0003:03EB:2042.0001 >/sys/bus/hid/drivers/hid-generic/bind || : } hid_unbind() { echo 0003:03EB:2041.0002 >/sys/bus/hid/drivers/hid-generic/unbind || : echo 0003:03EB:2042.0001 >/sys/bus/hid/drivers/hid-generic/unbind || : } case $1 in suspend) wifi_off hantro_off kbd_backlight_off hid_unbind ;; resume) kbd_backlight_on wifi_on hantro_on hid_bind ;; *) usage exit 1 ;; esac reform-tools-1.83/bin/reform-waybar-icon-wedge000077500000000000000000000030201513102710000213500ustar00rootroot00000000000000#!/bin/bash # # reform-waybar-icon-wedge # # Copyright 2025 MNT Research GmbH / Lucie L. Hartmann # SPDX-License-Identifier: GPL-3.0-or-later # # waybar doesn't have a way to set the icon theme in a way that's nondestructive to other # installed desktops (like GNOME). but it uses XDG_DATA_DIRS to find the icons of the # currently set gnome icon theme, and we can use this fact to redirect that theme # using a symlink in a specially crafted XDG_DATA_DIR $HOME/.config/waybar-icon-wedge set -eu usage() { echo "Run waybar with XDG_DATA_DIRS set to a directory containing a symlink" >&2 echo "of the currently selected gtk-theme to work around a waybar limitation" >&2 echo >&2 echo "Usage: $0 [--help]" >&2 echo >&2 echo "Options:" >&2 echo " --help Display this help and exit." >&2 } if [ "$#" -gt 0 ]; then if [ "$1" != "--help" ]; then echo "E: too many arguments" >&2 usage exit 1 fi usage exit 0 fi set -x GNOME_ICON_THEME=$(gsettings get org.gnome.desktop.interface gtk-theme | tr -d "'") DESIRED_ICON_THEME_PATH="/usr/share/icons/Papirus-Dark" if [ -d "/usr/share/icons/${GNOME_ICON_THEME}" ] && [ -d "${DESIRED_ICON_THEME_PATH}" ]; then # very basic safety mkdir -p "${HOME}/.config/waybar-icon-wedge/icons" LINK_TARGET="${HOME}/.config/waybar-icon-wedge/icons/${GNOME_ICON_THEME}" if [ -L "${LINK_TARGET}" ]; then rm "${LINK_TARGET}" fi ln -s "${DESIRED_ICON_THEME_PATH}" "${LINK_TARGET}" export XDG_DATA_DIRS="$HOME/.config/waybar-icon-wedge:$XDG_DATA_DIRS" fi waybar reform-tools-1.83/dracut/000077500000000000000000000000001513102710000153455ustar00rootroot00000000000000reform-tools-1.83/dracut/20-pocket-reform.conf000066400000000000000000000002241513102710000212060ustar00rootroot00000000000000force_drivers+=" pwm_imx27 nwl-dsi ti-sn65dsi86 imx-dcss panel-edp mux-mmio mxsfb usbhid imx8mq-interconnect " omit_drivers+=" imx8m-ddrc raid456 " reform-tools-1.83/etc/000077500000000000000000000000001513102710000146365ustar00rootroot00000000000000reform-tools-1.83/etc/profile.d/000077500000000000000000000000001513102710000165205ustar00rootroot00000000000000reform-tools-1.83/etc/profile.d/reform-kwin.sh000066400000000000000000000005621513102710000213170ustar00rootroot00000000000000# KWIN_FORCE_SW_CURSOR=1 is currently needed because the RK3588 VOP2 driver # doesn't report or enforce the limitations for overlays on certain displays, # resulting in a black square behind the cursor and the display pipeline # crashing when the cursor is moved into the screen edges. # The bug is wontfix upstream. TODO: find the bug URL export KWIN_FORCE_SW_CURSOR=1 reform-tools-1.83/etc/profile.d/reform-mali.sh000066400000000000000000000005151513102710000212670ustar00rootroot00000000000000# PAN_MESA_DEBUG=gl3 enables OpenGL 3.3 from 3.1 (but doesn't change OpenGL ES) # on Mali GPUs (like in RK3588 and A311D) by skipping over some features that # normally don't allow the driver to advertise these versions, making some # applications and games work that don't work with older OpenGL versions. export PAN_MESA_DEBUG=gl3 reform-tools-1.83/examples/000077500000000000000000000000001513102710000157015ustar00rootroot00000000000000reform-tools-1.83/examples/keyboard_rainbow.py000077500000000000000000000107511513102710000216030ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2025 Giraut # SPDX-License-Identifier: MIT # # https://github.com/Giraut/mnt_reform_keyboard_backlight_rainbow ### Parameters default_backlight_intensity = 50 # % ### Modules import sys import argparse from time import time, sleep import glob try: from setproctitle import setproctitle except ModuleNotFoundError: setproctitle = lambda a: True mnt_keyboard4_hidraw_device = None # try hidraw devices until one matches for g in [ "/dev/input/by-id/usb-MNT_Research_MNT_Reform_Keyboard_4.0_*-hidraw", "/dev/input/by-id/usb-MNT_Pocket_Reform_Input_1.0_*-hidraw", "/dev/hidraw1", "/dev/hidraw0", ]: matches = glob.glob(g) if len(matches) != 1: continue mnt_keyboard4_hidraw_device = matches[0] break if mnt_keyboard4_hidraw_device is None: print("unable to find hidraw device") exit(1) ### Defines rainbow_rgb = ( (255, 0, 0), # Red (255, 63, 0), (255, 127, 0), # Orange (255, 191, 0), (255, 255, 0), # Yellow (127, 255, 0), (0, 255, 0), # Green (0, 127, 127), (0, 0, 255), # Blue (37, 0, 192), (111, 0, 170), (148, 0, 211), # Indigo ) nb_led_rows = 6 nb_led_cols = 14 ### Routines def argparse_intensity_type(value): """Argparse type for a valid backlight intensity""" try: v = float(value) except: raise argparse.ArgumentTypeError("{}: invalid intensity".format(value)) if v < 0: raise argparse.ArgumentTypeError("{}: intensity too low (min. 0%)".format(v)) if v > 100: raise argparse.ArgumentTypeError("{}: intensity too high (max. 100%)".format(v)) return v def argparse_delay_type(value): """Argparse type for a valid backlight refresh delay""" try: v = float(value) except: raise argparse.ArgumentTypeError("{}: invalid delay".format(value)) if v < 1: raise argparse.ArgumentTypeError("{}: delay too low (min. 1s)".format(v)) return v ### Main routine def main(): setproctitle("mnt_reform_keyboard_backlight_rainbow") # Process the command line arguments argparser = argparse.ArgumentParser() argparser.add_argument( "-i", "--intensity", type=argparse_intensity_type, help="Backlight intensity (default: {}%%)".format(default_backlight_intensity), default=default_backlight_intensity, ) argparser.add_argument( "-r", "--refresh-every-sec", type=argparse_delay_type, help="Number of seconds between refreshes " "(default: no refresh - set the pattern and exit)", ) args = argparser.parse_args() nb_colors = len(rainbow_rgb) # Set the color of the backlight LEDs then exit, or run the animation while True: # Set the LEDs for seq in range(nb_colors): start_backlight_change_tstamp = time() row_bgr = sum( [ list(reversed(rainbow_rgb[(seq + i) % nb_colors])) for i in range(nb_led_cols) ], [], ) row = 0 while row < nb_led_rows: try: with open(mnt_keyboard4_hidraw_device, "wb") as k: k.write( b"xXRGB" + bytes( [row] + [int(v * args.intensity / 100) for v in row_bgr] ) ) row += 1 except PermissionError: print( f"Unable to open {mnt_keyboard4_hidraw_device} for writing: permission denied" ) exit(1) except BrokenPipeError: print( f"Unable to write to {mnt_keyboard4_hidraw_device}: broken pipe -- wrong device?" ) exit(1) except: row = 0 # Redo the entire refresh in case of error sleep(0.15) # Give the keyboard controller a chance to do its thing # Exit if we're not doing an animation if args.refresh_every_sec is None: return 0 # Sleep until the next refresh sleep( max( 0, args.refresh_every_sec - (time() - start_backlight_change_tstamp) ) ) ### Main program if __name__ == "__main__": sys.exit(main()) reform-tools-1.83/flash-kernel/000077500000000000000000000000001513102710000164365ustar00rootroot00000000000000reform-tools-1.83/flash-kernel/preboot.d/000077500000000000000000000000001513102710000203325ustar00rootroot00000000000000reform-tools-1.83/flash-kernel/preboot.d/00reform2_preboot000066400000000000000000000015721513102710000235300ustar00rootroot00000000000000#shellcheck shell=sh disable=SC2086,SC2154 ######### BEGIN /usr/share/flash-kernel/preboot.d/00reform2_preboot ########### # We need to set ${fdtfile} in uboot to select a default dtb for boot mediums # that are supposed to boot on multiple devices like the Debian installer. # # But if ${fdtfile} is set, then bootscr.uboot-generic will use that instead of # the dtb-${fk_kvers} symlink maintained by flash-kernel which will point to # either the normal or the hdmi dtb for the reform. # # This preboot script overwrites ${fdtpath} such that even when ${fdtfile} is # set to a reasonable default, u-boot will still use dtb-${fk_kvers} if it # exists -- which it does after running flash-kernel. if test -e ${devtype} ${devnum}:${partition} ${prefix}dtb-${fk_kvers}; then setenv fdtpath dtb-${fk_kvers} fi ########## END /usr/share/flash-kernel/preboot.d/00reform2_preboot ############ reform-tools-1.83/flash-kernel/ubootenv.d/000077500000000000000000000000001513102710000205215ustar00rootroot00000000000000reform-tools-1.83/flash-kernel/ubootenv.d/00reform2_ubootenv000066400000000000000000000034501513102710000241030ustar00rootroot00000000000000# shellcheck shell=sh ######### BEGIN /usr/share/flash-kernel/ubootenv.d/00reform2_ubootenv ######### # Default bootargs for Linux are set here and can be overwritten using # LINUX_KERNEL_CMDLINE in /etc/default/flash-kernel or by setting ${bootargs} # in u-boot itself via the setenv command. # shellcheck disable=SC2154 setenv bootargs "ro no_console_suspend cryptomgr.notests plymouth.ignore-serial-consoles ${bootargs}" # Board-specific bootargs cannot be overwritten by above methods. If you # really need to overwrite below lines, create # /etc/flash-kernel/ubootenv.d/00reform2_ubootenv and fill it with what you # would like to replace the contents of this file with. # # This block is only needed for boards which might still run with an older # version of u-boot and thus might not yet set ${bootargs} correctly. # shellcheck disable=SC2154 if test "${board}" = "nitrogen8m_som"; then setenv bootargs "${bootargs} console=ttymxc0,115200 cma=512M pci=nomsi" elif test "${board}" = "MNT Reform 2.0"; then # some imx8mq Reforms have this board value setenv bootargs "${bootargs} console=ttymxc0,115200 cma=512M pci=nomsi" elif test "${board}" = "u200"; then # amlogic internal name for a311d dev board setenv bootargs "${bootargs} console=ttyAML0,115200 pci=pcie_bus_perf libata.force=noncq nvme_core.default_ps_max_latency_us=0" elif test "${board}" = "ls1028a"; then setenv bootargs "${bootargs} console=ttyS0,115200 cma=512M@3G iommu.passthrough=1 arm-smmu.disable_bypass=0" fi # console=tty1 needs to go at the end of the kernel cmdline because the luks # passphrase prompt will show up on the last console which must not be the # serial terminal but the tty displayed to the screen setenv bootargs "${bootargs} console=tty1" ########## END /usr/share/flash-kernel/ubootenv.d/00reform2_ubootenv ########## reform-tools-1.83/initramfs-tools/000077500000000000000000000000001513102710000172155ustar00rootroot00000000000000reform-tools-1.83/initramfs-tools/hooks/000077500000000000000000000000001513102710000203405ustar00rootroot00000000000000reform-tools-1.83/initramfs-tools/hooks/reform000077500000000000000000000034171513102710000215650ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2023-2025 Johannes Schauer Marin Rodrigues set -e PREREQ="" prereqs() { echo "$PREREQ"; } case $1 in prereqs) prereqs exit 0 ;; esac # shellcheck disable=SC1091 . /usr/share/initramfs-tools/hook-functions MACHINE= if [ -e /etc/flash-kernel/machine ]; then MACHINE=$(cat /etc/flash-kernel/machine) elif [ -e /proc/device-tree/model ]; then MACHINE=$(cat /proc/device-tree/model) fi # The switch below creates device-specific initramfs depending on the platform # that update-initramfs is run on. For the system images, we would like to # create identical images that work on all boards. Thus, if you change anything # below, make sure to also adjust the respective initramfs hook in the # reform-system-image repository. case $MACHINE in "MNT Reform 2") : ;; "MNT Reform 2 HDMI") : ;; "MNT Reform 2 with BPI-CM4 Module") : ;; "MNT Reform 2 with i.MX8MP Module") : ;; "MNT Reform 2 with LS1028A Module") # shellcheck disable=SC2154 [ "${verbose}" = "y" ] && echo "Adding firmware ls1028a-mhdpfw.bin" copy_file firmware /boot/ls1028a-mhdpfw.bin /lib/firmware # shellcheck disable=SC2154 [ "${verbose}" = "y" ] && echo "Adding /usr/bin/dmesg" copy_exec /usr/bin/dmesg ;; "MNT Reform 2 with QUASAR QCS8550 Module") : ;; "MNT Reform 2 with RCORE RK3588 Module") : ;; "MNT Reform 2 with RCORE-DSI RK3588 Module") : ;; "MNT Pocket Reform with i.MX8MP Module") : ;; "MNT Pocket Reform with BPI-CM4 Module") : ;; "MNT Pocket Reform with RCORE RK3588 Module") : ;; "MNT Reform Next with RCORE RK3588 Module") : ;; "") echo "W: unable to deduce target machine for reform initramfs-hook" >&2 ;; *) echo "W: unsupported machine: $MACHINE" >&2 ;; esac reform-tools-1.83/initramfs-tools/hooks/reform-plymouth000077500000000000000000000023511513102710000234400ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2023-2025 Johannes Schauer Marin Rodrigues set -e PREREQ="" prereqs() { echo "$PREREQ"; } case $1 in prereqs) prereqs exit 0 ;; esac # shellcheck disable=SC1091 . /usr/share/initramfs-tools/hook-functions if ! command -v plymouth-set-default-theme >/dev/null; then # do nothing if plymouth is not installed exit 0 fi THEME="$(plymouth-set-default-theme || true)" if [ "$THEME" != "reform-y2k" ]; then # only need to act for reform-y2k theme exit 0 fi if [ ! -e "/usr/share/fonts/opentype/inter/Inter-Medium.otf" ]; then # nothing to do if font is missing exit 0 fi mkdir -p "${DESTDIR}/etc/fonts/conf.d" cp -a --target-directory="${DESTDIR}/etc/fonts" /etc/fonts/fonts.conf cp -L --target-directory="${DESTDIR}/etc/fonts/conf.d" /etc/fonts/conf.d/60-latin.conf mkdir -p "${DESTDIR}/var/cache/fontconfig" # This is only needed because fc-cache bellow fails if the directory doesn't exist mkdir -p "${DESTDIR}/usr/local/share/fonts" mkdir -p "${DESTDIR}/usr/share/fonts/opentype/inter" cp -a --target-directory="${DESTDIR}/usr/share/fonts/opentype/inter" /usr/share/fonts/opentype/inter/Inter-Medium.otf fc-cache -s -y "${DESTDIR}" >/dev/null 2>&1 reform-tools-1.83/initramfs-tools/reform.conf000066400000000000000000000010551513102710000213570ustar00rootroot00000000000000# imx8mq-mnt-reform2 pwm_imx27 nwl-dsi ti-sn65dsi86 imx-dcss panel-edp mux-mmio mxsfb usbhid imx8mq-interconnect # meson-g12b-bananapi-cm4-mnt-reform2 meson_dw_hdmi meson_dw_mipi_dsi meson_canvas meson_drm dw_hdmi_i2s_audio dw_mipi_dsi meson_dw_mipi_dsi meson_vdec ao_cec_g12a panfrost snd_soc_meson_g12a_tohdmimix dw_hdmi_i2s_audio cec snd_soc_hdmi_codec snd_soc_meson_codec_glue snd_soc_meson_axg_toddr snd_pcm snd display_connector # ls1028a cdns_mhdp_imx cdns_mhdp_drmcore mali_dp # imx8mp-mnt-reform/pocket-reform governor_userspace cpufreq_dt imx_bus reform-tools-1.83/initramfs-tools/scripts/000077500000000000000000000000001513102710000207045ustar00rootroot00000000000000reform-tools-1.83/initramfs-tools/scripts/reform000077500000000000000000000011201513102710000221160ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2023-2025 Johannes Schauer Marin Rodrigues case $1 in prereqs) exit 0 ;; esac # shellcheck disable=SC1091 . /scripts/functions MACHINE= if [ -e /etc/flash-kernel/machine ]; then MACHINE=$(cat /etc/flash-kernel/machine) elif [ -e /proc/device-tree/model ]; then MACHINE=$(cat /proc/device-tree/model) fi case $MACHINE in "MNT Reform 2 with LS1028A Module") # https://source.mnt.re/reform/reform-debian-packages/-/issues/5 dmesg -n 7 || echo "E: failed to set kernel loglevel" >&2 ;; esac reform-tools-1.83/kernel/000077500000000000000000000000001513102710000153435ustar00rootroot00000000000000reform-tools-1.83/kernel/zz-reform-tools000077500000000000000000000072241513102710000203670ustar00rootroot00000000000000#!/bin/sh # SPDX-License-Identifier: GPL-3.0+ # Copyright 2024-2025 Johannes Schauer Marin Rodrigues # # Populate /boot with all known dtbs. # The flash-kernel package is still needed to provide the /boot/dtb-$(uname -r) # symlink. That symlink is needed on platforms that do not set the `${fdtfile}` # u-boot environment variable. set -e self="$0" version="$1" # shellcheck disable=SC2034 image_path="$2" # linux-run-hooks from src:linux-base runs run-parts with --report which only # prints the name of the scripts it runs *if* the script in question produces # any output. Scripts that do not produce any output do not get an indication # by run-parts that they got run. So we print early to make sure that we are # able to easily see if this script was run or not during a given installation. echo "I: Now running: $0 $*" >&2 echo "I: with DEB_MAINT_PARAMS=$DEB_MAINT_PARAMS" >&2 # shellcheck disable=SC2086 set -- $DEB_MAINT_PARAMS # strip single quotes from beginning and end action="${1#\'}" action="${action%\'}" set -u dtb_required() { config="$1" if [ ! -e /proc/device-tree/model ]; then return 1 fi if [ -z "$(cat /proc/device-tree/model)" ]; then return 1 fi if [ "$(cat /proc/device-tree/model)" != "$(basename "$config" .conf)" ]; then return 1 fi return 0 } install_dtbs() { if [ -d "/usr/lib/modules/$version/dtb" ]; then # this should be kernels >= 6.18 DT_INSTALL_DIR="/usr/lib/modules/$version/dtb" elif [ -L "/usr/lib/linux-image-$version" ]; then # kernel >= 6.18 ship modules in /usr/lib/modules/$version/dtb and the # old location is a compatibility symlink if [ -d "/usr/lib/linux-image-$version" ]; then DT_INSTALL_DIR="/usr/lib/linux-image-$version" else echo "E: Neither /usr/lib/modules/$version/dtb nor /usr/lib/linux-image-$version do exist" >&2 exit 1 fi elif [ -d "/usr/lib/linux-image-$version" ]; then # we are likely before kernel 6.18 DT_INSTALL_DIR="/usr/lib/linux-image-$version" else echo "E: Neither /usr/lib/modules/$version/dtb nor /usr/lib/linux-image-$version do exist" >&2 exit 1 fi for CONF in /usr/share/reform-tools/machines/*.conf; do # shellcheck disable=SC1090 . "$CONF" # run find with -H in case DT_INSTALL_DIR is a symlink dtb=$(find -H "$DT_INSTALL_DIR" -wholename "*/$DTBPATH" 2>/dev/null | head -n 1) if [ -z "$dtb" ]; then if dtb_required "$CONF"; then echo "E: no dtb for $DTBPATH in $DT_INSTALL_DIR but is required for this platform" >&2 exit 1 else echo "W: no dtb for $DTBPATH in $DT_INSTALL_DIR -- skipping..." >&2 continue fi elif [ ! -f "$dtb" ]; then if dtb_required "$CONF"; then echo "E: $dtb does not exist but is required for this platform" >&2 exit 1 else echo "W: $dtb does not exist -- skipping..." >&2 continue fi fi if [ ! -e "$DT_INSTALL_DIR/$DTBPATH" ]; then echo "W: irregular dtb path: $dtb" >&2 fi mkdir -p "/boot/dtbs/$version/$(dirname "$DTBPATH")" echo "I: copying $dtb to /boot/dtbs/$version/$DTBPATH" >&2 cp "$dtb" "/boot/dtbs/$version/$DTBPATH" done } remove_dtbs() { for CONF in /usr/share/reform-tools/machines/*.conf; do # shellcheck disable=SC1090 . "$CONF" rm -f "/boot/dtbs/$version/$DTBPATH" || : done rmdir --ignore-fail-on-non-empty "/boot/dtbs/$version" } case "$self:$action" in # Only run on postinst configure and postrm remove, to avoid wasting # time by calling this script multiple times on upgrade and removal. */postinst.d/*:configure) install_dtbs ;; */postrm.d/*:remove) remove_dtbs ;; *) exit 0 ;; esac reform-tools-1.83/libexec/000077500000000000000000000000001513102710000154765ustar00rootroot00000000000000reform-tools-1.83/libexec/reform-tools/000077500000000000000000000000001513102710000201265ustar00rootroot00000000000000reform-tools-1.83/libexec/reform-tools/reform-power-daemon000077500000000000000000000072101513102710000237410ustar00rootroot00000000000000#!/bin/bash # # MNT Reform Power Daemon # # A prototype daemon for managing power consumption on MNT Pocket Reform, with the goals of: # # - avoiding SoC resets due to current spikes causing voltage dips on 5V rail, on low battery voltage # - prolonging runtime on battery # set -e if ! grep -q "MNT Pocket Reform with RCORE RK3588 Module" /proc/device-tree/model; then echo "Fatal: reform-power-daemon currently supports only MNT Pocket Reform with RCORE RK3588 Module." >&2 exit 2 fi if ! lsmod | grep reform2_lpc; then echo "Fatal: reform2_lpc module not loaded. Please reinstall reform2-lpc-dkms and reboot." >&2 exit 2 fi min_sys_ver=20251030 min_kbd_ver=20251118 sys_ver="$(reform-mcu-tool list --json | jq --raw-output 'map(select(.device.name == "pocket-sysctl-1.0")) | .[] | .version')" kbd_ver="$(reform-mcu-tool list --json | jq --raw-output 'map(select(.device.name == "pocket-input-1.0")) | .[] | .version')" echo "System Controller firmware version: $sys_ver" echo "Keyboard firmware version: $kbd_ver" if ((sys_ver < min_sys_ver)); then echo "Warning: Please upgrade your System Controller firmware using gnome-firmware (at least version $min_sys_ver required)." >&2 fi if ((kbd_ver < min_kbd_ver)); then echo "Warning: Please upgrade your Keyboard firmware using gnome-firmware (at least version $min_kbd_ver required)." >&2 fi bat_path="/sys/class/power_supply/BAT0" gpu_path="/sys/devices/platform/fb000000.gpu/devfreq/fb000000.gpu" cpu_path="/sys/devices/system/cpu/cpufreq" min_gpu_freq="300000000" prev_status="" # Policy when powered by batteries #bat_display_backlight_level="40%" bat_max_gpu_freq="300000000" #bat_cpu_governor="powersave" bat_keyboard_backlight='xLBRT\x05' # Policy when powered by AC adapter #ac_display_backlight_level="70%" ac_max_gpu_freq="1000000000" ac_cpu_governor="schedutil" # TODO could also be: "performance", especially on Classic Reform ac_keyboard_backlight='xLBRT\x30' while sleep 1; do bat_status=$(cat $bat_path/status) if [ "$bat_status" = "$prev_status" ]; then continue fi echo "Battery status changed to $bat_status." # on AC power? if [ "$bat_status" == "Charging" ]; then echo "Charging" echo "simple_ondemand" >"$gpu_path/governor" echo "$min_gpu_freq" >"$gpu_path/min_freq" echo "$ac_max_gpu_freq" >"$gpu_path/max_freq" # FIXME this triggers a bug in the panel driver when panel v1 is turned off (i.e. on HDMI) # that makes everything crash/freeze, so commented out for now #brightnessctl set "$ac_display_backlight_level" # apply keyboard brightness. requires firmware 20251118+ for hidraw in /dev/input/by-id/usb-MNT_Pocket_Reform_Input_*hidraw; do [ -e "$hidraw" ] || continue printf "%b" "$ac_keyboard_backlight" >"$hidraw" done for i in 0 4 6; do echo "$ac_cpu_governor" >"$cpu_path/policy$i/scaling_governor" done fi # on battery power? if [ "$bat_status" == "Discharging" ]; then echo "Discharging" echo "userspace" >"$gpu_path/governor" echo "$min_gpu_freq" >"$gpu_path/min_freq" echo "$bat_max_gpu_freq" >"$gpu_path/max_freq" # FIXME this triggers a bug in the panel driver when panel v1 is turned off (i.e. on HDMI) # that makes everything crash/freeze, so commented out for now #brightnessctl set "$bat_display_backlight_level" # apply keyboard brightness. requires firmware 20251118+ for hidraw in /dev/input/by-id/usb-MNT_Pocket_Reform_Input_*hidraw; do [ -e "$hidraw" ] || continue printf "%b" "$bat_keyboard_backlight" >"$hidraw" done for i in 0 4 6; do echo "powersave" >"$cpu_path/policy$i/scaling_governor" done fi prev_status="$bat_status" done reform-tools-1.83/libexec/reform-tools/reform-tray.py000077500000000000000000000066771513102710000227720ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2023 - 2024 Lukas F. Hartmann # Copyright 2024 Johannes Schauer Marin Rodrigues # SPDX-License-Identifier: GPL-3.0+ import signal import os import subprocess import gi import shutil gi.require_version("Gtk", "3.0") gi.require_version("Notify", "0.7") gi.require_version("AyatanaAppIndicator3", "0.1") from gi.repository import Gtk from gi.repository import Gdk from gi.repository import Notify from gi.repository import AyatanaAppIndicator3 as AppIndicator3 APPID = "reform-tray" ICON = "view-more-symbolic" def handle_exit_item(question, command): dialog = Gtk.MessageDialog( flags=0, message_type=Gtk.MessageType.WARNING, text=question, ) dialog.format_secondary_text("Make sure to save your work first.") dialog.add_buttons( Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, ) response = dialog.run() if response == Gtk.ResponseType.OK: subprocess.run(command) dialog.destroy() class MenuItem(Gtk.ImageMenuItem): def __init__(self, label, icon, args, exitmsg=None): Gtk.ImageMenuItem.__init__(self, label=label, visible=True) self.img = Gtk.Image() self.img.set_from_icon_name(icon, -1) self.set_image(self.img) self.set_always_show_image(True) if exitmsg: self.action = lambda _: handle_exit_item(exitmsg, args) else: self.action = lambda _: subprocess.run(args) self.connect("activate", self.action) if not shutil.which(args[0]): self.set_sensitive(False) menuitems = [ MenuItem( "Help", "help-about-symbolic", ["xdg-terminal-exec", "bash", "-c", "reform-help --desktop; bash"], None, ), MenuItem( "Higher Brightness", "weather-clear-symbolic", ["brightnessctl", "set", "10%+"], None, ), MenuItem( "Lower Brightness", "weather-clear-night-symbolic", ["brightnessctl", "set", "10%-"], None, ), MenuItem("Terminal", "utilities-terminal-symbolic", ["xdg-terminal-exec"], None), MenuItem("File Manager", "folder-symbolic", ["xdg-open", os.environ["HOME"]], None), MenuItem( "System Monitor", "utilities-system-monitor-symbolic", ["gnome-system-monitor"], None, ), MenuItem( "Logout", "system-log-out-symbolic", ["pkill", "(wayfire|sway)"], "Are you sure you want to exit the desktop session?", ), MenuItem( "Reboot", "system-restart-symbolic", ["systemctl", "reboot"], "Are you sure you want to reboot the computer?", ), MenuItem( "Shutdown", "system-shutdown-symbolic", ["systemctl", "poweroff"], "Are you sure you want to shut down the computer?", ), ] class TrayIcon: def __init__(self, appid, icon, menuitems): self.menu = Gtk.Menu() for mi in menuitems: self.menu.append(mi) self.ind = AppIndicator3.Indicator.new( appid, icon, AppIndicator3.IndicatorCategory.HARDWARE ) self.ind.set_status(AppIndicator3.IndicatorStatus.ACTIVE) self.ind.set_secondary_activate_target(mi) self.ind.set_menu(self.menu) signal.signal(signal.SIGINT, signal.SIG_DFL) icon = TrayIcon(APPID, ICON, menuitems) Notify.init(APPID) Gtk.main() reform-tools-1.83/libexec/reform-tools/reform-wallpaper.py000077500000000000000000000140541513102710000237660ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2024 Johannes Schauer Marin Rodrigues # SPDX-License-Identifier: MIT # inspired by https://gitlab.com/carbonOS/gde/gde-background import gi gi.require_version("Gtk", "3.0") gi.require_version("GtkLayerShell", "0.1") gi.require_version("GDesktopEnums", "3.0") from gi.repository import Gtk, Gdk, GtkLayerShell, GDesktopEnums, Gio, GdkPixbuf, GLib class BackgroundWindow(Gtk.Window): def __init__(self): super().__init__() self.set_decorated(False) self.set_title("reform-wallpaper") self._pixbuf = GdkPixbuf.Pixbuf.new( GdkPixbuf.Colorspace.RGB, False, 8, 200, 200 ) self._file_monitor = None self.connect("draw", self._draw_cb) self.connect("size-allocate", self._size_allocate_cb) GtkLayerShell.init_for_window(self) GtkLayerShell.set_exclusive_zone(self, -1) GtkLayerShell.set_layer(self, GtkLayerShell.Layer.BACKGROUND) GtkLayerShell.set_anchor(self, GtkLayerShell.Edge.LEFT, True) GtkLayerShell.set_anchor(self, GtkLayerShell.Edge.RIGHT, True) GtkLayerShell.set_anchor(self, GtkLayerShell.Edge.TOP, True) GtkLayerShell.set_anchor(self, GtkLayerShell.Edge.BOTTOM, True) self._settings = Gio.Settings(schema_id="org.gnome.desktop.background") self._settings.connect("changed", self._settings_changed_cb) def _settings_changed_cb(self, settings, key): if key in [ "picture-uri", "primary-color", "picture-options", "picture-opacity", ]: self._size_allocate_cb(self, self.get_size()) def _draw_cb(self, widget, ctx): ctx.save() ctx.scale(1.0 / self.get_scale_factor(), 1.0 / self.get_scale_factor()) Gdk.cairo_set_source_pixbuf(ctx, self._pixbuf, 0, 0) ctx.paint() ctx.restore() return True def _size_allocate_cb(self, widget, rect): self._pixbuf = GdkPixbuf.Pixbuf.new( GdkPixbuf.Colorspace.RGB, False, 8, rect.width * self.get_scale_factor(), rect.height * self.get_scale_factor(), ) fill_color = Gdk.RGBA() if fill_color.parse(self._settings.get_string("primary-color")): self._pixbuf.fill( ( (int(fill_color.red * 0xFF)) << 24 | (int(fill_color.green * 0xFF)) << 16 | (int(fill_color.blue * 0xFF)) << 8 ) + 0xFF ) else: # if parsing the value failed, fill with the default color from # /usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml self._pixbuf.fill(0x023C88FF) alpha = 255.0 * (self._settings.get_int("picture-opacity") / 100.0) if alpha == 0: self.queue_draw() return bg_mode = self._settings.get_enum("picture-options") match bg_mode: case GDesktopEnums.BackgroundStyle.NONE: self.queue_draw() return case GDesktopEnums.BackgroundStyle.SCALED: pass case GDesktopEnums.BackgroundStyle.ZOOM: pass case _: print("W: background style not supported:", bg_mode) path = self._settings.get_string("picture-uri") scheme = GLib.uri_parse_scheme(path) if scheme == "file": path = GLib.filename_from_uri(path)[0] else: print(f"W: scheme {scheme} not supported") if path.endswith(".xml"): print("W: GNOME timed wallpaper xml not supported") if self._file_monitor is not None: self._file_monitor.cancel() self._file_monitor = None try: self._file_monitor = Gio.File.new_for_path(path).monitor( Gio.FileMonitorFlags.NONE ) self._file_monitor.connect( "changed", lambda a, b, c, d: self._size_allocate_cb(self, self.get_size()), ) except Exception as e: print(f"E: attaching the file monitor failed with: {e}") img = GdkPixbuf.Pixbuf.new_from_file(path) ratio_w = self._pixbuf.get_width() / img.get_width() ratio_h = self._pixbuf.get_height() / img.get_height() if bg_mode == GDesktopEnums.BackgroundStyle.SCALED: ratio = ratio_w if ratio_w < ratio_h else ratio_h else: ratio = ratio_w if ratio_w > ratio_h else ratio_h final_width = ratio * img.get_width() final_height = ratio * img.get_height() off_x = (self._pixbuf.get_width() - final_width) / 2 off_y = (self._pixbuf.get_height() - final_height) / 2 if bg_mode == GDesktopEnums.BackgroundStyle.SCALED: img.composite( self._pixbuf, off_x, off_y, final_width, final_height, off_x, off_y, ratio, ratio, GdkPixbuf.InterpType.BILINEAR, alpha, ) else: img.composite( self._pixbuf, 0, 0, self._pixbuf.get_width(), self._pixbuf.get_height(), off_x, off_y, ratio, ratio, GdkPixbuf.InterpType.BILINEAR, alpha, ) self.queue_draw() def create_window(monitor): win = BackgroundWindow() GtkLayerShell.set_monitor(win, monitor) setattr(monitor, "reform-wallpaper", win) win.show_all() def destroy_window(monitor): getattr(monitor, "reform-wallpaper").destroy() if __name__ == "__main__": display = Gdk.Display.get_default() for i in range(display.get_n_monitors()): create_window(display.get_monitor(i)) display.connect("monitor_added", create_window) display.connect("monitor_removed", destroy_window) Gtk.main() reform-tools-1.83/lpc/000077500000000000000000000000001513102710000146415ustar00rootroot00000000000000reform-tools-1.83/lpc/Makefile000066400000000000000000000002631513102710000163020ustar00rootroot00000000000000obj-m := reform2_lpc.o KERNEL_DIR = /lib/modules/$(shell uname -r)/build all: $(MAKE) -C "$(KERNEL_DIR)" M="$(PWD)" modules clean: $(MAKE) -C "$(KERNEL_DIR)" M="$(PWD)" clean reform-tools-1.83/lpc/reform2_lpc.c000066400000000000000000000355101513102710000172230ustar00rootroot00000000000000/* * SPDX-License-Identifier: GPL-2.0 * Copyright 2022 nanocodebug * Copyright 2023 Michael Fincham * Copyright 2024 Michal Suchánek * Copyright 2024-2025 Lucie Lukas Hartmann * Copyright 2023-2025 Johannes Schauer Marin Rodrigues */ #include #include #include #include #include #include #include #include #include #include #include #define MNTRE_LPC_API_UNKNOWN 0 #define MNTRE_LPC_API_1 1 #define MNTRE_LPC_API_2 2 /* array size for lpc response buffers */ #define LPC_RES_SZ 9 typedef struct lpc_driver_data { struct spi_device *spi; struct power_supply *bat; struct mutex lock; struct backlight_device *backlight; uint32_t api_version; } lpc_driver_data; static int lpc_probe(struct spi_device *spi); static void lpc_remove(struct spi_device *spi); static int lpc_power_off(struct sys_off_data *data); static ssize_t show_status(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t show_cells(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t show_firmware(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t show_capacity(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t show_uart(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t store_uart(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t lpc_command(struct lpc_driver_data *lpc, char command, uint8_t arg1, uint8_t *response); static int get_bat_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val); static DEVICE_ATTR(status, 0444, show_status, NULL); static DEVICE_ATTR(cells, 0444, show_cells, NULL); static DEVICE_ATTR(firmware, 0444, show_firmware, NULL); static DEVICE_ATTR(capacity, 0444, show_capacity, NULL); static DEVICE_ATTR(uart, 0644, show_uart, store_uart); static struct spi_board_info g_spi_board_info = { .modalias = "reform2_lpc", .max_speed_hz = 4000000, .bus_num = 0, .chip_select = 0, .mode = SPI_MODE_1, }; static enum power_supply_property bat_props[] = { POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_TECHNOLOGY, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_CAPACITY, POWER_SUPPLY_PROP_CHARGE_FULL, POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, POWER_SUPPLY_PROP_CHARGE_NOW, POWER_SUPPLY_PROP_CHARGE_EMPTY, POWER_SUPPLY_PROP_PRESENT, }; static struct power_supply_desc bat_desc = { .name = "BAT0", .properties = bat_props, .num_properties = ARRAY_SIZE(bat_props), .get_property = get_bat_property, .type = POWER_SUPPLY_TYPE_BATTERY, }; static struct power_supply_config psy_cfg = {}; static int bl_get_brightness(struct backlight_device *bl) { u16 brightness = bl->props.brightness; return brightness & 0x7f; } static int bl_update_status(struct backlight_device *bl) { struct lpc_driver_data *lpc = (struct lpc_driver_data *)bl_get_data(bl); uint8_t buffer[LPC_RES_SZ]; lpc_command(lpc, 'b', bl->props.brightness, buffer); return 0; } static const struct backlight_ops lpc_bl_ops = { .update_status = bl_update_status, .get_brightness = bl_get_brightness, }; static struct backlight_device *lpc_create_backlight(struct device *dev, void *data) { struct backlight_properties props; memset(&props, 0, sizeof(props)); props.type = BACKLIGHT_RAW; props.brightness = 100; props.max_brightness = 100; return devm_backlight_device_register(dev, "mnt_pocket_reform_backlight", dev, data, &lpc_bl_ops, &props); } int (*__mnt_pocket_reform_get_panel_version)(void); static uint32_t lpc_get_api_version(struct device *dev) { int ret; uint32_t version; uint8_t str[LPC_RES_SZ]; struct lpc_driver_data *lpc = (struct lpc_driver_data *)dev_get_drvdata(dev); ret = lpc_command(lpc, 'f', 2, str); if (ret) return MNTRE_LPC_API_UNKNOWN; ret = kstrtou32(str, 10, &version); dev_info(dev, "version: %u (%s)\n", version, str); if (version > 20200000 && version < 20250526) { return MNTRE_LPC_API_1; } else if (version >= 20250526 && version <= 30000101) { return MNTRE_LPC_API_2; } return MNTRE_LPC_API_UNKNOWN; } static int lpc_probe(struct spi_device *spi) { struct lpc_driver_data *data; int ret; spi->max_speed_hz = g_spi_board_info.max_speed_hz; spi->mode = g_spi_board_info.mode; spi->bits_per_word = 8; ret = spi_setup(spi); if (ret) { dev_err(&spi->dev, "spi_setup failed\n"); return -ENODEV; } data = devm_kzalloc(&spi->dev, sizeof(struct lpc_driver_data), GFP_KERNEL); if (data == NULL) { dev_err(&spi->dev, "devm_kzalloc failed\n"); return -ENOMEM; } data->spi = spi; mutex_init(&data->lock); spi_set_drvdata(spi, data); ret = device_create_file(&spi->dev, &dev_attr_status); if (ret) dev_err(&spi->dev, "device_create_file failed\n"); ret = device_create_file(&spi->dev, &dev_attr_cells); if (ret) dev_err(&spi->dev, "device_create_file failed\n"); ret = device_create_file(&spi->dev, &dev_attr_firmware); if (ret) dev_err(&spi->dev, "device_create_file failed\n"); ret = device_create_file(&spi->dev, &dev_attr_capacity); if (ret) dev_err(&spi->dev, "device_create_file failed\n"); ret = device_create_file(&spi->dev, &dev_attr_uart); if (ret) dev_err(&spi->dev, "device_create_file failed\n"); #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0) psy_cfg.fwnode = dev_fwnode(&spi->dev); #else psy_cfg.of_node = spi->dev.of_node; #endif psy_cfg.drv_data = data; data->bat = devm_power_supply_register(&spi->dev, &bat_desc, &psy_cfg); if (IS_ERR(data->bat)) { dev_err(&spi->dev, "dev_power_supply_register failed\n"); return PTR_ERR(data->bat); } /* register lpc as poweroff handler */ ret = devm_register_sys_off_handler(&spi->dev, SYS_OFF_MODE_POWER_OFF_PREPARE, SYS_OFF_PRIO_FIRMWARE, lpc_power_off, data); if (ret) { dev_err(&spi->dev, "devm_register_sys_off_handler failed\n"); return ret; } /* for MNT Pocket Reform with Display Version 2, the system controller has to control the backlight directly via PWM, but it must not do that on other versions of the display. */ __mnt_pocket_reform_get_panel_version = (void *)__symbol_get("mnt_pocket_reform_get_panel_version"); if (__mnt_pocket_reform_get_panel_version && __mnt_pocket_reform_get_panel_version() == 2) { dev_info( &spi->dev, "enabling backlight control for MNT Pocket Reform with Display Version 2.\n"); data->backlight = lpc_create_backlight(&spi->dev, data); if (IS_ERR(data->backlight)) { dev_err(&spi->dev, "lpc_create_backlight failed\n"); } } data->api_version = lpc_get_api_version(&spi->dev); spi_controller_get(spi->controller); return ret; } static void lpc_remove(struct spi_device *spi) { device_remove_file(&spi->dev, &dev_attr_status); device_remove_file(&spi->dev, &dev_attr_firmware); device_remove_file(&spi->dev, &dev_attr_cells); device_remove_file(&spi->dev, &dev_attr_capacity); device_remove_file(&spi->dev, &dev_attr_uart); //spi_controller_put(spi->controller); } /* response[] has to have a size of at least 8 bytes! */ static ssize_t lpc_command(struct lpc_driver_data *lpc, char command, uint8_t arg1, uint8_t *response) { int ret = 0; memset(response, 0, LPC_RES_SZ); int delays[3] = { 50, 50, 50 }; if (lpc->api_version == 2) { /* newer LPC firmware doesn't need huge delays */ /* because the response time is minimized */ delays[0] = 2; delays[1] = 3; delays[2] = 0; } uint8_t cmd[4] = { 0xb5, command, arg1, 0x0 }; mutex_lock(&lpc->lock); msleep(delays[0]); ret = spi_write(lpc->spi, cmd, 4); if (ret) { dev_err(&lpc->spi->dev, "lpc_command: %c/%d spi_write failed\n", command, arg1); mutex_unlock(&lpc->lock); return ret; } msleep(delays[1]); ret = spi_read(lpc->spi, response, 8); if (ret) { dev_err(&lpc->spi->dev, "lpc_command: %c/%d spi_read failed\n", command, arg1); } msleep(delays[2]); mutex_unlock(&lpc->lock); return ret; } static ssize_t show_uart(struct device *dev, struct device_attribute *attr, char *buf) { /* not yet implemented */ return 0; } /* let LPC output bytes over UART to MNT Desktop Reform control panel */ static ssize_t store_uart(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct lpc_driver_data *lpc = (struct lpc_driver_data *)dev_get_drvdata(dev); uint8_t discard[8]; for (size_t i = 0; i < count; i++) { lpc_command(lpc, 'z', buf[i], discard); } return count; } static ssize_t show_status(struct device *dev, struct device_attribute *attr, char *buf) { int ret = 0; uint8_t buffer[8]; int16_t voltage; int16_t amps; uint8_t percentage; uint8_t status; struct lpc_driver_data *lpc = (struct lpc_driver_data *)dev_get_drvdata(dev); ret = lpc_command(lpc, 'q', 0, buffer); if (ret) return 0; voltage = (int16_t)buffer[0] | ((int16_t)buffer[1] << 8); amps = (int16_t)buffer[2] | ((int16_t)buffer[3] << 8); percentage = buffer[4]; status = buffer[5]; return snprintf(buf, PAGE_SIZE, "%d.%dV %d.%dA %2d%% [status=%d] [API=%d]\n", voltage / 1000, voltage % 1000, amps / 1000, abs(amps % 1000), percentage, status, lpc->api_version); return snprintf(buf, PAGE_SIZE, "ok\n"); } static ssize_t show_cells(struct device *dev, struct device_attribute *attr, char *buf) { int ret = 0; uint8_t buffer[LPC_RES_SZ * 2]; uint16_t cells[16]; struct lpc_driver_data *lpc = (struct lpc_driver_data *)dev_get_drvdata(dev); ret = lpc_command(lpc, 'v', 0, buffer); if (ret) return 0; ret = lpc_command(lpc, 'v', 1, &buffer[8]); if (ret) return 0; for (int s = 0; s < 16; s += 2) { uint16_t val = buffer[s] | buffer[s + 1] << 8; cells[s] = val / 1000; cells[s + 1] = val % 1000; } ret = snprintf( buf, PAGE_SIZE, "%d.%03d %d.%03d %d.%03d %d.%03d %d.%03d %d.%03d %d.%03d %d.%03d\n", cells[0], cells[1], cells[2], cells[3], cells[4], cells[5], cells[6], cells[7], cells[8], cells[9], cells[10], cells[11], cells[12], cells[13], cells[14], cells[15]); return ret; } static ssize_t show_firmware(struct device *dev, struct device_attribute *attr, char *buf) { int ret = 0; uint8_t str1[LPC_RES_SZ], str2[LPC_RES_SZ], str3[LPC_RES_SZ]; struct lpc_driver_data *lpc = (struct lpc_driver_data *)dev_get_drvdata(dev); ret = lpc_command(lpc, 'f', 0, str1); if (ret) return 0; ret = lpc_command(lpc, 'f', 1, str2); if (ret) return 0; ret = lpc_command(lpc, 'f', 2, str3); if (ret) return 0; return snprintf(buf, PAGE_SIZE, "%s %s %s\n", str1, str2, str3); } static ssize_t show_capacity(struct device *dev, struct device_attribute *attr, char *buf) { uint8_t buffer[LPC_RES_SZ]; uint16_t cap_acc_mah, cap_min_mah, cap_max_mah; struct lpc_driver_data *lpc = (struct lpc_driver_data *)dev_get_drvdata(dev); lpc_command(lpc, 'c', 0, buffer); cap_acc_mah = buffer[0] | (buffer[1] << 8); cap_min_mah = buffer[2] | (buffer[3] << 8); cap_max_mah = buffer[4] | (buffer[5] << 8); return snprintf(buf, PAGE_SIZE, "[acc=%dmAh] [min=%dmAh] [max=%dmAh]\n", cap_acc_mah, cap_min_mah, cap_max_mah); } static int lpc_power_off(struct sys_off_data *data) { uint8_t buffer[LPC_RES_SZ]; struct lpc_driver_data *lpc = (struct lpc_driver_data *)data->cb_data; /* try to shut down power, forever */ while (true) { lpc_command(lpc, 'p', 1, buffer); msleep(100); } return 0; } static int get_bat_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { int ret = 0; uint8_t buffer[LPC_RES_SZ]; int milliamp, millivolt; struct lpc_driver_data *lpc = (struct lpc_driver_data *)power_supply_get_drvdata(psy); switch (psp) { case POWER_SUPPLY_PROP_STATUS: val->intval = POWER_SUPPLY_STATUS_UNKNOWN; ret = lpc_command(lpc, 'q', 0, buffer); if (ret) return -EBUSY; int16_t ma16 = ((int16_t)buffer[2] | ((int16_t)buffer[3] << 8)); milliamp = (int)ma16; if (milliamp < 0) { val->intval = POWER_SUPPLY_STATUS_CHARGING; } else if (milliamp <= 100) { if (buffer[4] == 100) { val->intval = POWER_SUPPLY_STATUS_FULL; } else { val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; } } else { val->intval = POWER_SUPPLY_STATUS_DISCHARGING; } break; case POWER_SUPPLY_PROP_TECHNOLOGY: val->intval = POWER_SUPPLY_TECHNOLOGY_UNKNOWN; break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: ret = lpc_command(lpc, 'q', 0, buffer); if (ret) return -EBUSY; millivolt = (buffer[0] | buffer[1] << 8); if (millivolt < 5000 || millivolt >= 40000) millivolt = 0; val->intval = millivolt * 1000; break; case POWER_SUPPLY_PROP_CURRENT_NOW: ret = lpc_command(lpc, 'q', 0, buffer); if (ret) return -EBUSY; ma16 = (int16_t)buffer[2] | ((int16_t)buffer[3] << 8); milliamp = (int)ma16; if (milliamp < -20000 || milliamp >= 20000) return 0; /* system controller and linux disagree on which sign * means charging and which means discharging */ val->intval = -milliamp * 1000; break; case POWER_SUPPLY_PROP_CAPACITY: ret = lpc_command(lpc, 'q', 0, buffer); if (ret) return -EBUSY; /* don't trigger upower emergency shutdown in case * of faulty data * (normally happens at 5% or less) */ int gauge = buffer[4]; if (gauge < 6) gauge = 6; if (gauge > 100) gauge = 100; val->intval = gauge; break; case POWER_SUPPLY_PROP_CHARGE_FULL: case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ret = lpc_command(lpc, 'c', 0, buffer); if (ret) return -EBUSY; int milliamp_hours = (buffer[4] | buffer[5] << 8); val->intval = milliamp_hours * 1000; break; case POWER_SUPPLY_PROP_CHARGE_NOW: ret = lpc_command(lpc, 'c', 0, buffer); if (ret) return -EBUSY; val->intval = (buffer[0] | buffer[1] << 8) * 1000; break; case POWER_SUPPLY_PROP_CHARGE_EMPTY: ret = lpc_command(lpc, 'c', 0, buffer); if (ret) return -EBUSY; val->intval = (buffer[2] | buffer[3] << 8) * 1000; break; case POWER_SUPPLY_PROP_PRESENT: val->intval = 1; break; default: val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE; ret = -EINVAL; break; } return ret; } static const struct of_device_id of_tis_spi_match[] = { { .compatible = "mntre,lpc11u24", .data = 0 }, {} }; MODULE_DEVICE_TABLE(of, of_tis_spi_match); static struct spi_device_id g_spi_dev_id_list[] = { { "lpc11u24", 0 }, {}, }; MODULE_DEVICE_TABLE(spi, g_spi_dev_id_list); static struct spi_driver g_spi_driver = { .probe = lpc_probe, .remove = lpc_remove, .driver = { .of_match_table = of_match_ptr(of_tis_spi_match), .owner = THIS_MODULE, .name = "reform2_lpc", }, .id_table = g_spi_dev_id_list, }; module_spi_driver(g_spi_driver); MODULE_DESCRIPTION("Reform 2 LPC Driver"); MODULE_LICENSE("GPL"); reform-tools-1.83/machines/000077500000000000000000000000001513102710000156525ustar00rootroot00000000000000reform-tools-1.83/machines/MNT Pocket Reform with BPI-CM4 Module.conf000066400000000000000000000016271513102710000247240ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="pocket-reform-system-a311d" DTBPATH="amlogic/meson-g12b-bananapi-cm4-mnt-pocket-reform.dtb" # flashing the reform-system-image to emmc also flashes u-boot which might # soft-brick the module if something goes wrong EMMC_USE=warn EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk1" DEV_MMC_BOOT0=true DEV_SD="mmcblk0" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="1f26e468517bcc9623c2f2191a212c7a3c5cd930" UBOOT_PROJECT="reform-a311d-uboot" UBOOT_TAG="2026-01-11" UBOOT_OFFSET=512 FLASHBIN_OFFSET=512 # non-free-firmware is required for firmware-realtek NEED_NONFREE=true BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyAML0,115200 pci=pcie_bus_perf libata.force=noncq nvme_core.default_ps_max_latency_us=0 plymouth.ignore-serial-consoles console=tty1 fbcon=rotate:3" reform-tools-1.83/machines/MNT Pocket Reform with RCORE RK3588 Module.conf000066400000000000000000000016461513102710000254310ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="pocket-reform-system-rk3588" DTBPATH="rockchip/rk3588-mnt-pocket-reform.dtb" # flashing the reform-system-image to emmc also flashes u-boot which might # soft-brick the module if something goes wrong EMMC_USE=true EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk0" DEV_MMC_BOOT0=false DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="32c4a4458bee405d2118e499033b33cbe85a95ef" UBOOT_PROJECT="reform-rk3588-uboot" UBOOT_TAG="2026-01-11" # idbloader.img is expected at an offset of 32768 bytes and u-boot follows 8355840 bytes after UBOOT_OFFSET=32768 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyS2,1500000 clk_ignore_unused cma=256M swiotlb=65535 fbcon=rotate:3 fbcon=font:TER16x32 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Pocket Reform with i.MX8MP Module.conf000066400000000000000000000017371513102710000250330ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="pocket-reform-system-imx8mp" DTBPATH="freescale/imx8mp-mnt-pocket-reform.dtb" EMMC_USE=true EMMC_BOOT=warn # prevent writing u-boot to sd-card because a) the imx8mplus will only read it # from emmc anyways and b) because UBOOT_OFFSET=0 would overwrite the MBR on it SD_BOOT=false # name of devices in /dev DEV_MMC="mmcblk2" DEV_MMC_BOOT0=true DEV_SD="mmcblk0" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="702e0fbec6f49355752ebc33c1f8ce2f5c9bf30a" UBOOT_PROJECT="reform-imx8mp-uboot" UBOOT_TAG="2026-01-11" # when flashing to SD-card, the correct offset is 33792 # an offset of zero would overwrite the MBR UBOOT_OFFSET=0 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests pci=pcie_bus_perf nvme_core.default_ps_max_latency_us=0 console=tty1 fbcon=rotate:3 fbcon=font:TER16x32 cma=256MB plymouth.ignore-serial-consoles console=ttymxc1" reform-tools-1.83/machines/MNT Reform 2 HDMI.conf000066400000000000000000000012131513102710000212130ustar00rootroot00000000000000# empty SYSIMAGE variable because no system image is produced for # this machine SYSIMAGE="" DTBPATH="freescale/imx8mq-mnt-reform2-hdmi.dtb" EMMC_USE=true EMMC_BOOT=true SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk0" DEV_MMC_BOOT0=true DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="757f73b71c1009a1baa0d90a8f0bcb494e4b1936" UBOOT_PROJECT="reform-boundary-uboot" UBOOT_TAG="2026-01-11" UBOOT_OFFSET=33792 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttymxc0,115200 cma=512M pci=nomsi plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with BPI-CM4 Module.conf000066400000000000000000000015731513102710000236400ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-a311d" DTBPATH="amlogic/meson-g12b-bananapi-cm4-mnt-reform2.dtb" # flashing the reform-system-image to emmc also flashes u-boot which might # soft-brick the module if something goes wrong EMMC_USE=warn EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk1" DEV_MMC_BOOT0=true DEV_SD="mmcblk0" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="36e8bc7af48f2b5383ac012ff3b2856b92f34f8e" UBOOT_PROJECT="reform-a311d-uboot" UBOOT_TAG="2026-01-11" UBOOT_OFFSET=512 FLASHBIN_OFFSET=512 # non-free-firmware is required for firmware-realtek NEED_NONFREE=true BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyAML0,115200 pci=pcie_bus_perf libata.force=noncq nvme_core.default_ps_max_latency_us=0 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with LS1028A Module.conf000066400000000000000000000012631513102710000235730ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-ls1028a" DTBPATH="freescale/fsl-ls1028a-mnt-reform2.dtb" EMMC_USE=true EMMC_BOOT=false SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk1" DEV_MMC_BOOT0=false DEV_SD="mmcblk0" DEV_SSD="sda" DEV_USB="sdb" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="f1c368decfc52795538b070aec47871e3d7b2b59" UBOOT_PROJECT="reform-ls1028a-uboot" UBOOT_TAG="2025-12-24" UBOOT_OFFSET=1048576 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyS0,115200 cma=512M@3G iommu.passthrough=1 arm-smmu.disable_bypass=0 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with QUASAR QCS6490 Module.conf000066400000000000000000000014771513102710000245760ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-qcs6490" DTBPATH="qcom/qcs6490-mnt-reform2.dtb" EMMC_USE=true EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev # there's no eMMC, but UFS. UFS looks like a bunch of scsi disks to linux # (/dev/sdX). not all of these virtual disks (LUNs) may be freely used. # FIXME: currently determining which one is safe/best to use. DEV_MMC="sdX" DEV_MMC_BOOT0=false DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="FIXME" UBOOT_PROJECT="reform-qcs6490-uboot" UBOOT_TAG="FIXME" UBOOT_OFFSET=FIXME FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyS2,1500000 clk_ignore_unused cma=256M swiotlb=65535 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with QUASAR QCS8550 Module.conf000066400000000000000000000016151513102710000245670ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-qcs8550" DTBPATH="qcom/qcs8550-mnt-reform2.dtb" EMMC_USE=true EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev # there's no eMMC, but UFS. UFS looks like a bunch of scsi disks to linux # (/dev/sdX). not all of these virtual disks (LUNs) may be freely used. # FIXME: currently determining which one is safe/best to use. DEV_MMC="sdX" DEV_MMC_BOOT0=false DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="FIXME" # FIXME: uboot is currently reform-qcs6490-uboot, but a 8550 specific branch. UBOOT_PROJECT="reform-qcs6490-uboot" UBOOT_TAG="FIXME" UBOOT_OFFSET=FIXME FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyS2,1500000 clk_ignore_unused cma=256M swiotlb=65535 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with RCORE RK3588 Module.conf000066400000000000000000000015661513102710000243460ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-rk3588" DTBPATH="rockchip/rk3588-mnt-reform2.dtb" # flashing the reform-system-image to emmc also flashes u-boot which might # soft-brick the module if something goes wrong EMMC_USE=true EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk0" DEV_MMC_BOOT0=false DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="2284b0a7f139de55b0718fd3b4f2e15d5bc1bd13" UBOOT_PROJECT="reform-rk3588-uboot" UBOOT_TAG="2026-01-11" # idbloader.img is expected at an offset of 32768 bytes and u-boot follows 8355840 bytes after UBOOT_OFFSET=32768 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyS2,1500000 clk_ignore_unused cma=256M swiotlb=65535 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with RCORE-DSI RK3588 Module.conf000066400000000000000000000015761513102710000247640ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-rk3588-dsi" DTBPATH="rockchip/rk3588-mnt-reform2-dsi.dtb" # flashing the reform-system-image to emmc also flashes u-boot which might # soft-brick the module if something goes wrong EMMC_USE=true EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk0" DEV_MMC_BOOT0=false DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="d597f88d8276e4b95251a81535002380de29ab8a" UBOOT_PROJECT="reform-rk3588-uboot" UBOOT_TAG="2026-01-11" # idbloader.img is expected at an offset of 32768 bytes and u-boot follows 8355840 bytes after UBOOT_OFFSET=32768 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttyS2,1500000 clk_ignore_unused cma=256M swiotlb=65535 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform 2 with i.MX8MP Module.conf000066400000000000000000000016371513102710000237460ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-imx8mp" DTBPATH="freescale/imx8mp-mnt-reform2.dtb" EMMC_USE=true EMMC_BOOT=warn # prevent writing u-boot to sd-card because a) the imx8mplus will only read it # from emmc anyways and b) because UBOOT_OFFSET=0 would overwrite the MBR on it SD_BOOT=false # name of devices in /dev DEV_MMC="mmcblk2" DEV_MMC_BOOT0=true DEV_SD="mmcblk0" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="25398efbfcb0019ba9b8590426ff64537ecf6637" UBOOT_PROJECT="reform-imx8mp-uboot" UBOOT_TAG="2026-01-11" # when flashing to SD-card, the correct offset is 33792 # an offset of zero would overwrite the MBR UBOOT_OFFSET=0 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests pci=pcie_bus_perf nvme_core.default_ps_max_latency_us=0 plymouth.ignore-serial-consoles console=tty1 cma=256MB" reform-tools-1.83/machines/MNT Reform 2.conf000066400000000000000000000012111513102710000205070ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-system-imx8mq" DTBPATH="freescale/imx8mq-mnt-reform2.dtb" EMMC_USE=true EMMC_BOOT=true SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk0" DEV_MMC_BOOT0=true DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="fdb8d1d5e3f9e9bfe3d956246aa9d01e37186e06" UBOOT_PROJECT="reform-boundary-uboot" UBOOT_TAG="2026-01-11" UBOOT_OFFSET=33792 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests console=ttymxc0,115200 cma=512M pci=nomsi plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/machines/MNT Reform Next with RCORE RK3588 Module.conf000066400000000000000000000015521513102710000251160ustar00rootroot00000000000000# name of the system image file produced by reform-system-image SYSIMAGE="reform-next-system-rk3588" DTBPATH="rockchip/rk3588-mnt-reform-next.dtb" # flashing the reform-system-image to emmc also flashes u-boot which might # soft-brick the module if something goes wrong EMMC_USE=true EMMC_BOOT=warn SD_BOOT=true # name of devices in /dev DEV_MMC="mmcblk0" DEV_MMC_BOOT0=false DEV_SD="mmcblk1" DEV_SSD="nvme0n1" DEV_USB="sda" # the current u-boot hashes from source.mnt.re UBOOT_SHA1="fab38259edbf6cb0103f682c1294863782882095" UBOOT_PROJECT="reform-rk3588-uboot" UBOOT_TAG="2026-01-11" # idbloader.img is expected at an offset of 32768 bytes and u-boot follows 8355840 bytes after UBOOT_OFFSET=32768 FLASHBIN_OFFSET=0 NEED_NONFREE=false BOOTARGS="ro no_console_suspend cryptomgr.notests clk_ignore_unused cma=256M swiotlb=65535 plymouth.ignore-serial-consoles console=tty1" reform-tools-1.83/modprobe.d/000077500000000000000000000000001513102710000161145ustar00rootroot00000000000000reform-tools-1.83/modprobe.d/reform.conf000066400000000000000000000016351513102710000202620ustar00rootroot00000000000000# otherwise kernels built with CONFIG_ARM_IMX8M_DDRC_DEVFREQ=m will result in # a system that locks up early during boot blacklist imx8m-ddrc # Installing the mdadm package disables the wm8960audio sound card with these # errors on dmesg: # fsl-sai 308b0000.sai: Missing dma channel for stream: 0 # fsl-sai 308b0000.sai: ASoC: error at snd_soc_pcm_component_new on 308b0000.sai: -22 # fsl-asoc-card sound: ASoC: can't create pcm HiFi :-22 # fsl-asoc-card sound: error -EINVAL: snd_soc_register_card failed # fsl-asoc-card: probe of sound failed with error -22 # It is not clear why this happens and the proper solution needs more # investigation. Until then, disabling the raid456 module will restore audio # at the cost of disabling raid. blacklist raid456 # the i.MX8MPlus module has QCA9377 SDIO wifi which is incompatible with atk10k # currently. we're using the qcacld2 driver instead. blacklist ath10k_sdio reform-tools-1.83/plymouth/000077500000000000000000000000001513102710000157445ustar00rootroot00000000000000reform-tools-1.83/plymouth/monobar.c000066400000000000000000000541761513102710000175620ustar00rootroot00000000000000// This is the tribar plymouth plugin from plymouth 24.004.60 renamed to // monobar with the following changes: // // * We want a single white progress bar (not three) and hence the rename to // monobar // * The blue bar shows the actual progress, the white bar is always behind // and the brown bar is always ahead. We thus let the white bar remain // white (the color of the bar), make the blue color also white (this is // our progress bar) and make the brown color black (the background) // * Remove the "Fun made-up smoothing function" for more accurate progress // reporting instead of making it up. // // Copyright: 2025 Johannes Schauer Marin Rodrigues // // --- tribar.c 2025-11-07 08:05:42.655259831 +0100 // +++ monobar.c 2025-11-07 08:10:23.193641099 +0100 // @@ -179,10 +179,10 @@ // 0xffffff); // ply_terminal_set_color_hex_value (terminal, // PLY_TERMINAL_COLOR_BLUE, // - 0x0073B3); // + 0xffffff); // ply_terminal_set_color_hex_value (terminal, // PLY_TERMINAL_COLOR_BROWN, // - 0x00457E); // + 0x000000); // // ply_text_display_set_background_color (view->display, // PLY_TERMINAL_COLOR_BLACK); // @@ -547,10 +547,6 @@ // // total_duration = duration / fraction_done; // // - /* Fun made-up smoothing function to make the growth asymptotic: // - * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */ // - fraction_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - fraction_done); // - // node = ply_list_get_first_node (plugin->views); // // while (node != NULL) { /* * * Copyright (C) 2008 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * Written by: Adam Jackson * Ray Strode */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ply-trigger.h" #include "ply-boot-splash-plugin.h" #include "ply-buffer.h" #include "ply-event-loop.h" #include "ply-key-file.h" #include "ply-list.h" #include "ply-logger.h" #include "ply-text-display.h" #include "ply-text-progress-bar.h" #include "ply-utils.h" #include typedef enum { PLY_BOOT_SPLASH_DISPLAY_NORMAL, PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY, PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY } ply_boot_splash_display_type_t; struct _ply_boot_splash_plugin { ply_event_loop_t *loop; ply_boot_splash_mode_t mode; ply_list_t *views; ply_boot_splash_display_type_t state; char *message; uint32_t is_animating : 1; }; typedef struct { ply_boot_splash_plugin_t *plugin; ply_text_display_t *display; ply_text_progress_bar_t *progress_bar; } view_t; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); static void hide_splash_screen (ply_boot_splash_plugin_t *plugin, ply_event_loop_t *loop); static view_t * view_new (ply_boot_splash_plugin_t *plugin, ply_text_display_t *display) { view_t *view; view = calloc (1, sizeof(view_t)); view->plugin = plugin; view->display = display; view->progress_bar = ply_text_progress_bar_new (); return view; } static void view_free (view_t *view) { ply_text_progress_bar_free (view->progress_bar); free (view); } static void view_show_message (view_t *view) { ply_boot_splash_plugin_t *plugin; int display_width, display_height; plugin = view->plugin; display_width = ply_text_display_get_number_of_columns (view->display); display_height = ply_text_display_get_number_of_rows (view->display); ply_text_display_set_cursor_position (view->display, 0, display_height / 2); ply_text_display_clear_line (view->display); ply_text_display_set_cursor_position (view->display, (display_width - strlen (plugin->message)) / 2, display_height / 2); ply_text_display_write (view->display, "%s", plugin->message); } static void view_show_prompt (view_t *view, const char *prompt, const char *entered_text) { int display_width, display_height; int i; display_width = ply_text_display_get_number_of_columns (view->display); display_height = ply_text_display_get_number_of_rows (view->display); ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT); ply_text_display_clear_screen (view->display); ply_text_display_set_cursor_position (view->display, 0, display_height / 2); for (i = 0; i < display_width; i++) { ply_text_display_write (view->display, "%c", ' '); } ply_text_display_set_cursor_position (view->display, display_width / 2 - (strlen (prompt)), display_height / 2); ply_text_display_write (view->display, "%s:%s", prompt, entered_text); ply_text_display_show_cursor (view->display); } static void view_start_animation (view_t *view) { ply_boot_splash_plugin_t *plugin; ply_terminal_t *terminal; assert (view != NULL); plugin = view->plugin; terminal = ply_text_display_get_terminal (view->display); ply_terminal_set_color_hex_value (terminal, PLY_TERMINAL_COLOR_BLACK, 0x000000); ply_terminal_set_color_hex_value (terminal, PLY_TERMINAL_COLOR_WHITE, 0xffffff); ply_terminal_set_color_hex_value (terminal, PLY_TERMINAL_COLOR_BLUE, 0xffffff); ply_terminal_set_color_hex_value (terminal, PLY_TERMINAL_COLOR_BROWN, 0x000000); ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_BLACK); ply_text_display_clear_screen (view->display); ply_text_display_hide_cursor (view->display); if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) { ply_text_progress_bar_hide (view->progress_bar); return; } ply_text_progress_bar_show (view->progress_bar, view->display); } static void view_redraw (view_t *view) { unsigned long screen_width, screen_height; screen_width = ply_text_display_get_number_of_columns (view->display); screen_height = ply_text_display_get_number_of_rows (view->display); ply_text_display_draw_area (view->display, 0, 0, screen_width, screen_height); } static void redraw_views (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_redraw (view); node = next_node; } } static void view_hide (view_t *view) { if (view->display != NULL) { ply_terminal_t *terminal; terminal = ply_text_display_get_terminal (view->display); ply_terminal_reset_colors (terminal); ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT); ply_text_display_clear_screen (view->display); ply_text_display_show_cursor (view->display); } } static void hide_views (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_hide (view); node = next_node; } } static void pause_views (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); ply_text_display_pause_updates (view->display); node = next_node; } } static void unpause_views (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); ply_text_display_unpause_updates (view->display); node = next_node; } } static ply_boot_splash_plugin_t * create_plugin (ply_key_file_t *key_file) { ply_boot_splash_plugin_t *plugin; ply_trace ("creating plugin"); plugin = calloc (1, sizeof(ply_boot_splash_plugin_t)); plugin->message = NULL; plugin->views = ply_list_new (); return plugin; } static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin) { plugin->loop = NULL; ply_trace ("detaching from event loop"); } static void free_views (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_free (view); ply_list_remove_node (plugin->views, node); node = next_node; } ply_list_free (plugin->views); plugin->views = NULL; } static void destroy_plugin (ply_boot_splash_plugin_t *plugin) { ply_trace ("destroying plugin"); if (plugin == NULL) return; /* It doesn't ever make sense to keep this plugin on screen * after exit */ hide_splash_screen (plugin, plugin->loop); free_views (plugin); if (plugin->message != NULL) free (plugin->message); free (plugin); } static void show_message (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_show_message (view); node = next_node; } } static void start_animation (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; assert (plugin != NULL); assert (plugin->loop != NULL); redraw_views (plugin); if (plugin->message != NULL) show_message (plugin); if (plugin->is_animating) return; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_start_animation (view); node = next_node; } plugin->is_animating = true; } static void stop_animation (ply_boot_splash_plugin_t *plugin) { ply_list_node_t *node; assert (plugin != NULL); assert (plugin->loop != NULL); if (!plugin->is_animating) return; plugin->is_animating = false; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); ply_text_progress_bar_hide (view->progress_bar); node = next_node; } redraw_views (plugin); } static void on_draw (view_t *view, ply_terminal_t *terminal, int x, int y, int width, int height) { ply_text_display_clear_screen (view->display); } static void add_text_display (ply_boot_splash_plugin_t *plugin, ply_text_display_t *display) { view_t *view; ply_terminal_t *terminal; view = view_new (plugin, display); terminal = ply_text_display_get_terminal (view->display); if (ply_terminal_open (terminal)) ply_terminal_activate_vt (terminal); ply_text_display_set_draw_handler (view->display, (ply_text_display_draw_handler_t) on_draw, view); ply_list_append_data (plugin->views, view); if (plugin->is_animating) view_start_animation (view); } static void remove_text_display (ply_boot_splash_plugin_t *plugin, ply_text_display_t *display) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { view_t *view; ply_list_node_t *next_node; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); if (view->display == display) { ply_text_display_set_draw_handler (view->display, NULL, NULL); view_free (view); ply_list_remove_node (plugin->views, node); return; } node = next_node; } } static bool show_splash_screen (ply_boot_splash_plugin_t *plugin, ply_event_loop_t *loop, ply_buffer_t *boot_buffer, ply_boot_splash_mode_t mode) { assert (plugin != NULL); plugin->loop = loop; plugin->mode = mode; ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t) detach_from_event_loop, plugin); ply_show_new_kernel_messages (false); start_animation (plugin); return true; } static void update_status (ply_boot_splash_plugin_t *plugin, const char *status) { assert (plugin != NULL); ply_trace ("status update"); } static void on_boot_progress (ply_boot_splash_plugin_t *plugin, double duration, double fraction_done) { ply_list_node_t *node; double total_duration; total_duration = duration / fraction_done; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); ply_text_progress_bar_set_fraction_done (view->progress_bar, fraction_done); if (plugin->is_animating) ply_text_progress_bar_draw (view->progress_bar); node = next_node; } } static void hide_splash_screen (ply_boot_splash_plugin_t *plugin, ply_event_loop_t *loop) { assert (plugin != NULL); ply_trace ("hiding splash screen"); if (plugin->loop != NULL) { stop_animation (plugin); ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) detach_from_event_loop, plugin); detach_from_event_loop (plugin); } hide_views (plugin); ply_show_new_kernel_messages (true); } static void display_normal (ply_boot_splash_plugin_t *plugin) { pause_views (plugin); if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL) { plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL; start_animation (plugin); redraw_views (plugin); } unpause_views (plugin); } static void display_message (ply_boot_splash_plugin_t *plugin, const char *message) { if (plugin->message != NULL) free (plugin->message); plugin->message = strdup (message); start_animation (plugin); } static void show_password_prompt (ply_boot_splash_plugin_t *plugin, const char *prompt, int bullets) { ply_list_node_t *node; int i; char *entered_text; entered_text = calloc (bullets + 1, sizeof(char)); for (i = 0; i < bullets; i++) { entered_text[i] = '*'; } node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_show_prompt (view, prompt, entered_text); node = next_node; } free (entered_text); } static void show_prompt (ply_boot_splash_plugin_t *plugin, const char *prompt, const char *text) { ply_list_node_t *node; node = ply_list_get_first_node (plugin->views); while (node != NULL) { ply_list_node_t *next_node; view_t *view; view = ply_list_node_get_data (node); next_node = ply_list_get_next_node (plugin->views, node); view_show_prompt (view, prompt, text); node = next_node; } } static void display_password (ply_boot_splash_plugin_t *plugin, const char *prompt, int bullets) { pause_views (plugin); if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL) stop_animation (plugin); plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY; if (!prompt) prompt = "Password"; show_password_prompt (plugin, prompt, bullets); unpause_views (plugin); } static void display_question (ply_boot_splash_plugin_t *plugin, const char *prompt, const char *entry_text) { pause_views (plugin); if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL) stop_animation (plugin); plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY; if (!prompt) prompt = "Password"; show_prompt (plugin, prompt, entry_text); unpause_views (plugin); } ply_boot_splash_plugin_interface_t * ply_boot_splash_plugin_get_interface (void) { static ply_boot_splash_plugin_interface_t plugin_interface = { .create_plugin = create_plugin, .destroy_plugin = destroy_plugin, .add_text_display = add_text_display, .remove_text_display = remove_text_display, .show_splash_screen = show_splash_screen, .update_status = update_status, .on_boot_progress = on_boot_progress, .hide_splash_screen = hide_splash_screen, .display_normal = display_normal, .display_message = display_message, .display_password = display_password, .display_question = display_question, }; return &plugin_interface; } reform-tools-1.83/plymouth/monobar.plymouth000066400000000000000000000001711513102710000212030ustar00rootroot00000000000000[Plymouth Theme] Name=Monobar Description=Text mode theme with mono-color progress bar for MNT Reform ModuleName=monobar reform-tools-1.83/plymouth/reform-y2k.plymouth000066400000000000000000000026401513102710000215460ustar00rootroot00000000000000[Plymouth Theme] Name=MNT Reform theme with Y2K background Description=Simple spinner theme for the MNT Reform with Y2K background ModuleName=two-step [two-step] Font=Inter Medium 11 TitleFont=Inter Medium 30 ImageDir=/usr/share/plymouth/themes/reform-y2k DialogHorizontalAlignment=.5 DialogVerticalAlignment=.382 TitleHorizontalAlignment=.5 TitleVerticalAlignment=.382 HorizontalAlignment=.5 VerticalAlignment=.7 WatermarkHorizontalAlignment=.5 WatermarkVerticalAlignment=.96 Transition=none TransitionDuration=0.0 BackgroundStartColor=0x000000 BackgroundEndColor=0x000000 ProgressBarBackgroundColor=0x606060 ProgressBarForegroundColor=0xffffff MessageBelowAnimation=true ScaleBackgroundImage=true [boot-up] UseEndAnimation=false [shutdown] UseEndAnimation=false [reboot] UseEndAnimation=false [updates] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true Title=Installing Updates... SubTitle=Do not turn off your computer [system-upgrade] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true Title=Upgrading System... SubTitle=Do not turn off your computer [firmware-upgrade] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true Title=Upgrading Firmware... SubTitle=Do not turn off your computer [system-reset] SuppressMessages=true ProgressBarShowPercentComplete=true UseProgressBar=true Title=Resetting System... SubTitle=Do not turn off your computer reform-tools-1.83/schemas/000077500000000000000000000000001513102710000155065ustar00rootroot00000000000000reform-tools-1.83/schemas/20_reform.gschema.override000066400000000000000000000137031513102710000224540ustar00rootroot00000000000000# This file is named 20_reform.gschema.override so that it has a higher # priority than 10_gsettings-desktop-schemas.gschema.override which also # sets monospace-font-name. # # These defaults avoid having to call gsettings in sway config which would # override user choices every time sway starts unless the user changes the # sway config itself. [org.gnome.desktop.interface] icon-theme = 'Adwaita' font-name = 'Inter Medium 11' monospace-font-name = 'JetBrains Mono 12' gtk-theme = 'Adwaita' cursor-theme = 'Adwaita' color-scheme = 'prefer-dark' show-battery-percentage = true [org.gnome.desktop.background] picture-options = 'zoom' picture-uri = 'file:///usr/share/backgrounds/mnt-reform-next-y2k.jpg' picture-uri-dark = 'file:///usr/share/backgrounds/mnt-reform-next-y2k.jpg' primary-color = '#000000' picture-opacity = 100 # disable "Automatic Screen Blank" [org.gnome.desktop.session] idle-delay = 0 # Show the accessibility menu by default [org.gnome.desktop.a11y] always-show-universal-access-status = true # Default favorite apps in the dock [org.gnome.shell] favorite-apps = ['org.gnome.Nautilus.desktop', 'org.gnome.TextEditor.desktop', 'firefox.desktop', 'org.gnome.Evolution.desktop', 'libreoffice-writer.desktop', 'libreoffice-calc.desktop', 'org.gnome.Ptyxis.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Weather.desktop', 'org.gnome.Yelp.desktop'] # Make EURkey layout and compose work [org.gnome.desktop.input-sources] show-all-sources = true xkb-options = ['compose:rctrl', 'lv3:ralt_switch'] # this is hogging Super+Escape by default [org.gnome.mutter.wayland.keybindings] restore-shortcuts = @as [] # Fractional scaling reduces the rendering performance. # Remove 'scale-monitor-framebuffer' from the list. [org.gnome.mutter:GNOME] experimental-features=['xwayland-native-scaling'] # Don't attach modal windows, it's annoying when some windows can't be moved individually [org.gnome.mutter] attach-modal-dialogs = false [org.gnome.settings-daemon.plugins.media-keys] help = @as [] keyboard-brightness-down-static = @as [] keyboard-brightness-up-static = @as [] custom-keybindings = ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/'] # /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ # can be populated via gsettings like so: # gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'Launch Terminal' # gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'xdg-terminal-exec' # gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding 'Return' # The syntax with the colon indicates a relocatable schema. Unfortunately, # relocatable schemas are not supported by gschema override files. To # initialize the user's dconf database with the custom keybinding, we have to # use /etc/dconf/db/local.d/reform # these are hogging super+numbers / super+shift numbers by default [org.gnome.shell.keybindings] switch-to-application-1 = @as [] switch-to-application-2 = @as [] switch-to-application-3 = @as [] switch-to-application-4 = @as [] switch-to-application-5 = @as [] switch-to-application-6 = @as [] switch-to-application-7 = @as [] switch-to-application-8 = @as [] switch-to-application-9 = @as [] open-new-window-application-1 = @as [] open-new-window-application-2 = @as [] open-new-window-application-3 = @as [] open-new-window-application-4 = @as [] open-new-window-application-5 = @as [] open-new-window-application-6 = @as [] open-new-window-application-7 = @as [] open-new-window-application-8 = @as [] open-new-window-application-9 = @as [] screenshot = ['s'] show-screenshot-ui = ['x'] show-screen-recording-ui = ['r'] screen-brightness-down = ['XF86MonBrightnessDown', 'F1'] screen-brightness-up = ['XF86MonBrightnessUp', 'F2'] ## window actions [org.gnome.desktop.wm.keybindings] toggle-fullscreen = ['f'] close = ['Escape'] maximize = ['Up'] unmaximize = ['Down'] switch-applications = ['Tab'] switch-applications-backward = ['Tab'] switch-group = ['Tab'] switch-group-backward = ['Tab'] switch-to-workspace-1 = ['1'] switch-to-workspace-10 = ['0'] switch-to-workspace-2 = ['2'] switch-to-workspace-3 = ['3'] switch-to-workspace-4 = ['4'] switch-to-workspace-5 = ['5'] switch-to-workspace-6 = ['6'] switch-to-workspace-7 = ['7'] switch-to-workspace-8 = ['8'] switch-to-workspace-9 = ['9'] move-to-workspace-1 = ['1'] move-to-workspace-10 = ['0'] move-to-workspace-2 = ['2'] move-to-workspace-3 = ['3'] move-to-workspace-4 = ['4'] move-to-workspace-5 = ['5'] move-to-workspace-6 = ['6'] move-to-workspace-7 = ['7'] move-to-workspace-8 = ['8'] move-to-workspace-9 = ['9'] ## window tweaks (more buttons, move+resize with super+drag) [org.gnome.desktop.wm.preferences] action-double-click-titlebar = 'toggle-maximize' button-layout = 'appmenu:minimize,maximize,close' mouse-button-modifier = '' resize-with-right-button = true ## extensions [org.gnome.shell] enabled-extensions = ['dash-to-dock@micxgx.gmail.com'] [org.gnome.shell.extensions.dash-to-dock] hot-keys = false disable-overview-on-startup = true ## disable standby (the GDM part is set in /etc/gdm3/greeter.dconf-defaults) [org.gnome.settings-daemon.plugins.power] sleep-inactive-ac-type = 'nothing' sleep-inactive-battery-type = 'nothing' power-button-action = 'interactive' ## disable automatic downloads consuming bandwidth and noisy notifications about updates [org.gnome.software] allow-updates = false download-updates = false download-updates-notify = false reform-tools-1.83/sddm/000077500000000000000000000000001513102710000150125ustar00rootroot00000000000000reform-tools-1.83/sddm/10-wayland.conf000066400000000000000000000003661513102710000175430ustar00rootroot00000000000000# https://wiki.archlinux.org/title/SDDM#KDE_Plasma_/_KWin [General] DisplayServer=wayland GreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell [Wayland] CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1 reform-tools-1.83/share/000077500000000000000000000000001513102710000151655ustar00rootroot00000000000000reform-tools-1.83/share/backgrounds/000077500000000000000000000000001513102710000174675ustar00rootroot00000000000000reform-tools-1.83/share/backgrounds/mnt-reform-next-y2k.jpg000066400000000000000000140700051513102710000237450ustar00rootroot00000000000000JFIFExifII*bj(1 r2i22GIMP 2.99.142024:09:05 17:30:38 http://ns.adobe.com/xap/1.0/ ICC_PROFILElcms@mntrRGB XYZ  -acspAPPL-lcms desc @cprt`6wtptchad,rXYZbXYZgXYZrTRC gTRC bTRC chrm4$dmndX$dmdd|$mluc enUS$GIMP built-in sRGBmluc enUSPublic DomainXYZ -sf32 B%nXYZ o8XYZ $XYZ bparaff Y [chrmT|L&g\mluc enUSGIMPmluc enUSsRGBCreated with GIMPC     C  p"  S!]Yb.)\ @+FPf"&e,-ffծK ]0UZCƁ MEJ 6Q\aс;̣OkZw43aJTR54q4P% Z+DJ\$+EҵKPEV:=QjYRbIEtIi7Y`ՕT\2:CDb3Q1V{d0ba4#icO50)*;%R.YKVHp.*$kI %e+e6V F hT9WdG̫1V 1KMVte,& ɬj.tҩ'E148`@V YtZƂ #K)fIDp@ IL)*U,εEQf),d. D9btU((l[)ʺv+-eƀ6`2ʦ̌_*PmccD+UFR3L,ىav"YWaQAK(tSX@n5emb_6,[LT Qy>5C-)$[͉0@`.]!Řδ#C :(Q ʪD(19'Q<bU)P&C1k*uyҀVR@tJUZJհ`XŔǟ&(UKMJȹ-dV6 QBaqW3xƙЂ0X- Y 5Յi0)<Ql5!M6Q,1Nb&b%fDrB Yƕ)%E dL,: O<,T%J$)(B60W1 (+RE*:b@l d'L+1(W`U(71*ƞz,5 VRxBFP!*h1Ljs٭*{4hDfG@QYK@%# Ȗ,b2Q)huYBn,ԙ`U it[[Nn(+hU,d I[ ƗIa#@*X*W+,;U"&ZTtY`+X^&j1sQ4&pHH,]HSNsbAR%dL|2'x^L]&ŪTP46l Q1062d̃E)z/Ԩ>rX|C\J.ѣ5W&8µd+0Ҵ.$ؠ:20@2"Z=Pd$Z V–e#Qb] tIFѐY34yjFCE6gU<ӲpH۟g&Ԡh%V:P+a+YG dwUjsd6QkDt|k)hRlQʪҚ,g:D/beeX;-ɂԃP-wFatPC3|l*YUUi ;b2. f|lFJ%QYaA с ^eac^t9emKR"lfiԂZYB#k#΋n 2%6zN!uіVVK+7\UEIY:K)@dP!LڲvS!V+B%ęÍF2(S S)Y\XQ! Rg@t<bҫ. h7Ҽ#U%\c2恃HDtItRjԔQBAňVDtp :c`YhT#A@UF:Um,֚#c&")-q:&Ks-T:) ZA]0 HF3HCH;R+:#'ӪH )Y66/d7tHX[sfz" + hbr2+(%JK+0îAì긅It&30 K,fMRm )QFʫ4f(UbY-,C HQ4 Q@\ y̫"SX(#U<,TL%\Ӥ!Lq >0F+!%Q6()LkEV!K,Q" JViEol,SJu3:ƕ% jD 9E+OM\lV2$<2yэN L: HC(R:J^4̌0AA#얙J`"K+)LP*)P:8r1L**πL(21*̣7P(NGJNUϑ_F(DQyc)X 25ŀ昜0*RGA<dFQݑC)..z= C2 dS;ʵQJ)P@̳3*E&UWJJeFE%e[FFka*RZxU#^JtM Z*J7Jp"yQ T8ZɁ5YR բ*3JGdj˜^]&`i j"XW=URʃ2LYVtFbaU I#Z5;54l++hS`E3ƁP`(RK9 IF*^4<(ʆE5jPtB+%CXK .r+.hW &qC W)117ALe|:MG=vƝTY23" dd:P G*FQ9RDYYleVw[TQ!*hZIT@FgQ([Fʠ!cSvI=PdT)d4#u\4*LUWu&B'H e1/B[8eB%Y'DȄ1;B D ;meM @'kGETشˉmlݒJe8aEUqAEcʥ-UiEu :A3ˎ7 Rsu HLPc]c@rCgzU E)PUfi%DpY\Tf6 E JfIBkir#.)]%!+ecD*vVzCgi0Jee+ 73,bF)04(&Z#fM3.Ո%-^I21ͲIYpe6`)(RfpBrtK B8+$aYUB2`;idm ]LdQk2A5V`Q\*q 5#`p@˕nTBg+9FVH,+* LMEBi=@NRYDݬ} YTΆ]VG0 %g@gIC `PlP1N{ĸD\J%h3MWDJ 8*LԓF@*XThU,,W,@:QCR6eM\Q tIZ 鲚viE'e WP"RdشΖ>9^<*.\VmfӺF(V]N4SV(~qcT %0HU)0`M2P\jcN%0JGAPlTrȰ'TLеh3a5]PT3[ &%u3pW<8h١[p.lRtfFj\d23(*&TAfJ΢)J(WPYKi烵%fuyfō:@/7+Zd)#ۙՅhPd)6ZlRW1t(({5yPj tG=agTCMB) JSk/!q*´5:jt1i2])()7EIԋ E+,:X` Ih#R4YI ÕZ^tZiGGXQKDFC|LR* ؋R:],wD-A pWf =u!E$#6h:Ű* ]uQ )bTS[IK$LLRWa/YRK $"I̦T% (H&23yViC-2:4(3Ai/`ԙ:sdZ0` [S@GDj.UX-([ .1~rQ]eli(eXX%VnaV栗<ˡN61gդUFl^8gP0T-mls3&mJ[b= t'nuj&Ъ!!d[YBLHWmJ` 2`4 SiBj$10jT]0Le'%#YP/"gYjb3,@9gx IO% I$fhKE .  II\"^yDj+* KKNc`42X.LvAc+aF LԴ:+N+ HLɆc/JmcJDIE +!6Fijièp#lEWQVeTʓ#š6©<ܬԂ UXԆd(mΪƑJԘ:flG/2WtgfVuBA+R CBE+))UX1 #e 2Zt#B.YdZ<bb) :.m".+YMdo Rl0VZRl)l&̨t0\@D+,@Ԏ|`VMҍK$3e CZiK.-7YQ*TJʼn&bL )F (|fMy(#]#X u*ĩ1UthT`Q@=!C+06Q U&RmdB(yt QBp•FJEaVxJ-)н)'QX/2taI&D0ZZF2z&le2*Qjm*sDL=DZ:\RM6ٖ+ TkI^l3M fu&%#+M 6X3eL|%`j^lbWUb4>W&—Z D!UK)cF\ip&B 9e5,RV)lcY'^z5eD4]!J5<(!*!LyQm*jM)7b6PF 4b#DyaHj '"0*4QGV0؊ Q)HTJ. 2J^`ʀ*3LVMBfZ4BzmD`@L>\EbYq[TϡXl0FHe”69Q(苬&WifB&0a*KZBLnD\F[eEK @dt`ZET%ȁ# F6#_ЁIYUQ@ʴX\Js;(BfMb5Km'W`qEPl%SFlI QH(,VAAAQj0Tj%T́(PV, "M尠dcby%6Vj aGbtJ (f$Ó~O{z}b^kmܻM_cͼ?~$cSVoP!d;c( 1OeGڄXdUOL|42)DFS@N*:MTW!|&JLȲ !($s*̚gFHY ǠR*q $pUYd}b&X MzVe,Y-*AxZIM0Jf²a.K-.*j*H+!26yb*;guZMyX^%1*0iUcM,J>4.4uq -l@2RNDGR5EA1\YR}cK&rDO\YU se=[+S^vND32m1,d(TUc<쳛&@| s:*ZZ&Ɔ/Q'Y#. QT# a)UkWbpMNF >F\&]$X΍Sd28VF]3 %jZ,+#WfHJjSzBcC`D4|L=(VxUҌ:I<Wo?mo~?˟?-Ng_NNG3.=z>#g pOg|线E]?WO9Ohk 1+ID(e DTPLZP3Ή:'U&Zd$81A6M\)eiKI)+YUq:'1%¡PYqHg&邤@PZsB;"ЫeAXٙ jwQ`i0A5d5ETSr T`lFypӲt ,䚀28jzhY,"}$2CYdHXr#4!(結6"iO~oFv|ϦէŪ׃aџu3wp^w3{%c J{Ұq1X"9 afNePAPVlOq JCUPu JURTʅrn# JU<¸ JIG]*^R9:9ؠpjClti:E.%v*@uVS|f[RX]hYh 1 a e+4U# O?{D<_Aq'{;}ASW3ŵ7/lriû'ry^߇p>s󖞯7_E|w3wˍ`gD`cu{7yz8UӟO_W jg){_9x&q[nK嗩|O;ng/;=?m[|Nv~pxiX[l#Y(J;6xC)L,tVdd)2 ecT(JIQhlPjPBR6L-Xu+LBad!y i(2W02'D,!pG4k ì*p1LO¶Jx=bGd6rTV/,BgJJc;+.mΘu|(\ 0CVv&&9[B0 zN_&FʨZHh8sRcVZR9!'a` Sw9ˆ\tA@W&yYyY uVΤR/ԋBUPeȹtE֑>VJ idtYES%DH픣$}R!iUJM^lPƔ% ᆋ2+1vE94Be@Ӹ U%dv؁ՔR9T4zZOQdGA`b)`#,,Bl7eTƲrIJ徿ו)@ƀ򲫌tĘ-A"bf1ZM%+5%:#&ej.딄dV J!֕8GIH0l%5aC;(ƃVdxJWTDi`%@˜idJ)[2Xd)1MV$XIZc2Q0*R(j01]c3$!Ĭh bmfۢX43|Z GS笡VQ@mfddDWVZt(Vc8*tc:P[l#BUH8uVlW Mx+C$2uưZmC%Sid55EkFJ*z%iFFU21L HӦ~;ߞw|qWy2{㩓hh;ZV_>3bʽWFVK(3+ȴH+C+V%ȫxCR]ry2fTlT2RVN;S'8-7j6&U,HKV,ki&8 ,) W.y g" Ϋ2(T-X B2)Y*q70Yv@Yd D:RvQ6ȥ] cQ@wr4dJVUWiVp=Q2a ]hg@Jsq"TWeQdp+L;vx*4"XJ%j[(lD3ǨlAeIܯ0`ƕ2aY&[dПIs -h,褷>L׫ShN?;?[QU(!AXʮc)ff@bdB$̀c.5 -J(eP/2 l,Q+eV.,,= (ъHAFRc yWMZ*\ 62PXOha+RtYDF P=SFFUR3#KLaъ-y(UE:WKbhRkY Y(̧O6\lEY 1xi3<3H-8`H?!֜7/'}|.z P{{e8tÊ4jP.*|ueی?/Ow9qϵ~_=gis.E<gGk~x~&~oSO2̋EJr&Cyz>ܢEКpV`ʊXOεHtZ̎#trE%6:łleyi*:b !C2ʪ"Xe=%g-6U;*VQko{-z_[&>W?%}_9;Ó=fan~o71jON׷ՕO>N~_;q|~nf7Wӽ|/[ڟSs?__t-A^-mqƑώ%x{YxEIf,f]Yš "u"B4`ZK$*d.!*KI!*L-oX6" Y Qnl̆&䢝aAW4B̃u8ęWtԤSlҢ8(UhwBTM:)R'a0b4j%266 dVAi>5Y,IYF|*T.+N"yЕSR lƔeZ2FNaR oyPE'TTaMx#J U;' XЛ2( g\šo҆lUXfLã#,2e..bDkso yga U8\g ;293&t4[E$U$VE6ӇJ(lUJu+;8F LdJ#8IaN49DC̠*e\wү'{=%ؿ1!|_ll?JױG~ܿ;|o귛嘃&B[lb1b.0ѐG~طW`PQz'2Hdi5FZ`Z֫Es G; P䵎)Hafeo@R0ΦUx+%̤FJ@*5eBop8n,Q+6$|7f7C[1:PYR{*i$#U JI2؛UW9U6Uel:+*aBC^&3!|c/D2eºIzTTP>H%(N3$a4}+OK°heCoG3ut\f)R,b pJJxH 1L+=k-R1~{u8z"aO5'AVV2fɝPeA(2 >P%VEl`!P[DDXtqC2 (B1Ƶb1:;F14b{QA [:.HDWmҦuIFizG>?K¡hk>_Bӯ\|Fޯg^īgV4)((#^pm+[sUpx%iݲʓlB)M)VHi[i(VI# 6CE]%;k2ey`z),%QhHYG%,W~yZqj Z}$֒Vl5&&ldpL>ŽJ̈́-@42 dgDWP.d(UfJpIK"I rIVVEYXhp,YQBT024hmϪM",0 B L!ZN QDd4sm@Q jf缣0M 2($تƄ\: XJLjIEjJ1HR1 :E5I2yq]-E3lI [)7Q* D$#H6Uf ڂLb"(L)SlؕX汬jReQWS2mVँYYd}6 hy1Y-5w Qwoq/_ݿI7zmJΛ+xl>菾/U_G>=~_7719N_V>K6FS-\:~{J:9&̼g~mVM\NJhyb4ȃVMzVaq0vCuXJ=Glʂ *bFL䴑i 17 A%d)I憛eJeQ]Pj.T6#LT! ؑeԖF0)6R$S:JT9Tń5㓫k+LSY!pTS粅9BLi R4k:uV\0@1Y0 2YU,LN2r鲣aHXQQXP*j ,Y QHu O 2zFGcQ-R.V.ʻ0ⲬQ.p:i"[2Q̥#E!38B%j+3KQ4<] 48 j `0Ajei8N{: @ʌ*:P-VtJVJjDCRB*R0$24UJL橫9 WW0mb24 TRwFB=*o8l|(dF-k#Ie` .4dʵ:=(tyZn?<{c~ϗ/AkN=7=?[?}>_վ[O_5>[MyΞo1IC[:{{~^w_/O'Χꇧyx"{0!Vb@ 0F1\2λE [j?C{=UfUUeԛҮTj65XjN­+4U3*Upf\2:ΪJYgAf\F" DPs.50Q1Ѝ:4I) Ġ%Q#鐴I YQrAlGYՔgz8$&EY^YmS6d5gck @y33@B+`&)ҪRlER1TACCM. [u&y⊖]=ЌLb-dC@I0YC2( @lti ZX`&p@d PdenfydV;NȅyRR+.JU*WKd**JJS%4u*`iAaq|,f 2(GKHCiFTLRyJVT6b% Фt%pAU6ؐl4Ƴ OPmAYfS5Vsmb^CZeV YU =5&T&( *,<:&2Q^=}>RG?鞉S_oEm.Oz=ҟwQ=?7;߿&-~<4>oG5+h^G;1VV׳1wgߋ~͝~>,xן^p>ͣq1SKdMce .:nPXa-CXu PFd ȫ!2HN٤U%@6 hah2CK m2L bPjD[3k'@³$-,RȡְR2T pNkwTFu4#d,˪+'Lm;ΰ Ǥc #QZcb,xfPkf16lMLiF&RI-ZlHLH&>RlVCԤ<e%EUT^zM+2<:J̩xź0JEf]gIʊl\@JLqA22Jk`[4ARPY0iʈU ,(&\B-eOB v[fYX](Xԑ(Tvʠg^jual+EcD!hW'YiELH1H%A2s6qts2hXD<*V0YU`r%,,,l'IU *lW!?RlkeWKO?K[[!w3~OV4s˯d2%x*Ȝr'_'Vڕq8:6ͱ|jbVQΫcT^]wYua.' s6]M˶k.W?_'SC y R.1/&63a(ѕfRAdWr te u+c<^VR(j6j7 @16D-5JUi3Tk*g 锁ZfUy&' :@ LAt#NJ\-UDM]R%+zZw&@EQufk%0);K!Ţ4C h-ŞEi0*52#befT6BmcfH\Fҋɛ" !мc%֤^0ͰyiF I-`VQҩ*` Iр ʋG)6<˰3H :w؍,A4#mLE:%-Is^RZ2 00Re*!TRrBСҰ.MAm~lԔ4fPTRb%grW M"T T#)ilK$lAJEx!(i!i8ʂ9L&B(Q: Qh4lHhlâWrּ:@>bOs&e .@ف,}A\poKC{n}jʃe/|+i̤-@TD3tNѷ:=\ 6qS z&nq@W`LU2ДZbNo ITCYE [Ky D+ DJ&`Q40MFvHZj lPL mE6qU$QmvEVAn7S-$ؕlT6덞tOkrRdFe3*Kȍ 2 dbԱ`kM% Iph H,+D D30ieHf-Ď5.:R%ئe*eQV.++K7ZsI@#8!QM,Z&+;ZrQ1x Vciɭi1ؔ5Bh˪QVTm;NΊRLĺ'}H *Gu;ʽY=y~WG&?E'/SE伬jyVXrVVc9:3Ù:{{1g[֪àyޗÃ^gdAdHfDgeogIZ:NctM mΣΪME2Ivѳ%5aEZP4V#d +!>tak4P0YZ%S.R<,6YUV@uFu@Hf! -н7Pف@Ya(,4 TyfEf]PigHY,>E4'Xj[6XG"S! `Ԕ:Q(¨cbEJTԤ4CKCBJf4rnjN:EaKT)pVyʕ`) hpcMI&*hL 2eu9$̨Lȥ0vQ DM x1iC.uG.҉ hɟ(qҲ.*B B1A9Ada#Kc,㑝db&ydU0+3Lˇh-++ak7N)"8Qz,snM))1^Tjstgټqo&fR/JIQ!µ#2x]/=& 1ItGЖ{nstW?w[O`#.nNJwno_۴tty/Gӏi_|4z;g{.xV!R kFDJ J!X$25%U,RdMcaIFRk I[9jEO;8б#5Sš)Y YR3:0ahQ(14ҭTYs<~=H:}/5%R$faձRZ"uhg/Q4ɘ M S͖FBay: ,pqh*8T+iPe 8YZPJw(#bI\0^eRp\+Ȫ23G),hf+UYBSe2;i,C2%ZA++|!XLTuį6 1 Z#Q,gJ-hXTRybYDMXcf2R4*9a+2j/;Eͬi3JAB4$Bea*04d.5&*眎d :T;Jy%Z`Z%R;yES sav! 󰁀V2KW+FbYo;NfM6Z>m4\8 K4Vt.2Gɭ 6 L%B\iQ1ξס>Q㿙?}~R߮wgsk[jc/:?R1 pds~ɳɧl~:m=RN)]Q~~~5ʣ*fuC.Ew[-b]&]{UƎ>g:t>o+eOWpTx9bsV^WTgLgI5ayRw\瑯u{=n.OGȇ_?0-qfCr/NPi]Qj)7P;-Ik2EyTDބ>I!ԧ=HнyYMMJ4dgT8ۢk'bZ+t8]l2#e:MSJQ( 4($PZ6iRfcգ%$dI#Pu^d2 ZPqh a EڂVlё pb"zV,&f4T|l7jvGPc:dh,6r P_ VM U6Ʈj. ,R!PjPԉ:b4t-up_\ldC u 8bJ+QZ 64ˢV8<)UDmEP6ӊf'8y qE:B@-,B=MUJ LGAJƞιu}xs7S‡7_ Wwv886tܺ~ˣg֙Y|0qtKqӧ|4}O <}7|'N>מX?i&yio~ӯCv??ݏȏrg<9㯯hO*Wѥ^{췃 y^ϏS}?_>{x<^/WɆ禎mrGM|'Kyek~~Opul U2̔13O>fk=Vٿ?{;xug+OO/N~H۲uV*٦S8[^TB|a%6U͔;9"bc #LK)1(NVJ3`N@J֢,9 Mm(͖&D蚬@!qT68\pemKi-3MfH; ؘyZmQ]@%D\H墔( Q0i<-6'Fxɔ33#B!i 9211VLy0Cgi;)=s]UL䋪awJ-6*006``Fem)\llgVe(^)bJ+P(#i~{N+A4QLu,":ŦMQ& 2@>APJĢ3F!;Pa4( *JuLޙǻx*wxSGw~՟~=ށe~[odIK÷#_O597/_tt{]^GgܫH>O?cncO~[o՟>᧊G1KM|ǟڿWN}n:}xL>x } +wc wY|wqmwM7j|>Dޭ>?>z7_[͖>wO0M>u%QɕT( hoaM0nGs;/K\6C~V*eX!iĵepԃXs C&rYUU]%gXF6tpQGG+ȻT1֮{!Lˑ*s '@5mCbPp2jZT&1oYsh@+4&V *&;]b& TJVF8YJ>6ePe3aaR&*1bBi!/e JAU,\etJ+M\4C25VӮ)i+aCL0i&S`ꎚ6 c4p :X@i)uVT4ƘeuI16-J5jIc9Z,uUΩ+RnDwZ6Kp ,/O"T*qz @bgʎ [ P i"Up<>i-BU3h\+l6F~1o72o+S}SG7fn<{q7}?i8zoU;N~פݔ~}c?C<϶S?@|/qqxO"j?o?gݿN5b|8[i?ΟKo5ww~w^D<{_{|_o.8%;3W7<ڸ6W] wozޜw#Co/6yrwC:#ӧO7ٶ^[:zඟn~Oݾi|O7_SϿzR}ڒɰYڬ]*082jXPNVy(S:h4Nyh LB4Ybا`gM@(!@WlYX+e(#PaС4L*ҪH\f4W̺"%@Ty(H^kT ZFW E lk%!QAIQ2ӗKg)}@Q { 1EDjL+U1M[)1X%E@std:zi:K'TQCT"c :ɶyY%LP$/B k3J(.a]h4Ajel]lūˊØL%pȭZʨ,_-&P%f23Pi,Uh)*ڊIMA9Gip|V-+(ZTTiKʍnk^{Xf 0$l$DBdx{I=:|tz^} #ll~Ti_foWnC_CzOGDV>G~-6'=W_:a7oGs9Ϳt<鷏yON|<[5}oܝoM?VrlpmOO yi=^c{=/_OXleyy=x{}Cʞs7S'ֶveFrwǁ>׮:V猘eH]QXHi]3n( 9,mLmy;|ۯIoG?}mCm;qՙIW2NJ, B05"e*}+H*jL[Mx@ ZWJPE)`sSa[k5%e $utsEgUW dJ2KI**AN'\KDqH EU(< q~vaW@ט Be.FZ).fXTRfU\娸\Q8؊\d艝J5(3̈́ ASLPFBVPecI.ZeYVZ)Ź*kNƔ)F#6=jBlVZj@^UҢ԰x,լjcAT'B̆VYіsm !KLZ5VqDb Y@/bI]3*ιM$QS5Z4ԥ+" 57\wpua0>_sjp{enfFݝ+}++\;Kʝ]˶Ծwg.LÂ>N}qy\~CG||{g۷{<9KRvGuNn>v6my0}m>9W}_'y¶09៻SoG/;i}\07}Jݛ>ϏKO_'Or>7/]knݾZЍGJssNu4%8 3c,Mٰ Uf{xvnzyg}7gGGڨ}M^}z7?,y?|'ɐϙ6ߟE^}wse ;t'-Id˵q2iPmL~n5Mߴ!#wҞz˛Ç/{6y]O~7\krVyx׿5BZ q Xz|3ѧyͦaͨM8cd݇{/^j/m!&LN52tI): DdIspBIզ#5`+:crnS[! idT9TIrd , GVc#>!\ ʵ@g!Ѩ$Mjpହ#.KiUEfl|ș_iVHrA'LCP䓙E!UBH 5fHp_J6S68Ԭ[$ x#ʌ5)6*uqlD&GZLؗeΓe0`Adԙ*P ϚFyZϦRJj)Tn[heʓ( %T:) )CBdjdJM6fcE[2.W(c<2(;fq&+:l5TGi'U2:&G~WP:}o֝3nv_7wGU]=hѧFi_M*R{039K2In-#{%N{J cRG9(VIu2雉&=MZ*0.ARXhi 0@ڂaiiW4]1:-@ a#csaNkU d-K:86Yrpj麆#pc4Uer L#dط7B(GvLGSi4!5FeqtT]MU RoU&w3\FкaX!T"`SQՔM2 Sxy9?='G;b?o^]vF=˜kj'wOth^fԶݻvx}t>o{,iR]e~RrO#W&\ޜ8'15jgtw1U =LrH-[eJ` ,#-G!VSWzQϡY{/"E|琒?'7~>z}qJ X 8-7j("3&%RY8)E*4d0 KF sa;bL 1Ҝ'p(i(S.2l, 5f'rxdVh`Z}YBHt x@'XJOIM2HhCrE$"ja2USYrvX(4&XΥb69! TQa 3ҥWBrXPX`UP'T4TA): SKpec0iFD V@ IfXĔ%WPDJRG& ZYdk$ i@VT!66 *ee( Jұ) ҧFeV&f(Mal%rF*l!Di1±BI-2sB?1n u4:Dit]ie*/^z}TOʯ>oXa|=\ܓ_ib/WoDycyrh'ͫ|އ/ЃNnSKc{ʡWf.xΏʔ%yn]>7O?<ܖl&]Gym||ǃv]ӫtP Iи:v6TiC2n{ӯOG4/^^Nr3ٷӯa~*^WhzߟϵyyGwܭpV@ rg ~lQLUˑVP IU II-JPu,VzLK`QРUS#(Qf&A@ ,l] *U< tf[&甫8X-6yAGJ&紺䋕lE8 1f@d9v y@ ͬ5J(VUTΨVw^U s2 -Z,6U 3 3uqDa*YNzh(Fx2=VgDQ(C)BQ4F/jZiΛ+ (T⫪eGqeiA\= aeQ(# ,5$paœE8 ;5։X+MBby+k&檲4F`;J{0}H9^HtZƶnΎC9> 8ӹzzy6x,E.*ebgFgIV]˞VYݍty7Z7m>Ccte|9<>n_o_O? _3?_wwf:::~c|zϴ˹=;ˎ[Fڝ:#22z"@|% )=6+"u+J`̔I3(C3B- 3eΩ9la@+ktK8^MaSe]2^Olґƴ\qXRxElقҬ:tNک)o2D!I(a+랓:CEJ;{JqHgџV XV3#7ԢDr9ȡofYtz QXR(yPjL#25$B"Ⴐ7%i( =LfyRsVÙy;N>?'&m= gTlpkb,bqN sa.~n.nsl6.sW?>^qSvߎ(5U#</7R?Ba :[qIWnle #@V̺gy:-wn~ies|o{p۹_n}-gfﴍ,)x>uٿ'+?!~kvptrƩy_1˰h[Q-1!7DlV PʢVu4]G@s$ BU: <\Q3NL1{* #D)+#=NLhT+7yg BbtI\FP2RBάE@FH4Pl )#!QZQ%Y8R.#9@iS%f `\:8i %()Z0&@0Py#! Bt^{UiŎ(f6Yi+ZU*L8N9%|)6ZMVFR[)h(4! eVxPeS$ϪTЖl#`\ uY*JxFliV3aRꘄ)L *2dک]I!d։3"rZ([K=&?m{~o]?Rj{_j<ŗC3SVtV~_u|/7WZ|w7y=Xrtssq!烄vyQvwwuz/\1կՇٸ{'ͦXVϊ8us&Knw_U}-oWwE}ׯi˧}=r^>.N/5>_+C ?b5u7_Ot왇}''=xGW'k3}gO;>_>~M+/nrW~4B7g/M;|D?Eq~Cۦ+L+\{F<>fUYs B2̵<}ߛ{ov'XreUYD𩁲H9l$`N!`e^`HU, J=.0ѨQ@!$gP9UXBs"ò=< ;PU0rc,ҩ)^4مKLt(ܠ( F$͔YL({^sɰP1#-$@H^YYe%ehʴ0B; ΚT5@Lʹf"aUT|h#A+4J`."IRe4V* 2@E#MKIWebieB5.E'F1F !X"p]NYZOb13bL,(UZk<+%$R̥cd)1yߞ̣+??oVZ{ 'C.[~δ_}z{Qx||GtgG//'7țluml߳>nmvlOE|:an_\xrQ/N{9G7CtoOlӊt9e.>ow'qy?)}|~OՍ71u<մc}Z^<;㏟#󷧱nޡ(z-:}/7J"v}oޟ:2ߗN`ֺdʔQ ^s֐XfҍRlDBfl.tc)s()HaZ:L064% &@LaxpVH &3 sNKc10M, ή8HR-yHFVdVmɆ&ҳ0+SVqO<i%p]f#Α.QfrmR&k2UChgixV񠦛,f3MkJli9\VɊƤD%tԋi=)A`PrXl(LHJ#R id( KX 7 W*>kJ:ĬbBU!;0y/W4#⿕t~~=gw=~f& /ן-=~x~\lR1y\m~7_Q߯}}J:1n,*{<ݶNUHE얹#;^Nux's ʾ>N'o>ogQ{/\>={;e|qn3q|.ϯ=5ƻtl.}onVPy‘0Mj[ TMP6:4(~F7ktz޾kOJ93?=?=#u~|>ݗ-k~Ү.5>>[PՏ3ϠsO5le3õ֜5aj(i,{Xzvx{{هjp^r{5ۏΧ[7w~}~aO\weQKvi>|Guk;4:|:n4LV‹7BYr9}l`S莉ZuRZ&[  *KꍣRFTA;yiYg(ʛd`vPm<ֹ5dl]Լ ]@,## ]lMJU-Zx &zJ)ҒnkGб0θf!b ʃ@ Q,LM bP2)y(3:X:/(5 j钪RS&+YIA,=i#F]ZAȭdue/QlIg+Ds6Ek4?y^!z|.[R}W/}y}N/eOڽ7S=~-<E;|wO-c-=uէ잭~Ouo5*Ħ_R%5̋:;|ؗϦ!>z^'rwn?C>p}W?[A~]=U8H>ox?X~K=|7|?_o,lfwC.{vglld8J yA5R;LMdrۺ} >=o+Ϯ5~ausp#}͞GwoKA}'Ã/&=>]^ncn>?%/tڎ a-V]W|i=}sM___|ggUy^ߝnrl[u_ N*VlU`wpNޯ?Jл%^E@S2RY8饎Y%ATe-W ZUz hL$@Uf ~`-UUMbieeD S=SY%Qc'M 29lGlTQYU ƪ-U) K &QE)cIijT (^r&,5 [VBNE%3FݒL %*FLfG$F8 :%cFFֲtGZVF0&tJl6Y*-ΆHVƧ5 cbSʭJLt!noGxkrOK~Nz]} ;}{x/oQtv^>iv~_LNISwO7oؽ ν??_WSgL:MmՃ]g>hrlj:%g c"$s8fLFXFz=Ez_ѐ`q;ݛ<;zKI}^/Oo#ֶ?]}?C/ʷ?WU~o=Lz_#)n9oPy}7 w޾^>/7!駚qڼ-FZ&K3oG?vox6}1g6?i|p{KoizKf>O4y6Go_aY^{3?ч7o{m8ǿI*M%lߣ/{?Eߡz~u{ף6[eƼ-Kru޻o{x-.eI3L'_3"ik-f(:c%ΧX4RDdU(aX0!BLScBa:-IʉIF`T^(𗎊 ui"rV$3`Dʔ "+LUҥ҄PP4i()aF5VF@ATaZvΠL| YRH~rT#)Tj$WKB/ g+n*dx(t63+erna&# Tȵ l]k¶&W1^Z C+Y.NPZ \E"c&ar[ЩSѽRކskϷ?ͺ>?7?E.g/'Q9z,;>N]VB|z~Ώn_g7/~m?\DyZ~>2?y^OtL~۶z}=~w7/~M9WC<]?(c5m^saΝ\qTqyd^_[ kSُWu(V8ݮ(Vv==5f>t&?3yp;oqo_=Ӹo/̾Oߩߧz>G?.<=^=M}6:igN[;?.oLg e>^h0Fd<.ê}пL]='j>gW O%s*+W꧗{ۏ/ׯm~ƮawoI9}?/|Sl6ȫ1EdG1m8{zgWސipjKkʯ4QtL\*J%e3g$T L63 ҠJ @JDTTWʕG")‘h 8@lhup)3FkHNÓR"=S3e2:-s*6J`LEf䘠fVy3&2- TCxtTkd Jt(jَ^a)TKL: E`UJ*+ IAftf'AIThJIh+deQ r inNO^o#e ^]=W՝rM;<+\v[g]?So7w?v/?|owWZ_W/sgDz^to~^jsVVintО'g^s=;R<̩Ǘ5f=OCחKǃԛtkTĽpvqyc^ok_WoO58<37GgFiXshXuӪ=6:m{)YrQЩ&t6 G ͈F4E$f..a(-b6)/% eC3=U-D mI`3${*mL,07&"pW+4iL5&tThU-$seq3RY\g%AbnIKxY*v%kEPCRjߑrI:ɨ9̥Lk'iCWY━LgQ *2PZV )e\Vl Uy5˔Fl1JU4!8(#hԛe65bχs$}7We9g_ޏ7|~^w_>MxlY=׷=r鴙7S>?Kv]|׫c|-ޏl>6'z}O_gmr7> umƽ^N\Pw_:=GO濳[W?B/mϙ_OK믕N4OUV\|:h4z8::GF+ʛV&y9M0ܪz_F;̝c-|ng@tJr<_S9ul'VޜurԳ+|7_jgؾ\>\q~gsx1OOSp/;EJx:$wz>Z}d==^_&F}>?{=[#{?26a2,6er՛zzo[pNЛ:ӨLASVh%gY+FBeEa:"2S*2]i)mZҬ٬"R0Q2lFR΁xuM 6(@C*21FRjW(mEI%`AaLu#I^Ti hТI(P"ƩhIii)32PZ*THщQc)`ƚuDqJ SvE: fk Ƭʃ,`)GP![@iUPt^gD,e@A9O댴N=}tW;vҼ=۷~_GS{7x_>/,+HKrC̊8#3K>7ߋ_7N^/GM㳾|Rb89= vzW໻}ϱ;b^oS6Oxow~`־_>_g-O~_.z 0{/o7CG>,p-ۿGoWWޅ}t zGltVTn|5nc<<<m%F8˚rǛ+7*u9^FD_>ǎ<23<<ZJJm<#o?Cy+/9';xs=KϞ7z_ϙK;/gǿG/yoz.uwFz9x?NNߐGG>=Ox{r,z_Γ5ȉTf[6"fSd gY 8RiQQ\I%^S!i!RR<s?z% 7tmtxݹy1jehmo_7'Gx+yr>^_oy˜?MoGN_?g䵤:Oӻ|qtz_!}oySտ})?3:i7=ߺocnPtyxoNn 9!%%D76\]xx=칽35ULy?U'sC!) L2}j` Em;8;5:3JJ?=qNǝ?mo{'O+QG?WM:떮lj,+gGw/w??|W}σ}㿤x^g}} -_1y^OK,W_v?M_K__+:|; 8c7y_IߍrB߲/%t{y?~o~yE~^/w}O51t[J$p}h #%&fT̓T&tvs9KʆlQiɥҢYFΕK YYM\M++<~qN1:zZe7u䯒/>>nK\==W>^yϪVGwG7wGw~^.}~zwosCw/C_#ZcD^[|ﱈk咺rR&(p aFg~wS];:neZfw:Ο|ʴ/ZS(O(9(hA6vkoW=?_>s?GC^^CyB?/gȷ9͗0p2o>O4O}gҟc7zkuݏ_S1)x/嫿H9?J __st7׶ x:x4}^w?W>7x/o\wON)FZn4b'@攫%hkzT֨k>&lidԱ+7Wd6qRA 'Ӧ8vFFCT*W0R4YVU "RoEʨ7DZl"=!=aUP @Vfr0qEM`ɫb%9 yT5deT X|@U!n, I4fTcYvQid XJe^/Nz,pAhs:2trL*9.S&t\L)1c8@2e tC%H\!Qt2U-q&ESPtgzJ^L}|¯EO[utr҃nQշ~N<=Yz]]~yؘK}Rџ4z=Sg %#Ҿ+m'D]ߢ7˲ogM`:}]v??OT'_{ǯaygZe<>sqr{윛=`Zeͺg "lb30lqWѝt嫨Ϣgvi'loxp,r/#ye `{}8?%pzW_R=={~%;ΟO6C(œso7=37y>'}}Oqop%o/~|vz\g'\C3._ {d1_{ު̼ o ;U"^ܸg[l{jzӷؿKҜW}k^ΊWGwѷ->~/~W^>FgEzy^??|ǟ<|eݿ!/mzL`_>σOR<+=> OAxrULv=q%L7vyEo\?O~[:]1\ LkPAmGaaXr6]LTPdp!VɡҜ4m7%.5sF塭[l~ӣ?MWoz~U|=^-QcoG=o>s|sx~t{|~yg'=NN<~cᎆdp8g7 TIO r2nvvWN6v5އpuj>:YJy}T>j6+'ҭц:]ٗT}o/ } kIk[l1w y>tc |x^=h-nw2]_R[vpoo[~F~ߥ vOo7ε<51뭥ۧOzit?1QF.VEj)2g '=A3螦z"䘨S$ -M=Mč4OSJ\Kt3agT[f JSf= A}Ye+PnFnоöW L³,Q]nu*pf&ƀM0J1)Dj*)&ieԥ6F:&u\428J*2@P@:U}D2 8Q"Jckya/,Ey<2QJfFtFM'c4I%&YV&RQ:!Afي],5P-;bM2@fHi4dhLYbuWaɧ`&:y1PzK8z[|=wwy'ͳwu/GnC{oEϞROs᜙9õa=.587a3I駟O<1|zܻgn2CɧKm4ߟSϻHiG^lSkvw~˛븿>=w.ߑ)>[\g;ٿNX?}x_7ڇ蹹 '7t2:2s6ՀiZᷕzg%^}tZ+!& /Wltg7iN%:k=|~gx?U9?u7WoŸr[ӧ_^:zsZxZ&|xrgݷtMnuAnTuC MqB/zAaH(HКɊa #AS#@)f'zYj22\jT7#~ ?,6yJ ZiK8SJ䴛JEKK٪˧a诞D˻`%3se)eB/0TЬFRuC+IfU2r\ŒV0tMg()H&̴X0窔 W: ̑iES LX+F3`xن&@z~v3@=%*t]ؙ"AA8!bprnL灲c,AI Q̕ eSdQfER,?I^\#O>އݿASF}pwЯcْ}*cy~ۗN?){3q}oϞwF}S΍?݆ϣ_+^:c}eoT׎ܼQO,8v⩴$)yQ?XߔG/g ϲpIBsl >+mn~_(5~}6=OO1,L0\rq"T j*LHTč TT2T11b$ )fAѷ G:wG!#e`eYMdnRdtKw)lʖGcjV!28Kid,,B:SNJ'Y^UV*+&3% $Z rg##SASFUALC %h/J As'"&:tV$YlB=R2HjJ6;(XSMX0R›Y,WdsԂQ&Y (J+ItĨ'A!-,eP؛O#W|'W盫˳Dz+Om~Yy]ɖ.}>sļ~KÏSM_50C6WSsrѿg)Zw=>c)ovr웯_y.>6y`k79>dffLo'/*3ԏ7}'g[|y9 ]K2xep#d}o#c_|* دi7տ9a?Rt2O> 叧ty7V?V}z};xzztW({=|?yKWϼ?S_ӻ>\t~}y_|$xcѧ͌u׫O&^ӫ_lbp4 \um;&9= Fiolc}<_(m6Lb@36')nFZ{Ӎޏn+>n'~{F۷ |-3o=o/g(z /G~oD븎.GŻt^|zBERI/@^C(^rt7;,}tԿ{<_:]}=?AMy~|OKWJ8׭-wa_w3?Mx}w'/ɏv>G}_aC^p[ף.M+t&]ro(˺s# "il@q'15́V6lخF[&dyvQIV]Kܵ;KYJl;j]ivZUfb#;NT"6"c4NmÀVˬ8`2m a$mQza6עc)fn_S}fU_O羗>ɇ{>O ^Jur>ۻ/2giAa;gwT+Ɏ :2O\˻vZ~>o?=Yrx?EW46~_դ\Qt~b?CǷwN!LSnvlh=pzy>7vr3ѻ)ˣ徧~S*sW_] }/Lϱ7=s侣<>w/bՏ?_&# *lmW0cmv0F4 Tᔑ6VN2ቶ 8`48yVyGG?c0uӶg3ιqv;!l`YJsƓj"cP(.Zsރ %H66(:UQ6@Ҝ9'Np&0DW1K8%leiYB y Fy#-dȡO0:Nq*8y[PpZz *jʌc&@ah #3N0UL&2P)Ukέ^wXϔdԒb6VH?&O7=/˯Gz=_%g|OǛo9+ѿ oOO73D} j.?0&FKa X(8Mql@NÁ6.&G(Gw|wO.}7v˧c̟v><7Ŷ={cp۠l3y]4 ty'==>a+We>zwi=IV8i SDM}y_:y>zE_yC9>/>3|O//s6#-!–a=z?i~O=oClk/÷o||8%nM%tĺ6/[Ц?S?裗ozu~ί鷕w4nVo_ϖC ~}R}wgÏ-z9i}ǽ6m.~K/ٕm'.e=ѽ'zru#_W_5U`TnJ&r \r l548#c P@vNVm6e;򜫼Gc 8N̆& \+`4ڙZc+eXJAe**𧣘mTGcE5 IHt\E 0Ț˥'cJӡy -*lTTbAE.:*6B(I5U!(JX'F=@ACQ&B֕:4i:*S%+D8ÕE|*Ta+R%BJJ2e>9"u .U\^.'y>O{?K~qp{S}|G|W{?g=ʟ ߂MnSOJīs].pOO:>u9]12}sѯ̦m8s2XLra&X1g}Om{yw=6%c厾^*M۬fMɈbN`˶G]PGly1!6\6Ac)pdi '=]W$r{D}7~ I@O~G^+|y׎ݾ3r`da)atl0J m8)#Cf2cFl my:`ML=_l$EU2CLIV) UN0\ldSY ҊJ$Ԅ}!(n*XDO3e&PUt4l(Lh]z6fSj2 cYQrbLP+ G dYF O'5u/|t]_-vSwTI0#Mtwfg9:8ܰu{929s(\Ĕ([_)o; ZPfg6Ͷb40evjyNͶC$!Ql-vǺ-XBܺJ0{1vf^׫я}+y=8(|?'ɿJƏP-3c|}}뻳uzV;}">'!߱#o×O'ro3l;8m{>_c~o5_>~:u|iTgJh\h ~?w,~}M)y~υھ? ‹F<}a*0؈jd`b;l1u\2 BLvQb%$8j8.,kXl6X1W>tfG^WV5Ȱ|ΔKۥCMl J 0F-T/*:̔Ȋl f23ӥLP-eM+RaE8f2sB) J*m&9Wb&UlѼr2W\(%dWE(Y64;LcQj0kT5:d4VFPR^aTX|E*աa6*!0!JJ&DEvxMnn?Cx^g{}w^;|Cޯ>)n..NOw1:ߑtA̼.ie141l]xipv́얤`5b++Gz= MQ6iW-/j qeuſ<orkܔ_~k|9SyKUlzMwg'Gq~w}o7nO>y>'O>=ٳρ>|:n?"_??ӗoC.?ͩ:|4&!c Ͼ_oy_Ij^"y?wvϰ8WۺB?=|~νg%[<G?/B->cX~V񽏪O3ym†` IF2aAQ`@vvU85.!1[ 1VbXʳgXn; l[,+\L Թ=!ѕkB&[$$]Tj<l%g1Xm'!lSSI-RDb M:V 9FrW>PߚZ-R/V%5xiUT(nQ--9n&["aS@emٜɄ`VVITi\m&@Qi(^+iR}\%hlaE iVUfȶb &͈T[+YTa4iνݺ>_kkcާuk~4[ _OC}.j[qbWncSqYM[Hc2.(g}'rzO)g^88gz7jO:) 徹iw7]'ᯖz6v^_Gÿxn^~.?O< _INiѲՇN޾C=߅~Cyu=|O+/G|}/|?^O,t=5Lz]sGn.ǣp oq1'?|Go??W<_KE^'LupH4 &82`2ɈF&U5mɘe8e;%J㲖Fdlu+`/|oG/.璱6Z%rQEKW6#FvTiUUT l,,Ƹ%-Qb=yIR(JAVFhL!`gUWFi#Xe3* 0&(`Uqo"U Nv32iTˢ!Gu2 ([>~ˇ뿪~O,垿xz>CqxՌŔv9Λ?g?y='9^7oo:8^s[Fl*M5َ{L+ن]<]gtzWz|^Ww|:z ~G_[?V>[g@?=9[W\'Mҟ 隮y"9ϥ.\án|V'vV^1Hca_Fߜ_e7/l8oϏn=T^I}^ynʟwέz-zӾ|6+nNmzy}-O=[;||***4}^9:%TGuӮ-OKF[%5΍ls:45t<:>snS'ItnC'SquLDZ vӅПc߸twO̪\6PDcB]'k𛇠8W|1>~ws~Cۃҗg}/ 27fK~)z+ IU8NNw?+2Rʵ-IA{7=^G?}W^}{~#ŗG|oe\]/;q<%r%z=wy={;`:.\e*v yZܹڃ:'OGc+OBߣ~==4|8z,v^QUKisz?9/OC䷹v{]ϧ.~􇄟/kVOhu vG{WߊL/ Q[Ϸ)t. ,&\He'k&\R6b20ug-i,a/R'R:XHcj%K-DU{V̿?8`B9e6*q Nmf 2ڎ + l֌JL) jmkMHdlՋN!IZr7L-5`fHA̪'['Ji1JbbIQEif Y)Ar%&V+raU,Ȓ F&YBi*i#0ey#\AtY)*<N N[3(5 4Bl,4baQo.! -"QY XgV0ceƐ(LՌRm p%QV @:Y 8_/\ng߷{O%}^z_w|ǭwi>{^%m/rKAk~kEo7ߛ~trtkNs~2{6}O=}^_{ Tz#3!VO\3gd9=oηr1pj| lc}T>x=aޮ~u=?23弯;++o^>=~!B#}8{<[c~'v5tzW:zjG]y8S1*mNN쳟g~}>G^\|ױ}+'wj}W/|ϫ~+}O^=[?\>vvu~MlGO˓캾6y~˯/{O7s~>x}G<}M}pIyS?ѿ~GO7ߖ~^|p=^_ϾoOG?G_ӻ>=?4}ۻ3i>aME돡zgi<ϡ|?C?d/uuz p8#%pbAYYl|Jq*5$*l slDX1#&ȋ%kba785sp$ry8tp8B”8 0l(rL>̈́Y6OS*jBęb&sj1 cn)#Q#)# Kn;ݗ'ʭ2p$q V[*y2aЕ1'kF%8` h 4N`|dEזLPI-&bA4Fl˚m*6ڈePaC`-& DB̳ ,^k)eqFuJo0:#5F Hu 'TC tjTA&)6 (FUeKԐ;pU(*icM/|.;o+?#s㻩+xn~oG}/_SϑgiVCޯ>ɳ=n㾏czn%~~9UfY]_:||?Ϛ/%? z3>~lϞ+Uzy>wg==:Vv\KeWkMH/u|=?/YlGN?O|ݞIۇ__C'9uz_}9n.Κr[{sYwoOgw+}sx ~}ھOk:x~WH_+:!~eяwOw|_d笼ߋ'D̪'z*' A.Yvn&..yo<}k}s<7)F lJd%ufp ahmumf3ewyYuVߑ'-UFQPA7aIaFjLJɄ3EbUPf)4%U +8W P%dĶ J[b8J% RkƚJN 0HbyGdl A c&]RʡfqjpMbXC Ĩg\%W.Nj d5V˒VdUIN&4ʩeQ-Lq MW>'-b?_sOr-~_HyOyk:{1٧꼻zއ_uy~^Oy5s6٣=X93hSOBON4̼~!]W|3>_t]Tߊ}#m?fߚ|]gQ@_vp&^y_WM#f?ql{'=OSžǯ淭ǎWl.jh|i?Wnu;-=l +7/g}Z=y?[wf{^4ۃ;׼S~(/3>>|/W;Wߵș_;9K=zܹf^S5ؗj1F /NMNU"lbeC,bxZA"TY_)#X& s0l'eF05`F8s؀f8bUs 188kNclMq09v6!N`r퉁 T12_.;;\^T 넫CpEtsQ".9J3F(IC3TZJq5,;IJ2bꈴ&I3+Ĭ2uG\hcHFU:%JDyWA :tgXE"ö+*Efʍ%L1lj)P4چ3e\ *rgAO&XHNQšY`j|5&le . ԘM ܍`iKOZz5胛}_W{/Gt6yo|>^//..O/Zr[O{{_9c-}=x}>.Fr{<:76^kr[Ow4v/Gy mN/C˿f|?M>[NJ>>x_O˧>O/ײ |^?WO|75z{?g|>Oy]Z_G;vs#Ż'oVޏ!=WOzt1 :>9=^=cnw~>~7]Zkn$|٫?G|n\Y>|wl<cз~_-{1~_'87}D{F\pFCm ;I8 vUdHp l &RBrUbfF8V;FTR(1 08T N6ڶ8cM19vcb q\U K.s )`[ry}yo-6-$PU(Fr dtФALRڀVBA[ɉdK,#@qUv-LBb\ N1ҁإL:tQ3["!m(VL0.P#<,U^*0fRBIcWED|XgPRFnrU2CN ]AaHѥbІp2xs?y}_Av-rvqmy|>~~63x~z9yO_o W_|}ӓ]~MyW|yr|YKls6e8[_=z^wW:'.RrW\>6xOPΟ?5_9}w {7~o?_{_ׇ?S} 1^x-8Zpɶ˃3 lmlmXV# lb1 H,;cc1Rlp+ـ,w kl #d;e\6؃`6сA1;V;(ء\WlVm@b1 b pe9Regt^.m":%%&ldBeLsHfyY6AؖuU&xJ*40t*,R"3 9٥di]+ Cr2QiaΓlRX l%l@3.Q%%*T QUP"LV UIH$%\CʔJ-20Z2 Zc7|Oy%wC\Uz;=V>mP/}sv5Jw|G=+W;V]Uя_Y/GF_'WhS}xmѫyuxo}'_^_rqtglOOoo19rtw|_W*K X.ќ˫rz)2uׄ}yZSenMhҞw_u3vy>~O<(w|~M=X=<Kty5χ}-_=?+GS~{x^?‡˕c;(q9HF) 6Ll:l p( `± 3 .ƉWʒ+clFՁP;l 8`A6`p6 lFfS)+@'iGo5:z06*.jLsetPQTJٔgԩ63MK 1 zUXҀDDQIESi-[R8xV#@Z`إN @2cV4F5m2&,kBtCQjPa`єhGK؈gl2!%d>FUҲVc(à% Hrl#JUW\k2}Oso7qe8wuy>t{=]䯭rGv.n}>wz#RpZo9|ޮ?-9kKwsK_8>?>5ǫ=+yܾc6}?U#z4I}i~/~<};_=/7xZyg/G?|w~??x_7<]տwOC6_K;0)|:כsij "&OGIܬM::|׺:yO?g?9O8+}_e_e~Bx9)/3?-< &=N/W+чtѕoy_?|7|~79S/ߟ%n~~aYFB6m⫰6 @BTD *rql mNatMhfSL601 1&V;Fb5 [PmlM+lr!6e6A8`@NU`LU:٦K`0:cKzz8{z RP,FBUQeˊ) 1-`bn[R,cJӕ[ulJ4O80eG̋VkhF 12Gʏ,%v譴q5D ӨRʔ ە Ibf1lI-T)9iP\if&]jAq+u$GC8|+Sʼn0a٦aLM4MR-i@+"aLS<̩&8Gg}Wo>0˟=\yt yrsN[o>ti۟>7p}o}Oy>υK]{yrONW/g}#Ϫ\>rusQ!y}Dž?7('5'5ջ{^ݿ!¸NgP̻[6zm=o$=xZk8CY. }6u|'\}:zmOU'g?fż3>o/8c S?Կ s{?~c&WNGW|fy_ux_Wݏ_s~ÎH7 =[mN B`lAd4b 2$`mqVT&#ḓW6#`1&6P@C1ڊf;.AVll `El2*,;؈l6Վf e2cIGg^zt.]B`MNi-κ2UC-Z%"2lhUNv\\fuMƓv,xYX eH@pJhxōcMiW<„-lNy^zWC%^ k5ETs0iL/@qZNF%`:VA iqѴeٍ ּQYV&V6HcP"V%)t$ksp'6>oG}Mݺ24?_6GOs^u~/m8ev p1 `H1RAF#VF1 WBTvVT14 um aVնFV lb1lcU6b 6&bD0uWfd[46yAdq[]^oMJɳB*jK(I(U1$/5) ;-@y (H2m3Z*N9J{Z͔˰1`4؍:Uj)dNO*Y]&QMbV(ZM"eAҴVQNc(aH P +72QŷJV%"VtGY0 L:!L'Plc7%⬺,;jҕKQ2|' |Wc{rW7Muh[=Ò)Y%ӝg$OG>^?n>7̽e^~n_þm=|~U}y}x=}}?}G_zGf~Q2*Qcc 0*pTLp1q:96m3d!FαѶ]M] 66ڶ\p"͈1˫f&V؋CIBR1M\%άbU3"p69j;2uq]gwU'FUt X+#D62ps`3*IBX<j@.Jt+r:# *LAQDlBdeP)k5o@hBUXֲڀLuE (TRU`V)xT$aHVJLV0g4VDHu>WOo<+[?~sr>w~}g~_-S5vS_n>_jN9,h.([gcb>MJi-,34Uf7<.cy'c:1cg܏0~#'c<ô68z>=nWy٧}}(sBxV2k􏕵[~~Q\|:>~n^o8wW)p*M10lUI`b1"ю6m681]qVT(Ym5d\8#l@XAd A 8h؊iqqamr!*у YHΊvihg\s8iE̬L\~/La:Ӣ,`WAi7ea `dQJ+0dY GP=4L-O Qt7/nJ^jP%a5v6 $FFFBQOG*iKe 2]E)BOWEfE3/2%VXQW(J&ITJ%%ЉAjUGo0R)AxTRR(sNWG:m=.PrfdBj]2CBWl<jZz~10<6uuW:.1'YSc9g:N{~wu~>v9?'˯i|]}7JS|ի_0Hk":Ik $:)-qd5X\\b,y@cϯ[b4ƆZJ*e18.yc=4v={f=ÉcpLr0Eۛo{ߏ_ctN^ !*0l.*f`A Z )(Fmn# 6F.m˱`RsmX &lcFeM8jm \M9 `pq1˶%V**Օ0A2Nyԛ:v-їпR6f e4q+f9aµ rGSE *3Q@Z4yC&j4 Yr<]fJ O(qc)"u.@#uKMX_+^[psv7=to9kɯhoOzOs}'K~sP-zDcyRl}'CvU$HY49[!R9I -댖,a:R!]1 y/FaϬ$q1\CH62{Ctv1@czV.Lcj'ʒk7zLs*pL3 6 cA *c0 ;2 m@@`r 84NClv jقʥEuAp"Fua)XZU$ 8ZpH` 6ю*Hq 6b% 6Z'Aʦnn|v<麒]W N:͌B-``wX6iҞk1f["YbP(ΫQqޒŔفbE(NbR+Q3+ED; 㓩PVzYU!`Ѕ ezZiRQHp)u1e)9'hٵIXX[Ϋ+e3FNEb+h3rn$KjJTJMS)7Mx𾧓F602Q^zttݠti7cT1ZqWw7=}^wvޏۗz=<TtlS<|V>C}}>7|rsw_/?~gӻmɣk\D5_s:.yͽ mn-ou<~y?SyٷqWf}Gm&s3Ir-W(b-u%"uK -siNm}1q$2cqe\KVlC.R &$+yI" U2LLc]61l J@tmщ֫[* N\A2mW)[F5$( `mBpɰ&;V̴c`P0 4Rp6*6Ɉ՝tpN`Cc\nr̶f@2Y e2Vܺ+ّע e05"EVE:lE}c(g6l*9gD(a [R214 ")lV8!(ҲY•96 e SpKTPUuUR%*DL0fXfe6m*ĥf2d0Ҫ^-.!Zg!β-I# bsb2pRuea+,=uRt`L%gL)>'yx臑.tt9G닙wbDfe3JO4a|K{}~OѫS\ſ^g_?Ŷ_~qG|/>?uzpwpy<-@Ek{Ynߛo~oN:\iI/upgSY(١:[\[g'=e:˧sth6ńe|!eͨ% ZrHАk5zCteXTu G.ۃEpp6հvʤ;blBr HLS)hY"iz%LUτϩKsB±j+0e˛ՈŤ hObYɱ0 )FaH&Fl@p&+@v'ee#lFUis1iN،#Cj 5e_CحzѾZ/LDd]&xdRM0Zl6@VJXk>,J2 N@ӢC.u&ʨE,Yiȶ4F k(iShYfFJ!Df4x5)3KKZLk)dg\4٩*$ vIrIq2RVZm#Xl(N؍x̕k$(4P>(PH]LKJmcW3 z,VjPkqTZd+ r= c2-6$ll^XL~pceռ-Ӿ wSl7bAJ.*(.iN+ky95N?ǻ;<Ώ>;~{qzn|>ows«s9^\NV'"KvF ,0F0%d$=:^r,:9^.}rϭNYw7߸Yw'ٸ,/ލ q۴NdpP( /*cgg&CՁ(4clE$F˃`1\6MPF#` 66ڶH96Flb@ v  p6 um$.s% eY:]L32b`qC 0b.*lD0ڶ .QTMltaBm2etQac5qĨwsoɺ9w:2Suˑ(h)AjNp CB2RNekK9coJ_JMͨƳB]WxKJ< ,v1 vѱ S Hinm!}*(IhdjhVVU-4pEYaԲʌLeX2T# n,Z,hIEqJJ! yآV a5Y){)=Uk'#\MБ hpmSDrxjCϮ>M;[%7eAV8c2Put'Żx|XIgn+!öڝU Ps^^_@pvp?q}nO˞Տ'/W/>g̓FJնɶ62 WlQL` RB$55,%ĨHTTl56+gp`Pm8XmbaW0)ւt)8e80faN(83 &;&  Ӂ6;cm6\HLc 6;jl!b 1مSC3 cȜV5|&YY>DlfTNNz97[{F)|2`NQ]YҢKR`4R4 g@6Z+8PS7QZ0X'P]42`+dݠ!(+-%#l@ hh3(U::5Qp!edEQ'mh畕n@N<1=k&f̊ #L-[^p64Ʋ:;iN+ԲlCĚ*Ԫz%,28f(ҨY1:Upu7k=gmmN߭InHXzg. <iy[ELiʔJˇoҾt;78Ϗzⅸ%cˉ \Ec@k6`vcJl40F`6Rl1)ب n8$l1lm`eٕ8jhq #Q`t`u 8`B miAd֜TFU8&̘؄#cl`b)AFMAU`l̍*ڄ05gL8c`]c EƳ)+LRe+K9RʉٜׅWkZS*'tZye 6F\( GS(hm S[b ĬD9ܛ#Uyـ!GxTQU4INӪ5!\1q,@aLkeI,Y e*;MƋ2J<Y*l)W՘XGEhŘBc&N), V#0q ؤ`X#XK& FQh\fpYJh^z B4Msǿ^ ߩ!CF;M N#u`هvftsö=;,P<ݍyɥ2Lڋ\=|O?djSjVQ:°FBY42, NeZ,N$'<ʌ (e֖.ˈ1QCR7 ΕQ0 +70/ϰӨHt(UfV9\F(2ʬ0HÔ4)@R瀽[Q+)9If+(lM0DE@Wl-aQM Pwu+ @M%f Lab!,Q(5(tIq3N\1^d'`!<"Ԗ}/۝k^e,3߭Rz#ċĀ9r 73Tvyq/N*tgey e;em.͕*A2(HFF46p&6Ɔ8ju 0p)aP&*L 1F:"f9m[(0Lv6ܭU[[lm1 AцfLAQ 1F&Pp3l0FeSMi!M300 d8d;h`ab ˗Lʡp6"Rm A0cfP(6fV ;: 2l/li )fV@:(ٝv6_eD3&eq ^ˠBRyE*A^mLcLȨ[CLP+6 %U#@ii P&Y}$1RyVӨ05ҭ&,wfI%0td‡J/6αR(VRRHPd2ԢP)T.!9X&xP<%=W]ٓ!IH/U,EZZ(gCRgt IdU$+ъU9\Mr]R8ΕH9\0m3/z05:: ׷߾޼Ό'#~n>Tqs@UyqLU NZtcؑ=1崶RZ5ad\DeM0H$cmՈ M0ư:08)lA Fʶ*F)٨m0$db 6 c˱ml1(,b 6vS2U%H+&̩v:! H `FBcaamesj9K9 S.Xruǟ5+C6MC]L6hk`+`d*rv֑ձ 1"0 8ca@p66b $ k)˱ɕ p 6p6cm²` ClA8Fb f6" (F*t bNac[ c!V̦8a 1`L1`cP1%X%L +Z^s:l▅YjSKA-9n+U'D߫@N(sjBP3X- *Qk2a*Ri*j&@UW\2gJ"W&6^kVFPtQ,taPZ`-e)LH I!m?5I;*V5JʸeR XTΝXc<∴)Zer aj0YaKIϥTFHNZ9=02SZK501ҊDf@ #B6qw< niK 7Zշ6hJqD^j`g{3 :. ʴ]ϷJ::.jS 0*YlՖVbI;ε cIhV;#PJPU Cf2Yej`2^z"PUQ]\ZO(`] jZPf5 p&Iv@H^o 'dҀȀjs"dlE'@w%lEΣ'e4LVdYX-Ɂi΀iZG  f\~dGYAeHLiJt%`+y4`n{BXhn,ZfbVY~c枸HNg^wxe2׮³ie#, l )";`2iH5a$\A 8l0@ppe퍆؊$iHc8leln0!0,."4qFVlE A"UIȤN5KնlE mcCbml0p{Bl@FqQ 1mlF]H'(A1vɰehe+DcjS2v!0%W aT` 3 gSBgz\Z$&mle|;1c*R+J32z917&̔20h$ƒ5p^{!R*VaV8XI{NF2jZT9 *,z"jڲ3FT4Q[R&YGTN(:g J+ǢtP:Rn \ YS dtgL%i]"U+ JF2igz&T췜4ؐ"IV]7NpЊ:cTaEU5c"2ˌ;WCfZl/q!B2(e J j)D<5Ψ[&+FEJ&+)YŊy.m l6 PXW``M0,u 0Vl T;cb 08M): ,l؄mԑldj01ؘ0PF08 FɎ p &.Q*`@F3+v1R0p0F Vkt e&F "#@Lj$)2cVVu! tY-M sQ1-uEYj蝓=g;ҋfWI֭dj2z슌٫Ƣ`w*jY8#ID6E reh!jg(T]j-Iyܰ[`axYqnR%L<6F*tM)rBi*ΣcaȂcM TR63)2ɑAC(oLbs/QV6ځƕʅ*g vXQRڄ\n}1#NNhzc,1^\]f-,V{ƚE(RT Ni,&J$6,%tY5T 9h*T(pي㲙K S QH 8. X\L&+Kmj (3b F6 *tX 1 ĊvAUbFQmnVb3ݱ MFZȐV&\AvM"QN;mNFA1`c6a@l p1lll+Ն!C!@ 8Hԃa#fvztN{f9 )WBD@ zfE;sFZ\N ؤ+Sy%M*5,ZthImtj.d2٬7|_+ Y1#[*96NL++oIj"U2I$UҔ-O (Qg2r426P邴GX LRFt4.tc iQl}Pd^5Va|Y8Dݠ j-UrY),fƛLG4'y0%g nw)p"`6JpX IؑNQΒae&y#XV5K&ca"r͖3jWZL#9㭱R-m;d2S.|yVxL=^18 elE&mp(Fv+JȪ#eVf !N06#!QNU8+lE8X>1-MXIҁ vс5 m6)eA\sP5NTp5œTjVQgLQ .!ʧ0 acbtcT86 ) v6e]091ݶm1S.+CS**9֢\51PLs@ܚN]:"jG]SV9#j jL"SF2w{5)֢VEgتZT(6iʵǎ`!Ό5HDWVaC \Lt c&T1*9KhY{EҭEBEYQYb YgYD]x#ܨ'T*fDGbuJ%'ڧBYC2&*JgUBVЊ35 `H:ep3H=%!pY(>6[Ι2ck%ꩭϣ4Ux:nf7&"z33mX˴`iM0*YAlFQS؊b6F e[ Dlc 40aIcm`M6!p$ċ[aAKfQCCNggU,4 Rc:5e x &E!lm[*A-uVҘʒV#Ƣ,UY]̫'I`NRU5O6&Чe De *~bÕd0ECʮy*K,XΆku"̢; 芭4 lpk'h3kURpdiICO:+y/SCExcj h`ZY!%8Eu]M) 2a85B.<. -HXtN d .^Jؐ:µRtatt.ŒE\얈QFS0٢1VV&)\˫~oGK}f0JRJBAudDp6YFA J؄l`LTJ6lgFڈ9A b & 6`#mllL6\AՁ Fl 2`l@1Ѷ46Ѷfb`qAVمخa`B@B-,38ڒ18dٕN6 Fk"Q Fv*m1 K.0;Vlb2l [tBd==Ӵ)kY25qLb`&hVdЬ´(.v*`uBQ"rV2fZ,3͔ʹ]r Q* / ZZ)2+4ȸdS+ rd{*lP^X^Xe6]ZoQ}t*i:@!Hq0V-J!R2&E͈SEdYL^ngQ yS+ ,Ix dC" @0)'7c 3rD-HpPp@s:VdE'N"d4B\qTUET2cUD99FEgA@SssF<&h㑕TFJɔV"bC$)ȅ0Lv@F>ڭl l *6Pؠ; lcc@b lr6!($lu Dml m0`l(;YшՈѱ˰ ؠ;QV :&hml2lAM0#c M6 lJpiB (6+qB6N0.&j%lZϲlV `4`QV̈ ꮵg+0)UD,$mΥàLp1A6XڈiTmquWUj[Kdsړ&F9I0R5(R 5"j@ KGT1kD@ƒơhN‘ّ uO0R.(fJ+,)mK!ԮQ[W9SiQ0nqbe `Օgde6W fŐ(4]4+0%&RB-1IaB[ ӡ,  FDcZ-W\,+de28> t:S%RZF@h`+7c l(lHTN&)l`L]2 cb@\p6Ɇ FV)l`c16]068*:XL*ˆ`ʸ A8cmh4 (6&HqɉP+m8tة%0`@F6 ؊m`kl A Djl-]FiqHzC7`VnR 4N0Xf*ȴL: R%%e Ev()u1=Ix-"V`Աi f`. V+H:e39(yWY` QiG-*bl XĬ]Ny6.&`1r"eY@ 4Xtb%J)Vbl(*QliLh)182g!xXy֧UI\C TUfV3-UlN_&(8R]Us 4$:u!ǩ^\LIc18MhfQ Nbdt]Cm&#VI6" 1LWZp6(XlU6:M6!q (``rH˶Vak`cձa)ՁFb 06e;`CrcQ2툤4)f\m2llXaX.Y"06!S1؃:vL1@ 0 خVrx E蝶Wʋ2mt|{Y7]*JGi Fy͋*%qVj)(ZD8++)u-\U.MVL6G$ 2c`-hLerZx-*-il4()Ys .GT9i m %HT; P /EVF0 d,BLŨapqQk [tLj!f–MQWMJm TnőI@:+J:  2d59VZ E JViḌ Y7E(`DNq GPIZ:p.'_'6Jk6WUkevYL8&lm62(l B+lml`M6a,- 1)R%Q1&R F6*H1сcClb &2)eh؊;1NɁ'.. 8 6cm0(1cYv6N`bFM0:FbfX9c3Rv;ɞw-Pq:Rt!U4lWu`a2uH$vEV'eeX V+Yr0926M&e4Ia=h΃%1tJ5d(J\` lNPɁi@[RꆒUUBoVbCt$ѱHY`kHqi2`QW /1eGMIIj,ZP(QLPF{Xj%MDƭtX*KJ[(^L164U/ ³(JiV+JiQZ,bciXƳUV!M92*lK(;P Pecak\}Ǒu0*lqiQmHJ:n1ZeeE; H18*re Tv0IBl Dc6 S 8[Pb ``D'F XJ6ɈD`*1Ɇ Hiq}jld8!w%_q?AVc9g$ɻ]֑ͻ^qª&1(J(JUX+ď@̙Rj͙l*566ʌԬ*+'@8!pVR&Ne0K[FRH:ZH4- fU#XӢkH@1d2jM`JLTҴvFYYֲ ]Vmqh՗â5'&QZ)BlQEDr$!&TehJ NP%YW1m#3!T9sX BjOiS.d4pldQ1:i9uA:J짘I;m;mMBB#SΉn; E(ZUT2ʝj.Fˁdig9IU(Κ\) AfvQvȺeK'[qi^\ME9YQb61ǂ|\empjG3PvEp-l 0ځ](töL" &(! M 0-SZ."6ꥑ %QTpcOU3y1gZXfFe&r-E'TOQi-64M20z'L@xu&eFye#eep/!AFQB*2%FV+ZG:k^"A fbjͲXILUeɁgL0 @2eJ|E.NNMS<ܘɍ6bEII0ʫm(3(JH\ vm0JQC!#&6@p1 ;llm1 &#)Y&Ά;l8cla[l҂ SB#Zb]cmY+j-ItniWnLٳ`6 ˁ `QU!:6++bZPB biMRD̅C t*1W263mjfh%+&zjI Y@Ģ ʗ*5)F";cdJ*#` Q4 ,UYɃ0+`Q™Qt R-Gp#NJ@"YaM'K@LEaVV43R4At+ (bM \LY^eQ, 0%BGgLidLL.RVs*6 M$rUb! Wq^y ZmAvN14YN0 `gfP Ve`J1ӦAG\aJ('[+jNTaDUa@!8L6(&l%FHc1A0fZlBfQCVꋈԮH4袱Z9tNAYM-c]M Bq5%Tʫ]-c4k.UdMWTQkIRbVic*A8̭`KL-7%^&|e'{ܼ'+)V AV|H̆!T%0Ƥʂ3Q lMS.q,  m2[b DmFTLYHÁP8eH@p)3jufiy_:䝕έZ&6$y-$䬆6"eV1 Cԉ-u `b0J@ ,ioI=E`-9f*ڦIb^!i1,PRa6&KtRBGJIJC2:"ʎ ӥEg)Egme¡nBjBm3*S"HC+fP;ʀdnI(](NW>#4@(a24 f'MY3`[PYז쏍@”I$<&aeb1X>;-1ω7ZrV9&Z!IS S#E%E1*N,fNiY4<`C^sUC i0i%2I /8-2b0JUm˄$SO0=yO V I4`ڡbmyXA6 2mnI#.Kt-J/IMڧ"hצ3uۡd} 0 #6(I*ua   l0A Xe 0}B2ҭ+уf8gP"8d iTʶl#*XM)J ȣC`Qcv&R+͠0 @DcC- :Qe!YNX8+<0BCҮx kSy|Ur t*]p ea,y5ƮF*奍35_J VjZ93`FWV#(5ƺ0A,6A"VɩJ͍6*0@d΀ )`+eS+!ԕ36TlI+-`Ӡмjg\$Y u+%)ʶQUQ5`+Ҩ^QhL1Q_+0L6FƂEv3a Z@L@ ̪@qLm`\@HQL蠮Lf!镛=WU$ݲeY9OH9P5L\I/  A,ˊahI8C  5 4lqՊ2;QTHIܶwflċeuiQµsjɍ1@QUCxդSIH83:Pjq<9=E Yva3k6pR}M*ΪU&LLfGӖ1D#d3*V`MtsZrWDu*(0VDBZ鴁R@AJi2CfYx#5 uWA"sSJʒ#+螦!3#UǑmZTnbK lTcZ. :bjV4Q<$6稻3+ԡ;Oi20@9BLjyjg2 rcUI)ꨌ'e eImHiM9.iʪ2Ίt"2cRYE' % OT% Y y+]XE!W5s_$%)pd fdjVQr+6bJ HJtԄv]YVO'??-t͔ 1F"L;v2 fElaY-.H*B+Bs5NTUs/t}Nx.3=b9єrsDH *5И ss\2r6""撅#:*Ɉ43P)R/UWDi-'K.E, m FBLcJmC+Ku3ehF⎎. ,yQMJG^BLU[h̎)Jk(YJylpiScj-,RPl7|$-:W i0D ZT&LBLVeC[FKM;`1m*L-`pqcҕLUJ2F4s."ڙ:9NzbQEj9i-dqzeb;NU`e""5!"1#2A B03C$%4@DP˜BT}VwE<'Cn9șo!mMF| b6ϔ*wa$d Qy,4\ 9Rae,L ;ζ$#H{baf)!Fsqe YVW0YኀX >[ҩ{w-l:`70-M=lU-ݚ5\[W*ĵտlq3e*5a&mHePK+YuĚ6QqKl\*k&&őղG*[}3ge_ b2 4r̮ ;5lgk~8]-t]LaT'ź=XmsgSYf:;&`TbK#)؍J1JN<6~0(p>3N /iUb$aoq% 8\wc;`k;-dlZݾl]U3<=H(vĨ : $zE'Jwwȕpl n]]LJN!&WVa%xհT/)͚Vu9*,{;j ؚb"~lWQ5,qIvuKgq,L8+g6$ >_)?$v_ 6X6m/uC#6*͟m,gsfS9If,0J;l!P7ɩéf6cRV]lY܄dL)mK'T*2(Y[m:`lT+l 28uc$ `fXƷ92J;.fvfღ3Vc]`J/Cm*Qc\U* Q6v؍TElb7myU l¸|.[b*\EG.Du%ha  ;eUuP2Y|< Cb0X[ b')8ViI65ت"Y]\\wetp3Xz;hيî큐C{Z -;j fXv'wë/n˗+X~ Bq!e6e|Ha퉨hg;(Z\ rĐ ˲8P*sq 7z(O' Wl{aRC!J"$ԀlN@s[#] (x;PY‚+s#ds'"I lAn&$џFWPV#㓀A( rt`;֩+6$`)cB+UC\LqP3^@C+$צKf>xɱD WÝYp&qWf|ޝa>-8ZZ*<QΤӅ5I| (.a!Bؽ د7Օ d&Eea c17i+!wp i4r}12bm+1si$kRv'RvĮk;bP/[!`wY&vY޳ĺX!YH# CX0}j5gd&2ûƺMeIJ4EGqaNQleumXfU:Kُ}`oYX#V(PKvf$R˛gP g-ՙA y%]g p1!;N`9*  5U|KEVw] ͬq/+̍OpLlv>U&@-dGԦ :Pذި UE|x~YPbtJ:TveVg#*[_Ĕ kܰ.YMK`^0%Eq 9Rº̨UV£3]{ *YRjLbƅ_5mDÔ5ղ8a`k,xf&:l+*}R2&ud&˭!5UًMk+[Xfʹ [rhgWfhZ0`[.ʣ=h) D.3^+.ip%1] b[d9u IrCV8+[8E9mlهRXj #sTfmls pkfqVܤs8p%j T,"/B@ͺWe}̅5+ ?DEАD#ɇp6gF }1AhY&6$3-ȹqTVVRMv;Uke|5 ч䀖b`!ބg˫p!w ,͍R*X2rR5{H1BȮ#H0 UxD=;O%Eֵf(وԧV2$ ș`,LGP&ģj2p',8 JT,[h~IL+V{Zmw,շ6X2 sDQ6lL5M'Qd )/Zwh-< ]_XڬxDV, tdE*33es m7Jq *y27 5 C Ɯ`;fTt(Y?pW_&p6'>CT`)\l]̩± OB"rDU'%KY+}#6UAeJ͐`|Pby35c=Jūa&E 7AV\).L/cqk2kj.N6#m=hkŪ@d {X;Ƈ<¡wP*>C ʶL"#J13$A|ݕ4rNgU+4VRBƭG%Y( Z6g&mLmr+ wS6عRzv 1+ƻ l~4MM,ajRhfb<>@PWƶlY"?=/m-k-ǒeu3F`@3,KU48 BvC%3,+hTVKmZj ]9aU<` ð%T@DnI0Y\$` {.<52`gmJex&'Cm3̰i5ۥyovYm";>#jHMHAL+j6#P:5. fTJ𮕁yYȜA$"4m +alI #|N6ܕ<:R/22]ue*SYKJ>n} a@U9Xu*+!9RUN~ 6ΰ0"%m5c֫V~1հ*1iS` F'Mj> llE5V?m^fuLd] 8ݼIEB*lhv:anX[1lC rЍYp"TS<>;B316#Cbnk.0XˇFmU5Yd+[RtcS\h4T,i3싲m-J؃_ߌy6<g:,.Q\T60׮]pJqqɳ֨h 0fl0U6T)-2]` L@vSc ..pNȞQ,X;uP9 ɛ01|/ZԐg;RZ΍&8*ADMqK9ʢd0 WVfarݘE(gwm%cmNEoe/![6Tp%CcbI3|&OqaCeuX9MDBL<ՙECbhThKIi?\8UPi+E~,w^ /ofV%Dobbc &7cujV(b*$-`^Hh 1[;=F0Kcϼ\7`d$<"؅KǷr%wTb\!݊LÒG**3Z1rKY$XӰQ0k[jsbmhr ~cU:/f a]DE*37c +1IN Ÿ33B(6TR+gu,z䍱mAl(0x]B<հJ7'uh 5+I_ c5y6+p 0hŌ# <aX,^`rWU>vFEyUq-d#Qo 7$Ft e˜NCr`v b Rt!?~@Š9):5z4{G[7]_/c*n3b hsPZ[ڱ+&u*u f?ibsFVTvpPk aAo?KF07.TZ[jIlv00#z 79/r\K *'5`]fb%0´&9:l0#p]E-8X5U9 {fX4Uk,:Sܘ6yGҳL"XY/w s (*{Q8_ꣂ=uY|wf D1-egt?9Vէ #FB@~Moِ[(#}f_u>*IAsN6Al$lr0T@uj Ĺ]e# 6E|K~9&ʹ)5VA±*Ǵf)kubS󵀅A 0$lZfJ=3(J 8DvHƴF2+Whb!bՔ ,]0x9'K`I ,wvǑd ib@Rc!c7o/FV:T2j(/ *a;S81y+ۘx&\ c2Tee,d,pqfy-[+NVu`1XXc*y71}O;G[<0[Q6]MɈ`͠6&0PF7gFFtCZl7u(aiXes̫[Sif2bo9f^ejG]Umҭlr;ʔa;⹶ijfpq,˥mh κ(5p6R0 UYdbv$آC,{v*NVȺ:+?:CO)3jfF32Yf@5g6`c# \v"l P#-X`(f;~#;<2C 1FB,"g e$U,3f{^CFơ1 bMjT(vFHHcxL8%I.9,ue`1]mbecp[ WL/l6'd NEfw -dnMU[aXu XL fATGoc,+1.8ܦ] 5A[/!|&u?]0NW-cdMCGQ1}d&|MekbV $Fڵ3kdw6m|bR+yVcBڒ5HyD!ڰd++9v D`jkj"!-}Ǭk,ǹ$㗳XU N8:%GNXrjgߴ!b (Rp[9ӌ0ԶT aQ )xSuZpVb<B-f ,]}PY2A̢;g'B JbNaT\6(El]1m/3 ~gOk !]َ>pfcjB\PQZذ:->bX4jZ3jTVDM`mioaPTcV[91neMZRbfg ! 3%R`# UXhXDo.аv$W6eWMlXI32`VH|H\@QOo)!?*}Cڅ["2/X k,60 !T'0l6K% 4 ŖZ޲^r`2mP 6np3e!9y$fu^؇] vx4L2xlM¿@\+0#+Xc6%;oӴ;5dt0pl[oc~( va?Ձ¸;J,_0dLjKn~f+yt!ȴv3;{jYBق|uEȀ~ px]9hPǔy[2,w{kbMU" :+' N6L6Fe9 s |; kp3:g2,Ń<;LFU-)h8]6q)Тj \k31a#勜 2 .-V;l5XlGU\ǐwRw. E˨W™(MoJ!MeEwjlOS|69 eWhd f+%c|:+*,5[++iQ<~,&? Z`fH;V>P#%WČvްg9S:Z6Wr@+"y 0 Vφ0 Yx.P $v c+Q<#1-l=QׇuVmPA,e*  L4쁉{pzNUV11V2ֵ2kU' ~0)1XJ4)EFHp߶HƯsخm,NN!Vla1cv5,ZaΣ Z3Zа2Bb1dնST,VW vZ̹hm(3s:6`xUWq,͏S5P#$nu(a_>nlჽ`QXMU <l2yіWp f8 K1j +FCa0N 3 ݄Y>]W%U0Zw"WK3mОX0M |c-2-?A 3BJ%Flp#YL"òW{~yU`O(OWֹǶNLoNBuHpWUex Ppĺ\ٜ6CHT]781:cbbJX8XXwW<+`*u ]bn"yD2&]j]5 Ua gkFSCgԋ %xlPGT߷00U ]wXo\V8cdIU6L /PZ1:HID+;mڗ 횛5nFUbXpr8Ш3ef2T#X,ĩVVk39ƀdKK4` +*fb뒶 !Hق0ؠ~Y:#0f+ͧBc)%oh'Y;AWN&P qhق.5.$`NFjخͪ ˂>@UmT 6VD6(Bj@rQ[䗱9`Vu'ګe` Q>S;Bhd^H[ 0 ZF%WHT.#*rؐX5 t ̘ȹ Y{v-UQyvbn{^ࠪnc7Q,?aUѬ@φs?/.ڗp^l f%'.rs]ʳoXϖ/6 a8.J@m5m Ɂt_ݸяaGn^*y2դ>+H >:Jp8R)_-tV> WfZ2ePfF0h+* C[fA6peflyrvdY&+ 2L D'2Iu+ Zg,RV!]]GEZ$6p#K aT19TjA^%I9K uوԫY(e9BHskE9nI#T'|.$WaC\Bh1Џ eU,ݰ t&v{hX\L>Iݣva7*!;᫲ [Rq+'@JǏീUp(;!Mlሃ6jŠԜ21L1,qe*5ZX<ёpv2͘c,vTeeKs'2ew"lULT#b[U#fgW'%ԧPWCୌ.L!&*}NQ6\erXv!~噉Si嶭(:لNд$fP .mK]I+F#Va$`M)- FW#leD'uaU_|Yj5E-[*TT 3G YŐ3EzjY Ӆ fh|c29hxdMUզv$y0 CrTf.1>TUd %Q2Os Fc /l$ff,A]S%L:Q\l(KmJ[OFHی BDrdj$iL9c/Oo0Cհk8Սpiv܃ TZ&Gՙ_F@":ze3Lҁkvd+2u]^iYXBt mM$ ]Tk;`)k pNSثʤWnk-TWap@8lkMrKi>,T .ba^mFl6t$1`[@6bwZ }~aW++Rj *T`Z PO*kFjc6 GQ}@ $4ၬ @xvR8,4}YDU?%u&'0fA2U7JN'ڔTEG8QbsrALXX3#i _pd \?n oK`"ٛr:+)Un8HHemՍִ*v[,]2 Il63Ӓ}r\gl;;, X]CC+3hOxqmrǕme&*-Vm5jb`RZ9 3/8Oe(_bDo#ZtXזe-t x3$C߃Y v,E\> XN} 23,eI M_|J$P``gٲ!GV w@ .PØ~&Gb}ƚ&Ȍ+n8P&0HʰN+aa bjY[-Mp(ʘLfY'HTX6H+{LlejD2AxK}v*Icڷw ('EEGR6XǙQ6e)WTn*`e|lB#-QulC6G%fvZ;chݳ[:ˆ ݕ".q X8s:7oȏpdr3कI*:2Xj+B,ZV~Yo(SQ9d{+fBKT'odRA9{k6\͵6 A<2r04jB#.E"gԮŎ !). 81,Xe33m@lIn9)[LHb gXAhSr)hwp|HTG {ʌ}, euy]^>;VS3aG14 rxl g vVbN!Ⴋ0(ԇk>a`^1`XKbZ\&`R6WU-8 UR1L aR6%Np'%Y`i,r Ke #SrFp E(L1kŚq>ޡ-F5C S<̞@xI ɰ3+k`kCZx``CaV%4ۅv?9B%%W870YCQ!`0K9ꤤ=Xdik]/pPn͈&@d Q2\FueV۱ ehпsZ ]YyR.olg R0P!``}f ~Pm W䈫y4mV#9v:4/ֵ\ T%p՗ƜpxutKЙnF!̱Hq ?jkL^-6s3=6'oV9\m^;60 p,pgLK#۲Eԧ &rZ8pWGn. 5E*x,-XE6PF caFMF,12*k;/Fz )>Bd0mPV .H&Н`_4gX2Z0bjhPsc _W a24jg &[+*wD=jGUv L 68 T,rrrqA< ašINFc9p؇Lb.Պ\DfN$W@RmHB1mΪ"e*3}ڣ4Ce '[о;P9ՀW0bQV(p|f@Uq;q(}R.0W"VE"3s9JOp!TeT/Z!*{sLA+ԑH\?+hƷ АLgX^gmY^k<@]TG |2͒FpS~>q㑨\.g@+Wd06U x[v4 HE k?~#V5 X{l>Y``sMlm~S"-̹6 {[X#U@׻|GY/熙cF޸Tv\SaL1JJ;y(*"c0F5Nk2cB[H* V`!+f-IX;etV 3 *rU0\6vR"&%;c[a&l,g[y09ח@mBc 5ʹм)\EabXXw(F|- c+6UDviflx@QvIS^geܰw8sJB3] h&D:\;w *5ְ͎U be Wn: l,YX1'`|x!ֿ*F_k YF@l1%~"1Jʆ-rbFš@ Xfq`dC]BF+0rF fsWJ lTX\1X%,8X^vMHWM~PMZluV#+>[Sb!<]Y+%@e4<;b1+RkSG`B L0`2-E0Jͥ ' y tJ"-O011* pUf2in6mټV`\ yPRML4BaQ X0A6F^ gH f@{%^`),jcF VlUMlpfs W7@WS+2Z5aջRY־Χ{ `o -d.dz]N -ΞP!|kR 5nBxJdaUy3f6sYВ>!6-mU_#W`VcVŒF*Th###5.4u1МU,V(3֠y@|\ϙ:3\[nmD-0uć햫jC@51`#x.N1ZːUpw0IBא*29Զ3Yk)߅ bkȎmk- n\1 mXl>UhA BF89:\&̔1$)J"orNjS_:r na@#.tB 84f&Y0Wk]5Ć,B0X*X؟#,10ħ6Ry9 yc;R^㒎2m`ʩl"mՕ*gUA,F\Ņ?8$P3!q?eqcPKG c`:`ݼau3V|a؇WzږP6V E@3w8Wc<+. <͎5 Dbǚ)" qI {P-8& l3fų6D׎4A1rfXw9a,Kr V5y]!ιR b9 TL{aMo]ul^Y_ C0(u%ӅOrc-ju˕qpFr;j 8 L0Q[@S1ʀ#ٗ;Ll``qb\ Z+QapI"mIB8F5dPl@f%R8j[Jz 6umL\yUUOs.H(5a13̀!!XN<-l ;ZW5x"DW%u]Q-d̳5r ``΢>3l `xs[1U +ipϫkXmf+O,yS2 .Ln n&8bI acn' j2Vu׀3툚1O6tYV?~w[pz-А aaaf8 fX`2>#GeÝW{ayƪmka FJцX”VZ˰0iv+fbv|B3FN0!*X'1q?81lcHӶW.{Y|k*&beUdj{k:Оl> VkO& VP|^:y*caiMy#P7ne%rG,ZK^0 |. br͒{:w+#<3NՕ)h A:j4". j"?plA$qjSl/oM%V O^ gɀ6! !W9;ƶ33deh:sm\І՟&EjQ;inPc9(5TPrml5c[o5~)=Ef+aFO#~=ªv#Yioޣ'\s*.,f,dDfHZo `ŷB#Orjk *++am*:)fN÷eK_&|$ T٘T3Wr\#fP7Rq5L@6[%n# jpS*j,jцU&7C9S%8;el>Gvh [8ؑ)lsYsG$ ZEQ-E|L'>X&v֩A$lf g;+)ey {O'QHVk?NC\('pJஎ۫C9R& sGf#;hYQ;nĞ 1Mx4bԬЭKI|֭7vάrc82<-Vձ)쬭\#*S[7hw"X60YS,xnZ?w^Dl;c| 8䄽_p}t 26,#3mu{,1;l5c;v„ͧۀA+carQP3eW5a KlFP\  ]m}6Ă[VbY  qۃ!Duwjf,ܱP'}DzWb+B?Z d.rXWsٝX͒lxVV6".` ~XQc61PTexHWch7|#^I\֯fo+yYbV#6'jJZ1Feĩ+158cYGnlV"k<`u'Et,mWC푘`xRAF#qmPLIs%8Q]CoP+Al4^ 8k[Mj(KW`Ƶa+7hA GV*pwT| a%jD><@͋ gsBkk%l%O*qH,Rlg<nJ{Kۼ07w\wfG^­C`3;`3`p3ToQW`+ض% *̌dĸ3P@C-|.q_䚈PARu f%~`+,b^'Ba0u%Uce es&-eV՘ ˀMنr2BՒ@j]L3r&]7uE,:lәG|Mk98S٤(3B/dA Q{\˳:̓06m7,lŲbe> #;7",V՛m<%Ʀ|փ~"76IV]\닮oP:M@u0yBP/o,rv`j0ɮp3J]A`>'+VX 8eVd]ZiI'ƽhulcX[&Fڇ*{pg] `NdA~Xq1kɦ7x& PrGVǶS'pL.3.m>*ݲÑq#ATJ[e[;MX֟ IQOqST'vAuhWI(՜ of$̵-Ӿ|bMXF 8ھ@ kQzQaPCg[fr3j8Nϸ(\LN"=aWO3䚔8E= RNAoa[1ȥʒ#$:"apeXǂx\8c("42clۡLJf%+KX46~V|3 U[<ُn(,\߳ȣ[9M+b͓Xf;!T>K1QfWx3@])reݧ8a639 { ]u[r{1vB!w o%^`:&$%b*!]0H1lNj6cbnCmgCq?cAHT KW;ja S*F6{؇E 8I'5RѰK0j4>ShB8faaR.u<rbbMCXYBmʌ39S)fp!/Ɗ99Gݛ4Yn룍by@&RMvsYn *5f. QΆ1++EFux?TI0Xeu]!Y| >5pb\3Yo*R?F̄g3/-[U`9!LG8'!23v־[ #]5 h cKQQĸQ|wJLauvMjϓ!{E-˭^) &/jn"WUU'r <\QRYVaHl,TEk6 ⵺!md S?6>18* d`|fO|JUQcHf|4lC("m190# 8[}N|KeĬ3m&@߈9btU fG6`#y)mV&3׏ xO"*FY5^4jֻYX푅ML%V>.+70f mN`'Uf$`>MUꠘ QfY^a3*c*!Re o'*e+ B ɦ1PAr٠P!rS01dDv)nÁfQ3^b3V J*Yk5XX2Ƹj k-~"F) g.! jHՕW'/о+e\eEPnYʐ#f@I%Ѓ2<ؓ/?c*6Nb"eDv1X|fY} m/YI 5 6qBlEP%`( >dLrňW1)ې2fI`lTleK\#aKb 6ƚkH6c3a _]OLjf|7_ٕb00!6k$p֒k,vK:lg*%" am@]l|C`Vʶ(Ww`b0:P1"V\"Kdjb,S80XNv[0v5\21a9FY 4a[ˆa3/>b; fXRrF;u骘1gi]qݰ˽.j n4\2=0LG-W2ò&ݒQ?׌~Sfj`K1UM>FUlA"ޥ+?m]Nr5fQF"|MD9$ l+R,_]n&,# *<W@Hy;N*k 12KwY@WQ[!^cyLl Ev.+( ЕWB!pHåBAex6%v`X2R s[X[m_U lV, 3ʢd?p ڇ* y0n[ gl'l3gw}H`D O[GֳJ*1. GX|bTіgGÃM%H(di XdXj؀V, *gpPH*V`YM5!WCD YXjr'[b* @ͺ(v(|@ ی6Mr15k53oio [8s@&ZE,6r,bIm2Isu yvA+ Օl]f*L¯o*+M e ZZZlvhM>^,>6Le@Fv;m lZGtL<,nloB1;>8bMxa462XfЫ( *<#.EO.~qd<-Awbi Xyq F$&(9Z"duFCYCqX{3V '+k67kD@`+٧xr1J0&J|n읨,K9نImY5]޿ p0YO!3ogqŵqٰgdYt;e㝢řP>;h̩bT 9|Aiiy }c1pyWe BOoi%UA ٝHgpf03;NAYf]m;[B 9}Èy+0mȥJageUI%pAxMy{,~兘Mv:rBs`kfy|9lEp[)?E+ /1I Rcֱ<<峬܁;,'l1Lwjʷ(Id8+(C9&o|9ʻV$)XBj@|`)")&;x7F[+Ex-8:Wf^Te 2ͣYXKBNWЊR'r!*Yv(mOmj8.3v*@`^uj*9܆EhT,*+x0JEtSTE UH[@, ~ldecgF t1GR͕q#8=2]@`#`o%{ 9܅eXY@*NFfy s1ÕɎm5’ vrHùm>FFwl~az9EqNb;*W,/cx"d*6=g #aB*HsXKWm`L6d6/)eZ̲?4V{1W67Q9#$m5I$cOtjRv$3Bg)wm0f؃ G5>!Vs*rNYc@k%!F c &\5HZZrͬ+J52q5 ʦaTmU]-[ kƳ&+T|c ɂ9,5״ 35BX-V+jMSsyi/!IY".-`C(岫pFfp<+ax'$ Tр`p%̈́F )llUvB386+mjܩb:*gWrxoe8k6~{p@ۺtKr F͆F<n]ƥXS'իIyG=N%5)[1r00-+3|n P"İWgƓZ2)A ij078c1\&aEyP*"VLuRp4&@-@PJ[UT(ň>f,FԀqq&M Ng.'\c-V2gqmUuW;śvTX^֖n6yb֭[E g„B¹byvƭb\62Yt%IѰ ;lK6c;a XK[QlqN@ :F.6f]>Kxڵ@y- ʫ@xF uPW$/!MRfF^džLwvcp1X[x3`NH'N@iQW(gՊR/@J9+5XZ|bxpuXے,*P%TuSc^eK+U\"&;  XW LkQIfugl[4cEt"vU_rc5B]Uei&kϊ/wPλ> SS,_ȢAi*5, M [u,S9͊S]a69kmBYB&TՙEvqZ?̐R5 F `qݵ$Kvߕ핳qfت`r`T^ O=h ^u}rAl.)w:1 oA\AuVG&o(S>!٦5-Q ceuk, ܻ;(:.YM<V[/%9xa-PYb.YU2[r04`k|]˟8񥚲w@K\  )D8\L*Lfel#I%sŖ7..YOhZ;ys?3alc20K,eQ0LAt;fi+_/qpL>quZ^C Sciam8fqRXVYbLmJZWÑX$*6 BlJ_PGBhb NTgy204GPq6k21vi!]b"ؒoVF'DԾ_8$!m SȞjW!̿= aX)#*ǺlGSc+D͋ O888˕ ?0㵪]vb핳 =vR;?5ݥ\UPZYZ\H'͐BCfvu[\iae Z V شvͨpHBD2 YE # K(NEAcvFMQVKg ͦNG#V–e1C<8ksJw )M?"c*qG&5mfv^c.eY\ 5.2m)HԺgVb{AGa)DlBs4* fآo|fNy>,5e%FWVEP%Fߖ 0I%F4vss *&1ilK@*^6,{,:U#rk&1֨¾![&p+}@Z/ʝ`2*^7+Ky$F5UQnœ#s=íeLr;%Uj/(5Pl:Q7+4Ql;!j1Yc@ʳh !3; *ypҠI k ͆<Z!"=vypư֡*|Oei`Z\(CHM%qQX|E81~|arP ^l6յ1iadXDLfژhx1PRW(v8$WbZUdҿ7Ͷ kml˶٬QJ][ilOSU?!y!A?\ S@&vbWtpI!uVղWQq,Y$ضLc5gg j򬆲ja݁`S JUpAb|j ˆc!b 7? gS83'£lN|Cq0Xp6OąTlwtxXȠ[;lMF~eR d1nmFw`=TBvP{kXPFB)W5~q0 r1;h Fʗ'g?-P|fƨ2 Q39!SUH[0nNs 7\DY 3]mZ~1Tg*0sZ -"1^Glڈ"U pzˑYO\0-0X;|Vʻ*ٞAF"rO܋f#`WVӠ3^/ڸ1+QU֏!(Q(,NWSGfV"?|B* j|mXZ8 7#U yR)X/ dc 5X v1T[6FkYu2n|YdXWvD 4gKNw{iB޷~!g4G7@rXeѬcL9&YAݑ9pA{3N &˃L|l<ω!6/*- f;. ޸XUEXu<` pƢܘuPrȘd< UeچUhPʚYՂlYoR0ZԵ` NNCWow!%QN6sݤpшp~pZG05{cP% j_uV@,7;XaL!6;B: %U> Qfh;\$`+m\`k(71zݴu"&v`$@r LV[gFi,j|NΈvXH ֹ-[+99pJ½@clYc`XKVa|d!(`t@!rڗ>JK3!u)lKMzE@E)kVf*PUNV;3 ψ/_ o[-!1No05٦XTFc}!{p!UiՖ ? gvyK ̀X5v|c !$q990F!춈Uwg1ZxG<X2el> ZSrX@" ),e>Tx%8%)9chg6m-kkl;TwG{GP>X11h ̥ atA I8`|\ ~* ?B音F?? D3T0r)|gXuDX Y֭\)%DO3pԖR~8pnB]*1 ]US9n흘c.)xUß6fܟ(Y:aJGwmCX51Mj3gy&}`?N PVfn fĴ bfr"䲨el:9]VxT *w kƅ5V9n3>+&ķ oɢۖ0LlK ح-٫<`$[XX06㹍ace&Dme;c`MP (bT(mcpbW :^C+:mPh?1([ !U&濸h^ abuWD$Y<'XY"Gae\͋ NYBT.`aBv]̆|Xy~/ɚlX:HDŒ? cM]Hcy5;ZzaBPa[ rPdݪ6.IgkMZ0[,v^[OŹi0+f;* jb-C}يF$W[H|ug.XZo9Ş+Z@jH$"s600٪, kX%MO<\ 3&I{`2V*@PM~ ȟ dK{Bn|r]Nor2_1WP:rCsƞ# QZs+ [ĭH[T'Gc-6"ufpf;X>fNh` s坉Y8Hr,"N\V.SyBșE+͟D*aBUpeԩv *f' gPT"wgU1PvӖ 6qlRVfJݔO90rHbAYBV36_l- fԿ8m6 ˊ-R`-Bճ]mg[pUlDe`X3" 6x: 3-۴:p=zW 6iYeȍ[j|k<}+ѧ T&Qw?crb\=&D1F)Fvr'##a>дVڲvKrCe$~*pLNJ!h1 0mLQՅHUbnHy Mm#X3>ke9Ð85/y;MqB o UC Cq]֢`*suR[fFL+DH ]}A , p%l v8k)~F1`|%fTMb`0o~6UX^1H[ $ͺہF 3c g50)6m\Pn!ݓol`۷F+(Ƣkr-c'\;unA.ɛgUq>!pOc: Y6bvKuJvF\D^a MIqHlX5YleEYlK@+,vb.$ƯlKb(@ "!Yr *@BPO-$dw\ē' EJͶ"ЂպmZՊ6%*gS~蚽޻}_UOS 'dS'MjCXEMWaK`XCͅpK4~;FٔĖvhyfɰ$:>˪< @D[-.0ƠAK)g2.lZVr.V*+Z&'k%jws^cՁ,0cy9+jpu)5^ˆBNjhvJ.yr+']H!q d`W^p 6DJS6"8n,}gy.Y:(ׂ7$tVdX?"NbA٭Ff XEr 6Xc jbi]5NAQÍ#%' D`8@juq۽89#h1 P=Dw'f1Qː+R: 7հPJՅj9(J1qs&5{r@EʝTY9{D\coIpW&WAf#AUn5IAqcujpFB8l&T=e螆OM5Q5Az tJڷԑe3guvCe4cfkx=U\RMȭMET"KW[^+ZgT:U>ISռU4AsE9Ff1bS-5 !k VAc5*װTz>ӫ7)fҝ#u',|Ⰰ*|ڵ^*N EZ#)L.5<3P* V`I«scV5V͡A'#mzy;fFoPuغH+P\ ɇRK! |՝cYAoc0hu-?N}7|Vc-PϑUՠBc؅t |H# d.Кw{C<&5NGY6wC`gXU0\6I8cA4mC1FYʰkgiP;@$Cy8/(6.&֫+e61*ʵ@% JlVR@p睙uYhngJ'IC0ug];0%gUbvs 9L8ώ`u:afgYY_-R!XY]p*}p X ۀ Ym3(}*9yLkgU \ɯ;3?"p@,k8n;[ ͚*vꍲNOAXa^NW0d>VS Q"kp- ٶ@'}j%6h 3 f0^< j!bיU%10lp(WWrÈlvg|ooͮq8v,;qSGp1kfҫ{qNNOmO2 &JMЮl+{lȢ& %G3^`K^kMuW1`)sY Ã2PE#嶰FZqYBub*^g|pCFҶ16r{}ȅR؇(50vb+ R,bE}6Ⱥ(u>B5o+^l`c1.l8A;6huپ`L'Ps9{.co|e͋ t03#`{` x`D!Apnj?yv FSb`,f ~s7j87"x͗Bs7pf gح FB.MP%j;h*x(1Y03г`)+bUAS9ٔ8R )p '̱X0בC/Iu8j_ZJb&e@BZ5ǧkOt4JRP\ }\u6 A_Qy'}-[.Z/o^?zBAA>`E%5<=bŜuu<ىqa;U:cH(@ʅJͲ#?o "*}Tr@ u9keܽVնܽ G_lA]bWeI\Zscj`]6H, 1s0@:2;#+V-d=, ϒ!1Р>D;YV2C)p`|<ٶRaU,]R)V&]Z`fR؞C؛i' k/IS9v5gkb\na5PRʞ+Zmj25`4ue6?pM3eZZgq- A9;vʲr,͏b3ȶ ϊmo#g-fʡY,C+yatl)C#)5+j! bNJ#. :8vF 6$+Cg`2ck( +X+M]٘je 7o[ܐ,:j 20I31V& `B 1հ; UA(Lz}7]Ӧ)K4M}U:J酞t1:WDz~/KӤKգtdYԢý[~QU$.3X󶲮6 /Ie[V$6l(֫:k)6Qa|>-O`TUe|W%| &$TS(ݯF7rwYŞ,{lѹ|Km,Q՜)91KҢ5rW *9v1V1pײh!*#g1 癍KTCܬ市` 3s7Ք3Qfx8ȬY2l1C`hu.Qnz13$Ð\~&&t+f A |-y;jvT(ܚ] )MN UT˕FJ.ADhC 쥁WY_5lݻ%.vKMk2sm\ P{s)Y<OTXXNKY`cScףUXm] esڅ+9;쏘UY w[vgF x3Bg1 ##W.uR1t1e̳]0bJM`p6]mC\lS7i Xb@v +`M!J")LbF ' a8Rє\ٌ64Q^Fy#HD+,v eVʍd_\jYSbi 3<7\bdXfhHVߪc]6qB̻L ++mPB0y؄ZdWlX[CcЪ`g{qxPžќbE(hw[? Y&@ f _/ctnij:/"p 0Q$ju1S,GdiSp4)-k%Gv8 ş-Z6&C.^׸R@5rIt%z]CtOtN(^ZWwu}@Lؾy)tK}kQeԬ1: QE3kռ%-iu}Zu7P5RE!,-*踫YeX]=OU?ye\³;sB'IJP,QE~..XNGgۛF TX\I+9mNe +c#8ts(`B?ƮXiSMk %AYݢ%Ixe!Cepc1JETUw`lXN&ۭP57[Vxp>2s[ ګ@K/'g<ԕֶa9b|l( {9ֶa֢3v cR[hL5- 2Yp0LΥ> nL,|Bʿ̤@H3,2Yٚѭ|V#X(8$UcS`1ya&3x]՗@b!ԦW'13:_-LUJԣXRI]hE,XSǂRWQ~3514=µ`Xcj]/_ Lkc;jV 5rU~{VPgv]F$̈́y5pX6Q_NugQMRQJPu"rlS:ed.,5Л {4OMNz#U:V=K֕eKb4K3$u}וS 鯩ESTjWXAefXxGq:k v\ V|3ca!cÉڤ+]vgVU&~M)E] ?՗.0e,P;F 䫳);`1~}ϴp ðÑfla˫YR7fr㷢DPzE{_u .V5$oN`p̆P@<+h5 R ^Hv#.ٝU됟dd-9-Dٱ1xQFAKYpN&9::MB`m 2;ԁ ?+[ j'l5k,*a`O",,@Jmɜ=8/3r[' , 6,#1$K ՅPoɋYؕbĪ;AVf]F ]p mT{H5 1? a|FU ց;`O 1`ȕ͗:uUECCj[_Ln ʙ)QRA'l>fZV0q2ɗ5UZF0 j{N>kc>.'E/VNT] n83/ PR70+dƠ^ECu  t}NhxmeXHFA^Lb,m6]wE)Я1fli, U0ZX; bc1LCxA0,f!k(+иؠӓQ;wd 9,5P|=uAE[.5.w;(^o/3+M2k ĖoYγG[<A622""콼̫GR ի"Ўf˂LΏz(OVtO[}/nWx|L uZ:X+5GT'ѺF,J"JbP*gK{[mNJ}%S[WRN\1T> t쎙<;zz[df e8<77lI#ۨ[ X*bHVN fql15 BKWTm" Zve΁|OT"+f7P Xc ,v rT fn<5w1žKSǛ =g%y "% TX3年%[a!8@Jiw &+Xc fUYUу0el؟0y ]jjc9Qyf;f6Y[P)!If|  ־33%|Zpi!k6xn9г1 PJVg,cf2*h׶C (dڶBW Z\pSPSepX9^ug`H_!.c)MlL!sRe XuXNRل9LcıfPI9 Taھ>V3(WBYva-qaUR+buśk܎ddX4 -1l&x"+2ɨ9 @FF 0DU*.b2Y@(W@dl]=QuG9R +M q+DtVԻ1+,X¸ | ]CceJ_@ &PMPOnZ<`Mokwd*C mʨk8fX3 <ռW|rUJFJmIŏ&%NQHN4#3*s=rlU|!ՀSqphX'mµJ2ۚ>\vOIuI tʔ[k"UV?Hx3WbS 'q ǺuOH uuh+YiG@:z % ^W^\\W=/-HJ_V+VⴣH>* Cu<ب>ge7HVp{}(< Y5:n9! GɟxfW_CxRsR`pinX;Xv$u 0@b{$d6f^o k:ܸQ;l<@#18Y< aY#F;X T5 8q?aZ1h׹*ں   5Q?vo>)mM' 2NRpee8KDyP l4m"S{[!lR{{!̫OvXI6`ـM;b kG1(_q۝L 3` ;L92o!OAb&f`̨u)3+18bKNJcb4׽L]T3>^SV\<'f0L]BxS䶰J,`_Ĩ͍ W&Oldh~XkAS]yqk*`-lIÕѡe͸R TY7Ź^yYe7FbAgru,fu1Tf!8aPg쫈JV8nv: g/O0+%{ lYm5t IN^u?IC;B `s;;x5 :viV-@:RQ&[e]'Q_IGU{v*4Kt_S?RTl=DGqbQc5$5zla#aaAd-bZ!?8Ma{Y%Uq[4X:xn;?3vr TKs`XՀXR5Qe_3-- ɜ1v9Mxu`ٲB6rT-1#[a6h\VQ٫ac5ԩ6\Wr)3ͬ˜ ʌM .б't=OujqZ 8Ѐ[ ˃Y`e[Xp&e%Y(Zj^Fl "eDY@|l0KsW5뙲>b)8P2,z|Fß~PBՌWon'YQjV< g0L5mJۑ1HBuD3l zٙyό3!Z6NF 3#o3|kiÿ̱Ӳ3iVHm<5 axH*͙!b(b>䶣n.*d!\%Ԫ &)c3]ϑmBJöC lmpj* (c7$z_bUYg}!7WM5Y{"f6(1T=OzSO\/Wc'ĘG L϶fkKzeoU:S8x 8];pk8L>LQ'~%fڵ'8uE"6;lyw6yJ=ţ/ wQږ+])c|wl閘aV|Jp3wPxj#4%PV p*Uv)0? Tܰ "JajDS94HFqbai`*ЋPv Ye)CfZUrp!:>D1?r$Uk#J CiUgvjCa^s `s)4vqٹ*Jυ@ *+!®1O>wZñ #Z p [|{f!"p"u|Frjms°uTMtocC-h* |v*jk wXv ʚܕX.OuY f{':S[6Y躬bXP@lTؒkXlfJG,ՋVk\Vqu"&pQ3 `n,T)BQܳd_v{ *4ՁGEQb>:͡W}l&[O&{Uu$O:`;$(v>rXND`9a31Y%&X !,f??O nalO:u8)o 6v~+@FB6$4ę]\)-G`̨#v9'afOiwvf5k%^|g-((Ԫ6+ `~Nݴ*@0JwRX)%ڧ ϰS:G?J4^f6\X,U'*h.Ut[xP[ɬ6rϒ^wo; 3ΣJ^{Ȫu]Yu ҺΟ :~k.ZuUb}2t')}E".٧^oRYkXQ'MNֆ[etznϷ1{RNy8ltPH3̏(fdՙb²l mly̒b``qyU&T9BS ժ*K[.ŊՓ@T9b vXXWCgsbbk&6ke.3FrF Vef׽C{kwj+%@{K(Yau1*vXL)p `!*oB홭Z^́7e9" q5Lx,f󕛞XLRPy-A5!BejTo,5cuW;ל qX/nq -(QSebu1|ξ>12B;7\ż|FW! U# q׀ɋg^ފ 9f] 00!#0&lІ`b(*&pܐXp Z8:2BHZ6Cw lh .;y ׆ʐ 0\ljVۣ+# g>e]Kem,RoUl '4k4lBu]5,Ab )Jdr⣢ڗmoU* xlxl`*lkz>ga2r#KZT ][ʳVEƃ>9:؛s֬q>O"WmVŀ!mfx^Kriuʐejg%Tؠv q fpRSJɛ0J몫6w2*ٸ(d[ BSa} {BeLwR[bmYN̄1-J)8ƆI v[wu-4C~M@\\{ҫ+YM[Ji+Y< 9iB:(^63ZN-D˕]4P:nZҪGPM4UUoQԱQb \gUTS9S:c94h1(Q.6"l},8a0l5Uv݂lI b-B! l>I)5.9l lXack9 33\E33Fw48f8*~GAd;4Jɟ#;JQ@Up˖dg y/ci\sܶ1K\+ldgqY;Q!e ^s>WR`-;m8Ufmik+@?EfCpbuD v2 T)PA,n'<^Ĺl5xk^Q+>.5$g_gWnX|~ ʵVڲjJ8.Zx\*` j^ Glwvkx0+Ĵtm jWpjVas'ir 쳸j )5jvu YR@邤m`PpRov726v+5YɱS? Eٵfe1ë˝[oT&k O ;QAzEZ 8%8^@JfUpUT17hfV^5mZՄWRK7VHNgJ啕Kq8ۨ]y :rx0;AS>Xbőv1Ic#6`Ci+plJkVf\dژWS`ݥrA٭a0YkهVg M(fa D`jdD-٘|e`l`B2ːL*ƧZWL *~!v]PEQ`8"'v"xj ʕ`W@N2tVefV؝u'WU!llsC:$ F baÒ;v(NaomTM8sXyZك)YWDNsf|~gLp/P%)ehBQ_ /!2̈)bD1vh- e< cxmXMI65$$0ޮaE+\YmAyizQloNk,Jקw+1bYjT.ꬲV JTWc cq3]׭,b3.)⊅B.([is]YvtnJu]Fb,YRfʕt[i"vn3O|{cd7+"]*ʾL!_!ƿ$3;pX$[@ps42[ň8JB8Eb_ a)1q88O5U3 X ی3 0VXX(YcO%[+.`yu!'p#j'q#ii*+E!.8X5yF9>,f*H2!H®"^[ɛ`Uh{p%( d`06[E^ڳAmUL3\+ܬ\K%vݵ cY.@=UNTɉYpS*uOgQse{ONOMNt}=(Cvg_j^Pz.aVIDKнޒ22d5vu}LOM\"Âjjʫ]V9c,̈́G5'#mV0^_rP%e|1Q]G'bS$#jRR.eg\e ̀\~ .N|kE R`"_ X`Qi*iY\̵@`]6*ljιOYA pȡlgƹmhL0`SōO* OقiU<%Te#cr<ݪ IQtQ7?gd//^63;=Ph"j]FI[kHJC BC>pq#TW "y^V~]V2PJ37Nпn}ϡ/tYka!'ش{uΩ͖g[t(ziȿ{:eEc{YQBtzR gVt>OKԕ:u-BRЫ_WF~3>ٟ>'dF@ɏSc e.r[!x Rw#}@Օ`bK㬭Bu'8+CqڮPtN2 c X5"U>fQW!q#P 5 t @URa!fĝTYb]+휩{E5Hob2VfwVlaC.+,kd/`ɜp1RBMk] F̏`93UYhj~ hm;*ob51"m @\!T7lT0L'K@k7Τ˱am cmzxP4^>Ҳ2w5lV#D`U u{)뀐l뻂YX "y3f&jBxO6fuޝtv_v+{_T*WLܐ!%j~R{-JP۞34KUtQΫu5YuзZ1dx3!w{IImXqPX쨏ccml#,0xxy6Lb~0F1PQ9Uk ̭+lإY,{f%'8,^zO#pk50^38U92U`b yG+Vt͙+\8B-gXq?H3,*37ή`CLPc^`.C;>"㷿NbWrMk2{[lkPǚ52tDjڶ{\b[N6ef<[ Y5E"?膤 N{c!igc[ Ç/+ !'ݗ`o2W}]2Xhj`.glH E b:1vխrrpЕ ( v-fJ*%mnXpFdƭbVhL9U_0 6f0 -GD\ BVYrf j'1cpAe8*2pV6[l x~[Cf4 ðN㸨gYodge.Hk(XeplVdیbʙݓ")!AV'F9f`h*6V; M'dCrdfW5  b)fQ Ec6[XÒuyH6Eb|9(T(XmDl,]6춀[V~(׽S!cdژ60kBNce +5M+B ]aecTtTЕXZ.s#DS=P Р3Qo=}RwYu(":VX\-]jVT4A=*W nl4=ZoQ;]ңL`r&ޣgs3 `x Q ZPMe0aG]'wɼLqX2)eMDENC"eOܡo6FXG3|͏iEHW (l.Bbkߝƫ*+p) f#2Z.ا*L`>X*i* p,ʐf@)uy^ eN#+ns>5 モ!"f(Fa۹͌j;Cbj+tB/V⸸VU8381C8ش weoH39ӸÍߖ c=vǴX\:q[rQ D )`U\0 Vf*2r1멙- AA_HSQUS6 <,m{,=S XgXN*Roͱa~ 2m`:& FP(X72v.[3_ Qa_ XkbYlO%ZI%p.B",+YCn IV18.X(lldN d)rL6ube#cΞ+(o0!l, bvn2vuP[bs歉 kK|g?8hJW'`pX41gO5su&Y rF  cɧHXۅ 4koͰF!]SUD]N6fadN),, WnY a^r5,9E6, 9< ؉' Fe%G=lXUeL PNQH&3a&:OJ^?c껍,|Ɇ"מzt鳟Nc>Yn:) U̩yG`$d 3a&a*π³Np51@3? ʈې@-2FWOIP9³\.!/ Bqd! QL̩Vmbg-'uh'C"3lhГⶇ2VCNC*++khajgIldEٙXø,,Ef3*Ӏ<ŭ*pTu< 4`WZYm مF T3G9"kX8S`ų^XvaA)]O|XR?PSVX' e%UkC ӇQT(UfMB*bt^hX c` 窥bZO߷A\g[Mu>z/龧j,uWW'@}YOe3,3λLe7f|ۮu,O=Owѱ X3 b g>ۈL`qf11=7(S9+F?-3\ld Ю6h@?i=Ѥz3⪿s8Wۢ͞@qaJ+YMc>&1Z4ߞ≃3rYJ3N"ΐ!.ۭ !$'"Vk͏q䡵l ˬRXqVMbIcX2m V$WA B+8da;LiPrA pIq`L 3TʓcևɱJ`W9_ Qo03ԅZ> KJa%-cFR}͛]s m2c)e@ [F\1*USGHd؁O(ʛ>!.ϳV9ET_h E:ؾQV 9kk)kiZDsP"*nCq>M&lsLE Ü b1!ݔ >#L6K_v5c ܬgTxUNVkj)_;}HxwsZ0m,XņI7s*T m˦aQAp~ފĆ>Z6;ʠL/ %a|P[¿McJ6FQiKT*1vfW\>{hAU ` ,~d5 3p]ߝ2p˪\w60aoljԶe/mi@wZ 1 2h;cr0r**GԠ˅m,MvŖ[`1XO_ORWS_ :_z^'3悔F%f3b;f[hEscܲE]p:F:u='Wn D\M33홏|LcY8X=7mM}` ҤCK6#QŁa*|HUΡn.ff[LxyV_x,F!5b%k5(Cl7382ܚ\3@[$e,0UYy I'h{,%_A_&v32ddgmYTi5f0`+^6fe&:]иΘf WSoKGm+[>NF5.ê љ9l/ 4A*Eu 0 UPrVjD[^/G^^(~^m?i6a-PP!R lkO&%>$eiPXM40QlBHW ӻ(Z\N&8%S$Zʠezacq7IIVtpm6nT\1Vk9~)PBlמ@WEPaNr1=*mIVJ6E/)Yw3]6z^?7>׺ ^;f9/.&9{ .?"~oj[G KlkLɛsr0?\Org[X9gqlfŻBG #NLVSrw&r̭[U] 2\ʴdR l2V 6Z;Xs(g(ݽcr@j$ 4tFEXQ •ζ9x Z;g/FdEu#,:5vВ . ,)ek\5Iu]BCmpcl 6=gT`YĮ+qUi U#g:eT vU|!۞z뵕r;&10|!lŠ+W"m 2tCM\ڧ-`,#y?p {Y_ql`3A-Xکµ]2ʌ.$LL3 l3x >9 <5kT 9&gn<ѹVz, X .\^u(Ympա0 +Gf%t _>f i *rq#eOy3kKB VJe< B6εDk)앱bx+x(+aLA4\ɱl({s`@  VvWr$yOLcW_ MNDYtr%ٚY4܄Q+_6(;/LW k8! `"U[gcX5)p0X QV%VU?_o] m*le ཷDVi*f\ )$W .,11?` bs2fb\p[F,)H*̀V1 .؜/:u}ojΝwEggg[~mc,q:Χ 1HdcϷUEl 3He:JAZpcݕj/j"3±Ve. >ޜh3#řr|LNS'7w]qbj`MG\}c+fHQ8+Þ1lrT wXB7 cuJ22yWIap>`їIu1j܎wC9WLmuu1V3l 8E$XON q#͊6: 糄ؖ V%,S`C^֕fF y > ɫօDmȞX%T B3P4m|a<ԙ;:ų}}Uq0s_*L}Wpkmqj q_ͳr-'+uYٳn M`u+RPsk%g]~ibi H5Х?/mr €dcԖ,Yo/mNF,"9&7ɀG3%`┝JMF-?@5ztNz_Y'g6ْ<< l{1Rtu6Y^qKǰR`U~Zmf϶fy38>' ~*37Msf0EK.pXW]ZVɘL)׎ 2(ʤSc8TU@3]¦6'Xxt!U_ɴHBUXrBw],j9klwl1j{^f) #-} Az}yZys]cVeqr*V̑ ̣)zc^X1x\8XNyq‹NgtO[irAF'lMg~Vl":"tEY\j!U`ն5; E=E@2km|4$Q3 ~*^ӐFc38 ڹ/qH'lY,*b(s4) 8 ckl-I]]`n/fJG|y`@c,F 2!3`cX]͘T*ntB5_j9ZU{5AGp ]X~$6 r5b ԩ*5F`/N_V8TÔ~ȤeW+Fu^q &©11e3+V$.u͖Qˀ2X !EF6x@6(+lʎl, (\nwk䁴Mp*XρYg,d+Z2 ݲJ)#iN ⵊP>$bq%RWc0Ă" )R2&Zg). Fbx*Kƨ5WʐqBmm]fj s -FFl,, MkXN5+c|S- >J,9~պt=/$ueN=}쩵59Fukp%>q @a1 fm60ODeՇ^ULCʇ}0Yxyoҳk sb,Si^D[ +W)0>8LUm8jnSZyr\鰹`-uavQ-=NՑedʍy-c5@&X;0^nvS6CVo39` 7݊"&,aH F fu+6H YdY^S߸Fc+n@b,aHK2" ,8v#rM Cb-cX,Fs$;kBV|0td>gζVq1,IK|0Nݖk0Blȟ?d:|i`8ŻAۗ=̔ TcXnxńrك-V\ԥx@_ 6ZͼdYԖt#bUXX(P fY^8 `Į냳0dDl}IXa]6僅W5٦eq HٙTωI O+@WXfU}[A]V; Adu:u|jvDp Zw]9Br26ի*R VlilfP|&QVaOZXK )p/_XFC(wk䊻[Zvֵ/n3Q5f}mm !SIVXA dg0rp&u>=]S{e@ݙ|UUG?ɶ2;Q*Qg RFjE~Sq>=H>E69ap2v EqQezFӌ* 1s)iYe-20@ !T kraDJT8SCe %' ͚,ˍaԳV SZr-f jak. NfyUF!O01EC0cl1ͱH p!B8uf^Z~O&rVeC|K3+V99 5$*ĚؕMC*]F6 \"j[2D"/RbĬoVldq \+y(:.lva"7ǝ: 8~\K#V16U]rX]W3k?YPZ|6Ei±־/SUUMC :jX\Cދo S_zH6#6c>&gW_ݾ=i`;G Ռ{Z|Ϸf|{qբbxczr;.D ‘Tb(jy%~!KNT9C{5%a[Z&e\F%5:e( 8PɨC2Ȧ;j4]6H鈵FӐ8۞:q3W UUB5E -5hC)? O)͖n%-dE@eu-s,ȱOaT:raHPVיY6sBVZ𫃷-E }E *v?Lʯ`ؖ+w8']2UU$Vn pemN TʍRkS2NjƳ{ g\kXTY5vFe:;n(VZq>CgM|XD#a` yNBhWhT?01ˮ9ZkS0lȁP̱J(e ܷ \09l⸠9Q~ ڰ dmW̨1ؿi Xo%@9L6T F F"jFR I`M5k 7,9բ3+A8u!ϟdlM+暨6=GIFF``*ųd9վ Kv, W$ 0E|lٞHFDm]B&j{UYj/Pt}ΊY"y| :pѸ\$UլUW ghN΃-!2Ecd00lU\$.ܺ%H87pB NJXly/20)WQo3>F'ON *IE[>^UQK_CzZuSz.njca8u@_c ڳW]3 XΞNu.Aqs  q& ?DA8m5$-9k/vg3?(lC9g"w h bh1>`,+jg?"D<5Fт,9ClJ;V[388ilʀ!A lt2 )!uM̪+63єO=^ƶҢV!$Nf;UlKXi$rA^ LE#EB35UFel}Xʻ#5nsUA0y#BHUiUF$29"sB>`\0Y_lӣ"q\0Q쎸 e󰍍ڠ" //u!ePLA&Ѕ\ JClBm/t.ɩN0N@cYY^X$מ_Ů~A$cS*eKW. V ,VYm"\A5pR*DmCK iآ2fd.W g|+nr%W\J*Y·UYA1u،@⽘ :ع]|1K0$Vl@T"cyJ̭a"p6%,+5xbrrSWSU;*m %lS A,_ *`2Z0Tm5 ^<7nTxX&ԝu`LW;x/>$5IpTWf3lE[pk(Iڲ`ٌ]$YHIU OmʂBQ`0 rmcTU1hN ě%X侩Svf_18rG%\*efrYmr6b?QXЭ=&@Ɏ;x ϶ͼ#mFjdžYP1pX`գfkv23ܦcP (5pCnZbIyd`^3v FA 4p46XVg$7bk5f 0py,CwvݙXA.m TaVEa={ը³`;MU`w': 툌ZL Pn`fj(Zt6 \ZAs"^0U{8*o ahDC@qQdflIpv]אj3*|fU\z+oֽKoG/VQe6a0\ na|M WEHED+hJ?Bm}DZ`A5Γn%E]bҪc  f"VJrc0V0eʔ!A Ai~ٔaWiSX2I@rgi&DЈ!Z+f%rڸlЙ+br󮌤'e2;xyKJsOuqގpn9[1$b`hB'rACoAPf"{˶Z e, V!VfX)4*@!'` QEOpm`l~8ȶhH&%>2P^gJ)e6< #6+ ؉dn'ecg]2ޠKlaTaʇ]S`Fh%0Phړ-!Aqm^ʼnbWb9e͒pg]b( s349A͉͐BUK0l90 ~rp&\ٱE`38Iq,HeAdX #lCh?, 8ft 403A@ cBJ%}fLI1Qk:[@-3Sŭ(1 ]ѹ^+ÜEu2$eTY8EX D~a*XǷr[ihSc_l5mS qucHÖ5lQDB 1R@;t4핢BV+VH0f<6EWe^Jx;ۇ<*F[]I"5o|a:_hq29q1.Q XV)|:iۮM5΃7=7кf^v;3G|}ίf`ovնbɱIZ[K'>B0g }$κlD83{k.PA%1ˎY!; !sfx1l:|g@rnEI3;(@cf' jNdؕʹX|N{gs @o ,RWf)ߛWٝZ|w|ޡq mnԽN<I1Xdt$;+lVıR' [[>t PQm{vK{sDm&%fh'X`#;4 j@JCAYbuhuP2^ 4T0g*Io T$ /@,]J폹+ :%x/lɌ9Pt$jpWZN'n)D<g-K ZNP!kLlabc EgK55*D4X#]d1h:R.ZX#MT1p Ӹc{55ْۚQWia …МV΢G 7C>)Py$XX "ԖeЃf\VU:]@Rykvv{Y% V6 ^uJP㇖‚XБг,_5!@Xr"Ej[htX<%s53[+;9~gwά  Y&|[.ƣMX!aWYT'RI lrDQ.I5Lf=ȇX9F?Ym! gΨ2ߴ{['e؎@rabU w-Y0ad엱5nQ@]UT"6J!gHX,[ r!w;#6TjVh|񂳄L-Z(XOn+iQ}eVXH@ c:#o'7Ț:{MԲ/o5 +;ʎ7`C?Ot}ZѰ\[øv6[X3n<$)cEc\MK!,̀Yr _ [VÖ3 mZHwـ[!hՔr3iA8Bhݴ3Xl c_0xXJfX9|3s6D6,;fR}F޳,ɔ;{+^IP#8)63G!,$@T{m8ك) @k5MeXn ܣ֠{0~_gc?$Mkc YVX'm`Oȉ6 UymuV.ڛrI ["W E)[qAx Gn@UfX>6YA @ƱY#X\lj0# Lydx^m4eUsP'u`]õic~PMdg6aC@mt,;v[3=Cc- ?-9_kZOvŲ2]#d@G,X@+ |rFa%F՞lGB yVʸk.cń rKK~?[ [>rҰ&;5 …\B{-g.cR \Xvv=l;[b9Ez<3U`.01 P`hAcpgRVk.@uߏ',ſ(3@@ I ϹC`jҼضiPC!bI"nE@P,'b?qiMmkA5Ԗm + ьc>=WY9ߕ>t賧+pgVu]e.+m%\ Mv|#]  cUo#9`jG Bpj4tc\y ++,a!\6ڠlrHkjU˻6_ˑc*͈b, RQ gXl,밗okf8 .[2r %% jQH<E:K ެ6A0+8-nfhʥ5P(hKy>8XpBYB+َmU0#EP+i&Ic xPN[!偭*BCc݁[_\aVp(B-;00 oC>IiYLbDʒ+[nH)#HQU7)crP衫`Ͷհ8;8g\+`˾BĒ<*s/c^|ttN`TڰWMEJM^F3[ϳ풙-΍O-ՌF l+VR|27$1?[x EZʱnJqeu,Lɬpbqc >PAص Zp0R466M\T&w.NK\[ Rev Y\)Tm+ X".ڇ,<1xl2&dvd[$k;dZ kF䳂љD,mWW|p7}dW2ll E-1[]#g ]B5:cbB*VC4ZnǓd* &#pSbmk<\Aٙipuׅrf8wVwPuih^2k2]Xpl%5k,f#Pm`Z*T`q+D{+̳ZTm.z~ĿO?Z@-+Ǝs;{ʬר)ۤޭ5ߦF'1Ht/YKy^gSqʶxǹ<~=Jzq]e@3;TRU_<Ȝ4f6rv9/rqZTl?x(gv]U^IAbUc^*+~Rà(lpsw#Z+"`,ȹ gԍKT\eD凇n({ }gs͆bQ;o04HQ⁰W!3 2ʥ56%]96Ei x vB~Av骵㞯bz//*hLvaAVڷRY-5UhO?.26P+kh b~4M5Rqĵn`HSUH+[&rvXj50U0x|v KZXx1ic̒KZTddn8mI;3"'l|&aR&" PlE!U*IFE!ʳF~3cLURMkfaׁ >e.dڈYEEP0(!bu8ԸpYu;WnG\."@fPy1Y`:MvԻA2 'k;`1i *<|+-I!&ClG8Xڐ$1@ԍlylf? Y(Fʧq Q6P`3$ 9s*HV ,.@fLmG*)61JƢu _ 9r !)3i %`aiSWgi lLk$01e8cSx^!ƌKN1HHk~LDۀy}NhUWM"*Z{VŝG]G-zs>u31 n[|p2ΙXi[jpŕu5=9͕쭚ކ/Wzh_#őB͵C®Z`MYT+,Z~1lC[ k6(JobH+]آAU<9$ 5є) ,Tqp w,g优[W!Q%, 321 qKZT | Iį,+^+S]qIA`@U#a:Uw,7r  b5 pZ1 lTa+KqFn+p!LZ|B.0 ÒQ'& +V;+b 6WÿM l!lBU(wNͨ+`j9vְ4!x׷ϒp,y ĺmTV`U]-ҠhP敨rNծ<͸ @na6`y<$+0v!wQ cZe*Zۦ@{?r3}6NΣ/Yŧ$G];.\*XIp9Utu [U:pQt rѬ*FՐPAbMl@F)3mcFxC̬qaXdGeƥTkݱMB#d* I C Vb`d7% Y[Uyn&R Y7\cHfVx!Xg1-\J,'.GlT`in+/+o@ [eY`11YGm H,JK4zMTA"aV mPdzd19wz+hmqI.8fVvjAQtEgj5UZǰpSs"+wGԽYJuEgP#ng[e|E~5uҵݗ9Z}Ojx(%e ZʗИOIRZ]r :cTܬ𲝍mc,b3]kVNVlZl66DVÂ*|[!~8p-+f|;/aԄm\0:__ʻ#bq*\0+T* scZ_NV1cbuSO'ukk 3a̗[^ [R{aWg٭CVZ6X5dϘguyYNDͤUeҧjL  &L uddlzM\(]9& yT9Ndnp'u[zz_>5uO{'I֖4_Qj툯cX&΀X9,[·(\5a@2W#᱙[cvWLaexSkca63lR[jBJбUy}zSIDZU˜V(%P}/wUQU^z~a̼||Ø=$[]]˫TxoE'ݡj,=UԡݕVs:?N" U2Zdx#);P.&7ܘ"l\ٳųCVUzÉ3mON,G}:1# EdIcr1\; cj0ʗl|3 ('xl)a NgܺF`ʵٷ +1u«"[[OvM6fF>X 4Ɓb2 ɬYh% 3 uwk1^Tmx;, d?qTyزovfE: 7nY]xAlȱH*]1Ո!S:F h_Rb=AI::NjV/W*-*f abX-Fj~K ^hΗZz$WXz%)k iM112+29~SXa1&϶NFl'Oiީ VVU%[xUy^LX؂ٲཝJ& 3=hU ,qm59ChyOT2-vX6V0هܒ\7EY(Ƨ(FeʩU`v[142Ћ6ah[ %7|=tOޣ JW$RٟPHu]:%1)mʕ330i(,A5'jϹahډʔ#Q s0.;vs6mDb+ < m؀倁@w&pDA:EB!@u5Yɟ Y8 32ݢ1s׸>6]VghUb'J`+*13S;6s;6g6IJ+0._".*8yLkhSV77rjR, "fa,1xcU'XmmUn6/pըZ+bl/+B&+;墔Ұq,:b$~nTxb mQs*LۛoݰL/y\R@Ykh[[agsR#+b2eѝ?v~( h[ò妸fKQ¾`3v\hWUvO`5>7Q_;_(pG*5D5ḏpB$nkӺNNFF ]WmPTmh-%Ex\R MXY-};Fu2#66[=6^2 chXc5DJ`d3(kK(s3Ȩ-aF{X2-=QXB[!#ṉ(D/.F[Zz4Q?S7zVG?zRy6w`ON uzq=OӘ )z6r}/ՔԓOU,! E W[SviѿW+NNNo4OaKewP kwTH=iUQ'Umu5`*j6GT'\ʿͱgTGqDno_KJz93 ֢C(=Ev0ad:k6ڬasB#ԐϧYNE:>t;vot8om,{:[tf  T+s2e]c>#ŗL ~!W\[N 7E] NԮxڮyİۻyV (yɆWL@cz{4?W\3rK Tf'Wj33_D[E]qo4zSgOACѶ?}15DJk+z/KԕϫcK`73OB,a= z/T'I?a s7]kSTOY>mgz =OuTcsF#bXFSZbzYgβe|c Χ̦Q A=kCCZ>37 0{ gum?% wVkeC8oXWܭ]8ϝ' )jѲնQқ5kG>ibu+;"=&5+ lm \laRvd3M  ,Y* 9G"5yip'%~X +/a{~sd)b/6(_lpv4hڱ&66ΡNJ@C;len]=PAZyF{pmYErlEV.)(ȑn 0ڃ0Y0 0*ٵ0!c0 Ph6FήɃ3W{Vȏb6k uDbV[xCa w'/|Q!ڼR0낧Lr+i]vAb Bkb5 {ð."`З mir@go5T!f2r pkdrZ&qAP9kIͯhyNepllF oXˌg \ˆs C c5sr֭_*U걍+f50am\mⰬFSaRZlOMw- 9Ӓ`Q+kQF:V-M[,S\O9dV&p% {L $MA;?Yа,6~l9\唱Ticv7KAn-[& :fj!UfI18@̸@XGmA 'K]AGOUvuCfFÍ X}QP`=mg~Ƙ_@u'CԴut hwW.Ie6U; \_}Wh#z~7!MwSP=~.zgS?5~ޣ__st/_DUV}m]/ӟBWzF= ~~j۬"b}W[YT;XghR['^Ho:>Ug֝mF5MIVĬ36g )puu5c-4#4hVŲ[1?0s}X`K>*u<:պg\ZӭVlU*ղ%aa4 <F^x5'f $eU덟(E~VUjV/=ms=Wꏡ܄ո]Ce yzaWBKVgц` oRerƕSd:u-&ȱ  ՟ˬ`sԅr"c!G`C>@١ut2љSquWVΥw4^PNU 31hieaOiW9ƵrW2,Cnys:z.CO;V;1=rŪRZj^:l%sV'L_[4 XAmQ/^/Nꎪ=Dꯍ]on2ϩ<S,c6vih:dE'OzDRZu[e?^TJ3\ή3VJzbu eӾBz=Wz63 aâY.Djn ZU=;Rt`:GI٩fk@hm$:.gg e5[YwU}]V=ezYiO@QPǦPOvοLbZVz[ Yд+v"ošț_?|`lꔪic/]?qjVWt(gMgH`&Ξ<>p,ϮFpN5avU sfs0zui@#zΧ:gIUbٟǷ[ƫb]F űqBu ,'qQuUX_TRGgE[CdAwZ^-Szw?ȸD+_XW:U=Mөbt14cxfja -f;iys#/|ڰ7l6tv(BuL c:tqm8Q)hMBA,Y'YZ8.FTV5\B/ULJ{1fEp>XyF%mlFʈ2)\r|LB_ T @&|`Wf'+8F)k UPɂ5WEXuQB @m8e!Z+`3; Ճ [0Z.63b-! ӠPXdfkƽ>y.%Cb, AT;8$ \,c `6 l3)@԰a~ -c{, 'e3.' 7jcb3wHkj!']{a"SI7%_RBFb2WE#hb7ϱl@J_sUkSӷnhA6,K~赪d-$Xeo)ܞ]s]e)k0p6 a[_x͡/]1k->P]T`|2_I\akX~-PY/XӐ]l>oGFDwi^U䮠 0 P|sӶVg`sd 51kl,6Xl`ske U1ĭV9 ,j̯sgZR-|)z`5kxx ;InAȆm/2k9 cjtW{fh yYiyE T3l  GU1yooLrO&V%c%~W?1{X1lGj-)5@Vs<kdѦvvjvf 퉪,s>Y}{B𴷩JK}#/JLѽM\Wcn:d1:m'jkXm@c6)Q0;l󉙘Hq,%qe} rUhZq`,]*:dO?^X#.T5wqoT@7& Yb`u 6Hec N ś:O-Nu2;EkR"J;;j I]j_`łuB6/TTb4SbKL]Cc0I|c$mJǗBU  umT&u0F3 I<)ϙe֖V)7%J<+xq9;MΜiXʘ0UTVbqJ)YF%fN\V&lͼAp[a!a V0\5& S'8]q簃)&0Z"1k'f<]X6pcl(ݖjF(N+YTBP S62]ِ_ D32-XH>J%4/ET(Ks0 d70lu܅VlaݬY_]0Qͭ 9T"(lbfո:pmͷ!Ql08?C!zڎf9;) lv{p+8ኋ \hs°:WVe:1!jϓ ՀbݛN yFOoUk;eA.LH>{չ]^~#Y*c(l+w #Π Wj(gOf%+TnQ`kMu*W6k}f)En^6Vmι?o6aѫe)d(H,I ʌ̣TF$1| h0-9tuYؖA0).9ۀxV ,쑡e֢^ӷP6r`0I gf5~n[2x5JVb=k9 $>kVgcو[fͷ,LXUf4XB꣏b-+=X\)Q>RlIWVe|3(1v6l& 3;NLͤ6P1ajw 0fW*ms>U@tbJf"Q3f !]6yeҫF?(cfKK jJ ԫT6udbf(ȯeu+٭o!Y3~2ٗ5<3(]Kl~3|Fz\d`rے6~yEm\9q0'U*V&F- *bjеʱ-5VD|cQ_QfyRhOն/\0gMwP;2S(eJ$U]=wطo;o8UيLpVV( gh]Jl02a% GL֯a̳9!EvfgRhhAY@Ug!u\{ بV0/3}xF}>ޣv~$n03+*7bfM|q1 NgC;HZ B/EQ7Ly/,bU1z.!*Ps4/H JmRwՋLݠ lBi&lm6a7Y'yg'Rr93Y'JBV7U$h*A9=lef_:SiiK1NPؙ7)]euqaU풻l퉏czN1jr+P RԾCse,dc BX3srY3nw ͭk ۀ{vvb띏 `řP ,(oϴ-3S?~;PB6%f 8t)gvFuf5q*@j*̨;؋ex(b^fėfx,OT&e%2 :Mu6 AfUKXW~-[ W?ōO _<UR". ufV'o3L,¡S0ruª|js 2 a lf6bfD੃\"%R)j9;DpJa%Z hs[ kNl;XqakZ.mAlU_"xo)%e Z0*3w|QKH1>N o3`p`Ύє9W~x 6J5:9+vL"8wUF*s+l _yY0\,"eq۷A^)>Q4W20?L S[,qPmX1흙"'}`|p~zV` :YGʾ2@T)Rpsj;ma3m(&YmKv143E1"vjgtDqw"/فe .Pikm.dl0}ȁfڴ9hF/Ӂ]WOoUh q2)3fW Yt CiE]*C ns\ds5plH0f$jb#0~5-<K)e FN~Bpk3z`7qƒRlru{وp:#GUge]I"mY1#r:5zl 4q!~0. JF&W$uTƶh6 BDH0c~b'cz-YQt1[s}^H(Ģ{"DAb7$K[cC2햜bރQZ ^mh;fwoaйO3eT fqbٛM&y4w髍Y]AZ(F76nAR&w bk5fYk5f`}333333ȘJK*j"&Tv\7,Ml Ꟙe$a c f4t\e @mldWlhUe]65l@aiƴv([A 0͖;~GtuaRc:| ;Z)`'N,WR@Kv O^ UJT cYZ4"l`Abj.uuf:`1黏v-G%y\܇=*f+Jլ3YjWU*ks^ +*/V3rYI#ajܱBS_6ᑈCgڗ2 hc$5݁' B 5Dw%JFk׷fyꍙBYd5j)|W.H./ #GcZ0~25<)6૲[ܲY%[M϶k ^aݢfete8@aϕ(~߉`#0h9W\OmW0p#Sb`'C^#ۑxEb0[XҿR9]Vcu&d(Ȅ9 &S~ڪ<9b*蹭`T68%c—W3Ե) D싶{X(.L0,XpȝbK+Xj x\2/1@"-A{ft39ZaOeLH$e&3|МFXQ=/S^"W!eZэ6n/U0745a+&'Oh333iUpL-DVmJK:uf?PѮXzg&bbq36Nf q~&s33Fg&` RLC:OkS%1*vv0-yzbحEX)2h;5Ц#vݠ7HYoO`,j听ìwnS+URv .U氽NV0`+,["~ՊcFՍxd!nUl!׆v$!54ـQ파*k me`kVw$SWqʸtUCru 1"ldl)M@5*Y8iY=b{G͐ +|b2X,T0R[Q_U Lj +:XqfpQv3ejV$m9 p+⫬ .Fb q>V Cw\*gV.(c0rbk|Jxwah3ւ<фZK,8ؼ}Ze< əV[.7ij9@k"  jNP? tal!Va_>wV@W [OMc32ÕJ03r;NVg,YZ RYB9Ks05a-v%y)f[ pD*c\q|&M g-[/`VTSsl c0%bd Gg,棷:3l>!DʬYu3`)ROJ`Vا 1Y@؛1pbhѫt¾:5u2qtB% kNJ"k|cۙ6B͡hl{KO`ŤDUҗ{""8Ҕ*ȒΰKa{ 3iǶ 3d֘=#:='Һ?uzQ?p?°O6?q8={'3vhG0ϿY0f ѧlRgj `H+ YU.QxkIiJmxbL_Ԯ+,ಸΦjd-~"Ui2fčxRLԩ=X3(8ܕkc8QmX8%S3TYZ(ߖf  E ©s?`Eġ 5dl aW#@2CA"nc}!c$$ nљ $rрR=]X]H 0>$( ŎڦjJVȟv#|Uˤ%v:I+ǶBƙ (RD1-dG9 6PYP4aq9;!93iTN+sQɯ*ͤb/^2[pccRMRUr=y\bːʘî< fńmu8w 4Mkm^*jGZ{Vc! %[,;BE<"ygRiǂ3d(ppȑJLī0(:+T=V*D\Sktm1: QZe[b꺓{mJX{ 6bm6 WJ)fqmVXU5FF\ó{q336ghš:bbtuV-i:*ˢw3\&RxL$ҹ٪v*Ǧjgƪت MDf4G$#^rj3EDӞ&&&=0D#s:>Z@MӧYGا_ hMK5Ƨ MmԒ6sa CpkI@)q*Bg < 3;Sr-8ˡt`),?(j YdjX-mj4ljDXE![(@FoVc>#M &{dcvh8 FC,-"X9 +wX,J^ڞ>o B⊏sFڷv,Q˕]f\n@3RA J;Dp^ j2T\O0xOm=xmH?C)^٧r«٪*,Bnj%` < w5V(iilU``8 *;Ơ9|k mFeD5dowR (|t $ hi0&pjDPi5er.QSV`E nխ(Q6Rl8?VlMΪv)]<|ᘰG!2݆)F>'-i\NkW5r"l#-2.5.C@G1\@fQp*:y]1 QgSc".B|b}<>]ERq&+eEy7XQ2 BS&UOΛ/eYEXD%)- 1̱:ve @V#XzxLkUgxJI5tz=ʃ.z*>ld>ib"iR7T5zFXbbAJKyXbq3vwaXz`w'rwDݝ;gu6}lfq8Y;M O4iZӺ>zgQ}][:ibC1"u?S}T&<r>f3*#\ɍG#ɱX,b ťVyUf%4OgO_? _eXu'6"*Xk)ĘuGhmg[2H -bΧZ=vwUә_J ^Pims4bxn5ǹV7PL%c30'zaJ.`M@fl&yCdfnbYkfM[6olY;N ?gYl&l&fffMDg+'o/GlqQZV:u= ͠h qe4(NU @B1eF~KUb:߬Zw &U5%[b  m,W.WAl`N6ag6}m}CDa{uDSf1l l!8_G1Pي΄M:v5Qv_ 6kmFIť+X[\g0 l e#u+Qipl+X/?N{SYvj[KDenTճ. ?J[^ݚ9EM!gpT/d9۴WU\:?LyڪwkOÓ5ճ۝c:ëNu-\b2$2?mU` a6PҲQ^R 0yiY>TT+ V&gC)aٜVn80̈4 >YC߉q3̶k鵫!V~(Ƞ($0ecʂğ&F#qۀL*;[m مA[ d)5 W<*!ڱw~X!̄:3Yn0vV"q x.ւ5d60wVup-,`cԕb;MJ  *\  hk>=ys:,vTUYPPdMkYF96W٭U4WQ֚@^粀R|^bE PA‡T_{ɏc.j^k4)=ʑfwfm EdNWUӬ¬935Q2C`,6Ƹhu1eVh>bPVPbԂ`Bh^Cl̹MӬE+Vg^)0&jӶghѝ;m4y&;#C;;Z'zwDN &7hC`3?PH:VعI,̺,VbwK\[a,2 vgcWP^];pB#QZo#D3s0ۺU`A1N2`HRѻmKAW;v1Nuv!La;XhXhvP5(|&AruQ*6CRw oPpf9u>T= mNYiTEiND.B6bvU ֵ@lӃ-T`G;jw!T a :$jev(8z;5rP(cKYF4aʃMdc |.Z <1-eK&ALKTm[YMU2=jKV(Hva,&2,6𲲇pɗ+*wWq2m.E^^[5|QnYGl)"́k0bB [?YyB 5m8>C] F3Nį 5|r)1@Ng5::%oֹKNYBb³50C>/52mWG1<1\T 7wwEȶaN7 'l/"=hkVMW@"U!g:XR*GnbpuYdvYdzzk,Ty=ΡDk?#Z7R#_aawf !,Jp .`*bfah^&aީިN;u ;zwLz pzMzE?tS?D'O]щ3zI7zS?_G?WI?t?M?Q?aN x}#g,q;;3LS;Np_\BOeb:g  /4>vg{uwWTC3c3f#G*31R6];uTcQor`/S"E Lö޶ft,+D܅gKI )mx-gmˀKFZ* ]sMb隁Wu-U X#0Թ>GV9i^m&\U :n<` f6Iz`:e>P{;O63wY\JpNъvevЦUc30 rJ;Eb h"n!~b.pX2ZYkX党B&0P` VFT(03+YaiqQ@cHɋ m>Ͱ֕W*gftGdd?;E"7{AH\0bCe2BT͎YWp{{mdv׵!Me~*^UjԀ6AVj/{oY*3i5-KF :c˴!p!2oae:-5eVk XY;*`y%=qNIT08 Mv2QP6\pIذ8;1VmLN΃9H+\~MAݣ6kunp.pG=B^ {l0t Z_"d*.%Xhu֡S ӲtVee+5߿XNDMQf*uSz5yhDF Qmu˺rb5(cTg+}Աƍs4/8񙙍jnLL-n:h+QT-+59/75!kޡt>|-h@GFz:IL4G<43gdNѝ;fvlٝ۝ڝ;S;pҦZ訟g:973_Ba>]!кY y ҺtxhgX:'WAuWOs84B ӭ/bt0eWL$!B+yጱbe[|G蚱”юi <{^ʺ9f) –x jj|UaUIMTb6Q TA)>uEyX됡*uKX} TyKV3"'+Y1N?0Bp%V=e0pP[ُ(צB!q?nc3&xI *65ѩ_˾{_6+V{ fZͫT*DfՒP5s$Cs3ܭ:Bfٙnpp =#d<8+ ["RŔW Ze|*vf:ů:G'qZ6rTζW +=v)ۖRʱr슪G`>&&c+5l^aVbN<͛w'2ػq^21C}NP#GoAee!63Eœl_JXE$ &Pw% gyͰ+JEs{fԆu:r;WW]f x߮?QaI@A*6U/XfޢI%uo]xY\kI(cZtEHlc7LsQiܘ;@{-,iUџƉuAЌz:}^:Ua$fIi4۝۝;3;3;;;;;?;v'bv' a??\ YD[V%<ۦa}?cе_Hk;=GLfz=OF?'See{W*}D\e؊bʛtC˔n0_':i٬?1kg_vڻX/q+B2BڝU^&Bڭ3JiHl > de|Zku,/ ឵W|2=gX^yм]5jGE@ MGVVYVap> j&W~U̇(K >Fr5]0VjJ Xc1H^.Y!C) Ha1&۠_ɲљLum@UTV;UuS22=oevY !3rXםFK}PMˈa,Sh㖟!O*5l,ٍ= Z}Q^! )r[EGtW(G}_eɋ *`ؖ3,U |S+#&2|S: [DV!U';gp"Z-Sg aV{2H)5Nj 6.ՏZU€!\i3.e2pRqdxYf&3,P{U9=̗ᙁMįQ-YAutwX*n7ARҷ*[ut3_6~^_]EWe-Oӝm?u}')z !VꜨ2iUv8ɩEUհ?`N7k<q \CFPt'^lLߒHE^<#;1Rޚ[W^3X#u NZ}T JS4OT~ҪCA}@ֽ/UU:Wfv=ƱcLhEmXL6;{cSy1PRJt@ Yfa֪ 2n[YGK:H2v=5?uwA0US0Q;"v gj dPӬ=gL! (}I zΦ'/Ⱦ"n˿?˼OuD`LToL_43;Ccve_vzfviBm&1NbŊT}isNbry?aal5S[1>&/-?nr% af۶Z` 1BwAf\jhUYIk "Wp/>oz~@ʹJWCIzZjT:zږ^"[uTܝGE)T?MuWq=cZ]MUJptk---t-spK@CZwWUz/Eevz755}%}4H龶кǭ_QQoJot{'fggjg:^4OF=jTz?C"t-k:Y,|mK,ʰͭh*]!cn\DLĮUFgSz{ӽ'QՀ:Ql: X1Vhbqoff} \X,]j&`I8փ GZ;UztiӋE:yRzQ=wsFW\]1i<ADAAc]BG +CGQԼmf@fM&XT i5&Y&Iaۖ}Cԧ`Vv(čml?ZEM%}=o>XrՖpV!0s-\Av (,2+?5",[ E65wy\*ՄS9{@%ie]oI՟$VlH1/ .@a,#m1tDk6s0T" Zw̒Yl0.Pʘ,k [! 2DAOŢyøR5cpn䜢UoYJv n!qaN;p>Tc\{x3fXvh'u S] oaHF@MDc%|QX@2L%mtE\ø&g0w.ng?3g̰|B;@ <-g.QƤrf`c7vgkj5)KFY Ne<(,-ZӁv,pe,Lv 劒V+P[>[1;chQ& 2[T?s W* #rUlaUr1eleIP#A XsBKj>j+ Rݟggle Vc:oN:JuADj:.tkAߧۯ@ԫT9_U:ZPۦm}UUtlj:P%}OP]@'`E-e~j ^`YF.:-Ul K)]:[{ԭjGN[?۫dΉUǮtsA}3n=&kz>?ԷcڑWZ7_U(}iT_r?Y,J Ӵ-Q:}5e} @z0WL:ADoJMYպtW(w-Z[ (cFlߘPbp(NA6 1\^/&t}(Xk=KzbKSVeuQu8muVq=CFGhi0LNYk5aٙm홙f|=5(H)?P"=H^öUܮX/K?YWMU/QX?3NʽsnIRH/|l,]8*Urqٳ 5vk6m*%4K^+#g2.Yejv$|`ˮ8.뚶]yuY9#ZŲz\ &w$r$k[ :BJ?u-z%+bξ,F!BɸrcŪgNuM >F~QzEl:bzS,ߧ/BX>ig==CA47.{3&=c!B1?zzGzaNCD!a"ꎋH}NE~jd3S zO6O7佱ӪɯYRKW_PZj%Ο[W<-ӤPޱkZ-Οkо꺡gO龏W}QzBz]_Et/뒥mu>meƱ`lc3QHĨE\@=r(Vj}곽p N˾ӥ&Gf=5}bUғJ'>i3Fv5(&/F<=*(Yaq B'r 0m BF,tK,B͝#f>y#{;̰uI3 do7ȝ."Z.H$zӍ]_geޅe6EoLye[^ǫ:SeUNT뺏FYkt;sZrJjDS09refٶRS񎍆iZŠbrxe}._ s:gA$XQ%E}X°8Ff21z9haL!2Z”d1+M`)PũKTeIW`! MXpPxd|.|Ҳjd *u7"V+Y|v䯐eg ݉Kk))v0$9 P'uITAĤVpM>Ia8قbv2k}mC` op͔@9 Ai>eHVŪ;z:5cc;ח-\.s BFֵ8+!:0dMb L̉kKّZ<`G0BPd}bRUU+$jf쉱Z,j:;ZLlEaqS wrAw!tB3y]?Djk 2˖V-+Zm# OAٛ}y'a>4vDCgህo@$j{t$f m[YAPxv*&njV?V*o]4.߃Y~k#s`@_TvkϦ3ΤO5zV E1h&WS YޟAh=ת􎣦:vz9ڹeVWP1>tUth=+믠􋾺?;][7kzWgG7ޜ#97z>zk[&o.'V?Fu?bXGJRXLG֨ꮨ{w-rK:ķ=[ψ1*&WD=6gJ>ڽG=kW=6ulԖ6uQ3D颦&@zӉ`+j2SZuQtWX'Bly=BԲ:uQNzu=_OTR/Xq:L-B؆=3m UX-ޟz]t];dA[׾^Z7رlg3X E )e7b6kaww N0yܛxD֝ aX-=ן!QŵZg>ͦvU-L=wc-==5'Pt 8ӯwJjlzgVԿzx֌`VgL͛?YYlgm_ k'a @ʟrXe(p̧&k1Blv?_iUQ+0!ζ.5@у动v%U.X|h+7G\f  ;vP+^FW¦`ApYXnK`|"ghpV;,V10jmؾP49-k't}Mj[,r]v]gj-# p-s")Іp7ke^eVFr2+eh]<k7۬}eOYL+*lO`&b)e[pZܪ,Q P 1c9RH|abF+VPTY$ɬb]lnA]9 xX*O00e1EvPчvkծ7}uwcKZV R@^,*l)?eR5`K5僸:zQızaoY$?ۈ=f\E*DJ՟{'u[:NgNeŞu5+PIaUb_TgY[_UTGtOI)7z]S*K:{ߦzUSo}G}g[Rln#knl=az{le߫7Aiۘ LJe}4ozUqo#oT%QֵΪ3;U'N P!`#5"tj 54a2^=l6\Jr]YutR酓Y]ڵu.gu}_qxŞPpHMG=^zD]]In>B^ΰFaY98>uJά{pwapƹzwgs3;Mɛ3s73`6fsi 3-8"zT0L'YiS37`{:雥DgW zjkꛠMzONz:ծ,Xk?*Mo*'Q9IQM VWfEXdrlRRXTnl%Mx%]qER˵͌3]2fSJ BfyFdy; d+u*dnpMî,WUgX6u(1\QqU?`A#-df\Eƶ׆9g @ 4u}rȂjsF4 B1x#=Ü; 8e.FNx;L 42:l:=-.@Ba80]4<Τ`/$5V`ߝQ>0]-5˶yBq9'55U`gW o$0ܟ=I\2%je wpDzWe~ i)Y anY`nq *r%!m]@φL:DkQ:[f`_xRźfp`" A JyU%EG-OZj':Ui"%ZOU踜L)P(ӖzT]L7F^6A9;:`ZuEYMEz=cYZm-I Pì6au\XDY$b Zrt} M'}W_83[}V9z:Y?Q/N1 'DCb؈uou8ǶAaαwM/_K u1==O,]guMxQvRV~-闢лv?R^w!c6ܘ3>'7q&b [jغk}}yQI3nMVCV0|nn5b؜LcĄus ekZrʻ1t+ ꋴBe؍eYmprMWvu0f#i՜A**xtH"͹QwVVdkpKFo=l6wrц:yuKVT!ךҰuuUgaw`3YX{v)L<\Lb7ʕ8HEN ggZ>}Euߪԉrz݂ԒSԌ-g[;.X50[EmFNSAFa}<9rU֑*[zݮA\{0/Dnj*A0, ;MnS}1}CMT>6uYYYIZ@55JS`׀Zc?/uM駫zIzu;v6fv(y!- nz{/S5շvfV=Um.O?}qgKO*RNػ4bN3>f@pvZ{ ܌y80"6);f5O(+_YѾ+][Xޏ?"z&e,&70lf]6k D3|wAl05&5fzSh:eKzA[%=@WW\oWJS֨jr;R(We6To% e7R1p*K2 [*"Ŏ;*Mupc4_m$`1$ngngxF 1 69Y]BKVͬf5u! ⲩ$f#H7iec\p8\uYnLKN aqk;*׳Q&4qu$ eXf|fx+ܗqyݕf៟(^K:^_cӲX{3>`b`|̑%>mGsnʿŸ\+OzŬ#LVVʣF8Xdfٖw)80yhʬ؛75ꬶVb (ZSd+VR%c;l 5 j 3)B`X3 IVOgǴʇR5gv'para8>9(, Ѡ"pM 6B61͖!y Yf2׹цSey¯gxP0GCI;J6Kf;4ʗaFfWVMWX8﵍RuK-?8-Q^B}5Y. 9})l=5[GR==Ot}[l es5fH-")T,!S^gY_nX'~Pb0}'HL`sl?VD`Gt3T/UHg\ġ"VzoWgԾc=_߫^BOSiYǶ P aj{`Vr,Z`%*E Y\Ca蘱'i YY[[/LASKW\}/ jzڞ-u/Wѵ ~jfEuQ::Wojתz}]_Ouut]eki~Rg_tއ~.uNG~*d673[BJ>OJ*zoSo:ZPTYYzҟM}W4>bYη׺PML3_)澣/")HVzgCNAzUzW=ow8[k`ȊUjtdde6!//jL,+N%eS4%Y xl!ءŶUb[b}-iku5Vu,yj쩫236cĬVÝCnb;8)FUm ,EBBPLPp'C<,fD>*2+B #aeoE)Uu,U>Bg 49@ɬmTvۻpWH炥1UL^l9, 0LZ6Z7%6`T}X[k+Wf(+;15`O& dH"1&;J; XcEÎ`%pƼn /[[*Klq]7"YeL3/gwe96ȟ ]8s (9dX:(+0f6h#QĪ  Hs`/uRTfڐC3VAT%2]mᶈĮ z@7w:qx'_n=IhSÏ=aB!G Ίu (xh@eVU`RghiٽbeR]7tum0 @'tc8.;^KiMfI=/AchJ,/JUV}"ũVUS}>-WMzz[տ[P뾣vO[eί0od,bk'J P#^@WoL 1ZWw[:l>?u3dݛN U '_gOu}c[331,EzvR[BXAj,bv ĭ=3ԯ~=1z;=C=9-ޞzGU_KwtOm.8OOzl*ͫ -!N6K#;0/H=^F:~گLZJ;oJ "zMi,oJ_K>H*znԯ=>} (}+w<D3LF"TFHF!+r4G1q: QG"%=_~/_OErvvkt`IzHˍpz$nZʍWl0˾H *} Ѣ7~f( l?o?$x̭`3VB3gPCWsէlm؁0+*ul$< IeS 6a@Gr9fgc026a1K :}%Z6{ `V;؊̠)N yp Q'8-5C15c'"3WDE!c| dXvB28&~QP뉪 ,Ŕ&Ded:FZ*jݷab\ A$D&0|6ggnb:>AϷόvEO3+anӅ{B'sU(kNQ%j F ppB׻쎨`l͕㕙9h6W693 V X,a0=ge+ Q[7Tvճ^IB]uXfr e2}Fbmݹb :9ؒ~~YM^)!=5=nG:zEbΣ1C:C1ۻ6G(iCsC LKZL&!í=j+X3?EXVWJq:^zgt~:ulnkI}AmY쵻Dcغk-6~i#]ǰ@!6qbEp{~ݝSdMGmoXS%~W:/:u^,`Q]qc龊:~(fvY].uRu6/QNIK:17Zt\MZodWӪE\ťV`lL30:Z:E?Y@&8>5 WaSqGrH1,e7uE]Mu?t=Xfi5DWzk=U_WoX_zzK}3ի֬n!U#R̸] xXЀca{1@ENWӮ/ҽ[wzz}4TqWzWuAzRŞtJ/.?֞}aWo]X][L?YoQt_|oJFGYK[^:~ҽDu,*06") (X\q@xkU=JjzWŗu '0bWN{v  v5X;)p<16MM Hn|R ŏ"iuF^gvg/Y(V+㗇  _,?1aMC0!.RRЎ6 h&aV*7Eٚ 5eƠ0hJ)8ŎKnp)*[hSN 姈<,h @T1 8p J6;A1+=X5(0;= "\r;d)M Vŀ+i@ڰyHU혂LtM`"FЀRvhu\٠?5f 9MX(UE%@AQU* P-p8 c*uRsc$GBV!A9-4sgmN (WڅN(~۵Z j ִ qvP>_%$޵L)#+Zp}S~תK_gXXG?Q?)zǣרE'I/Y#Ot]Pi\>u4[STpR섈%Ah9 1E}# ۖoO};}s==Y3l-#)јYAWV)\W*]lڟSZ V0f0 `]nj_'$ "ͦVB!,,rY *køB 62v|E &%d,U;A{\s+,00Ő,#TnڢvW@|y@(]`V~s ѸU;MTƱ#؈"!9*Y~S4g0w8Rgee,6.`5pjmb) +cY/®b hg>rO+YmTf~v3`l]$Lj2C; ª(|ܑB  aY-u'A:nЦD/03Eh:b1\C V3jW%2դ-3r˪w9 OH3U~fU#`[=:Tبݽ(=/IuWyaU}/!`ꗷ2v 1ѻJ=g_VzzWoԽJ×}eo]S[2 F*UĢQZj:,j!YoN~۩og+Ǧz_GBM7(z'Uu$y̻ehr㘝9h b=#^:ghq'I*5gWRGe;Γ,I2ن+^cff鶀C l&=ǰWFJSl ΢GW7)AM`#:FTjKo%zϵ"̵o辫tIsFɗ [Vvk '!bYZ@][}Az=?IoKGWߧ@龸'hWINo[gB_[,>OQDW#}kSMlsֺ_ZB_@ޝ/_Pu+VrVGgSO.~ށEJkjR7V}[ QMp3EyϪvORO}G[5V`9gM}oY'tUa]N`]6zbNE[DVGUTTzR)x!N,c?g -+{*!f1:e]E",ĵs%b,WZQA#.GT>fB4l3DFi\0([R祺zwy7w~[vWv >xBʐlk VF' NLDa}3}E[}-_οN3?oX'ȟU>uM{l>argX7_5]'JFLD#p[/G4Ku[K}gi1feR~(fĤ,Cd{Bƽ|wx"EFyWI!`%JkxQ_MEghK$:{/+h ]ns홙홟lΉp 65'niiĪR㈿>ooYIA9* ݖt}USOT4'=NCZ[oO Ei=֕%eւi`xpd;d>WUEu0X V-Բ]3бYQK(B#\غK[0y7Xa}C: :z"zV*֩K}Qq]lVn,S++&On h`^UJhL>O̭ڊY?ɪ ^[l!53֐YH[Fg]wMY Jd 5@,DƮ<9zb.Y)X:qa8"Ǭ=Ojfw"6 RU,p~q jU5P}˅%asZ $Ddc`CO&H}SX3!hG5j9_,lvf( moQ`̈́%ZU+5`u'lW 1 ]\P+aV_6M2LIð^5k l1RP(pK.+aYY[NUd /L4ͱɵTkhrx2Jd3e @ [iC(H|۲*9,Pf`\,º X qW&Eϴ!)CUKYZ-Ԡ9!ԡDI<et1="8Hb3,n8`r2ì0&6B#4L`@ GR2UKŭVl.13-6y}Sfo ~G :赳Z8X^Yrk٧(wЉKJH{=.UuNV HM&ԺEjLsSMe(6`[ac33333333333{u KFؘLL6M7,Z^f#TGt|]= f f MjEuuj_OuA'Ѻ觧OSzG>z:fa3c3360dͱ6& & db݉f^n 3pbm(VlC#; @f9 >=ɴiyܛd.0E0|6r :l5\/WV9mD e>z3n]oACjeGG񈽻 Gr5(䶤rpVd4 pqYK8 rN%m2v/řLږ9#M?TNؘڿ"-]AYgPUYiAk #zys+oYUY?%nxʹt|bm6M;ӳB R@SJ+jtԁ5^)[bö_Nb^ xc(ЙR;m2: bTDJһjkEU(g!^ÊWS|(PCc}`>AO.U0:Z\`1r䩲k 婭LrfF-d w`>Lk+1[XkM0 u R!0Kw fB!Lcx's#dJC2esaY՘Y@Yx1+Vb|=;4Ja/EyabDA$S22tbX:sB! yݸ.{RjwB;w;Es.ףE-mkXјG,~vo;DbW<5˕c^]OaTJb*Un#^,[JQШHXOMD=[a7:87O%Uɥ/CYw6Mfff33im6[\C'Vu2)zdOJYӵQ} ș3D;+ҧS"ΣSrXgntK]GO7C- ^њ1fff`o|Lwqoac2 6N#Y–|㸛x[.BI֝3fH&f3<䉴m7XrDX>'L7>;*a5v!$Ϛ6rUY,s@:-b `1X)P)ehD<ðԻ rX呗caQ3SgnZwVGֲ^Â!zdyB3 6laU;55cFy5 \UZ3=PV43<z^ 8X'% #*v';d4xAvvjP≠cN|?zX3e|-8UaVb!2uܗZy?փ[ jbPf]̳d(X"#+ b<̯+Ft$@3 D7gcX\Gf۩%0Dgz]d, J6%`^wq͖Ĵ,Z;d>goLۈH{|END {#*逘 Uӄ gP-* FbSީ:?:'I¯JVjSG֎ȪդqGSNٰ`4)3c2fyn&i_00>XjY۰{)^Kk1^WQE`5Bk=K8TOSS%5cF-)J뵗 GRەfhL&g>ٙL6 o370یwofVM 3ܛflf0qm6ͣEÜiYբY)2vyrřQk8 j++[T>0Hډ+89(vC8ȱH52ut]; Ls<`RU)-=t afq,T\Y/xaq,~'fՠdjU.i\qGB&H; Zva#\&Qז;+5ځ ΍PYCD XiӀ[w`n<| <C]{3 r˦&ō]u$[-ovUfmH$UuL\6T[(hF!p:{U* *m;Ms cꕝqt.HNu*u @&UBΌ@-,KivwVrv|Z6 Be`8]XX*ՏZkAeH䝴: dչ1#L{#avۓ^T2=(,SWFt*V  ľ3R DN+khU1ꬖSc7[:n:3E7qNZ^g%J1]BΪ5fd8[xF^n1g Ťa{c1,kb=, %auH{ZW@'Kz?ԔЏe5F`.a2unnfr+M& ۝۝۝ڝ8)J:e6+<XΏϥv":cdnUos+l3O/g&LF5سॱ,- gg33iCs7mff`3i78ۂп% 6fs333336Mib39u$-ҽ! `}cmN[`zޔp5.5UΓjA F#,YUjp,3l~`XYY%Cɫ#l1la"3!y,Ǖ, Õv׀*ŋ_c.˲ E 6=9bL@4*%YNo*WlGiCٌQYe!zʳsС}3 `)S_Ă͞!sJ zGMu"2"[V +]m_x\41U Jl{T{lmbta:[Y ƠyM,">Xa X0UBcl^Ema#PUQ] dVv7Vq^`o;88, 8pa+Ð2ڬR C'2msM;l &JM@%C૆p<@ 2NN]I<V+gZpɯ򣣱:MK ЄИ**u 0G0F7t[OHE3%i+O#ֽUOYߪt >oX:RZeN4dkDL !s#u0Yū(0{@s7]9hψ5U:]ulU 짧ZS=^G:%}=u/Q/Nz_]c'::_W~I~]l4:˫WS4({ؘYfI۝iR Vam+eUGDN͆ ]KY(eґ8ϰETWIu9>ڶ՜rD"+Й陙s3336Ldͦffx-is333q홙s`A{̜DS+C YyELb]}+#Yg֜4F˱7. df1Gd8D +s*rRt-?t |5MRP>qu5ы9q?Yq>; trKj !BQX9F°Y]\)K fX@v:a`P \Kk7QpWifA슶!Ttkx_MrEG DP 9֑nڏC22BaJkfR5b*c:}coZ> SS(\0ԩ9Ll k3!„K X#p{T:m4QM϶gǾ}&`϶ٙgfffdffg33>ٙb@''L,]q1ԑ`ܙOU6a 5j GHT1  ڄ!lnXO ?قjFgvǟ*&pAX"E8x[CUU^Y 9- &p!!^۬ Gu!4f ݾNJX`K;mftf•6+g^e=~'m#}Q[u;Tˆ8WEf+63kfO +LXQZ1L3|ff, ,(݇"qiiM5 a+k͡ P1^R E3&"+fULzkzt -v9G꺞7ˏUdnI_W?z`Y`H@[V)zTZL?5DٙϾfffffalff>ff}33홟|L\@  W[ ]pfy,LdOs\d^ӷʳ<ɻ:4޵Wi ;hĩZ!: lb]JUrMcnŶUAR/9qf"3nRb_ 6 BsZ?s Yp w\kP ``FHUr 6$)iV,Xq@ >@N`diHge/ ʪÆ[OL pU4]s`ث>|~ݳɛUa"[Ϸd3x'.ۘO ]c s ]1f32yksYqS[\$|X"Z" Eh69PqtNkZ9;Ÿ=<(`XJjSv5[`hT-YR6lM*gmd;"XV0-@gBYq5}G~ty_KCOnt9Ƣ +UҬWVt}%}2s`.L $gEGF>ީD_TKm^Hk8b gϺTXVc]iLU{bQwQ텝OX{ʢPZ=/C_Yt+޹ewQe, 5q5NNNڝڝj3;s;s;s pgnvnvjvimimL*<Ҹ=ջ[,މuzOWR࿷+}MioӔQCwK88 f|70nKhuZC'JaCf&&&&&&&?rb`x줨VehV#&Tk"-ee- fkm%*VڒC2.l%N[\&U jRL`,Rk\%lɌ [vRX h-^rrbT. a .lO [q[ii pL +Eݤ:K+oe LUu&T>X`H[&11u ʵE flkYwl KB,f@J!fb*8ɭ8S*,5P#!T"ZVd\ (fc!IK#X!Q%ϔ (P%!hY5*xf}?]pj} zU_Mz>ttޟN'GQVη2ηT~hyھv^WdzRLa|N y_JLOKz:RUW,V#NaG?S fǰX+&8hZ3ϲ9N"JzrN1:S#U'pJ[hA鞕%=C^^gffUk493ctFHTNNNNNN;S;S;S;;3gbvgnvni>&HPi6}E5AwT"}ido)S=-Uʽuzp0zP}ER=cꧫ׷S)(g_HhԫSdsȜ{|11111퉉|L{bbbbbcؘǶ=퉉LLLLLLLL@ ,Qξܘگ'ɀA><336`kam[UNlV+P"g 2+?'qo+O?]==7W}:ԡJ*m7ӔY!.l.Ng/Ӱot _ӕޞ鞂oL[ߧo ?I;2zwDM=B%]?ie=]=M]ꈗ6Xu}L~LM>殑ϧU.uP/t;Uқ4<5G%Jw^u~RNmyw-u;G,~Ͼ', 36aijvzl uX:uzztЂ,ޭzoNN6*St%Q龛titBWW+g&S;;3;bL#u0S-/ =_S m홲y)3d'z]=F#;S;S;fvaL~i:Kznv5égQTx]04|@bwչ}*ʺ{|Bp AcؘǶ&&=lLL{bbbbcLLLL{bbcY*c[I3 @l1Q`XXɮ%OoZE/tҶ7  =Öe' fk)-`XL5r ]J"+# !O5]]WT|K5xݙkONW#1"*eF_({F9>Q,U%-95o\2kFʮA[jУb.2;zT!=>@*uQU"pC;Xe0joe}IMT_nxUj) @ee`*>"{(=YݴD1S6OmYuyYRKXG8 ;5͍Oޯ_̢TV#VmV3uUSM)u O0B+&GOkz`54ˡa몖z'Kz̈́U3h^֏gQnb;VEOOe=.i}6IgzwM:*͟Pu:Rѕs_OeƎJ>MiXJ*IUF DWtNu>_wClX׻L{ffd -Ua[_l@$ 62|J,C:ȝ-KӤ>nhu,klyls52Vȝ P>c]P<LL Lba0fjkS.zz00u+]%&zEtUӟ׳Gb1Dz_?Ct wu8%ΎKsvPTĝ (?KE aj`N&7wjڧvݮ9I0& զ!fRWP"SR+:g;AB4z+^e/k[tʭ6?S.[uK]Z_C" S)0D@=k=@f#72ω^p&Ƕ&&&&&bbcLMf&&&bbk51!9FpmP9D&0!tSXXVPeTԨ֭ [,Uejg;uzŞ'RZgT$$t؀^?k+Q;_-b_wEjїvl@lJf^ ';]؝"*kEapKK`@Uf4]9<Ṍr,Q V*e7) av*u!e鵊l,̄K,bȔن4+*-c.YA`sC kc̶O#8R $Wf,Crpqad|µNiYjV`F1o#|+.=wXf YNyW:ӺzOC'EWh;5]EcwQi:#`oG_u%BUT!,4a=\Cu;0RNkI]4_JhtF'F7tsG@~l3S?FN?ndKWb#DB?z[CVc)ZFY&[za t,ED` )аްvSZCޚW,Yo/yo_d~cdǺǛ l~F'>LAYD TT3"a 9tok?~&fgܘZVǵhXͨEE|4nRzzimp+U"Վ,Dn~,"¡{%];0هVzҾ꾛u_SZ>/H>H[0i09 ٘ZlM'y0RJz?UFLN toGA~Wu.h{`L 5(X(fJNzRjF~E.m @T#}}OIe ~m9c._Zaoz9Ϲ|~=0&j&ؘ3k11115xf& 1 N dU60x CEU _Eo%0u`@FUQg- Fuj'B_-l`@)yiɍGI |'aܰYSԾL!5?kO9Y*U =a@IvvjϚ2C-RCEUdr+ٛ.r_z[ ,mwu:^tgGh,lIrᑓ0lö/=gI vKBVq"bqTWA >0q&8}Ek[4>3a Ge&P+u.gm]khc@>O.N@H'nf*eXu7jsܡ:BJ=*ԃV7_k`HvCQE:90b-6Eܟ]nhѩ }=T?Ocm,a1?4A^ X>5d'D∿[>}kXf>zv^GOK]YgtVA$5/WO#}M\ 녣zFkOSu+ٷLaȀ8>=gs3332'>>}`ǷǾGL D&gۘ!q>'-$lrW,ϥ]cTBDTQl(k)T@=~J)ɱ?%Qt `ʜ\"f;DPVa [Hi%yÔWcʺV+k RI!u Ur;\9Y|LrUY$k8'T)!Lr e ROA,r_ ;9Xc<DَԒPj]B캍AEo^AUMb0duRl/ ٘*0)f lB+S d\ eUaZ@_YcnYZr3D6bʰb 7,Ѻna z7HaYDrT@V%i:EWtt7:ިTɽ>TGSј@ 7Ggt}8:M+攁PQ{ ?d;w L7w/v޺zܻ]3t_5aD7EiaHzcXѬA;grL-6Z]VOOXLL[բwM&f8oRcΤ B떺UnNBUe(LIz{sR-Ex *Nۨ:*o~^_ ~zgu,zngq29fbgΠ ~#a,؅v˥RG^Y:8fz'A&#bu}PudundX xl[$E^}/%zwwI]?Rޣ}1}w6Quӣ5Uc_]_:=oкGbB`Ft]r? ?SM>ߠ}홙g 18a0L)ؕnc>}퉩3|æg&8jh=\wG*C^ Vel)( @iVu;,\1LEprPk%0ܪIvKf/+pR0ȁ!X:Y0[\`-8$ꉪجϏRv|-S]ڨC,#ia&)<\rfq.">w3m,A+P 6fe9eS_pck8hTwQ6g܃pEWɁQݿeeh;T` Pct`NC@{AŅj bVZsUYj«` ]v0d-Vo,P"86+w]̶݃v/::YTgZo'3>&`3+1Fb/(b*w@ZZPf:u ?Ta!l'WCN;w 9vU霵'HL(z}Bu'gmOG]8_a?Žخ?NMG] 8eB k:mIC2mXmC{CtCiN'jHv҂ lLPU4nkfff */ήQS-#=^F0\ Yޅ5NuE}Y'uO_oT nmg' fKffZu<#Z"X!d3-"# Hkud<[:O)sz;i_syu-+_Sx,"-0<܈'RDNz_6/ӏF~_u~RSRϧO#O=;_XI=_tK޳UZ\4ۥ%V?-ῠ86{;;}}4<;N. w|;;;;wwb"w;͞3zwxr}DǷ8ۓ~~r~ elSj@[hƩWV@S5l$.*u`LxFF 63H n[o,jIbԫL9̨RΠy`̌Zcg| 5M! Zw=0m;`@ 6Ф}0̦{9Աz7dL{+骑jEE_||K`&ͬ1\OՀUET}.[SwCqպFHOFսgꏣSsugyOǥO?v"Me0;gs rNўL͌Nmiw OՈ:h1:Xֆ;b'XV! [W ]>휆b W=V-eWGeUXQGKo=U;wr FS{ \%L@qlff}qfff3imff"~&b~{a93Jd(X\`ȶ`Z+EVl1Ħ0e y&rZeci5Hdj]׮zc/D^Mu2QU̶Yhfc7|ͦiffm R'SOMNlY;N퓸f4ə>ؘfYl^+dSuna{k5{bgOڠN93H,WND2oZw|ϊ~[зTG!k#B &Tu+JGr nНW\jǪ/M]brĞPflW)ޕٽZ%^۟0W^?\WZ;A#ng&m6;``qYG^*kPaQC̲_wz}7ttK,U螩wu uOt>֯Y=WGQ^՞cgMĩ}r݃NXcٯ>a30!gn}?G'~e>٘8~}8LE2MY-3QX] 1uJ] ؾk^@W B@ar1@$nR`qË*(GbPtV<(օaqdjA;0d9MfYjX`Xʄʶv^CVjՎU *фg86rxO ]+j$8Vֽ,UUgve} 83*s!SKhdž05b )`ɲټo+!%UԌs^_}1Ve$]͎mT9 T OMvWCY& [B;sR'8Lh6# 3DRK|DB1X]z_Wuv`u [%!" ,I_^}Yt~U K'a&#Z:L۞pp&'>fYk5fYk58{g33331R zgXD1}?#7YkB_||}ioVKmST=??oL圐Zi~"mItW%u1V=!*K1Ԟԫ WofUwCPՍ͐ ,t"ln赺h+<(nW~OS(+: TcSM4(?Ǩm7z?ԧD^'m; l2:n GB(~LDVޑ?W?Vt?\7])D.~toIQٺQşQњv/\oϓgNq߹39?>11>ٟg?N={(\f,l츬שZlkb/+ R&J`+JXf+P~ 5j L^:\Y0}Hd[K8ӓ1cC[4oR!\W}% 1''C9#=Yvnqn \LhC2`#T8PvAſTFVl=^T;-ډᗳ+\=OX[d} иaɖQ_AjcY\:= f#{FLm2F&Y`Jf\$[5h^iB*pNc֬9WVKU`z;;gPmy̆>-rkXdQ;A9`pIagE5}oRʮ0@TD Γzzr>Iel8``l@<߅| jLbgF dvh:hL0bJ#3333hWV~tI7 G.y1F'ד˭kgӵdY;N͂aP`=E t7p0? ӒZн]3b6򜃜=t{=u&uoJ/O`uoT麲Dlo*:z}UW'/W/P Sf86JQ'W*X \%LoCgQY.=W޷L}Sb:}UbWꎴ܏}Q4_}42=v_^h~E}ű7n7"L ٧))abBK!HE)j[RzDfY%*'fE|=DӜ`8eŒ!F>|~}g>Ͽ31?_> {|OyǷ8ejK"T.vkK̀PW d_ncB%Ku6UM- m9h5{| aZiΪ! \0 wv  <krL,V6Vp0͸m6kCF|ce%!` s0Hh9@,X8c+.%ʑa2L\p⛖6T` 5$>,nC*{qUq2©8C2qfCʆ&])_qHڶԏ&2sX6#`oC*͊v*ӼEl-XcBNpl@/FG<} ݴFhĐ pޏު5\WOek}7jFΈ+!6 hpaA(,a0G>:0b ǷBn&i> /M{z)?Nz`,V#C3Bvvvk ]6CoIihzEu&SDE-놻⌒Q孃3}S bcۈ9{~n>'3`3{cC1 ۜg3.A6.V7%.*Yu rH6(LJbߡV^ߕk+ƛrr (++jt ^^hP )(NHӄ*mBc7 (kSȣJ+rYm5 ueV(?roK##Kt U!Ք.#ELKAZ CM 6fc PUbvsL\3|2 N,)T !H`&An+L*q0#`X(J2 g$pQE fd1vhru *(e`-znQrMGGEe5 l̸.3X"uT*سҺz);ut,mOK{6=e]WM=m|43l@4ь4iԜۙg &lfilm6M^W=2E騮xna0N}1F=36+,i}8LͦfLϷU^=!{d~P k Pr;utΨmg=M+v~_N,\jOdOKWGKB'U3u>i(uyU7[iuI_PXm[ӫԘH| C=5-WtO/}/Q^}G}7O^ޥou-p'14B€U@ T$ `&0e}M VΧTuOGZvȚ" ]t[c `)VtRC z2 ^z :GQO^VEEX9*xOψ==0|3`G0f3?S`c'vט}  Ufwadܱ,4im]jѵ5ckqs+)5P i4tz2mHb. ė%`¶TkZkS.`QkP_,U 6pN\`*C(g2ɟIL1` Wi&6 @KG` l0H_muZ %E`U6*gbW_G:SYA'ZԀ"+:UWULƱ4Y+ )ȸ#J^xV2pFl#V8~[3 mj-@de6v+<+^_n "+UJ!5*Q*u")t0 !O0PA Qp &AU&0-/e,35+20&ɝot0 $7$.1Lmi.U .4 ^on—&Y#Tq0Y棇VCm?&Ψ831]Z"\X3*`ɟ5bŮ 5#^~!?QO>e2KoPe2VMiꊊo\+ #]NS}=~R}-emFpeuʒ8Fgϸ:&qsnqϾ=g|9^?g3|a\Lc3CwՌm3ިT60Jo1s59? ZGk쮛,[Ib`v1Q:wiX^ xGbFBXbIc!/adڳԬTuplQGw[j9!N՝,WbM?%! >$ewAϿ?3b~=ϸgu(j>=T5azw.LXXw,c4[V\CLj||9u sc-eGCd.VVb́[ 2 ;gn@#xq?ucb0mZpC+65;LBC_Mr|U eШMm1GҢxו:}#lwWV9XǙRpe<,.#'$v r*v0k+KQ06|tJ|LV )9O CM{ˀWWt$ g%*"LeLJ2#®5msn{+ƿ:FWTM%::iƧl_Ajz>ԯ:{4V/ӛeLRlpm6f [T"m3-øE`|O%@kFff333306M$iOUQ+WVeh:333333iMffffg>̩ٙwzug}=3*D?lMq'R){: MB,rgK[/EU WT5nE闎TM:Ycz6ذ9Ly^k/z>BGt~uUls[= ߩ=g~z\,'EY3k%^+MfoG֯}Σ/D#U`UO[M_PtؗQT_S95E<麀a^=?%\jD:׫t=Mt=2u,>2fgOA9[~x0lx>s?Ӊ`Py W]Evx-z%\9!>jPmAiÓ+`Xpj@SuTm:-,ҲЪWb (o5Ukk FAZ@mgS桵3f$\l h1P],t}Ve;\ P畦,Q_t_6WݤKP-M <_UWj15pAuu ٙ61ru#:8@ E >HWH*.wn[ )ex~ )Eף2kIiqXi#f;+q3qpJ ")(,L5V2[^:2],Šk(= w]SWgѿROȞVbQGۭ+Gt=wtU}OAs]/UwN; @L¨c=='ApzN\_OLnȜOKGlVA N=O'>ߩ?I_J=g>\{&0ZUX|Aj%9N<c2xNC7UT  ,5_$q]'r;6U&g ظٙجs,;an~6=v+d!pcj#6ʒ喱Jkiued ů:YҬpČ5nʺZQYʾl9F (rcli9!:I-n.K~l E2`@0w [;m@$SPFBXR !䁬UV_i1ǒ\_fa5&X9 a5e܍_VتʞKeSf;6YV"3=CGWgS[uﶫz]Vt_`4Gԫm ͚o73c63lMg[02꼘ɛLʬdZ[E`؄C -93S53T3zYqzKgWGJo3wyhӴgjvjvv\HS&lfyMffiۣoӨ9f bCRRtFMMX[H*R>ޢأNc3uTNgS(ɩvbz\nu):N0};հoG)z]uvt-R'z@(>JΧջΥZw @>b2xfSbg}\!t;fOu-b.o.ߞ K'KҴ<~gO=bzKBOHWMtwMz~Nکޖ:y]5^u!D sVhj0ƥqm`L]ӷIb?Q{Ktc9Z|RdB'Lk8>0̑ϰ{|~O'3 sChJDg0/n&kNg#vC@3M[uGlVbl+ TCvۈ 4V:?YB' ڳ@k{,8egQ*[+{& ,&ruKo%]A˨"(v* B|N@,Ztش$E.,<M!VUhw-U D dl3 ΎQlT$ɳ #3xEg`0##x͎x-6^aQ.dq]0mưpMk%8BnCV%,Uia/nkdpbv(-x(%0BYRen_gOwKj/lΧ^GT[wh%ͽfm홙Fu]>|A=ǽC:.^"blfd,5=FhcXVuVb!E^lU%/Rn;ȓ> AK4]Q5fvnvjvvl3lfym(FKe) &`0`bR |D[Ԣ@KWrLS)lb GAPԊNZVȟQ(izڶiMfLȰŰ({ ak;a;kcc7r^Ḙl؋bٮq,0>hr߰C7b}QPU꿧f_}3ӫgo@M@5"lVպkYNs=;9l(QWo}8NI-Na'0||aǶ?}}\̙|m1U ]+:(OmS+*Ń Yg*yV;d2<M[C5Ѳ ݫ0w`e *kPE̯ 69eqO$ pp<7\Q .<X 2be+!L&em*/P3Z Ε!R˦6eUR*'Zޕ?kiyܛlDXf@ffq:{mw_/Tv2̯3aH%#Mg:~l_&^ 140۝{+dF0՘ޝK3zMF?Ck5&Yi4CTњ,zCc!| "}a_Gkc{0G =nWZKPgI@IoVr̪6WPuPwE[=?l=W_o3UuG$ܭ燬wzS>ɝ3 ;P;;3;s!v擶#t4KF7FvhN4Sk53S1;k;`wW6}ɮSBnuCCya g<1>>gې' ~=N}l j@<Pv# Z{`(e3LYel2Pn(s*y׸pEk76|6# c.c k«\σ +r3}/&!'k @3T{^8-坦Ĝ.'&ƉQAg==ēmD},B~b _.xvnG/hPbMj##"V{k+`SR˕ miI# 牅52]mYFA$fldž pxKuNFўa6Q;<`Z+>IKFlB0YU^[*.H|&Us B˄+/ ӺelTS>UCI9z$JS'//Co?䏨zvBVa>+f|bk"Ey{g/<ψ=ې>{Pw-ljeb3l>[VيuwKj't+oO%w-]'~$} W~?O-uG?$CVbyݸAޫ>?$!T}1ib;<6I3SNmJ(Oa3Q'16}7 WGzz8}}O}=|Չz?PeO+zA+1*Q+gpmix=cnu N*'KM>:E31?7c؈A3333333$Lf6LؙͦMfffm6"m36iXnR0lMl7s,8$Lͦffi#91DQ3O3}>G?||L3WeU䮘8X5p2̋Po$ +ҰVR :Dm] tBF90O#3:!(d4Q;YA+&kZՎ4ن}Qrq d &v# kg&g" Mm 1@rFdL2kN'qJHWBFl Ú{vo )´؈uUQu=ĠR]k\dΑ:Z6O&ůitтx5H5fWvx÷)K&p9U` H\`rJr.`ۊp4K4j⺃Pl6G*c/dݷF\rsS3T<&=8Mf9:lf=>կr$*RnF>f6&l <Ϗq`Й6 1'ĠgQTt{wm}Jt] U-{zW~JM>U =*PN]j3NI|BwVk{pآeOS0f!j&BIi4M է8UiN&i50LA0tzmvEuiq/>Zߧc^z;Nl٩*. W>WknZ^Z6>f&!Dffffffffm363bfffm3fi3n2`i3hZfmZm6Lͦi&"8͍?Y~rS~g|rf}~ J1|UrXv ' 8)e+3uP@Rj=U!ŌQNJN?V`]]BUCjuL)"ycځ;C*kZ8y;:p@,IJdXՉQ; $m:8r5m\$0b'dn'LBWӰ#uV*n^Dke, Ɍ Ƅ9 0RmiLs.r33s{|#f Keu{zM)gXC]#;R}n zwގ=kGzGK[oYֽu=?7]oǽ3Xk )lXV~KMYYnR"\Z߯=ީ1fY)4M&IW_ZSC P;3gjvjvDq6#eT?']LޞPtu=wG9(eYm2 BA1 Jz=K'8OaLLLMfYbk15}mZm3333333'9?x=3q9 Ͻo9@"+xg ) b ІWSJr^^D6j.ѡ́egfgeel(+`ϝ3nF vf$maq WD@@&|-wu*+"Yƛm;hUveؘ`Y A\U2s>&cuRϢ}N%׉o=b=7KVqt٧urk11143\DoWzlچڝzynYfu^nv5T5Kh5eH0{)y0+8n{/?Gz+=f3+hS5k5I!f&M}111115bbk0ql k15Mf&MfYk5 Hq?"ی۟l{s}93퉉Ƿ?nOǾ9b~q8ϰ0e^eC|TAIբaZV]u3HHoa샷\dEj̀AHiMiF( ED׮Ae*O&RU&)86a{Dڵs*tP!*v+k&$b\#kSx0c>b`+XFwYKYs_W8:qgZ>Mmt]yV힧k:W[. }6OH{䩼kXPv}R/.>lZKz~tG[^|pGVcԒSoFb~k~鶫?[I:N^xE#]QMD[,U}F-<fq;3,V\voNm~p:v}%$=u5L> b#WʃH޺4D!fq9`q#؏o'&a`LB311϶LLLLMfbbbk5¸k5fQs1$>؀s>ؘs1113Y&&lL{spDLL=ӌp'?b#y+& t`rPV+c1*1denE @P3l7GcNL UU͌lG90Uj` ή1G35R6G~ Zĕ1=ƠoPz 8%[L*V+Ex ϷǵOVV'kP`cdK:e U^j~Y$J^tuRTt*,##4tbi; fB,3W\>`?$ u:raJuzOYqGYI?¤/b- zשҴ}]a_WQ{>ޥ WS:}_RSS}'r#n:LLJ5YWOzWўIy%?%~j.=2P7tq*AG0z]=)1b_dL̃6 Ϸ[B|h+[5eU@cguu,,kTTmq8 [jH\M&5 }!Fd^8R[|lr`垴$d!S,1R3# gl/iMibOPgT"N%-NC OXlTԿ}!-s!PsLáC>?ʓ/R/ΣŽγENAc{/Xw0A+ӦjOgP ,Ws{I ،g1+اH(^ EkE~:ݒOG_έAzYҎ.?U%kO]3nCtBWL)=]U@ k}R;zuէ}҄꾛5oC5Mq/Rx*X۝4Ck[TGuk:O G~]C#!Z~V:KVs[5oflD݈0<ݦgpNNNNgg|;;wL͡ 7"~"}3c=fq2&GaD{C/=>׌ld{ca+)6 ʞ+P|  qF;88ŭc`,H2a 4eU_kvf\Ebt*82XU~+ ;jV RDkeN @1}Ee2 7Q[Kp;d`Ԍ& 5cUgvMv ڋS X*H}-k71,i@piilB`g%Ww@# ubXj,- 0W;kb D2|pͅxm~&9g2J:sƪŧjA^ʠ<)\Vc26P^N#nHSU{4Srpܰ+ZB+foi)(eh^Q\LG[Gg̹%moiVN=?T=Wous=< T G+<^YTTW`8t5{&|=ꕪ|+I[M*l_35.}Z0v0̙=?='tWtwX ~Mw#SUM+SjRbP`;3u6SSn˳tFOX 3/kwgid=Ku~KWwWS:l"<}Go}7z]Qu>K3omOIbF}?]]2Zv?33332&fOiAcNކ.\.{;Lͦ@; &+6o6m ; 3ƙ>dC?_oׁ>})^ ZyxS8dN W(.øDfVf 9̭OX%rXW 5;lA?|7U$Y3,$#5a37\%΄+"ݝ\ 9^u ں#+j;g_z Zl);m!gWmkb`tb:׃ >QHj @Fʧج."mެm\Xيɱ&U ̂pO]F/L;2=Nɂ0Yg JbhH]B;l# gE[M@ `$XRpU_&,,brZ]6tvLX2 F[(jX5wnu2`%e85MԿPζ)Θ󘍂,W\^V>2OOʶ԰|[vk z鮾 ک}Ot:LR>z= N nWt5!w]ZJBC˫$V {jw5K/ǫՖON0NT;??TARzQYW&,lEڞ=I[GTc(Kl[ 1%=Kt}WGgkWIܕzu :b>FO_:CzygN7J n#"]=ߧzS,t: uKK^;\k:zlRrWc~OWdS;/\[b_Qm'C)+ĹKAN[ȕs~=;fK韨׫r}Y2=?F}aO}'\1]O/U} 5q[rwc|j*cǷB` D<20&;bhjv;dMaa ۙ>XM&kL?gsf}S3 cfOq8{c1>}ٜN}?3bABb!d2)HYVg%Fư~+.!n-cg;Vg6̰fUy%*A>`rĜ g*.Jy6pRUp-ք{tus Ԯ R S81^6XXtֽWĜ苘vQ\]ag14,Ą>+y w r6ڒ-qۚ cpPᰰ(5Y6ohjxֱ8-pVj:kYB1r4 q;wCS^QU1?.!uUY1^3ϵ 5iKgQbmϦOl=aק1?5b.b .ڿP!xo}8G%GWzt~G}zrޡtvzw=ufKQޘtLzYzf?[L޽GSE?M2*g==f U/R?'V z7]z[y]uCv控PTΉ}ʍ'RD^'3l bS)336,paY=Z,MGQw]wA_U:O=ӭN=7dS[ډR%l&&'Us=dE"|q?yoc9=pN393L{3Ásq>gǿǿǶ c~b~9330gʪv)(Ϯr3GQ\0nlaG@śS؁Z+bp 49#+$n&Nס걶J[glBNWPʣ\̶pl,ik d>a">eJm: xFf+#lFL\LllI˃r6n،9Ԗ Y"r@H#kfnD$g̊BNhXݦj(qaUgR٣pV 6jRG`aK`>luWh#d`e~eS^Xe&N2kSyBX>x FeS٬yh:ٛ@KSX9;##VZx/j`ncJWf86aLߞ)u@ ([E1`9t-Es,k%83Wede3b 3Lk9Y]d֚Ιy俧sn>1RM`@*Pn}M]'QS=G[=~kzz,h%A7::NQzu}~:/OQD)_uz5ygOSK#c57k!14r;W$bU}V*:V֓hB.鞝.?MrAj;K)a:[^04[v%`nG}ai=᪣o>R\ާt=KS.PMf0jqawN=kǿaa>aǷ׏n@0=>'Ϸ<9r}s1>= ǰO9gA϶a~9L "?0}Ƕ}G=srʱR%1p1^NLev>@9j\%3 #jT-R%mlfЫvR;F@r;+ī-Fi4@3Mk=uF #"E73])O+!C4mR\b15g`Y Svvk,Y:ڵT M"d]gÃ`\=݁ +ys"9#0Q6;1M;*gH< YPH|)Ƽ T1 xTXtQ˧8, e Ac)bf,61UUe( ppgM v_#`»C|aȌ3#dh"Tc)[c!E:γֶ.[:ΉKr`EvH. CV=`ƬfUCgYSJ (U)__aQ^EBzu>uVu#Yҟ0-ΤíW3g[>Gzϥun7:KӺGϥ}Am _YwJޡ3) Ѭc; n* bֻ[ ڢ7\Ջ=_/A?ΆFbgҝ=(O}G}>Ҷʉ+s`;E.S7Y]Y^&' 2D _OQ]ޗzGzeޟ꽫:MN_LLPW,O|?0x3>ܘ2=Ϸ>0q=XO93:gG*ąDL"'WVy uF`j g0X8n֒eG[pLpr49ܓ$bmpB,Bg8G,K|m[hD#Dͭᰁ& Wb+X'STdV`Ŵ,m}2i[C*`j2%ˮ*eʘ3<vٵ dLW$ aw5zpߋ꡼'`b"} L#[7'ۭ M5;,՜i]i}U ˷UZ|&50³,á.L0l(& MJt^S^۾̮rY}mGP cW,@2GJSX-OKh΃)3AZV@ON޵?zXh2nc:fH͵].zpZr}Hu-|M T,~>W^V?>K-ޕ"vB7ܐ#\L١h^o wLܛ`x8Y7N?j>[/zg/StGMTꭊޮiN[$GlCe!z/Cк˺:'0dN"mJzCO\ ,]a\8uTm+}9oSzE7]]==Y@շ:7tUӐ[ _o=O϶'|{'0CmNA}GLA~s19LǷϙO3ǿlG~!{p=>=g3gۜ߉3<tGR֧Ye7! }CuԲ <&RCŒJJ|2F%X.޻ n?X+?! piWfi^*f)ʕV$J&:b5jlɘUr5xVl!•ujv`$CWu.clNap!`R܍X؀9,\l՜ۄ`jϼ-nfu#* A::l7#XYS\k.+;f/+bՇe635ձsLT"'+xwFT6+d1;۳B/kum{.lLˀ| aA[ф!q6GQC Y8iIR eˁ0fT }Yf;tcd~t=OŒXg[bXǦɼnXWXAYXTk,"~+33}CA/U9ijx[KSz1zC'gήOֺFaugzj X[/;fh lX`ųnBBwrl(F An[hTzWu ^ 1\Ex TwlWmw *dO Г/:.O}*[/S* OJJXVw($Uo 80 {338ϟl{c0s>fO0A3x {}`aoq?OϾ}ߌ߱ۏ|o&gsɜNsǷ9?qs͖P4*(WF Bً %=Lי@K ^vS; f:jZMTmܵ!m#K[v/ZYkMƤS,uMֻk[mQZqeF{YF5_&~u]Wa)Lf*)9z;E`?( Lr#.Pq`Wmvf*NƀUv`x~S*&0ߐuVΟ"%n KGX B~gue~uoU"Sw>l{}m`]ac<}>șϷ{qϱ<8q8,϶&18g>>߿錟O&19ׁL~|{gA1n}{`3c@J ̊daHUH\||x*0Z۝NbDo']P.bGFa3[ Ys]2q'n+?rq2\{ ig;,uN s- ic+9lb6 bsIWKaTiF 4eUrROs ,1~I 8zvMA%\lPC+4.YflT^hA#2*:8gd>϶QVrC1ˑr0f3k |5fV6!0Pw:Ƀ"!sF-oJX/NړԚ1,@q8U+z3d-etuUZ0|+ #m+l+7#aEmMn)`1 Ƕ'uu^GK7VW_wwEO[vէ>__WF hۉx0אԘǧ1Ql)N3zN9++gB4>P0Q6OSegNz.ٛОzczzJ_:cY}?EWԞ}bWOWAMZ3306 0Y@-z=]N{V⛯>wu3'(uv'r}GչE])[0D:IQ[N˯}6%v=]aԫ~mdsKvT-?F 9߮a?Ͽ3g`ۙ?OpgsL=}g߿olb~?{q82H|b@3ֆN%lld @5m#KX !F>U736OMJ#IJBw,ο*rW׃0F&gİ ܫ%6MuB|f@Aق:l&gPʥo>[!)βPUz,Z2+:nu2'٦U~ptÅνuk6'|WVܪ|Lbq?,G>30{f?\sșg 3>Os21~بǰ9ϱ {~!3)e0{e*ymI} 灱K+7c[uVȵ5D Jxr4iFC@9&Y_l)pئF+ l].!| q^pL8i/+agZj5&6&X^؞*Wk6NpkXr/8;WTڽ'sg@A@Ք:EM-Z`Y6:8 |ôd۰B:,3$k⪨ 1DuTa<|CB.3Fjړ@G3¢Vƨ 62άڕ%BfR ɮNllZ!%KQc96u]0d +wضpl#s9DZ%6V`d4btKQzu :{Y'ISK:q}sY=W^G>t]BږQND[%7kW A?LqAH=&gcGwUeA_ˬ5]U_)Gg=N`i&i[oy lW޵YӒ 7rE wRbzRTbz41Aa:b1[{`i+0w:fOtt+4]w)B1鿦zϥo_D>oTZ}!e%IX CU:gu!qJԪz~OrRY" <ی{ 0g|O~Ϗfx>߿ N=8b|Ϗ8oǷc3~ 03l1yO'd8?.5 \+H%2\aQ]MhB. 2eq_緀,,^՞F[".IULQYE:N uS?"Ar֦2! 8И|AzڭR;ݠ:$ ;/l"#XYl U>+&Yn`<`NLՄ͹ @s21o0p0 MkX2kƞL^9,7 j8xvVIن?EE+`@wm-nômb.Q(JByn㸧R%5u'e`p.ԫꡆH*? ϐ[9dBÕgV6##1Hps6ݢ? U#UAVSYa#l` U0x0!ۉ[#Eb 3:^WE#F_QAhz^eY+鯩Fͱh!K`GV6%r]w%E5l?-bbuwϱ2?Bi"E]IGZgpNܛܝ,;w;~w46͆AM'P:iX`<fE:ރJ[龳$ _ߪ>>C¾H ;=;oB$>0`1!r%IIUəGu'MԲS?;7RTt##5( y ۘa>Np}ۏ9>'33f~ϰ8~3ǰ9f~'>?fs1NGg9ۈ9|@`U]:yVc3lua.[m5Xbm xX3̷-=o2LDN z8j@KpLRu&S^OYYFmTiʶ`\4=l䪰 o/!aN| :57A81zZ0Ζov;zkvO&6r_%t 8Ubfca#`ky]d|htgS'j/kt곑WyuK%y=,9O忠{~! =G~qq?s'?>q=B|Ϗolrq?s@e <nT_o$ 1?[,ĩj5cx\gCpr]a!`A,^|&=kѓ!D9P_ q\}Qa(3&բN[e Blf.V"e6p&w-\W=3d 7YۙGݕC2C1بMF<(_I Bݗw`U:N>mW^ Cdo0 sLҤV+[\2TG/XY'z8 ;j3(0\2('mu2Հs0x =]D1Ʋ`X$b> l#ՒvJ)*HB?l2n Rx3]A:¦ VR` 71nh` lN. 3-ozO]G :?Ez'Y:=G_.[KG/Grtmj+O=OԞ^UwWUçΡT0[:>N14VLff>&"m6y3xi Mif7yo=M^UZ=2oIl?:;O}^};뚧MedGw#ꞃ~~KŢs=C785d*ێĦ҇:a=Ծ7}lwş?`3c33>&Da9O&gs>=?_{l{LOЙg311C3?|?@N'8?;WC߈as9 $1 XϵZk^Lv﹘Rcx[B/am7ʻW$]B+ŲՑ6c19Onc MX@ءm㐪B+ՅT_#7HA9Z.u-D98^BI1 U8kg*x6J뱠Rj (`gxtؒK~5=AiyWXZ@,@GEX}  &F٢0g`䁖|i>r+4;D{NtTmeYbKB} 8 8lM>0lsDZXD0{)gIH('QGvdA :J=Ow?N멿izPP=NznY:׽R}Gtހ?c2߄쟏&3333n6LͦfnMm6Mo6Mim6۝a 37w.f=::eY :ށ?7s}7Rtu>Kt]ӮRԽ7N@lD2Kw?3k:EP9S:kfgŐ~\B``|#|O߰ɜ$f1Dɟ}3&~1> 8<|3{?g&xc8|Tc 8Uc x(U)k.-}guD !b_R&‹Ce-*׷e/Z8|5"l`ZNC=<9;3o5@Y\YǙVUo&ȽF;EjHeNU  Jc)b%k˭ *e? "]j3pF熌Z ;vzLK<§o5o`KO!P布YԬL VL^(& ӄRBg W$U+ jQZ-d\q 7/?Bq5a-Qѓİ˃ !S~6fqAPg(* p8#( zŰ]ڮMV]QT8^ʨ؝e+?CƠيqϱ 0>}Dc+tDF`b)쇧KS]51.,D=]O_}_өOWO}!OYuW{Mt@=gzVPk+KO_KegĈa>ٙMfh;Mf3bff>ٙ@il&iin ~Cg!Y=Mj=?׶Q]OWT޷6uT?<5Ж1ʜ iq`t}΋J{/ Qı'Ϸs=foAa`؂cn}11a=>{cN=9>ns?fc1~Hc3GB;L A:m80 5@Jg퍚Xv "$ aSZ3B>/%Ç&x4*ϑAɚV2Z[t^O|1`3Sqȍia"XgOyC]4 6ł+yU=;s)Wu /Gu=Enz:~k]cY]}IiE:ҹ_EޝgO9꿑vW>׍`z+>ޗoWu|cĐ>}g0{Nf}?^'|C99|{`?_ۜ\Ϗ߷"bbq=Oמ=ψG#YV4#17{Z)R߈)Y0%{D,Xq,Aet@l)v&3w&KL &@S< }ߌ Z| &{x\&Y6\1RkX[VQa r2oQ ƻ:vysa$ f;a5Ah|9)RBCBVU*YKlgzcS';[bA^QQK(c6&N0UyCvxU e^dJBvmzT%l KYTqU [5䷊ζBbs#D: gau}Uc)Tb ΞO]z>?Ҿ[Q达}K^]{ҳuzg]}T7;?tOj1o7֎?Dx?1O{bbbbbbbbk11111119Ͼffffff3333iəLͦiۍnLm/pg!`^%Hw#0f[;wy0Zbgvwe{A+v1_Qn`Qc3'LD~Fx8X}ؒL~{~8i\c~^_؜5j'.0T}Åi0;FrVVd6(O'LVdVy(ʲQ10e$WgI]f_)ifpw4(,+#h&8ƴ 7AU [rB k 3J`ZjE-PoyU5dÉP2>\` rML,ʅ:5VE.2AcsJnڨa0;ּt ѻLDۧW,Xz-P?f>[n~@a b111115Mf&Yk1|ffgͦffx3i o7\ 1ֆ'lNvMyN{xc/0qߏac1l{ |c>'`H|O8LcslA~qo0}Nq3 ی Aa^ lu2V9c8ֺr&N0d 9Θۺ9#(5& t[ON S?{`0Bk>;0t~6Pj)^^HtkAgiRrY+1115k5fj}LL MfYfffffm3336-6˝s$3,B333im7\Up p'1q~ 8~} |LsN}'q3>?0s?cAkJc0{qt0N= LY 7ix[ |TCL"21ڳ},VlE+FKL5u:dX7QHŦ 툪qE-[g8Qf11v\sgF`a. cQi,5mHKQGqDc4 ڕeY =$` ,$^*LA޵HU*2 @(ʠ s#4vR*6eV*@+^UQ*|j* ~-_"aQ]^X+6FZ͖fZ vYqpqbd#-J ІQX!d|om^}z1}7y^O\6+0-v.T[^>B< gs.Qڡ"X`3mц%RX%b9>bYQF(q9"G"leoe+ VHzoz_YVz#l:uɯu^[#ۀElp|&g3<338Ll@&p~0&8F q#LLMq15 bbbk11϶fffffffffm33홙nf X*q9>G>s>} oDk[#3>Ubs>'0̩Z.f ƽlL0<-YԿmٲG[ FpcZ5L:ۚrHq \^~]`O)$nݍS[0UH8@[.W5A3 p:;H͐J);|,. N|]uA8RVE %`OfwlTCW߄Һɂm0%upKI5V:F_l+ !2p ;&s;Vłݳjʁz`RyOSnExe$50uāgb "ZT::jSLt+R:H^BmtjfLLBLaÒ2|}D2LX%WqMj(,[~%{ԚGw3}iA[(zy::=[urlG| 3ru~q;NNNȝr̈́m%s2 '>3>fYq0LLL &&&Yk53Yb Xco1L`k`cs10c+8Ͼ6fH3/?טG8'|K%U5qx>\ drQ ̳D Rve)_nŬԡ5&̰a lamf|| ~}3>=Ls{qGe΍۴V}'>0LA0``|d{o?I8e_)ESS"#弝l!*#, *YT$N է eξc9j5vm D1[v$ȍϫ̆  `kD9!~FP,M$`̼w#c |tUNwR/o@H62*\*k~JnǵYN7أ% qS' Jq]l75!rX +2sP=Dvոc%kl]}L 1jW  &H %uK 98#l0[FTg&;"YB{zwU"LQ-Զa!\s^'C{5 l7I`p{;o0gf,37n l0L ל3LLOkƳk4j0nG ed1}c&& 3{b~Xf10sc퉉15 Ƿof& ֽs>3'>NL>''?+_|{g38fN{1YUs)ʱb,N_ lfugPUJL. 6 bUS38R20J`!Wq{ffK XZ!kji6'e>G-uG雒يm\l,54kC(w+mq䢗Ҹ0gX3T·$Yd*NxS\$`U$hF/ MG ؄)RJͥI1WXJ+MGIŁwE#$"FQ:نmNVlUM^1]4U8&p1Qu\VՃkwxt>LP=yVZ&8Yٱ} |*'i,^'͋|Rr(Yu#`@p0?DVW!K5n`n=,xl1ھ}_ʶ`~7+q1}M>̽?AѥϬˎڐsi9!JyRhұLѡ =sr't&o3 @G϶fglLA!Yk0&&b H#|ӏ0ی{10H|L}3f(9=s>=Sg:}=>|^fg3IB1L–Xp\/ư紸\ˉjاiG(Պ |c;SXlë)-b5ۑx!ճG9 ޹v6) k6mSpLB̶ooɐPnZ (l1L"og@ƽVQ^7MDC]^߰Km-Yfqd+C7ieLFu#S@|vxQvc@12I]-p AI1 PӔ,TTt\!',׭&|6y2DkeTtP@|{S4a&Ul1찷Py8MZQh% F @ ٚ""2Ą퐑fRhu? d9-AU`:tȅJ9f'RI1K$<Ü03('4ffUCS ;b^-FeA Xxe XUkpfmQEGnG)@as@,v{~U,)a ymk+meebV킡`P!غc+(+;ݴbШsRUYFu++zj['8>9Ϲc&qZVy 'pp-63i]aZfff,<S :z27 Τ E&Fk,8g*s?|>ߨx$afN­Y9"(Em_ UamK 9 >+SNTXl Pxv5Vg: E"50 [-BvÖ!T`45+9 & kn2<6g;WC  v!4L&j3YP%:TEZxu;Yg?! m:}׭ѵ0<AWH7/5wT2Loa|L0bi]!Ȋo 0$M`lF3L"#OVÈYmM꺻fY$9DZjq88ϰǏ9AJ ffdg3>Lg3>"ffn`s73b!~${sǹ gsbn} ߌL|L{d8'3a8Ƕ}{3N}q3||[i3 ~&|WtkzHufc ` 4I!)bP#ś6Jʯc 8H01̌ hǎ?ԑG(@/CM6pH:ϋGCYQ2‰jf#jeJUvoT Dl ]o } aKYa;xR|P;/Q6OhJRm܄rQRiV˩kJHb@֠Ɇ4Wk}l֖`N62Yx^66bZp2T&XK*%@_(8e 5J6lfσ,. &R!F ]pIRFԂ)(lr@R-d WfKrsea\#ub3-7mGW]]JuT_TSgF q9Ϗs15bɅffff,ٙŃ7ޛ;5*d6krs>`Ϸ3facq|s919|aq{c3Ϸ q탉}'Ͼ=ψx8cۙfra so׶`FEV9Q\#` CES,ʓ5¾8$`y].*B^ 꽶~MfK C<嗈6(dizޝ)>D0={b`c+ &fd@fѸb(cVޔR bsوqbyL18s퓌6'!8{`'AǷ,s3S?Yf~>ϟbOLf?8 bc03>f Ϸg ̭ޗO>'؜{p ?~Hma~ٶMphQkZ(fXKlM}X$EVsGso-sab+3EqM}u@icc p_3F~''1>&"@ٛ m 3n6?Ebb\LiTbT&=V9!۸o%ٖ>N'Ϸ3}'`9߉׸89s>1L='>'> <30}?bc{q8eklr`}~=3|{aHJ 0ePKLA% *fkmnWj5yWP4%C.x|ېWm",󝝗vFܘl?CMbgmYAZ9]{n15Ud HVCxYW *>RcUYb2<c\%XX+Fzk@vI3ʕ(va cG>fq?X8>kc@yM`\19 [}Y]g"+!j]vn;XZ@ξ$ 90e]Rי5 ]jŒyQab W$a1\cݻ3&n8tVegIV*k fr``warW#6FN5<ԐJh>A₯^@ @`*J#bhY{Ό Ad`@ Uk&L; _!Ep9H~nZFʬaLM l*0.0(YRTlZ[r09#3ۏls DZGFg8LlL{ {r'϶y&0y3<o?DZ\O׷Ͼ'߶`bVk>ٌ L?ۘqn'bsx|{`Mϟ gc>qrfJ\DqVɁuLx )emubӶ  GmTs+V1vb+c3".BlXY,5\e68V,ECjvm!x:NKa#PjާT0 ZVmmEj< ]r+> PkԺV" "9@9[2a"+1ߐcr,`WP=V6\b]\2Zo(*dθ8fG -7kU״ŁJdi~b!/႑2T2YӰT/ F. 8k0_`P8' #M34jkf ٟTx)č55A>6-vh{5,auDUK ᶎ0 m1rI(6 VYj-Y.*Cvܰ uq>0 ldan39>8~0ϟng89Os1 ~2L3O0ω'0>f =Ƕ?N=f~׶'϶=&|r?_{|= g0ߓx{3?FY8 Vصvb*[pBBlMd BZ؛PTz)ԑ n2` rV(P6[W2X5by1–7@>fN %NO:-4e$]pF %@TJ&9ۑ]pX2 X s.]D|).ˆ*Z~? $ ^!wxVG/L8[,#~#k(bF[(aDZ6ǒV Z>w2FI64HU=D?e:إZ&A@aQVY\,b;vwD(j |ܺ`N՟o@Y @n"g1U 46NfU!q!XŷͺV +Xn-9wY'6&}>'200` .`s-z|ne}g!{șgf}8>䙯0A?~Ͽ# {q19 q?s{|{7ϳ0a?^0Cg3Ag_a0 |ǷϹ9RsO3>ߩƧC|À"~(w !Z>!Aζ^د|ʻDPK]2ޮ> kf9$2-F!3&6ep5a07VةaπZ)QZY FCk6(d+$`+ڠfW !p#cN#V )$ŊP0F+_ ,c 0Ў*<‹1VRuLjhxTes`4z 4ֵbg%C[' 3D3*5S j3bYV+|M@3R:=J&ɮfTfּ(Sl |"'c0c aX/5p-k`;0d'¸VpCWsmvѼ0lT; 5* |ZkUzk:ZvkijӒ8 39̃63Raa|slL{b>1TT?9=33'|{L` `&|Ϙ>1?G'ۉ8>{|Ñ3|Oa1YGȂ~&Og~=?P˟?^=SL1Ͽ#pfy~c39Ƴ*Uc1){ͻlɹqmd* iFlk, 8k@63P6!v5opw3W8-^atC\[ ,f#3H6"xz!8 QUQvHSvJ[}"9qMr 2d GfNkZF^ \C*LLXu5| 00ī1+M`q&Zœ#6a'0M=͘ > ;jsX scr/b@phCeA:ڇk'ɤCa&ڢ±y_mHCSf%:jk5}[X:p15&75T^e{0Le!CIM@SR (v TwJúL#vFŌ܇B,r;ʭ[Y ZprkDPw}0M3> 8g'B3x"pf sf6DݟIoPGq5Ss8p}O߶gϰs<8Ϸ߮s>n>?y<~qg{Q?1>>{ m ,]$Ou{yǷǷ_cv526[;mfxV4) ;.Jj2نWaR„g23zH8 ª !d4p,d|62 NG)͙7S |q:u炏XP\X ^yØV[XޠmfVm1.#&_VnS;v8Ll\ev [V]4jӅVu PR6Nԓ@Y8Xe-`fi>NV;3W[lI?7%r \-NKjY90h m0 8H?ú@; xNUH|OZ<ӎbOWň5+$MLl4cwZ "ԔSmYZ[pc| V*8هql!X@7Dda09s'X1퉏p9>Qq, J?'D<lb|@8^=Ϸ}~L{?\`03`~|{3`sx~۟a0{3?{|1s}p;y1t܏`8|N1뙌o?= 3NL?=``M_>ƳhYAbV*N Ā23Cx`YtUXA[U9򚂹6Q2'Rk ^'!O["P7 )^c3@Y ]QSLvd38VUv*Z`R9V_R>Zh@] qT) q_&'s3 n=@&1>O3q>!389~<1~ogooO[ߌ|{{s|AϿ8٫p0:5v2MΡb);QYεsq!L3${{|_}!v?0{a>GϷg?>0}}{}S߯lgqq9#1&|Lx|~WA3> c mGj ]V`g۵U:#جKvi&$"݂. L$ 2 aJ`CYl#{*Coobx@jg)rYJ, &,ӑ)Eʿp`Ibʲ 5fkIih0~YɞRVr:1* e|afED19,j7-, YWsReLUԫHs`c%]jK- Mґҍh6:Bt!Ԏ'y,΀䁣GVEȝАr3W*9g,A^ ƽhIJ[۰lglgN{fF)9BR-Dzdzj&-rF" j 3%+.9)ZП)?%X# <*̹/Z& Uv33 - OǷq9FqO&lDZ~ǿߩg>} cCǶr}O?LL>!>߯a 5{q?q1Q~ ə{ >؜f?+ {cώ'>'wX-a4؁l!CD9wIy\fW3*a(SL 91dE9EbcmF]V\l _\Gvr!璹_UԎD$*ycQabXјG\◃O8~W!-, `ZVihV+)e/;*EEWȇ"VXf,nŚȇMArHeWlWN 31#m3[ą NXabmu#,[ay=l˧q"?~,n9`$*c +A :FGZ|F dL֯u 1 [cf F%kZ7vMuL:+&2qZlXuH\ui]` p2Ёyv ,VZ]X](@^^;kYhJ!- c>&L,04"~&'@"q?y3l֭u?<> C&}0|{x+q 2a>_Ӊ>ߏ~'|LN#7A#s?}\C19\r=1?|{q>*>&f5{rs?^Ƿ3 Ϸfgߘ~`8{c~>NN_o|q|OuqUhe\Ԁv\s oS UexEXY CeVZbƮ9`ɻT#qN2e2*!*~S5g<@<D2>. L<0C_ + ^OaPI7Ů >ŹXM\kl)8у3B1o  ڣ~۳Mj\*sb=uGm8.eGPsT^IS5Lڠ-zrX됎^exlfw} gkP%25cͱyȲ̘gdbDV;dLp !>Ž|CnB35صs C3o<ױ=3?"bq~ ~}3> ߑ=c&>u(~9ON8gߏl{3ǿcg>W۟|7!~1 1?_?~kk|ؙYffrp6R~q\FvVZVʌm3QVWX6I6vvw\ײՁVqq-@$)E|܃j3x6ܰ~aL*U>"eP:/a¢uR*'=HCAOa!4m0lf/9 `{dϙb1Ϸ|3pDs?_>>`ϟn2?#dAO=3a1>`|dco^}9׻0c8϶g8Ƿq8?a H&L8q8}DZ!TQb!EP-RK\^5]Ŏ0HR ʨՙBfdfb۪0\`=E2͎S6Z)^&WZNXTa.؈UigQfhو,c}]Ԁڳ+>YFӕm;)/NQ[sXJ4 `Kru,m6XP!%Hp"˖d/yl3ua aFѵΑVTn[C.&(8u54WisrҤ^}4ºНj3*3mj yhnHfqm hE[3Esi!.+3XYß(V:5weG":ݻ4- DZO -%ۇ?g؅gm<Rl³`N}Ϸfqs?_8>q88>EvǷL30O#1CcO?~߱Ƿ^}8>`8310}=kݳGQ3y??ǹn'ۉ3ϰ|Ϸ"f~gPXxիJKVQ+\+E1+O|ĪC\ZsJBJ8`ʺY㹕<6u.\2՞|`j,rɘg69׬tOT,bd*fpxݹ:XAE!c:ShM| v <7R)i*I} B(IV9,=M`VTN~ }";r{9[D;PfDid.`l[ɹ~!XmHՈ-SݜnnEZJͼÐq8ǿ {gۉL{r}s L~>Ƿ>9ʬq}gqq9985`|'@2" ;E#`2x ʂڕ*5inՂWv1\(`lk9PAVh“m`ZJVAב)alp3,L6@O|dÝXTb5f5Z%'\}rpS kɭu$Åi3@$U1^ Unt,;V&3BuP;Q45rX4ezuul'gr}s9<3|OoǏ~}30lOױn&=18Ͼ1?_p DZ$n݂3|{bqc?Lc` aEUUeBV`v󍦪Zv򂸵;:Zū0;':4h#)ft^C4 3S&c/@Tc@ ׉CAXƜ1+Jr_x@JWG2>]D=ls Eic#Q7e}` 廒Ǹ;$L!2]H9̱WU܈H*5 \Flp 䑪)j =9L< 2,ZL lav=i nXV30%KUabbWp^af5lRJ«r%ܸvg 7 0Ed6c pe&6@j G$ȇPM'D aX"e@ uSfμA_* R+8kSqcرY&j<QXt˂U챰Ux(0[P5VkKC7$M3 8(8/G]MLͰceCVBi-Q;P)a7tJbÜE8ݫcY'1Y3 +mj- p^q4u1_H0!^bqXMx8qc?s8>@'c=0q~~0d=eTψ~^oϿD-{g>g>q|~\b_rq>faq}3|OЁFLA0Ihc[iאaId1ȫO>^;jɏƨz%goF<]nVV1%[m@!5PB+R;jBB@;SuʆJΤHFʂu@VXZ6&WmDְ~[b]@ՠ]`Q+R͓ 9Ue%ŰřPh8+G ]Xw Ø^lr+ًb1-FiC1Iڦ2r0 휖X|BӒ>tۗt7hK}u1AY JO|a@,@مc 7 aM'6vY&5Ў h $E@f͂#qƨfbȮ120Ix|+16*XCVKa<q+w4.2l\+" XJ"7NJͼT8f/|YC!O**j"*W1vdTC,pN#af';8brc #0U$:U#| 962ţ,`XA7c XƵxqQ3`bf?8`MfO{|q{s~aϟo?$q0=DzOfϷ#~}q0{ی|OǶ=94a ;O`QdXDa\.F6 v,1r,C8z΀ u6M 7PkC" u0!OsG `+Nk V5 \i%vUQRL )jњW>Rk]BYapK>E$aʠ!-oox Cdh+r G v Ŭp-i̩L#xr)Z̓dM ,mXj#q|2 vĚO=D@XI<:"Z[mF[ s[L.|M9m&ۛg !CkxK.P XWe-X* wBDk B:^{w3<`0U80 bD Lg3 {ϷR8 q{n=s?^>ؚ3EFpa?Hf &~o߶}r90s1q=s׹~l{~1>}3Ïa>a|0q3c18+ab5vP@tEe#%5RlCDq*SBNPv]L8o9bv]BX nJڳp1&00Bj'Gz;G;X}*MX`:hB,ˉZ)g:mc]fVlS ܅26UYYBb>@xp[)@,Cg/v|~օ OÀ;TH-u3.3Z,@ye *qF("X?*vE!%b`S\bH|rae40xè'@YeY{pbv,_vhB擆#2V KH RFsw5xMwUfqb5(EU N's``ʝf,ŕ )Y wj"x'R0Cgmy+B/%U:Uv/1OKAQ&٤X,{h@[wMC|7qZd:|Ns Hy^19L}&1 V1 ǿ> >|A~9q?~LO~%gDs}?cߙ8~n'FRufEq{P!UO²H3^5oĪF>2|@u#HAy5W caVCEІ ,n],lM|P՞_&ɐk<*"JTV`[w, _E#o.X@$sBe[ 1Ʈ_ௐL 5RbqܑV|Ti r0U95Wej;a03G8pJWiȌK[d/(ţe6$l]A F#>Ęʭ ب ͶW=[ =bmG#MpDKU%hhh0 R vlpq5+YP2x?m2U`YtnPo'UVgiNjX`H{n`Wfb~V{ cMq+-a)͞+YYvV"G0b3PscQVjuvgk rmk[9u,j3kNl%rN}`aYr0#Tn%Z$`Pc!p2BfjRcfYc+  ! 1bTV8#c~8p}1sGۜC3>?{>}Ͼ=#'f! f=8{>'3gkrǷDZ|_߷?ӜgǷfeu tm{*0mX'l4_čWk|DhI'v*H>'NO5eQ#(pUp4Y1%{ehlLx"k0gٳ+1\2V ǒ,a0`-bJŞ!9V:a)䵄rȸ'>ENvkVȑO Bx2j#>B#'M{X'mmu|@.@ MWoJ:x(N\l(VT[킘Qu+`bM@;-+aVςd`ge;w+l0AY69 Gy*;;34S Fi5 Clk !-Ձny1u,f: RzE M2f*p6F`*tex6rH5ipVie3 cef#*d3S H9.j] vTb!H Pl+30 ڮ2]T9o oU`F?\˅G$yN!LR&fGb|Ƕ&[{q1~=gaLS{cN}%,a>'Ɇ#{b~>11>&}3o>'8034b3ߓ>=L?r'd| TȆPK9R;LJʘ+\`~!P!&ۮl-@b 1?@lF Ub& ;e`^/o*"1vujN֒ʙfM,Zf  3H%J5VË. m22Gp-]cXE%o?жyD -QjK,P*.;SneeYƬQ+22B%v@WȄ: Xl&Am7$j aq0+4]qZ;.P,l`ǐRh-kkaUt0c`7@`!QYVdP!YY@kSQA-UXW`fF199v8kI`Ǯ0cNG2.Avi5PwhʕN:dokaNY1*Xl](gkw[DFc"Y*+jqFB5%33{q3Ƿ>bq~~LL{rf!|COǷ|L{q>?fϾ {s}~1>||339dff}}~ۙ}1s39\ `<o0 S{dlfRT*W1܌ka,Tӷ'0|ڶ0P6cs 29φȞ9J )9F}B,m>tYޟdL8aG,m29~9Bʨ![7:RV8&{ʇCCW0ebb]۝~\vTbRURe 6X>猖`J9.No 1Zw'8ַ[( ,tgfV=Z`u›oVsx?;{s@ 0v+Wt%N[>33bvWb±3&AQJf;65,SskF@8A5-pD0yv* 8.a]LH) @eù1Faeȣ h0*^+FM`ejKGeI 󁆏QHNg1b<  ~O~Ƿ3>f}q1|L L{|N'"~08s?y~=>Oa?|~Ac?~q# {fg=x<)`|s1>}G$Osb[a3*Xa  '^2,v:kWbTm3pAXtCv?#0Oeш + |LNg3{cDȆ|{|fcۏngϏ2=L}l{q===ǿN1a9|{ ObrN~gL=~=3sps14vp?1Mv cp`99,3 QTE8*&s~~'{=0O|f~Rs)3c&g>~=38gϙǷ#lLgbq=1LVq83?G&bcۉO> `>g߼@gm~ 3 Kل u Y3(ˆYt>E/.8P3p#;AÄlk$% Ba5;rčóZr Dr @6Z!{R9x0fV V|w9>3Cv Q_-macH]rWƊ׀[0pr1V0Dٵ!>;cGP'cvl5qf" Bl 8k͙He`TRq,Vk͉\n@v-bU7=RT"\`Ǵp1(I\/+<"!ZG)YgV&[JK@xXWh-`<) &*>ʩ*c91ʌ/Σ)k%lZ'̪-#:Ua=l)+4*U5"UAk$1leֲ]1ŎǶۺj @!cA=+ RyeOXFFTrsIh{>6@'푌A3yf'c?c!'g 9߯l>G}3o2؟$n?}'g\3Ϸ3|{~!VS ~>ssq&gL ݹXj@F* f#/ gJ@0+*Fu ,(aoࣚf͏\Ȧr 1$ BLo)v*]Df; XF 0oTdg<1$rY徱0lײRʝѐ'H<ʼgi+oVÅ<1T {s (Eil \ÂR+.[eVP'<[x 2¯btb j"ڼERY4`;/0{[,+bp[*v,*v7ծ4.p |E#|w;r>b듀S|E'mr{gnɓUC^FpC<ф7 40jH\۱o$;XS`<&䀐jŽ9>Z*Egh7 /BO^22'ڶVmqΤsZ+Bk"8V©-SaF!C/XZ=}UxjSE60ٞ|!Lw,~1x~}o> {|mؘ{c?|O$c|`Onq813}@b>yBI3>{c39?ϓ1|8'=|2U+q1S3j jлOg|,^Mk[@0G-a!7C#dg%cX1>&xHh1dg2F8RN $ÊA 9ZȦͣcm<*;m!+ yX=͚y|_:Q:%^H?ڻt{l~!P-z'sݶyƄ1b:vB&q,XlL$$VgV1>o~șo~?S8y~0giNDB3gۏ|n'N}Ƿe ǿc>͂~}ǹA"!6d.3` nq2#2 1y WU*Ƹm<8Mu5&rXreE\8oY`_rbp&ʭx1EB,2;V60F33I6fo[V$񬑡 ,uA5Q@cC v:fU (X*~P!ωɶc5$. 䦻wf@*0 fy7qExpeH3qa\*+/XQ؟V'0,RW cc B%,v~ݤˈSqasÜ+buR>ۍg31$`rUCPT.``+Fol&=q0'o0{cg?~ӉDZǷr}ϰ8#>߮&}2DѻsXU;+>ϟ>c33~={~C3x?fs>&x~ߖ *ZׅBEtGeUc2LtbpQ2oiPg9O9 =ڷf`팍r ]`KFZSiUa-0LEiX10`U)cy*5G_\l6 cp|5_+x+rҙ*EhtmX@nHVw8ef0`uV`gsWg%VTW'β1ߩo&~gb|d{s|Lc?'ϷY{|>'Ϧg}='3rs>'c>g"p=DZ18gs>ꘫDf#& mNBl$SM|@Ba '1WXf6:HF)6u]J1e 7v ]q.sg_`P'3>XCjȩ Ƚʱ1mBlY>T(6hrgI0'R c xnZY0ǵ  aV0*)ݖ s  "Ȩl*}W:ثJdQ՗?' ۬tkPS^$l !{e;h`f;y*h9T6)Or.+eA? ,@N*vPJ,4T|Cn#t0U سpT eʣe@]80]ݙB6 g g">f !0Cn= ǿ0B1 3s~`c{6 qp~}fO>g|g{N"q|^'|3Ӄ 812{ωa؟onI~RZlpPM&a?b]vLRb s(|dk bJgܺx|rrxR4GYPG8U *3W$ȃHOw {x #[kDf#>j)r2 Y%K8L>BkQϤGsl,5 JuhmBtjlBj.y,YLS;6<~ݬL4]XUgZM|7fmGj)Pj)lڻlxer@P#[bW=awep,wAʷvB4^̈́F"V{jj}^sdl$YSwoK݂VU7kX. ap02>YLJ'l885l6OAy© FfIb2s/T.53Rvª-D*Jay?s"Bl;j ˉI!VزP!P ʸZGpubCjYl4]3Gf- V*|Na]W 3N=W3Y{`Ƿo=|@38O߯n1ǿq'߉?ןa>& Oht~i6b|Q?_Ԏ?g0?ǹ>>߯fgsYp` X0& 6Ʈė,c:e˒r :,,Q5\QlmN%2*l7$TlP٦eauk=l 5p2-8DLEdCCYc19 !xy!\͔2Јd}q[kQ['cBX^p!lcZSfVlt,fcPJ( DwC١U*-V:ك~t: wKv%'m +(BсX听ȲlXWE \-1w&}Q8jUk˪J*`51PdQ1T;BclY&&͞vMGB4+4AClr8Rݟt(d#L! Meٙ+rk!hبa#ʓ) !L}d:@/wQcJ ĭA'~5c?pH9?Ps>318&q}\~djobD'{qǶY{3 ==?|AFc9 ǿJ՜A>?sg?#ߓ?>ӈ@*kUVDGAB<f^< zW]= dOQ6 ٦Lۈ|Mm~𑳌dB-8ar~@\!Ƕ'3q3=&|fsy|N1gϿB=cۜO>߹c33>!>n {{0}{o3+F*202 %E ac_`JPH #*O,a 'IveM) Xma͒q Wb`;#a;ۼM26  E3i=q7;j{fc L;۝Fejr][iEUA;eQU$*co jrfU!Y`Z[7(D( bYlݠi,Dru06@/[62e.kPL 1LFKi̬+FPqω1W!ɏ͒Kf'@V6E|m@=ca2a2c?"|nӳ1uyri,ps%+$9Ԫ7.2W jBe`8;j쐳3ZY^ƚ bT{6&S p;n^ aٵْ`f%mY,C<)f!J8/xL&yg#& ߉3L?֥[,ɜ~>o &8'RY}}ǰaǾ}ϱ>qǹ338ϱǰqfN}s8>!p~f? o'c׶'?|DCq4&~0 iX-uNҰ b%UP9?CI@AYPp/!F#`Nf8'fm@V8CQn<~ksx6+)Ɇl۶*F &5:|75 %F5biÁ3XNL)SX&w +:0vpr *v<1~FCÑ8 P \Xv5ܤz5MkUTNڹn' T![1 >seÔW5&c8k0#\JdQaB:OVu 'N^ekÂU~XFTu?<Tp0mta˩buuiE]#xAQ_^@1e0t|#1lFD6r@-04o'^rIpA0B[5T)Ԣ>! -fY墝P?@:mݧ6WmS Qvi]V`،1 W T&¤9O0~ c߿Lq>}so338}gC>'{^s~}{8~=??>f~ǷϷ#ۏols0gۉ0Oaql`Lf`{~@Bfg~{bG.Re,F3uPg mqc)Rk?͆ 9|@bYDnI$A*fp0Yn530dMpP:fLWX2 › aN;m;mCbE*h->f`15C6rrQ5L)p-6GX4Mn=TFNA;M Q[ Ap@X̸;= f6+v[8hՑefsWxn9^(Nc|.L-uv]m@"Kk[{P6xgYv.{ k1q|y:6#UeT bTmpv = k&MaF')\^&' #3ߨ~1g'ܟ~`{bq?so덾f?s9?}SL~=r g"q9 NԳ Y0h+шpU9?\:~f10/s01\;͙j88LOlalFb 9ScN+<d>8xU`pkWbbLۗ 7g9lwV!z唁űLr> @qXAPZs p;<`^'19?rTVpX1>cQ3PwTV"}jv\u Cayac)M5yXbl_q1ʯ@!YfKbʹU.(;l+yc Rv0)`w 5l9""`gll{-m ]v`d23Gِ<—J+)X; T7f78>3>98| G33}'9Lq19Lc?{}3>I>clAdzן8#L{bjD2W\M<Жo\9S>@]#S)"~rs8Ƕ=^}sqbį0&[u¨ԹY&î3@"&,QuF5 ;LTp2 X$8XuʣvU-18VTdIHABbs(lVzUg"t2d@Wk{k5,P͂yo˶j˸-aQfid$(}l ) FF*>)򴩜Ԑ]V"MX]WK !!s6 ʖyXИܲC ʏ?Rgy㝼|aNԤ3؜88&c0bcng?}_|OՊ1c>=G3GϿg?g33|L~={ N!vs9L~'ǰ<{=Xy`Ux~fAXdR%XU 9UWahL*5zMQT#T ;M_-NVt4:^v53H6vB@6hDk4 a2NKeY5%1RU&V/! 4 D@pOA&\&Sm'&(㖚[Ep6c^5;Dk@)Ѭ?$ج0B 2ʃ-HV Ikv< *n0BS_P@Lhv )ovr* !Ncy4,+SlEBH*NO&+#gް "1Z%a(؆ҶTEYWa<֯lQ,´ʤ8&vVMH4ӻ׏fhZ6gyGaÝyIQf%A0$ghCeT*@u7mRb ]횀dBEaZ®vOlV[N0a9.1?β ہ sg d'c&O3~hIc59 ǿ>drg~әǰ{a|gFG>ǶaLJW:l. 2nc 0FaH5*ya@*Ш @0ʘնU(~_Yv:)iSV9Pa2YU]èƤŬ]ikJL^FCCKV1T$BpJ+bAd{ZԬځRT$ b#Ŀ 0l`g31-eLW[Պ$e*j#W`~GqnP6wbrFCjŽI' ElZ+Ua~  eXy8hKB~T- 3,4HU@+ukxXJeD,R{ B& h)DPEX0)p*ę퀟a ?jP +d6kahF2l[V-r" 3@_lFBj lQy9%gS1Ej@Ü5Y؞@ٛwY" ֍Zd!c\#va {k`p'c3xiZBN[F)`Y^p(C1V(T1aCe{]sYԉY1 5+WdpR-q2NUciO-հ/ 3X 1 %*Y_$ ;; & 0+1N5xc6Q?Kap(lBi hVXyэNrK 10Q!jL cϙT =Y{|{g0clg|ω ag~}0{sqpI9 c#ٟ߯a>g3a=%n>8,34biö7PXz3Bo S:X.5㷙K'*׫f*T.f pIS ƛV#4"T gFV牌0#4fM ,`TUATR.gVΠ@8 躙]A*c.9º,Ю6+W VBP,éia͐8, W3]k ͭH. $;®["c 3Ϗo}l|lOqr!ۏaG|LCD{cBGO# ER㖌;p S#-Yj"j9)p#)ZWhJòVJ@{?0f`cSl,Z-V_',Ul-6 rjԁ Tu~ XPH{NKS<6U1xm&Qŭxc[;ڍت? F1ʜeRq{G/e]k 2/p~^9)&& Ѿ'eL A@fu{i(H$@6r3]ڰf@zB3OjXVؚىVJͨ ut#c`I bb !N+>'9B@Lqgr6B37C] 浛- 07XsOڳ5Fv{ ,٫aL8`8 q?Cq휯E|@D >xq8q?ip'>}3cϸf=`oc0~?^<39~jcBVpG%TՑqmeGyNJ"p"U{Nbc,ecxȩ[Y+0&l8`.7] WqX*6Uʢ– cLp})jlH\0+ [ Jc1f˲H͋+UuC]ȠV`'V =c~QNȜSVvՒYU,l#s,UGN7ve9dspmڻ5eRmΘu+Ԥ#òwUƣD9]BYm0–vx9rJ8aB'&|Mxcg3> 7ns8l`f||L`}&3'>~_Fr=3b~1?^`>܏ qcx+MXcQɘJն"(Y G#Tc1S?Zq:s'ơR9'`5k{@@32Gf3"IRL`BS aA-01H'yhpjs x+sLAV@^cN7`䁝 i?Մ;bv1W^b|`܃03Yif\F[y99uY⦙+1pmenZXFʳ! )Tc(.p%֭c-HpF*vjnvOR#cb5''P l@!#kjSF`GR~%Q$쵹W5l$lmA`(*X/۴sjWAX@r@b];EẆB^ψn~,! XESU ]s6 YK23EAa\ʫ?0Dfm`useX"`䍆U`zF]K8l}&Zה*B9v Y8i#.݌b׆ 8Ia?'B68NB,[YԮmEPXg 8"cXrfZp 6Md!ZQF'1ػ#@\vj rh;zN'>ÕǷ3H?#рS؜N0}{`{b {gY3OLNO?|N=x>LO19[ֳs9>?G"f~`>ߣ?^ؘo{d}b B6`͡>pfq<u.3+ Őa63> 0j xsq / n:6hzOa(g SX *Tl 8]"#m3l |G9;˄l@K,GVKDc82P30Ƽ#ݱu\`EĜA3-g1Wy cR{u-5:dJ<UVkm+ZyjFfu]d>uY+~:Bh:孖@>Zlʣ B|3< sIY5et "eM&@P0_c:}"Yc3O ` klXS%J*l!{F3WPV>;`)eo-6Sh hYVGs'PN;k;ulj*T O{E  bSf@8T]A_̽t cV6fPG =hE}rRkWmvFEc˄(~JH.., d0GjBm_zJ<*#u.ځb1RO1>K]}T+e^rC*h͹ 쑐Lon+?!SMx3]1&)T9Ͽf'Ǹ،K-{O's8_LO}'8>w `؇Ѝ}dz23`Ȁl36Ӏ>K6X6~`!A. fWnu*Ɋ2^Q؈RBnș*!ƩA0 8c~ ,O Tk$ԯmla0eE(FJk29#*ap*~3f@Kw+QlEOnh !@Ji5VS؎l;Y1Vڳ, + F9?AhCi+80*.yj=bL*8{9>0p|vaMbFM߹EMh@d8RcebaI]݆nVr zTFrl  och_ ׋u],@b6tltW@'p)R3$xx fJ8͇*`! &'3 =6Z-V 9]T=-r]T353b}kPlWBlpa&e%Dt'Y vBuwQf @vm*;FW ( 6ap%f6 ,X&g51;xpH63Z7c`p]~cfeAoo,! f~9K{N'>!Amp@bf9O~c~D#fgU93~ㅜۑ662h h'";+5є6sčf|6(+v1Gd.7fvټ!AYf%lFA0쭙B,\o-8BWjOIJ2*@q]>cr0ZLT3k1)DbӁ1a,]ԨRjY&б܁;/M!@[hp7 RX2<no{&Ħ~gBg؞L?ϏlǶ&=3bs}^ 3qOl،{sOXߘ 8vʦcxq5QVU9~Fǘ:5IΨn>ośR!qjrfۄOvV1;v'l8at69V%p[3*0UxUȊ6o1 (\eD#ϑ٦m3Slr(`jW벮qAVx3Sŀ6fDŽL.;m26 #c uЙ*lVc`A:نZrͬ5%ɖ3l/Bs50+ SUL;mQ[`pp8W#GX(*W=A{]V57XFRs Wa Rf(b$gj~Wk2AbJUB*22),ѻa Rx*γiaBۻk.*FsmfRvQ,`j܉"mTś8"Ą %.ˇFM r.GPїU`< e.``,aĀg&!E4j,h UL*!pIpXMʴ.呁^[r&Cd>EygR0CrJ hƲ ekhusm]QVL5u*~DR׆%vd+*a v|d2F#uW>J.f3fgNDۃ|g>NV1Ao~Dz |>>{ Lnq}=?dZݏ?gǷcٵg>϶yP3YT WFVHo F%JEπ:lqfLXxwNH9{|FzUY2fQsfO͘OeI9mUT岤N}_g9 C <3MF]]gLlvLg>6FU-._=@39P7YZᎰ5@)rk Ԁ !B33!(+( ;i5a5TʕqX<\0vmq1ɮ>Y,#؛ d3L3`KX{5;,0~fM%YCf[{kX:u!Ge *I0!)՛L,1u] ۶g[E%|P o6sK-f..!zVKb̡ג'P ΪVRYc'm紟N9 !l 80@H 8*E"`bG̮.p0N}8cbaqO~198}s>?0q?C[dѵ1QXQpUDfsVO,/>x33:ϐ")`x 9rR'n0ihW cg,@d?l d'R\BÌ& ʘV ī [^m-<.`>9!aL.`2q8p s(}fbb홯3{١l?Pgۏa|qOǶ'`>϶N=&!xv${8sjaAC>q zk0a9,+;FPD#` a0h!8M|6 , ,Z3Xx3 ^iÐ[R$Fԑea ̰:)L6"̩Wف/hF8\ͶP|6s)O/*VHWr5g$xU9>- %ɩ3lصYov,yʎd; ^V"ZЖ2ʁC}M]tk[[%^X(gVXRgÒ]% R%uI`Z2nnopuTm-d>L166K{kWz0}&rAeFbsmyXoii&q L1ژvM{`V uƺFlJa FWX"+5E.k\,ȁy:A'v|A[L5%%4aE{|SY%]|T+*6fʔj5\g=j\wl'/fm2`2guU"'L;Ƕ/rTlr&س<0#3sR'}c}}NfyC=|O>ClNGcf&=3>ʎ[,r_10n}߲0?8OLDa uY]V F<~1YJBb3`k83i8gk`,+YjJ;cِND #Iu/qאU8S0 '3` gʅ $c0&œ~s9~WR0mJ xUhHHڮc pغbvAeYU* EL>Z!b*^ 9:?w"Tf0MM~Mր`8f&A`nq0gllcZf\4ɭՆlg(.ct \O9-75L qñ3ʥk[2."@2ѩ-IwP&gRcܱT5S`@ueUmXlLuBv `4taa;h3>obv@ -Scȃad[9 R֤HzSHu 'Ɂ_Af2|C&é4!6: Vs0TB@q'Ge!#+ٯg[ Y||J;|C>޹xsXOna|sDF3dzϰ}Ƿs>g>}s{q31ǸD#*dֵf\Akg*x99 e&\B6%lVuʾklH#Q39NB `՜,;W+(`bƪpH]mV׷a1FpUó@r 'P˃@r0"ߓbv#9e܋am5* C)19)Ʌ,O#9!k&fg̣3o"s9eh]^ds; +{"( C눖1 qmlr fS6:*%}ڥVVY]m a(-Ũ Xg@ۥ8ͻSX ]ܱDlDP?V*&jlm}Yj(l=PPBGnFYUo(V%S$`EyWnj T9!+BrUbP6C$y0v0e|C&eMv BZat5U"!ܻMl`+s6m6+ɛjŎ5P9F!2UJr~y ˔8|lmD!v2LtŸ(>p7:䣺 ^ʸ|e͹b7Ƃ01IIT4a S8MG=x"+W~OCLO  >>ǷS1?p`Ϸg30b'2 cYky3gۉ?>{3Fhp` rpOf#X%Jdz ¬>m؉،acbc~h`rJJj`.g0N BrC&a$)b+&!FyԞ e41Cje1U6&2_fb,_U$b[Wd5P >eve@!ak0J"&,G'08,YYev!Yk9)62@vg' 2UTMLVaY; V9&mKv˾]{cbEFO[ Y%7ov8ꚤ`UA w)MUelX6)A0+Au`"|o;DFrJ|N VR&ȿ D!;L dDLɁ[kr&s *fN@rX֊ R36XQW՞jx1mEZ˞WcȉH*"xq @F )f_PҺ Nj2 g`h,L`0Tď&>jB>-'mzEZ-PK'G`CTWz0'pyJm,>ծC>X1[Xq N31''&|= 2|{agߌfS3>=}۶{c3>}}_9Ϸ߱gq1?pϟ?o}2 iXq8E<.rguUaɗ3;Y~ 6 (T^9}DY5+22@l$d`sk1P {'o[8?0dP. Y7(Yve)AexV_ \`B!Ŗ6be!R3U1V$!Ÿ39˔ ҾN4lWA}])v3nSe9(o,`T)WX5DfwPuPJ8PZWvXTHʖ=xf16;9c3~]||5v͌*qC>@0ZYL88bs.Bb M/)M}jZʒE91E:óBN150=g!90pKT*lt$T/lcr0ð``l5zZrcWw b&Z(Υ һL|n=W=g|lO||{c۟olbgb_18cA3o{|{s p+ACCevmiLsk]l>%rk¹6viZ976-}ǵGj غڱevx+ܚf;)VA-M]C(HBp !a0u`8IhNCk#wI `ujl&r4?pa|]2Wqj e C&u xj+(4VrLSrI%ZND[܌b015[+|';'p"U^h8.NNc$FMݔ6bNar g,l!#hXOkŔV.x DUT3L0`LlyCO*kف ѐla7`QB%55z,i~"m3b&ck+{~?o,0U.D\dL`sLgc>~=ǰǾ}33?\_S23FUq9b ,]b)K,k ϐ9(f(A$WY+ 09|~0XUOs EER6*7?핀l?20 FCnD3K l|V|T! Y8su`eHm&k^Y'>>0=-5d R)kN[$63LjaGK81QT|d;vdG58p"OqPb(bRًW{.6BB¨bI U#`k+@.O]]oUU̦S14rZ9R͖O& -e-{\UT4``r!e gm *H} 1VX/˶U2} ;K}® RıW~~?3bX<%S8BLSgU_aQ\ S0fV+PfyV.4OVtju .͸LWɅNH8_;f( X~ϒKw'ǷVpVw8V;l9#ۓى,@mO?@fdDZ9oǷ{q߷?qaɃx|ϙ}=S?~Nbߨy&0/auE.>ڐ&Ŋ ^Ѐ|a* DR2uxD(2P'!69aquї3:fd)c7EMqZF˜BNӁ8zڵR1q׌76mgl3CgVhFf*gԆL+D6VOêDú-ټ0\.1VfAVʀٕt\_O^q:/֊ ދ(F LfdpRqKe ;+*538H>{X+U+>`d!^-JY׺E]ص@0AgqLF`t\vٛ`q^0 2\[:8EE@Z\(#!\u@Lc60aJj;<#Nۍg8.uH[6i]m6jR>h3&BYWb6ls]2bAUqE+˽3$#"v BeՀzp9Ucy^`]xvefjY9IDhepMrBy19R}ٔڪd jؤ>HTfWD|Tap[R&3-YշIږ=ŗOvjŗ#~Vfg@Yط>ǁ>0=L`3>FL-rs1vD30~Os>=a1>?n&==ǿ=3Ͼ&8Q8q588&ΑUb rX1®%KKeXQ P`&.Hu&f?a0CaXKe ccahg]IQslYσ>xEXv~ޤR݄ L2q ff,8AcXj>aXV;XH:EW$W1 WN"_IPk^a;9(cɟ3>aȜXeJ[$_4$pf&(C8vL%9WrBr`NלŃk3'8frfa:9x<Ù gl*"D@.@;.<#by~@Rk^k^rG[XbQmL_"6o.sL_هXŝ LmֈBqָTZ1V[{jPPI{f. `yw-s؝ 4sP`bk)]`W.Aul+  3D 6 ` ;1'T  w]KSK76[ʅ.5hֳl>c Xa "`U&"7o1cH F8wleے'9V3 6q 6)e4BY絊r /Q風+ j;VROU_NV8U |aA6T2ʂ]Wl#X=j 3fxaƤ]{iv#fyX `"!א:2`۰$ԉiaΨ˻b*vc4 3cp'rs_3K;d1q,ڣ.HEdbϲ330'M]"gB9XMsfa +ԺaO3|ND$??\)e&| {cی9~ o>sP  C&L3T:`W'lٝ&F5+}cۏo=3$o>̭l\ω8Z0u!l v򘚾C?$ v8 |@5˾ 0*kG|qT#ex~ K"*0WFVF(m>Td'*8+Bb2d+B܌#pj;.F 3k*# +fK Y E.[` avʏfd*5LCtT PvSdO,xkK\+oȾ %.{g.\򑑄5 | "rF'\MADhN!M>Z|5j6xC]gLB tbժ `L6W3<9dd{țs6$iFPA6D>0Yiː;dZll2!m[5mF Ll=Np6Żͅ zl\#Kx2.'Bu$/og|򵆞[k ͫ]G{y+XG-51-F]A8pVl8ʾ8s(ܕ(Xly鶑c㥎I 9eσ$R`]TKZa$ءUoN=fWb48'ڦ(La(^G,6`FG8UFg#be&<(+ZS.1F&gM_Y1~hӈp! co ~Msr}o퉘~~`Ƿ|bqyׅRBֲӿki 0EMv/và]!j&˒< Va~F]tm3`¸̳eX*Xci@VpkdW$?cQ6N`2] BkCm=#'#r BMBQB-%"uux@0FȠCb0`ZQVA5. eR2J m":3ht5`F,Kf![&Z2ue 7B!t9ŇgOFhc-4#pـ k# 5S*L5sVhFJ fYxh:"2,ǎ ԛT6p[+lfNӫiHv }`N3$3?Pc?31Bt";$`pyݸW!V| ԐRD*IuiEict"|pmG%9z5@N"Vݩo"?ۏ|b;|llbfs=}Q+ճ ;\Vm|D 15BE. 9$0HmV!J \C0UTBjBgd/wcfNv@jt&Lի\cU[RHlhu G@'a>XbVpE؅JES?,3ś| |0жv9`6ybmc7*YMl6 0th|5Z* ²raԾ6`e-[.˄x>6:s'Ib^Bp`]{ja.1`#~+mY+{îU53p) ZFpD5UB1xG`2 k2w؆/(;i/g^Q`l VeVAg6ergboIR; 2, @tS29"I-vǐ+sqYnF)e=ȳdh14h0[gw}ΰk+57a0eg>ف,n >=1='3~&F=0a3?sּ䐻f2];vHjyWu~ڀ|JZ!H+ۿoVlU2A§!t57 [{Y:+U^krYvN^ޛ4".9K200YbaJ ljCkZȪ3)bPVVPT0p}Q9;p*+;-AČȴ`ud# 10[氅R0B 2+aRĝ JD Dh&0-unUPbu|]OK9t$L4:4ù 9S3\:dT5FU * Xqdʈ|@) '緝fÌ!C/Ygp XX >zYu05=*wwr@AF5U Yf_lv6`mg"'oFukb$`#bk,KdD`^8uU1%!ly9~@ew[S{ctlϒl>Mx|` \KVǑ-1RI lP`NL @n "X"9i0SP$:R쌃vC ,T B zE&&YQ\=^MPFR*AY&P5{sQPgNO4.7 @iQn5fii\ m`1Lc\Mx090聐?)o>!;L? -u,DjMm3McDX+XuE+a# ZKm!vNrxkl1Z, ၮv:.=u& Zl"{LܜaLd4M19١#u;U5|o(_ε<>]*8Mu!$&m=-Αylm;Nk*.gНmbeq;υ}|-B mkMʶʺ*y̭.$W*EyVEuj[3|U[P\-Ϊ+Jҭk*K*/3JEWʲeΑM*^Tu }7K.&6 |U+Y𨬹 ypfgW[-IORB\L3P]TKh;ΟTpmϕľKyR[}$MgCEEj}OWNEV򴬶m[+wWѱyoVUF_tӶ#ZhVw=ƾ%"(R tNҴ궐iRv\SO PUM<ҺWTm|tB|jH[hWIr%E̯]|RIUP*Wu:{궚.U4p\H/CNm<ꬩ.4oҢˍ-R\hl"jU/ee:HӾWG3¼׼Ҳ2;̔v *xT^fFa_[EՕVh2Zt[kVY۫C DiU5qotgʲNiG_>X;jOշ}tiU UDO`Q2T7Wgi_Md/3=#YW]k %T 5eʬ_ 0-į!uQil2-$7FT[kG+W{ʂ[T2ױ4R\k_eyҒX.Z|j|<*+.t.%T{ʵȴ-nImtm*um>4&4_(JUi\!JOW%_/|WFo.V˕o*ҥU4lBnYҲo 經b\LN) 躲^E,;.eZ+H+yNڭ:"TL-V5>FF\*UYum[ʖ[Od]lAo'a[k+h&epR6TΝs.%*nPdBvM0# WT[ϑiluYleEՆWY7t["+*OYVF_ tEΊhVFFV:8ISpl$F["d4w}>+:Q<(]PnT> g@oC;։Ffp)/]@Q+2 oC|3❑i^TOCW*\J m- VγVϝv[ :ϕYī6\JJĶ']j[UCu0 ( ,oz0w&ߐ%IU0kWZb].(Tx&A1!{Ne };Ζ¤3HuyRW[Ɠ ҦUT*-eIYle¢J[NGRuWӴoMʬeªhs  4R;(@M٭ѣoFw%7a> *WwoOnjƧn8G匠Qz*,{]Da +a3;S,L,r\UZU2_W+m{m5(KuSs VeD*Tto龚-ΞVڨt_E([hH[!1ʊSȭl,/GŶ?X|\H(B(s~%vHk«Y!mH4Ft+i'U |!A44K9D> C(=l5, c"b/:̻u?, !WQ|GV-E.<E'XK T6Q\\j剎X,=ȆE+vXL-[F(fy!ëQ&1 ELi^utBp:y;ym=%Λ!@+.W47WMwj*Ke{-25Vk.5s=Y\ %i o-U.'fKuU*]1=XbvlX>Ӱ13TQ!'c26s6V#iWF4{P0Ϊ[3EFs$֌,V-fHv $J3;6X~GaV۔ N6QvMG*%DuoVtWi Pj+m\hIsFcQ_6ӺyO3P>u¤<ڮQpC˥W5;,.XKEu)њdS:-t#,⺧]v!Du;nnVܹE˾v>!0`h02u\[*4vsJ LnFB|>S?,L`qtxws(1"9畕UXCd8bZo1Q{XqQ^3eym!U|者h\[UW>M[hOm+MUuSm|i**h\.rT+-UʼdCVڮm&(0nv6 `P^^p}96696m _Q‹,*.+CV?bGvVkW *4b^\c?1T.vPHT8kXؙ,uŒ¡âfe E%mpsTUΚ2 ><-Y|<<*+ωZuTL*.5An;Lyi:UUrRƳh&4;0t2}2N' HG}KH= t}ޟ]=crD}WQەմCaAb1SzDAET(E j;,u(@ lj\Ge„*7& Q Čq kr Z nVeUC⪜B.\ûnĭPӴF/4ld$+*VҮP.tU[LʃIiUϗc-Q -%MN9BeC`ܭA0,, d|G>H|lď75}((qU=yb)VD  F@Y+L~jBe"Nr `dv¢[&ed74rt+N-!"Etr|Lhrs!}%V Jo.Y,50EtI!@rphO`݈XϤ>#տóִRv $DԨ mTxqUsE;,M/E_ Xm5Ŋ1;uT@\\&\.5n&tuI ԣ!+:-精-jj[~~Y+.$gIZ\讞|p:.%[KWUuS|eF+HnLPnWEr .'/=F/ i w,6` e) mEcnALXHmK}E`bhoດ{ ((<(cDV:d P(NB*y[y#@\˄Un-U|ʡ+ v%;"v[ie6e]FTC{HUmiom'u@@up,4`eg;esfO[?Up&q^ "&LNRtbEXSnX(ݘ]b3vPȘbEÊ[l\9+ y )QEXU@!.WwFvF_EP[h):L*|)-=R dn\L.:*ˍ A3[^!P2s*[˴[;u[-O>BmV j=4aS ).1N 4y\1?@}" ֻȹDQXE?BqFf #$J(Θ-i!ɧ$D(taX|lYS&(Z䠼EZJ^-,nc'!A"Cko0k=d5Z{uWN>RAT+H.UYpEĬ.~Ys)irLY[PT;趞4eڹ2&{LH{PC‡;Lc'tM@taҙG=)S3};BъwF'lˆcOt@8O )NB8 E*bQYQcUV^*ϵ0+ Eu(?Ѳ"8(FX*<gpaS>Ӳuc 2 ܯV!je* %FuHcn!17ݘD^PEE".0`eVMw4.U\SEV6ѴK6Mb Suـ\Cj0[eg$S83-*R)F4VB6k U3'geT'dz\>$E r EÖdes=4];*ʷhPU[h少IVGO:i:ʲ~: Ru>Y  yXx l6vf&Ō9MDMğEL{027?w6xqr a1mob[QQ𮣬q-JZP>Utb`b$ ~ ?>acOo `c"8bx6+ pX<͊&7 ޯmT(@C1ǛQEc2xZ~7ƌ$b; ^ߊ]f1(W?OvOA\T{LR]yQXܰHIOg)'LrkW 4?Ɩt@E2ꔲ2*&ȏjQ1[(>˶)e*oʢe,.!(.|9Go"F6Ѳ\Ns*!崬d64Tױ|*yqoJ՟3YKi2¼o+*Κo*jo 8gq6@ȷ ^)QGƹ*?Rc}ۡ`cGrT0}.Qq ?4j=t, FӇ!P=ՙ9ٖ dj(9aQ7بo.73.[b1jf jĨ}|>M康:k+!EVUˉ[Jx eyyӢ:i%d$5Vvnf2W pxP5as|CpjA50(;([Y?3F*tcEv#qD{Eapa1pjXLBn2‰=q_Eaݺ~ƿ%22T( (M Qt0T ު'<*#jiAU%=(QapQC=] ReA,$arЮF! E]tUUeU@<$gue}bwq_̻U2tWG=Vl3 8&{tV7+,9Ʈ)|d84];*X(:\иWvAaDXȿ)?wD`Y#jv$<#*8(Z(ndCG=S(P/UDon!nPVtbEm ooo'+ӾhmEWEbV4|U\HJ*e6bښABmxQV5XNW'QU;)T62 hUh]ޢ.8ɹ  PpaJ #ذMr8Ɖ|?#AwEx˝h GNĚYCF;UY5w[껬G\!v1ب#ƥ:Ua!awC ˖"Ok 1_5*&TXV{蹝k#}IqiVVTCUUƞeil]6o-_I(k Z|NҬĭoaPwErƆnPE 59*(SCU jTgKWQQPaQCF21Q!g%1@µ6]CBk.. "aWbݓN䣎gdBl^wczQPC4Ej"ɢ<]D][ڇnD{a1D9P5:%QbZ\Gl}'P0zp)nT,  wuBͺv'RjTL``Q:v*3|GnU !Ɲ{?Q2vq_EۊET~wU(T]81lmNX0 !PS0УПBɞ+,vF[W\$h +#}u(NC2>]\ oJG4YmXΊP(|u5T;Ch0,1C2֊5O'cmC+ĈSAj|REӺ' `(ocM` iic'u6uQ> ŕSm-d}vv"+U`8B; Pblرx[ Xpo@o@\?B<ADWفEx++WJ*g۬b@q8>+CCKhܳpcUPb(.ClX9 UGc=d%΋E*Wʬi3V{*˙q=Um/TeM45SM<˯UĮ5mW(X  CLjj(06&4=mAQ_E6v;37O/sD:0Qqlo>DQIPo v$#wJ9:57)nPd eUkSDDŽdBcJ=J G8(̎>7/m"2Ȟ"zlb2̿hFCCECDCD:? С|Pꐾ(uX~ԡa֙ʇ҅D1Mm;u 䙙*)T nU|υΠsQYq-yquѺSEνzW t\O[PuoʞEBCl**!-[iWCl(]e:&_6C@. T5PUYg!u3\CwBTxaL>.g>-\c`Fy\h<#0Ve{=1P߲j~.!B9wlY]@7E'Ƣ%Fob:Y`huWD^XWcz?SP.KK߹P\ N(Cd%[:etmyuR6;˕Ĺ\ m2Ujm&|y[JvZOu;*A; $H~υyqStvgyJbFaX,OP뚕4HɬsPw qS]TVeRvMCAN*m>*j$bK,SOt<</ 4|GS`|,3*Eu.+D;S= 15Dhqdx6:\eG ʲ!q]]+aҨW}OpY㡲9h0>Fӱn;vfˠ}#!GƖX@}]bTKujV˙TUni[W:>jدѼVtn v[V'նK-+uV>4U1 x V!Pp(CšapP0Vx^!/ʆyL×'0a]M.c4GS^!Ic5m1Z+ }s,, UJvNr«!7^}#Kxf8}gkyaP`ΨP\8.7G@C~GrF;7 Xfźdm&c\KqTH"ndO~3 ؈PLLGv.;AT&6Mj^0xrpomEzkQQX18n^mnUy Hiam-(w Ӣ*m>%[W3:\Om4QEoyr$4uX?2{^|6RA&ADl`G/B"Bۢ^uM6X*(!1٫ifTԾbq:=(p"=3ܟc}c.B A^uMEr-Us&4kZu7Xr;n]G>$2Y,$L rxOV-0PWQ&Pʇɶ,@A|Z5xqn~'L°.x*UA—\pZŒA5ejP,d F0t#;? '"xnBEPhXhnJŸoMd&?'/MqۉcYH6W\ZBS{W:eB .4^\eW3jV<\.5]q>50g+ 颂3(xGkAP1-cu^SUaďE@Ow;k 4(>[?.F:!O DbbEtHta!T~!3 &bvXzb?Np}ҨbxSz:/kdA-?yEGS]d"Š+ && uv"#(VUQuMc`9a >J8|AO*`AnTI1xwe+{fɐCOŁJlaVF,4ju5heDw u  2 ᝽>.6#\,Aoe hZQeM2ChD5Gxf>uԾ5.,]uD"{4C6U"E5rd 6Y=Q{Z.fX-E3<4J P!6+b,Wɏ,u HUED.;k U1=~)U]/Z6Pbq2,V G ,<'w"aTPG;ȅaV ȹu s`a~0p\I߈wQCGħߋ_#a{F7 o8._F7+E `5z\N?Ә~PhFhSqQho2.2~jXqJ =VXf.Fpx{F6\Uӣcp]9c3Zb~,#)3&9,{c1}UUT |6 $'B$͓S5`KAef?(..j~-̏N3. GlaPG_Qw1ba∌ (Wk&:)Z,`X'Gø`bT5պyv#0ޟDF)zg0[M,{~"hT ߈X61C 3GA̴'3R;7dd#0״cgu3re-^M G甏u $\w5ެ-5 9{p(Z5h,TնC{kqCCc6ɱNT)¡E"(hD@CNooosu}Z (KDU4Ilmwe_P{E<!Ģ z=;  5G鸈nѱOˤG`s傄vhXS@*]\} 7d:tF<dO4\!*PޡD>!T Ywg0EHF|:(Dh.bP T,C" P*'SqBc\l'95*, ܜP'A#\Bd!'kvQJ62Fw+֪!vXBW9nj1p,tpzP&*,E..h]+EA1ՕdE]WXf(QMgY ]uM;ˍ5T3T(j3tWE$euZ-[Fi'}47\!*E}Ҙ(qHX\c8`d ƻt- l.y 'xQtJgҬ;!b%h8BiHhQqfX,%=.QK\i? ~&#ʇ+CnJEHS 't\ ((إXf } ~j$||k1C"0wh{A^W% QC0(CB{nTh?0MxMT"S\=C*#;#-Xjb:KeK] 1.ՃIwnJ5,paWfMb TTTYVUdYVEdYEdYEdYVUQeYVU2P(TKk+udu]s/|**++Qq%%Y[j_YiN̾z,:hʦTt} Q6=vP.0(xdn7&?u ZkH)P(}4(? tAotFÈ1qC$V.dG&"5QqN8ƾ kQ ӱ بU3 \T<;s2rѩ hbhw,N!܎h/b1tXhI (%== *u 6^{tW YUUeYVUeYVUeTTTTTYPj Cj`y b\[VT-!*W;2}HeyJ򦍄(d&*6H5*vP2azXzCd(L 6 l0!PhBaa, .P6$Ҷ#_|N/U!eA)XшbQ#9, 7`Ɔ()`G.4jaJ 67e0YEfXd@hwx...#(b9C}1CGeZ0ܡ׋wXpiZ(={ la7t_v?cg4;4Բ+ aAa^M:{a*9[Db{j*************J15?+i-E.*i|h<̯ͧTWiAƺj.*U uGpn'B jX.oD`F.`v]܅vcW]ދQveٍ1}Ʀac08ޟt>PC>Pc }TکzvPĺ#kPAۦkQ{Z=Gm^WP[f,w,f*ղc5)6̳,]ZA@M֬'Q#Č5 3mʳv[2*,^j} @H7P05-T(Lò>*|Z 04 >,F0G}wx S xB e^^{;v"zp~yu d# ?}LچGXg{*T}nT.g;E$F}S270WMs{qZ ;jOu܆8{yUSsb-YEeYUdYEdYEvEdYEdYbk!j!;0iUuT*eiZ6 }t:heZC}D견 8ʬRavC؈&xtނZHP:d:3+Evot}j?G@=`/ N4_>_~~ç 'Etv*oIC!C2||0Љ(߹0n\tȑJm5*&e{Pl]˹FMZ, 9f$ɬaܦh8A:̳,ʥxT: ,vF!Ċf*T*K&@4'X_#"ѰG) ,/Lsu k04~@.Ob,JwJ~kV(n*݉M[!ԺKޒyK_<欘>Wk ?ha\/~kٰa#ӆ mHM;Didd6ԔqލCSuL4!Pj,-T^?{xڡ Md0QqSᵷqӢ  jE]EjSA(&31O9m?cƧQ,{s Cj勏هULlXrB ,n* CQ|Xvn]~#W Ѡaa`F 4!tTŎݑb8{S 1YjD}@E(FWN{pc}{\'r1qدnio'@pp+&clc6)K?b>L\?]`1Z?XUXwxj!eYVU@, YEdȻkkk"h Nȸ![\:}]\*U ˟ R6&<%mUWK39t  QM|DȏrڨPՋ^>N!~|7~10 :~_;#Ԛnzu{|/D1#;`P?A齧4 4q?/p~!{ {+pxh _F7?Nh~!?m>I`GSN(N);)ؚ'b\Sx^~]Ueu~'CAA"\*GY[òkQF 4 "7 +ůƲ"Wi]sш4G+Ӡቆ=^JQWp]7NP.ɘF&pQDpu{''-x^Dpa^͗a B,F*&> WXG.-kװcM"vpbeV,u&?Das?OE6+AP(tXvSWߚ0XrM$&up״]K {C}»].ubwVv,Ar%݄x@j8c\+"U%$Ku!@WDahFoبxH4'& yl?L {g#`N (?}LGDqNQqዹu{e^Վqy_21 pڙ轩Ǣ/m^ڎ5h{s> ?PTi;W<'GVuLlXΣP阀+M~;~Zq*T*; tsvgUUYeUYnPi&yCmSĢ6%c( t_s-"ED?1}PƌN\.-³#j!gi Q8^(,X Ք,T eiYlF eWQC8z?"CCu`0cM@@:,W GSb,(<(^aO*Ѳ}++PBU JUr1YUJU>H3G[jTT4q!ҢT>]WL[ˍ-< Bc ӆ %DllScu 2 E>]$*VO-@R#k|Sc"YEi}U1A#Vdb,g :1tLB/zY2V/窣Rk YZ΁.4 Nٟ|A*/?tb2/.>"TX^hߒ$s(P*2U;,;PRm CɅPRS̎Bg h~@.y~ShNZ?f x"Vn cq5qBo?szj\g\:jzT~UP"Ћ0lp $#t 5vpc,.ܚ_ b4]v ac/j[B?yCtsѺs=o;N\- ]V[&UgpLK\w2A4ڦt(e>jg· awa#v߲ddA>KqpkA4DP)ƥ8YUUUUUVe51317aD?Dß?z(_CEfUUUT8`Y lW= !^UЂt(#[{'Tq: : r sGܺ{kr]8Wň[·N+"G" -)u}J0^# 1S "UC@CV3㴹Ã"⡊q:/ﺃ(JpVSzB |ڛ>ſ1c'_W/8? ΐ~`Iz33<UeiQ!\ ݋3hצAdGC\qO?BȄ%cd*،خjÿ %ZoBA p 3UѼ꨹UVTo? lV ZkhuA w[L]V]e l6A/G* + -=&FL=ЈDCd5bGnd B4AJt!>hbڟ#1/:#ݹUP@z(PELd8r"圬f*FѰNM&C迀,רdVܧ!oUҺ7]1 jU1/Pzspj*8YuUUUT*@Vqx]. sW{D@&`sߕ 6 D 9c r0'aP,PlvTslWVev`-]s_ kOrժ 1AuB_ec5O于&Џ`_Gۅb#8?H!E`a[*YYP.kbpsLb.]?%>BGEeGe i8sG]t_ ÆՋNJxJSS  ( 24x6i'Ootٱ;1uM+b>z\Hh yWOG{J[*yt;G+s8P(ˤŀ9>W5duTn=ed^ZwSb.S_BJtJQT ]Db&%KTMo*Rnb#KBv4pCw?4ϣ0x3!E5oOQWP4@ }%A#'6)3nSa~I ň"lFc!;?X\[#[g ]ڞʅSPpXN{jLĻ >>}1[nQCkME j[Mum*U\.>}5ͼs+uB`rrr h$A+:7QaobQTعMB^JVj,X=qpU5W( ,a}vM7T6,1QE8g@hQW  fb_|WQw1CP1e Z$!F oh;M SF[R&d#6E#(Owv)ڀC(^:уr<@{pP~vOV0+CJ7Z_,?I B†,bs*Eآ욮.! +4Q~jڵ?8zb8'Пe/#">zu.h|#4AX9@Xx -1NӲ>e鬒5n { J?22 yi,K1,E.cfbbGU&b(lPP,N!͕TF^,joTaI(3Bn>cPDB*z(`PLHM&G`7Qev"?y?ò(-N7cl G3H7v]K48N 3lQMDavmvh]]](]`8^t (pX݂lG ӻF讈y?bwvlXU ETU_@b2bHo]]Yn%M.CX8PZP.nW]8LsFv1l iQ7Sot2Pm2Ajbj96'=UbpGT'(p-1@fxX\Sq0ʥS U 8rkrDZc ђCmloe?QkxmJ|Pº&c: HbaR 2@{@cMv|4sP- Ss>/s6NØbPS澿?/ŷj4<3Ox( 'COFG,jqsTns|VG !X,GT.'PWdZSO̟?϶u<(s}GOǴl}n&&fz {j{ T#0D)(dPUY;ww].WxwWx.Wq;jUʊQ(Y[T(fqڟ<'G{Ok(BLUL<[,_n$2ķ\IZwu D?Ik*=ƤL??aaC0$8?'bY#6{NgC|i9>#MC`TޱgMJ!|!p+0E`9~0~4;ҌQpwBp(#$B#2 9ͿmⰑYߑX YiP|P Ct [rGc:n/ 50cm E| /Ar 5 #3rhIUngt嶛΋eJhhFvB|VcO@ѺvҪ+b{M*>ɏM}QB+xXJ{UXd>37&}'C>&})ŴP[8.(V O [xZ}DCXL]HwmF'j]2? 26u66+ 5`2ih_'6Em ܠLa;kBVbȲ,FtQDa18Vs "eMEaDv,3"@m">/~ xGtioch xQ :۲lDׂ#afc[XgSbn.6 f+ ]!WREoġ#ʓElӾY*}m{龚鮮4?t/)Lp5QQ5GPC-*#QXb4!b:IKTWjƋcE4H}+NȸLAP*:(Z{>$aF4GBxPM1A+'et "M +XLEaⱗ (wn`q1iCձX">kxDOR>c o jw@  *ʋbt0S.2'e i* .un C>b&"zXWj]* h|}G$mQS\A99Dlx O]F }n;X8.XdW3bdr[Ji+O Itn[ΪBiPܡA8(Oj{V"e+F+8) 3W'J+ Ш}7ٞ (.XKq:z蠏1ݘ=XĢ&r?y~?U}#Wv*V&h194U =E]` 8H'죂轊xc؆~v O8{b7pBsTV6(];߻v~ ᚅzDL@1BC/ec1737ǎ} "ՈÇ]+xM vXpG ucX'6(<(_Ut?]АѴKi^uyO(+R[euĭ=̶+m5M* .N2rxO =<'FEQ5 [{"]FZ_J uTߥ)Ƒ_q;K`ƍG,JwR~SK[XulQ~Ц?{EuM!YTZ av..# HtppISl("N7 pQse(V7a1w^+w!bp[ ?X977X,`vsjՉU^ڍBâ8(iWND7]25pwXQ".eŴ-*&i2RgE#HӼDePvMuJ.rxN QU Db (7pZ(86چ-OˤA8fvaPW?/b:1(w[zo{ j7,s(QOU?eYUUdYEdYEdYEvmvmvmvWu٦Q紴,_B5?gPCO?A"WmF\=mU`F$?HDU<0TئO#nF!99@X9 ˉuӪ5h T/D!.4pT\;SVҲ"6PT 'U:8'Q(*C ֧59#, >[Az^bM:LlPb`0"ߢF[dYV,Tq>nlwg.o'.(!TQ=YBe+*ʲ*ʲ*ʲ*Ȳ.ȻhF|.t &d&.?G{MC haE(י)OTU3o+Oe]cMIo;Mf*:MBU\%y\j2K*SDVF<'EUʜ' uXL[6]OOdVR\}=Bb ;;| ѻῐ6 ,Xh WTcb\U> nF..0eviv핐*ʲ*ʲ,"0mv!",Sz}Xk rTHQR\-:Jo2is:i2IΊi:xd%uĸD]4>TS!TF(hd'RNj"o ZqW;WWRmZ#~? \Ⱁ\n?9&QeETo ]5]]a v+EvVUeYVUeYEeYVD5PHLOvc_#-J+Ky ʤP242xFӺWE_:96V7ѲDi @]VN 8'F1FNZv ɗ葁p7kL" Mɰ@ kA];B3kvx!,((5v@BлlejȲBAg(E(F!wuwpVk*TTYBE]]]]B lD6 O  yD( $6TUAo:.VeYp wG22[MӬS>mWUdkMuE樐BQ ! bt;(K*Ȱbiw.%TvVʺ*+]»E](F]Da]ڳ5fg/rG?x>u<%IuUVΊ/>%Jˉ5As`Ѹ4o!"=]Tס5EU t55*,PBT(aF6Pin+{"t̢YVrB!D+;w*TT*+1IR pWW]V#T)*uyꚩ!̬*iOuEyYd,UD"YFPBYZTAP`XbUePS!*ʴ6T! +4r+LϔVyދ\GE.%vy|@riMrD'SPQCj`LĚJ&e OOVA Q]U@[Gm4|ʹs-+NIRvWo*VҪ7G0lBP}d=j{*AND 5CT戸ts/oōE-.4Y U VAnZVtSV|ȼ3;L5lAYq!6[K};#{Nk?jEdMkUUAeE=bȃSZbuQѷ>f(}v臗IVOTt PJ2UpiLet3yUʼjU[ȯ*G㢕sB{ NbʲCbc .Oro RH 4BB@-w2eKy _4n· (ifYlUШE(=52ilʧ1]dMbkB59_mr+S@uo".4o1y%O3 eYRF~ZMLo;+_EWTTUVR'KlSb5ղD' 4n#/o൪oI*Dleut ]ZMRV2تAo0YPN;WFU$Un5TVȕPYe*6+ !;|G?tO>rմn~j.C0[̹\K(ω[B]y9ZWPQ%#uĪ I rUJeiVVYlGv[Um*yt*YR{J̆eG2`u}[-q>Wī>%Ĩk#YYRASU hbV rk2EU**fU_OnTѲVaQoZTIYlEAr>M'Iqq+,ed 7B1 6]l>eUgO;imUuU¬IR|yo t#Ji\βV:(hUGuGj"YV*rFʟ#nU[J|uZU;KuM[Γ*Ѻ'Cte- 檝bQ ցs"~VY~C;+-'ʢ°m;"{!y֫^[ʚV̂#+ iARTT\ +qӲV nyIT+Q[V9MMj!P_2+[,ʽ>R~4+%M7OESG:( I[H!!أ0 \YG4STim;Oywje¶uRӵ !eY}Q PYYlQ اRR{|& NȥU!t_9nt|MJH\鴸WuU^U[n}^AUeYWP\ 'ąVk{JI|4Ǝ5V[NՕgRh^UU%Z}T&ոC {m%SᢲW6YZPvG:6\j' Pԕką$-_(x;]=VUD-ǑO'&BUi V tp1ynM@|-N VTƎt|[jUa.tC@us;MQS;-ĬB"I5+0TFt~A5%O:xs[H˙q:N髝VW^HRʪӲdV|hRVEPeP{X 5ϢB5ЏΚwʬ?U &\M2um.d2hdWxi/yXYjts;ȧO.9ѴM\im-n|-%Ώǐuo-֫CȢ]- T[*څ մiu½?[*V\-α_Eʴ+ЮTwΝng}ҡ*(j"춺U_O>U*NUVi{ \u+6Uom˝cd|Q66[*Η75Nm봸Vl:WMdgS*4G-Y紐0+ҤF;Nm!Q7EItT3>%ĭ*y\i^[*JO#57Ѳih;yn%'Ji맟8KG]Ti $75_"ҬySF>:iqm7D#y:h䍴+*UW\L]V:;A9\Iiʖ׆vV%RacG:9kn'Yo*Uվe%S5l/Ule@Ooi;iU'QAp=ˉm:6B{hD8ĿG !1A Qa"q02#@BR3P$`b4C%rSc?66Idwn\]r}o6KeTR,pOg-899S$!&DY0nU.adQs*B_e&']U{1dڝUC&-!ɹ[ ܷQHͱmv-qْ{6#dY[sdܑlD{6#=uL;70%l%-{1ކ,}mɒmM]Hslٹ7 91=Ƀb{qhdKeC=II["2mmDckd0E]3={*mn!ɺ_6^+yDx9ܘq-)`ٷ'=n7-н[{sqmŔ-vgs|؁0d{-E[Iɱ[fpLvk&"Bm Go6ŠؓD*Ob[aR7A{rr!os=Ndkp"&w/6Kوw=-8c"w.C`C!vŲvlpBYTK)&[ȐpE'X^܈!Noͳڈ,Q#6La0B/f Ebo6ű&ʐA67؄^stS6M61eű&-qmvǧb MŠy/fۉyLۋ/gKE2) d{lыEsda{%DLv}"Z/$s߲{oۘLInx66NNٓn!7 l"_{ocs&968v)st[&L~[J[n͍6MķЋM A/O ɔ_RN {~_=niE=;&D]-[ok-F-o} #&mCbm'֛bNIbӋ*[gq,ɓ&-=BD66Kr`B;"$Zm"%&I$Q"뵾SIf$`A68\6 ^ "/ͽͻ&-de$^,P͸7^ž8#OlvodS~ݯك'VKsdVpl-8㳑"-DŹI)f_OA-Ĕ1l[df/;V[Cۿn[{rld_k{^&mC{Nnnrgy[*bӋsdb/2d۲NoŔ[eŹۃŶ&sdX;-c-Y'j h[@Umnmə0r$ۛŦꪩڢ "a-InbًsnLۃ=`2d"8ɱY6176KFo_[7} [6D7'6ML-9v ۈW=L-dL n/p-w1LZEɺ{E&[؞MͽKs0,+nmm̙7scI!*rpn`Me7B"`ۉH1}8 ۲l;rrsm2rNmm߱w1tޓ7TYbv) e1dlO"7㳃{̒qh"ٙ7D7rM$-n ohȳd6ͧc˽qaI`QLAKN-&nlel\Y-Oa&؋.7۳{f_b- ɷrstSoطMq~m'6^3ܖܘfmmu98$۱7%l$R~L{9= ܐbfh-6psپVɑm7SkA6 KLdۛ'?yD ea"ۘ87[EqyܔKr(d<'=`H[e-˿fN;'38K,{^싞{r- n6c ٞϡͰEm?Xܑi%PKlq~,x'ng9~{y67)h2&qmiض;}Ȓ-6_&-3m_sȓ&l䈖U'A*Q&؎Qm0lpr/shw/ټwE9v$DNn" 6nX9]mږElfغ'ۊ%v!7Ŷ"smٵyͦd@[c2 L%j"HEmɑM ^ponM-ۛrrlJ7;y$m[}-8)]nD!ɞOkrlAI3U[C{"كLMQ/N͍fi#l"eMܒGgGb&;V,N $Eive Eod#=ۛ&gJZYL2%l*vplp&mEײ-8غ{ 7Rmŷ7fYLqx/}lxHP`ɕ%~"bO7_aL#}Ķ-{qm͑/=vm}}&i9c+l[-Oqnf ]O{!͔t#Ƀ,ujLGxx5?^DI3;Q?OSB|AR` bD[NHTKLvoor )e,Nln _b %emm~-Mn'8{$Z 6셎H|6J6ɲ[*fh!ҽEUCmmhQIt@vqٓqi38:I?JhnGS<R|?~ ucxEv<u#:6*b@#PY6eؒdQ|fle͑Vٛ` 2qdŢЋe^90O'ok}Dȷ͑{"ߋqm{$I~^P``E& bof B-O-m&vNLȻ[l{dœIԍܭ*_Ƶ"Uu~ fcs۷.ɷf7DOrdshI&{.’/jl&odDbB@f/ng 'b LkA%ǹISSM72W$SH*5JVܥ ?O)Qh&?YUA\$<--ÖOTt7#F]6'⾍EQOձV,) 2omc ͭlu2El6O~ż]q|[MQpd&{86ؑfж;" nD8Ep`I{fSS$;3e tL#?t"'ВdSf{}856>wJ]fVRWKX̼m=-utc;𠉨qT]ԩVdJj4RN8M" [SXCMBMHD&J}o=WsQӱ4vrxgٟo]U5vJM`MUj)šL7 bI$ۭ"%"791؃/[, dvs*% ɶovl`N-[,]6{2DHR2ou-%@lemdf~Mbہq6͠6d vmtL; OsdSm72ǫpijk%FF|K Cʪ*7MM֦Bz4t!KD~=YƓ*UO >MnTqk<;2?CYUg~3_Dbz}PUDeɮհ!OOջ L {"P:N(aɤUa :fRJ?}EEqCIkdUD?<9ῳϢ!H -]CZlkZh|=D_zuOZV4T9+aƧNT5M⋺Ŷ&NNM,"[Mm7n˜C[*t,SO(Ub!R7׾CKSPKtxl b-mc:c%=&R^uI5/[Z,M..u*WZCF}Ja0R-F2Ut9VJEbɿf$pdؾ~-mŸ=99fn MNNl߷6{QNMa=۳=`Ae-3݃ز|ݞe7!mm=dq6Z-T6 w5zڵݕ4 }* Fzsɑde'=FZFWT;]}TiiX6CQq=?{g?US?[|dI!4:Z4\.i"":JST湬X|mC;X+)[Womȗ)r'b[6EŐ-|l܉d2pfӃo1$_N͒N-K&N/qIȝn l g71n7{̈́[qv_ ^U;{i\xJissEp6|JR7O:F2QHK]TSCZ.DSڻA~-_S}2kuFc:M.z-CG jWGFSX!Oat⣫:*S2A[`A ɋaL'w=Ccl}keo|nqmŰ%f(ݻ{F,|nY{xZPͳɋn`I71onHs 1t&`Kqd9_bkr@[^: RUGI ӽCO 0?N*#,!m2UQVMt*mƒ#}mŶͶʂ۱cۋ%$'z2!'f;8c[*iM I+d C`Y'"81hvofmQ{ROejFRK H < ]y>k[_\364ԺikM)#U#9l{j~cɥl Q'UGP::4U)S7_鼴vTA©$*qQnh㫳skn6$۳36A/a&/͸3ure l&Kfl[q ȪA71oS!Fooe1i Ao= n _rraP[$}cf'f_k R-''g>$ m%M~k>Fʔk*y>ZA(7 e?juSJ vըm2|>©1zobepM:C{RE5DJW*ގ%WcOdVSDOE-IQI"wRخt j5GzmhsnoۻU*-Ѕ^{'$ۜls&XB3yvv)ȩllHokw"wL蒷ȋy_r}Mm/$ۋD[c7ٛnɅ0lm{o7ʔiM HWB%vU3 ++vtzzo=w} Eurt24N55ʆԢ )s-S:γEptKK:م8ȖmiLOn8&ub)_b7["mm[m)'6 ڗ-$ͣD$KfmL )mŐK &o'fLZ}ȸ`Ȗɽ JJn9zZ*-͐YEj$ l~@iFڈQQknn$7 ۵o{Il&p)̢g/nn6bTH[=߻M;Tm"Z!H ܛnm;d;88D Q 9%7S1mkj _U*UWÖW,QtTkإQ"|F5y?qߌbnPT FhDGf&Š ͤE0U{n"ܜ["lnlo0g&{3m^q|[%qD[Hf=Ol{̡٘ckBk.xțٱF#L 1l[r [$AEجI5uQ0Ty'UwMugt+SJ4lZZu˻QV]qܢ *7 &5>TQ*1iTV`jr)PNg&`M>Y/[mtcE%l70c0r&-Np,ہbɋMd&Qm=~-6'-$&Y D۹w+ڛցCMwF~Ӻp~ =AiSO'M #|wÝ|S@WvQ#e]"ض ͐ )OM#TԦBC߱ҫ 51D_sSVj+\o#TܖJu YAviMi[1\r3cLLr-"ɽSroqnL_,(&$EGo&SA2Gd"Bۋǥq}o,fDq~ ݃"I+m̊pf7$ =ڧ6Ckga73hVL9۱`0} R*MO4jm.G N)k9)* ?!O[ u}?P_; Z|uX*7|A3kj5oڨXsQUhߴz  wM \O.Ct#Dc[F8x&5>'.⾥UO׮a?̍E V%= :;ZVG*(i8ܖS!MazD[SQ%FA5U qM͸$XKbʱy͖"ul'gA=-$.Nom;T)iR%b˜m'Sb1n&Iod6fnM o.1nG9Q&-"z\4u*nR֌58B&Nd鬩SVīO6<×bZk G:*I/7*]Ou]'~>D/i/**SmZQxN<X75kȞ~7lU?? oVJp"e=}V=dc#Ps) +܂r_a#jELIAM5$TM5ri*uXU% ꞝًd 6Șn'n-ȽlfvdHmܞYdh1}_c$ |Y/7L]-{"zK[Of&bBv`{MN5wKv:$V,!N d #BXsK[OMQ/.e+jjܫcэ΄)'u5GUuWuER:`vdrVeJWQZSN'S:-7AIQhTMzUXQXJ o<Ƶ0MG%LNV2?7D3J7L*'tcˁԥĎH T27FbJU+<%:*\S3T78 lt7k%sdl'6^3=Aȇ80p!'{y$2l!絽ISqm1u'"I!m;[l.S$6}]_*jDsZ"|4A SHH} TȬ[%=ES{o%/ VSU|..!Eze/~nc?簾;5 X%=-W]meUz];z_RAsPZA?q)`}Y(I.^}0P2oJ{[Q6CDdn;*tARHBUE~YESEKVA~[n{ٷnݻ7K!7Y-NMћdȇ[Lێٷ6Y{;0Box62En YH۲" |wA6 9A7Ln >WR)*tt4Q(`{JU܏Jnፑ]܈y/iDӿwCy |?'Mhe>MO64+kj_.Mh'':bU6)話p7LJE'U$<.]CP~uAE_TcdZBU铒TފPފ56+ڶs&Cl Ob[{͗E\eK&H6͒%x6MEI9Y68k܋͐dKIZ2`ؾI_sۋqu8[bMjUbŸ7Btȃtϒ68jupSLB cS*y<՝9Ey> W*`*W:W ]ϑAnGZőFC;_뱁uS|CyuI=ޣʎ 40DWae*ʶGa YMigI*Eo&LY,[-936K&-[aboŐroi K&Q".]m&ݙ{91ȝh2 ["dܒ{pqݪQE*z1RʍYfRkUx)I ةUUswQu hcPvEսE)ҩPk)i^j)[[EHSWjߠS]KajIŽjƙy%X_J^DN,8۶M{܁7-A"ߛmHmې.;%IQ{-OE&oYn ')&.Ul$}Df܊blۋ S~b =&ljP6U1du~%M]ֲJukq$)9낆 c)+Ws QXp:+cH go7=doq()T A]IVMW&O9yZ~ZzLh)?wr5(J"iM* ҷ~gˏ4QOS$Jس餫ɯӵS4V j-Բ22^$&}_$%h^n;rAȸͷm3H76'DɿfMC6oڗ&.-EaHŗ6K{87R[0} 6!*fnUdMEAUGB4Ac JlsNGTIqN2:)4}W8U |p\$)h?)xk9KEz4N7J:i$\5G?/׿~.P⟓P)|3) LZgR>υa>Wz Pm-Sv_"ӑ|E?u>"Ou!-c|CĿa]_;[~Ri΁]]DSDW%/kXB)PZi)SܨSN;6J)F#{qe3h!Dۓ| 6Q'skAS6kI$0MA6v'6\682Eɺ`C}]$EYqݽoi63ܰjt! mMC&Spc$cZYW *UW(Nz*jVbkwշOAWI(?tu = z ;gZed'Mvq:c=PiznA'be_:d}L0WWRըOk lRMJ j ֫].Q=T_a馇S`Jl.hj ${MXBMZ#Z< Moң_y:b hiW˧vB-R)Q4Oݗ@UnTZʢEx-dM԰][E yOS*z{O9ǚq8ޜ&ljQ5&ul^DԧJ2.?UOr /OF N`TVdIQ ov:gkf^-q Ymŷ{rM𶓋{vpeLl%f`O6mrػ_b$Kq|vAЛpsmV*)/tRI+ֲ0?WYY uhפK`^0SvJnvlngaUI/vXOOԄ;8؛-ɋnI/mͶpqe]L l"&;v1U%"J\/ʅ=W)hi -$FiUHL F~l Nvh9JwKڭRv:\ ӹ1(F;/<#RZ v"]hUԉ*șSit_;5DRNz;TqUzUƱ+;tJOC~Q=딏}tX1E*kPwZ$GL Lz5gP:OSMQ6'zm u].RW5iDrE5ZdEJ:J)Ҭ@z¢*9IFDZ~߁ȣSK1i?#=f>N`RW,r7;p[ѣd] VwUE[EUu5wu*/ʅ/ rQgAg DsUerC/Pyb-I4UQ-sPEVӭ&0Uy/Ӹf:*(*U5˚i{⯤[ rx^-~}Я-/nš=U-WCSmZjjz=l#~].RG6lʥ6$JB*tTB_uhyYև&hAi$g-*(11#вݏw܍^ONkM[>R۞3;$[e76 }.m-كktHNYb{7'ܒ!Rk'M }mɋd717 55V)IE:ZO<1PER]JNR+VnVTqU5B5#!mo`J驪`~i5UD9MV0#Yev*+zavXDLW,"dSznO-&ѳ?_j뻮"W{tul OGD"AOBtAbUUbJAFtB=]jXS_ăuJiJ)UQ U2i4˧[nI ׾ĪT-9>*KM?ѯwZwjr|[4iҒ)3|ZDRzE|:ZMg7F!ЂjI㘭CmD(1>Ez^UgSj~#L\xT]e\%t۱,_S{dcٷYԘ=$K&2T-͠vdB{769$Nݻ'j,A"o܉M~$K)TMF1JZ=DȋϬ}, RvTu6AI^#+VoRtpRT΢nNGTzW U1TEqKI^𤝤OF6! =ƿR]݄lv,; *BWT,ܵJóM>\+̈́:ܪFʚ*=[u_OjTbtՓM/OOR C:KN#KZ7,&- }N!Xhq-j4nAOQ~i%UT_ MU?ӤV/YKdS-# .45t>+O5Τ("Ŗ4A6{6"rM$fdLLn/6[/n;8`ELm"Z-ؗKM܈x[RةY< )P85Z&PEi+:BOJmꨰ5>!Ru%f~ܬ>*UYu(-UjT9܍¯N=h( jW$4kZ?BNOT[ ' % jeiҦ:6$ +̚?5EI*ɔB*T|-fʒ**e, $z꺋Ҷu}b~6Rfn CYe*H^9R[J6Q6`ɫթlxy/jb<WrЩ?C%ਘ BO%P%()%&ղ| |5V9Tfj,Oo _4 ZƎ: \(iUEE_ -UBESX@#DDT HqDѩÝ-R#FJ1{}M2F-&-2c`[-9;y7rJo;T=o9mNpqdKislY DH675յ'@Igw5:=VDTBJHunƗLW{kPjz3<7zDү橢Z"r(JY*uT-)Mt!'=ʽ("tW:I~j]$Jg^Q֭h)' % c2jQW3/O|fWp~MY*xJJ5NP5-:[:H  y)Wra'S'/hz)ROcV?[>UZxO&4֊ߴ(xt-^vz+[]Iniz~~&45Q)4sn, NǖBJ  OyAhTonEN+Tm;~Vg~RjF¤$eTzrik͒6nTU\J*BAth4SDt7:TEtr#W.C_MgR& =*7u%D`'{ƟNR^JSԥFej\AR;О%ȿvѫHv ّEPEKs} r`U%I}(f,>2sl]6شضM661i8"`gܛ)uɽ%!o8U*MKSOZJu k,M2NkzEc*96̌c(i.I!ŨAGjZ=EU["*a^SRM?5vM7S`F6f*굪Ӥ'Qm<.4olwu/T娾3f:iSZz}JCcj}קGQ<:rL0`-<Ii.Nje>X*ynl*IZ{ћ4EqͳmGg'3ݱlZHܙGjb-Ͷ$̙Q-j`߳pI8l$l{Ts\F -u(*Tr8c <3K"j(?tU-Mojv~V*"+z^_h U[Q\l19:6#Ü(iUi{i,~'$_7T*|7cCGwAuvO)K(M_//5¼jҥmBéC%AS]T骜:u)uBmg'%sp3]vS%:SJUshjO_E7MuC[t)esYʨ!)U5**B/}[E:ɪ|$bmL L$ c"{-8&)cق}~MD6NmfL-1ٕL[k ]T߷kңq)u]C)u)8APWi֢FcTN]~ljx%&*O=I$ *#SW*ڎm6S)*j _CQZR3έ<;µ^>nPn{{yt8]w::UՅ7*'V'!|>Rfh}[EQmCk㵩# hv؛ٿ=37* =_]mMi'Ћqx"o883eoYUvN܃CBނ|5?XާESq>c'GVEESSIQh=DSi?eG}tRTO h5*(Z ~U m3t#O#jEiyj"LEHQ:CKsjMUm44G:S'VJ&j|Aj~fF%>xf5ȫI? m}5M?L{! uJptg *~Rh4ZAkgŴ>,=A5LRQ*PJj꜃u+5Ҩ3PwQ_=H}u{0~7PsV%o\}CSISP5Q4#M`DލBo5қ:Rڈ"(*A6휛HnMqh$­ m)mkF;#o}{,lU$oVa%oQ_:58oW*~E%3ȟgE>L(/6g?"b:G)]۟++Q>ϯ#|jMSwz GÙ-Oo?]vIP~W gq:c1ܢDY|5DIv Blh 蒟 `SIj'92Q(ZZIq:?q?ǼCڽ4ۗi9S!UG%84'VTb N+j¨ uT)֧YuJJQu`ޜz ֠[Էef> o#)?Lt@nY: 9t9iUV/=F4ӻ01e C Y`M-؂$ ۿ$Mș'TLvd ec,noV _l[/~ŴlLMe GU]J~"Pf9)DPt}S?^UôU}Gik!97:bn5ct?0/+('O)'Zs?kJ5?oȾR. otDNH5z򟧡9>M=961ҿEY*NV?Nj#uZJ1NWܭ]e¼:cmUJ"S eA@D(өP(?QOETnQu*uڊK(x6QBRrIE̪ޗG']d:rVlM}T)^i j$::C BP0$1ۂPCAچj&5jl%7;qFr"-dN{P_&[$Z;79*pmm=/d[&-7 I6EJ7k-ŠuNQkS-%kQ6ؒФ lCsIOfD776_lcsnɷ6g&-͕$߃c^ _~mu8j_Q"i#(Uʴs0FBtԴ?SwOn(te裼!țΝЫIDE4:؇>*8[ ?(I&ziiizi~Ro&4_^_;_]܎v-G)*dSRRRgiA %[*}]:|j#Fe3sYvSOJT؃rt8:N:N:N:N:N:PBHKENċq܋BoAmas|k`aS"؆^ܑhjVSb>x^'׷ ;5'BO-hJ9*<#VOҾ?#O}[ڞJ(_XVQꃜ"uDI$I$Jf~)x]g~,|2=QkDiТ5RXqU4Y^# ߙfktxKxorTDS]pCOju 8CWGU8IeRZc /]£\*+IBw)|%jrh)#hTJv*ii cUuc'^v)&8~-DDL"7,$Ӄ(dU!E[67b-e ]o'ʚ]%44Ժ)G}RV0hF. }}$eeE(Ju&@u>Pk6jTbw)59LEzpx$IFSmk /]ںUǧ8]5Cjy=%B4N)+}:t|2}S&jDu7'C鮓P_¿ЧէARk˺ RvIAF"[,n-$fۭppE;M-ٞ$Yco9HWq(&dҲOU'~z(6 VTԭJhP{QPTj|n@/7i2F=ZSc#Ǡr+~eN\m+1)x[q:MfEDJ䨰-FzhuGQ$t!-1iXY<>21yH5'v|A4zv 6Qr|d*5r?QAdɸd;URxKi54Q\譕M7UZJ,rFDOd@"AI3)0d)_Ru_|hM`}(DDEޕ4 sjԡ<ʎkzT栛Zo?'b"h^AvqM&{871$_s3۵ɛmNocql[?)Wq0OIRi]f,XOVSWJ*5!UM'U譲iߥCǟCUe*QM9APT*S WUE4lZtJt h4c2npU隋MSءbPox⍁=eP^>ytgE?CɤӅT%:uI% M*Q)#|XqS[bfeo>"6y%o7?W\=6QDPҝ?zdi4k~ɞā&&ւ:H /+8sPV5Et͙hD5jEDN|Ʃzۏ&I C667X2f`Ÿ/"C&[$N--͔ž6YN%t M%S>"ZsO*_S@t+Gr~MwNü5OfF i֧7PnnȕD6t7VZtŒbuE~U•k>:ב Rl$M)= A؊I?w4^nWԫץ$^ $AX!OC%'Yp}IɱܘL^I69ɽ|$g6E7{].C&Mp$.;!Dzlj4ʈs&ȊJ҇jQj즪UV)򆚲9$c׭ZORUBiV Z9J}B[4Oj{vB݇)~"N;8+RƣSj" VyU rȫdsY675nMVD=[}F (&E~Pѽ)W“eFbVsvxb ճnn:]AoezQMrUV>aRG3XR"Ѿ905[q9C<< XSE_ %0UTT5 mfR|(dhu'u!Ss\V5*ӹ+QaTmvisj m5[S^DCUQkT5uuQ7#S).+5Qd"nj"dŤP5xz 0nFk"Mr;!SSOA*~SGC<|GQO -5j-:}mM-EaQ#Z=/N ɓ$q<ڇP5*&MZZ|CO=!|KO`. V;uPOV(Dn-eu7K ZTKI,!86[-lpo6vA0f MNerDr)7"j[ՔCuQʝU7W]Ťl.MI,r#JzǷ (TSi\5+1 hk4ʍ7u?/PvQmOͯUoZNK̠O^G[1x !t'It t'IҧIҧIt( 4ׁd^Kr}I [lfMDA >-ěہmmc~ݎNL.l^a{W}mUcY(>փO_>P9F#Ѕ.*S:u0j]>J9aTVz(j(iVIl)I ҆Z*O5zP䧁>*tRiu<\~tZmcl=`-$M>d_aȻ\9!7js=ĪCq֤x" 66BuQV;B.M5eG#Ҩi90x5!`1ϬjR_zu*(ȍZ GoomiP%j#NeOӫ55|ڽkݿMOL1xLIZlۘ߳b-tŶTdʖKq}b{sm-ӳ-'1h -97 QlTRJ Up5uUj*QXRYAڝ?*&;c=!G?P%_Rc(i1~U4?dII(|ޮYY5zjk+5CVeN Fa& "BA҇CO-i|=Ij[ӁXI$ަ/T).R M ;_6UvҩMkQɪ:̙ASGXQ)Fji/fx]5TIwOy= nu6)+*&ߧ y6W79771ؖ&DMEE0MȶEmMV-Mͳ&I"ܐqn,Kblŕە(5aJU oeőFܫA6ܩM\9FeW¬ u#e6Ql9",rZϳ)Q]; j)y~(֯WYJD l CU:N:N:H ɸZb- jy-A:.RcVU#1h:9dE&lbqA,H"[krN,dɑq}۱7"߹6ض*Gi+RJUlohv}H"')bl[nІdrEGRH) otj *UhPʦ (_G I544ooU+'IX M;2Ui!!!u!'Q$2MI& :N"h ,榯Rc-/IIw^ɃdɂL]CͰcu_Klg,g6K'tWFtԂAnTnN Q+{)[+9*SspF -Nq xc؉l1:cX$j_SN[ӑ+TNDTA5NVuMP%d<<#I$I$I) #EV2VԫV:N:N:HR"~n;E~ő,T]8m۞3lۛqd!Nq7$¡{Lh7Q1n 9&mZ=%7MZ*5-h4VD*!Ut(6./Rb!95{f{>7QjtB ȊA5A5BjMSD O11:BIY*kEuZˑFAt'It'It$$V-(M2$+q ͓kt6I6_Cm7;xR6v_A nfsm͍+QAի*5( RDE QR`-iM>)4u.]UE<<]cSC-rO{D۽xMͣm[7s$|HNȶ -ɓ'=$ccb2*ͦըD*SVJǍp") {BG!2j4i*H?B!It'It(B dѹhDН[pgbbs~D$Œ37,npd2q1l$ \l8'IJN[S1\1SRN]*gp;#+,7 ,\AA?ynK Q!8"mȂ n 2E7!{ I8[.{`_0bpqx#-mn{vm7HB, d縉mF6aJ|TT)A)S9`+4{GTXAqA4y9ß#F>sNam+fȘO~.Nmqcl $Zm;x6LMg}-I1i%9'Zr*185%:2NM*5zAWܪ#By<V?NzȽ [؃"Z2{Z{6!ͷ!f`qŶg7dYKsh$"m D#lͱexxBT͕UZRSSA|Q8@R=,) |['6FuT^&6hO iYR&""9! DoMH0en$Yprb݉ٲ l$oeNmŸTH[! œV ;re Y -F-/nqhHiDJ$)t*B tҤ) t)JtH VBY-$7pnrsm{7Ss'=C- &LZ *nfߛr`[(]̘a6e:Lra7!#G{VewSL:Vrt#$Z- A)B-A";ЇJ'AҤ:Daӑӂ P:dVt :N9!DL!-9mIJOvN }{UŶN/6KD۷f/g99 [bQPF8ZVzCEND?DENGu7@}bdDC:T#qf#"!NHB AE "+} F!HIͶnJx0ܐsdL-kDZ g$0qmMMql#IŲn&U N sl= *B9.:P:N:H:H!?Cd7(Bmx""Z"A!)"tE6[`͔Kmy"ܑ߶o˛BE܋mI6KaDED=EJ@9=xVvM4A6Gr$}7Ŷ6N\Y-<=qimͯx1چ fك2J`wțb>$v O]D+9:\4srg]g04A/͓,_{F>E _ŢM9DalN)l'=B-7-%Jm~ *, F$rD&LDf /{Z W~{3'"ہv9&ʉm[a61i&,H7RlI  e ͳdknD n0{nM6 oL(eEj1`RL_DvD[~[nlolZLveE1mm ۲mn "aN-8Ksd[oe`Y6A,>(b,͓+0~S ?|^EEA2G {Dv5AۻOd{6bUlL[[[Jwlb$l[߱Md\~ϨnrqmЛč\GN`&"*E; (`A|Gyxmۛ"uz'nm, e܌AH[I)Wm=/bJrf Z=DLNL[ @ ՄU'Tvr$=\46ȟ*Iڤ$"~n;c#N?IȈ" "pqlqMȗJolYm~v$bۛ%%o)$͐elCv$[ l"܇z ^lJdݧ˸*I-$DA51K g샋dŷ$l[nf!jYpR-ŹD1)nDͱd܉*[&DX?HI~76IQ=Í؅ii"62Avbk`DECnb9ȝ/gGrEmۯvLȩ1tKr'|.DʙU/#E؄ɁWd؅ xO\tI:Da#a'AtB̝t,B*dR/ tHDh"EDI"mdse޶Ol{8ٶȄvgsqmͶ؛Do"o7A2"_ILH\ 'Dy;7[$_ag$z4"H :dt(:dT:Dh$#H F("BVڝ/fmȂE-7Je߻cK%ؓ~ɋ'v &s6Y8ɓȂo$"qd!w0?(9I971eTD/vcAxB0AIOr 0Bh# A !ȨE m0mmrg7~ͭ_۳ (w.ɔ1l[kxE9D*A qXl <Bpmta fђ- hEѓb-Ÿ2E- h/n;e{KM]w9ɱdɽ-&6$H=ȷm&S{g6Eϡb~D C "rn):"j690ͳI?-2$ Ûcd'f[܏KbEl@_3l;R,f[&/ҽڸO_{-Ӷ3͢MP`Ÿ3i[sܑmdRsl n9ŦN;d[sEj;6^#/N-7ۻ{anv[L;697'7;T͹7K*v`U0pM8"~{V2Ȉg&mv.m&`IUf Tw2GreUN,L"{sܛ'f~tovDtdU D7‘eLcŒ K;qo %$f/FD7L78'!wsd,pa )&ScmeVIӰ-7@EYj4I2K-n[Lc;[e9n7&JEB;!K%0`Ke'jmȢ6sq-[mno([lMs7BpnnfMŸLqdNHqeYB)/ \ xvg}=m>^݅I3"_dLwl[&/7m7|m}P83ljvsuHX&T_CD=@?17\nL[nM-R/'~@[On{,w*ț|Si6'rN{&[E I[6A;ID.M^Ⱥ d˜Olہ[!0q7Y܋f->\'wr=TQeVE8LmT;"( |!?{fo#}I{9&mr[{DYS6RRL~}el%{80oiQ=ʶw |[6E87GgkSdc|!GTbd6Ar*9182oiT8%v'Gb[''D6Nmd*X8 Nm=&Ivna.R;(Lqmd A6C7C~͐'+i Nm3h_n]. M=m*t'H::R$FDnc6#a sm6(l[-'غ hf{ŸshŢ%8SSk&Z{8"(C2m"E880qdDi)Є"(Jŧ&[" AAIt"e%ލBAAL V>NN["Ӄ:TRNNFԓDȈDEqn% JYs݁&m%oͽY-7Ŗ{[{B]ŧT[{fmNN/BAR!1A"Qa2qB #Rb03r@$4CPSc5s%Td?<34tH?] \\t+ ȿ-k$ y[BJ0/(w? R ! n7LbT7VP䃢r ͓H(BvXYD'eO_\DnMlĵ3mM6خ$`#P^ bvF\2|u0+g+QsRg{G6xl/iu>jb!bdR.gdJ7.6w=?QkDzP ' lQuvVFHRKoTiIo,:m|ğEѓ'GiWe#7*T:Jd 8og?+HT5߆`D;s@|Nj^&{&$9̻Tŷ9T1$$\XN<ӵ+2T=iV@Q2_Ȱj` ÿD$ UL'Iø$R$>"~ +=ͨC[tݧp\6/CQoe:̣Il{ꩬ nܥ8{"ynQ_\s+"F]TuP,zDnr[1s6^d/a!Ϣ@nNm#*]aim1~yW֏ာχUp0.z?Y>^TK&MkorZG*!P-p>wM-}>)ϼ#+i8.3LDstϟItX"gu|.+u-&FUDʀ&#RӤ wΦ {ew;Rfnj@`>t[ʁnmUO4܉ 3;(0g;R\Kc5 @oj@%Н1U47rCa4oW~mZr]P1 m컰1r@Egv@45:w lťp`_ .'JfY:}Ul߈yxF\2<H$'7oUl y4!u G>k]5/#`Lpw.b ;oeN,#|̀yD\VԹ- dH#0_UοS˓`wF13Ih? !0?T%At$\U`=U,y"]naEQ0ͺ2k݋Tؾ(3rN  1>X8(֣]xU7 ,75`@:(l Lfg+rJ>žM p\N%5t6nAn¤ Wwb n`yWn3]먟ACl}+Q栋U<*` /ML-[ Cu m6*>LpPhi` }x(edZ|40qdg( |$r3)T;VO7g'r\"ES[;$$`ϽOa"/ 홂~;eU8ŕ.q*nrv*fߖ6pyIJ&9)4Tߔ,|?Tjʓ|^P6C7UZ>&Թ M;RNҿR(..\уo-7oop#v~q.5Q&m莣M]N@@?PAڬh8U#8u?? cr0aRqs-%$OT3uT|;At:SAm.wUN5@V{!1l\j'Vu† UgLCuAq(9Q(-_nN:(1'Rw-.˅TudT&`t]-n`"OT_PUzY tBo'`cL _`yqQN?_s*FBwZ{ |[U+mh6e~vnC>LBiT4Z<$3^$2œ|\kZ&\N ~#0 p2N9si86< @ ZS^IYSri5H:b&==VF]r8|p#WEwɍ fl1业ڃP"\>ikmoT8ʢ_bk^lֵEJUS1Œ9*pw_Aiw=2.ha/Q9rwgQӕLKED{RED4x&&l/ZSK ď{ $ Nlq(Dk5E;hR5*iwdX _hk.ySF7SY5r-!:#OJӍʒ$:zǾhqv{g2PH.'>\*AF_H–$c pHW:vC44F}SNWØ/J/bil.&©T66p%cHT€f"OU9ɬ|&/(XCf<#(9-UP0Q$>T' 7dp3ѠaTX7UJ8s"]֭=ّ$t_s/7te3QqUiM(W~k "Z|W8UU6[9N{KH&Zr-ypUI4g=UV%BgqTA}POuG I6LQuĔ6H3#Y=O*8~ü7oQWUaP|GL9n.9]K /Tߢe|(@@@I=&8PNlU:fogDߦrJmQ\E CfhS0C3Ed}A۵P's KAĸ8`-׻mcKwF%p1w\9v5Mӵ*05.GcU6CSk4E_֣Ҡ:}%FӋ/5mAaY\3pgUc@0저m&@HfE@( h'pz"<*"D _t`-@ؐm H:EQ8KVx$źy/\ e}W Umlv9N.YQ:Urot-꥚XU,ng4ɯ-?CX;^ x拎7}wdgzouEM{ /qpEWʭM>Dm5 ꑈ2TħqC&ߚga6͎ou|A vsؗL uQ@*]h*ShRPݐKlvŴ S;q-" T\`fmųJdԍ_00-ȸSV841M{u߾Kh+ǝ#">k]ZbлmuS3by|f3W!Ipp77*NmeTwi\dϚefhm7]W- GsT\:U,sr*"Xc# UF"n^i$:p;1NPD ÐLۊ4 \e+]xH_ʠpn~5CL踽 G;UotCmB\ˢԆ9 ϡuLZ`A䫮%l1El$A3O;wie/$nl@~ăD{_?ɫ˧%U>NS+eT#¦Tb<Ӳ;" pQʳvJ'FT_Annߝr2Bjf<"{O(FIHDu`XWv'dTpUajuQ ܣO(0Ur'\5%H {!# m3u8HkfI>ݛ| N~{F%>[% KA0t%6[Š`EFYU;RP.P,&yHMuqnЄfAL]гڛH7%9<[[ofꭙZ[7pc`oR- c/ J7뺰O964PqquNZn7 E`踖U9*Np1 j .(k,>^j8]4|S{C\C8gFۡ1\B l'.&⫘_#opVKӄ*kHʛ ^jK'!0,TFrm,鲵OE)Am(&?U@7xPD"'bViWFHdOomt-!7WDja_1+6(QAOZld>bPxx xBuI'2lM7EĩxXGB$ 6 wAt@CUO]d-hDϙANUkbqn7V?Y[-5APi[|w UYm!:i~/mŲ:}O)", 8Rq&VdFmO<-4q{ǯ/hdXʡ .7}" wSywNf,LB:_E6(ʨ*Ȱ$M{[nSF;QikX";}iJ l*K63 ]{(7C[rr,{8iq4/w]Әގ B!-Găj;.!hqӿUf|D(t>\? nh;*'T/ω{"I⌑̷sSU[Q † `\\1>~(0T?Y7U%"!O0wWYYQ.* wC|L/ [W=nQ$/#~lJ%fF_<Z\Gtvc:Mb6  yR'>FuC X^tF :,v ڛ%SY6Vcm:T$l?q-G@Mu!`M6=VL\!SPI2@Y(Os S{PEMۢ4[L6`m:M6"#r7q99k[QUuYpA8~TL_p",< kB qHꃛY; tEWG -{C;*c#mM@N첻^dn{,[QMajغ7W'VUTL[eW{o-8_Š]Y#A$]n8?3-pXmUG sUT).p~Zd@V 3-wPXas{l36jK|$\>f,Y䝰{:sV;Y?2tQ h󁁛 / 'Sxq\ֹ* —u.ԂB$cˉ7tF+p t<*Aq;B:/h)jfoq/T1=U2mt OTd/?u#>u,`:m~-4 KM+L&(fm9|IF w񲜏{it.#0kDUC $Ҡ[9*G2\d)Ue4;P:nU@ G꡾in`˂kiy='⻝\m恴W詫'V$]UK dP/\-y'.% -w]TT^#%pnFF ll$Y.7z8LYl'S0)sxWb53yWnz~"v`kMآ-6L$x"gx}!@"o8:#[]3N!VƁ;1{|j6\ @Q-*dDZ`P"2g䐱*E#rVyUZB橭xz>#-4O%w*D9o/p=SKApUȼ6<@8`lTMO/*^ɬ ¨hUcU~j4DZS`CF/ oh]?5LHm^mxȟUs!*YA0*?ԸDfǝZ5ҥH4 kᘬk5**H4K!U Ô\_&yl7 [ww&b$\34S hqytVRyXm^=L!y @lCp8 \hw#i( " wCJ2  G% Q\t<߅L JSL:֪y{+-9nEpt.K$?ouXw<0346KEl7oVY"lFl8x%T:-ItʲZeo8htx]GOKR݇9IEZE)']IQwT/KGH܄ڴù6TɏZvPcmbA.F2WCl 2Br2Uo@!XANou/]T+O&-K n>uPwȵl/(pP5Y]9uW-<-wl|A{5b5[#e - ֽN1`^ދK9J\U7P5PF&OG9"*:MtV 1Pʓ"M8 \VÜ=Qڨ¨U,uq ǥu^MtowP&"ow䠶9wOY]ܚ[#66N聘]A,gn}Txj./ ]y+; rDt%'l#6* [P w& @Jo*ilSmS- t/x5?Ŵ -Di9Pj6;aCB *=]win| )^'&:uw/8D7iO.z U o{& 4/?EAε/1T6:{* "I0ցEů*\I7u\ 5D[̋|HbU9xO(h!ᴀ˕S{)QsZ^cȌ%ŐkEĒ继T\[LM1R[ '6- 6wGWO%R9l> s1Nˋ\yV)m8ʍ%VUaqrYEjX#Wi H'ww6ނ^lpI褷nՑj zw|^. i#9&>]p/rJmPY6!L_mi DJʇDL+œuZg Du6Bṅ%ss4(#pTNCQ 6 ʢ+F8yDAmҪ$\sCy*1$-?D7tlM YSW* '} l'/8ayˇP QG PftgFW; #Aö|ӵ 7d˳Tok _xRo;rUw!Sk^9eXgU5?~HSt8ϑQ7F͎!ŐP:Qk59uVۯt5ǒNU8jv mgRZ$.tFiqYFnH" )Cc Ay3V*G$Kp/~h>q{zZ9 $U]nyn~r'\vg¬iTڒyɕSeK[)scɨP'P㚇sq*ڙl&.$~")sI"Ůir#lNOC(CUv|P6.1=V $?Qac7"F~-d`F%9<7WXm.&\l{8(sh%U-TEeCo*Y/ ymuE_?Ƿ1oNCW> [ ?&DoQO3QLi~NS#^ &W-0mMHqg%qߙU\fIʖ)"MfW P;eJ6@|{Ct2G~8 )&Yg;3o{wQ]n ̫D]~+@meTtʽmȾ@TN[T\|1r/OCZHpUUA#چ[%fǝFJ0EFPoT|\`\F\vl̡&#DI2 - GeVb τ D4eNs*h ӒAʢܤFdo-FA< FʞXJKawMv`nKbKy t7 ^ʧ9 mi68L'Rh#*⿢W,dl62ܑfy9 jaKeᐈy4Bo*MX䤷%Wy.9rg`@ڑ4J\,#^' iVT.[]lHUT)tG5Q#ШvG!E^nx.nߧMd[`8Cr{WPP wG;0O[&7TsRDِQ.vӕ#8j;UqW 輎וM7Sd'&NSgŤ6=Wx,v#e>,S#L${z“?-W^j=$z*l'eA [N;-qNg2P7Uqp[/ ~RaRM˹Ejʖou%E1TcDqJIE qN1UPAE\ɞk3±hO:5ItF\$Vnw yU4yIW]𘌨¨iIJFAϰgYL[83i|)™MB[s .ăSӊJx5sV`{ԞW*6_n) r7TtE1/6AMİyJzrQ2Wp|[ #;.'`*ݱ'+ۡA&B,8Íʗ zmMϢRuM*x2KYnkaAU:OZR [ށivB7P 6';([=A3_}'4md8/kכLo)fxKx#??wR$,a8j2ZL&bT3S==.yV€UL_0~i89R0L M ŧU\̠.ꨬg߲}U%n˻{8M``R^-&@q~yndӆʩ~#TLsRhi{,QD [T~Hk胚M*` g gm-t{rP T? MNڍ t". %.q$*Io*6.[J*,i3}s\Z7w$Dd#JA—s32̩kv =V璀c E^'s7)ż8= 7Hp7Sw@S% q/$$RY]޶d9cWp/I#3rK1q(q 7_(Q/i]FAT4SjTGQ9*Ji{8O sc З"Dq2Kʗ8R,6hR=p1S[|^45t>J걲3ʶȇHz]p,%*ߪ5-f2ߒ'~HA)ߪ 6\O-)R5jpv[S\FBpkME s s;*m+:q<,W1l|R8TV7s.?TPخ QSc%MS<Pr|T~_OSi'\īqKnT<wx]WDǗ%\Ot1oTmQQ' F)AÃrc@UeTlx1m@(q%o#XJ:)lwby'fʆ8n3ꎔ W ;BsII`&'w~5P;g6]NfckCx"nD"u 0$ĞHKͲP$ʨrGZEc2 Ȍy"[+M7Tp %|UpCnSH4TQs h\qDŏ!4Kܢ-9׷Ht?Ub'(Vawe͉ث굠E4oH\IiRG\N7!X*5'X;mB+9p\s0F.9.@[4y]$)s^Z>% LMB{o/8xDTqtfBz UuC)ݲ⋛1Wߪ0CmmϒJWwyo>nXȼ]%u/7],^͊D"zʨ\LP#ej4HpĚtqD c-(wl67&y4:Ъ.XӍ՛%]9꧂\~y{*£By\U6截?u: ?9Ducq.#yۚ`MIWme&1u: 7E132q\TdžWJ9XߟF|y &[<-tP='ܦ-g5 L| psCLh9J]xG ݤ LATx-ꯩ>kM;Pn<}*, 4PȇMpD):CLdf>+;dUQcM:U6xlqM͓©\ۜ*i=DXOlB:gB8dةkXB[)?W1W-&ܤ!_U!w lr9|0{aD\?7蚅Wm`ấ'kځ2Z?ɵdCRi}U]:YQ"Q '盪YPRMQ>[i|;&Kq9MN}nj+k6sfQ2 F`WEwۙrP8vݸ8υq8杬Zm7E[R.|~NQW< s]֣1<" m,䉩;imjܩ wn*+l.zy~ao DT9*%`G)DB m:ǚ.\'y"cz(6P1 o8P"6 #/&o.S'䋴F$En>H:q^h&Nh[edZ"AQ=E5t\9VT{̏%S|.V':xsfՙ&ge4H掷X9Īgs Lz+e57A?imkFT'⍐©v%͈i臻QEML_y qfW|jipNjԴmt\Ev#7AnArB]. "!4vD8%[kt\VF5ZI1o5Hnl Q5v:qEy_ ]ZG"uC[0&.#I-]4tK{s4݁rFVt`7 踝l Nam5pM\0azbөc~( W$KqULjH ̒mknx\-=DH#͑o]ϹTX eR&w. Tc vm9"K#Ty+B&o7^8]y. ;o7caaKH1D2]}P͊ A^?UAs!ܟ YB;+a[>-U\%Stq Q6܅M;_1+8_d_Ftу%PaɅwXMox< o8^UbAh\J`! ۗEP1DPOIFB:ZqQsOӚ5AJq͌)*ǒ,{ƢA<88䤴`nUY2B湜V‚99 WuF$7ua #v0:n~K)oJ ˭ #mԴ;' pU_<8K E\yrqkv8œAat؟ ÆLNN=ym櫙 .#r f9Ih ePٯ3(.u8emT^7l3%É/MAK.w.Mơv)\q>hShuqL8E6h$#;ղOr|MT.,=8ءQʒH-ppU*\v.IZJOƾySyKM@v#U♄"&?8Bv.$ܣf^@A6Ǿ'Ȯ -<ۆĦ鹺n.HE77=K0CsރhHV9GJt /Q@G09CSr ;*^iѸ^+Sz3R~Q3JqTnkx9&ե% b0ǷŗᾊLY\p*y̓?TuZ_6ǿDL/n\Pu nJL -60L!L FGU @]Z Wu!Pr# I/a65l@:9!8;ʐ긼Sew |zZ8)!l©st[o4-!̈́- 8&$J"dI?HSR-8mE#}3qʇv'Nغ,lNh?kO13 [R RRQ-|T1b¦=B㩯 Nwˌ[ .ӘVllzp*r!WxԭC595¸ )J9pbo>Jrq%#{KsmRPy'K-r Sbҫ=Q{K˦Iߚx;߻IܞKô+y6m*<¤4Px~|DC(Xą}$2$txmT[v3"l$%ȸ:p.|u y`%\_na<ӥ5cǚ6EGV:x䃇\x̮'Ƈyn=ȴtEmU>H rUwvp>& U^QqwB՞N?4fb-KW 9s*A;9<{$ۙ丢-! O?D*cRxNEp6>[s5tC᷻+FoT~+]} 7E}bp84\yƏ̮m4X0[$QA}6}o3*^~[-*7Sh,j_`.$pj|ptZe(.J.-U*.oED OiP$.ěOYbWîn=,%j 9)ܮFVg{ٱ,/^k%@Nj^`ujO$vnAlP[eNc\c䫨I0{LY7Agv !98E"UmIqYCvQE$°ŧTe[(@WNBAinKiLS%RgnDzts9/`J x1yDBs\%5GwimFm yLyF3 bn *گ³IwU`$owF^ݐ]G!Siel MPL~[eDB08F۪t6 `u@6=qp*i;./%5A6 OZXƚv*nT1yH@CFzgx7;1;H K2!A~Jo& I .?5UP cIQsC|QM2HPޗ]{m $rRS]*a-N7٧x8ETG#y7+#g>.IX F9Q1l>eU8惈0iRAtE"`>M\W:, rP:M !Sle9@Y@) E $CIUro*i7*M69lcm1hm9+_n>!q' ZeK4nztB&nTLK8` 4F^U;yyTlbKv6EP"'Y@oD.^GdS*oE̝"{根Fo%gLbz¦|o+ShLtG3L c\̈́qul}vfB -*4MF1-!+qyV#+A[%AOCr6/&~E\!4AۘU4Ê2詰ZE$-\cUp lO RTMAM<Rf&ЈRlhU(ӑ7*C 4"~qu tr@bM:E֣:shv&j%yBRgYZ30L9<7PZb7-PEb[95 MHbpfOe>Tx(#ވ9SUsspD8fv_r@UuTSaT6f[HKf 7;du\rDQzyַ~ȵ%,/£6P c/SCnæЧgĈ6ʥژh˦',QTGܧl͛S8D  GEdo*̏5-?@grNUC)秾iĞj(ɉ7Ac1" eKG?Sfv@7xqj?|@vdh|+jY6kUbA*#wz]Ѣcxm&b@U9LB.ri(6P@߯5A7rv]`mNiU3Gfv)pnB'V[F:&>Ǫy Eq"yG\[\v*YAR*u%,pc+r ɺe9CȨ5}W;TA7‰IoE.}+cR8N` RDBfK*W`U,_Vp e2RoFM"\Ԭ7pߕ[RAڸ_/nArJ>^xEo9 fJp4{<>#U87E5۶1鲥Sx&$'IO|A9ue ;3hvX#Wkh1)lvSC-6=l{]N:wE9N&9* G[ -6!^UY.q5e5e€oۢ[_Sum`ߧpz_ЫOU4" ~aّ;*C /'wx#-Q¡%v4Ur*i#誒 pMČpAt0_86 8+ -*\q採7>(EgsA2‡rE-[eށɮ+"ĪI*zl#TRUztnҎrvѲ192FLʲ4 L8Ŧ5g{eMAqpvUnuAxø[OÏW37Rd惈2ٷwTpͣ* $@i*\|eZ"CEruw1 *3E1kߢϚϢoM*\<_%g0h8gSصU7P??S vWx9Ppy"=BmC Aso3R,{-ݴuQGEÍ8wjr[NH F}U.tdH6aH9xLN#n6ҝ7^  \LR_IBN6*Ģ6|\Kpa.)o?7![9UR; p0*c %Āѕw`Zd=0wP}*U;grpQ2 cm[#Sia~{\@"|WG[=SKgr"f =6'4] 8b `o@DjynkGUSv6$:|䬏5&o*fr'iz1#p!Aq3e}C"~Ӻ>If|ꆰLI 2]|$L\#e^jCH-Әob˱6`߯/C\m~r ŬI#9]MefLx츄X"]{UUntAc*G9qʡp}ȼV茌m)esGR1\.w!>nPCxK5K-OTFT~j6ʖ0#ԉ7n\ݠ[ܯä FMD,A)&'do,})Ԙ52`/|L`gp 5n|Qpi<~QE"Gɪr"/a`P.l8EOX쩧"끠mRF} 6ctAo&F<7T8]Ӄ;XNxo2aGŷ˒,:\oU Ȍ}TT1m*z!blJs *Lqy]xb`}줾 n(:x~=a6>w6N=[*?c([o g67 7[U&ClOhi}ә f;)Mm#"o[mqqßw^U8 vBN(N.sWTa0$d(&dKza J6ߟ5aT\ bss$|H:VF&ZA ( Tš)uLf0eo nqeȕ$t@EXV4黋bg9`Q仨"דDQŔ;.EOE#PX]lBsF:(9foo(F&Ү ^4l<=Ul[`Rؼ&tIWxbfwNC-0o.juAd(L:bR/j;3:.?!QiA\t6M UT-ȣ\n ]UH57͏ {]zgU޹&1I~_%+!&8n$Z U9S]FMZD*ԡ:otM,&[cb".E,|62OLrv۠iݳ5RX c7Yl a6pUDaJnRȒdHs[!cPuow3e fk1ixu.Ӑ<ԌmaGP *PD9q"OC\s8lsR>JבFTPϚocr.&0.i#9umR{ &gII xU-TB.G';)KO?wFT# \衠OlKr=n4u # ћ9/o^/('`"9nơb$NÝ\NQ $E-=8]쉚}WyBI\@̉2~+-ĪxeK`OE_)&x}깓 n{R[h3f;5 ,TP9E&a>aR5ϿX/Dh?ݑA=֛>+ D=UV\bc (pA6jI3oDYh1O  =(( T|_/%ԓ^3 m4߈Ğ?'4ZI??eXǧT'̔6&1p^|r_MMGFWޫ#H%/.CʫrʜL&3B ́ ]|<,Ŕg^Qo0EO%FdQP| .Ł!أ@j-?޵0I.7栏LT񾊙Ԡ6̖ʼn TxN|`yt-"]:-8Z샞-0aP1*6Oe~uE@+#Sn+KIKq죭VD* [ZޠW{+8Atʑsj  s@uU/eP!ee,FP;H*I>u~fY]xTU s˚ `qUL"l}S]zFGN5uYE6U^S-ɵ"%CRΦA?cȦI}?TZJ 9G^Ns+LJiy5$G rB1y!PÕr^8rӺE[ǚT)kbovs 's(!̴?eF"˼_&8+c7Tf)Xnw!2.vqL <Ŋ XUT/,:F*9\MCZLf.sM\+Y*jl:U麖E]U69lDϢs`dGРT8Uo6g5u/:!3o4q dMV!U[q1$]K('2UhtB9HU=ۮ0BMTRI]PUy6~?GKTio PIUA'E-LL-c&N,cls*>ed~tvE"sȒ3jV@$]1O6E%z[r|"ٲ+u >_%ݟ5{$ZZw j *`"H2ҍCC@R|ĠK?!S>6;yyhHcL_7\Lm+?b&$' ^ZUZO#yB{4iE umyurq7{"Zq*D+Gp>o(4'o|@f`@U .}$>Ϧ.x*iɦUNv- Ŝ[yCPE; .3t8DeY޴@7NmVUOT`muݪTm"kA_1椊yadk|eH5n1D^-Tڢ6nJ"nJ,,|[Bdi$Uךj35EQ ?sOxT:Hsoo5lx#cCm;+6(tq̄;TA6!ô=.+U5ATi &EhwT8<_$ 6xO9*;k@ ;Eu-wz.6:4IM^ .`х [T)="Y-q"eb "jϗD@$~U1o*˦f*f XXewMcT#%-h|U)P&#re:pR\>PDd.n; L r`@D&j 5|Fn]Hnh1<0c[cD?,Zd.].I\ <>\ #^p3 " |=.0BN4CG iZm]h세xIqv7;4eL4)hlTF$߈]KH6ax/JϋV*t/U"k|Um|!A\#ӎmI6`uUSuua)iȫuV!ֲ"~Wɿ~FUuayVnJAt# m?H 6"ܻ]9,bgk~33'Uj;tj=Ϊ^rJK&/׏5-"u!i,}3Ht g1M{nKx"9_R:|$ ]棷("y(m2ꗸRcxUlԼJ^Z]~ŧTFmEw35iL $#" pӚ)Myt.9CGe{g4[#!HX8*ǚ#^& =N!v6VuMFS^$5nQ+{|X.-.y(5*KU!]9&?2Z.5y"+0l:װ a3D˺)T2J bvbߙRUŜh7LTOq| w@"1<9ٝʽmUc/Ts7aWے}ǂʊBQ+[JO!3'߰ViM3"wW›3c78*fDO,p sM.U^p1(~b ">(k$ ƺZQkE p>wUٱ"BKĺU|Jk[{L(ߪkFvroTLȘB" .pt[<>KoS cp2TӲ7-%P|2B<79rUex8?q<^ ' cpQgfEĢh]Uu^gEK7S! ]<N<hkG.-p"n9 ]aÕ5ޭ8T@]lS @E샤[#"p:! {S;P\IW GUSnk[/.]?+oܺ,sS Q]8P3!1@,;Y@l`>qun'Lt$jwVq^4>Qs*M>ESAU%h;Y |.6hwɻz'86l)B0dx,fDŽ^'$$!RD""`L:4H7)I#~0^ʖS5g܉uU$mc O$u&f|K'~hXb,1#e޸` IBJe76A@F=V o6- *D6M O)2U$pH í]-:tN3Ӂ,)!KYLlk"<Ī3 C|Vl)T>DIU-Mi{YSJ@p;J&*͂9.n/dt.Ro k[=ù.Cvm{拜{{Ntg st[>FU=㩛UsA@v7Nq1U_xckgFoAvxF}~gO6J53; '.x ^BDpK5Hot8<:K(jqqxy`b@ ĩ гNѫǒݤsGjA;RhRV9:nwrt!pO z Q-46tZ_1CH? 4ʂKy*5^i%rsSZuQ6,9Kp@~;L<Ն7f!@B[ d6FmKu@GwcRadiSPidxx|}W]ׅjWE`_ ;{n9P|V-HE\!:`Cm*q6V(HRIϲvE. P.#t+ B nn30(ý!RqjT%*fF*Dg(HHFfSyد?x? F8UsRdyf\[+"7'= 7G023U,Ns=PUd% :zlg(ulG$8gTPyacWnRw[.<ŃG-hd#yzl/ C/ء?T\hї#t=Knt1~j;(ݪ_QhU;J~u@b@؇oTfA>=* d"-eI\ N4e ù:J-ǂw fVkrUSO/R~u$n$|lTӞF{uAJׄp,ǿpct`HSF`7.w5K?q37uG"Troʝ(`#T qNkD* F-kӒ߆Oia7O'< J`[r ;55Sgd7Q&Ag*)xw+WI.F9ōhVg?$Q֋5K-t%nN̓*IBhD" ϒ7nikapPfy[ĉ鐢D"Z&6TdhVpFsQ;q4/k'Nj(뚉_ AV J '%9,<3Hkm 9{J L<4)tsZ8L]OPݍ਩zT6IP> (t]u|} ȁ7Lpȓߖ!4߹",nyw$ߒ U968;xŠbUbU# ԙ82$e9L6oe̡?T7̩ xTiG/T6Z֊G)ϥ6 }b)oD;`jʞꎥb --p;SXw>hէ&6"Pp6""H?xU%`dnxyS}LtRCL4IߟD -I|P"6D][⍭t#$3 d"ȵ6PT!Cr 5 GRڣNqD ͷNaogkHWp‡z*F#@#hM"keqF4[(wi桧kvb?OrU;2ė٭H>+:$:t_3>#[me6 Q!WAq*C3).cMkB-pABc EO5|LP's6 DS1| elHK0 xٳ':&ğV9*Xݬv ]$[\rTyBWPO^eU8n. _bcTU[z5,.4u.ԒuMT!qyS%X_l/Uٔx*o5H&毪s*G5P =GEHeY]e03;*YU!Kuǿy@E59b~B47>R),qt4m}\W'H1 gauV`WPfP_'EE.TȉLsux2‚*-e,]7 KVI봡3"jzf91ZM|h:-o@^)|0ۡ 5-ۘ\O$Il^HqDA 96RK@_&icEKb5"j{@仹:' $:>ΎjrO0 K/渆&.3eS- >  :  {~Cr?|J.q AI豍!1&C~z'Ny5E ̨R~06&7NhqS3ɨ=򤿉`vj@ϔ! yP-q#$E-q"3cOG~ (W!O rP-4-Z. U 3]M4PL:7C-COyWvFvT`s]nl`*Hˆ(UlnbI]۝"T [!:Xu#T[ nٵ*s梁kO3>jm>$)m$j:+& }}SY)9h WP:g::d\\lY~!nMz(mQ'qNrvb@6K[Q47Y mCg 90TܛoRR'~WMX` <*p䵮XF\9NbNT[*Kn ZPeMWȅ#MRpv+? A b^`@`T`;:CS!=67,eVD48:l~|n-vLa pp)RrPdy>)& PF g+w_s lD/P71ppz]5šOu4GƒmjUNWpՈAʹ][Tls_ln ykiJ>!8:*85n9>h8Hc[Ӓl̓|M?U#(n- DdqN˟T7l)- *D*z jJq+x5)ϋi5Q.؋#{+r¶;U'eWH{ RcPoU2d($_s&r){8dAPp@QhBMmȵ7T`/83{r~H79bzvNyC|" (Y6)6.RXQ1@甝gMvUAl m+?yrڝS\b q@4zAʝ*I0[i輧jjq/J5p 6d_J3 A !SM= uYQEЩ$6"s>gƢ]2StDMۿT\lQ2BّX_s$@ c'9m} by.Nq;iS$EKxDLhW{2v]YAl!H^=Ua ̮O:#w;w#+nR[K #dip)k|M*GJ̄OZ qkD\s _Kwۆ!H [vSA9]+%N sGyU܇` 6D^X\MwC*@) )&#bslj$&̚{G'G5L-@F$_wznpo6Dͼj>W}wh0nzꉵ;emu@>JGI m럐]67-):N%Z,q -̄\LOU4A8;TeT6202!P5¼7zqp"s{ÕNk|MXV)tdMP= Z'?_"Qtԁmk M"gQa8NusdcQww`=Bv\P>%vy!y}?.%^3t[P1T LY*Idxd"y'3LPCpIlG&%[iv qN~vA7?&!Z<hʖq^s[4>J͐F.ymKL^6Z&*7uxh;.o_ $&¨QuO>[ޓ۫T@f=kpԓ&~Hѧ4\.8a*|:6) D>rJAQLoOugxIs t[|E#1UPwDAH8" dt*Y"KZZ @t4F.nwi&P`7Q@ Vd d ;*v8O x㪩e9J]\-\-#.#G5Qnd#Br9LJ%\ )KRAU@ptUP=<9\_fA@6ve9w.zP0#"LHRo~e2.:&I8apqJ6ǩCOTFsd\ց(ӧ#CFjr:uB@$s;~KUs[ 3AiӀA 4ӝ32;@ېLqӉl˙Soo 8Ӆh7qy [!^]%$/f2y)jcUgFPMwlR Uz`߮U,uFܮLB'DTcУ`-{)>XAoi 'm &O+t\ /2iu{yi@ր l=vGPr7eK]TGNp@ x@&(CtF"8wì&ҡuSPGN!q8ilJ.q2UX"\ #?=<(Y;@AP Ϛ`( BguKZ.Y51!LTArP"98 /}(=Xg*d}~JsLA3yEy+i˻sz)t5JsDN ȶ@9יgR-+ۖ%i_^/BTFP9P\E o@U2,P`՘o˧Kt0%p aS݉) PkA)\^f$A~`9! .+{k*\Pp2oɿnd{W 'u"䌅C軳o|E(7[uf[p>݊[P'[|R7WPgy+{ϒ)n㚼C8bF$##k %Q%wq\l\_EV* _7w$tj3;\!B¦ oCxPy:"\]q)fSA[6o?QGNh n`8?<--c%#W!أŘ]汓܆HxPJ* *bi>9U{U Ni:~PTovD^T62D㒀",:!ݸD~wv8d 7" um/Lʖd*m2<|RTB ȅ$6R,74r|NEpyR"|\Ǚ6*Pw:'K.eCc/cn]~+H!m7wZT“;r\Fh\~u5 e}©L`^ <7 XAAՌETZw9EMM;s*qw"}ζDwpw&*D©ٔ9uF V!7»MPss¬EsѧL(H.c#~W ne5aֺ;nw_NWwo;,(v,) P/`Ic0umFOE`S>>HVnX0TJpdy;5]! >/Ljzaꠉ4ERߋ&uKϼ* N "8r"e4ցqOnXVk8'Jy ։hy#K|vp82a 7S"ߛ눛{  EC{PhCd]t$PbiRmYGLZ H%CG6Fqp [eF:'n*7]DYC&eS(ܣCH7\-mumJdATRi*[yhC\AcSDa)>+\'#GwT G-RX1XVLlL~M-G1Z>Y>*ۯ eH ǔa丽U%d588|»`?}=M [3*2y=JaZ@=PZ0J$i &niv{rgeohC\M'Ε'9K3;9  ިuI" HM--wELEFD Ͽ%zsP< ުXC%g6YuR-G/⎫+,U2<~h#%_#2"x# 2ߢ7l%vU@^Qqp*Y0v9w<2b#u?SQSq sEp:vBҌ3Bk5gDe,5b 4znPm%N-D9r2 v eGwtuYu@Py{\ U~ˈǢ`Hye~Hڣ;' -A6ᲤI|) &fEK5CZUk_'UtXQWDs\5cu d"a CR!H"~  ‰#a!ptdoiU.mpL`Fk`Z$VDi6Z %F H16䆁+‘qAVq8bAӫr(`] p%̿+\B 7@ȍ:GDÖDJ> 8XeUŬ~8\gT'E0ou9sP"y-&TuM>u [?~|:sL\Q:-Nk yWPi1{ՏqBb2v>JF!=U}tD *Bb"JosԓWm ^ 1`jL_* Ze,KB q c/ʺU\EwNXi1w8UFGV*,DtENuX_#w7qA͟YPg fvGPa p@eT`TvN\n>OD\mNŹD7~|?5bE7@M*3sͲ]6 *-¢7W !̟KZ$<E46@w>WXI ZPxiwU q]xyk^I?u, `6,!Riw.+DO|qt^#a dyjrЁȠ:GI;N .0U/kcL$ĠCď,z u:ğ8D )#k h-fy^y( ܑwZʱhf*4tۮLo̙Yme.v7)8~c樮:7;IURt47HtAU I@))a#U]8P|zTZ3G= ;Rc d7U[5Ƚ@cNz2`N,2du<ԴGHRAzJi#UUPGM\\ע&"ӿӔ;p-u|5 4espAY \v4+(vs<(=B&9SI|-U&TY1 J5t &xwqCڦآ*ZGxHpTwv9o{Wr`>$U-e rhp†憣\Zi⓺Aܺ"qĂFG0kŪ&N**Ϫ .~(taP&75(DY8)Eȸ4ǒ4iRdBY3lcl&?.[Ln$:KZ `CPM28*Ri䢭h3x<3p'*A?O$)<|SyFnJ&17**Uܿl6dU369,5 ص7ji YmI3mz@!YPls%wqq0<.w*]ʽM7CӴVOS)ąB_Uљim eQo}o6^,"]ҤNh o@l:)C@0'X تUͱuA \bLꋣ;d60 <@ŕwa$(9.\6Zv(ť؜(PiֱT=Ŕ]~k3SQJ.pixyBÞJCbÏ%yl*=Ve[uPY7]ao-$&б}r-gm`H\y!6ݑ b i^u /<8x۪ r@7e^d4Kd-]iEUWo#n' ۔ZrpE<b9[@!Lgʨ4N:3{Gs0a@2go%f o qy/c s`Rn/qL[ |Hd)o ;Me՚0PfDt0/m~~鸁]ue3;vU. A r'TÞ+"\b1\MBfwT3sNy"LF!\'Krz(3)sP56TEnAAXfE*5YR *48U¢WA裈I檌x8pNHw9_@Q"?2h=eKP!;޺I,{? r-qPܸ&DP!@qZ7BK Uf*xdlT(vi0Sݷa&d~ɾKj"qx)_EV 읦bO4'5bmK7nW9D<*:.>%5@4&8T/P#.-^NchSm2G8F @e޺b7p~h6*>5Hp%$S6E96**h;[VU1u Q=IePP~kTź q&N-plwH3P`rDU"3y@`Ù*ք$T_G^KN@so*Lg.''*|@I7Y*ھkP1+<[z{.YTv0'Q*5u\O ~jnQI&RK 2#>$8{kaTa|JFOT9S¶m& cR8&@Z@ |Dȋ ;Zd2sk[H9[ ΂y(gi܏D]9:|7 =yY>wPmI(TzB+[ >P!ܶU hH>9 R[.-Uil 'ЧI9">is\2d Fުؕ(9;K(k-tՂ(MT>I@uCQv0<7*DՒ =ǚ$Q"[i&0c{OPXENyrOc[1ySM&wFF7E֤=wD5jn&.w..bLljU]\%דo21,i˙E$ {,6oϔM?^:(p;3r9cl&APMݸޑ?O긇K7ʖV|sE݃ҭ7% \H2- UK\6©͸{Q?dCvTnhs]jU Z!~@e45KS71S 'ת6T[U\&vшu]o\:}Q,(kE >)QM  ZB".!Npb zJ1V9.[e :(iqebvw;(09ZǮ0AF݈g] w}s]U.?EKç~Tɏ$]6 mHs0-6W#, p=U$ͷA$ {_~o|1FJ޸T9UU(c/0@wg5b)%_3e"碩&ʠFvU,-{stc"C,(;B|SuIuCiF{3Kp:b.[N.[Tk6W.RMvPZqU°'tMAJWݻrEӎBl.q~hna-`.y(PS^׺øl uQ DWOx@rD4*EvBK0s'}EkiBEu73k|5Tڼ^ vT5Ķ+<-f`z M[\#JGv |>w\5 -&:xxd'?$CQ|J T[LDƺE_STy*[%{\307W-o0sĸ\.*G);8Py_M @}anߺ::ܝT?/S1L\xUGkߢkb]sZo`1ieb51|GhAы!} %?uɌLH*\99*fcܨsY$jT͑*0|eT4 hwbϹ\n<; AutCiv}n"׺,a46ʗ7%p)e${ d@yN(&2[uD*U33wq6 j|Ԛ8zFɻod[{(rlc9K'Rc~Jb*/u,,uP]V;/eM3SDo4秹Q`s;cz\8Q7 &G{,j3k2mI7GOYiD/Uz,%x>jqpP#TzFw<` -͖y"&lNM^IǿxRص -,؄ohSo6S]W­9p6kAFmŸP# -dImeU-JZZ; ~v\Nd;I6oT$c>Jlϙ-9D#hN.* c*4ʷ&MGu݁ mAh]oBZ*1sTG]|+>g@q=G%qo.#:dž*y|]W`oCi̓b2Q߉C6"nUjAs團]Ԙػn~$!N:m憖`pبnO BLJbi+ڟhsZŀ 5cDG#e \LKJ@F mcyrq '*W-FPY_d&ZAPw6Yi'0 9UFxE4ߕ麳ZPn6%ŕf-!+: X.-G*|*`V3eTTd4RpB}1y;*٨ۻr:q1->H.'f@*i2w`r)'N=ɿi20P~f9Խ u.S P'M8umZ#xH_94xo]:_'0EG82]:t2fq/!ʗ6%;jA!s@TEND6qM s_FUMz/Q y#~)Bz*ZEd6rM8kIU/qKF毶l( ] {^t߉pN-$OU[mrmˉTn0F[~T?\BM jq yڵHP5tr\n5\ ݤrAJId E 7 Z3̠'?$d0x;ziZ??*IЬ2oÞkI3"g60 yʈ&*N[d^ (c1[Ǖ4~njZ0omV45eWuTD1s7Xr9[`t(#0ʩlGTPpn@TOeE7t4Cb¹619g纀: pȃ_h]ɶ'_<ڸMwR\$tAd÷ ~,\1T$`]o;|N7ER1{ywYWd |.DW9FDl졩iP:o#d dZ\ku.[hGy"Ɲj᐀my tE"M'8sVȀ9ͷC<6' FmeK"`9&8 ilo0S {3(aۖ-=UWteQqbW\#^ET C6u$]B% .{6]yAj#S?&-)*z R0ݽu@u$ؖ=Lf  nSf-]NLQ: p%$owHJiȤ׺+ LLn08QVH.g A <0Ubo>wU Y.9 Cv.=#k ᛢ5t*v*7[?5~\]p@\]7D KaT8T<@0Mf%t6hO`lȀeOŐxPH["b Rۑ̯|)y[Lm .Q7=3>ޗ@xP@mD ~X=*"&N6&rfpDk/4lctuuq2\]rꅅSaT} A¯丸Al\-J~U649 fP~SMWv-&PMi+ŵQO%KU"#q:*02anꦝB/- [KK`zW#:oEz䋝Rw &Ac% bBs[L\XI,پO4M-H^Hz_E急ʀz; 1o_&|*Υ2滪dHnaw7?TEjll!z!qs̔@MXbOUPuU_qirltow\8[lw{'b+ßNqM+I[AsUB T.-(wuݥPӵ[[+sNU.f{z("oTJE ,1*U*ť>wENFlo|&:0 lgAxaD].I3m$£[7N״ߤjmg}U!!DLbʷw(Ae €p )\xWa,صCd4brÒ6dFFs$T?s *=[R«|@QG'}Fxq(OLO? = *dH\? '5&\J/hl <Ø_M;Ɏh4LwLq" j*(:7G XW&XTc4gʷ0쨫[ܡ#&. "[⊅+۝uE]"I[QI! _t?eC@iR /%i vD#D[p_G']]hn(f @P :o((lz"^o9CI]8S[SĠ+^I%$Z5 &}t7 Ri,}It9l CJVRS]E_@~z /莙 -nF-싚zDL*tD 8,wVQ&sGlXa]AV0qesƺPM2.bq2WXJa tUY%PgP/˺MeU(C3wuQLS:c's|rP_aAǿ4CIkQ4EG>F]ҫh@)c3Y "46q@;j]o`rx.=:o4wDn6u8B;?́k@MsӷDt>EpUPB-nYP]\O?-/ ɦJ>`|YEf5Eg{Gx-¯H8C(? #&Ud7+$iGUKN0&b kwalDq# 벀d$F>hQH.FM-6=?QɤMV+/[Z(18(>/J60"XX&a~xiېd4s>Kiy]zA\ $^S3Mn-n5u"M1r3(GNhFoP9' ˣ!5;MBWy Ie#RÏF<'uCgirni1J\ *'#dӱB]Rl ;n8D,‡6 +ZR<LW?L@ut Á?%P#{J#quŗ }ECyE$nsq7#uD-PN:|54OM_L!C*m^ F˹{1+;amJ `8_^y(cbCUnԞf o{QO(imUk2[mM b*' 4SɨRqW4䤘G ~\%rTTo$~U.s;~渥ֿKw>H5IL)5:GxouVd80=86}vëJeF+]D$-q5%8< jꨎ,D{O!ʤK6. 7rl M9A_U-h$eTpKý*Z\|n*4km00dL+/) i%UWurfGŲOpM‡ L|3b1滺b]UQAq& ԖG e pdH;-X}FWےqi!9e.|BnS¼苚$ \ [3 .C9r1Sii.~(iP#0["lT٨ Do;̿rQ)B_tZ*w4DҰ1'P$s z6k:-'uLT޶RX.`݈SOS Nig q9sDNiN5*G5gHo9y{ܨcgrnâLI qM WWԨ8UV^)ki~ipv C&Bv29\o FQdsS4`9w&(+yW _EA)[9iȷ iꧻ@j&-y]恠-26X@@T@rn6O5ࡦ,"}T;`[(a T`}URg o[.&Sʤ6j: ]>/* nI\rŠL薟P-jÊn$z/^ItgP4ۇ302\BHeA20ۨpmL@L*Z<%T* X-]|(vxa LU͑AqC݈9 ߪem_ Dɾ Q."8?u\w-&"q_TA"Vz9F}͑&I5<A9NG,iQ%*4 2fG^t^S~ihTxc;l +UǼtK*BKɂ1? Mk2g1s\ 0M) Z(/o ʅCSx' 8ߢ܂X&_y8;# 72u5mN]leH/rA·S"NTtW_;g~vwEM7H6KS$UaU"s 7Und䭃PI"D.7}8bvKC&X麕Tր j+]wピT$x?ERwUwr[l k)~f=}T~7òÅi٭xlPipOB 41xbl.bH;.f*Zo(< iؤ LblݕO8uWT?߼GYʓjouM55DSmq0y]wa/9Ҵޖ^ TuTCFUiMZw 舏 Mk~ uEag`yIɮ -]hml/<*\ T]Աpfo8U:Fu] yJi6;"; .[望iMJb.ޟ~VxS( 1>i0muM>V7vфi6oD5 N$u ʙ3u1WԎ(Te"hT@QiiUw @.T+@&VA'<1x^A u~$?C3 8TeIrCGNnk<7gS6mAۊbUG P/̝L_\[ʨjo60@ 4_ k5 nn^EsTxEkO ?~ɀCIItmZpH 4hpټY @rʍ&Ka{1"5шU]D_iET{aI!wz*tˢ2Aw5Va#bx2#|7RN?UVh* |"vn]WU=`*M>de<*D—I:䫫)ccU@cnjN!YHE#b vCh A r)iNҚjlO*9쎳O_a5-sr!E4]tCu[>#9Nӣ#1FySH8N;qo!y.!iP‰~&WOH Ǟ>jA?%ͱܮ@ 4YP0fˆ΋B*.mБ7DDyDn#k(`KyCBdeŭeO,uR_;<&|@RK@6[e;U!dKn߉d_n†FV l `mS6w\.e~ʽ&7H*nQFQh +䆡ҨZct]UĥD:'bo>HVBpik[@[T97*ƱSi2k]A=U!8q:vson9!u9tR`গ!eݕ~5S9N? Uh$OO5-WT 'R:To IT|)&m9ӎPD싋auTq") :؁- }-6ʱC`׹ rW\u'y8TőcS1Ni..vK6PUc6qw5!k]ᛐ`޾ IU>hJ_*//tf,U˧m5ޠ)9MTUM0**0UUc%%N\q7eqSQ(T*ʫ!Wk "ױtEN%(miS-sTȎ8@h4g`yqm":rF  .:J#(Ayq< P^&6^"-˾uFtP6p3 >ڽ` uHQrܒlo:&Ty, L)mdrP?74-">& !׵)7랊se]=DsuD>ӍP-`nhO e-s`2\O!Cd+:'c7UDy_0D jGKN6]ٙp-e(Q\s0ŔC! ĪaKb::l]uXA>`-EmRiXlxe|P] s+q#ۮNOD)/ hq z 5ڄ h[*i丅A,XUPhߢthE;E~cSw-2e۠n<Dm* w`6dvCkTU՝^| *D[5͒w]%%=SMvt:+5t{´FťdyGNLi@29ab9aUXm7ld ÎHC;pf[y(l|BVYQO L{) [~itrs\nˠQfg~5@ ϑF7>qq^ 쁬!ޗU r¸fĈc {ŸϞcD<(A. jdHESMӛŝ(Df eT>k8+ޫ .鍧Lm|,Z"~K wfѨyIDWm"Zߛj-7T|;`^JӋpRI"G31H"E}b3 D xZW(~x8Z[.gN[+gURdd;l+:G`1c(-?Io2 ,|t[&@n1?e踍NwU;83 =f)a[*qmԆ8vwyY[zaM.XFM .~wv zl cqkvEy~o.D4F#H6GJ5_&zR ) 8Ts_?Ë$@?eL%P@PIUmUւǡ7纇>9KDg)<\ʦ%Dp@GĀc۟e#VoyE3>m"Mg =5_DXkN7_d|=!RױsA>2vϵ@@7 7d#= 5FUEL_T8qd'{ /Nf_n&E&|.u6#4󺁩7zN5 :V.0@P~I,l 35ݖkn`#@Yh  -mA+LUUGu#osNhi2vaTUP {^.0-쁪h{X )KEL]Ls"8l!|rA|ۚ/my]0)\zpMnk"Ng8݇xҎIf6ZqU8DemŒn~).D% P%<z)fUٻ>+xUӋACPu;ZȪRH1qm ^-6@ۻ Su Nr06n)E 9d4Y.MNǑ6'; A<95%[#JEo?ESr=N݉5:9GuƧ7"4gKyr@YYQin/jfjq" ]T]]7%M甫k>Hg(6nȆlX~%CrM(QlUW5 *Iw@h E\\Cӹ}&*M GPiUȺSu0*˃EUjCMϖꪏQbقZ]֡n^ _/U!pC |&ID& Rdq76WlV.SCW:ay?ttÀ%?*^ʩ+*D"5yx+cRſn]bd A23'M٨W2qCIA:m{I$ehysPQrX(dFx m1m 2b.f˻~@TTxf\DqZ32eC _=U!ƨxd G$Ս[rg! y#-(7¿?@p#)UBf(Kj;A h%%UT4y VpE%N3(ph} s m)Fwkmrn.<ӵt.+YxkS@XSeJOעP*K)sۜ^ezωSo) q\uMO$NwCM- YUFxˌd~DZ|[(O;v Z=] -#}F[#{͇)_~pWHAPf\NF軐\ORTLȌEF6@@$5@i%pr:c*:J,vFU6ͯr?mW;4n'MV1y~j9^!>Rnd+"D"6ʂ] L/~9ʃ2z"6ji?_eO<6&OKCL]O7 u&{5GfTh|% ͦY$U݃6_pE6s%lEWyy4Cw(©8a~EcM@L860qzGMypy/Ut?~MPvP_1K cj1WQ3=} ;hFʼnAY!- z(ud%ROu4J &*\,%:g--gdiwU>r<'Ґ7;~!*R7M2' é1146٣lݴ(oLcܮrUzuMG"T"rw`/ 'x*Uz"$Fj歰FE;߻+9)w*- 9^#EwMaq&ni6lKN MZS+$.Ov K|;+q;<87PR<}:#o 9r LM8+ }gl=¦r0 y nRV"#d_3k.g%[j=ǩ)GȿSRxj" Q|Rx4@iBąNquy䢒 De`y0OK6S@&뉎aSnEMlm'>՛}s,pXy!7$^>Xn<QU"I҃T'(U،+( \.#Nl ^irvT1hɌޜZ @DSq, cF!UbWuI1fem )l{5!q!s0y{ ވfHY_.(HYݳ訏YUy@@6R VFF! ;gd5w`z*Gڶ3苩~hZNJ<2yBj3u3MvB! o65|S4Ecv-" \Ԥb/u"IM-lt;qb$[aL.&۪;i)pTemKNZAۮ|>\ӴփM$':sF?.%WH&&3$ٱt0f-eoÒ Ko5ay,|a"s/ph`n-9)9$X?/$j68(^fKTOYR^/*vr\.zTwc=>*rjɽFA k64AGM֌*b~ӂ7b?RkaSU s9)v7þxU |{61;r5Vam}G/ 'jĺj$J:]#:Bn|G.;Aͣu-ꆳLM\c:D:Zٌϔ"8ϒ)]C[c,r[LLӝwzW6T7%NRnzH * T 9uE0,eqT54FWx[hOr eHoD!BC|*p<#gPH mW!qC[$c;TT+J1Kga])⺍ꒃ M13p1* Y p **4Ky H6oUYaXU2JO5DoDIӪ(48_fmSúN\;m{48E;ES:dM8qp;s]c/'}`Ziۚi'i<5K[&&ߪ!3i]YPtP6'؀5 gV 8\xhsyxg3PUE[ 'ҩ? <&%˒Zl~- µ \Lo'rհrQ$AꆬFUQ.<჎hV/t$`ݾq|pdrvU NwEo d mk'/8 6DEcB)!5$}Uf𫙾q)Ɠ'Df*xHWrF *(M,p$;=s2*|) /}iJ ULJx^q7LO 42T&nto/(>hwbU[ 2w`Qq}R[\N/"*4$('R[ D}QԝK*Km2D)Q&\sȈ?QeVp>Ӿ鬟$|hMp<׆ T܎j:e*k[nӈQ\ÆxfȀ`̦ $TLU qO u@(ǘݪO 3#eQ>.)ۜ@ NJ;SŬF5 A*4 T` :֥L\78YxnX@8$KDD\!K-rHo r];MwyÁy@<-Uq'dő3`. C :zul0A_?%:a;.rDʤ#yTHucbv* ̕vdX OEUҩx MA '5ؑ@/0wW!Â/`6Qpɶ>HnDI1hk%O 2+W %CTńoAR}UP[yT]V AFX1 p wK7* ѰT+c%ԡV?4nW/aRq ؁5C 3ǿ(y)Ad>$3<6N7n9ePq|浛zŲCu0#7%q7"86T3[/TU&R&mi$\jߚ:nahvVʐTݰ6ouI'or≜HDU 3gt -˪z NwSdrFHTs/qKJHi׿5 .$=E^%rQ&I.\& pE(dgMd. ol\N^_Q;`*{![sGuT$]$y%KD:oTˋTA;AD:fZjvxq\GL"ƺ`o IUD{>gCZR).ߚt^)\N% !Pm6j3襺qx/r\OK۪#o9KxmHqx;!CHN; DjLq?VIi8Ijd"ClX7iptSd[ OV_P!PWoE2C]0=4KD DgJ-p!qAwR=eq Aq(qnB pxQs}_?$KY~v[U޶EBcX)oPdnou]Acݦfϋ{ЮM 9L[tda)kuS .H\[66\0@*Kٴwdi@dM@5x[5 #2d8Zp9EfM샴\m5 /u>E$j#3% b%p)3Pv(:cg*hW8(=ԃ90I1 B~eYCQޕluJ/2/iϟ]R ce2HrnE| "g */"^-5.чi7j4cP#|"4jʻ4BIU`(4oHG,Jpn#';>+I28w.&mh fQ,nm0( ¤@EJm|ntȜ+:ۄLUF3(hq>77%@!Ww&9o!ImlKy]AtUQU\[2|}-x1p&FTgMmf|CESӊYꩦ1|7ؓ%7]ʝGA;|E(gٳZTy@.0jH`%K50<; )Tj;{h& O"`ZITwĮ#jȵЏ¼<UMy{G86ϔZFq 8(wRH%mX#3^U|g /[Qr*(P@U =KDs%h4ķ-%KG8<^C0*\gTIUGU5 AheP]–rT_P|F&fu2Wt+7W)4%n3W|Nw|9ט\U^G ]$4@P(̋8RNs c}❦ A `:UDU泵 iׂ0{s&k߹FqT I( &O1{Ȳ|]Si.Qm&UیRwRD u5A%p7q`H^ܢ J%X) Hj.}<@7^7="|? &>o9B>(M;u4sզHJc[;S$ ܥިfpΟ>:_{oc" %[Qޠ0hĈw+YP Fxjlu]x/Nsy*jO-[* l;h;w]BUL*YÛg h I8|Hb|QI@D sRbʯC˅!0yDLgFxG30 NpF#ULvZlmYy k6E;M;|Hʨ B-y ʐMzDKwϚJ}Y}P}6TdCC*:<;,cU]9ב#}| @6b kUu^t.0:^iܨf R¸!0Hv&MQGA c0IUH.cp6)oe sD 8r W t+kM!ag Tɛ{M4rvŠNˇR I5D(g E;Yw| _ߚ2ݭe&R\B;#s]T9it>2g!R4Ю{?, ċE!$]OE!ؙ~k#"!T.<\N731K"yZ4-wDH lyn,N_\+NӑQ5Vm򷿒L `Nph<%DZ"#)ڭqrH\C;AQ\E[xٳi(c]G,i0Iͽy jpcMpEېFHŠzPxu.Al"zZ 3dh_ 1,pQ{- <*jAI*@?0Ht]94ޗe4XʤR,0eUNTc* IB^q4Ke/nw/rus& IA61NLco;PS'ua BNgg䎕Mo|m#ǢsdD|_ʍKŌ*DE&3 E;#S@g8v2pT :nD`GT&/GMDMT]OMfLڝ#ʦ}%$.x቞ |{Yd*ˆw9UdĞhOD-©HSs:6P庠3di\Nn C[%Oyh5 ɏ̇>J$|Tf*IAڃS̪8MkS6m?<-OT8jE` AWFѼ%TU1Td/U^& &A0>,4曼fMԘY$  ^ʢhM l:{TGSlV6˺:kN}Zbt\U,k>k0!O &c529JUHzю-,@"m%Unӊ&UU,A;G Vwv ZꞼ쪦BR]3ſU&JJ#SMWni?7)0v6µ@Tx2 Q[ixx u 6tGmPRcK9)$=6U83^4OS;duf;n@\:㒝gmAN E7`'QAUޖwNXS]}98(MIo#ȱɘa$6nZ's֨oD4lxn"?[*6PFzh",Ts{Qk[}e߭ы:ivbsv3Stŋ] d7q;L*ktXG4Ux?%SE.?UxOLYpxXO(_(S]Zz&K6 )h':]8E"I`Zt[]66`R-P5y3R @-.gQhYR6i2q*7QKObʡbU@D# W*>Z@ylWC\/l&/LwQ Ж! M?lDAh&R?vBG :OTj)("o|mX}:eQf>& A\F@LN1uzcBFe'sI>d?xfO\RMM3c ܧj:ų-v5j܄w诫 %Do4֘QTe{)i|sEU;y/D]˃\(܂|0scWPty*:m_|4GRU#"~(|=$y"Ky!+F ֲBH8*7栞PJɲ_KU HuhH;4 }z0)T bQaRGVxcFidr[' "vGĸ?US{%q  G4N;*/E mmWwDu&䜨: ʫLʫ!3a[mTcbљ¯P>/v$7@K[T^Jlj\5p%$C쩧9M$=ݧCAkv pf ;܀5ce kUTUvWEKE+Pk,F\ {¥t]SP?\n&"oe?đa+ԿTSy$KgZyb6V@BշEZfX"*u[r<"+a;uAHo*ʧq@Qr1(sQ&溦͎'ɗW@w^iؖ܁֝rB[$pu_>rM.4ܔGnj6w򻒎[NU4ے"; ZHٞͽb>-\ઞ֙QNpfs?ESrQ%ۯQe2/9@`nfp`Ja;{ITL@3a@O)F跾ݳ ufc@:CR'xM=iBn*~AdK QmH_ DM!xF]CKx8A{W<"3 Ŭs.po1u 693*yDG{V-Iq4PWBktb7<+RXP羑8RQ:zvDi *PEQ0sK.DvQ9G@G)USE7dktP]=eH+R8z^ꢒ'PYXCw݁q.~jG4Q u"y7rkl?5 9GMαtVj\Ȟadbr{&͓Saۚ;tf3U9|.joh~snNI lkwlRInr,[g8m~H AET5֙3@lqEQt^G NjL~Kx Щm;UKKNU.P:KM *\L]rtX]$@<=9BKr7j.NSdK  B3˻2#|kEd\rT RKȵqx@*˒w/ Y[BB^VF&'/7\wRmѣP\O4oQILlxg)?4xgeSu+o$kmR ALD Tߓp[ÕއND55 1xU/n'y" k̞K ߢۂ'UvUZsTTbGLD`+}S{2BBT*i GJI)PP:3bJ YxoX7NpӧF̋]/1+k3?o@`A  d u 檑~wBUz}PoẤ4yDԛNoza~&"QhBBm.j-ӷ~źݱ i\Ocwmwm3Lje[?Lo}WS3* oN!WtSSa?0|1256#Pߛb/*d쀴#U:-"QCPR÷G\ [ %%oSPs 8$ɟTC]ebU'aSHCGOʝ] }1*TU+3,6~B$.SXꫩT@*z.0z%EKǂC)Q"k'|udJ`~)BUs%ܪ7F."/N?g#B;Tp3.;aΙR'%KE\r}U1Yj ċK[豪ow@ y%xu:n.K-srbJa8iSm';X̍W *Y1ȫ52< pzB gTw ̯TLZ`(<*0vPmb_.8a  +n"7VLG o~l:Wrۮ#Sv i+Ǫ%L. ]us~J-*>'w*jU]mˍM`o(n HCmrvR@ۡ"mT Cx-Tc7+ šΏ%}T6*DFTOlc7_wdkNW `xseiODc( "LGM&.qԢ-q+Ozi{xNʡtZM}еm+#NbJG2nEӅ,I?E$Z7QL˙iڋ,t{*]@*!ifЪpFD)4JF]&"Z\g%;QgT6 mEx&b1]- AENDǙ曧.' 3vu(5<1z$mbrU9=e0]md汵n,79ŭo\->pQʝ6xЩv#2z rPsDaMwv=l|^FJĘ|$y{yCU1~.bC|NSE[ﲸ&0,Sj섃U~+4Ȃa잤(L@pWrDq(XTe`*~r&#T양[U'62&Mo[.q0dtT@ %%~o}P:_n6V9莤ޫTZgd>m"ڬr9P}1ɰ۟UTjS-#|!T[R1p Z _P-M#[ iꣻ6T U;NDjXuPG#_KnݏW;)#$ %&TgDE ?U >H=#CrqK\B}y\\M89E9g@ |O[(z7MexjE2v>,ZS\߳jb'u[[`лA 6 7@ml{@%XGӖӦfsCj) F95QcLl|֞$;SLHߔ9Ëڄ Zᴴ̾b9.~g3h:D8iͅ쎔ݦA~9@M=vٌ/˲ <*po 7M>'[uqf<R N}?uLHuw.,LccuC`_se|*^O; 4KbWt֋oy}jNd+x]* 6e_Km9ꫪ9̃Şmqd(cSrP ! #T]nK"TF ۚo#ӓp/DE,E3L>2rK "mrfn![Ul*,@ ii{s)-Mgx&8}S[@H[(.d7~o7沯Pn]nh4Шa s"'xbKP,긦X }j9wv TD( \{wl IVAn,-2 U^q%(ok܏_[Y`q+,*Zdȼ~ʗE ( խ%3;Tj{DmQQ>c Q E%8Uц2B2*!"U;HU@JnP3# Ќ#PM#5QoTq*eNWB7A{;fah($`*cmOW-U\8QkDGvW;F주}:R /'<9d6K5/Ӥ]S\D|?Wt]nL&CMY&>d< ܔ@ؐ +q st4J%Ii ?%P'(ʯe9p-&/8 *"[I<t\wF']-ͼvO:l-i&08 qk\U>8z$u)<_FVh6[ h}rNv'6u ;vU7sy)@H%IwACō.u0o7wȫ aMbDz ~U cPR˖*5 mkpl <"~suk:npp;z* C1HMOEbQ| E`.:R.٣*Ƞox +5Rr ji:n:]?&U: pq 即5sqZHRQc|YI 8\LφT:@i1.N?th*JwcZq;HR\4 _SCM^4ɬl9Ӹ%z^aVR\]{*F˻x)︀"A=P,3i6Ap6Gu=d)䪏͐BKU]Ov$8q>Dv)~vMhíXFVjUtC$tny4pj,rxCLR"F]k$ܿ\Ӛ6&vQF)cN7R>3ӆ -_DU1q"Ad~}'5Թޱo풻iU0m\:h->5tDG!`ɤ `r($~Ӧ|;E25!fnqӪk5<IuRtZBKM䙟|ڨ~$Yh$u菳xuEW杤䈿'iQiW刵z*Cv}ǝ&8dHG,#\1ŰP/ˤ[EP?+ODmi@"yDg8r'#r[byM~aCh@zA1Ҫ\-F=G3lTtݣ߻&)g_%A  .9% Huנ[%1\DL*'ĩ4TxP~XEZf kBAi*u5#U9Sut. dKE i&QiF}.nsD=9<}P4麄eZia_Su[iG u@n_Uox?죑ʤewg`5 Qh\t+gEl 䟚qu@D`*sxtA'ytqX;t[\%wZLU-xӪ,2dI% pb!@Sz*<5[,JHF"d³ck抄ۄT3챎\s5\MUx.p+Bۓ]UKM9⺨YSy\2FˉCH\_I7Di8GGQ_R88dt<u.>Cj7$Ci-A nv#wp̂&WvfQ_^Eśx[WEE"#a*`vT8GU lh.yX{eU*.VW%wI7P>&Jɰ2i6kU OG7ȸ MQnA 4ZP]spph0P?+P1\LuN %gmU,' AMb-EjkdR!U8RhxyTAk/k7_ȸ7 ksT@tY%k0~HihEud9&|Im2#p #K>'Sn0XXZ)(4xc {|VxEQ2ǚkV#;@Z|$E,E(qav@Y>EԀ\wt0-ꞶUDbqn2&e_c>WO6GL=æ7Qx\Qz m*AD 2y'4*5t^Hs#b=Jȡ,'hB@t2xD(_'izO9-7D8Ϣɕb H7lp2g5݁pih*δ4sAS@871e2$\ϳ;PO m"Se}\Ow-dsX?c;AB^tZZ-P"m2o1^\ T[m\N) qP"I_#Ur%oce[:, `/ tdiW(03Zo_zWq*W}\SvKéވh;ORk>KZ^}U xDD3piÚ`mE47>* Ł Ȫ/TXHpuM3MsyD[>T g䩘s{ms|Bc\qM`1 eMV~t`vj\ Aphű^^‰oZ]Ѓ9"A7u&=i\?\\/t46-aKsW8K\}NbAb<7Rx=Y4CGݧ>W"ەHUE-a{;YoDjqͬ~P!Xm0D{7԰G^kQ2 q U[pɸP' ut]C৖Foa1uFtsdC~BZ]U̜U1c L wLD<@+Dai f'`b!oJ+VN\yZ^) xq{Z/4o ‘R$:E);ˠwcu6$ 54fDzkʭ/5SyۢU!>{s `^d[!z`|:Wn?&, A6h״nF!;&0bWᵭʊON{[r?}~Ԙ$ lWQ́lGMԎP #{99PuqW Qad@9%IwTo2aP/槦ʲ&UL`"n7J-UVf.00HLhs1 f[¬.JǢ?苙"@j+mB *5"oml|g n'(rtZH@Iˉ8xDs8˴ c hS']l:4扨>Tr ;檤q߅T}&f\#''1Ύwo M:Ò͆[.:z*1Zg]*I)YlM[W&o|9T#PHHF,d$O8N[]81^[ݢ .y^F ;SAΩm~&ɏԠ-FgiLxOO #'tZclv KFGIBFʨk;]5 ukDl L'qZbٜhz=IB )t_$if0i'艩Dï*BoiFeߑR !B,"9u⟀tN=h2!=&B!$p1$(5xő@ 7]rz"yEuD21o\ NyYe[ UUÞ`Y 89GoՏw#]q7R~44tP0l(jk3SyXmy@+iDFUM/e[MUW+ԖakD]g*^28~=@~SSuß :1cW^jo]D U$@«B`Uŧm_(]QdM{m!Tr=Qd\ Bw,8xZ/$T>'@l݃Q&.$p]~HօNxQKlZ% (*16\^*P0eK시6\SO\ paq8x/\UCd#ÑCtb i$Hk%؛"~D^9;Dp(7L% #?V TZCLGuZy.!>$LzC<$*4Ǖ򅃳ěg <yG bƓqy 'mrڌ do_ Pxm$ߴAko#/wcJ LmL֦Km޿LY V mݨ "V+QcSF~/T}'SG{[β>4^m}Juuɬtn?4i,SƻLLaGP!?WwCPyJ> eqvRB$(.0B5D~hkeg'R|q;Tx&<> F#W3<э R>)œ B 5FߪykIQ+7\xmo~"yD^ׁI>uX8V#*a4Zv(-3mCOI \iЩ:&OLqn3HF\8e6WO+rWD82㱷E.wqH0FmH+b, i\ a_ܲ%SqKC3Nm'է)#8pT:rmDԮ_$R-odO(=UIkDXC=5BwDSHJ%:XwVӼ*-UZ j@QaF3‡4[3b3kIQ̩u0۩WfK.C(șQ +K'{LD!HH.n#00:(d*`8P 7t?ʀʳ8"2S9'q̐U'c)9NHR(kA<5.dCQ-pE[ 4}==^+$ĈSI8|ឲn/q0_6ui ʤ⳦,(iupW+T(<9. ?{@u]EC-A~P>M-l#ߒ]_O;V@144@wj:(px2E?Vq1cT8v\Y @NwyLH-MqxoR'dp6+`Ov8N%wq<Lfi͕sp7jm;VMɛ2eItUaJPG(J* ZʪFDT/͡qͥL܀;oU!8j9\gJFM#`:lGn4yC];aINHꥮ-xT 4hD/e[t )-uA80u0$]TEexe&QDEϒ'2eBxJu[ZB0khӭt dP!8n)㋞AZ[ryT❐w--H&5_ہ'7Sy7DX4lKF|U6'#dCݴeӉUzEem74RH0T;?}f]H$u(۝K3 k6im0uc$hP(z% _C0  wR^@*h$`[HRpbSxT!P87 bi/]Bt?A\8V>P^gⲧB}E# s/AiĔ ;UZ/ꪥU|dWc/.ʗcaR3BVhc bg'` 񺉉{ٖw 6 ONKzB)iUE7{-K꡿SWg p$l5akni8.{vu~^]ܗH` r^Aij갖I1||5싘LP'I.鸰Ңq]UHVrfe8X\d ~C&>CL=UlYxY~Ҽ_"G\m;KyQ&&}$Et_܈$4VcFU[zQw@R3e@oFug~?ڈuԸN٪#.테kF{Z6VF&Jk\8 O5)Ti=+mrFVe\Q+ 42sL"FGuP4ь+@7vUʝўfNlE4uQWaǎAwS&oeKZ|1ꈓ80DIC` 3Ӄ\K>zW /B#Vyb4wm5c \ sjH#Vp͏wB!h& W}a岀(t$ЩZ&2fT>]4boյ&`O$H Ewww T{jo#7 _P4U8uW"$43t}uRG91#(,a)5 I]bh-Ye?SɴKV7P⠋^j\扷W(m2͖/aRَZw+~n1+BUlv`˽"ֺ"8d bGQ%0gk+<~J lw]<ﺨjy)u샦-UVn7$C\ *y *aDj(;.FPMZ+ u8&nD HqL)1υE`,LH 8 ď=֑h'a@3Whn#X8%׉|\՝XCxq%֌WH?%U` O$ֶB9qDLACq H=zT  7L '*cEԷŞm*١=Y c\2TXm+hkYaeñr:3TnZeYu1k4ܣKO¨8Dط-Pzdu;Lc&2UD|;[B i<^6v +>@sF YLZ&- mk& "9p8Dqm{M$-P*K9Q#O/0$U8o%QlIM*ZgK]m6gGEy-orZc3'`T6$ P&C*{М glqogTOj #ᵩrĩtNQv}Q$Q1aCmT?E:KF>ZZj6>vGewӉ;&Us:$_r耢:s10l.lx*ϷR4׵a_AU|V†:Ʈ +-,)U0=BmWl;o~<@$cF^eF*)j."^&SK.|@E@žZ#V&PɺEac|*XmNN}ʖpu{m衔[oU%f)9V| UF+D B6<tHiVA GDťQLɏL,g w [1E;% +?%O4ݻRfyxۧX}Veݹ;Үp7;( ^h,4݇-~[} ,|@8BgB D|GÀJK0_5(7fK~ |Rʿ,.q4 8']bt# 2o~o/aGrs,E-ة{)kmuC2=[{,:b;!@U9ĝp續[[*_lbaq~ؐ7Gq-PZVhwg6^֋ULod+Ǵ/p l~J-*.Q`=Pf֨\awmCwbӈW&sÇ;m0 L#ǐe\K]y?DC$."P2݊MokKZd7k*;.հtFB74N:&oBa]pF*ީm:09mhw\ D.Æ[5mZs<_ENAp>*&nSM \o'L$yѬ_Th05h N䫻STN>u5fH# 3ο$M$fJOWm#pBvK_@w%*N܄¨ȸ0UV%~УvJm_<³}OFk|M|ǿۍp4@<l] o )Ujqu=,P.ۄv/gLO 8T;G岰k*>kc_ Avcݑ:jB.;4w.ԙSj"1J8+2n^1d݃N҄]=WRtЬdj!<~.6Od d].*eq rVEv:yA-k>]W37T9ZU,u3iqI ERWVl3L_l+c+a{*{Z UsA=i̫{D衭"bWt\`ʓbu'ߒ.p2 w`L҇wk\` JkGAǒ &M GE:y|Y Dw`~V\% YƢ>%![[~jHt nvCHp|4"^o%('7]liV)ERZf,O('kY6- wKDkop&O+BR[ik|ivrT;<ӭb STpA6t ̃4h?k{(;GH]s7؎PB6Ug~HѴ̫4ޞ^:h05\|7+ĩT[{h>Gc.Ae@;s^7U:ʢ Yz&U=:y7Tt8Nͬ,>S60a ̙ۢب_䋩A彐.а1 @N VNmt)h'5&@T(Б`Di V.Qu3zD qiJ>H9]UOt5^N'%{g|".z"|k띕/wzFF:"jw/Wm% I]VTDOW̉o5I%A:/1;FX&.Ž6{lVwfll-.^ɛ6CA7&{AncT3OBφc7C ZtLg:P{.?Q[kV\osRS7I͕a֋QӒD`N{ 8i8Ao362S[ֺ$OeE2WBulDE2BF2.( |&UUas&v+E|AE^ "LDc#l ˎ:[hT&ES>/RAF ]xw :67@f* A$"E05|#m|(^,P"*C7PIS!xJ䎫e'&6hɺ9*$8fuNw v!5 & vf2ĶrU'qU~JG4KQj.RgkRZ87cLcwa6 mX)wMsLHaa5I/%HP|]RdfTINZ6#RGDҥ 6QP [<[{D\DahkBmx(c䃞?gIM? pC:,!kF'Kj%ӃOOdr>ă0Ё3uPlA^b]'Nx#(n5^ˉ>,A-Go5;$uߧGy7ENsʥR$* "OEԑkˤUׅR9RG7U`d\ 6wWlmp` E 8`hL`Rϋec'SxN֓H^!<„"CȐ?6ʭN [tM\>.^O%}𥭦Ҡ N&5T |Әfd~p|0 dI&jH"v[wn4Pg< #+YcuXJU.Nϒ{nuEmx(vlqtt*6tY1U.+uNg|JA!"w?K[&< IpUL]VJRI -yEC d"'8476BMS造iګb?4[dAw7lÄCM 5_D[.tC O>_?4.D..:d4},89z]Q/;{ aRyH6wH R!5wST.}ynwU1 FtS@*4SL*Z)%ז9JmoX\r@9ԸrQ0<@^Bo ʢJN [c1{Ny9%PaT?Unr7P4υ@!f |~AGRp76T>\ 7{(аUUPG_@cmamO~ e 8L4ݮg^y$ap:񹵥S1:Y֔bZ9ݴ7LI!nY}km=%P4Q:znsAp6̨RP9y1W(S"OwU`z/qq(bϩ[xY(tTWi%~!Qhh%weӬ_nG赁TL{xZec0{250![O&9ʧ<%9q_sLRr7m`2F‰po5P\h$vq- zUqEH Ă3 Ub '{Yb˚p1[覠" Xy#i30CWyi]~#yX.7&{f=(Y¹&$;&YأQ" @ˁ *8{8E Mʙ)b%I7l۶,`XP]X^:7bG' xxAPax]P!T h_ 2LP;tm6OO0\s&z,l6Tw/q@5L@;  ##KQxt(΁?K~ n4#%Վy.M?sHs@6ћ'.q3 7OsG((5򐃙i.4P`s[qH`bnJzZ “yU[;U\|X.Èȋ+5ݾ8wt8GJao=}q"Ff7H,;{[:|!3.MaҤtnE HTMG ../RiZLx."U<\11k)1I1|q글FYɺ- 0'HG iďhmRO*j.?E_?"R TK_W`(k%xog2?:WW^/uQ2Wwm: ϷjO7 CQ5T:QG Z4 +1=l7mjڿE3ԶυIbDӑwDw}Q(:UDZ}{M*o=Mq{-gi?_I(ۭcϒg߰۬4% n5l_LYF5C k#TExW>xveMu3U;Hfr#Fs2fcw__ ʡ%Mg9ES5p9R:n=N9ǿEPx ʠU wb~jW̪IiBNAEUS5f"l tBPg-- {~<3#.;&1-!@E7SAnT3U:e۔N|"b*CTb@;.OϿqbVn*sdH%ҡԂ/J9]S'(C1y+9:s jHl{)N&7?Nbb eT$)q 4껺U@[#BrTn&UInW-uhTן.Ò"\OIʻX"/ C DF&WxTo-PoTT1.`a2or\"A\&ζUR[Ϫ'BfT$x ˜h m.vōP 9eRAԇĩaU5 0D rv巿V'n~hj~ R\DQNk9+640 ˶Ewmv&m xnu-k@hPx ٱ*Y]3eBO2*4C3_h:0ѥ.Gڅ{.7 " y-Oq]E u_mSs\Nz+ \SKbvJY797(o4[!T򧶧 'uI rOY \P k ?u3Sp 9NB6! -ij7ɰTo(rxUG2(x" fȆjp{\HwD-NuL] W>%71WcEڮo,f@_lR.9dt[K_wHEl%mϿ5 Yb`dA> 6:’nsXǕ TS5~E1k@㢃lw挾!p] 䭢-$eU@#}ge1'`LDW T"cMl񻅍>X ?7Ecj9#xn9'iꁁwtpm!"J)Wb X:a]eq\-IO†(!B0ꍅQ[B rϋ]dyԧ88 vCT^-cƜpsTOx/r@ ,Rٓ`0za73清䆓>Wʐw\FI(Qpo]HǹG\O+Y= L]@!$ J͕]Sp$YH#(yLPXNH6=T~d_M쥷c-x~wPu&?7#%54"""'u kψJ7 >w#-"G+|J~9g=ͤ毤kKflxmsHiS oEAE J FT_ lfWu16DRmm-oNvT~uUH=CuTj3RaO䤇;e,*{D1t\ 28MӋITS]v4gOgxgF7RND;ʤ/kaU '؊RQTe`UUJ?㲊˪o3d.!=`JQ1kB8:mNR]a6 *a @`vcx A7V!RoTFɡ7P}UdwcTT46?}F# ƷRm 75{_)m*aJjNnvc tnT0}K[$]/oTA:PG[O8R1\nLxRFaxڏh;%Im#S"55`fI94HwDE7j@btF~Be-l(;MRꩀo.M-E}O)E-sF wY7%bp;yc] "2K#c 5-"m M#f~$|Xhj`nK _At&Dxiw苃7Elɧa?wE*jha5v’u c?4K NjtZ7q?%.' ;*K#WMsZiv2Cŏ@Iyi4!p$zdH?Y\<-\"sSMVQ}:]ulxT2qKW tt.UNW?eClw7{$]ގrۼQպTm(ղl:9QTPF\]vkPt*ɷ$&FXsOuN3/8l4ˊ4㚻E!er ٰs5vOXpL./ #1I4k1SYNTlߚUiAB[JTyO?d5BV!7 UHe puZ 8]Lws惁ܔ W8Sv\*wS=,e_~ESrgU9G#rV$N:q{Ϛ㈩6q8Tjpv4˻tPHMK"$H; X85Q'*i"nk[zYl@_Ӄ\F<;X h&E縂]+sL涘S᲌GE"^ΦitF׷iIl8q!s+~^Hp&7ت]kp8HZ:t*/bCo$ZFvUvUߓwN&w `Z|JX@TPc:Q \uDsk D [tH q $. B/qkvU uvTmj!AĠ\EǢJ q- -y]U˶mU@OYUwzPPa4#(WZ/a^/cjڙ)%k]7TNZbr~cAap׏*oj3h% 8TiERi<7x&DJ5; LmZO%HԟL _ [s5w/piTphZJl*t[~+Ibʢ3ym%KovDEͿEU߉IQ 8:i&Q>p 被Nl.rPj nTo*;~Ge\@I}*d*vF9ndAg™Ox摘>RM_~,LxdeVZtNlvcx~K~b ':P.XB09H_Tw@?-k\c"-?U1eq1*\τQvUzS9J 𓒉hma@yK8XVvr<"& z|\|Їsx®*nFAT_4e I%p( VlConJZP29\rP!*jNcȘ_됪dFzsbzGwꎥ #RZ.UU=C 9ⱇd!P(AmW.DYۢM$ٹ»ˋ|&R?uK=A*:*$Pݺ;Dza?\ uniܢ־c'bluZ x% zKrjU{滧 L-1~`b6\iPzU-T pـg[lICm`uwMFW : yJwtў\ g (8@pDmCyuhD0 ^w]SbwP #p')s|Y()2dHRcd[!cÉ6'n'#e[J2e텋L+4CnOESi]'$H$)H@L[S&)v U(>P״aEv%&ÊkgTArn'R^=STc \'aꉿ6ym~Jp8 wC[K48&VSNoI 97C>M#q'#Px;"FJ.*kRgUl* 첆q+[O[K|U1K\f6c$*dj;jO&l֮펁8\ײ\ZһA0FH U삪UsV첺 `š6tjJYN: tgBȨKjWTv^C/(;2Q dL*LXM~86Fw񎈇ӷ l`E]>٨5\r*\(Ȧӫ<"`"8GI*47 rH+LcWG59Jqs{+'*iJ4lFAGWB!glv=P66l khE-Q-U^DR%JsKE5H䃃no[r44`O!3( {dȧ2]m$*\EQ{br-R]Qpi (t e۹~+?yUbp@7!1.bnW>Hkx0~Sdˑ I&MO)2}MSF'eS :K]iTM$&EZ,1c"o6liE9xBUfQ:LB'J vF;R]ҬpFSejyJ^Dp0w c<ǒwDSAmkQ>ʎR 14ܠ8 ܌Ő| '"E;u83棻қ] <YwQ7[wB {!9.,d)_ l4@44t[sI|D*~^K w>[P.qUXn ᙫrtlnny*'Koj,!5GUFp{ ĝNxv ( K7)p0jsB;)2CQ?^>α3ł&wbD7D.R4 ;.7W5} Oou`R)fQ d%Tުu&U~Fd칹8v3IuN`#<,Q sD5fwQĠ36fmVk'(mT5w.^R4φ-|9u-m3 ~/SOYDɫ e*4<8L ԁk654O;^T܁yhRM(yTNjˇD yi6}3y `"W; ĜB`|#HяKG;DNQ<4nG"D ߚ.~a  ŷhw!$^b hasd\J6c.\S ѕw:F⫌P'5㊹K$Z]ۛK$]v`UFB͓Pr.貞ǑD0ߢ*[(xw.B> +nẍ1hS@"wEo(]w9ǠUIW^R9n m*eX&dbTS~yYEΉmvրsQuTmʪ*]r9w}W vQoKYHo #?GrWK6|Q1>=;1@ߟM kg>_vxA{FҠ/p<ʗV;#,j5Ih_g wKE UFj~E7U@9]Vc@:AzA}V~T[qWxYgK,YR*WC.Hג &i`G-vU]onmJ%6%UNpN9nSO0d\|vb2N- 67}U(TDl*a_r%Ao w; Q#0tܜAdW?5S@4_"tί 7( ;ôrxlx䨥6:wFה؛*H賛c\1Mk p|Un^ˆu \UE'[(L!ˏ1uE6=N6Q_I@+yʥò=Q=xQsrE_¡mG,H'7^MTyB5lb혅o?U?;K(llk *X2쩬1: }DppwEЄi l&b A1:GB ;"mR7:?,.@7Q_?wU\|0Q s Tͭu p6B33P{*mnaZ:)&&WOqBצ$ջ"Cc ' s*ޒm3t籎ỷ0X3R2:|DSX-yXl x\6TTT,\0: w fZ\B[$sw:l..CJ{0&D Ubk*̢{2y5CG.5@>\iV=$8(5NBJ6,tQ <ʐ~i1Ey 94ND68%|.nMC^gмC8GQ 0/ܽW WAQP])-Py".:uLs7ʛn]_<.#}n8»mٓF%ESk*7\yqnqtwUmHXTi٪#kgߒ nZ]-iNQ S_;ʹ§B:fNS`34qFA_7A#[@;'(>qX*9uR=hsE]yeI6ʤ(srݶZ&\QNJ# ^\Mmќ^Qio(o/Jp2d;UT rUUecsncP.'#&i؛eKjso:oQ b^icĆpꈡjWA5߯KW;UJzaVZ@;uRtZcK#{MeB\DI i恋F pkֺŵ `(" 6CDUt[FâqDb؆)]R3S_f?O_p\CED¨IP\G.ߚ"Po)kŸrCC|C-lH|_߲~Q=Wy\Hvʝ6xV&ʍ>q"3Lsm lEwzB꿴O .?f.q~? E躊YSe/{+7./>@md*ϒ 憇4@*%;T͛8_=ސ] FQ/.%D+ ] [)·!ŷkp軼 ֺkp&cc7 TQHU>pGF.D)c?F (\8X^)k@5e8{)"nVTH h$.RX%.p F<$T#e`x}7.O"nߘ*pp4ȇ& :gT`-SN#eȨ _O-T8V6SSք> MDQdwfUMC9S~͢ s#r2$=F.2b'B̨ qwz4A1Ҍ2D3(hͶOwܹI?(F|UZ/%;OZz⤝E䮛)sM  >T Ь 68M1MB.Ùyl;_߸RM͐:O4D,oﴞ63:1c@L k;]sɋ+H>?|sPMCkB8K2CZM!xy,8R*„-^QB;*F XEq7quQi(Wfڻi6Wg4)^RMD8F&=Fp UP֕h<#S$?ۚql f 778{b2kLU&/3Tijv A޳~]߻"@AkF5" Fl om\xz:d|&0snv5gªuu״sToPEⷋd\ BE LwZM76.s[ <Ǒ/תdepJ.ԹCPk[ũ&nq8UDDDEEE.\'@\CW#c|ВAUUHUUs j* CMFVذxenm-"}w=8Ai5nhP#0u:MB}Ԁ o4LӲ.m)hO \r|<—zQ$/kU2cvUu/tҘf[+\ڇCpua[s "[9lhA~~``tSVf6KI3>u,terc]%ZP-/~jܐ_8Zs(?M>ki#|-l|Lx*IȞ!Hn7;/'PCbЀD *ˇI&k~l[+.f\L|n ZֻSPgdo0Ty MUgZ~dmxhwہnт?dZ}@CftKu#>i j*z2>k6+NuPMf6.75?E޻ G8\/7Xa]x,7#KPNUGl(UQq$kɈ fb:Zt0PK vw@.\i$TNiMh54 ( 6Ok5$0jŷl8P qpIG^*E̸>:~;8 k|]J!lmA7h[ ɉ jdBf.EC -#pZO (GiVjccYζWzDSO6I6q3꣥vE[fC@E *U CQoLW{`g}'5$Y#戝PZ9Dg˾kA5he@j =?ˑHo'~-G6.#w Qաr|yl֋;UqkafL ]Ȩ}wS{lռtu4軸I֏4 Jp/;W%JCQ'Wg"]nSgA( Z>a 4O숋udCfA6!fUM\(m,2fŐwzG7lVsCފg[85  sTء t`#W9*} 1 d ]m w91JقDPp \ic\ Z?M.\)i L@"qq_;;"! 8\B%q3`lAu# ?5,7)Ume8!ɶw 9qԏҚ4d flÄ͔L^m:ydmSlAA$%@ߌYNj.FTʇ rEoL+ZP:.!ǿʗ2ܕ"ּvAgsOttQ惄O m?6"s5 ^Հi]Gv**\y(3UL*\3|Vf\a6=:*aP~HK@<+ 2MʙiCkNjR|FAtTzS 1j+8'DɭՒ0юM+EC__ƒ$y[oL<15rxF $ny^'j2̬ߢ"^Pt voBkDX4 I>hr1nNJ?o,cI+ԪL GX.Uf0Kdʹ*Ù6̩ͮ.`_8R2f(ȇ:pCMt-)UnEh_! 7P*jT\Tbc+;G|8].p2>C^ P9m-8jG0lP%='QseI0w+n&/gtX?OO eǪ?O6U9.ʊGUQ̓Up)Uf 9|0؛uAθxnX?4#uRu7豭b`L{o\-$oxH Uwn /ӨyĤd/r09 uS1#e̯|ߑCO\ۢYU裺|D>5u437 ,U[_CSu^S uXXʩX+璫SjvSA 6#wh7UL4.ATiB?\sQ79R{k=䨪yvGU^ {-.* jei>MQQxp#⛏NC~)\2.Fi ts7$9#-艜8d iTIunknm@Tտ/gTNzqߞF$R~=4z&4SkLʺQ_2O<Xv#O.hR@Aڏ$b&}q;¦op0sτ;dѧ-ϒ-&FU9"eDZÚIE$t Z}Eљ? IG ?%Ip]ۛAi2NOYă5dFwLQiawdX]~ mӵ425!a9rr8M0yBxp>Quv%s֥7Y ͭg2QGX:zE! !-:%;3 7ieH4xDeH5.*tns`NVoW8.A(q{]kvN5۞7 +4.l34~+I6d`)tU%n+lD^ۄi;AU-*^냈S%},k VEEb[?H.bA 9H2w\ үq :qn^J'8=_6ǯ}UVT,(< qp3oJy3<>!Fc7MAǦ]m 3<9W'(ji.(vU43_$2NKZ,k0x7!䆸 ã)t<'- Dj s'D_eeTR*\FSU]Fw!T(IHv:;ZȉQ_Q!wno\2S]?2/ fĨ'(wZy rM}RaH9|XI=}E߷U܇@LDiVTEh.ӋǢԊq=Q~MxQl2Kʺ쀮nRJӹU:슮w)+ HPRWqN|N9]泭P7]ކEaTIwGd,,*Yaa6 *r{n{i¤f@"Ѐm\8 N궁nw 0vU2퉲ۄO»1y\&(A6fs;$62SJwwÜ-6 ^+]6B]Q#̻DTIp0TNwz)sT0{QuDS8,}%p2G?}DaWNǿen6:fjo5Sl@=E6KHGy"/*χvD4 [m !KGXY5ýªoX;xvw:zuxnlQlZ#NY4/MBiF۪>`=&ַUK~$(=KG(H~UwAx~hr֭Nn5 Y k݇ J3ˉ> Drk.W16ԄDD4bWzX!"I#N>h:ٿ@29JAy UX9Nˢ,&T~5 9 ?+ՐU<2Ta㚬䭸#)4G WM}RyB'\zVyY4kuIoUR>j͞bz.*Ꮕw-Ļ ܢ%GPidKM.6e7%6"{kcW)3x<0>&؁ h 5PhAXA<.cq\z. 7V.H%rKŊBFwGV6*;A~HYf0N%OzdtDU긷2ٿ[ 9ćl Z 8h|&&mXy( 3UX;NaKI?Em+ :)U3xD=2d~Z@>=z#ý_"T|;§L:gu.p`#ga@U2esjDm <9GV@x"22g -bڧ}| nT_ŧy1S0K~J4eEʊlU fa@2O &Jw͝,qVuݝ2@"=2Խ-u tjOdYU!I+wlgKUʖX..*م;[y/eTS͕-軭&U~Ļ%R s U*4J/TB߶>$U-Ņվ0vn`IxEjcdX-]opk/¯]ݙpG 0p$T9x\Sh`CP}žk;ء.=$PNR[%q6UBbX93u/FJ4wE[y+:]%6HT=8&)wQ]<&+K, TsuPK<=l!-=g߹SKmP}:Sct)h4c nMv%oMGMQhD5OTK$6*t ^OHR/Hy(ErF<'-iG%.˛#?EH*NEE.wۣ"]W%cy?q9Eޢ:7FWb5j\o7Bm}h.6.o E mi>s{sfg;.jBߊʛc%P,AŗC lD?'w? %v䥧ҥ01~tFӺ uW; 1kʛ :fvx?]< u3tI< [d482(s#S\2dd;~T&'zv\ %cLI' D* rct5ti7:d\{Sob{`P7"KSʯBx]jV椉tuZqx 1;M xfG;wlTo Ӥ3G0 p6lϔ&_\:K麾28AUyYWM4uWr--ۆ*A˒l/eEH*QU @nB.ԙ H;US}s? e>JwQsLTp`9Ya|J)%Kv0= X6ڝ?TG;I<@AσtY~F$TLUsS GCI(8aebxU8 E]gB1Q^1 $Zø| <&.40]١s̀@7:f†˪4I=쁲eg e@ʹ*JTcuT0ES쾧5Mԓ`q芫QTʧc*%ItnQە Saj<|e#9B]`0gUDy+~yB{#/|fnJbfKMJ/}G ?pD^1N~;^éTeq(Q.%c|Ը}9KnB6BlI8p4ő61Tj,͡<&[DښoU[C~+3 \rI=6>98G-OQ.H;LyZE]枡F 0en+H: Ќ&W5"{Q~8b ;[[Oy&J:&iR$Ho!{y.?*X^H.]P㈁̮;oV L:r,\dL"/I>~ĸc3#挻U,r`ʳ3uP.K mRmaL)Ў00n#u/mNN?wŊ5Dwq^RQ*9ʦlKs朂A% W0鲪i-#\;dE."BE km? eǜb'˹yuM$?oQ%s]۴7s~v_#$8|J+ps*|# ­Qk KM>sI*tK`pe㋢iR-G`*yba4ӌIr cp.ƒIExHVGG|N;Aqn{€ g6!f=_4_2DpRL@xjyTOt` E"[b6vQ#7VI*@> ۟Ed6K M3(u,n0$EHmЄ$d7舠0&406@ 75î *"3R#I#dߋ1۟?kvT?Pn-eit(dI&c%YKU/6ܪ(LyB, l,'BQs繥sO 3`LZy"g9ScN *\@͔AJhpx)T=do;3y>Syܴ4RӉ}}rpU>D`wi M"?E@rEDĩO蝩. Zc4Eʼ$T|,:LMW[up 2apzLYLeKjVܝK+maɥq[^ d=-*u(Y\A&QVԪ 0U ]ViE"G Adj-p`聆AdT%T #*V &͓\DxE6 :$bW䪇0sAaGYiq&֞U v^UP\*\W!vP=Ӊ=*| %w:w{n]g}?U޼q9k۪tz"va]E+%kSiÓ+lӁ;(9xF^_yeboȕ>4iǚͥVQudu#!AIz@`ku5{THzUrPOÞU37(3>Â_u;]w1&jzcEn&./).*Z7$J 6(gTIFA`$FNz>ʒ]ܧ%gJ2CMDA^~{ ^ܓNDTjP/zfGL@h8ʓ͢pfh'uTgu\_dHpTGXSAj]az N_pvVݑπbGc /-s i-\ = &WYػL褿|5T1~2.U \xLT`7RxToHk+ A楍3 3Hhcol;uWxI;smxRR5'h47%bN(DfD]Cu uYi۶W}Iꍾ+E1]Lfi 6̀T|.5#r,:uA#S^`LǾcU4"$ _i \K :0 9."l9(nhE`]8FG si˛p퓴4 ]Xp45:\ LTgL$%R&k̅LL{Q᝔i,0#URmM{oDSy4.i’m$Y~:'}%ŧ#ci7Wflٛ*oOOE<8' ȸGUȃY+^k5gf\cekKLGW-tg丠PE3 qu FDK.hD 6RebIHLue\0gN_E* PpriX9!;At`Kd{7"ET0!R "1a>!~/E[*ہ^!DpD4+4QS v6*xiRFGdnYRKs**9wmlXܯ:j=EG+ &YSLʆ\%pT9?ϒ5,Z9Ry"Yll?EPd[ liw4U gEC ɊlI`.#>j$x@Ѳà͔7rI?p[)@jjyb*spU}!Uf3Ha N-:^6L& =UUyTY£!xPY%QipuRԣP}rO1IxJ;A !K"AF fCO<'+D "9UWNTLBpks3I,oeqCz,7Q5iB-X*Ӆ̀l !>AL# (lrT9C@6ʵ2yY3M?Ȫi''UK`Mn|<F'dk٩M7;~.Rv-7%ܵy,.qo UV}Hn j8UrU5d^\_"oto&|9_Ӌ XW6xjQ-˖ߢ5y]f2 ~Z&*\2y& @+38`0\P4mc±FֺE,T}Qa"^ԡRh\-癴U77Aku5gu@?e_T&'d}W7 >_MV LLw/%o=oXt C-sU"6%HD¨1DI,q~C -ߒ;'e0#mp*2TOL#SQs%s[vp҃K-ג: 2%qw=T؈GJ }U9qUT *V JƕO^,n\x5 *3.y09jI _CTT-CSoqEC\&HDi-cFks\"飝,n0]żD%W4|mV: ,T(7j Kza]3G ;k iGDcSUS5䑃úwC=,/(>J8HANvF(  J$7*t[pF?#H"낞~K U͈U5C3*\m&O3S Tܞ;#F\'P62Y\Fu9M|L (Syd]YTA\y9V7M _q3n{NӐ}m{}q1tM> M7dU1sy.UTiu{{mXT p impw066wBEU5}QI__ʫ6!pjLtגFR+ƝxPI,q=h;pIC+~ UL3>(rͮIPFҀ7楠Bq0ow\8$Tl xd5]RQ:#wU| ]w&3/ AÌ{^-/u7SxUf̷kp tj7ƛX:\,8rBDxAU  K|2p@nFʯ`4ݨlN8B1*F0|ȴ8ix]Ht%p6bj¥B󷽕Fc1uݿN .jZd_ t&$H@2p|D~˺u:|? D4s˝.%KOZT=/ul73vTZ@+wxO$f`uVi&cLzYʃ+@@FoG /&$a!"ޖ`UE|\[0}xf _ܠM!X I8USŠD4juwd tX,6WwYŋ Weㄲܐn k#ꭷĪuAxdHGS?Vɤ*sUPz)ǐϚj~jIBS_0HU5yy'1K#Ɂ{Sw% `t;S'&4MU$&>h0rASy*4ޅF|5ջ.6]Ngo5(GoS%oep䉁cϢ'LDkoB.vk_{؏rgyAm )uTqEro(Y@8,~+@wߢ]2. $n`$B,wQUf'Tu AEaQFUt0S¦޸A]M¬EЦ7~Uz6e?_sLMwO+Gk4j2\8zq7@o]tD4^ǚϢ E"RS%ajd˷P;<2~K$P&ap#|O,l=_%!m/KZD6`"En-14]`>#;i岴iTRLL5Jq@9~ \$_袲9\FN.q.'$Vѧ9|k* E͔;Υj:uIf $GIP/ ǀ)#ditF.(4;x,tU@:n6@9/)-4<ʦf&tj$~P+jM2t7ܪs? F䊻~J(6'ug{72y.(jYH`r0SM&OeÀ9*kuk#dyp:]S7ۖ89Y7{/S5S>=;;dwھ57t eI쥽Rwºp.SӨx[U&ZM ~*GUAv ir5rYW2p@Cu.9.@dixR벫r>HcFI$lw]{,蜏5Ik#ct8DP0$ϙ|ѧ;.q09Jq`y$Sċi|VO~~OMĝH͗wHp5Ӿ. E`p͢މ6J-WjUlFzl%6TӑT?U^NpZմ1Gwa:?SEP !Hšx.Ngk~(juzxcwBa9v\"p8<"Wvn$ࣩʜ~#t59,M!]ir n_j6Q/trT%TTiDuˑcA @` Z*N O >6ƒ5IoSNx&@6XJ4ip4Hm\Q#`fCu@VtYfg{(.9~&r/'.RsV~:t[kbifߦPcBt$^R[c)ߜ*xUoA(!BD-6w >k<Ԙ7 ?5H?S,o&GQM]aS݈ȵ ÓHU_NvO4͑numU\s4y^ y.>kgEu RヲU3#*rntiigGOEQe,haQ)\34^ SήɋwTZ7MЪi㒩X0s"W|-QFG"WNI1S™#{W*7(m].z;^xO F!Hј&CyD쎠a6d)O; ͧղE M-tPEǻs~陮nB M6mL9+U&ȱ,y&9A$?(y\'3$œyM$/ ߚ3iB-ʂ̃6<3"޹PwMk[yqnM!Qz"QiVz ׈\Pb#:UHlP]<ەm䡭-TZ-xPy#Hc;|UfMsI ;4yrQ'-snh54o\&5%# -t漎J.YdC)Xc!pٷR}U`d/U.leV[-lKl}ވʒ^itL.u* ,⁂ߚ4 5:mx X#U_[nv D@n˄퓿QM.HSR<6wEXM;꫺nWDC;YT];mKqüvF]i)\r/uMZ-.eS\ <zlB7 gt}QJCG % |Jiq ]~pX )nui5dwT8e_ʤaygT6ʦAjgp?cCK?5/*Dz@AQM}< I>K>9WJu vsJTnwUDHb|DkӤ?2]ME`o\b]8=0(_UaMA/e `υRtF־:)& yeL*R' @U|곁 R ~'e5NzHOÐb/eǪ|;6p]}I]ȷCdFCOkwmu f*(\ lm/g%9|N]Ar%MmqX)DA p+}P.ےO]!M섺-tѨUA6/ *ЬJla.X@I6OUS6THPNoA$!S.7]c6T7ͮB6A--22& e=@#Lߒ}p7gQ ;*Ke9āy54T[wGq|Sp>ڬ/Ap*_Er݄o}TTDۮ*vUwy:*ƛ[&@*Z2Y;tN|MQWwEgsx{hm. £*sB[Zx8&3Ju'Uk>j`;rG1$qT4Z἟sE5A}‘I99@v4\8FOg*Qp6v8efDYq%-.a QE,""B9Ӹ0@LU[L1 "26Bf#=Ҫ"az^*y'lH\N A5˺kDf{N6@w=PZ-4`e}:H ͮx*~ufz(SN* -Rƛy"ڳfz#S`.;x'wN 'damH̩p#t]Snvn(H(-]y*Rm~{xC|W셐hqp7"gj#M"W q o?rv}zM3ttŘ3]٩G,l oW)%Oe#Wxw«y #Iqna28MZT2n@Хc+vBf{rnp 3xR#q@<\~UDv?%=l4ZuRz ` ?_UVZFn=@rm!aD=M3*7 !yősW#?RD(3mQ|55 #^%|6 hj8<\H7]n_+"|#6il&G_g. mw)c-Hb^pqWwS@eqy \mwEl {OUTT4| Å[PӃ uq t|TWw4D@lmJ\@p_*FQ$%瘍c4?O4? To*b'NPcC)؍ӴSfe=ᓰV%ߚfbwSϚvE\/H>.FюFޖPqG_%5b47橤(i5"O惠ic KJ'$T2iH :o55 Po K|`UNivЁW.>,uC~15m~ 6%S$!-i׸9lLǒ՟tUFNPa.qTg ڍDeYg8OeZ@*/0b۠,#!.9Ģ/0W1䋅8eQ٭F3i%Z~ OaiJqs@$ Z-Oϒh& .mɡ*;eD|VA/cL[~9ymAz6yz.,6GLGW-i MTcRM]CL66$\op^\SÐEmB:|,.n7e$_L‘ܒU9HiDֽے!2"1m]<>jglDsIEӴ3x]thE3 ,qaU{9܆7['oTnhn)ssh\N=m;Q"Ҩ'=@h3K仰U@ -!1SL͆鮤H*Us21Ps$d`踦ؗ'X h4ۏ5:/FEӎMv*\Ge!R7Nwڝ܉s([˳U*Z0%Ġ v.iVI:DYgu GP`ʂz-1MĀ|2aRyeH!A7\ɥ{ T9Y~'䩷R㚥^wD^bQBI1*0o(9sH7A/p6҉qQqo* {2HT7>m.Uzce&dےySu -p@{胋T-9K# *-eZjG(E>oHMiᙹ[*\Wi +uQ>-`nU|&M<{740Cf~J+v7\|B=D)ʑ4D]!?\͌B3 $_`1sHL'8{;0.ԜɍRJ9l>4yt@LD|H6 xlؤ $DCSBlؐZ6o e-1k¦vl\lF0*l) d8 DK~ n>_]zAp_>Qs|5E(TXeP &J7ʇ5lg*j|QA` 5&"Qq1="@p丯6 ʬ2}rDD'9l͸ы;)&poEv0,W?ikde4rSd7i_.9R's"/v z."GK›PMQj˿M0yasT6mD_芜>qq?LͶ5u r_(˦44&I.O& ͎ȸD%ҍipP7F GݔLHntO4D좤X!Kny*.hjhj}n2oT9T.CEWtrЅKH{<Kkw*.a#ocWEC"v@c檫(Xs_m U.Ns[!#$Bq8GKJbz*Coe_ smʇDspHꦡO$<)2-kY1ubR=$0M+9ywz5|Msn`t >+࿒55)4G;ZCL yEt.(W6 WPZ]ẩ΃(]d纐8D^%ZMsn,tɐ> H6{l "4cgt{@:JSEG6BO0@3gr{$+<ԃeYts%43)襦"t*q!h>츁$:A GD^@T1ghWиzt# Iʧ!k w gsHPq7ᨒ=Fs; gWnjsHwC7^ˉ 0rI:1CdZ@7Iss.q9XTR0A]y q8Ȱ"r6X:))/ Es{eS$^mɶE1fnl|M^УR9Q$`DX般XrUyB@76 U3?o 褼:nnUq41ƛL_>+gb&Uª6*/u UZsKN WORv0sȊM$`JvqEfT_1`4ͤwUZXv$d*$]lK l#4V&D ܖ[a+xMx\9cd!I\sQ";*%P m2OKjQV3 b̀ G8F[RmN{Hn,xLbj3Q&sWjU4{Yw^<#߸GJop^w]a0 jrB4$Hl !&e|Zm=:):4{j/'T+.$}@+$~H)1"`ɂ C`.=hRG@Z_cl7M<5]7rDnS48%A$u5%۳GU;wmR%(+)ihp>/~ʷn{3-0nwljȲ >2.;Q%~96'?T &\6 CSN$^V"춶[2ӜҜ1/ ʩr 0Zx4;Y%o@ @ddIwPO6m"c"#&GΊb|_Djp_}`u*z\[>/ |lY`8V;rB-SP$0-Ne[W%$ɌSfSł$@ cE-p'7WLQs b> ^^KAK7pf0pA3;! \O58]Un4X^NJ 2AŖr2ĎaS ' @q60|Y}W>N}=/.CqAds*<!Ho$,u߻-0k~E^+cmHU>*HP^QVbCw$G8568%Cm>j`>I{a*|u?ʐmr.f9.3< iDD%η?b x^]Aeb.-8uQxہpj NZ l=ʠpLN# l>@R2PԪcQU6UQ$F*Dpͧ@h>j"Q눂W=P"?[b8b)FLﺗ>vD.FT]";9Mm.ztBc0Wx)J }P- U:$A6cmhΘF_LbK'"5>l>!{u xm&3Y(~99$XׇӚȑPyssЦz\O̠~cFE$iRvGi0Ӷnu##q@ԝ} o/ iɅc\e d~*n`(t&t@d1q ;&s:@Q' >)T7e˃R7kXy^FmUǐZI*8yz9mL&.%C*]v0c*r-R*,) *`W 6Na7QpA/~oGE츥3ꥱ'  Ӄ*C\3 ZoYUᨵ5ּ(]@ Ő:|3AkD :9S良"Ͷʯ"@]LM{*4 y"<0%x*oȃ;ݾ #$;P "Ы-p>ۚTKO8T0T{(:wD#hP-l*[VF|8.=lkw '?%5S-M)_< \8\Dj  < Hdѩoi.#wWvhE s]MT k-cO"4U;TuG!cvsŠ3k2d:C! ϒCu'R "4.\? ETcuM`,\Ui0.?ѴD*/c;yl{ /–AtZUKdnsc~ˊmT eLz MfeF+o_<*GЪ*?R} 6D˛⚭T&ߋq5UOxSF,U_m-_MvENmVq^-+drLcScdp|]e62cqf7Ug_WL n.~]% ŲkF9.WuLz5InYUv2$:ʉ M 4Ai ! G6 !R8d:n}"x_#}SsQs?8R|T^]V CB˺ /8u=5LxSNO+S6j*lrݓOKz{ɎkUyt6rTP,i-G6VA江 66eqDGBPYI$< ̋5fsLu 9Un7Ⱥǣvc6 ZCP8v[tIY6P]T:[D* RHA UvS]Ta襇`=ŭlˢGʀ.j/9l^oyuFLH䉧6TOD[<KJ -zPIQW*D3zwj `p#u 9)k"(.'Q:3t h]1 Yki9, U m7~i ©Ă1leS[Q\^~;bPP$M-# CDOG(jM_ytGL4{/ڄ7.2I\o1*m 39מe8#]7G52c1_`0$@#iFPsRyWQ<#WQHim&T98Wu?!5* qlO ʐɐ, C9#CuO_5aljoP9aq7?BԚ( GGToˤE5@a6Ai ; ֌٠ Cmz3e-p丝jU""pyh)&&#a(O(s;.>*K^%TO%tp;mHnhiONU#žQ##b^!+iշ%'뿒-c.y1*ZPi +pQϨGFI2E?T;Ɓ9+xGG~#G(FY FXq+Ȣ\6T{kQsi.4k&Jl.huQ' ]4)?{kJUue/P}8l%e7y㪳8&G^sl~N:@4 uOgvL;+4I2/Iq2/x<cl; kGǴta"%3Ԟ?w@Vu݋v $[mf$H Ev~Q nw0?GvǡGI4p qP 'Nf!l"!wYKc|*9xLJ$m;p9ty -D +ͽꢯ'Nso ާcV)C*šf8ES]jn 32Ŋ&U_. TfD]4Di<*̝UyE#M. OoT5Vc <6iܠTX ڡ:"' #M[l}!1Hz4: ǚʥBL.zQsth@/;ܣ9aP)pOkCm 0,qBcuVf#B&H%<QHv=͊Pt`BrUv^ݵ_T&,Fq~\g9}LuNNp$߄\"A0Fy')?apZ*i c#qwu'7; X\衇D&/X"sPN2Bwv2'WGRJ\pdmM@s @tϿHkpBxB1*I%uOxIhW l"fb1 67}uYfc8mBuSIo =.76U oi7\I4F=Pvp<ɒ)8䋋OPќ]8UGFD8ɱ3w.$dlk87(h&M_K`*%V4ݲ(*OEK@Vc lOF3F\|J:RwR0:dAuIpUsF|Շf{4ˠ~Z´stSG+Gr5 g~=ϸA o?sDt&~++7jLYw4fg`zUu)e62O; 䋁p6D<5l[O¦4ptRזSl+Oꀛt; x*X (9l 5Uc3#=P5;!.{M.SF9S_]T߲@ Ϛ4۪nKt |M [.ئ#b¨p1uS~j H9 uT4G<;+Ó 0*quou5 >|T>Z4ɂu4]S2vT nԘF?t65TI˅$]PlF"RHeĕMm܁ug-Ӹd4K2F..8mJ×*6B[ f3ȅ]&S!}FKnGU$H!15S@tD:˜BPrt)-CiW U'd[*yxܕ=?"-oE:m!6z|K6 im5uVp GyhM8o0Vq0zUg‹i>* R?`aMJirM\|Dq"XT޽U^oǞGs2"QҠ@Ъ>!+KD~e3/UC;To77T#.C XH AFhI`ʯI&͔w~PJQ=!3x :wUO:Z?cߒjr[|c3! ?>H<p#R"n wzr!pF-{f,'.|DI@j-s7P "Xu $_`0%@7ꇊ2#2nE9QR%-8LC-;mtR!UH3']8R!ϑ/~,AlWzu)kM6D!b- DX 'Q-f7# *--sFї: O"e|.7B57A eݰ]cy >H"y#0$HUNU=.3%wvt@t[6"ܙ\i\ -nPaO.O3Gye_7q+ֱxت)` )b-R4"Aq[Mw\2)¦a ŋ8"E .U&g C6Rܯ܏K) gP,~ׯԺw^:\< :U:֮mDb^z_~p:z, ʉD'_<$fT13U #즃 KpePQoxba?2hѸ EogB"=xNwюX*Bjr 8+K0r@Zpp ;Ri Υ }D4:I6n]@aO-B`J?D vӜqLߚ֐ \6P R3gr]JFc W=l+VBkez9mq;QOYg_,ӥo'2"kpIR u3.͓"?NH"<*m䎍@ɼ*ZjCCFfQ%kFRs1mVo~}aZ膛Kzb>i6*tk{I]`x[N6Tpr[ed8pkHX!"uVNq EȺ!uE &䅓}E7Pqײ@*DxLC.ʻHPa ?ӄyRHsY΂]klgp¾97?e<&6X[LxTރtLwӗU6p};0s ò'*L P{w{fbЛ~-sC⍡p> MRk!ShS |-޴m# QDw9Х[VKfdZQ5<!KkLU$%<5U'f(f5δP?_cHi .>ETDu {lC Q@džU5|]mc)Czz 4FI[#.hq>J0 x|*:,6VJ:)Bx9S"E< ~Zo4iv-Ms邈K[rT8"*K~j^بl@t{!HF 7k4ky:eݻUmh$$U9_8^$$M H:}VlJqI|Lk$;["S;!QhH4׿Ik]ZM#&HT5:tVc*?n?e(E? FL!-"LdžY6l*ݮUMoSYM@UfŠŐB`Wi~>T"n#ulBhf)9eP|A~ |M4=4xQtiq'~ =2074W)\b YRSpǑQ1ep=Wfߚ#uct.CzOfٴG:ju<-SGwTe7Msc${GR;qZvH37T߯hzAf~(Ak&:gLO;y&2njEq@ZQ'yNF"+A爵 c u"o⽡A.Z5/v d]ִܟ曤oH䠙qFQF.i4lzY_)~-Թ[wwZÝ ? !%9jGMMy4qah]_*j7Q2=lmFu iqIӔP@eTʚAKI\"~joPŜ3eCí} m̫ۗ4uRpy5 xi nJHJ1q?ꡮmuߒ y1:bA8mߒ@U-!PĘZ=J5Dc򭩷/䩇z^-v]ۙ`N?E/pDZy##8\29O]'wL4"*["UcGNPLRDI 5UI6䎥VL<)'P8T`m8(38TEb]= vߪKq+pk";m4UM6mU;J~!SC+Ko*IBeYS>H4^ Եqxe G;13SV0K쥦ACn@_Vsr--/8;F)sJ#9Q i>j5Վ<>נ'ʭTIiT,a9]B(c] CT],߅Kq0&NI,YCd{iBӅDυBM6|_6GQ]<0qϒ+k -ˇ22gs0M| I1{@?D*3|)C\N<@4]O(nQciR-9N`~_$[L@Z~/56ׯ$c'vT滉n#-MlqP/ie9voX*O<P憋  k2efdn\|#q LFХUT"XPwU Ȝ˹=ĸޣ3jꗒ*2\[0L!鍌Y4Uaz!\1Ox&/dtvLlPIMc^/WzI(Ǽ#Ss|@{kn#$m8ˏZF1|* |3l(j ^)J n{c;&nsGYb67ݽQ㝜971u t["#7 Ou*9W  EGEc]g ?m%WRf,ۛMB׀S]E0zz<¦|w>6|[4Iy6K u@Z('Pk0LQSr H4Ǣ$H${%UZyt]яLdp۱XKԼ琲tS4 z*5&|ALDu1_G8~P<j0MlU4x){& M9#P0!MT,H蘦(S^#}Ua)"HӅC7uЯtr N23T}ȿ B |rM-ӛ_xc˹*jE֐l-(at]68B,/J6 }O{9 G+ Ow{oV}#5g1 ATw 񂈽e\&li(:6g֗ D_;.Nbs@\SPhe<3LهGW#D #t: ߞP.Cfc*]ydPK*J/꿚 |WEy^KU"/36+}c"niB6U4>fuONI^k"ۨ=Up( 9R]V[2yn]jtx Sx ex='8ѩQ}Wr9hAupKxIwPƁKmQ[  I7¨pF. ps,vCL9߈~KZ&joU͑-'k&iTC@+4(i-bz7#Ń$"*0s+Ip,p9hۚ#c5$k( 9YD$O֎tnI "`G-E-q;͔R sV,jQM=/ᑟPr,QTeMRTR4i6FpXf quc%~#'#6䎽5On@걍JL s[ gi.ٷ-TI sqV 05M9<`[;GYdFGOᓺ{;?x-KLx0毢:LKDt%O[ׅp;@1eYVw~au-UxNӕhد : fo uCapgcRÀn?6uQ!|՟J`Ϛs .|.(ݿ4[."sI +_rUyB HX>no/EE\gZ\ >˜)J⿪|KXgyTY3cdT~|\Q5шh}QL?\8 "N!xf6꣧>km Y+k 5PAN~%5@9SQ&-¼@5z??4ICt7İOXU>GuSZȗW4L7 a˽ ;lZyB2o ԫmi=zQ`&Gn%Ţ#u/8]D@]cKbF%rvWq9Qbf"r@tĬ@**E‘ײ[p 'ksԪk^5Zy*\ y "A؅}3#s"㥕lNRւy\6TDG='t@|;K%cyNig[&n>HKl<|ueAto0KA}N VB Uś | ]PӸQc輑y͕xr;SGKoofKˋݎF?D*ZfTe_vs*dz>paeBEVĔ\W&7r{E+#GQ$r6B ~,:$@uKrvUinp,ʃV~ nwu*V=~np>LUZg?(p ];X7հu.zBMKLGD1`),H؆m2IdN@¡ǥ–pتAßm"c+2ټ gPvL۪<Ж9iܪۼ1҃kmAMU~%ʨD &gBd\-a=PhLUO>Jy?ߢVGYWz)fȗj?mCiƸ;z;!]ۄߊm =<`r.6q\M'6n R?_@&J 9— [*Eϒ!辦P<#Q8deTF6o6xg„Tꡮ*\憎ZH;+l~K ]P7 KǷ+KDc2o.j4FvQ;uV78x/I5UC<+M%@n| ކr-䨟P _ BUm A.N:h e" FBmY"{tD_e57|et@ qM6wxr6滷ABeq } ,36* D\@fo%vB8&[.!6KʥxKFP@'߽ jKMJ93̡ҧab;}+-M_/וD^Z=);C؄dBm6W+Jfi3YO%*I;<=UN8@t/?5]8䎡Ng\w ޷(U>`e/u:@R51M^KcXbpCPs`'!3H2#Pϒ-h&OE(â9)p~jP{wcE9qg8 K Dx'Y*O/V\ind;\$I$a6'd*4G 6(?ŗF )|]dYH9!Td«eJ•;z;$yy&소%(KXwkü7 %[?saF{!?r=ʸ…bF1Wy8vၲ3&} .mr] K&Qt۠V%H  y'ֳJ$6G"mt_fe:xc( I('hD.T_o4 'M;vAٿ ($8A_>Tpqd6lm8Op7X i3o7V/~6TX`$#艓u eCNu 6PqK.#[`!q*d64o7SK;wzZDNԢ^.*a,yBTomkӥ{?)֋nǑkÅfU'ͼʚM=T@{ qZpnXo =Pk|.)vPvy\g^Gjη)KSݛR ^2~J{t==Gpz+nҧ9u,=6\XԶX\~pQ#!X u;|$ɛL3Le3R rkK cHnP&3Tſyc&TuoF[cUEASZvCP*n*wv+/޻C'/ #ំlUrxTmxA o=șnu'6e4^͔U%%811N6g sA T4#w+26ѿX^p)&\P'TZH#T >Kxi E1>w#e3B-wMGH°g=s2|Pͳe-W$K$@Q;sBUnM 9 ;׶AfȬ@vTʭ1񟒊j1WR<]È%. Eʚoo"l('<@ |mo;B0%4O5hZʡK/Z4p<< ,8m]*3lj܂f{#IOvf aj;K[~NU;XR/; OmGl>*&Ӓ;.wR~E /Nk..k{;_S37A_"f>yD0`sybVT8e4Jwn<\Jo@w8DW vwRG%TW񸋂-wBD q":b),d(~)ު?K7\vD獣&˺kj1#ܪD`d*ɵM{LlYQ;%ܹ5TL~\ mzLa{ B <*9Ĕ [Nn)*[A_;!HⰭyhuP^l9vU3H9-K/ꍃzfH#vU2yVnf ]Ky*`lye"WjiyNm\'DUpG 滢.V06C+֌c vM.uVU9hufi\/>7"W(jpeSDH+ZQm\_J~%[eޒjf'* @Vl᳜DǙ4K]0/ӑpDc-n|Ui T ( Vكu tXň/.@t y88_3mw + $M{eBD64slUV9+}P, &G?{=-|@&O Pl#bMր $-."*?,hwTw8<?x͔ B2E!UHӐ.mm'<(m !é)N| ~mU.m­ 訠Dī97ꃌ1y^7T%#BeH˒%C[vIVf+\FVpvh4ٵ* |IͪH '~m#Ga|V$}] P˶\fFō 2Bh&f*YWCk˨1S\0]q62S\!e4a5BmT (+PgաPl:Po~ !삦[Bd9}TvSP SY @#9wSi0,cH {|ǻ({@2x2텩CU# 6Vp)r.?H8jL'YT 8-@K$5 6ʒ1舵 .dDkAp9& 栟GĆ$7r2$# T4G"N}¦Ilh(/SHiBO/~3ʖظ!N_L`'~0uTj-HS+^6HT +ctTGα $ݵѳAž4 Zv0{cq*TH>\~^jk /'%I,"-MWb aF:%Hl:yQD4R MԤ(T#s$x`-=>aJ--: 7KKH;]|4$WY~d7{]Qn%U"6AӞ`Oe%DP{$V+1e"WE%H1u~f.3KAGVCm}Uu+lX;+ȓ.evHO&ʂI6J }nZ}ypH \|иP|.폨˨Ul̪tuacƒٺB,ePNwRA{# !NS"@W&=3M3p%wD D)eIjǚ#HRKxc$NDoϚk; 7ʑ3~TÀjk&*Ku<Q7@IuCH.7ٍl?eDm~3pj) wTyix8^_`tx/im*|u(mg˪[9$ 1覣Ԓɍ\; ʥ&%LdmeLb/i#Kxe(ht8ьqAU'mKoQ@qꝬ4] VjRpQiXyȀOBoN-ꃀ ‹fK@{v샵/m (w!Dv+ ^R?;J;/59,|Tj2||:F#P:6~RmkH%ѦjdT(s)FJTLuS$B KϧK-~H9fΌƝƒ7*efb">:O0}dC(18*DM-y ➪"U]ufTmAx6X IhAA{4UH%U{pEŲqr\ Zv5ڬ餹!|Si.As@<9?$X9M9K@?zטvqHJi~W2^RO ..XDw% D &Xf? F`yA&WR\W#e!KI?U:."E}}T~h Spkw7& _*TaM5SGr\:DLگ}S"QLt\07e&)@XmU|؄Im}#|Bm?x }4iU2gC  $Ϛn6R$ú y^#SΣ<#mQpAẐ/ Ͻe7?ʖ<*-x;|TϞ麏 kV{^2>J c9PuZ۟TY[^/٫b&?*LC 'O.A];LiAU3TW"8&`Wq&pWe-?p]+Ax젎YElB& 6Š. 'Nʭ3UY@][dƒpK:×wQݒv:ȵ4M4@p8O,)q*5P&ti"S~%GJI"DElj3QkAvMዃwULIM rF@3b-C.m0D|zV\ l6]`㿾LxdےNCdCZ ®m:^*gm/?ĤuTB<5m*UCs@M=QxG;^8\NQze5m&yuS5"w~Tv;Î#ϢÎHeU|X& V0GԪgd8eU(;(fv`j-eQh \g(VOE$ś';!S9hÿwZLZ]  Dʃ>!}P~(7[6|Fz?-&A p [gjHp^>Y'{۷Rӎ^4Kʩpdr]p2饤m98G53}[c+ S'BN0*.{;{&f٧f-&񥧣^/`O"4*'J\mBk+.ة{dBU(PT>B?fUdA߲Tjt ܕukQ!xW73n%X>,p檡!{¥ ~jEtd"RdS.Dx.JppwSSV$=m|l_J Ɋ[uvڅ%ƢF}Ps?lPhʩIRvRXiᴲd.yw;K% DzKŐnIiH^j)r栜 T A:O LUQMY -3~c6jsl>' KM8pPanwNDc n@ -)Hߢ&l|Bm!Un!`lG<\D4MbADLUѧHs zD)Da^M- ߢԣU2q\,5gy*nğhCWJG WU. i;E#=H䭲-wW^7Aس =NP?KwbQ*ejHp"#(f/6=xC_oͣy.3FMSt۵{%2׋_? a E@n?e"=-p 4Z]`_em(4B?öqzB}AXnfvVEͅ(ŢrueneO$嫍WQS"պnX" *Fag;QĈf2'(וK$ӷP A& *qTr9hDE# V(J|CeF~ Sֺ-%PuzYqȁyQLOĉ]' (۵+.(G o,{–0CyH-<%32d D63תw0Mgs H8flMxl6x[#ąXZZbbȼ<+s{Pt sƎffQ$2,;27!n}6*̢ƾZ G.F!i4'dcбo Upw^-Lg+<1-WB3+&)aCbe[g)5N`=J%Mn(_#˒y\X rLBDl-¡K\qn%5/*#hPgo<#yQcy][0GEA'oR]PSWȠMQ6 掣dDu~w-FGB9!C`[OT/|=j_l&* D uݵdrpj-4<8(4 wwI&  bh^G&v泜"55UieH^u oXǚ&X{"s *qϠ@XZʦX숻6I" ,ֲؔ9O-Ԣ%>#|h<8v!,ۚlT5GbHt|Kys|;Sb%*:N.˂ 6—xe0. L19.>2$fBk;-ʤ[rj es![s)+%D^\3d8iwsIm39Ar tX4pZ&v$mH\RE" Ϟ ‡"ECmnT2}C/~|%C\`xau  ꀟ ,aۙPHi?55]WyOqUQTBC`40fȁIy-kLEꢇs) b(B 'Ҁlgph˼r>g`!]z: }Ӱn;>#TQTU׋)gB7E PnhjŊ,R";/q2G5q<.=|Ϛ(`iT_}U.deT@P/趸 RdfbGcp/^$z)J=.SyTS! Z,D47 KK8TR &P#/Tk5vc'A=n[~ @QWWbÌG_ďīVTV'DX]u4^Uo`pܗ@:). sdD˺jpS{Fi˂i 5"f`oR9ӵZwuM|jˑΤ4AAFvܢ|1lS@;V{‘{ RLtCCKdD@/;"ED aLv>^Cb@iXr( wS$\*[,m9D=AԢlC])mTC`K!\[n.AfP<ʒ."jTX4 "6ua]kn[P9 /"+HoR>+XFf$\͜9ԀeUʓnz1U.2߅dw:ŌMN0"\%~UmHuV5Ed&qpDPI| 89!ƨb?S%ዂ:#4^jӅ@AC.f<2)!*ڒE䞷W~r2+~ O$5΂ㆡc6W8%M BM4df-W_̄ksE\;[F8ERL9/ZުERPwre&a lWH%Xmp_/.xXĩ~NA͇0cttﲗ2@jſ:wM5p^ʮ Ókc<;keɴ;8>UV GgKCg%2 (lAF7sYkYU庪£gMɋ{Y_T%ܴL@JGR^` ar_[TmᲨ,g*-n-WD\*C7 u\$ {WzunUFSH#>hD°/(͉+5) yn&ߧP 뺠3\AdЦO5V?* POܪ ț6d]B77f,Tm慚& %VsHk(PaKGB sDs(%h3PqN eȴ2H+wR&y(-f.6۟CAQ%nfˢeRb‡۬#pzP"/l.+*1vȈ2Gw}٨nb2A ia҃4x4&?(U9 xnlNBị GxcquU_!Łvj0|\rIρz_dxnzl vGM#TW1WT$p '66.w*O b]|Hb?9/4ri荅1]朇UhMPGCgvlqLB9 TI(Ds>H=UV*hM1x+'1y+"v]pѥlo&R l>&6SFHT>$>7hy(kN-eMԓ苪0d<# B!{,o©phPn{5_"\c4eg|Ӛu1kOTDnҚZQd\_a ǒ雯 ,3q@Ä&(|="H7<׋~J` `lD«6šlD@ .*dZ-u1ϗ'䙫.խ`;V=\]:.M p4TlIh߰*~Cܧ_!1]UEOgv豷q}+yl@oZH/YP;'OںD#vw->1e!B:nnWtWu{c#Joeԯr~ fIB+#@Nkɟ.RjZLM^%hRK1*XnyUl,'߻+89^;IMu-d͠_{% xO4*#ąPm7"LOR>  bmw%MsUP_X'fllf7P#wj(Uo.$kNRYn1R]6B:50 Lc*];~ˉqnW=ӎJ%@?ED4na qA7^Rox F#t8 $^#p&_1orXŔ\&}i;Ȫ2Ty ;L? 6*%KbliUqJ M0PUP|6+D<"RROP2-y 608͔T b[s#gL#?$ _j` A 88 P$v{/Tj?Piqϻ*w$c~hP|o[L5 b|)i^R.pq,+56E9-UR P4 ,Jʩ"ʜ4[#GHpdz.'VcŘD0vCgY{&1,sra?+ M"ZH;WSPɹq(t@8H kuܠZvlUpW'<=Pa졙@H6-Hפ{i!4L=D͑k~ѥWe?M©9 U' }dzU˲!/5|U&8E#wM"*d52O4JxHd]7۲;{Fǥz>JIUU]59.k g\mE.n\.ts0MMWtEN=y3+lhSeeQR7u(:ÒF$z21T="':苄0(Ƌ9{(1Er}U.\7[x#o}e7 4|\IuCNsuUNF[/D}W 楢G$*Q>{.T M@0ȴOTzsMc5r¬.yb aA@U  E)xwl5-b[uUZo1޻*٩Lxc>J=9# stǛʏ+FUM6KӒ2Akd,[ D1%Iy\FLo+xD\\d+ t-klؑjI8:M \c\okɨ4 ȳ%=$5Ȇ~hŝt!]_Ę}&|+8y(Z6*i7(L+@I0 ZJ]Rׂ-\MN^WF"cʣXQ,8ȼtd9!AїJe,gXb"~2r&5-4V*{GYzC>$4XI[^G[.)3UlloeE{T7pf{5{psb[> (1Rj6myxcU5`8 MxQ2>|n7䧞PӟE~#]{"icI͛lfLt\W9 )*ìpw,7EopHED)qN]"y$cb"O]})ezs5)'U#BlGP߆7@n QZ: U#!p-i6 澇0Ν51fe^Z_o]dXN]Fķ0BsY_)9;x]3$JDZO"9*ꙐA*!=GE5SRldgz{s{lNd.5UV 8TqN)5T)ďN w[SO dwn3+ectl[$c{]QO#:-5UXLejR@MՁPwϢlmzÁE2F#uKiTDʨznn D*q?*8\sEؾSZ_d+zʭ*w(o_n/U=ьpNb YQOFu`8NB7aXoEOBS^wkߙXHVly͔ꌙ&>^1EN6vsMGYRNm"MoAkeV(>q fP72MV@ F@-7U_'WOS%A}1=^CpdVxFA4uRfꛓ*dl="EHb,x :dETom6!ÿ$EULooP tE ̯4 eKfm2uPtRIis{cBb7Ra-Դ^꡶w_pԀDsA,NRу8 UQ9*L<.Z×\L97y74*Ԇ*+HS~|.%, pݖʕ|?>קOXd2\ttY#Q{2Sp=CVx7hPJo8\J;@z.q"T5vMx1uV^ls_O+mȴS>RaADS& "w z.fyJTӿۚD|;Ii ߪ"yڜ'VLLs F JS<@L)X"@2"a cTK6\Y"RU$.†c/3I1~m`27;s5sI*f0y 541>MhӦtt"B,pl4E6g*¨-4N҉&e~',@36-j 拎lxu$TGQi鲴F0!naH]WiJAbwWb)xNԻ3QYֺSQxɒxiTq9r`-C HMp1{ݿ/Ȧ3WTF?Q}ͣ/?,C!r r?0wך1brE%1U\PdeGfM{f֔5sR ?R$@3tXjspI%5s!u04tu.duE$USaq. 6n( f5ޝSW0o;>Ҡ38!\&`~\=6ЭPnow4-;s[HyYʙk65vO*m ` y2c ăg -w#U L[ Q76HtL7 nvSJ8 +2]CP\-LO5{i1zp4Ǫ3PnQ ԃ[R)fY{`?4DrbC[^ʠ6O ʋ=t yMNop­kT&n1>m$"67l%SÚjUv){%2\n]>ڌiOEЏT襕G*DB7.-S1 %Uܔ4M-2VPi_ӈ;s@V*,!k=n&1*GBOQGp'MKj qA)¥,_-[ĤꢫyQ>@29.(kL.b1VZǚEG& !ȱqh¨R>6?X;ؖwS-Oj5^^̕֎ۺ*{cyu-+*OlE%@,±9Bv+2-HS.'!Cs:(w8 AR6,&*gnj:m .-! rk$/urQpio1( 6\: AP\tM|*jD"vfP{A4MU?S/ iE /uS6o]w>h =n^!LeGB(6di~_T8 lM*E$ cm5ԇGV/or,*ߒW\4N{#{*!oAT\eQm-#H ewqt641"-G !yM!䛨6q i4Aʖ1b'n3pqM@4C%Ӽ"KAS0(4F2yq#KCɏ]P]܎H8 8!T1M iy7ok!"9^m=)g%I9DnJqtRLjmp NoY88T,׶wP:\mN뼑{:鹪`ߢ^J"SGU'eaWaE09U6naMR컚q5@Vy(yOxtf |^-u&,`/cETfU.|:׋=vTmDKOHDN $@CAҨj>|ѝ֍1i<ѨpE'-q;SJp!UxM M⯟TiHHPMMt4~W#TD^ 7Yvxy.c( Qo Iu3<|1= K~e*Hd5) R2mȍDrLwuC\QW&fd4 `\=l]]Ua?(d /;me@f!˻g Wܬ GCWDp GxMC =D_p{o胁Ϯ;*O(R7>x`wN.WzTBnATOYoEγ07p5ooyI2O~!~$ڑ8BquDS`wG0>iFׁuIw 6Mh4Gc件j0>6TktIrQ 1 ћTH͔@e*%`by#- Q,pLV>m/0`7韢t4(o5n^;{mN-INO_Swҩ^;P 6CGt\P18$5Cs\mt/4@dlFȾ8{!E˿:~.Dr迚hpP'Lrq憓\&~.ji TyEAӑdcN',e*.LTi#xkaTiV;Uy ~6eS'EۗD4fϾH8GŸN{[]tUbS6QoϢ1z]ku)IwU2CT&y,4FD0|cᲤ6R lo|T)#*dS%ꩋt6Jflf9 7.fq|q4ꃟ0T~Uχx^SuHv3qU I97].&M_5 A]P..47*.;MNR-襭x_dC9+9Ca;6鑑g>mDwTAQ,R&l:!>j](uĪiWxhª"M*@CUZ%o-Do θUh 6ܩ6-DܷXT]+|РŮ2x m|YoX]ӰNBIrh?D2:dZ!T/9=T5 KcʝCI"ZKuދxNsk,N-u!"I{¸(5;/oMc:4MQҁasT3; ^H/%w<@:{#  <" tO8BJ-9~;dl`yI vxg#]ڃ fo*Po2JW[exG5٭drPn9.IqhB-oEVmzNDo9S4рNRr-|Ԑ ܔ;"红celNYѸ;ĠZ"\b7PVĝ򨩾m6껾 ġZi'1cp4q5<-jf<qZvU5&޻dEKPJev"tPD'U:M?J=_,ds*Ͱx?5%PF xf21+#Q"?.C4X^k'>$fPO0G?4I@Xt]PSMؘM"`T=eʥIA"\$=lןD WL-}Wq]YMSopXU:l׆a l]PDs bØuNceB#WщP[x0ph>.h <"u#ov:&E!~(R%ę"KsϪdtV|v1duI I8`U1" LMNWu#[ti<4 8 חC *1TI\舉x(;KLI@1qx Ӄ'}Q-6J 4x7 "eD+&6 MiSuHqĪxf R-Hϙ)sOD@#QDg1k!D?PSlԲ`eۆH P.m;7R Z[5 4XPh ѩnws(* rHAR/ ;!e-l*ޘGtTy䡦o C%Ѳ qaZxFwe kr@&GL5`"q:)WMyk!?opkW*U-C6՟}Mo?C)/oϧo!ӉP8cw"ngC/%eR\@E#(QB,0 .v2V4[\)l <ȮC;d#F?)TZM fST4F o‹Z6dr*KxEWZP:TbǣsPӵDMéh䈮'y"gp715 |6)k"u.MJ^6XAu99pMfːdtHσܠ-ʙ桮xT1ӞEd\Oe#us.2|ѥ$ҋ406 k_D\Ah?TC},awȝދ$N0s>Dv(% 7?uil {X b4IyϢ~]BOX"_>C5`#PC![Յ5 Lď@xu=1\ǘC] dMՇ-.4{^7&6y-~#1t_G*IOUc]FcNê/ʢѹ eZABG\nA酂DKMD.KhZ5od\FsΘ:Đˆz) {6 [F7Wv\X U` IO4n}^j'}Y0] qr- MBiNk ! @U1- h.7<:L 49sco;VYq3dKs ?kXAq7*h%Nlo~ƷOX䆣\8bQqxn@CNT>;]p3eI憦C2wK'¨eOO 7;<!c:ڢ#T=3%m4/ssUS3^C=nZ&K|fCB'< {`!R \#䆵9q:,䡼(oD8p$=0oVӟTùhʨj惝$ *c*ư`. ;Btf눙JuB&pkFMeVˑmA!E(Q0USQc6*Djx sCȒ 4m6Guލ9 [?EI$ ;ttMVt ۡA$+ߺ˔B ^4\[J'{/Ĝm8=\EʀbHMpq@$H*ZM<5A+!=5mkvDxHi>!U޶LIGTgQ/U݋{CdjB=11,a UrFCvo%HPw.̋,s[[=080v-Xa762f]~DmJ ׄOg7U~l~d*9]U%ATɳLˏT5(4tH 8SG 4-| n>3Ë1uDWIےu絰,~[(s:*K ^Yñ NFw4G 7NLލk~'1o]˛IbqK7B/j(ll<79w }|^膶\phc%֒#[@F)dFiPhG,"P;Ushf0bFFN >AIUmfXfß 4*mBdg^i:7jI}f}En {Dznۡ "aI UM.qkkM6=s?.EOw|:=1:M&!=l/V^׷Y<9mϸAͽNZ7䎮 [1Ky..;עCr湦Q^r)~sU|=8H".ߪ5zW!1meqߩW3X H: -ȺV9y^ ^䋐#<ԏ Ëd*Υ|".b"EMlNP~:w g:e*;rEZ;JE_x6]KQQM{X7˻3%bWw,lkO%KP`%#u~Xro?Gks6o%ܷ܏fujyCPzU6rj!ubWJ50PeUMY"!UFq=p5*1H"$B  ~y7UU9u(w' zʤ9@"ʱUS{:|=L󺓪1$#._T.>e@7-i=׏-mӆM.#ʖpOV+T.HyGbcg0H2S/<4nӄkqaҀ'2pt ICYx6WU.6?{{)5C-]M '-eLٴMV}z P؈wxRƲI){Tu*?: bS5].Q &FAV&aRm͐hh npAʆ[G~+]&{c^@sf`YP\KD>;sN}N3zs>dLhnڌ'k߯$ZV@,q mϥfY;um}-GB5a>G?*~Zt܈bu]8u<,msC]Kiha~'I=_L{ϼi-~f03NFE?OOIi$63a5>'f?x'Æu;#b/6 jG 3~$/ r*F6RLs3b6AD).Dn.I>j4qVyZ2 NuU[#M0.'*4/ !_?vq|:]i#;HsxBHtEcNJU*ݗS%mB·n>T'j MÄtPe*T'J uu pRMZTd6_ P)c`\pqNF3{djm 9ؚ\@"?0F#(\9@Gwv7ĉ1Upy~eSªl[7TM.?urnNG84 WzF[FfO./~J` bCYrݶV\`1yteItyBU4ngTD(s$p$_N7pߚ4[ ւg7b6*Ksċ*1}T_u6= f]oA.VD*`wTG©DK-JBušA@& ,zr^##zb|FPm;SGZUQ>sr3 |_ -1~z%=mQdi%uBs*v"F@1S\SeUM<2U:ne/;8*?Dk$R@#+uD;=!~&;:˺ov3SŜeSrP es;5xS+aZi0ؓ-86vD]A,"aP{ޯL)u#_u# 31 y!#$u1^eOϻ F "U ULIRnH أzG&WL|d4kh঵֣U\h#Xټ$tE@dQMV9"˼~%:)1oGӛ*rA&?N6=-*x<4[H9m/Fxf6\X^H_)r惴D6Kw}T0-' 5n 2jov(6ʩ/3\LN*A<10Y WwQAʐ *AU5[x.u]Nni!.yl@\Z~ARwM%Cs6@]:OĸĪT82c;4 \|^1:D|DXJ*D/TkŪOM7&F@!",@pf wze#32m>-U }6|[lJv*4\ ByNw}ػO$ `B&M,hGgd~HK]Qzamqtb |ѓd<(Γ[㓙 =%p (UI7x 2b-G!%SvEM dU̞j/ov YNi3Z\-YNh8"x+[*M!AE_u4lu62opZR@ymuoEjb{L-q;*4ŎLPL~jTpU$ӧTlD#r@Zׄ CmNz/ȋQ裻-C4^~DfI]C\A/ pCqݱ@ @+5G~jeo_:/R~W. &4}R~٩?\iԏ5_u?Pu>jlE]5'CŧkH_W4u 4F|~*PϪwAkK9q=W55g)4 Mӟ껭R؝?4*e42e} s`!?HCjgQ<[&$&醑7OՕr|L#P<ԋ+y9C] Wr+BX*¿U]QOڏt]P9PwdLPUpsF P BX L M/&zřo_Hou q.!6'S~sSp+8Ht .2YqT?ؼmlv3 Y yeGP]H?~wNIE;68D .wS(<^A8'KA H#O*H<( AQmWCE> ݺM: Iֺ`Rpٺ-]P(_C L.!ml~>cܣ4?CLSX]LT@oIhFul7̢tO@xk\'Fۚɫhv-*\,~89.mѢCmv{A#%x-wwWoP-x ϹTd~۫y Qj{iRLI4o`ڋeP{].怯.!܋;o\--¢ 9uS}|R/RG;"\DR&uAh%wmp>A_1_Ϛ"GzFo&–F,TTlEIsD.HZ%C sPZbq.<*NqeΔV >J#m'~.,oo/9́'7H;h3拻`n\ڢ"pC7t.2LeNquu"z˅0I`-,'pqjKNaO}7&Ivn1nBBLf -{:amnyy*A1;״Ȉ3Wt9\NMOH8HʛI谻.MͷDt.x'Ԣڄ}Uz NapXrM$PP !qk|5[T}OK)^jFNWx`~GV~`,Y@ń|ew58 BGD%EhF6 A_P싚o8+ 9hۢ<&4X\n2@\,J?NG*!vƙ@Q9՜L]70ePGR, pBV{p_u~aKCOEp覡VpTw>Jj ZtDij_C.}_ifI~\/&:JR}&)~>KWzG@nTUK[>EǑ_UI&>yW :Pߴ(Kv%:EY]T++jV#M%.r~j_kwzh7S=MO5[?`졽?YN*T6O\쪚z o9NQYVqKT/V ;3 ?4S-ϲs5 *q -t 5IAtsV @+:ii#bGD7FÚrq>yG<#uAͻAO&Ɣu ;aT녠@G2A1#?S@=pSZFU["L]wY,:$A \n$A~q;s\-~HAR,3 5%<WJ]d@ yDy]QD(K:u/">ZdF#\ShuuWv۞|!DE|+ e:p225O5l-ުtR^΄[oH${8D~QŁ]<7īXiZ%NܕG"Zo4vV%)wֹ"cQ%y_K~trCiLF26-'䥼 }/ Gż_ꦯCo*5fԵP 2]S&8@906aV6kQ0F>*Z|.¸tEldCV*{OƕvڞS#ݏ ;E9#->j eY%f|0j B 2#TA1kmMȇs(}ED̻dok`abL^<"oyʀt%>gAd U ~HFD~6i;-,>H YdI6B$DE T5USkO-%2gʉinc e@{W6\B#7Pq .hoIcV}U%1\ jt.su:sU׍ gmʩ 0`M dxq%یOD+U5:f\okQ-n"Ɩo9^<[#5@Hp(7  Il:恢7W<+[2 tgqlWCAtoP1fN4lLU-s!I*4Q&.Oސ\pṪdr)\(M_U4li5xʑ[";*N?,m7mW90_K N}5*s\&橪׺-xTcaO/ i҃5ÝM1~5s d[4"C'p%WT(W/b= U}]GOSi{w+fM W{&h}EYJl?w>u&?DO\wli!ϱjkU}=NQ{VjS>j5}QPM=:~9!w]E`.ax2U.cRֻY†?q>ĩ4G:5aSGLuŠ}>9J! j LTv&.S:+=R~Jֵx .6Y?@n`/nT)OޫqJn(²:EaJ6(|.\Tz~C'd^%pD a gTi X_P.hTwE2l[o nS]J*4@AXǿ|\oߒ#EgU!x*v Yn.'qB! U:{%c*FN/Ⱥ(Nkqpj pRG4$X01x}v^j4\w^ʦɕnbUOS.&Z χ^.!>hLߧ)G ͳy.O2Y5rrc*4A.q ʇ4 ǒ¡$Z\:d]C@@>,3izmQ1 5u5Tt $lb !qn6CTj8UpQkd!N$ͅoC)lQE2YTiE{TO vP;#%j / 5$Suy]uk iK]OA32 z[-lJk<uTǚIcA6p=bQ$k$6Q4HU8,0ٟ 0ZE|ӝ*Hf9WPI?R lCTj.pmx*>F׼*pb YCU+ 0 ?Qh#_T`#?:GEWv aIoaȕCap tG@6Hk-7W? ?/L!KKi%ĥ_=?TiG4ۺ@dZ."܄\M€-%M)RV@?wr $\t@i\!NlnVOUQTȋFmQ8El"RtT7@@t lnrcAqQÃfX ;}@٨xxlEgTucj}'OQ\l֋y+.K7=SCNҸ69–:k`="l+~$Ś\G÷-Q:%h z.p/ԩUF:.莰j$aoXL]ɭ2r&j* D+QH'dxTp9T}URoHA '36^ܕFU9<:UT W@pʚ*-Jt }(&o4 `u&CN U58ܸZD ܑh!MGwNlo3$3P7 hJ-" pT?s+{§P(`_?:Z FU}h8G; Te׉[[׍pmSWi4.-?Tj|%VhGwK:'ݻ폇f+T}hDxgG~Vp>?CG[셀5/~OE2?ꡚ,PT-%H{%Nly#HUS YPw(/*6’j*0 >{=%eUdG/gxcX8^H?ITyY᜔ ษ [idu4ꌴt2.wu-~P&}lYl~K t$rB@"GެDdNvRenÌL@t6%Mpm:~SV!Ozu@ Y<ͮ˜995>b|`}-%pe^`K9)- \c!Pu;F%]%3n] 'eU7MdKDtT6!޸K.; 杧;@Lxnlq(ɞ|0~Q`",eMQ3Ump5#Oi]8`Ho0kMw dJ6_T‡43i`U`gRr6Roxu6 ~E!PvCV%Ь !܁dGuWQ.PlrC}*Cvv?L*`klZeO Ykp7QL:bkþ^rȕXr % @aŪArM,ڶIs)w 1T>!p3 N;kD8v:|Nʓer9E/{THӏ*$F (<6) 4[ĘCiԨ86]:@D^SO35$la[-GJdrC@h8$g즹$p98Rub ʤ9&BK>a5ѩ7B樳W.oIC].}T 85M|*n۶}Rbp[k*G 6c}nqA0<3hhe!(!M߲Tz*؄^iʉ*+H5b%~ml(g;'CޅRU̓+ 9-t?QY<,!ksUUYtQq@O|i.s|lQ!ɓe_vzt\zA*٪.C C'k쥼R]7>6OLUTA\S2jZ " nSgZ X\7uV*H9T{wd,Mլ nh<p3H~E|q6w\ *\-.:BIBP7R Fׅ0E$m#RyhE ԁHmE-kDl/3}"!s!Pn jVw_jA^_z{7Sa$.*2mvfF kZ^ȅ5N.RkU=QruS?+t_קANX3!d}TVEpAc/i W;}UwWiUq+ nshWROfT0+q uuCϒq~D8Ye}+,]A Qj~a6I#XsD1 F7ʃAsEMXa !s=-;b6F"MWtk:, %`62}MXLk ?԰TLۅs|XMl6-PM<3r6-onS7 &cynBE$!SZ9WYy*=pi𓘞vGR-U4^-,6#ϨV H ٛ?<{ R6Dpsy'i!Pktx2q6ݕnҨ4I86gt_.8R& Q\]5LEU`7CSQ4OTZT luLk6hM:sFǻ'TX)Strڄ`܅3k.n' ;rX)pru- MA-#*"e08nQ.~lb#)h l"6nkYiԣpe- y.\fzn 7y=[L]AI7l^ӏHK$["?Um=/ pXXP|.-?55 e|kx#7+,n.vXJQPT {aZјiU eclJ~@>yoy"5\k>Br9DTGӚl[*l~Hwߚ!D٭?X`?Dx}]0J 5O<)ʤ6AFTIتcLL*Wc(0t C6sh|G\kjݲ-yLi5E$*E4YV,:kq6&-椼]:l_-0@sDlZѸ4bmPs}Un'0] t$͸PJUi0ĉ(6-Ei~qe[]\_TVRי..?u=ַ-k\c@ N.i*U"ىD^]83h-4;:ǚ%$tR ?<KʢL]FE.#< ~ܧ椴t b-nAH9:4uR둞K`ZPqd@2p9b3LԪ-{Wt*;P'dm'-<ԉAyXIp-c7DQ/tzvGdT߹o= B +cw=*_}!VlyAuz+'J|S9Gpۗ?5 &/W(.2W`sSk!Nh1gnۘ\7YT is~(AXE,BAFC{VPE'0u56P N\bPGlGnVԏs4>%Hz_vRv2AoS9T+h_gK wg oV8Tr5m'1iA/.0v ,;(B$Ewӈ ~<(N2.iț`ey´qt9jb-t;&V>HkUp<`LuSsPAľv]qp0A87[ȓxSq2_7<$\Q dR>H<?u!DS&/Ho*kmt[UHS'#T}^p* 6 eV8vH9 L )0UphDb7#(ߢ./Ruo*sRGꀪ+*^@;"|K& !Ϗ$CL߲~%ا{'#Kvx9TpyNdB߅ed*I?Ӆ^ʨe^B<[u=TVj WQO_u/k=WѪC5gٔ87I̮]C[TG׊Yq9p[j}Էe}"-ԨШʭ Ť|zZ<;)x솩첾QpU+-dUO^vV++YFv :ٷ6$ﲭ-v7kQWFտ\S*\r~V-岩w3K[b3*@4sN"#1k{ oT3>@kJf)kA莛ێXU|8r.-.)kmiD:Nҳ*Sep'긽.t!\*j}\ˉ%t *=2E)J0mmv!Qu{4_]ӣ-365f|ES3e^*J~xW(b*u\_'HEu<>w{qhpnf܎r8Gt$~ɸ愺W#-018&E(QM(W"q?$u 5{=U 4Cxs]hvu ]%~=P![k9R;Lur8W}Ch91e}BA/vBy+\K~hjK[yo%Ur.RxLj]EdNreK.򤉀h]HCZA5Cv_žB;^<&hnOTnDM(>yX&f ]z8[a7hU%YK}yӭLu(1訣';{省;Z"4z3R'Pnn |D]@ZMa O!w#fS 6g vT7($d"" )!s;,=.7>nPТ" |p)٪5qTĎ%fwU%qo1ӟ""Qr- 6EFLxw(i =To,~jiawZwb<6Pyx_uǶ|CdLu]惝~Riئ-Y[{[0a^q29*kpsʺq2'5Hpe:yawdG8 s樷%feP\R&]&wTZJpy@@0X. Q dm䟨=TEʇ&&ՙh7<CnSOlg+mS%C ,q7 ۟~HED69-S@u37N'N@O6`Z)惛eAӁ2M"}U| .pO,z/"ݘjIt e#P渍~wַ}U ^Pk~K;!/dZ0A-3Mn6D boouG'n%rT Exlw\GSiF&9*/Ut ԸI mHЯP?g|0?57hA lju Ŋsi3|] |ua8Ey!HLvD{W aCBrQ"'qXXST("|F!ӎS&QjTu-; DAK-%p p1uKy*e n=%Sr p4ӧ BL\+yWy Ea~+DH`nHݷUf1}Ǿ#5|CϤ+Z(vS(8Z PɿBjuUNش˅ @ldqЬ+u\i0*p9`ZP4/X5p>J[rEŪ}O䡬+ 5CM⡖W\J[Weze/n ʸf rT0.P] jfۅrj_=GU' XQxV..DB5y>zQL &}K](=3O%ca@f xMslw +I.!;xhzy=]hVϏktLJdq<ɤNc @Nl$aRzE3`lZ ;.su2&ԐڸT=B-"s]ೢ]S"ׂQp#!^;(#ĹĮuۑn, n]6najjc&¨5JРU_4@"6@DyS3c[]`G610JAŸ^TA2@U]c) -jF._ ^rVɴ!nEE l= P .ߔnE򳕜 kBjnLnߨ?eWOzqb'x*G[Y~(⋂3>VRdwBUHRLrV4{Cd S +ٲTVȦק>ĭ-%-;L BBX:^8+AW!j1ՄH벀;+ 5fNS-~6eoےkcŋ舿'YCy6;)"M.@ ]G@xpy&R$x4Ioxn©2)m4TXMSL v^UM20-{lB}, k]L]fWRsk@EY  TˆU\<^a_\–F*ADlx.q1tM F`sD "&ֺu.# vDg YQO$jy~C5Ğ pȇ|>6B%5UQpCfCI?D##y2"Tiqߢ!ErSSxM*f[K=@\k$U`/&T'tjdn'_$eΘ22xp%Tִ\P ﺠ7C8;M"[?$R#P8oSmPuoCmYxr\V.J&5Itr!jK[Ӛ'WBI . GYo8ų>4ۢp9~T"G0jۮ+BZ[@ys 0$ˑsvAUSmvݦ0 LL)2t-9V/OY`?ꎑvH'4hiǜ#HtyFAE KaQ"2!5/]xSXK.^.& Gl}/C`FvvJQʏ6ZڄvYxVVVVW*0*\n'*ds(kIRtܿ"y0/$z+j.1k> r` q0 RjT|vl_%fep\H eRҩT5d*DʲGaUkVĀ ( dNqĚ>yaNjrs:GR2=t7V"3(,1uXh,qId8U7 KF.-WO|" N`%\THqJ?4 lm-"C 8)h8CL~R3i?.ʦX zNh-6MEϹw7e_R/#vl{6$⿾VodC>Wp zsF"*QnUlDd,F0Zstv>%"boPWhTR8 j!HvO4^~kzT8eI0|,wM$~N748畖d^syQWXbGTqt^T3yo+*i:[H2ik3o/^kkYx6WlǻڳY\'.*gt8>,@TXﺬxVt5-?UA"/(ZTA渟4o`;H^aUgC*\s"N.fxYA0NGQ17ak-~%M8\=QS6=]{9m- XU\NEd o[Ԫ.~*Ug(RɧwxTOA @MBPt@ NP¯xEl}ULt}sWHFlpN)ߪ581ZwA azw,y5 -> 8}.K7WgC0` *.q̣P@ m斓\샦KH\-¯&E* !P\&E 8'$( ` u(tUtngd]a:aD}.Y"ވѭ t\qU.&֨ZyllVPp2U#2pP{I`䪤(Q1ɮM}X]D2h@"~s AEs6H|ηi+1d>+hb˺h)(k H[NFUc9H00FP=I6 .ycR֖ ?86sx\;$j>is踮 vQ=aG_NЇ,J>]S#{ _|s`y;.cp+KI_eq~U}d_^u?i}T_yKe*\ *pʗ(*eeg=XYW=QˉBIQd {(T[ubT<9.kO4{K.+a~aN'e6TNmɞ|st| M(џ4")u˩g`ۓiTÁiT|pP JߛH4(]t̓ G.gUUg _`xW~h\sO𚾪^j]t_"'x}QfDRo*~DuT܄.#7R %ϙ$9 ;R>!7|S -{ﺣۣ5n#4N 6:Lڣ歨a486M@wCSDiEqc>l &%H~VQs~ބhmqHEMs8o(R60=rgl*/U]ɹ\-J4\i7L$Lye__[s1*Dbۢ{AUKBWy샤o9ɏĘo]C-6e. uNaq6G$߲AAJq_Nۡcز!L[-{ Kpʒ3t<4+,Ww榳Mڦ&Ɂ+ބljy\J4n4It\ wR逿 ^3sQr w85'iEu$.9ښ@M(19ᦙovT{* ɟʄZsI?%޽..q?+R 4Il*i<Gqa;qP2"2 ;--SN*fk~jց2OUr Ȉ9.1;&0H*OEk0!UR1>ʢ`a0O?5]4&,%wRnUFA7ŃNT^vUW{٦~5׺5>5fUa!q7k"yx"Ǣ P$ w Z7̕ o<%D@2D쉧$iui79AXcHߜ*~ ٹ!:ݛtS7cxT$1#`U/p21rUzWxJ0oi_O33t(xP-=Ptok07ݶ\N H_m;("*IwQPp(A.`DfHq0D")N(x63b6F9>)-'#Qkȓ s>* #.ES Z!rPW@@ Ԗ&Z%x0 )kT8REH-V&w1>NyHQL+)ؿ ӌkSLMą;*sS֕CĂCgW#v@bc c@Pa YԪ'f)ZJG<ҳ"h;SHuhW U,')å9Ts?Ps{.d $J>FӀr?E]B)(9T:THWxm dV|f'u4\UH.#E]͹LUZ}y YUVT"HԥFRF4_>J)D6ӲaU!He :~tLS\49tꯪ$ $BGMYCcȠb-TjڅE y`.L+N/ Yn$&w3zn> C]rͺ`J.&O;?P8.&棻FwUA͑kKo !I@;SOރ>)m+w%`]ʻf;)gqr dԎfFurq?䮬@Wq+sَYV^(Y^%5)xVӿRq.TI,npE [S<WP#Kݗ;8X< ̨`$n7ӕKn7lԳFhát6pa~S"ueJ$ᳲ.>GR8Q\ɽ[ۇY2'K.mW(Q leM'NjS=2n ʢM@Nҫ"`^"i:|_;.@v$ҟ ]2o{[P$KH쨧cq,+ W ![U[R@z}Ph'Q4㚷Twb]ۘ]s;t-1"/'pkpdU6(oD)>AgLH0 u;k J,n#4åp>\ƣ*$\j-UYU8~C$GU".(TCDH1=SCMH'7No^7X3Tn"'#_26U-BI~hhR+9qN7jm 7*bܑtż#tE&Ώ;p uLC߄ۢ_G=ֽԍ$GF žh=Mj7R LYS\Za>iN<.nt`OUPpp8;V'nOT" Jb%.c*_۬7@8ےWM`u4ÌD/e2b["b5RوCͮr|6sTi;y]$sOwۚv_OAO|L:Jv#S5.4m÷54 * ߿En2%g'iiLtGB%%Q@AͶمlDjf- !RRk Q$mOs˛* @/~R"w ⛞vQ_?$Kj?"y@$mo-2|7U6 Y ӒD%ZLD4Xc 틛O|H'W셋IS?c {%OJ=SvCB,Ye]z첀}PLC۲5QGL7_J-V{nw++5l?4ߚ5RD.>HD߳*~ܝlUz%φgEΰ*K|̨ 3Q&DPU_Y@ڐϚo^g$E_}S2y'4ȭ9(Qdsy^׫ Z>.h}栘* '=S˒P xL-FEv%:ACp7kبKIߪ i /fTn|2  i]6jn,7Fm\17wCZ[](hI>:gdYa\t ȸ>S5rZm>*鏢܅v>-<3)@{k F1e[tddA%#".UC[=?y9B,x:QF0~I$K-pmK#ZSKoEWwL6sPhtD4(m넣_a(Ơ1pܷË4M&vklvY̅E"^ǚ(nU/pO%Hn]c$\G#/5@Nm 3(u?6gxiRSY#h]ّc\@wNvu /!ߪȵ;?%s\ ȔxO@y'8{ |mq']<<\ sRE| IBMB2`}q7V-D@wl6UiiTz]p.H:O"F-憣FNZ'G7Z/K&MLPT^hJ]735QnEPl !0㲗 #"nsZ|KB[nJp0nyx#L8 ƿh9&1Q r.=bPnk牧oO?nx _]su\\}%2SߪAhS 7 L .O #TW čPkuZkfDvwURu5toC HD_  RxU8>j^JPEyŃ[ ڢawbbi,4Ͷ>j *s&bģL20G<)D@vqrU^++3|˶3hwROpd!R@KI>^B0x"{5l>/ 3U;mS079s|lTq':Ĕc%w[9>Yey"\=eK3Dn>h b˄_#=PԢGDk9xW.>W Oϴ4dܰvwLR{,@PYŲʹV q|q9~?SfT v]ݖjʿ9L-9\vתHv5^>JeR7Uix.iUuaLrT.1hkEݠR(B|(8tT#b7Β37ܪH6]üA׈8&3d5 )NP|c@tx;'S[dMPI]C^H0oʞ_J$]SOUQm%ۚhc$TQpo Zbd/. hOym.Zo(UV p& AwK%[p|7†*&c=z#6A0KTS}Zm|n9@U8HgS;ƒм)i(χ#:|w f1eUfwTXS)#6D`hiEEKjxMUITNfc]R\ Ɂ%n[RDl9O HAM/ӯd htsK5{ONk"γFo BrVυSWN:LQ6;[~YU6d`oi"w\SODYߒgN~$ȧ@~J>˼1w  m0dr.y;eKG9H9N.Sxii8;)>iTM9*;QPܨ2op3g4pUAsr,&g+hcT4 Nj 8,A@>H3L8(c/!5 A~ pR JkC ݾN&l:CH(ZZ#0 (|Bb]"A<ەK0fr+mA63 y[BJuG\Z*\ T(,&1neKf2 t"Uf*B>=@ ;MGESٔ{[z/| ^Z.[2mtOp6X_Tw+tVܕHx.2KAĕn#eŦaeQsY+vWl3u݆$4꠹O%h I9R\.'~jO?4Z ]G""KJF8U Dg}ey[Zb[\3k& B7Q;ߒX#ϦwFFC]2u-l.)#q n%|5 xOR[K6Ei'v\$󺉐[h'l:C;g@Hvj c UO,Zʸ4 tTpfdZu M7GaZǒ"N Q=UB2M#P.ax?"*~,&H\@ISiw2ٍJ;"ǛmTqUɦxp~%b b=q]GQ4;eJz )l+iԍi/OUT8U=引eÉƘ8Q'=T5&c)ɷDLnew3l3Ag"LFHVl2D/`aNJGeW.\ +_>vW =M";*qa[򤫫U JݘRNR}@ H+GF+\ʆW?\5IYm[-ڮ̬^ ¼+ x >Jm+菒hKtؤi \*U_ _ 0D]֪%R@FɺvflT,`Kfߪ.w1a >˯$Tạ!<-S2)DJE2KSyS]8SGʪ1+''mʾ 6?Eg"lD|-#Wq;\ #) oW3oox%ˀ@pCqpwV1e}ךk4P8csCtͲ>j3h S_sU8} =mf*s̀<63wzW3ke[ LBw99@vتyaXbŽ &M$&<9QCM]ӐAqRsDŽ\N5 cdj1NJFǒq>  ^ɥ{A$?<~o%E"q0c* \v.0aL#S8RlR?ulZǼsU#'ey bOyh`5puqcnhPiMUA1ҕý#<0p ׂgLrE{#7U ٿE,W0nGdf0ԵbŹ1̈t(@>NC<3Q5ڿH m+ezcx$6-TSo䆖܆纒۞I7D>Kq`لtuXZZal!C{aW1?t\p7\-uGd|~06l&h.$ub'ˀy&[Kᰦ*OGȪF[,c^#;k˾ z&*Uh`{\GJitsNТ@?p/B𛩥0z!i18p#vE䀤x"V@@|e Z&q]R8,NwjuT9Y8 >jk*)q\}Q¹LsĄKfyFM1+( DwuFЦ #8BMj%ڂr bl+kr9Tl/n:.!n,bvR>hϬ}ǮUoeVӞT8ɨKv{椳FPv݁ V֙?~>Z4@QFi쏋`yٛ+ކ \%fruVWV fǪrVT,+upwvX~ܫ9]?~XY+ٲl/ …ްHO:,t~i:pt߷e)Y](FM"BgPO y#,p.6z@+Hтq|գ{@4D쥜CB CS*7vELUix&>EW6祔 TTsD/~}$@uk.3 !0d4}-pU] C2w 9]\@&UaL9yR)9>$_s^  ˴3-^>[.OdQy"=<U=fJ"G Gu1>X_ b4=Z{LmP.3i#mȮ2'( fIl9/ Hʒϖʇi:tHM­w kk_j<3A>M|t8g7z+\ɅX(w*NH(L \Oy7DF[#`;,Cb0x8-U?;;<zw׸Ϣm9%§˄_a$ wU2wA<(LpC<VqMn\7TgpVFRp  Dϋ}p#V,¸fTMDAפk!E way4|`+o}yA?3S#Tqj+qMC!楓sXևL \muf~YG\?0UQ$p[{)ʎឧӵZB {*ąM"2&„SUESQ1Q;) t xZ}3拨D~wtH!K\浓hn\R.e:bNBmFGGչ^q,1nN⟪kN<̢DFTXXnvQ~H19wnpػvN/&yBYR5NyNOv@Cg%ǹU4;D;n+Y:ܕ}BnFL.GpHP^:t@ ~'L\N{D 0%9ULDFU, Ch,ۖQ$u#+3~JU3nUF(ӻESjmV Juf ¹RB캕fcegYq^0g9q}-*4ޮOW!] ĦV]W?úq177=}P܉$ 8aS4ۓLeE@V>+J C~JOYY]Ea 6.frwt ~PlA5sɰv6\Cidf#.f?\8Q}Cbzz]ys@I vboXUM&=\Nf5ވG`/PQkz/O8dUw0[֛{ЖdOR (PK  ` M:3 ] .yE-,-3H `t~e"Lz)S] @| 9d7PcH.P\/6#M?1m &օWf`l栈0eUV|* U5-1DzcٟD8wU/ QM3a+J4V~K]]Cq;j-Mf? {誌lj'9|8S;;vR" {]NpGq pCcm_`_יF~hd[ ' T4.\ G= MTw1NuP r( Hy='T> OKG_TEÁrz,X6Z%!L] *g>kgOf.5v|r/=y~8Ry->¨<⵭6T Ī>j.>kpC/qk"4S-lOx~.`rؑU' Եm^mϪH 6t{*C/}AӁ0l>Ki-`[y4'H8q `=kā3̡\vTv@A_x7k8*2)TȜ٪T" .A$GGO<[NqA-<(LFIC4xAB%Y̬T'YwNEWl.9軧;؋L"MlԹʀ,g`-ۜX(>rdC oQ$%p䠀u.5C㽰To ])kMǪ.8Yߊ҈9tT|a щ2 r5ʫjD#:v@#~ڌop9 Č1W@6T[Ry"@ ,)?0\>m'k%4ɆL}0AXUPU+bĻlwU^:q.I% ԋYFTmC5\:G3جql?DNŞ I[ ~2+BJ)9@T4][r\JòJ=/`e>U hV`XjVZ/WƼKIJK+++=}%Vz w+?{=^%eQz*ܨvXQV;!8t?~A¡ ~m)iH k`9S`^d2b@7$D\InHWHf|(;t]sv!t tE@иI*[*Etm<3OYA}1yiFСh.' Ms">_j t^Aiy<6D*V DJ]01]QlQdneI|6EN C-lU@>ɮkcq;ΖRswY3 >c ZVT*'d%Tb5ISdP<'ϟU^TR[4y{* %vXD;b|;^T7 6B1~0 E/vŜ`%{!\UT $eSNt&S{긙2^K$sA'RcMF|ND EX*|S2|N1PDLAu(Qܪ1x(MQQ~?hU[AN1[amqmbU$ĈnɲꞰWẩRq6q N홺py\Bw`7̃qUWy(uS|ġ}++KPׇR) [W#BY}a=TSè.Jv86ܡPB?`N:r.BR@O$H琫vYl.b-Bnw*d#+s긳L`&eYWvcTϒ.FPds*@TU=I,9 q<Զ e7)d Z ˺㋡ |!=ٟWw G|ؠ[0G]e[DVc̑(HX5߮ vϓ$/zT)sEO'kD]wMv?s Ô r<;+UEV*Dz\UϢ^×ekh\FUmܬKIJʕrBXW*F]_QxI\kG譢U\Z_E}g|U>p˵;WS5Of+˵SW_U/o}+֯>j5B\g?z/ X+nY+W/>ļK'Tpn_?%rnQRܞUL]KE].OEh$dp "AP8\K_ҥ$|Mws>R x}.&|/ ԉj>XYSgsWxZo%?xAUXm/[D"Q3C^sq|M6p opAc y|Libi{@nLJ­Oi_5kUXNq|uM%ۓ2x(:x\Col66;OguWu.M.m47U.D6) ? {sP7]/(> f~yTO,M@긢*L\Dc)0`rD '\QL_3u% dNUy[ZPVʘ)?r-qJ6AOe N:68B6FsS>_"Ȇ D@Uٵ\r@#}WvP90NnAęM HGnJ4[$؅gf6 9&6-/ĺ\o* $D,U.Svhgwլ\o i1j1=<ߩPϮiUMPVHMUS?ol0~Q40M"eKZl b\\Q䋪]7?#&sUPm>D 4),Ը-E[F6M:q%| 8E3*gtARwV5!u1p!A]27yTwċc/.&7 #o~=BŽdFqaP^T,6DtߙZkc'^yռycQi[wqxn%pt/* 2yG3N86UWEv|,}04[O'V;*m;Dm6)` #U |mա.nˈUDC PZInDOEA歲H6~ y*Q)"U@ź#(Pd55\L~T?@⺩\X%pyNO/aSxD>Ԫ>J!+>P ?;,|M5M&?)עU{Vv &]Eu*b?T*0jlTؖM"U`'ln$rsA<Э!KL8nͻ|< %nw\&JZ]3niH@r6Q}m<(SiARil*kf?wTfJ.TܻwdQP#!Lߝ?] pG$lVCL]T߳aՕGl6 RەSNWT5_?zKe®Uەܬ~\Kx5l4WUq8mhPf;<+<,vaaaaac /x+oߒagUJ`}*NG5h^&^@sew-< ֫%  Zz[;N\-<P1 aK n8J"*,p7ΊRuj KGB BdL*b6&f&'"br}FAܨfT64${NI$K[cuN9c.eSw.-39Fs@-Noec$&ǻ Q?%dˮ7J${*vn^)ʈuRLǻŵ& -p[ 6AmY/$ *80l -M}bW ;9UȲ nduI]&?;*;?Ĝc)9uch>|T /t^Ly(' 7,UD -BYG HqopS3Mfo*jYRE;dhbj}Tgʯ]?XeQ*>j^!\^o|!o Af3n$;#VD$7O&l_ % s? K}Q$ĕsp9A4R=pp<9ʉHM YPi¾؄ ^SI{z.<i8Vp,ҥsp~\MX>^?EDb8I&f,1Cy;(۷9%Rml!n\"/+y mR@x/-FD򆦗 [9-k Oy]ʗMU=xp"9uM1P/&'iFD* s 'W/(Uۜ^ZxY0W`xΩA@2.'(­ߒE3WC>J|`lFG">m4ʆ۲>};*߄+wZm$5䬤*4^CU%Jn;r-8n>ʵ0/ S_OҏN˫5q,,찱م,,feW5L^E44lW D*!~=9*|0Nr.o1harao$B.uzt)RN)Tu"rrӚꦯSQ苟z#%KƣuOzp0.B$Amx\Ymp[(s $udRˀE5H.TLʈF!4@p ~M99<^mY *|jL}UhEVs ;Tc:2m HYCO"PTYGj?9jo3ŅKO@7N{7u=L\\yZ*Rlz/id"O o+AD 2nMʂ:襲GRH8**h0y;q4 ?<;Tw/4x<9JK;v:oqice.>rf&]8Qއɉ Xv*8+ִ~h ptJl\@_\@2n^y[uHnj*ԢoqĸDl ;d*g;4'.Q;7Pyt!EQATOU.,FT7S(:0OvB&jeѵ(9AO V.a*i#D$uAAJ/H9)=zY~'uS֒sSSUƒewd.1t8MN/ô [q?sȢtlMGMdVhjx5{ܑuS bo ɷ_AFc $uZC)ldjB _(I5hZ-Un6o({6\cuY_!:& uovpɧIݕ} 8Wru%\^+Pic6(qCO7FYꤳÏ%~v\.6W[(~>10>zdD(gi9l!ʀ rd\x[)vәo%;* E ΁̅Qlˆge!p WLږ~WM ʗAhY(ŬfULkn_ <_ Wy%en7~VRz+j?O\.Uܬe\,s,l1Vl}7 TOJq䡬SXXwXXXNZ_;5\#\xJ*T}{+f9*$ea~"HWzkyrAWdN (; b P26Vw CL;%T/* ӊM $w#B3DxT͔ɧ~ư3Ny~ M]FF҈| $xA"Bq;8ܨ=Duʈ˾J#+QJ*$5^pJʫP|y|4NjW{Mt֔s1i8/G5݃Yp9Ļ'2Q-iu\))_ jr+}[[s6+6S ux^*wN 4א?O«D]@!dh0o.Pxg ظ ψj(;F̩?b˙hiʬ@>/%0tDKUhMk:,3˟t% D}l"R؟_U5ϕ4e]øu.l7P[ӳOH<0C$ _ w*`ymouR\cy0w.h< o6\KK"/en;-"؁諜\ oC NU鼄.Ѹk. ,J-٢42GBT6'^+ $Z. xj; fJ+TP-¤E&U`c 4M#!yV5Wgŕ :.DWnEw ԗ20c |Sy}B_db%?LH]{szi<]I^ a߅ >J8`(bh\:c7&>'\2<-A;%[;(}{MBKp,tYqI"ߺkݤԩ:B#ae$a]dn{"TG?PZ2Q y(}T:/uT qI[i i(@[?=9<0lڧxUԦXYi74sQI|h5U"v[]US/>S2l6! m%FFAcJ C96ȅN^8FU]p"y _iihnפ h$\@U[<bTZG^Lv M_rWsVBTԹ:P_s*p-Wl4)X}yQe SuF@ZPϢ;yn;0W '­>K____mR^?䯦}* m0مXWb0,vacm+=#DFW{MOkp ^)j' M©}cm^> * $2I#Pp%y`M tt50=UD`C@#$^IRݹ*v ?'vV@3*kOabqTRqwŚ9,mc+ G"\yAp艡67P o [Ew Zo%m)TUy6K 3aA(um*2MW\[8rQ VPt-1.x @h]T-!OW6Z)p[C4i\?(B4 =9DˈF*'tiP8R"D=@]{`|/ߢ~'y;dXce@$i;YUyVmDER-TX#hE.dxMm[79>̻$K5s+;nn |!SE%Ezrsiֿ%b`"2 #j},41<渑e7oR/aKnҙ K9uI"." 6*R|実}ԉD'mӘ8NdB0y)c~!Knn nħ:̫Yz*-ǾRjiӠ "@ @in%םgFPsxSd'̢ 8gujY梯C~Kꆘ;͗y 1 _.#U%L Q`A}y+[&FL?c[-+eFs졍]NW:HlY8f˝MAmMcyjK2]PM3p *@j5="kגK"S/O6Q L6¢D ٘sXցN|M#{dwL_gkipY4X|YK\HYGBst&Io>#:vd^]PԒ8p ʍc郿C䴵3Nͺ4EO汸;@"9kOuCc߻(%qjՠꁤ"ns 3hlHӍk3u 1D;):g{(fE%~weq !?S7/Z'aAD ` XWrewh仟Xs첕Z۝/Uwڜv}NٻKWq%B ߺ`UY^_N>ʥY^CD(;AƗAu4I2P.'ۧ7+'pi| z/Jq?{  V+S+}Y*ڡYó jPyS@ z >aP7举Ku%Wp{LJ˶W-l9 eJ8]˽9清xm6ꈛA:8컦U:~~"rUp2\NѪV|TZ#TRD̪>q5xCCDÝc K}tP(iqlw2/ag?€hFO@nU?xPi"]|{ʈ'yq=t6sS^#t@ 8P-úʥ,U qؘm``Yr$ s-oEbmV7ѨAeSĈ6Dh #U1̯ı܂rbWq#H_] Sv+cܪ-h\Ѳ6T 2ʊ.uDbS? ӽh8z< ¹tI ~#~ih-TɾU u⍦D&D an./VCR`A™:&xV>eqk&ӞJSo;*x$cҬƃ{~#ly(nUF5NVQf[SI %ށRQW`荽Uv[w%q_yFmuT$4M+ے&®]T Rp!~)) pߡ 7DOIMǕG.Tye:8I0D(.*Q&*x%I\ߐAx\:1aaϝsj b6vB~3uQ#*Է–]w荀'yDL %VflIPU\Pދźlnuj 4xwQiѥNCCv ŎW<ػL9sxZfYT >_;` O;4tiH>0DEDNAhG|GѤM2 9/  %D*5t~V8 4B",DvPѵEӜMYH{J˚( oMAF|ѯU46k;. du>dMZުhx/>.]0HfN׿&e`0m@DDy6&>+eV 8E!d"qo~CY.w9AG eI:#bQgHYxo+~蛖2};;!CUUy*(HR*gz T5^-5L̲d.w+*Bp-iٸ:#AL5@`;詽qUT#iѾ ySVvoR<+ #0,Lt.1vA"mp]&DU076)UU*Ƙ;P!E㋎Hj| 胦csΙupі.MTTypKqp]M=U8纳|*@Ao8'Ħ9.ot ?~AKD_MM?>%:,lYpG\ TS*A֐0cvEͿȎNEsDJ5A6XgkLM20gewz`^t3l&s N$+*;mcHWt^.|bUj5Y>j[« 54j\z0nCٝ>y/>J\?WU+UmxK__*A_WS\g|JUKZ@noR\ov-#!b0T 7`YˊBN 'k1N_?i]Ť WK x.NNfJW2?zq|;.T5]/¤qeޟE;!Wߴiͥa]>][RdJmw>N'OfueGVX/YK*+GJʐ~~{ra^"=w_t{WֿR٭5hGiv[avV4t#OY'j>jmF 54u_f{k }j9b_q.,( pnmglchP@楓Dms1y+`^}EUL Y?AbibruIkfk woj"T$!n/5\w gk]4F&={<3* 2-|]ikʼ E`Y͡Ns#槗!d ?vEI/uD"?vW?%ET.,U I^)?8Igdi0 N&/+N`[Ϛ -&ÉH"QNcxX s'nM}U.|ߤ=W1Ϛ胃nܔtf૒s]1Ml+°p?~j<.Y>5A4]e:Bnu].G\>$\թ3o *n ;rMhnq 6]qʐ|05l"zO2,%C=eDXոpB%W lx;T7?ine 7a|UA"s?T&[(taK P i"j< &]c#L؋m6G# @F۪C0$%Qxqf[57pWW%.hvTq eKm g ߢH| 'tAP>s_*j<%Yxp0PwȪG ]U3LOas)TAʫ4b\ZrE*ɞa?p ..bN6CP4dx%5l!!6\AlBGHQ-h>X@cQnMthz]\R6*kZe;PI&un$xRv`H8-%^Yy.#}GX :<0s#e.I=\=d}[K֜E 9A(?%yn§BRMi6R\jEA=mi bp-&7McIm(U,AS9J\ԡtf":k  ٫m厨]Š&R[[PprbȘ9RT"ce!]qIy%'Q5©̟5m긴)F^-%KU,qPLn00R5Bf$L}UZZ%U?Z6q(h+%l*>mRCO}L-P1a?У_s#W\UC>(ۂDA5?o[QA[^gAz߭ԵN/V5 u_?y%G78ps#Ow""*1|gieTHrG+^{ι'rU/pg7}{[[ (v7mWg{/֕L$UUrt&C߻Wt_I6E#>F XHI @{'ei" ZsּvP @5 qM=1. qmMl11|5u54؇KyߊppKf{j8X_G}Q B]r86/PPFCX%#:ź3*WecW^k˚89N!i ]3? Kj^Vļ]tCbvzO?욟vB[=TkfK#T@PH\"+\ZT&Y!_mF?hn_$u?\:;gkG0zrM'g'[KdD wV6ʏOV9SʃގbnpCFJͰzmoR3/:gR3@CS::ESIv:Iхv+5I*8u.uo4I;>!Džu@oGCcS9q?R\ )u.'¼?T.{#1]Yy+ i<8ASEcy+EK"c^1Ô߶=XS4WO}= g\3oO^kfT+.JWtS+*PKĮ+IJrJƥR\%a5ϒV?vǷ u߳;/40͞KWyY˺̩,F k;TLϰ8i-]ر7߰\߲y2$ tw胃bBaYߒ+pFI.7p|qmuT+Uq1f8Æ;W'fg:A]ϛw'qZ!;d?kDA;5wuY#N QU+hG7@vb:YVtl`ؿdmJ$ [nJ:9b]TñAtQs\2$ky#*#oȪ2LYTHmTd8ZB"['ٸ\-T9u3)3bv![r'*mWp\G%KZp?a4j5~|36A@ӓj=M8p6m#7^Sff踰Mϋ(H߻&`ED#K^M*d_숦d@ygߚؔ'N2ZA9tAEHW MW 0\v /_4`" 3u&¦v On,k]S\7n&hޒ2vb OTO)sl&H`%2cz 4q{)k۔X /Ԃ-N|O68o(kuAr ܠƇqª15 rivLyt>94^ @n'op˝ D|\X'1ߟ@Es_N}!HusE kvA2b !7ةp vTߢtҧXj9(q4 =n+0qŲ|\6yn'nh*qe7[@=$ʶ=kGU6(ڙ?h **18mS3p.N?i\n`,8:*<1 twFDx<63SU=U^RؑL[p|DlU3pF? FB$ITТ${Ij;ax T8.K]$ԀO1[خb2dA5 j; $ӈQ&N?cx-"cU]HeCXHtWr=eG,pwxGV*$O(;0tbw7$d`.tF=Ue;A>msI' s T9g S,5Zg{պ?ĿCct)#W\L5=Q߁꭮>kS*;p>K>J}To.ʧ7Щ-#X꠴wb 鿲QLzh?h.%c\b'HQn5 6$i\'yTIO jiU&aw6")*3]d[ʮ)Ef׃U4ͲtaT ~uTm!baP?UUߚ5 |m$?01gmM@`R-JuQ m"o<(nSG3냊%^y8oRY{J7D:rpzKo%PO^hMhBp{^jC @*uG_EI. TWJ;t.pӫ7u9YZ9ߗbBI{^kFBcxme:E< ;渆lUDT ^B!i/xOV2>jE@#!^N`6wzUj RoH$ے2sp63 ƷAi4]Dl;F|v5 u.D M6J%ޥ]TvB8$aKpݖo0eRZ iJ N$vy# 34G$l$#nhq =9jA0:!|'_ pYAuv.\I$NcnVEnUm]P@fP@@UmyRDkݓpMuK[R[-f]K NTJoWt>滾Aw#3 TLb:سwhs 8vGm!?rп FT+g0_K=BA禸~Yx~uu~~E ΙZ?axsȣϴ}U'MڭwUim.P*}%?wioz?kLHxBƌ"4~jGj?wnT4.#`m칀N-#pxAwsF ʩpU[껝SŲ>ߠ)աfypU݂SivE{-+NU_f}k'D>j^laiNob$۳]H\=TGmºg/,}ɩgX,PV*슯[ungV&kX'i<Zv<>D3=/$Z2o}-''El6MhO qo5371w@T AEǟ57♽Ǿ<5 4YQNAT)Ϫ%ڎr@K94TvE hu[*nArV& dKaq@%H00,ˉO(GB&gk^bq<~ʖ|̔ZZ(5"8p2<%s/1tF* Dr'*1m86FTSIB, Hœu.1mxBe.xT*["@: ?@SM+C='1v2)2 8̄ CL'pv(pgz փI?@%E1tnrz8g6@6쁅 o3jg*x|3)wT摘1+&<:-+@.?A՜]X]`!&/H(4&]" Wrq"~DO. -'kHt9䧛ls< Rr.2OnTX[1 wCO/ۃ#Ao3P EnrO[l~RMJ3(ݠ c ge^-VԛH LMTv@7VWXVrVo2 *ZW'輶a?MGq~in]zA:m"; Oo[I<#*SBup ( +<x0+?5mCZ{23ԕVrTǢݰ\J&I<}~埗t;w?o.ᇇtcB#DUV\Ga^Pиg UʽՇf"g)vNCD͵Xs'dªfQmꋚȅ}9L5>0bz,9.+Y,h)*$j ?h, h8Y8=W kݨi.nvTUKAYV=lTzR3e93Pz+`W+\,^2PHUUdʋUbE VQFpF=PjSGDR~Û}LEtu\.6n(yQfkAq*k(Fio|G۩1ȩ"~e$ihPC,^O Yaߚ#H?5N;[kE.#5X"QuӨGVv g,y"AEe1n8®1a `µ~J"7 i(8i4D GWWQ\[̢ Iʦ&Fi0.9%s8X]bp/tQ&xMtS  1ću sT9?E~a]COE MTsbΛ]<Ք1?U.㚶{r<֡Q29RS>s֓k}O#î|NXc:,Gڵ}@{^#A]4s]tIǏE^zg1+)3RSUšWj% ʆ57WP#_ qNo/ZCK/'3/qpZfU,5Fu5qe{9,%X)rf7W+~*첷eվ RCuT9ʧGTW;sMnؕҨտbq!OD0:+ ,j~蚬G4㣬Yhki\T5ɣm h֟R:_]BR;l eC}UoU,vaM_wwͬ=Wt–ԫ|4i}=2}FRM/U_o#S+OE.P=_ۭQ?gj0b;set}lAA?e[_(,p괈h*t쎒-W /N8cSY4Z\C'wz:uE%po% -dJ==]'iPm>pciF1aP3 Z#.UeGM $%Tr"w qt;lT_DzuAd"ctm°85l͐F*Ts]K}[@kl5vdyOIB7:d}]2?uMx2!U:Fj}dU+CgG^!84ۢf4g?QNnJDzRy- Ug"L.!,H19U6.$_ !gdJ0[swJCh%(NӗU:^CL.(M滳c6XU4嫅(:uݗ'(5ԗ:f*Dy*Z3{U[pF4|' Ff:. Mt>/4cb:p9KEHwV?+.Z`Z9r9:`wEښ8u[XkyNJcu!|Ǭl[ВStl:| \B'pO fY!w9 o`u<0~qd?2LԧL *T9Z̪s yR6M dNݽ[D^3(˿q&G%I|?)k9><7[3w)>T5[-{bݏ4m?Np;D*ɼuCFEw 29.DeC*\DYjrtTlP<nJY¡'ê}ۛ@+c{ 6{j4Kq5y! Hq*PWEv\M3 ZO.h\M>0N¥J@ʻL6E b:#UG/4GP,$NByuB]'yF/j߈_UF+sWTo'mD@ %;}48j"سWgrMK}.~l:EWNu*rH؞H2TLN&譧U kò7s" QKaS#$,̋sU/j 3mO%PazOOpGֶ?${ ~ܦ&9˔;R͐eȪ`LO*XCMEvA,E0:U C<5-IkO>I@KeI3KBjz~bQ'uSmcgWWTAo/?!x¯OS5EASQCʰ IV \e1>z{j*Qzen9qR¿T(`ra>X :wl mP;(xR0>RNѩ XxZd GWwi7k4Γ! yp@G.>%:Ov+vLzA^%(]Om?5K~s 2*4G(~H aV~] >45t6[H@(.=]u4,_xT}3۪%`q*\%pHS &3 >Vڵ4Уs>Ϫ&o.bkp#` 9pi##irͧ(r@wzpHm_ FQl̻ Tw\B*1e6x +[R #ila{oatN'+^kw./cmbܠcpU>\#'qm{}"`{2]x«]&2CgˁðʫHM'o> lТEyeA`sm+8HD.#O t.+ h<.7r8NS9eN5`EvK"3^gdʱ[(VxBdX[~hS<3-(05w HJPR[<-$4 O7F-y"H k ´@\'<œ#ku;**ļM;ʥYjgDiRvjBP ߢ%|刕a1`ȋY\XApmjBi!Soh "ytEXE n6@I]軛qPTlDո tGUioyKku"#M7\SlRZ+OUMpauh̕c> ePl[kYRLluqY#cN!wmhDGln9 f ܨ'(庚l?{BLQG$8EPF^UMl8H sTJs]>h7$>eVvk}&7ۑM bU-%q [:ꩤy'ii mR%Sw[iU Α0}.wHY>*fڜB"1Tf`"ܗ 3`**qQsU3.]䏊20˜ôt(Μuꋜܙ8 MpLzAH]ÍQdu;Q2Zkv_*ꯞkW2Ltu)3膾,0<.N$`*Б܎*&\An rOwCj5[IUi>UܳT9Aݔ0IQ5KnJ vTu6WyL(@gg.qgsm;?$ˊ~kewnK]%ũ#EU/*RUR8B2>vYCĨJ_@v۲o"$< ܥʡk:*$[_G>˦8C@T!wEhU7Y}U;M@jLqo?ا#yvtͪR{#~j|ԨTV*8*Pц7D鲑\#%X ѫjG.'}Aۻl\߰Fdrj.*ͼy0_[ȕFC5'45~y2Gsq5e=zzN_WEXWW+Y[W៚.iHw'M89䠋f$ rb'j;M\KM<-U\ʓOv5LQMԃcLωqszOXy}QlϯP@jI y!;LK<-#k xL7q90~smE@QlVsBmTC]<,E\viqn!K $G>*yAweHE[UՏݿe`sT+~WBB]xU³Ww}-_?oFqGSWTߙqjzF<=C?rq_I+ H7ĮV{.,U–00 xޕi}}Դʜ(E5;GZ绀д֮*eC0BFDU)=n̠߲w0}Pv͚5aJI% YUAh}C4!OCYvCfӏϲ@W1Úݓϒ'?O%Yzl]N{?]PPh}jwgq c۩{n"TE(svRKyC9RW?5t]Onҿ ̰p;nbe53Hn1CsT?eꍄM X ħE=P 6&xZvWPzHTnrUGʁ< UԲ!߭"CM?K@QȄ@bBnxu :/0xW]/>2y(48 Aqo"ި5obeCM{Dn^[I6mnP8Oe cPC(92T|LAqk&Gmʬ;6<$uSY _:c)c/qCR sH G$1ceKZ![KZfnQrR#'~!>J1WG#ndj\>QN =>Ky8cyN' A5{)on.wu$y,I D.7uJHTf#o!R4-ÿmsnPUݜ1TZP,5lMRNJGdLkIQmNLʬfؖoVڰm 2cu{>gny>%XP1 L4lf' C3J'njOrR QeI[ "ۢ7\HEr_ P?yco~'%wR|۪]Qym-GU~`ErV90?:ZQ%?~9͆^*+W mgW8˴Uawltu=nr ;,U?3Ӽ n+eFX]#-~!iY}7u:+ MB;)rPRW$h>h tGwDzveI(nI#ZAn@Ӿגnڭ*LCH{vB~!CTs\ *jTm ^xm䋘۷ q~I6eceC|ԪxnNTzQ3eçQL+ uQ8  5u*z .6VΫ y-i"LkEe(66Ss5+5j@";Tߚ?{I1UAr6:] G4 ,s+۞%Hkfckpil{~hx#YRq^O P{T]{s27 Hw) -s?U]#![6GiD%R:lG*.Gʆ) *D"UbԜ?ESQHњ%\\E e+k SJDM%^GygnM7D)e\rOd"̬ GqRښ? D*{;?jg\Z>e]5.2=e`W 5uݹ'ѺގWUQ &ݕ _INc/n/6EOlj7SHI$FU!%9/ò?eN~BTkuCk3c ;:)=S(8ZSni،pWxWOZX\5?mg:hhi9,蹺2KL5n>J=OWǛUO.XPPOL>צ58hM:bcُe*NV§Q]؍?WVd~L멏 `'(:K}Uo WRuǶ_i;k}5Qqenlc__RS@<5YG .&#ToR<=ݧ_5s.{q%GdRۗcꩈD# lΈhR!)j6̠AcDG_.'T~T(F̷ )\Y )pJC;Kpv滳4hkAn6* \CO5Kf F"زrg( L *~nT$J". =?L{ǽi6S[B$ bo _j̧pĞ :w+ %Ӻ:%uݦ ZˁiceR=#uhեxzܫ9Jc7W+-ޖ矞W42V"v_%.n%LmCDI9&?j.;e7pv*0-tC.\U"dܢ`0=P$Y*ꪷ9_Iiou6\89 Rb 168O.!*CbT_'T|~A|so "6Uz6oɶ< Za 3'PG!0k}]T3U0Cv@GlQnp[P-߹Dcyʎ&57cxLàEŸ F~.W8eu]#&ԿZZ_*9^%! ^yync8axn/Ro!C28H^"UL{Qqi>\5 bmk!$ *iT˱`ƁHq% !ׄ~6~.9j}>QЗ8ïH mM&UtG~GJ{ZqasH3bJRmx dn')QuF?Nș䋙Kof X-M{*cӚ#U9/%$X\T^\&h4RA8zݼ?w ­sH!o Q&cK6Z,ӿek>ѥ&[ h4\=kk{e;z.o+òeDvܫ/ϒR]ROR=*öpq[,׉YļeR%TϡXB*AYWxM2| Ç .$u"'w%ƞJ{d+.?ӨaJ)N@fFe@y:OѭѾb6c޷|D+R\+꠬g)jhsT25ʆћ+, YM5Nra9?ebOپE? 2{<i*cNغ46ܮ/U8ڳ;W?hHI/§OCNk_dpƒ)~c@}]?OEOt.|-?njΞ_پӥ{h>˻[uuu C /;&qk춛{1H 9QEe B b;&֏?ھBGXgǜ5Y?T ?& h}Qqyl1msB0inc ~Jw_pkn 6P7B3O(sNHNhZCp\}UT3[i<SK‘CSz pB"^+CKx$T|D5ܼ.xso!(_}~J[1|u1$fi 1@9W #5t7ߢW6#p?PrQ m?TEVE fil6CPڠxbV:Zq@ָ(I OB`x۠u~+ּ4θJ#E$GAZ&6W Ȁ3L*X{*ŗxYSeo*03#Qi8QȐ$Is/VK ~y"_4jm'QL*Dh\1jUFg\L%6Amw)/&2mnJl=Wvɝ=(*Ü/p-胩ʗs栶 psa~Œ<}8>i;YiȷEv`UMBKp32{F'5eCc R^g߿D׈tR7QKxHu)Eh8*h=WCw\NUzD*[SׂeKżnI ߁\Y./nG{n+W (W&Ҹ鵖77\3{˒j.q._ \V@1f6OT#wT aGy.ɟp6H;,ȍuH|P컶x h »iˏL̑VB蝭皗6ȗ"0Qs nU. _>- lXT9#m+ im>8H䫤ȻL'sw6 @eC:ǒ: \HR@7}??+o^ش}v(wkӰ0SJkboCOZ5憷dkeEUhhGAh1vWu F'r.>n2,SaDpt-hwZ]֠s!w@j>7fgMQUn2 GD]ްE㯗UD~_ NMxpP&UY>.kTL"$TMq =vPtok-.A^o%LZ,ӝy.2 `OkX.8T;ŮmB@t*pٱqKfgX͏P_"C`裇R/N &˷mWd)F-WbmV)QW,(\ W~K* 5@?."<謁\T5FH2 4rrBp^t sN_VFyJ7hF5$mWx`[1=ׄR9Bn&mDi0lu;~RLnT:aqyBpAxG;{Z? h.FPr ǒ^x^ӸێHjGT海O g7o5VEL}TEtG(hEWS+CХe ; bu,TF v'U.-"9DR6C1|5F<dSGѸjjFYcku&?&|ub"fX^iqfҫkm?(ʰr9#H.ўwwXF:xz,睊 X\-;+69Tl,PuU_i6Kc,OEXqUMUn/lkˀR7sY\zrY$qMme'nrp[޹K{$Q ;Dߴ}<k8?u>G]G~k= U}/W=v݅j++℘ꃴseQJzP \s.j ]~ە92W\JVBT}ʝOhϪ]WT;-,Bmn _3BWXUV*_ϲxg-?񯰞&0>&Mѽ6g˲eq<d/.Oī#}ۢ@x2:(44YpܛFЭJ}c  ȅ/11ewaT=M8Y`&s Z?$\&G5?Ts!O\3ĬUWsRaE+ 4R4܋v=S.# A5Ɔˈ̲8Ͽ5-Ґ %gI̅vr2Bi/yRDR0ڰFa=3ehb9h䦖O$(|7SIůvHw,p7]%5Vo%b8@ضPsN ͇$`nz Zb`gN7ߚmsGEꩦfC3л 3wsRp qcl"׌u ȷ61'p)q7:Ky CPs>,Saq G)*4Y,^Z30"|AC=/KMV|@-Q}D]oD. 8GBT=ǫB-&9{ͅUi\It"SNp)lՒ`Q;~dǻVLʇ.TlܨiwŗMuHȲeUu ߚV(D*2|Bk(s/qhO$c)a2*9C. }'o;UmA&RG Lm.& aWLպ"׿QHg=S*]w P]Le/r31u .7Ee3wYsD7RzB-XlK;\#@Xˀbɭs]q8N:ΑN ɋ;(o1t_([}}A )hȼjʗyUY0 e[;C_ o[7Ž8A ! yR)xV_q\1ULG*D6*ڃoI7ycx=5F`]O%Lz6"-f*ߩV rBMQtq9_ $AnfeC* TxBa'~ilKlϻQp>STCI'2Eu1#;Vo6_a 6We>EE7nPn *u+6@.P-.lInU;!IBOީE}T*Cv >_>ўJòݑu~j}p Wty)P.,q®)mU5w.ĺo:Tnj#n!@}vMp|пdo\)Zp2~ϨiSzNh}G=T]@ߪ^,vq}ȸP*sP 7C&{K^U|o=6NT'r͕,d8_pBnbI谩l̙"OgyBW ޲8>c l7W:'9n|AA&+aK*ʭ"NT2n&SeP & ʀǚ<HY#N TdU4 U /a H\dYUaf:ŴH%,F.QTufnyJg8Wu%'phî?D9 㕔Xp4_;×tysSNxapuQ0lNu,ig!Ct*4D\ Wpɸ\S_d1n*-= FL &'zmR.">/,P`m|Z3 UHqUA17CWGe!م'넫/%PPP%p@* 5Kz{/۞ѩ(t[0~}DCO *UMXCUFxwi.Բ򍲩<@d.>J-nfE l|zO A+S2Q*GP¢rX 1)w>k1+XU7n,uVǪXQ䡦=TEX覸iMoG$,oiiQLl9#F|r|;& WxaPMʆm+rL nTت\#COLŠ ݐR=Q>`"BFp$0@u?<@p<^KpL@Zd^Wu[VtHXܨlV!vqNs^]9Y+k-vnT`(u?u&Q>0j YwYWXMԎ$[գXQpdI(6bu`ѽr(7OJHhY%c6滸 1fwVGʆZ!_ ߨEO (N&S oU'㗲%cp# U&@3plŮl,sl/3H\d[$;߰V+{G/xWa1m:vxQk?CiА I;_ gBax#Wa'T{<*t鍼"5 t\[)`i*+'cߢ{ZZyS4WTIhn ˄TG&+" 0R%X'CjǽQ85R]C[ohi0DDxmZ㰲JkV 7e.%Vbl Wb'WUrjThB>kݖ*{'B׷*zUnUՂvrXV쥂JP`J>#ktmb?0z/0LԆ; veXv@YK=OM튕1~jV WrҦՊxFTcP@TtexYwm}vDnvB*J殰YFܑiwCYJ4+*8C˝َǒtifd #@c9< Tc vQ~>$5ǤC:pFˡTX)Us ]LçӧU M`xia{6wmB^AWGiے$tAhqKoDr\ӺQys ѡ|ɋ,ҌD;wB6 Gqk UݣGr]_7?5зt!PqsU}S!%TA&Sy$'+3kZ) $ ĂGGiH ??|YPu[a*>aw7u8:!K!@̪|c^U̷1QWx`o 'mr:-i7ª_Q3^" ZK]|;]d$DXQwuMEXEp4k' f~#dtr;‡^":){;Ԫ6#ܲ9hӟ~JK #x 99[SU*^L@6'pO 32sb/ o>{Z3bW{ UqUrPC?R-(p-ӝ\# lK惦7FLAG8n\UN7tWGITzZ;CLMM[x"+"DB[zٝ0MLEwrMBVq¬m&O}9&xO䫪" # nrsb?,1ms7P2ߚnDs:G0mCz!r\rlkj8:\~"ʊ'*`Uz{XU5p,w"U j Ӆ\l& $X*݊Qsۓuw@]p8fW`1g7P:;~,Jꭒ06X=UlilEQosg6A.W|uM<+:[UR133ك'5ڀ@3u9 ]"f]xZւѿ\tTnw†U@ܛDQdpNc.߈F{i8yAӊmd<[XOSNʢ'O(Q/02WvYF9 Gp'S衂ܜd)|cTmo\MQ uvUAmGKP\`)~T+YG«Xy( \EJﲻzdŝ~K8qXrW*];.~ c\Y]CB ]%LNԾ4Y lwx*e{%cGe[;s!*AS ȡ[wj] G]wѱ~K81֛vREʢ~-S /B}Uq_NJ+Gm՗,?_~aQy@Q3Wҋ/[rꪪ#lj2/b|0&uB3xQz;;p^m٘>E_xi-1w41<- AlwB_'7Cmi #M5j |FvnˑJطt;_lֆmTw5hꌘ(T#iSWuP-5:/ FO6isM8Iŷd2i{;ᲀcv9T|DDx>hH%c{ʗ]ngT@|0aU]ȟl7ŮRy›9xg(3&21.6Ug/b8YfW\B"R'-FIlAV>^WD:ߚ6QTP$_*a|Mϒl2#ݗvuX4GQU`WT4!&t;i@'aO{_bnӻEbW ,ުD#`DiIFA:uV" 6ჺ"y+uY @BJ97㚐?rSL͢%fNAqp"D|K-202/KIe~qtZgeU4N:t_.m}g^an=ZXOG58"=<7r&ć~ި8Fme/tц &md5_8@`) :zl˧މ 3wD<L B-VC+1syU6Kݓ.6q xF-"5cM%{0SU89׷€%ԃ9m(9YE-mUr\QP ]SaFvR ۭ6dCNz^f9Fˠ{9CM*~#npyc!"z[ FUw$$6DAw>%f e.BFg C[\zmF" fUtenW*w\7^/IU q-[* 0\R= H }*i3KYOe_hS=5/zv'e~t̹VFWWWrv[;,VU ?zr헫vtNWꜲ />&lx>\Q awW+B;5-wo U{1e V*Y,⎎>Vp? me[cOܑ۟=ە2;.ԜoLDJ6^`긦vPtYLTM1{t\DA܄4񺉎oD8/ϪZKgo5@uQ} =UHos3q\REv>_v4< C*6MQQX_e&gS{[>"\D_0~kms`bMh(Cbqc䃠|xaoV\ ed3r wۍk2|. ZCԹpA sqmii&IsORt*'U1rtx}g(Q֖vzX8F#0@'OB# o&d*ߚ<[gl #Up\L$i9 .:%Tx'@?T4 |xlX$SN& P[;n@Q1 N0'hE3}\Or$|<4tM;%C9wUT)vX[N21Vj{(ż׌2,EET+ r+;M_~$2lFg`,W囏% U͈&.}x(MצXlӲ}DL 6wUS'MbnA7!S6"2Qf+g@J=!wl2lD|Ӌm;2 I.PE8TW *f eqff=KAr!SYTS$㪩b D /e;X Q6 pF)nꃚcY:'7X:n#[3{uMo' m=7ju*CbѩrvUUR|P+ ˀ"1k"wA4==.R(ITRfL}~R&c;uKy*$CH66Py惘@(;a"p8NRB/7]"qIP 3AT 6ZfQFiDnn}..dp'.9ODo*#DdwZA4մL<yu]6i_cPv5QsԽMuemȩ&T$Pz—-$ 2g=vR4{ָPuC{b4DKD*ٵehTme#Gǿp< R=efwT`*Kfm]LRueۡ@j5^0 {P˕lw,\n+شܪ BIԏf܏+?L,/ l0}[W3~KŽ_8.uì[ܢ Öx>H+' _je(nv?'۶쑕 ".W2dz>j#taKM-"oWLKD_~*DM P[Ma =Z,j?@fdS|y;`ܶȺ{NQsNsETjG†\DV7ꛩt* n 2\H'hD ZRi(`=FlmpvAmˬDC|LqO#jͼLK$*yk MO F{/eN-Uzn2Q:QHvD7hQ_fwUS-p樣DS!RK.~Tj8bT\S4b1 cSSKE-ud{}KꝨP [B" d gtK1ĮiՆd7w/bΈY|.R*K1 *{K 7]ʦl̪Ǡ-ܗwG.<*s {eOf뉫BJ==*O2\_e--\:y1CViE~}4*5\0م?pMDX'*>x]_ j; $W (Sc;&u\Xn>h"L녽p`BmEb/H +s5m-B1e5,cןXDu \Np φWA\V1k&38*^P"-%9uFϲH1{ |2#ʗ3QyPٜYQ'ùT3e*skʧP<5b?w f?U]-˯{. hT|YR|;;tZ\G/_/niǢ@j2DG>XE𣩹DPX藋`{7̮u'QXx]vLh(85GE8n/7q E@k"4qA(LTZ۫X[>F6ְU%ӄXlݧm<7ұA)f}{@K Z-x]%ߕۧ=6%PYT )4d7YU<33'qUWK@bУn Nn \cu ..UrQ!ց3 ' *'EV1$X]v?$^X!֕njHpnC-#qdt\v.t'4QgqTLTH58I(E5@4s4h~9N-cH߯ "v/0P9- 9xПV»ɚ:L$͚2U8!xr`l9SMs -Tgܮ.^@q#cq Ce8|@Mn&0 5 @II¨n޷T7uDuMcm49ޥpB4m.@&!"%uT T cK界`To݆p"I%Ctx{D ;7)wjjR2nƓ=Z%follyn6Dr睿di6Fw>jZ@ӻ |\7h 4?E~J+J.WrT1@`%r&\NvW€2T]qzkvIr eջl7.WfW{HRnbPӤ2>M>Y.DdX_w+,Pn>?ߝ'.; ?K+]vaW/Tܸ t\Z'S_¾رg}jBc9Lw䃣{aXVOEW\'#l,VP$/*ʝI.'';$(|" M%wnr Y@iSٟx[Ԏvqa@B/&!k^$B?\鏃d?0Usq_JbUo|/yۢ@ki> U ^4F@!S#hSQ=yY_RJ&)& Jk|R&vCKM e ʍKJ?;ӓkJƺ~;RgvhH̙0$ t DQ %qrx w[9)fOo(L5[0ـ;D_B|׶\O-##"ĒI?;!^b+IUPϿP@'  H2˚aaċ۞g![eOm@${7`E2q|խ'2b@:. C÷XmhiSlAۖ}'MEF{Ȯ豭Pz-JJ̫sU^"/y,␆{cj> ':9R䡶踤FK&gvK<[7~q0wMmɏ{×Rޢ;J-&˗035BT?9R]H*٧]72w5.:?ۙ?/_[^YZ9>Cs8!j3`e;O[_8p̱mQg;|a=/`z5nH5~u(5kqѩpnAf-A'GU ';=E٥+_d.2 uP߅#G{-'?o=C(j CO` AwNm~8Ao:uMOiL:( u%iF׹n<7suGV6SY`˱`GEW~(mSmG rIZ,t8kHHJtC<OZsI.pf#L%2e^h~A-M |z-==5Cq'ơk@HZbed6'7I Kio]WPC3F pfIo~YcH8D4u)#rG>[1tx|]{ .5Ź9ǚ%=J+K+%Khj;Eph@_/Jp ^%E~k-0U.A0 U0Yaacĩ Ǣ!ٕ &¿Jۅ߯1g¤ Og @^81{ ; l! }3b/6]g@<;p@sK!Ǻwpg7Up ܴy*mN:op "P|E?T"7BA3PN[dHlv7!4ͮBo epY{)}͐nEWE!}鴟  M0-/OX c^fpi>vSnدMot<$A0]o~qbh`EPxÔ۟5Uim$n:(9AEqxb/18A8 I"åSi= A4MvN/|m#>~,]VE?C4tGR ,c M/E4W֥ramͦcY~$SVaMPWy l D˧pdFHvuUff o)467/uWg*py,%C9 " eAOwDa]џxE' qFaFeDaCYQ1ѴG]ۈ=%KyB/ IdFe8L%7tDc/.;*r^޲KϖP%ϒppB0rSWBPԩ<\ygB-'pi6,$7xU@@;Ruq.hGWZ7nw*hTOPN85SZ}lO@u]O#$/&kę*)~ʖE&rlTWe^T4ohT'{p\qU;l2\dȱp7UC?ymk"sK6UM[.Cs hrDՏ"R=PHqτz%MWpw}UprG͢x3iihs/W\路SO o BQoSu54o_#ʆicewfAP]Qj32cU ]c:I?=4gpoxxb=&?R&)K~:;:qtPk[Vd?w?4,6#QoEA " y}\zlw?l.=0)ϋ=,YK SCl$ m軚IhwOMN{Q I?5DemU}-]R/@+L.J;8XVCϚ  f;. L0KL"ފ54 5H*~8SA7mB@R~5T(B>.ueuu*0|vHLmt!,XZ˻uWw _8nEhav1 &؛͓ }U1P0Jw.}_musD(酐8Wz[IU]uTza͎~N9clX *_0-MZU-uP?lp[y-tSNH#x)ͦ?p8JowJDxnlˀ9^+tX9⩡Eo8lt>A#U=)Qvox Ҹi-R&Շ]Ǫ x][ ڕw!lʐM%[8EʁGZI;Uk=!T/G@Pj"w]ݍGJOV@i8/e4=x1eݝZzT&MݬOV13%CZx|eCoQ5PmneQS\bKA\TtF:c6K 2-Pnޡ~6@D'ji2?qguSc~RTs:YT+HoA|Gw7Ų*8o,.z" ̝ѿ(()o noExHpt8&`J71A-~j(ccw``Pf-ƒnO(RZ" ׬6d \ i#"4ے 7B-? zbsAaRe#Tb5?$ ȚCPUv_@\ sC D70{uE;w$ ţ?4T'ՠČpA hI\ZI@n2[F]F-dNsGaQf䆋[w&mu46<]8@UOavxwaQmm*nH7Vs& L2nOvfVP!nB(vyqj0O0-j#K["-+7 >k~$U_lR߶z솟G/?C U޲+v-}3\]vʅ @F߿{!BE&oI@v_ꡄ4w TujWyGPXIa|;^hкʹUت샢:Jx ϻ(xgR[.-CUϳ|Rt$6 **8 F=Ƒ/J̅[r>HiUL+QA6[x|&| Z}P'rxdTqeLX rE3 nTWMԬZ6N8mF9zc  w/q ixRX9!gSB$?UDQ1.&<^)x1U%8/uf6IrEbMq 4[;sT1)m-m4H½=osux)yFu'wCԬPrP[jE0CqQαR7K/!wgVrۯ:\[<-= N# YU1T[M[UStg~P>rD߯UsWzAaϒ5w#t*))\_UPȾm8['%WG! ٖʑE*ǒ*5^ !KIKSt0u qE8UsZ:'7RDsCMi$ۈP&Cm W 1'kJ-֢>4ZDh8RBjŏxUhQ=2gc 7j&J< %45pemP:n3NH2jmU&& FU4**|:R8Tj{tp:suþ_{&6c&[\FUEyWgD.dyS}\iC j :˔Aq OU.[WןU/v!_K0KA$y,_[T/V/?Q>?j;棽}C?WqkϪr%Ctc m#%\W+@<E9Fjڱ丵I\ZJWW*[WP:>{33W_$Z XpUmi~ .[iI(Y\UTC^\}:mQe;DEvڧN&&M8i7.qO-oI/an\7ݿܓY >;^/Pg;JT U \Qe'Eqiێ(\*W P]PPs]u?yǖRv)j^EF6tHP~&9֛%a  eoz{'[ݲu1ُ~۬vAVSײu,T-#3Ypmʣ 2dk~p}T ʣz޶RHPw\ <˥89O9Nc\ me&J:&H4 n Pjdd)ERM2#o{!=e Fa֐}©b`)dq?PAxC'eUP]ʖiM ́x٥tn~j98@9-0q]3cĜ>h9bZ$]qU0~=JiT{"2-o@(tKDvdQ3v[&ӐWMgCPG' D2q6~T-u]2O ST3x+NIx,|u>JDG pvؑ]y襷ɧ ,8dz"$|Sal4r@<|"r?R='9:KOz .t hlbꡃ}i 9T[)‰B$?TXMW_)9)=PFIhV';rҰAq<+5]KKyte'ܬ Jewˇl.TQw>%+ ʂIC@)]7vV&$7 gsNi#[.4뷯UŪMaAYW*ǚ*˨Y/K^b!c _2Kvߪ| Fc0hN@Xct)=T9UMUx}jONqG._$XLqlRd/~xǘNkd0SO+- ƝGNJ^q#`0oULauؒȵtMr^DXXc%F^CWM&cqCRGM<]9fhɺEEPH!%ECkDb{ɎH[3;"F:\C'!'ir9{'SH;*l|R"։UGlnTD6^(]};NUO#|^<0 lD.=dij v;hT7t6Z8TR̓#`_SH"nUz* 4Z_;QtB'橉踰xE/ZzATꘇ |ГEOEwp,[*V-(m7pH* ³Y7:qy{:eKߒX5?%wx/Xrz×;毤~j_Uo|?%xR%Ŧ{? +vqϿDF*VΝf9V<9C,nT}+ih!ɿg;0߷}G?}PtaaIDыTM>rWuhn5)&ӟ}Q.@"O.6.Vh"`*HʱT:m#)Hv8nEFulfS"VTd6Bv;ŋ ې@ŽBQsbұQ+xۯEu2o4UST rUvTyvt[<2p:da C7Q-r>OЮ:95`Dl,NW*' l@n3hgt 54͑.Y0JA(qDM7W xCဌ.G/OeT\b `M-o;{U.S\Vr R4V+++ƦUdǨiUи>'*OڅS:y VWG|TO?2@O[_裼?l\5l(AEe%I{~jY;C} ~R?arb_g$HuC'CwFtߡ܍Wu6NO$>&j~WirJLRfŧ?e#:h7 <#YYYS۞̬eex{.g̫(,}vc_gafd*YS= ;lQn9-Rfr]mDGG͠ª,b6i3kT#|7D1@-u^$h ~˼TlAR]<#|k&׾|RqHtQAm͢Up7m;[t;Hp4w^!)H|Lz:!v*q9\8b/}{" !i1Q>VD%ݾ<9_*7MSu"D5A='O5;IT)Za1? kL䆻9Te l`:A-*wiApii\ -6ˉLy7|.i 0!K}eA+ ZFcS!5Ǟ~`P>|3_ GC)xMUL*sC?!Cw(D?-y!/ o*D%Užj!3!T#E quLEfjPa^8\@[Q*2mT]Zꁻ)p'jQi1PXMn;}TO;뀍 Oji\ (i#qqfF׌#bQmr8Ro*Lb0 +3>pz5d>jd|ڳKzAfAJrLҥ\ _P~2W O~j{VA0~j[?5}g|.w[W`,/ exUʻSoFrMBz.w `r8XRG܏e+*zv7LsA}F434hRn{l3W?luyj}Z;'}HbΥ-٪fC5F7f-%ܸ^}캨c+*ݞ.pJ+V *15e e,ʥڇi:>]lؿ:fn`2jiN,Ow_kiG)YILtaŤjGkcП~C?c~=.켆贏/"ampTHs]NF| 9~nf-+l @o48ZL6TC\%8{imk!wb'@.6f@ZޞhjSBP\WAr卽2EW=QD)m軺TM&q`@F9a(#*Sϗ$Zz]RJ]9lF >&eK2--%4uJ ^q1+sa()Qu&kL:1쫼xrV~yAciv}|B- KDQ=$ fTH;Ѕo.=ȫ/s@tvU Ti q;S͌\|E'K–28B%h2]303؎'4MZO;{ 7];kxP 5tRَEC rVP|gZi5ˇgAou̧RC(< }uæǒ/!q(u5GReH2> UǘðnQq69 ߺHS5b{?P4~xsyI*xZ'fToq(jwFebM"f? :N;tU y( ۢ&t(!we.j/IX>C2[~€6DaA5&~hNd#S˪bZ&F9(p~vNկƐAMw_mzWc莯&}1˄4>Ѡ>uKZsVʠO߿fWexexYʕ3ٕYYY^%w/ex;.sN~ef:fgSPgy!@[MLikG%v<ڢES۰B5QSF9.-LkgF3+}k4c4e;Re<ʖjqM8T"\)V=Geį ʅoqn~iW*kARWYVYVVW쏹`ID8wR:AfDhό-MmB.h5es k['9ji5ApK?s vD),};0qo;-b;aT·϶G(ob.*!:rl{Oe24_6ShU\19Eb͏pts+e.{]}TRZlc&RCOk7&>(a(GQm[J>Jt-ċ!C7l[ n7̌|9TR+b7iM~#V_4K]#@;qvPŬLQ%t8\!"x5~^\r}*1DZw2&c$740xnռ*a6.;܈#nh;/EN?v2?4Q9p"MTD ѽ\ !QDFj &[4d{ SdfS$̨p̴H1Itr {RIGT~WM`x$Hm%SwE䘼[!Dy~b!O1v jb\_.d˺{[ &?-vy4XPA1v*]}-4D&Y -q~hCItïL(0:i$ 5N6xPQ$mUsnP"0-Gyk?GBڢܦ䋉 SS 9qG`-V\z#ݺ'07EqR)w޴5\e5 7aD\ =Ek)"za4*8)*sɒfd8@m6A\=l5;3 Lli7ȸ4] ­ä/ #"âyJߋ*,-U6\#ÑT4Ml39NT(<\" \ZG\L"8fx[Ey97MUPy@*c7n&Ulh-Uv7_h{-s]/ M?aQ?yMgusC=Et>b?ߢ:_e;VVFƓ8tp K49ZO%,vxxx]egaSǚ}o@ ޷߫UYvu%_i*cl'#DlT+J CaAP_)*r{C rn`Nk ni='- (jpt1 v8Cg*ջgOE/SE~ۤWFtjr#bXokgF*|sU__U|T>?c]caB*U$!D}NT^ 5B?#8 >gwTM滭m;S'4H?^! §Vn- pv3X͚ac~V-7m >=GRL~$T8ʋ} V +=eOeٞaA@Q۟#RseYd㪉QRi(9T plb[hicmKٕUb c|-LJ[p,BdeT:m1mSݎi"6S>j7_4DOs4CjnO;O bD#-PSiuNku'r` i 6nѩl|t_仧 PvQ\m<(SP.=|*&k! T'q\+}?$+6#*Ԙb=Ivx~sU.3>ԆA)mȸMDA\a+= ^u_n*+A_88X9]XV?,uQO5Rc8*"p˷V3(2qwh>k;7l7W؁wu,,O;.hw[ J\O%-3sxŰisa]q\y³VvƠCK~&م:Jg vT*f-+ 䡍Ysg9)X^a~nŽmx X9audzTU_VUO0W/q8(@y/OAES=Z6s GMp; lp;18JʩLeR#[wu"x(}CCG`ҳ\ Բ컍Bc2\ƙZ|F JT<UmR-=dT}v۳(*)ʅ|GiT4Mhq^ML*_fKź{?1lz*|@T{6lvvyX>^jCպS}HѴT|8wMkkevuܱ| ;Y1uܑ-DO^_RYSGEO%K&\N?o4i"ʉ1SkL'X HM渧7AQcĭwfTDvS o#WzӞ-\@͓@ѪIUbŤ`M2}tP")fFȸtrS=klCtr ){gqɵ + 99VcfqoE x1jEhWQK.i]?QeKi ~e$ `#\7\^L_Tv1Xӱ*H]?*?b 0q|-(L̅@4nj׵eK䝤 ʊl9.RP#|#]"6Eѵ\?% Qf&F@F>E^2TO7{ArYXTV3 aw WuA\n.աv]õ@w9YVj_1mWGl[Qb-M7?b'Ȩ~*}P_Eg?%f:yBG#ܟn~)Qb;aL۲~}̫2ߚ8 T󖀀'lJQP1{( طd=㕗 qqmgܪT8q{E$nީ|?Ǐ<u̜kbwF ^ 5T i+ ˜ݰrkχk")+hjkxe3S_J[h~8}TqAϙvr5~ kDncSP\m|!j(RDg c ͉j:cXl-c\|-'ȯxji5LYTo*)6 [e%c˽Ī,ӞThĕ5^y"` =uU${cZiYX. Wt lA5OTy7K K"^] rLN%5 3i"qM# /["jpN L|")Nֈߪ⓾Pk2桳qUUlh 6ұpiN08ɲA^zd\YDH*+v*L6\0Ѱ@mm7W s5 N<#`nB=U-q40}m2ZlT݈E3Tf#8Aڂjf}!+'6sx{F,2ataXyNZ* C.؋dtZLDg,aXy‰Tb7P>|] 7,c9md4?ʠ(T&7CI^1(EO\YZ9FrCM"9tPd:t0; pu,KIʪs.dۨlU/sA`ptS Tni{@ o(>Eڀٶϰ$p7Ux e'];\PӇܷrp~ϦYu Yc.k$Oa_\BWrẲKpS}n@uYq1P;E9mqoya |5!jaz uRPԕ#E*US+*zr{gf~q{0\d\ I^TCRD&i;-oڄ]2v* M4AlŰ(KFrUm&Zn /iUj8cu7UM2b"DtqS$wot&âu :%"}WX ‡>) 9FT "jKdk_Û;esB6:)c/Yt (U-͛FJK%R/8@Aȸ߇rϨD W63HuYwON%U ? &,fgȨ`(U~e:yD‰+*E"xhʉv8&# \wG".Lw]:t$tMcAvbv@05X۟Gg`g69%U,g ѺТ$t+m(R\MЖPyCI64!'q:5 27KaU d5kR{fM~8v S|OVqF! }ÜnЪw< 7TF'a~ڔ̬yvP,W컏>J#m2O zIʱcyS_<)R܁ҩn! 滍F7)K'=w lP?0bd[G^[jԍ٥:RSVص&cwvS֎~{.So"w;445j7KWXv].b/w _ښѥt;DTqoԧ7_:&7k3^=dX)k\dv~$Ane'JCKd`tAFϘ_4Y:\tPn.<.SG 憫qR gďagJPe<_rٞgOhegxHr6W*Be tKlPykdZ&3hO#iS?% ۗ4!b[TEC9Uq7P|`m ×6knLXh$$.cp&?,\ F0~|[*ojZa~?i@8_D;ĉQ5JQK7Kĩ< @Փ!R3Vt\ < {'j9xi0᛺N5Tx5$g^b"|.XdȞw]|{'CM*V0RwlpNDiDuA0۴#`1S`")^xXl2ߞC<MHA{ʚHUVoUX;sxB.jpTUbl3.]50& $*M48r,Pyy 8B=Wu|AE"iT19 ŷr-?xm9QT4Di@ԝ`@b-*+_(o4gt]^~UṬD!+s3_KTM!O*=PaP6Fi2P$CȐߙ\~ʜ*FOꆯ,什 =pl*ܷ(UfM )@wm$GD:lbe' OW u aIaCL'Y@ ʂTioM>0 И53~PJ\"Y©aȞjiS- Z Mဨ. mV*Pnj?WjiiCjqM7>+(7I5w:;Lx An'v]ֿܟ>5:Bl*I^I09'sTICKAFq\? fN*S08*;N<o(Eݻ.CWwsTsQYUu7xA}}3ӲAL'_f8rҚ[/~ǖ)gUOj+'}YԖik.aL>-o6P ǯػjY"o%m Y8`9iݡx!v=5Cs*uGd*ϿUĠ#]9+gc'<(3Wm;"CGgp6P{Jaege~}}vIWV]{?޲,zg\ 7DԝA188*9kJ R8)7Wt3? 28EU5rS2l ~ķ>; #y(>`#dpDExx[6 {f"D^ @Sp8SX c#(wE PG5޵K!%s#3D=SԦFu3bE'apWx4W&EU1" O;yuQ!.wH~6@T9S@.T.8ේ nUj86OCRuU"$V\>0AXs-É'̀ܪ}B,GRq!mcŔ::rQN.0>+-p"R..6+CWx֏&*N l*Ñ #9Fs] qq̺LUz)"Y?,+hih&LYzG%( kAmNc*iEžP@d1m8R(YqS3O`}U@d#8ŰmF@$u4Ë"x,\ rEH+iU17IW;qYK9J3#yQ#3cw 8ESyƘpVYRo H"}-ih.MMp?C ʩC#f+ s+ 9dip$tIv=vRoN窻n*ʃ"7NH6 ͝?4UuSɭFmotQj%ކUKsʧM2[IwEUT`"wn rw(惵K(N.m2.GQ4쎙%I>EOlvRSR\*j.s?;)v;{[]ޝݏ%*|?pc%9ߔ(~]MU lS=RT;- (+O7]s :/TcQt|ahU΅% OG;55tf9?µƞ'Hy7T# 6cynEkoڏzιS]P]P;pM7 wx_õZڝwģvv~kVs.ARܺQmA‘5U-0v)h % ҙ|4~ݢ(*TeݳŠm }ž.5P}mgT²_ uA68|ߑ RM2# g;"ErxL,9 ~jOUy!o5Pҋ| M39lX7?0Ezr95<3rjbⓅLQf^aEt1Ҭ a;a&JSuO[!+3.>J,֍(離4 % v J Sn#Sd\lsR~m]kyaqoM8`o_$0LgBtgXn*ܪF,!Uټ4LʂPcd#~egwTu9`x"@9id?ODng)%۶0ۜ7nh=#4ɥӓ|a aAus"Ѻ".Vm;QH IU2xyD jHv k{KA|+l[%V5.Z},~hֽЬ7wCqe 0nm6@zDGi&-`0# ٨%>+E7s`Nq~d}A O)U+4Xfg܉|v$ѧ`37٠D~l֯4s_Ӂ {3JݧugLP- no?c<) KҢ⣶Pvx!p+۲'@~#ðfDo݇IĪ <*َ>T}rhR P-7,prځ_ΙQA1a#lФTkOCYDbh2u#8MOD/#Ӛ-OSǫ$F9Oܒ;ߴr3Qޓm\ϚOz9Ccb0V첿e?i;^:qQji<9.?S4?'燐<2}N㇎aSvy >j:55: 䀯njͰʩQU;Od|A7r)OA줪;d^({f ?r;,d+߲ݗwLT;€<*) 2l)؉Q8EslMOȢcwPYHM6>C29d"¯S[7tۧX8*᝼A# ͸١5uU d%RZy{ؤ%4\ 37h\ygܧ5$AC1RǿTe|[]<#/(MRewʚJ ͝ b]!Np.C͙Q&>@iw脰<0NU+'pq( ۓU-mRؽUۉQKٖE"惻v"j)0=Z^hq^7jܷ*kvPq@@68 HBK8c}P}'"m0/W NipOK9&:j?U崩y+:s` $ YK o1]s>2};|^`M)8_ENT;R-blg(-S|*ȐCϾ4Kk"ܾuHJsj9%?[ l{w@q0qAQaD3.&O>j6~̦6I SjĞHS^9ӃRMqSU= :cY}l^<9Np"Ԗ5|\>k<Ȫ ^mI70O%$NichT;u5@*ZU!ۯDUw5*&Ia3WW{)m_GV͏{{n軘i;ܸ]bd$Kȷ+]X~qEEv H'Y'3 3\Pz@2J^ ^TOmꪘ4yNT6\ͶD}e)fK-/dtUD;1f8uֆ0o6̞!Z_m v_fDT-9h\TTK ݼ۲TO܎js+O޿f~!ݸO :R> uYٟ*=T[p?LQS(?'*~q*Ocu Q>7m}!S.,mqV>vwD̴?"OGCT*=9YDO "m"ue ?ic7t4佐-n^Zxndm­<+Y͈?u`T?횆e'Q5I"cƃ+Qp-["<xDy) #[KO;ﲸab8]憨pT-wvu JhaΓJ~?auC'gLj8|'_o\$4hd~m7o+eF|z|f`!TUAGgv췳+eP?0G?>?W;g]R݇aXN>2+s Gl *=~ޅD3c y-Ti\65!.i(o%q58P5 Q&TqSur1'6~) Plv=_C*Dc!`YDS課 }?Q$O>' >0WML"Vݯ]N.q+Ls~s˪w\|X z|k;P!7C[p[d(9iÂK˄۲F;eYaccg܅-ڭROܹV?]I*QqpwW >XvYK;#)egFRۅ|i?IԣyaLU-Q M=gz'v@5I?:;Hatl>Ǫg+OQ-UV掟=JG*O2k2k L\u\ss\{䄠>eA*䮈i_qo jJ/^jFaVr ~.}8?r .f"Z8C Lhp{ Wq#&:/hC1zB?o/Oć(^?E'bVp'I̫?PӰcO5=Bٟu_gu H4FmeðU* *[?_k%ǟXTWp|%VBt `s\R@coS1$b0+ާ8ےi19s;SϪ:ꚠ.zsP yDq&껦R.hÀ1'UHY(wymꛅn*CN?B'E=f\#ÝO0!Q+֥Kw.sL8̫I(Tlp[NTЪi!&Ŷ $#l$HT[1ī.8}`|j@Ԥnd?D!֛pu3loЖ:N/4& "1v)wVԒRӸ蝱 ZUVR?џ[q Jũ&#l9Xe%X(G~JF??.N+TǩP# (7eOlvYB.B۹wmuыb9E]RYW^/\.t/?9S >r_IXC (s7p3b(y2IQRU|H9!s@p@# -6CE[uUUS1Wn]$l̐X;GP.imdHH Z#HDS١-VEMr?5eSGXE2;*eCqTDz7:etjF9Z_hڬi9{o![ *ʳ-+?v>W;g߲~,(.U5W>r!q4g&V0-v ?D\u-ĩ1yR0|k@#U4QSKZ|DJi%R:ntO`|#DA1"WL;Q? K7m*X w#wTӽ)p]^z5]?B,'|oMGv/E3E~PG_qȫ5J/\=j +vev}&AZT>Kl,vX쩿s?rĸ[*WtݔSޏJN⋕\6B0euqv_.aJv[TP~Y_ .vF&Ru%@yj@,d&yx~^hKYL;`"~K RZ*Ap k@{OnCp%iw߀2 _?rV)=YdW}WC?DIe qM58+ŵT"Gֶȹ~{vMmW;ۉV$y '1͜LbVɂpZ~#>H:9^$&h\pH꺃7m;'4iR  ik"GFdb1<_RzbpeLt ȿET<5xJGr{mҩ0KFC0V`*T3ELDꪯd* ;=IuFwVp][G>U7C'⽽ 3"M ǃ ~@44>j]rF],oRk* C|>(V[LqH8]t;p 2G&;YR67@;Hi_"FT 7T2E\V #`a\yVb$Uy,bj ?B;COWSz)++˼FSŕDolO_w6PuYU8\{TqIXm^迨\S(ϒE%7KAĸg~k _u/$EӦ B7>)S+mJ5?#8y"Ú:Ds?%;7;AuȿD\:TeqjMe(<ؔ1 &-btܾ$9q/pPscGIh9sܫ]9G*~HÚvOb#3|1AsENKisW1*<\Q y?0[$:m˰n*?]MOJ?_a6*4C%^J DvmJe ,*B15N}ٹʣ;Pljj}Zߐ#$~N3洿p9hز꯬n|+jg0ێ۵H ݘWj𩅎}vY@_jVV +6_ä'wp]V;O]a=;d*Mr0=au3̫ٞf~(.Ϋ i3*6%5r-td窙urd^-)snYDv_]cYd_?ʺoᘾz _%W@ɫa C-3NUC1iU @2yaOTCM?-v2'cĨu6(4E wuPhwD([WP >/píoe5. %x*Jl/.*vj}>ͦDyW{ecxX ¯_/+u^//qMkĮ +++5acļJj+9[X}譮>Jڡx\.7W}Tw!;m[L|R++ٽw`ZZ$tYO~>{lS̩ٞS*Q?UnˢVN;aXz\&d}۟e=T1limlH(NiPלU$MqW+7͓F^W^M7$\K g\Pfөzv< 3qC]vA;!g =-Nex%EDwoBnSNZ[˻ taH165oa'm~h&*n#b;thqIW 3}0jT Ӵp[8OE.vmCu~ȽELt3)O0mĉ M¦xM0.-g&ZWV Ô( aKSPR2!+vkKxq*#?TE _;d!B=UOe1oLd";JM.G˼xjHgɋTyg+'J`L%pwk6D jH78Mx۟![7FꨓICj*",\6jpt5;<*`)E!{BSdz6A#? ]oFP%h$T몊 CKdVC0OEy\s{*;4HuUZzPqe#AEZ?i,J G}쬇q5=b{.0gݖAFgf Ui6_?õu+5ZTGلQ'PF.whMS`_>a0&O.Di0Fx7y]ɇQ Vf=ʊJJʷefmv\. ,cw ® qT}쀷8GsB{/`7onBg1m_3Et 4DZB?%ʓK5hݿgTinJL˰fArP/vXrYI캎}\v[rl޲ݎv@GR<.NYqoU5H\RUG7J\-1ߪr,px EN5U;uCrToT>˽/n\L9)h Jۇsc\dߊ.=-=ۼ{]l߇>*Z䁦*(;p6gjoyJ-IRL`'\r6SLNKuZ<UC}RⲖ]lOfdpIU553|v8f"&t^,.(#h?//p{gN@3 +:Yiɺk{Jn^5L E(P蹐quB$i;^趜;pkV'pI[ }FwFEGD\#!Iߪw]f5LEihHcQVV EފiУ:gdH čV~2iHD9qAgk)BIY2eP񵿙\wP\9BuP3АI'(jOJl^<6C|/1զ,BmWeNI &ҝ@c*IOP="mwlw.:B bqY<[:8bqSC8n!޶gžߴ.XjM4/MwA W.k|:s| X"l.{YY©9n`S095èR:*&0?TjeKT騜Px>mP (:v蠉TAZxn9/G6IVeԅ*ƦՕnq!]BH <0Mjwl9/k>jp껟rI\GºfNs,jYҵ7ڿj0h;/5g0#  fUGwպ>ň1dﳸA<~TD\F4DŽN^ Z"flz\b졹SScq$K:Bp[VPs 3o{NͮeTAcja*\%*w.ii"UTa+vTw[E$D6G+6wsRpznXYF;n IuTb21(Ty)v9M.ߚiwNKl=P:q␩c2j.1w=s [6N~-Աw;WʰL5;)x&)Ao5,2|.t0^NzeKI26T쌴g(5km'-*g@sPT'JI;.ԠٵQoGQmdN刟3Uu@Nnw%@e":#SN6BoaQ{:pR#i)ڽZlUd~X:}5t{:#hm'WIw[X _aAn\ j;)(.SYq]HnҤ[t4Zcһ蚝Z_o>q 8 Gx#ݓeK"ui5IndI3k!BD10?dSHS'Jo(DswT[+=,TmEo0vۚf;n 9J},HuMoR~10(>aq2VG8%!]I?vݓTܿdi4P,JeUSFvP^Ln{Lڑ2HIQ8l"ly[w\yTRٰVtuV'踩0|xڅ\CSPa)<{FZFDp >(52pwy3f!kUDx23t9;!<: Kőʃl'2B.CSW@ꭕO[l#; 5;ؓ)1e9G7_ý0>M=C"QPCc䎟KqCLns{.3o%ӱ!ՓUd`]CX@Sip =1_!Kr֙"苋y(-u7!?US@5l.@7rM)UxdrzUu.%URh'~UTè'eUXEԷ>\φCXYnlWxcwzw\NcEÅaP)c8Aߪ.w@9Uŝ%y&ORo=T4tǑP؜]ٽ DɈAωѲL"Ϛp 僑pWAUDKU2G!2|s^|YKĹx#6^0o<UIa!iS s^a99l1BA1{SF rRLmz( l2UrTU=~cee.oA\ WlʈºCrF%KD7A*~yj2߲K^N!x/oӴd 1 CuY0։W"ҮEITENFf҆ٵ]WŴ}JdX ;ۑFzvi+ 9Ek Zֈm9>hVR?썾 1]~* U"MyG8aSmxfN{Pt?#V ~~j`('Xzj$xA Ņ 4 vUc)vpAoߩcF0ǚ?i0ViLb_C\µ'RT+C g*X~j]o5G3+dxvPF5D/eX3ou~ҴBw첏uXV[})Gʙ·n악XJݗSpoO3ۅ?{?{_eLےpg`U̩.|[*#l8_[ bx([ב.5Y߷H]"-7T2¾\L)de۪$ť_em&v 4lch[R&פڼ3U3Fw] o~|JZ;2F2r]%&V/,/ AwR}imwh8"q~] wz#hR,wrxSߚw aT15H'uwgAע-THEΎ-u5O aatr9Hmbh%HA?8㪚H1Q eE~iry>լiے6J:ol!p[PѤWwװ}-]bmTJU=?28Pi1𦱻M?/Դ˅* GϳxʝF-8O0U3@Wٵ\Bjhۣ oR^2_ Um|įxwH\zb|TO]mji(`lr86+?:N*ٴ9 ãOiy+jXTA0;0]4;ІI0ӚLKa quŧ=VAOV8Œ*:V+ļK+IJWUžYY de{2U$n5c-C-)aﺓo=ϗ݅?r>$ݲef~쬫e+sa`5\l12}Ti67oF!2(?$t~p 8._ Eo*aUDp0HK`sHQ& 0u 4.6ks䢨Z<'MR>䝤A> 5֘-F#4e#1 Ft`z-k곩VQviͶ8̗;>j g656sj* SmYpʭ(dIp*KBq\xL: D|6 q}~xMA%ŰNZ: *U1" T4EǸP $NLqNaOM4 |{ ;1LǗP**- <{r` ܡ~2.MhS.ʲ]ԀNz0W ]Az~gt'W(tez\*]lN'3%VRJ&߼'MsT`>$ۢؒ}X,:"XȈ7q*) [%T`43X76Nc K* r4g PUW?yUkO'"s`F@T'*)LIƝ3x!w=}-qBHh͔H1*<7fsF:IU " s5L+Sgl}c؈G*Ɠ*<<6% 3,oy.'y;kwt4 y `gZуұ`T#dZ؍*7eSbp`]wy.RApV`$0K!*?]9B"iȁ ڑWRU-GϚ- V՞h9>Q(폹;V~ϖ:D'7^|0-vgʸR㲹/JͰ9r{ʷg{x$a89–;=Ihu37?klSiVVSXm)wOV& lCEdz*# Yyԅz(6[Bi*AӟD45guGΧ~(1iSvyaF}1\.G{>JG52 p_dJF6Ò,8P@ɻ=@dOV>Hƪxت_l*VU?ЛY6_e~>NKm8M7x8+ԧPa?CW?QruFj']6w$Hmt8daDOfTʙfVVUea@+*eeLOgY_T+},?mc~) l0.femc!Mg|:s ņEmqpPlBȹZo EڮU2Px7g0e5plLN/t ϼz)k m<-6FUjTOcjBl&nQ#pBk.5$lyB68PLxCi"vy^eNVe3:bͽj=y(8*fpR"0`̊Vc3`8m\lC\BH\R6So7i'< n=UMСGZy:-& 3gmA]كr66MP=!Ճ~zBڭ[cm__(pc&2TX.->TR*%ܕ0 jeB B.}˼N$jexuEcX@c9ڍlRawr"ˎ+ªROd_㷿).9xP6  9v/3[]\n|^㚓?PY]ޣMMq8UB %0aʧ2|" 7Ե7 _zHU5K_1)d@މ E'~<"ٕbNJmx}Iꈟ0u LXDJ7Lۋᜫ9*lvU=3[ y}&6]ṫz/u/@?{V}Vjmac7SQ4 }ESWPZA CǪ?eVccL:_h"]w yԺKF 3SjsPi7s§H~ifVkoHJXbe򲲼K*VV{2p/[YĨӶ%g\ޏ~{,eꮯ JattXVѕ͊ Kx[0`Acn5LFo*)touW9<<n۫uvjݳHC|;OufpI{9:|O~BHidA G5@ 4H8_vU ;7u7h# Y5[Gv˚%:-׈GVgtI8x\ꆰcsO qu-V2Q`xܓ+aZo \vTM)Җ൜2=ͺ$DbT9%dZjACcxSp6_7F-DJ(P|7[Q9* Wyp%7:C]7 6j&=SJ>KtQvv]3);"b׋׋¬;?o5Yu 3?R~: RDgR֎FBAeVA(rSU`\BʛQ{O9V8D)n$LS/j~#&yg|Y'<4yT1+;l4x(%#X# aMN*:ߧ M.hlDӪL_&AcŰ8 xn sp lۇMXzs䛧aS2: *3T膙"H%>,u(ɥ¨0cux%:TYY)#]oW uj#ǏvT*r15 ϸE9CR~J梣?HLY5PN3#n w6(˽2]N#<=' PO+?L,l%|+T_pW+椺:ece6-ء6i*!Uq|Ӄ(8l5vT]g,0ݲe1<{L6߾{R>I/c$_cs]ҥFisw8;xF>-(ޱ2,fo~@1ʟ}W|—}yP jĠ;D@VU-1 Cua|j.ɥ KSTYͶ*ꗴo e'& / Ua{ag}?kyiZGSak]lWZfs-6'zϒwٿEFa7[\tMn][=;}\A/)~- xCK[P?L=S׶ ʟPlnt P=QT]]c+2+Y*¹\*>·fUf;0مqٕ\K?tBrݗ/>UՕs~..{\*@sqY\}r<?U-lu$G싻q ӸȁܠCдFw**r'U=V岂"JqHɴXJ4D|;LA5}>EqqR/BܦJ#B0v ]Ι*:rt}T4`GKg7S1U y#9r:p_&+xǚ~84m3)l I__c(1M6"SXj-` >{Z*SR_j-2Ls*,/~ D]w% AK.$&Pv DTZ 仢/ U۴aXBbӞkPm-pۢtzeTU/D!?#0v!TR)S>LrcJMp`HZ&(?@}|N@~qTmW%dkT@f6@ʚpAsdpd/.4@@Ȋeq^|<ЇXTyL@msA9e1ՒO$7Q$!(k &M >+l'*;vPwjj;+Яp7RuN,Uyq5%ؿ'oVܐ-po;ῗSݬDs&fȪ;_Y7D>@n?D9iTCe_NiŀUfUꢬ7bV Y[ 6~j֑7B7iw<{^ D'nhxWYuVo+nG kU׺KopȕEJ(Vuf{%Tۍw&ێJK\]M=w:]GC Xj i8l`d&LfNTGܒ;JܨV*e<=ʏuPUbgX?Gd {!cF;rАT;gO0óӳn~i'+ϨFYx\6k \"(SH"|v{8Sw]4H; 7T'k:vȷ|=B.m \&Kk .`"Bh3*qe!Tٙnw\n1o5GNUO4uwk`^ZU-W,G40 #(DwYȑ.9T'I|TnR~+kۚ7r Ǣ@DO5!nX˨,1kߞ$[ NU̅!IrŊ2(㚉n.)$?]n[I#f}P#QkVn8nA$[a/6.G5Ia$x%xlNT:(<9+7ub=›cop*oy ,ɬĆ:apg mD1d OUVgLF@7@L@!A @x`{, q{^#!ʲ8]i\Bm.AwvRxÙ5*:f%K|&6"y 紓J.@]9nO58wRr2ւl_5mu. YDgP-dZNJT@늡Ȫ/h%Aw]*X5*bo'QDsu_ف)[w)o#P0خ#a9PBu!20&@MRugLʥ7?@üa: %킘*[r (o<͔=v K)́S(iCRTUe`/8 A'WY8{2w=5^9(^*)9,rU}V?Y{%BXdGfnQ)&RTSk1w?esH*A㱟 KHؘ?C\P&wDŽ}'CMAY?̅^Fr;&44^cBo ٽ:>_ !TO¡g._-aL]>>j=_@B+jP5T`\SE⸚D/Pi kCUA?%vD*JʕtiXvH_܎n \|Iښ! |0V*fU`D54]qIU5Bn(pfvێ̏mf;#(͇ٞߕS=Ve/lFA™۶;gc['rGŽ)Yvr>D}̫$ꈸW9桀g?Têr|-7K~vT(Lat[ź9{mӤOlxb.R 9巰@CZ?f#~2qlWtقnWR`,D٧$Jp%)d͇U[LcXUD;Ksʽ17S= M늍Gx\誟D{@ګ,gePq=Ri _\f?-e_51@6SRpsqV|S֗#Nd.6\8\J89mxO.'yM)tL`AT sZEK^-R9iX2x# kHQdylʗK3Tck,QQIûez ›_d9YRh;sSw]fV>jC$[tjUHm"Chu.g:7S sdب*`YJ=6uZEjrS~\tQP]ßfU Oܷmlt SFGxzeK]Xk&cq没>}Xa@l_Qm;uTHau2-?/SSe_7I'/L g>Ӡuc c "2qHNԻF?H4pU">ܔk3++, C!@.E[X}F̖y~SZ~Dx(O}CV$"~qe,w;'h5 i;iU:_nA`թ 7( ,;L t~jBoHݷE5 ^{$7VWT>2w?ity҃^K䎁p=[pK Wf{+ P?UmTQ&QPP{rvGn{b~j Yʞ+veYUdvg\e]e_VuʸYVYs=aa_5o}(R!GdcK©ok}TH4̣N!!<.fi&ەrěj3L<qg_q"G"DW6qt.>H~ 䋴*, aN1$IQ|,y &/wz  ,5N(C_-X^~/hg3y.D+cH ]]6mY |*FPw*7_ӆn0كfٌQ.訃S–衐lUgP{])ePxߢ?U̮\*n99Q8ȅܿch@42/TH}p\ Enaѧ"P~Kkx/E\$]T#j7sߢ xlwg2n-❄^)YK1ށ&6UO>GPrD{Df/#f`461tL Ƃn wTō=KadHpvֲr3@䦀G |(edѤxwTZ)tZZ݁uNkH%P|m' 7p$рü\a\NG(* %rj+D{U?+.(nN9(x i53(ơN ~߆*^q9du `\^Vcʪ  NU/S쫣Bn:6*tjTZ[ *Hf;-is`Q'>w=B[,o=N܂#OPgG~KRDEG2TRRU!ť\qs74Nw3 G@ޢsBp*gC[3=%P\t,+~Dyrvvu5LhO'JG);Y /ŀ"U_t'ݽʶ}Oa~ٴ9Q v.WV*eg=n2#+m RA'??!._vMba qDǒKSNAGe0eeGd*e˩Xf;%_f~ʀە@WSASoo=쟻Omr\(p i1VhЕA#>P{^6d_R8\ M`3p/trj[lRs(w&Qu>Ms_ceݷUA#͞j8f Z=:Wz/X` U N^dKD6ۚ${_UKH$5NWBIt`DڠQp13]So5rڈ.9~PeK^O]ΎU.sEAUr]q\685Β|B!s $ģPCL2Pmش]Tw ;}eU4;٦E`~ʋqz/Gd&ժ0/S;y+79Di9!YR͹*[6>~4UYpEa_S|/Q  9hkߺLH\sExEF&OUNG .76=؎ ?dLrNeYv%[GP"oje ['I _U:~$)ʤD8EGP3[b-usyN= p`;. f}pñ u*dIBnXE|%T8Ft۱EuV- s q? jvBDt'* PtRJW6I0љM?~Bivy:X 4`;t^&ejH=ηs8W^3s6DaK4'u3x @(hSP)O>AڍK~UOe IDnQꝨӫV>.Ng"Ez" Br:EuOalW>-:ZRNBk;%EugqOv_[߳Į9\vp+iV6꡺Ȯ}D|fNJﵛjG#s3فَͺiG$tqCU]S5@''i=r4@l<Ҏ95Yp[Ohf~0~*~' U";/-enm2Op2;dXXG =P1ٜ%Kh&)pu}ŷ5\+"tG Ry/{ _ 2T, ]rEiPI3~EccH"D܃Uw"lt\B&O٥dDYH5[VdEFU=JUUl7pZp06+ q;^l$t\\U NjMyk rRѓV eH\]rPsA7#TL‡`NM{r\.>_3ժrƛ"&|P`s\BdZ Cy]x$INp@<"\-$W]u%ڬ9`4֋~f'Cy*M2nT];C!Y0&Fi4 0CD~j@npw 6Ni|CM͚"TvӞ.iPG9X9+i2l%^z}#pKQx(:ش+c d4/Ź+:Ò/c*t35V6ꄍ<?$_ae?UFNϾkd*]r6OhG09nkp8rcqiEG" Щhn.B=B?a,xN9V2"eA"J'K;\X9NfxAt9MSmU1u8 "M{T"C EؼGA‡ZF[CwI$ JUr㩼|^P1 gT[ \:m.@χ/:q#rS6N(<K-:qgbc(i4ˋt9&,ϳ9 RsCSHnWk¨Htr/UT9ܣ bw!VLQ$ iuJL+R-v ŕ=r3vYBo /}_p4vT/`Eba'V:Ww6#AR۴j|+5 Vˆ*@ >X.M8nUZfV 5a\zhD7ҿPSuVkj~; F!dU/pvY?QǪ:IR`P=T{,兞=WTs*}S~H?U?fӥ]3\Z椓\DVP-owv#ZviTջ fl׏5KK?jkCOJlv/HltkHNj}XħBWXV ݓ~Og_2GlP?r9}̫d_e~){۞YP'du?~v*zlTckN!~)sjNLP4eP'VKyk lYwکKDu@pѰDӀh-K8cRl9Erk@>PA&U ziRiTE@MwlDI nTcO&qig>kBg'k$Fy1}ZS;_8;A[2ƫ-?j8i}7UE]wk.Fh껽mCP~\8444EC7 ~@ȩm0bxjp%OݳUk9ڧwf4t f Njnhg%S+XU2]ާv-8<Zb2rTQf̡q{lŚVQ˒َ+}1 VWU߷n+gnُ~+ݒ{/-..'[{.;b;3=oToqSVXxM *kiaNʂ"N Btf"36?.q6VqR[1Eq#l8DU0yA{ݔ9!{~YE 7K&L\`rW\>5' eoⰲŹѦ-Aב^[ªfmYf߉3*TS754uGӑ>T B,E^(Ѓ\] h=}䋆l & &!q :%I->5恛Tţ0q*|l^|5 ¤L8X8yQypr0UYV r1k gs:]Tn$!H_A9ÜꏏeSEyT)* lU4OSXH>A #LFN;i/G%R;k(c"sq(1>ĥvDu·g9R sΠЦ@!F'#LXtP(, ddr1-s7+a FUMnc恴jd6## p: CA@戛)L~y*Hd?6軞z *fӌ/dzg UڶOmQ>]Uz ]8ՋMԴAGQ-`_ z\߲ ~IV&,~hAi$8^+ݗzז|/kOQpB G8GDt4O2=*DuɎɏA=P.ˠlwW*L+u)6%wZ4523C;H?h[H-gDjl%cvSI>[à~JNy_oٴZ-$u-R7ʙS?{WЮSLa@S*vCO=Za˛Msj<˼.sl*)k|-j[GW_U gѯ98>kgeegg9.k':皇UYj> >>~ǥqpj3WP:l{'; TP }U!Rt ӝ s!C5@6Sە۞},v.r~vAYe'ݒ ߲ݶe!Oܞܺ=U5seoO$bql8]R%a;Yp򥢑UQ ͮ4i5660g0_P0Kk8 ޘ0laq \<tM-ʖ{4 |(;Cec6Q{ö,I!ƭ\&k)x,_4C( =rl*k>Z[g6l uU!-0v0ϔFyFB)"A? x5Mm2NJs|eKSHU]X@'Upl9mFqê9*:aq*EgkL0&jw}9*\<9֑>%`(ico#RoUv;+r:eʓYݛ+eg҇z(".\S`;v!NH omC/-|*:aI.'…X†\CWaM%6Dؠ\TdAp'#cACIl2i%Pq/gh䨼z$.+7 ;"d^C@4\LQyJ-7]x^; S&|Q6 '1?6 rNqDO?$NQ%X-l2 zB xIxEsWTD6uvm!9Ӟ.s[|.Έc:#fᵄ\stñfw?:zM˄E\?ׇԅ T#9LI> O+#*'Qnp|8a 8TfE[7z4=W6E@¤m'}͉IȥK88]cy@pU!O\sبtB`<%VDQ.i-EX8WDIpfMq*## H#Nv@|Ź*7˕! ;lM}W B[sś}u1>(e= I,) Iyc~H`&r}t%= \ǒHyk`3Pc/eE|x_$CZ$>UI ҨD Lg(`6mmp;{zʤHȽ9Fwt)v]y,4MZ-:+%wou0p {XJ s٤N lLCe0.i7뺭?dy ?u rܐꡍl=5'Y>k6]'q##aB:oKԽĢϲ;)Lo&+KSSZ9WBv|:x )y9rVT?&>{+)=@,?w* 톹q]\ }i u=M>|.lg.k1Heڙ/gB)iÌg: WLJw lpWu8p/URp)&p@2^_ uC7?gVaM"s eutS odvʘ=%e[~]?wDQ/:gV첈*OySٟee*ASُcu=+ b|xES~JH\sflt )&Dr4$3s]vjßEm1l5/ ˉSˇ?~fUL#H䫪 O!eXurz6jw;qVxNދZg@9j5QD+麨E@4ZѭśLϻ.쁷F¨>J%ۯ~j eAΗNsm(nm@*jdZaMs1`G/5.{Ī1:}JqujO8{xGnl`uP poGrULp,^`A)C/zޓ3 C3 䠇uUNa],Z^mm%uk쎘@3R=)T'AtKyaTc~[nmś}&A—;GU8Ow7a<=}.rOUzp]yPItĻV=ewMg5\{m5{+u A\+S{n~z[*TمOdnR}¿d9|:`x#?껽] ZFDyS X*1!>ɧ}G_쌧W4tXAi }o2o aR6NgG}쟼:+'{S;+ m%XveBn{u3̯ٞp ^=8\N05YY삎P]yi<' lT8t=ODw`Ig%KY_vO:4i}5M~:L w=S~JGR0ewfεPzkZ:}Ú-N(R7X۰AfXDd)?_~>Gݷ1ٷdYH~ؕ|1Ȏ˨S۞,.J=Ǫj@SI(tߡT#UOvz3'¤Xp3VlU^"zRyqT?EQ7N9Rqr"ho-V:9ʸ /gTjQ*ߒ1g{R|`8ĔE#9@¤& wCP9m<-ErawaS<6\`(D(qKk6$j- =Gpt; 80E&,ATQ֡dDh:;#W២5ToEy\XbnR|sfPu1yE>*퀩,\Sn9.'7t'F/z7<`IXJRswnyD"8TT.䒤YYʋTMnis_gʇRG86'nH9FS\ȁ=R}6UM6x֤t9WwJ9%63y¬'nho~E. yʓ1 DtlaV'`*] Ns[-˹dS ڍ%N?Un%wTצ˾sN⮫ʩiVW +<E>Z: >betua pQy &|#ͧ5"$Q#~eQQe\ ТHiw.l$mVG.@1bDDJrVE-N.FVqq8>+8W/~im"ُFL҈-H m>)iRk+l}@^lnsHU_yZsD6Z;qA2Xw;^l'lL@|vyt\LX^-tϘThM. K9W+2niR{ ,aV©}cSL,IĪ]c5]pɫw\;in !˺^eQf_Ǡw ZM^5'{gsOWJ/lT>ijijMs(q8ZT &7•FRTU]RJe;vvRT"n{-۞i?H՟5z BRbuTw?j3苘§QNWORg ?-~fm`w ;WDwZ]jGPj`ᛁp#|!a2 ?i@VXTi$a3JL>vpsϲ ee_H ˢo}B{FG$?~>ӥY}Gю0=Q=!X++,+=1ە~md=+ {of{!L(X'=]Jg&PK'a36:BFN+“{i 8F)MDovAB6%Lou}LbqcDm&nqPY,uQo%Uj<^nmJ{AE~,= UOOnmA7T5p3o&73) ioUZry@ nab$sD4ËF4F65CEVs瘜s$J'M'  *lMsoL6T_Et9`IvN|mIn7=5&@~*͉*uɼT0&@1ՙGq|#~c.}=UbɍykI摲zGy{fK*fp@SW\!F]sT0l"(GEt`@Ad7U(@SXBYT tۅ`[~S8~\n.5xW]0붐fpWOOQ'w"ҥOAo84Ɛ3scMff}gޝC=5LlCVfĮ]YFv=5y%rя機+#/Q6(ieg?ڈ@m"%MXESߴ}au,w??ewٵ'"oEp8Pc"TOAQQݐ hoQgZcZZjz.f;/َ˞ۣqcr޷⟗ޅ~ؕnП%O݀и]>/,}P ~@7V {"jU7}Umh*ֹB&e/3#dXiomU.6%貢| ?Lz `## 58owRd59g>Mi߯:R=o? O"DUEv4laDG3aVh9&?2[ϪӝʧL y*ۓ_7( &my3u]A̘Un VaKyCU8>'U&Oq_D͗ ä3@K$cRsDSTUi@hخz]PkTv9jb|*Z GRca#p-Zcᖛr$&_bh 6:L;zD TPlxs+*ĪL%D5U&5'P// R6&'^NDk8 5XKI=ɜ. B%–9+SJ~+?0 TXI4!tj7rT\ q$q]{3KfT/Lu2vCʑjOt|A]\RAKZ h{{N,-!>r?]mFʂQ3{4EcǗlۧP50  gLe!Suf`7ӎhy7o2eJV*9,͹YUC(;E宛STE;h~ /]ы;惾XPjk%Mé~u!jUє5c3D_fyd94va }>ٕq,>BܞQ= =.g;0WͳnrLBGdv߳?zݕnu|vJfH2P`R!G؝f]L)!HgF DR*4쎡.P!X*. @%B5͹*Dʧ)~o_*Ly ӒI‚3(epH MB7D ?N4[7UKn7Wy'踵jh;eA`y[ F/Rr?_}OD i1 ˌbbZ>U ǩvԕ5K.AmfGFw eQ_ MTM>run$O;8c(*΢y(p6,$\oKW}6+ .y#R " /o$Rch]ܛwH{Y~3l=KNŶkO56W*nL*-^3U+5,/+jnVXXS~|+vH=Q=F';Aɻ53k gQ KSXg_uCq#Px&m 4Tt$߅j}9.zrp~]B.Jr&ѿgۨSEު}nD*Z1.,P^~iO{xX\F,}?P@2:5VGwɤCK>sm*V;n}̨Я۟en̨XQ )XGf;1"?а~̬J+=en&~Uue.3(9d@OJ d#OlU7UQOBVYT8$')lF)U9;s;4|@JMBDISu mUoUz"ʀ斱)9V (uD}25o0DTtU7No~9 ̕\M*=cQAͺ%#x| S6Nga2o65UIp3 ӅH(ZytGam y2/rQƐ-$psB\@拠qk;rLB.xNJl>*bTZ 0l-rD|/១W3ȁ08?U^D d/pE$Y2 *{P02T#o$\-\G/'mX\ Ɇ6tBô!Kx߲NƪC\Bd">_OOTu;ʮI%9m6 ]&HRX ΋558+TU &Wzȟʛ%o5T7O9R!:ꢑJpQ.QOv\NhCAǖU5 `&ʷ;|}S<3xo}QԴ54tGO R,kr{+;¥ۛ <<Ѽے-6*ȢXg[Jl+TCtɀDe)"kxw 'ˍM-79Ug+d FYWR:CG̍ $ŽuT[JL& dcͪ9sRb8.n}~hs%@eM!`TS3+ UH9!S=ٞQ*?O=oم,+۩7G?ߴ0E@o>߰ mi"ed{.]֮FP:m쎛 _wgk*ySϷ?ɟ)BaFBpUAI{#z,nܫˬ¿P>}g۳}XQOo(=Ov͞$nTqneX'o(YRGdc#ЗS :́cXUȐmY?4/TۆE9 dd.yh -DYp ,?TJ]$4Z6f{%Xv\}oun5/:*To4ǖȽ$}E_51~[crGӷWS+Ӳ?ݕpe={2u~vOݏ+vL€sWXܟ?vrW?rs vmW#U8kfLlK* @p]RFA t^wWŗ/wO}o&\seQwOuJnZ&&~L}z[TawQ?ꆤUCbqĠF+Pg3*"1䋀6Eh*n^Y@_R"s94|Ns _V|I߄a:.4x3e:.ñk)%$P\x-A!xH~-€#"o;)KM?-Lg*"{!+؎H>Ms.%컻zqRpr9TNB>{*fŽCcVd*Ztq_@Phfԩ̌Cm-uYfwʧ*hČawdxn" q!לlxT⫠lo]I7!K|*/:8-&MW1~PNxnhEUr]x*s^p> MDt*6|wEFE㢝Gme@? V䠏rz "i"("UBKwW6]"/4pwu "p WG@vr?T@Rs i5Ak%4;,UFD-#.ʹO+XC@g*@<'Cm{/?P'`eI%e5 %u~2캟~˕*EsvGluzYpꇀJ2,ouI oK݃T9C Vec5oq Z)i7#긋ɀ1a[eQBg9  ")\^S]Ի(_U M|JM4'L~Z֐:JtId$"j\*iG K׻NyNUt<p8mG[?r<6d1krV GESEvDТH$ jiNfܾ@TbMLldH*ևFC-&]ü"*% ?U$ojTĵEʧ ? lТ VGWhd"]cT>xB8:6Bz=ji@`Guѽ KdEXi{] tK!.ĠKA4OH{8O긘L:%͇zFa#lvVTu&PhX񺦫Ԫyo436\My plnnĪ:t_P[|aDRyUIThqǼ[qT~[n' B aoq02nPz 9q)p n4Ո#er.n/4[ q406S&6. /'%,,kA>'7܌BȌ*5]q%A{_Oc4jCl ';{%p5n&eK'CAߢx zӂ|𑺡?swgUݩP#.6k"ertT5S6/$I@R]cZW޷ia%/K5~iɶx.?uR/@^J}XXm-zBž؜}v_9Z+*>eJWܕe?r{APW?_;p_ vI#;)n}yc~V{p/ӶG޺om1ۅgg?rȒꂺȏ0sD`% tJE@H q*K~]fj+ Q`s8%Wq/enR y]41 4 ^sQk`DŽ.WWK+1N5J-W[~$6ȿgCSL.6(mN@3XB]g 8MqN5.p'@» H'%y!7"UlʑkYK. o滹>StI&~ vu(KMM ZhۈŽm.u[Ѐ9惴C59B.P5M=i6a5b%I vF:M, oӏATvleTA 2l!zO{HՂEdʂ$ut3 |VtݍݳJ㋆L["!@ WiCAsd@(` 8XxLS{ mPfOPG+7ccH3z` L4,h!+AlN@2Ug/epSP֋\55dl=tyS緿p #̟ (1%*weMWնd\Z_qceUfg`'jD|;|t(9[(QmiAKM%LA[>T< tr;.E%["/[,?{gd8OܷܞouM5ɏʈiyAnK # ,ȁ Oߕe=)XP{!GnU0>0)=Q'R~>(ˬ( vŽ+ srASuen˫,h.ݚ_ikj >)$@f6쐛CH1''PŰUԬQ}U GicܥXoq{܃&vKY2ak8w8!uT5lyڼp!uH;_P2n耥p獱bG&R,&Mm&#3]yaY=x3ku( p b1 ~tF(sGg"ܹ*f3bW5nHySN-FتqRDt c wF'oo4NY=% K\Dm-" /i5151H Tlwwi*Θ=7Xdܠ渵#Y膜ON; &< 56T6U #OuB {̍;6` (ov(GL_Ebm78Z {~#%WSC2@VwT7x%q%x*Y 鴼O$Ks[`&jʞh"E`K{ DNA(zpI͇JĮ#3b] 77YRh|Fu.s^{^%n=BE;{YDlUZO>;N[x7hYf-T@ MlF3Рl"I1Y{2SrQi**"TF}W PLn@\5S6*o}NqJ~hKaȕT6@G4\oJ[|LlHEqmuKh>λ: HöiF8 ~gq7;! i]Qt:mEO.jI UϪh\]oT^S=U=ظll9quP֐eaqxouKdE膾QQ#6A5F.#%@o}cQ5_Ϣ46xDߢ$R<ѥ2ixdJDLJB[8&9rTrG;€eS^~W~dV5ʵ$P D ̎j.9`_bw6hwD1L1n\.ď0{D"g},xʙYˆ,fVcBX۳ (?vV{caaOWW?vTGlݿf;m=WYY킇41n^vU]~}Qc_@s a5wA?ZV>E)e>jY(0 uViMrRI;r.'豣5V3TO |2"}"-'퐈qwRǴ deݹS)}Vΰܑ '*`\m Cq 0 BpP<֏BY!tZɛݫ渚K2`\H+T1 z !SD!sVC̷0-l2DD.!CM7(8te"Plw;ԫvJ; )RZ r#c(9%S[x̡ւ:L ``ܠi5X ńePuP |CLS?|]=!pԡ-\?9TYQ<ԇ?! HP#Ъ&-8kϒ/5 eR5PmF7#LDDNQ/iU wx:41\$+2T F=$YLH]寛GXEC8EkLbz]R$apbo3nB>EV`3Bh$@=u1#5?T.ek*X< mH5H|Q}hqXcc1}7U ~p8m#9GaLeqrH j9tH-14 IC7iapH3¸Nt-&DžTtÁՑu(w`d4ʾŹ).ls}9'5ͻN!@;_ֶn%'2ehr~5R CQ8U25Ov) .G5}/5S#+3ݽ< i q\ ZrpvUs(qcJu?Eu k%=Of>tLu5st?G)"_X/X땠? Ч}@]aQRSn7FvG[]gl}Yx*uUS <,vOܕ*{9s{/v[aOݏcv_L|mb;'S["R 7`hkf#?e1 U$vܲeٟ`Ha/yUjf)>ew>QstY~,-ݓ +8TкUznyܑ]T^ҤXOv[4a׿4RZQn^׶Z'52{~j0_DdiBj%y54)c^h6ߒSr@TD./JNq{dn$ \I6HDi~eV e1c .?XwL˩mϑ;(d6U!iq]~L-<4q31Qpj _LSjkPG{ w% mC'([pxV ^G5!t$ Z0 Yp7M7ꛨ:qGq'kNfδc5Q~l*dz*n]XL g=U&[ EP_F0q*\z6U Ub\0I`Mnmy:*; %uGTQly1-Ŕ*Uy$=krA#&1e|U:l.0LU~G޿d>{3hϋ豮vcUʕH6WRT*EY"~J("ʊ)"4 ;!aUiimq{]GN_$&0v]ӚI:ao#^;(ӿ"1K.}`˸Ta Tx!1"u#2{[O" չ \8`5P31!(U4c &?:,uEsm-lZ\9\/0;}&5!oU10w/b Kjm皫u4rUcU( UY g{acӳ?~7TL^"Xmp䠺{|Sj UQQice-6im\U6OpD2j~RUE7_keUi cpObAT`]W 7U.JݗVx*?u *jT##겮{-,O>ʪ]BEGm.[ȴ̙vL+}SJ~nSbOkߦ@pH>Cb==8^f;eLF_=Pn-dRCXRK ?Ԁ#adZ蹂$q|HN<0G%E1'u qŖ .^mh;[Y_|#T*"EjO>P[9l<$AE%'EXiW[_VQjF8L) \gpM|tH_)t[Ϛ#U0 Nyd* 9Eg+]/p環` .o 1EqiG'z?TYOtA8jflL5 ?\$M_Lp ěDj?EEHhS Z2]R7sHrZ MT8 fWvHwu{9gB Y4«[@y_)N|VIj 5 NmN)T|@\b\&ֺ-5۩qX^WxP }Q}0sݛ7T8֖{~ϟvh3J{&{{gs\BD>o6QPE!N45VcR $0C$!Kg*ί̮xF%HӘjr*X؜uA?ҩҠZsbdO>"{Fh([xNT<Ź#> bЪkx*[67ꡢok{[ OXQih 6]eC\dǒ}̫޽(C۳SEyQ۞D%n02Xu?RcRƒ zOnIVMi:Ϛ,Bv1]MjpthѨN[ZN>Ky#=UC䳲XYT Uf6pTlʱ_eb̫L,̯G-6Xf-@=m2;r,szgD˕S;\vYy,R4l,;m&{n{.?|߲O݀1uO;\JGPyPƂ耮#t;ESN"$^L@ᷚż_UP <a,cAF $dp}Ҡ8ít4pq1)ikxG@6q[\-³a;ԸoEs:5qfGn ]bMU#V EP!VaѭΏil]i>a]vEyBo>3 MRpߢn HU@ Qߗ5x RxDAl0lk60H}%H5fi4u0dFBCmO)p,po8UCEa~Y,n{),-pN>? W(E-"rR~U68y$ 8E< x">I.fwy:bFqkjlm\,9&J MHi毪0J,ȻUiq֩T}>oCESUbG[N=y٨Ѩo S님K59AF Ev19Q#Ņ4"㢳eʇWwaUx諦Ę\" <娝>[{NnX//uU͢y*Xo x F.V&kl֙E@E AˀXtdD?M{dmx¸U]y SU.6]d2*@yn\Q[ypeCB͹PԴ7P1G襎vZ +̮d0.SRDߚðN.+Y`,R&)kv!VKt MVw1fhnZcOmP]]\ʡ$\bE¸`l引T|(;c7H aooaqGEm9~aZ(Q.e/fUeLBXm*=IO4Fq L_tC3sn"ewQA~vϢH=Ti0E);"Kuw ;}Pj}<7M\[y(_[zC\,v**.v_; ,,Uf>Яٞ+)YVRꌽLdJ,eo vGn~1|1`g7v>Na,iχ*;:)S~}: l+vzd(YXQ=b").qlTj8DJK1E򳲥ܿO4 5K)A .^'.P;{1|'Te4j軷ڏ T:G7q+.%C_iV8ԓfV  S6WvCU"C"g)!$Nq\8]ߚ⫋Ɍp.\&DF[/gDix/oĕIM5oU݇pv*Ec[~U`];-'{ۖQ$gI"ʫuj: ;X؜GŻ m|a5gPڭU<^3HpǪ$U Hh)wlۧ8l`#c+!|FlaV5#>UWqI F_WU*uIˀM6_*/u W3i)^CbEqӛ9qLLؔ u STrlcy){@}ҧM}-h7h6]7G$ROqS\yišb6h]E_`]h u'qiDE\f?*H U4-]ǖSTUCmլ CoQ՛A1 6Q6F[p#"4m+QtϒDy_LH)>ULqOcxjߧ1ͤ*l F2vP3NyRҎI7n0n\K\,ZEiۆV6i;MŸ3p.kVHBbܔu8R41Ro a'۳MJKv[t!Xauud%8Rs #I xE/HD44S*냞!J&Q%TzeH^R9;raHV/1E38Snf;,ُ+eJݞ%vg~۫,vg@Bpb~V~ұVB·n{"Ual)*g>쬨},vy+ʲu0DJSU,++L*ݕWW͟ p#lS]JeْxTOl' k~+(x. tā*ϖlGx$ ㆣ v 14y!!/-踅C dY3\rd#[o]*5pMMrSX( ansĻφ[p3(OL=UϡRe64H#|)Ұٳ1Yq ߪw d6sTupwFsgP~-.14SW\j" 6"״\Xʷfj&)];Qi.(/D@Uk5 &ijR K/ zHmt>,\ ѣO tH&ۢϥmvےj4.*$Z,yAY`Q$*͎pvˍ QCMM.Kn,4XN`-ː 2CU(iC[Mq[sS H@4郴c~1:] k@0qx QTżbvq36*؋]Ӏ.YMp67߹]tl> p6] 8 xՎ V\3Q'x 6Z)j&Al]u6~"i9N~|{"HUOgd暢Ŕr*ZA8#}o^2m=SrݰT,leo?}q&c?4 h7r}Uzms;\g,;sVyOHGap_*{9rPL; *ݲ2fOg#*m沲ەYYYYYXo*!J s|eu3׶쟻fT^۫R==S ^.}#;s-)kE-N NPynl7x?o #d*6 EV-Qӌ':à+8S.+mR訒W.yR_`Ŏʷž}^bҮ5~ B8$x`[u SϚ"?xꤘVe@~c1n[><09һ'ǑTfРӋEDn;}a09Ŕ6ꊎlPE-V'rIlU yjq.+qPXڢ6UO˜K;zSsp?m|$!~B[)Ke{J85,9PtFK]:v̦i94GeImHӼ\IB2+97 ,aHⷆ@W (~+€inJ.(w=~xl t wT< ID \ڣq'8ʃ%FXFSD%-#62* rYpk)aTϝAì67\dV(}qi3ׅhmD:Cg_kH $N?T 𦴏5=ܝ~͸!ENvQ- EF'bA?/XۚsI o>5sh\O>) ഍șJ齈VИ>g+n/|ЫF?*\ٳgs+!ԉ2o)x"[#-)ruW/ d|"|ZfT.""Q!H) A-EDpJ׳?s }䬳ٷnV+?r?s?~!G`cEɲ kf'9軶jDSMSqʻLsP[&6)njAQ9\ە۫ GG$z)WYSٕ$|!\<ԩRUe~v@TRaLy^K=f{2/GevGV d,T5t \-sLvg*)"P8g qnl\kZ$2M 1 vYN-sL8=Wۚ3I^%!Ys۵yS{FmP"%x/J!p5 W`u}-m'T?t_5y.GOq8U oQ-&5˧z|+#S Sj" l0m$!G^TvXĹwQJwUUq8Q@}HT:  m(ChS dG»{n2NR" rv踠С 0&ڠLtU9Daz)⃺5\L5V87@;"?to"֗%8UU&'? \9G N>+*Z!Two`Dlt9M=R m9ט!cgVIg$ $* 9;Y8\rOCv>JT6 `$济A7N6p\5͂B֍?l:O^tz]pyʓħ1aaKZ39PJ 5k _/ nGuVuAlػG tѮ(.$l2H"ߘ rhtι,-öugzHOt`k*ZؿŲ= (g2g+`uCPOrVoa*Z. T1T[8p]hT8SA7J/c)lo-oDfw k^-dLeN䳧irPdBh<00bGtEwA ,Xwܮ6(y(E1 ~UW0WxX$ZbOBoj j5$9a26op[nTXڲb]y*]Q"L"|Noa BGuZc$4zBGvVn~V;'Gm$KLY>N8`{^㲡PA<;,m\WUtƼ db nRcD_p[:d5Sg* .s<-7K=#I֔Z¨ ZN[KKEZ&Nܮs|B5DquTq!%HRʉS߿UN7wU&)ౙ@qT 䪧UTELlP<%K#Skʥ sH? $D|+E*5.ܵ=ow$n?MQ0dw% 10%m̩2 UflxAĨQNU sfnߪpU5mepY(m,xy( _Ugcn!56{!Wn;/ o.cc[x{J"^)4. \.ql}UB/$lh_b?;)V?zHPl;'F>;&;1*Og fee`Xy}VS>ff;1ٞYܨ䮬;K4NHMqkeid}~@1v[~ef,S'Ž1U?ǘB-65IXԙpWPo{_( RbihC #m\SxW"2EKb<T(@+ih~9mThc- aNԡK6\ p:Խͪs*f<~oyov[p%Y3y*i=ZVB̢<w &GmJM46ge6P":Y5̩& ?a{ȅU6cuN7d} )x6]ϪT[ܓ"9ӛyUU'>j{m(yϚ$͚MQ-+yo  .~yJvT>ǜN G:) lT,)YE $,ʥG@uT\_q6')VrqU'#^5"hU]w5xGZoqo}Vh|[l<б;wk9D5gOL`n0(fDjX7)/]QSQq,y/q* @9VmSg8qsSFPpx^Spu" prpB9ڀ6~ʗ# o|J Toyu@lTDI6XS'Psɯ 8tfjiKHsV˅iU, xEŬx㔨KvRNMQ UR5Y.#,J_tZtJȊ%Pp[tcfM48o@腽c 5=,.q U݆2vϻ3Lg/E&] ʒ5׹6WsO#ċg 6D{I1 :. t G?.T8mUrzQcbivWe_앎lV{bU`;"Tv\oIrr;5:ܫG `š9IsE# M,vVS=raeIX\vBɅuur%Y~Q?r;?Ur\ ?Xva]g+ȅr>+&>;g g~m!;DgVDx";vq_eg#{3{s'*;#{1SٟrEPv/ <AU.*EF FQ){,ue\x*˄4/ɚZMUU g-Ѥa9t{TTR8@TZOxyA rN ͸nt)SOGR1xuXyiv\;Ԉ1;/h.@I!p2-&f#P,mUm?>C`l/ bg(؈Hߒ-A K!o x<#,=*Ne%Џ$ G(hSCLP $|Fn{–E9$ȪkF*5H{]v;DZE'H:2dA6=7*o`Gs #SڸFL"-n'jd|+^ce$xg*+ gqE#8:7v\Z_UR+ 7tZ֚. s[ $U8=7R+rXG]wyups[JUQuN< H@+^/u*誧%C9MخTݦ GaTn!SaRKJjV.x@3.N) źpYs\8;Q&z"7]۝58NMeP! *t~%МVyỹh g,|$#Sq)2Lt\zW-oQ炼4OxyB^#39H)h4[4@@hB'ORc1(:%MMtAԑ*]@ߋꝤXx_{!vwN]-t8~]V ݗR~oԨNёvC^SoPa5h%9S?fgSum%n%˨;}ž}}U3eu;!cAgcc{.r}}C*;/![O޲..v!eX[_=~-3Lqۅcl) IlNܔRqϲs\Iu\b،Nۿ[-i.{mYΓwT<7\1 #%1.> 0aoy1P͊fTڜߟ, 1CÜHDO`m<$RUB ot41Cʁ4$tT} 'u]B!lGK*>W =ik/w_g#ꠞ-U9"/Ul-~+ʆ#xuVo cV`^+7ꋞ%rF+»**ݩs_ʼBU`twR#* HS-6g9D.>6kE$@\&@Pk Buz9jΒ]rp໚H?ܗ:ݬˉ͡xOAq +fIUUp ݷ^j-T;ω@p1^ba2!_ZdeͽKc>jp1U5^7WeDѩ7eL@PO!7pKf*ʭkoO9I&\K[:&cV+ӪVCGD+8<*Uk;g2njv2,Kg*TUD*zy,ZQUCPےHA$Q|%;QemcuC"cwR/yLODU;IURguJ;OZFGR6&HzļFJEs^ '63ꦸhGLH;aPYWZ lq͗~#+Ρ*iiY)d]HLN#u Uêk|7ʮ9K>'.-_QAEs@'}J#荌pC('hB^45`. 1Tbv$}GmS9rgpiJhSԐ|8,E<(;McݺUB _6p< l͌<&"'4pO׈nc*gʮstKuy)M8Nt상JFBcx&cT [AjBiB@9^#`"oQϿ[LÝA;z*o˟q@(1iDZ=!ݓ4jBl 10jG[I8zals 1 pvR=NٲWN9ꠝLUAW\&w& TiOFuR4Q ȗoH ؎!\{Ԁy.Y褁TAW|H&A.7w-!ّ}¶zӒ@K޲&#-1aUWxpDKq6'[/ U܇EUskUAee;;6X7/.7|v@l,*ݧMsS#*]-Dr>. ~h (PߨNylZ*MW ߅qE6¤pۢ,: S0`YCD4X+cxA&PZwv0iWhS˪/掛eSED (A\Zi Vǚ[}.2 ʦּwl¸BulQ 4=Q?5=A;*5\C¢bx=UsksW&dr[ߢ>vwp/sAmRI50!i"7Q"%|e(2 s0HRȎQtKHR@ EfKýX7BTon/ӏ ߪ\6)I'EMCUQәti mD{*=lT7*{ uGy֨93hp1{'7QČ}Gn,(srG$I pj`iP4xm U d 48DBJUAIP}U>U+)iPRIWV@NaS\=E>߶a[X+}ˬd cĪHV?r{$)R-?ԕO޲fvݕo ~r?йmB:d eg_CN8}m1FϗYP8vZ!ßdvql%e~mkcNR m{(בR[Au&-x_?ࢩ#&T쪛qZH-o襏E2DRߪ=iM:?vb~qod*$MrPoyDnl4J"$O<@lI@*;Yq`.[!"rX&qG*COr,Ki8<M7dm *"u]1#8M7 䌁VMb־ V..rۓ|[BXiAqF~-U-?^9\YӛJeB/_JP`â/~jbS˒p$-z*ĨwR+*u UctNk5 ۳yAh~\d]tυ% Wvx Z8EhS7-K}gD:Z@A)*`suSM"[XGmMv?6o(a!osRXUkc BtNJ*GYkBuXa@#V%ڷqF sOMʋ9-x2 )ҌEG.)klZ&wgZF}X.)vUBܓG GcPPM~ <0I6UjIl&]DNwNkfW\ zQ7%`𦶋aH猨h{\^4eq7FEFݽ;y(4OB"Z@so 2Qmn4 `i䨀Htp78Ovߪ$r|BvMy8~ #PW 8@d~3Hm?sI|L#SM* )-w5g@\&N.s{s,T$"\!{64X7D~3Z @%O%ݑ @lsmȴLhŠ c&s SZaSi>W 7'eQI{\9d9Qf:_J-G&~H7qs @Uuw`FT:oD힅<1::'4>%\۲ܻ1ʧZsܬ갌*O^I?U=YuU@}+n/~V+Y_VV;1e=X?пܷn;1م5s^grPnhjdOmr{)+(YdJQs= >;0ێ?z{jt(捽5;,^.p]CoORs[["[}8w.d -󅃍aŎT-..cLOCA #8OqbRHFtIIԶЍ" 6B|KQq#.u]pMmIAiᘔ4\6A *JT@DE*Fuxmu~Ey'uR “wMӇ0q 3e1"9]:HT ]tp؄ia*#Cl UQPB-ERyBfuSz-Pͤ*'V@%%kSW&oUAq(GH/wo3]&BLO% ! è iţKղ _9@~1Lq%Iu2go8٢UTG,&R4u04F"0ݹ.ΝqhY^[9GSOl?d`*nz5ځn60 s16 E #HT{skT8';*l3L8z#*&ҨK|c7u CEe0>h9ܢ\ەHkFbh 򸮝a/V| 97N m~JX`k*ͨ7?5[.GC]KH0?UfeAu ͤEA'L0@TaCʗch@ #5 ]! ^BYyd4͋]LTH )f7iNo9䎣jɋ+b#eHV4^HW)"o%G_fQ֨9|PnhP~1.EKWh;(GT4 ;>W9+xWn,W ;t7}TNy ̲:`,rG_H9W TVᓙuB_ 6&l[w,UM12lTm;/tʗf |;Vl NTXW}!j| |. NUa6U3V]8N#ݕ##"WxIu8Ni2 򫘍;*q| ѝ4>le?}xonK1;^NHtt'qfW7YKYsMlMt[<%檶6 †&5LJ֋AWH;+iʢ@h$~r9'SI[T-:yn9ߕ׆kaj;|漇- Fb,/ s_}>e.}k#CgPc5"mfhX,, ~_r>pm"B:fcjHye0ean?rwZא! vY =8SnEuN_tt괪Mo|.}W/>!)XjdtٿULI7o.ny.뽰q*!Sr: XnSC {{ Pld\t/;/h"% rzz"8dԅn1zo˩EFQ/Ҟ 2I.%_5։pܴĂ6N#>!TGX\'|"~Ugy"sj$fЛ#̠绩rH]R U[?px&5~j"P6@3T-&^Ef0 uTAq<x(<L)*AzoX y. Hth|*M*g=T R<3 iy#I8Ee[o~`oq{pQ-|}}jk/axٶ❗=4"D{0dtk\^70*{ִ:b\SVf˽QiAP*2an[#iPH\l\UxHv֕Ky)7Ar0 .s=4 vSK5~XG[l-EDmæ71!qQLj-ñQ6AԦ"o#0U1(AW`bA v\>.~h:OSEߪs[$ =vN2n?-3[d鰚|BɎx]y6  BE\26^Bֲͧ-4UMMq{ 00TlnN̫(]^Whm lP)A 7'mQ1} BJAGZ[o=ٳa i6|'}sX%$P5T |"X*>x6N}\-xO{*[L6ihu@10?{ M[ush"isl\I>4qcAV\OܧpgTuuVt SN¸OdمnfV< K " )!cT0GnY]eGf€>geJ¾{cnV)lL+ܬƒ ^ʷd˲ݗZ6dNHm\!LvK?Nv[ײ?fUdv۲z~ky}ν7e"O_,,VXH 3d cxʉ[€]Z]'!PͬfU p \HdN\p-*8ܪѰU8UQ* *gsC1ŕmE|pScLz6#-c?넛|["86 *1ʐ34I0L"7 ۆ.&"iC *Au袨s{oUꠝ*L.&!e,m 4H9*iacD< ?M !IV (l k?G  lPRJYMV H#@q \->&QkH44=T8LbSWۚ:3ϜCXy}UeA IdhmvHt^x|RX7P5/:ym&ò{J f)\-8BKp7cQ{o3 k:qUm!]=Z:5ͥ'r N񧉇d\*gQe̅A |Ӹ?PcoQdny wvF="C7DA>Jsd6T<@9yȼ#c,+gvag*¿•(eP+ =YQ=~{1ٌvIQe{[ʿdf{0 sV$H*B ?Qم#Gܷm/ou~ír{gcJe*{ml[ݝޜIN|ݷd}F=VꭈQE/2Nd$U( \ꨢoBvz$̙q}\A/#3( 1MFAnNɭ&Eޖ4eC?X87C\OA( HMHԨ`:⫫i7H0T CAKu*jT!(duR&{@BvZy]xfį?']La2hR-;G4w=N?*Ύ1%8D/ֳJ _ *#9` VEAweeOꩈ6F! mK])UVAld4_Tqc]S0`3[Eȏ~wt]؍* Rd,24q9WѸD1䥎wTcf` ]h/V3 kZ/+.y!:͹zFU2Wg%s04#F(/ bw29 32/qSq)ndZTQGLqm\pH2juu!6L&*$UsCF>xGQE_5"?UKp7ۧEPu(ے`6岮zwP2zJ..$B)SZRjl.¸br]fsqHDU<r}J-1~){KMdkCJ-kTqHih12Wdy$% Lh|B, k`ax[uw쪞p)KEWPW7&pUY` x Dٷ bw^X V\qcMmʥo2LpVTpt3i& {ooUCI#^4\bmpUdew9n|Sd5L֪U|? T*ePmL9s\ yZ(#rLx@¦7kGGTK!Pky!ĸ9]D(M s2rԉťA`luHcχF*Hu;XXX[>vUH7Y@U.g7@ewbMKχ\uz.xSQHs̨5e1~Tv&eu % ?ròe6xCvXӳ ?~c {`g R~-euV̩Žvޟuf?П~f{oBs 3n%KX+vX^wrLvIH2;m,?¿lIe OJYTnNj3dXC.ѐUQPi7l]T<Pse@5B2j[tN̂UmxǪF@XtZFs]8 qc7詁's5tަ=BēMTHL-bD_tKxr?55 AU$o?-D:Tg7 tRMR-9䆓p4DSxFạbt8kqeޝŋQyk,!7#t\rV:AԪ&o]oHf Vۉv=iEugߒ@-8@C9El@CԳ8G78'#+ED 8 n>!".9#>[bP̧Pr/w}9K[c@XU|t\c#-~P"d>mJR "UP!viT}f2". HY8i$6yT_. uRM'`g>(ʼwz)v ~f.L5FpQ@6w ,j o3$izE h2.vqhA#5qU/w&<=/SH'+&"UT첹Vn ̬ fʫ|u1V;#+Of{|?NjUV,n}+첟c'cث=va9 . Mu ]UaOc >+.J=dX{8n{lJl܅e=ʘ쥌$l6;0xiqlcYYSp4KIOܟng ?r)۲}sOd¿fVU;rȋJ3TVEPFZysZDim]y 5bq9x1 Gy1">XFme}{7.-IJ[!T,x1]^M؜Bs uU56t\oP9D՗DndFaq_S:nZUۏ4MC- A4Faߋen(7'ᵔܶT}ﲆsU4xOO%RCDh)rš'Tu5QzuwmTL~ʰ=! 3(;F5*ۦө[*$HViQO+S5` rhNP<*;Ō8u&GJ%57.oFx͈SjV\cX-{WkaXL.LsP#SS@Cfx]!x\Tw_WVTE!Uv 8ź$guX胮<#4gu@nH,ht5ݮ껺̝ dM@PфtnIίO4C])#nl sN'EkO2TA7 OYIFdn[j&Ժ F*Yi{ /l:DD&u]ދ.Lx$(8jX~UzlUNS0 =z#={o'JdJelL8s3ی;2,V>;*%\g{湎9!YgݗYn{e\[YGQ~مeK,veBTj'm ݹRFmd}g˲e)줎vc{3=dX셌+![LrYY_iŃ EU H H7o#Lok^8HR#(Qn<[{FSEBM7n5<`?1!RY>kInQ爜.;z0O-qln-Red 9 U\aŊ] t+MnT5<Щ :NcP1k@7]Qi5D̩6H&%`#8L:nT"@i3 UfOSE /KZxDٱd3M}m솘JKau^7|"ow's@Uȝ@&g*iC$tC\eVTy(c ++6.n6F"7]>;w@. .$nu_5 L9&l7Ļ=UM展F#p'*<7o̭Jr+mLexs@8j 9Ui³OʂlړL\4GoŽ4mT \cp!U ϟqE JwSۛlIqDp]S4M/tߪK>SWh\#@9$:ٵG][^E\NPL}>~-77I{H8@\nBp4pQ|:m/憙հ2TRu9 A4u{_:)ҥ5ԇ wUiP3SxE+;Tio( թxahL{ "\ -7sotN&Y緲cɾHTh趡sD'^{>{>]>Lr)&pxC ^Ȗu' kB%aue0`m1TpSsnVpmdg HHeKk'8\M "Ź4C 6.mxN$|ʩF-`dx)TH=ƥXw }Pݯ=U`a Ӛw ks10[K6m<9P ? vd|"iNrEa6SiAo"T?Qq˻iD^W kbD ECC^1тeS# )*gM?rWen{e_~g%u~}+cGxَlBVَtK5bFQ1C{!v_ݐVV;%A;.M6=GrPJF>MJ "O<ببߚa(%.O0NQVlދf"?|2lc/7^^*o|6iBr#(E0nC$r:[n;j(Bar‹ycl`e_*p+\؏u)aC.25߯胚'((|OuKo1}QpcR4g(T8>J,-*cn[>j8l&*˕Y!F\MSo4HhtP R6ɴtQWP^D4jl${UX%CQq戫1k #I'VT-QiZ,:nK-}5SH㬣SE *f]D_r7G F2RCA7Q[fUԛQzyM$ܘj{Ԛa,gt^aKiSv껌b5~2z Pl١@ AM1L! 303*mT( 틍N*[Zdo)=L'p "łylB5!GjAqWiB\/(0w]"YO ot jJo}$b8] Mq?AAp|ԁUW̫;3t1디ixߪ+ce%U1sA{I[LSDwfbnöF0pQ^͔3Vӽov1l| O.8N'P\FVKOp`vC_$ l6U?O3y)ʩ[6~J]~A,#j,m5oKt#P7(;$?E ]i:) {(?kUVIowCSOR=)4/rwe閘6.Ӗfrp`Mt,SKǤ7mz{;HT x7eݹi+!AT<(.A"uH|Ø2$U?xv7 Lq]=pb!f&ȼJ *[yFE-aKZ恶witAh&J,(}os˥wXƶ-;qVD @hA=Q3?qDWqGpA;/͌{5 xʀ<^j5HG@7 Q ³oUo܉7\L%o~FP.tȂ -mqHhdpqJ&|µҩ:D|*K;eTeoH*-OwkO ͦ$ZwU>fME4ř < %%|Nꋈg*LϿQ" Ep%}[G;$z,)VҤ}~Yl ac?eYeZisahvY;WYy9$,G݅SN}(?r'e#4k9*-cZ~0B:vg/y&ުc ʢ s\bWEC+= `¹^0DGT &u+s"&c1eϨ\VTŸz*\=TfJ38%q~ʨ拠7*&㚮LSQ$Y!RB BųTo ;*D1%-hS$]ע&6F^!wv1/{@A ʡ n;|;&Ef/<eTuݖb?BFPu!U= XNI(3 dJ"da^vXfSjt:L|LlT@S9ޥSbT:5~T ӱD$5KLtqNr^fۯ3 .fhXHIx8U%߅׺2B%o*]UŦ?5-Ͱ繭/˒ 3Iw֑Ne|$7 "d*>~9.'&rGse&s{" s^]&q_"=׿ATl,elRfo_{ E*Or-*͹š5qKqGt[ E$u}`4TJwp+T? }VHQS[#eX@MBiA!9=<7'jHU #\6 r?5FuUxJk@Rz-s@ͮlc6܈#  |ddO;{ߢ!Ulۈ袶.pٲysddŤxytnbsTy@EW Rn=C򍕙WXAzٶ"7!U0c-Q\Ɔ b}Q[ su GNVn~tN"Uc7%D)T@s\"ߕ4jH^xWaJXMgy>b +Tx仧jRp/"8߭ԟRQ{C[beOjsV->Ӧ8la^E:;99<¥&o.ej1%pT(3Rq+9(:nxΘ=hsIhTJ&)TfZ7O? R`"6> }U'B tPkv5T~,3$($|q\l6~`\LDS5ڠiGOP¥NuMG)*q ?]uD× a[FU,9J!s<% lP;{M$;se5vgfփ{'[ ;goӲV>%r{ngDb.%ggٟ۟nQ=R\vm0V?}w0n." l;y=Ȑ eAz*lyY\0~ E$GNUVl7e?Bh=Վpsce ˑQ{+zC#pF9{"o{s{E9r.绳QKg@8q6E:~jכ,qUs6FQ`' c72#!S3p<|fa4sE@:쉨uU: >\C9]^5;Vבf }teDAi}xE",ߎz6|W*8,3u ga}2ߗB:R>(4RP"~CP1'qe M=U CmpI~?wR3 *H!UA亠(kC}Wv9$~ꟙj4^ ,nOdz9-[bBBQ<@lyƟ41lLCCAkU)a*lpepc˜" 07ROP:4~idԺt(Q'쨹Õ#K*@lO@"CmGEڮu%Pȉdu1q|38&9uBpc*.,'u[wꎠ/$G3긹j?%NvIWm-j~]psU 6UG6պU)Ŏ|:^Hq'u~/껷@h6-&͏3`qbme#}׎pN0y39GQrU pt%a@I/, r&Us4GRH,/_;Skq(is]㴁hvؿB苃|]_od{#D;*Y ʦVERgeP7t* W6<Ԁ2O)l.wo}Mi&&T;X74`p w06*q0Ko!)xy+U]KI˸TI3jл?RexfjH:r-]Ep|B8&Xߢ2b8T "TZ](g|V' nU5b@3eNa:ƾTykj\["a6ǩ'ꢯSa~5 ݗweƀU}5[ZKvQ= OT8i4wE9sQ5 9D\G |Л] Tvk?D yJ/ވr5$g櫡i-}P/UWI>.S>|{;FMUkeQ1#3?QTkeRHB تfꡩ.aG_s0)<G0uhB ڠ?K[Rs]0/쪝5Ș%MS(:8=䶹Y3['V8 H1j 軆:l{(b'Ň lehB2 Pd&60% lei&{naLAVo*E\NN+p.!'pNU_^$ 3TT:Sa+&]*ysgʀYyyc㇑ v\9Xr: 59/tn/G50dTݾ98_R,+ fW͑Q؁XW*9+ n˩oga !D(*w첅 ~;';q=쏻1eջ3}H?srՕoLvs*FeJ$gˆ,EZK"X-ꡞYCꩩX0v cQ,֪˧ iהT4NʙeE1JY91sQs$1ǂ[k_U#R7;a } G7.3yv$dJ#s:oQUOÊvNJU-.7p: &<0;滿ϊ8sHu\/ɋlONנ؋y/RnHʿ s]Ĩko9愸9_x\InTԻ$!/ lW8%ֈ7ϐ n:HbsR^$>wP@T X|4<\@D}f u\-F-"/5 .#8sTI8Wf- F4`[ Gq7Wg]T&fHl` U\;Lߚw@c9B R^GN( ;(F$}US9ǚ]Z8)iԦ5!7V>.ADޚ 9*h*5+im'oD6^/]ES-E8>mwb u+ŀ].s:elDĀ8^5;b4:o%~# |nM'!?.SiR_ݑ AhnpUwMq <]ٞ1N\DicM{eݼiMRxlq`yyj o i~8ֲIap)կ)x>aC4~ =v,8hʘrT4]g ,mV +J( W+ ]a\*NުeL+(~k˶TBPc+}ʏ~~ݟ~(Xn˩>vcIl; Omcrۏ}ulL6VaaZ.9*\` å 9e/.{Jؓ(~N+aNN;Z<62i֣ƋoA nQuP|98F2ɛ|["# -SBK|XTU9a3L" &6@ sP? #-7D@nHaPhp?LBŇUSVϒpv369Uj?`q` ;q*;}0 b]OǪUz |K]o4 {r(A@NrD N"6|]\4˕"*RYn\ bFQ2ŝ6)Xx\/+^ܰUu#PWṮ W HÈ!!ӒqQ뺒b778d2 4\/i1HHh9D Z|M3('hU=Tϟ}+v܅ݏ߶ǶDB۶;1&;g>ޞ(VWퟹ3=HCLLY&qu|y"EC.J!Y|Vl 99i#>^Rs4(Y՚\:(纗~~ID%3k(raUi ָk\Gu (X DR.78EpU4>_#<@6+k‚0>Hhl̩BXBV0L'M1=F\ll̯ *zp6ݐƁU)ur%,\;8\@FUJchAִw5O'*&䋀X$7`$}0j;T>JVP{0O0DEU,YfQQxH@6qc>"$[!IiJcKǏdK@V6Au1q@u9ptAty)ʠx̺ʢO 3my8 PnAqqe,}򆫏 ;]C p\!OkDsTL<>ޓep\C~JU\`rʰ(i)p;)P\\Đ w Am'; z|K#rj1Ϫ B0-u8sS1q"5=eћ,ֶS]xfgG]ٓ* E rWo i vTӓ9\uUyTi<;jpUU&?TSN*cQh=UB.UCr|^J8ER"q<]- $|){1 Ӽ@>3dnϱP, H>W5jEVAgk=rU5t4ڜ92zB-'kߒ:ӛm*LMsF#d %7Ddɺ`tx,n(H.&TPLo>h̽@NP.Azns͚*7RN*ꭩ dhC\i+,#EE1~h94~+|2{_ !$Ħj9L~~~35A8@>'AUU02dc+lcяUDE3<$5'm_njs_etCԷ#9A ؑ7t׷`0pR%^ԘFƒrA8mwDaKUQ _pR.l0+A=W? e9rKH (6 zE8L2ĵ=UO6ȧ_{<]{?nۯ5,HnV>{#܏32~}3ٕ ,},vt~*;l{,{.!BlWQrͱم=Biq,~!1̩ƞfe'EW3A\3ħeYcp/N(jU8 "TYꩄ%Y9E"ZbN l}2gaSsQӰhl X75"r$<6ʐ$4 A&ȟsHwM`Յ1h>iѱm7"-hzHʊ, w&E*E9Yo.PqtH. ?.T'ObZlU%2ǶŜ[dD^:]WSpb8Jɬ@ȃ`Pj. qd]Xovs]y{xP+C7P:YScșT]LXT-eH *K$GUY9Ebk8~!^a:ǝBpF_qhj;0-]˻~*>`.>U?A;"\\i#|pDˀ_I`m8sl'hol]E[BLLb Mv٥Xщ7zPf 5 㢂M 4ZY(D,:'EqĪ>.=<桭Q".Qᥤy+~VQٞv_Gl]]Oݕo Eon;/eg;fV>;/#eYOd+uon,g]T1SAod,}ڕDżHQ20.|"Tg@9k}vm6g@CiFdpZ*rJnB.0g|:q{uoC[KHNMҋ뻨Hn>JO2z)v6WC\@T7 ;,žYWE7 Eݰ$:!鲙P]N)TIt:"3|+\\}g3n'W6(s]>^-1ܪJb]T%^=ӋY 6>\7[1"xL2m?!-DI$ɴ-_ba4Uo jtUW1OEE=E j O E[79˦压++ ޕ{?6c ]P21*~t| ΀D9N,DLyf {Yd~S `d[v1'5aiTi <(79GavqodZ]ElpŮb6b߲f]&!]&8a?Ҝf>IͨoVNs0&¡\LM(}6xq:#: Wy!$ W4l7v%ڟʛ/- {PHeQP@ӻӷ>샆pљJ`)1RO@=0hs^&6§H(N7 =vCkV .Yz\vɏ# /tYwR Pm!*s" pڐʹWj%K' PԀAc '󟭑owyv. M( \h*JR(]nFBD!N; oBe_wAF^|vt|aNMRsC3El-'긏R3b{}10OE-{MSP#`YU= 2˪[7ϒ%5r$ix?0$5O"3h<+ ^YDcCHXxx}]@҆&Tepr\&p K-n;np0һM*yerA6ba8 ,OUz{t!⫲ w{*$R[y}e[U{'6ߘQ`VUܹYY ~ݙ߷n?·v3*F{0{1۟uˬ۷=_HYQYSʺfU%&xGRްXQt+Q;1gt%y.[|"@׀͑4D|?4 Z$|;ǖ0KG3[ۺi#.'q( /]{T{ٳ>pmX`"*z){[0*У?AFNM:}&$] I2*"U&!qib/*qniڔLc܄I|LG5>yll.G`(F1ᒏ0O¶ExA?&m]ꆗv bg^ 5 J7n?eO3MH`y+@n5eV t uOw(,DaBAUmmMݏw@2[\=5AŎ^щ$YDQEf&ڀKw/:yU7舩{G$fs9E-I D:mΛ[ߪDʹ9B)Q7%MaT;d xpQٴ@0.ciYM-s|/E;Bi2]WRq""j SW3l ԃVSˑt;'煡J3itxfqO$S 䭱Ӧ󂢆NOO|M E {mr;/==hq Veev]g;vgrVV5 $l5 pBWukYSԵD #An9.6c;9x+Y5wZETA S^/|x8^ۮHE\3rzCU.7k"L!L:\H>*P63ĻVdO!K &zH^uו`lW3Ank9pMGc’ AQyaszNk^"D4 69(oud1S[%&.4c(C o;M8P/idpUefÚwDd@jIª| }kWmLe5dTn m}4o=y)t ȶysj ?T;ƇE8 WnTɤ_akʽ* KMUR9TuIv:(*R1P#{YVp%҃AM|un^ iLpr\5H1Ԡɧ9T9X+S2>!R[5/ԟd*=}Nn'QT߬!;tgnJu`{0ٜYWWV~sX?v9Jdn>AX~Ю~o*$v ?Oeu}WGY\MQvcB~[{q~fr'04rp>]p?@ MS*>T".L;xL5GE<(%}㇇yR. ;LZ, 7\&FV6tP֙uawz,2.oiSUpgH?XB8/<<~ %qȵ)E?g3Q ,"ٍѨGBS蠴[DyCD9d RM~H9;jn Ǣseop_i:>drEHhG%@yM~![\]4DdCsªkȮ7b€{˩ +N ]5iS>Gzs@xT`v#.H"FTc `Nicq_@Wp,vN&Ó*/Qb[б\q&B-y+n6IiEPi($p!TI(~ ,O[*uDL`yJ$cvA=e~S}z5D7T@&.m?XF-}d*0q(CV7B0fNuMŹ>麍< u6Vl(UTnI .SwLb0.Jͱ>~+06a+B@ . Hʞ)N/j-Ȝ2m@ 09*! 2U's)¦T/:LrJotS3vu~o?-sn&䀦]Sl8JUǰd|o/#ym;%5ppA'iVMsuM5`zY2MaKAV; s.'̮' OHC_o$ =C1-icUiLsD?GD>WT%Ά!U }+j ϒ72GU|&ѶLn%~*z[ YojU%yfM q6-\;kh= F8]ΦgC$dM'ZA‰XRPWTEu{$XWrvG_en_{%B#eOeDvcJgB)f;,{3ێ}vc܂"ljv[=&834=˲g 6ϲݖPfV{Se]Y]M>p lpg`G<'2m`zǟgFO5lnj2&VȹpL(;B9&&2 5Z*ZȿIQJSf-tPq#k/eCM]?t|#ON^x/Ƞͮksp .1r8e@j-*#=U6V'8f=Td[TB5E4It'4@ԏ -cPs 웤S| jj8Lbʲe4#8qw[Uh8uUA+j,sH^eECpũ$(E*Hp!f"YS]H:S;*n.I9RTɾJH >r #hUdYɴ 4*!UpG2y sOUݜ;96]#\>;_PeFj8A]U>hfr=h"}‘ ͈;*o78v a7 0Dw@GP%Bz(.d7gNp@wV^W<[Ik[8R_4&o庤恋OT4Uߑ8R8[*X|WVꝦ \x|h*PD .ͷKvUlM4*>&Al;# w*8T`tUiāρ:JpHݗrU,s2%"55ǁ">V+b!A˚:N *>)TР(mr$J @p91wR|o7s$#*<8!TU}q+t\NZÚjFxv\ e^67Uu 0CD*Z’d#g%"Ze}niL"="^ Zߚu oӎ|[**$b9:#$AEuL\ImR Y8@W*@'*|;8˺<՘AW'l5ڌ<.3%y_ujE6EEr7k'#eDTvl]EJPA"nPq:T߳Քo~}JnȎn-)cc׷m1* }?0ȠIaf^lѷn>>ՕaeGf{s+vPke.;\-#be.0qos ~a(5Vw*#$I~0!gpJ?d]uwn &7(Z-|-W ߆@ <lZG.?Sf6]uMPnclexph\F[,ߢPvyMR6^ݵ9W_% jl.ldgܪE[ B.Ka^y}I膣)r9p÷Uvą%̌lbN0ߢw/L@*4DU"OCU'm=J>$yYkmh؋,B}In/ԎH6no91!~쀊wL H->9'by (kd8I[!; ̍Ԁ*T}p6ACRw Dj3䎫o>HqL$`=FQK@&zQU yDV'lL)fmoD:.>Jp\eJuNQ}-$g;{Vwq #H.7T@8*FO4_M".@^0ؿ FU1-sdDn=tyOw`8lhԢNX;a4 p u u@ȃSCUSKxmxvےvF6E1U*U68m {{C\lUTAw\$!Ox'O3P -MwLBa+B"Pc|\El$vMFw=56n3}. *utnEyQ\G2;}압r~쟿*!~앞R؅n)f>o~*,u1~{ v[Gʲ#{x7=*a~r mRB#^O߷c#s#oޝWhuWAlRTͯepKY$L"rLf䡑䤨{(2êMB-cu;r{gR7MhsFoẨe1(3s \6R-(l+6P7ʇ R^D&DH%CnjSy*##⻥~wDU>JˈKJv%MrPh_TE㪥 R n*Z P#<̶{ٍT ](m5C_\*0rg7HU8%>^81Wuű2oVN ~Y]׊ֲ4WJ6KD%"E>U C*yDuo|]CI>ڃUEA3¤w-ɹQPB@%I6 s. ]|psЀyDM7|UM0d,5q@u0 "DⓓFAښ#%N19ʽɽc]Eaxx@䧐‹C = 6D*p6ꄸ(*ܗb£XޅS0# òyKc*I@ut3,"3oU#Q%aW-mTګM~eSeqi2kdYhsH6kE-A eXv~kW;c]Uܟm*BQ4s+UV!D'T0ڑQtjo<"#J.\Y&[j]gje >|*UU(6SKl9jvťxd~iTuWnyx|9Y۪W+5bU۝uNP.vDU@gnHl1&*_sGDt*8;˼u#&pxYU g<3#~߇lXsJLc 6vӍ$`+XU-RCpL op覛ɍ9«Q.%q6͏dY]P3]6K S#OQ%.kC!ex6R_F9u~j/y$Zu}Vf:cP`J ~R T*:'`ese*s@Y¸F{&;$)W};b~ݿ~~n{mBe*W.T.l5{fVgciჄXy}`[쟽qޏvgB"aTDXOQ09Әʯ氏 D.NƩ³)1.=:"eSwMvmS2/!iDLcQO"fM\ 3檿%;-&NFGHۗ5H;^ˀQs`sgB͠*"q*D\w!ZT]<8 #'T-QQᵊā(2Yƨ~#P.<<ʜnN!)5K8RP/8u-T˗5/koaV|湡ܜNh:"'W;FhjlKTeq6CN.+)M#LpNS1KL3dLA^:"nwctN 6S` X9. .ewsG#~.3&xܮ'[lDdG6M6ijDGJx%KʖتZ.|j@j7srnJ7 dI8T(tT_UO5v)gJʊw;A@c%S|=FO!) ,HiUubd 4I 4U[-~K`uB7 Hv5n|T@Z[R:ze l=oŢY]zmnY164ogI(ʆu_슄ý-Q&Ւj=QfcOxݮ] fg2;GOZFMk|cZKwSuWKYUYD-U g6u+ {men쏹YaGeӲc-?vz?Љ+rݘ¤z؟\dgvӎ=~v}핟;n Sc*Oݏ3ݸcO.)Y0L 02fAߢsnr fK+ԛtV˼.q rUl[iA@rcњ ; 6Zw6Pv*ΰ@i&0nBqguHk9O[.jƒ 7LI!*â*O3yT> u@Ÿf\& RTFpTSHu!H)xh8P%!;T>wR\"~$4N<@?$8HYD,fWo+bcpˋdֻ\| Tۄm'>pc"ëHi*h P,k@(kN|T:zvP31 r<R|ͭ$awwvQ@'\Gs |c% aN?Iԟ n'iZ)5ȴ߿ErsItLpcy摜7a7i'i:PK)o>rƶG坐 *r]N  CɃT7#B@\gR~gAߚ9m8n ]wW3opڅwsP !'Uډ__\;EK x!q|Dn1yj!\FZ!;5&j:6vdye&& D{*lseq~yFllEs ٲcr9P/?6T\ 8"'u؈ hu}& {^*y.BC0k69<ZՀZ[`ؔ5 70YJ=1긟`xvE'6ytW$jg`dmlSD%?W"Pv7W{TIE\QU~˻h_ F[ QHTH6#Qx,_Zbte\v CܨX핏.}Of{#aY_}ܨ?z6䬥_ ݓ2ݶ AVdyudGܷlv*~唪&;d+DHcv_vʲ ؤg(}vOdv]_{[Oeuun$쮤TtUG@ψʈ=D*[:Dj-~jNDe hFQ GP\^IVVSGRERϒl@;DGE#axS# @td+;T IQ%bѕ2BJ-L_ϏisO'ݓ8\BM.[ OT+au -V  3[OnhܑcR0q9ʃU'IٸH50aS*Us +nj,zFwBteqXUd?sڍlnQJldM*:oݐn9P)&AC?%SJK,Y_'DQ&2CMZMl}6P9DzD6؇lpqCqd}nmncADüu^FؖXtwM6 eNn Y=Ic./'41hGCu\Ŷ e*'\gd4Uu\ph KnP/vC[iml+XX[BH.;.QSO}T[G`軺8*8!NGK.7t B2 CB0/袀xo6󧸌OPy7*X JDBniA6ǿ5E.o-s-~-elyѠx{8 ǰZ%$QkS` 3P3AH%(N_3Hpj Zz@?4: - tW7x Hw[Z7<$w`:IR2wpj eRؽ'kggcD|Eury(#X*~&U#~˜ߢf;/=ݕ%YcHӿed(nac?v]SjV`럻۬vc)mQuR^Qq_[ 쪦=/eEFiTI11vJDL6_HՔ/Pt۪ldG5,DhR*N8K[u}@RM8m%U{Sk#!b~KwTmlQquK7k ӎqmP-l L\nP`dVvQ ʨe S"XH 133+fȵP(+@P("5 ]EHgZv|զ `:#7^#ꪩ"S.|l!|ïeOQrScW5c׏k*fEF9{H< 6y0E7TUͮӽ ?4'4 öQc9TGz6$`.Jn MQ$U7XSP3;DjH`źp눼*O?EߪTZ:(m?"rU rltrP,mAmTY\ {HPsbeq;~$%ʥm)A3<\hp>&N d\-[Ly"(ߝRpH]MYM#Vi踉7iaSꃆa* >A0eTҪeeӤ٘)iDUW * `O#c7uayo Y!p(#$G&U4p8"*U3BGM=ˉȝן?$XLp:AlP^:]g<@'sYQfUǠ@O6M]\xr܋^I`ebUé(Q"b QusӺ=By! &M3$3Seq*)J!qR[iCBU%mLnuސaʏ]yio~$85$NBiit*kmټEArF UgYMQ M2:䦝;T8T‡ϢBw5:\癒&6{@/uݗ\4DN6) ucc8M[] G0)q)h'7f|b`u$F;_ /  E[j"A s`{ܲQH*jSMNݒҩ&a@^5Yl=mqf;$vBVʕpEo̙eOf{3#_~=WVgcuo%eBa<,vg@x"2;o'_۲ݲT~mP1dvd.{'{d^Ny+%Hii"r,si$cpl8I^ i1Cg9̿%OSLTSUʡo< MԚm̫sk SzGK[aʞf _[;]&t(7@P@9 ,O,0Y+7@ żٱ۝ ]UzOPX,.G5-l^6_A(-SnQ 䂠yӰ ;-)PY~j6vWQo"MnYf qf3&HEfiB'!]݆[;Nq,5x~ixwT~&|9C; n>,kLY ]!m0U1*.9p"۝e޶!I_@(.0';lm|aRɽUWxٜ(}@:y+%Ġ:6spn$u ye$5I-$K]FӕؕzL !q .;Cť6BFF!T3LUK1>H`I8UM2.TF[K{:N:ÈnPp⿹(s*4RRo5q9GWZrGG XHܮ 0 t1\LiR9xe*1Jgd\ Uhp4-GN-ۚ.( M =q!o8D5wv#9A dNzD#g $qmƃ*)@t^w Up9 Fۂ &u'~.[#3L~Ϛ, DwZ)t(s=SM#rWi"rXu {,2`eD076M `(JtÒZt"0X#uV'G=eV*M l 'AkEUFꇍ)1~-ُ).p=U@X“>̡Fw`ue):\0`7[l_{%Vn;-`Qq'=_ݷe \XvAr vAJem~*gaXlUTv[{s[۳=FF]\'qGU"T J  ATGA}7×EŔ͔&D7Jfײp71!p'̫\n'a&`{*UX]xUKTtPWE-@;++g!;د.k"qLСźY#uQkk#RǟaLHh0y)n9d |Jm4\/p0-ecp7\E,ةT4LρumFH8x*6q$%gQ5֓K]XxWMM 1eL? Py},3x?%L'GvT*hqu4T;lD7Bp@詤Jss'Fp/ It޹ذoYsk^{TeQwK(B;+6nPD[S&wxN7/ms>+ qH*u5b3:L|SK- q3 /U${itV|uZw:-2casND+O]bq>j^PCry{ksƍM'iSWvvL~R uVfr/'reor;!c;-¬Uj긗.suo0J;,>쟽XYL+Y{#ݘ˳*zr߲U'On{s5z+}vXv]~V  @pA['L荔Pls논=B4MO mdOg 5>HO8*IR@buDU Mg~ X>QX 1GAoprkxIFVHW7grH@9ۨQlJ/ B 4L%ܸW DFnU@'߿%ŹAI3kԐvCQĻo@ sUSUqm5EgyB* _uX1h@PɧatDފu]y9Qysk✗[D@ "͔:|5Uqb QT[$g?3&z$NAty*Q[gyaw߻ 8|\'^@̝y+7"%C}n<]qaRGgnJo`ru1>[gL8OA~rPd聤@2U(ʸ` [Yq4aWXŗ@S; p.T0P-&Zs*b6R۝(xaIkYWp"6V#ܢ 5YJ0SOH6D\a mx.E.q h*SCLS$U$~KdzU6A}!$*t(=G>Z>Hr;0o5-߸B6TCyUtOp v$6< o(P/QO rMaUQySUL}6 /#옮0yy7 r\|9 ~ȳwMo 9q]h6N3WHP[m1C]3+RWU3zn$we F ! $G[t'I#%L7P[jg/Ps e4㑕Dg%5<,sCi\PzK/sz~j:'„K';kl)d;T0܏)XYyGSlWx<8XG;YYP\NWvYuk$/ٕe2XvYgrgg>OdU~O{UM}ɕuc NmŸmpz;a[c#_L{vz*T#B`Ց TY]IQm?Odp5 vP;.>ES huKE&8mPZmRGYq6갎Nz.q44^89!ЋH1WvEZTL7D_ |t- 9*-(66UKP4 _RH9BŰG0UZ ?$XBL+]ހ^Et/d Q¥joCD|CO;UEܻ|JnvM?Xx =Z=eT'jJ-k6%TjDn9jU^~i˜ mDcAαCEu4혔X!~‹`*~ jK*8+*I!17Sj8٣a丛:!\\q6{@?<]fP"1.Px;{%wR'xNdRq@>%c;^UY&P 7y5I\fM$GTӫIq- ce/&$y7qd?Gx.|1pS4rGLDŽok^@0ycT[xQ&.Y`jx! O #c1KM^NDFVH-=/Q&]Xĩh,Ԥx`9Ķ0ꢐ}T/47 aQ`f>rFӓTW|,j^MW /;uvP AxyJ W+]]櫥_PVNEP ̮+N0i 0gpαTN‚LUU\u]ʇZyxdE2ӍکTUI 裖 Ћz!~ʣGLGF#u? &UE *c$.6y!-"uE&?g#E6pqhRz~7IA6ܤo%U7楢'%Ah@Ӝ˕ST@aq^6DDaN6@61i#|':8y桡M>Jɳ^< lK¯ 33VXCH1a6P]QAhN6AgnjA=#u63yfiܬPxdɪ֐<'c_H-*lm$AŲ2<$UV mVFYɭvʯ~jcfBʈc갱ٞvYc;qُ1"g9m3َ-'f?V;# e*>̦?T0Eno[)L95Lϙ CV{oYqrFEsWU.UUO!BE#ʃ@e%qX+}U *AR0JyBj~F QBK©UDrIn3TF"3*R\zݑyuESg\_!T,wQgEV3eWRph># /WDyxL`Ъ/]wKl9_t2CNG@@\P`Ϳ*KToq29 US ` L'7Nﺩ:5rL,>.pB5 AlL^w'pjp_ӹxN]D27+[\0J?n kQLY3%7AOIGDƚr2 ڏ}C o4tt4֗ ; gM{%p4X m [V`kөMϮɺm3RE^kϲ[Lpꆑ/va^OpmS6'kRjL\\ҁqo=U:h6W. ^ n%wzM;<2k`Dzֈ-uy }Tz?FIu;GC@@p]tFHk-vMVCtxbePH;e1nB17F:)"L+ wUI%~*OD^%O?ED^K%Ҡ8]ݲ}9O ꤁'nJL|HZ8djsV=}lU\d(NC D"UEAuD(MkYFj&*t/|*8E6JVSHTv"e'!b:ʊ@MD󐡶Xk%C>nB] MAF@*BD-?UwZoKf~( 7Bs #Qh=W )pk ?.kfnQ.n$:.q6QMȂ2640ƹש9w̃Kp(m* B,檙AFleqnۮ;?ֺʅ1e+8sC6pWh2)kw)tzpׇ`Psms+dPy(3Т*°68QLXlWU /1)|M=W҅@rW3(0e8$Ll/o*|Ng.UWr*U vJvXAX3[qhnXmuaB-1eS'xdc @R5sj}U5lw 53\Ni1G!(z?^8dH4-)}GG5Mra,;?5ſ#=Q?!*A8\hjLü$x4?ԠB4n9T'Ũl&<%c-b1ZQJ@j5(ZjT4$ٽUu8S- "i938S('+WQݟ ܋KyCWKP e'xK:NDBj^&ԠGSxP T;~ KL'kjÞn*2]"ASR;6["T>#:Bcs:~pyQ@h'UO*5LJ.2i u =Tbla_me{];)  s1px惈V^,]Eݒ!qz_ Ў(첾G[*ݶ ]cgYYeg9v[I' \/׳3*{== ~vgcuJnva_w >!Oܷܿa0H? ێokNu>C Lӷ e9PtD{T1pklnX+<ǒӪҼ~hJ@_Uәyd|p LJuHuUUm;"CuеpIWo삸FJ x@DiH}B-AUUa`g_ :*r!VOK q>m`[1jM"i.\(I![|*߈W67%KZmȱ䏭B#߮F%!>aYeA3yHO5l/i'uuߋ%{&0qhEAO!k:&+1`2 H93P|K[sʐkX3Cz%Kp{[QhiF0ݍ7BûwAwQW^MqAqhQ$~bDϝ@ic!ClʣqLEĬۙ^ꉂdUm8'j`!։?OluZH+ ¹3PH `|c}K9vS EBMOF>+c>T'ThsRTacO꠮s~̨dJ+vgaJdAqc8ٸ[XݟlanJ|XܩmeՒ%[]]7TL4OL6E~I/ rSI1;g*;IR?؍8uN9FDA"Y66AEwuy3&U=حlF/بv8M̯ ~j[q)ϴ4iq$p%_rT^[=T*AP/eOX'py*!(ܓ.Edk8N.'[-ϲTZ p ^Jxj LaX`}r%qd) AE4ZAn#heW*"Tň 沨;o A\ c]yK#<],6Ddriۻ(8m鮃ofYo(A@1B E# % <"DDeb'x[MVl u. *?% O$I*7͓}M"]$gpgrA2:½*\ؽ5®aq85'NOUC\G2"z苚qMq:n:fS3-« W*\0 q u"긷b>`摞XTk<ʗ!c7%ۜ5Swp)oPQh 9CQ]U2yI^/il+%ryJzrMүGCRle4qblUCG+_eKw9׳{7y#s ]7 nvF` cH[/ťAơEĺdGWu\FP \Uxw{5>(WTwʛJ?h[Q0y&L'|h:[ y6)ߒ]G3-滷x~$׽/Ub[tޡ A gn ۏS\.;ARZ7U̚UҋE򻺢(+Js Z3U2ō<\(0m̩N}O{&n<0۪Zr.U$F˜Ay{WU1e9^Mi:nm8~r5-U/ȩxg i-Ѻ?D'挈%!F&-P2\5ps踠w0 Y rp32]S{um?Y/plcly'K 6%t?$ CK=MstX#"Ks{!:ш]o_Px`?9TL?niSbƒaTӌs]0̩d~@cؾQqeiWyIq &j`%. n8^+nވ r@JRLsET:Pӆ=e/!ܹM86_nu rPH8@ؼ^~ݍấú=pe[c{P@s(;Vi;Ly+^ک>놋66+\.L 7uI]5.A"\"?pF|L6t['kʩ9H5F9(q.\r:)# fkH.5y_FfUA2Kdc;SFT]rB;z-. nVs2eӱG n cZگ&麚d4xK4;͹ Km&Kk6´uB"y&A‚Us-ТnB.6'DGccNm[q0Hr?ꟴp0S +$r*W4TL$Dm;\;d9M=C"GyH5o sN\OK >$nɟTCS'=}[UШҏx?E-I5āy 3IW&íi}ӞEd^ y,QܷPu+)ʊ}@@n+ {辸O:6SgeQP纩DHWt^{PapN>"&՜4YI{A'D5M[ Q*btK{W6GM-#sFmS ݕZA8*fܕmXYSPڰ~YV&hu~}{$\(QdX}VVXG%۟dv\+e )폻o=ۅc]YgYGdʷa%ƩƗ0-$g…nB;2UE&wQOaԛCq̟TC0=HiqxDٱ*O\-Z.#9Q7oF2`)cNfo wLOTS+zdLul)6Rg˚5^cBOS6\N#iR"e\[wghã wS>9T>BS>hjPt)ig%KhpWԠlT 1>kT2RA"TlD< p* *Bjpg覲93궁nmUU!;}g|cS6*b9h3̧j;Tq~:l,f XU(};-YMoU'>H蛷iEeO3TmwWn7oUbqu4t[?6"GecYH5!TCYcrAʒQy(o l!Vc薷x3Ҁ%T66%@7m*^.3F]%bW!R?⛥I ~ 3E.dӄ6y*j꩜P +*->)T9D"'g!8wGang<5>7 1h\9f:ߧlH$+:y ):fd7;ʇ0hUǕӧbDoF:"sH̩)!'ߢʁ.@h8R9PnMϞT}=Sx '% y; +"+}S.!K˜ *{E^\]i+Es֨z*Dh ďaX9^D"=fEDɑkt.8a+ CB#qc.; j.3?pH  ͽ-ipLqyfWU9U_  h#]Ns ѷl$1WZيEl8XˉJoQ{Fvf!;KUM@*3 '7RI6EED0.[pDUm4[SGXwvL6\ †0YPUEFȃ~DN5 _)ӞU5< s(jf.xm7N`^q3 %IlˀB{)s Q/Rm!9E@/S Ɠ%qt@FNk.aTycˆuJ4쪱MS,2 tU:D.$@6 KEfUٝb%EwVȷDCg);H7*fT4[hqbZם).(EeM>Ѭ3$j8*Z8CPt18(vmyj'$/#yLu0`i?T}V;8JPϚՇm}Xf.}+·dvd,.;>E,aaBVRݙR>#leX73*]R=bʢcm>kʁD<#hVl*=yuuVp͐ U8̼l#P:sq2=ȱ͘"'lMϢin-̮ q*7^/ IE|O{p @\Ep]VwTIyaD|V*M.v2yݧJUHw~gJ |GHV(BL-4 xt%RܖcIoc#3;#{Gz+OE (GU,0+up Ns$y(@7R\Nd 6,aXĞK2e#aH[\_TLE\@[7@U~C |"ۏ f( aTq TyM \n;L+ߤN  IR4w fH惛-t)lZAEk/CU4`6ǘDdIydNᑼ(ټ3D;(pxc^z]Ihi*CfMW|d2Ap*p_SU9AҎUD t@O8,?bQrSPXu"Htg-ϰc,8}S]KwJfSkg8^j"U 9N.s GJ67i2w,"vRx)Al#ֳ7pl+DM^>hj18:Pw;Kg51h[TZ $6H檏|fODEq YpG5I"tC&n\^j1M*^o;^HF  [ 321#eS܆c 1c$)"I7Bvs.WXI.*\&IϴOi;]IQ0d9_ XB].sWf)qEʊM|!¼$ߒ➃dEDNa4;]'(tX)qiP#UvE(HQUXS\60?m-eC]VG>HCosd#q*bw; 0GwuwEOA0sW%j1lJg)e5ōzP?y\'&W#e!A@;)? ;QIÄuZc0˄{s g {.U8TuFZId$ȸ-$u6[ ED`l( ^\}eZeLvTd\/sut l ɖB1$"Ӫ[3|KOU-]D7^4HQp8DccfǒgeM2NLj>U+(P@7 (J_꥜{ Un]N4b;bUOd !NJ/̣~egO%+=Qgg~We0~g=sY@pr?вa5-cź$|\4J P7/~vuY@ xWt19"D8T쀌,=D~Tv:a0uvIcwM$fu1 ~2E +H|?_y*EǒiT Ͳ#`un> ;/aߋ-0a8TC͗6OĈk3juYEAhP(;*uKI*01;{P~p1~VߚޡUx}99g.sjp /w$Jy fPo3 ꍧ W{Rne :H?ӎ .͹/7(AeSͿ5I?ٿ 90&F9-$y)f1RNx .DJDDoY@Sʱ6[>\1$pkO Z.XUOEDŰDEŤ8P.ݘD>{!kv}Ipd"mdjAoD;mGBJeRk45d!d<^M`03o|蓍컳a.p_ ǝmBp\nD@4*1'L˹Qؔtu5[c*\GGT]"s~Ewf˔ $cMyw 0 (@9,'5_u/iN1$ '3hun_4Jp(͔FUm(2,dL* T5&"տ##,ުaϢ:bFS{JK[E3ިD˂Z!ېDV~h~^~GLk|Yqq閒Ӝ-6y(cG/}PhesfT^$-3{h/6%q5c3oo%3ѶW4d-EB{[b-IG* C5Hop9THܦ)-Dt5+4HօUu %c>s+'1?Utj7ŭ.F)ӟ ˭t #\Z͊>"1CP*VP~-c HWQ3]k ܯP}"սTOdQ3Wqم?r{' jq((USG,aR}/mxi%ð+_a[eqi[ 79goE:y({qm\!(5ڄ8ݧeLʡ*`ӢMmקSTy/=#椨z"[NhRc9H[l}Q^CEA]u .e$b-gi[>Mf4غ ӾWt[M%= O%kXuſ ktiFo)KO.Kt٥ت<(FnFʆt/?88qlDwP۟+netVn.=#3Ġ*[K}PxR,rd=gXZ꣈@;dgʋ%VFH;虦ړ|pˢ15"mTi;)#0ulYVeq80Wn\DSjr_aP7MkKq3@5:HMZך \$۪@<4Sɀ*e8l\BAw@r&3u.nϪE'TĦSS{@P!u#DEsTt  8( j%L*n\ye?ʷa&Ď Up{. (!Vy+̣8㒷YX7Xr!:߄cٟ_~Ǖ m';fU_~`[#~߲M ېx '*LXbELO%3T_2ܢY\.ג)7 eA7WM5 5MC\$tYPPyć^`HɅCYSkp8y Ty6|(qncrP`[bŔ8"U6@Ѧ#<Й{($UTL t)ȄU䩝COOAG(@@zB쪤s%8Tqq7loub,WoAȴW7DaU h-zaSo-HbDsos6ET6=n;ʆ8nwx H7BINnd?!G#닗5QSoLVQwUQ͛u Su \WP T%9R@S~䢈^IµeXâHXKdrR$LKMrJO$:F#hM<7^sKDM?$CDE ^R^Eu]bInPS#7L;;ăCm?$im 4n=k=ץ61qTm>A:zQn q(Qp*#B Q!"eK,Jm(d楘xEb{n*>,|28 A#M\\^/RQ"b,,bMTtʣImuÃGQV<&t:ΰ#m;A\U`Ŕ'8탽8S.8=ӧpdW{zcuH(x-!Zd\ O"| B8R4j@8ߐ*x~fF @Oy!VcC=@. )&KR4ӕ8[4O+OeCteS\G\@7y3s b߹@O?~VK6Rq|4=O pHrE%G$@fH9PNi rvLʦnJ4 l,PT^J4ٷefqCeijY Bm_r~VY;&f쏢ºn~۷=?zV;s!]Od߲eHvhv[>RD+AϪ< `Rpʫ| q R^KN2\[m=ʈ!LWKqt!H`Mע=UۮI2mEh j#k{\Uo p$ŶE7Tz+ZvWGp|(j%A4dTcUdRmeTeV6C'߹WGM-#uTJ~ߒLLTϩ@q![e\!-qu*7+^5 ]Tm6L*]"UM*ZbLwdÍ@R2\Ph&"C+ӞIj~aE*5jKlzBܞJ^I]@8 %pgz(ے㔣-<%X* ATYp$]ZfP4|Z@[!ptP4⟪-th0XUb%z+4EKu`AuآinQ |*R'I족U`~_ETpGAc%uM#uݖZO-l̅Mأ/H[M=cjaKB2"7t;ةʣ7tߴ4DxrٕMĪK'6惚>%49 376F $>T@f)䃩 O4Mtɴ]؈[翪ةx-!@ .n4roguH NcIipBg3t]Ry]]wH!S[M.7v\-'D9xݓa8X@*uՂXf?Rond8 g*@i9ۢ:NyhLN5ZעljCGy)ѐ3̦-7T vT67@xBF Ӫ 6H/;)gOD"9R[;L!xG!!P@ٷd8 7.is|z縻rr @dl]<\Lªc컾^.)18-!?d54/F܌i(6$}ªe˚'NAY˒{"'. rY Jd<c7$]<䫍g4 pEWr\]KAA*|*2ۦC1=O\hS$NE9Yiߒs@ Dz~\ESH 5 xϪ%'x37zeO0cT8 LtCMpowir<Uc,*;'9l%f]cy2ioBT/ES]1iS%HPlw_6Ϫo%_(AtPrMP`tUToUw^eˆ.&9*ɬ y"3cQ*E&*V>JnèRJvBN1=IWjʷd#܎ :,v&l]R{,u=2eBʲ~{3."?5c~voK[jp`y( O'櫤CvU3T즥*'>a͗ mkq K.#eB.s[NW3#*L/\99 FmP3 N4g#S[{€P¦Ut9S9B}-? vB7ߺ!T/a;eXmrQd_:zb>Z tTY{Kr\sU(C UzWSREKG$ɺܕjfl\߯ nO5?L~hxKo &ɅSgCm(Q 7*e"q {jh ~ qR5G% MGUm[np#ꠏ2,lMJ**dH>>ߒRF 4'~j=xHj$ (n -. h LގxK;g7쥳*?5V`Aԥ1KK]1.7D&E-%>eo]ΆN$2x%/(eK% ZU! `whA 9J5Tݪt |_J-!M%58K%d )ưcn{6\JF9H͎(8Q>j b7Rx/P]J[&uUxBZH׉)kc*CQD@i ;V|eq{c#a?U mxBE",U4$>hp<^IχK5a1*ld)@$Ę%w=`$2R]J."i]( rAk{c 8j%PMmчM%R[ P^O3*!~-p Ui(j Iڛ]E %^u8試~jcbxnʽ-MOkEHԗmC5 eWD^MaD6lhnO)oUPȫtew,aBnnQM3Rrdt|MDv eIΤ|81Y1r>|rB]s 5ZKAi*lnjewt `\h–Pl:] iDA=N`ho)Cu{"B[(%VIRZટRb:*g{ Iu~,q$m&I.3'.sH8 x|@ݡPi€m*8Q7R!qEU#%4O_ 3w++/E%8㑐ET *mQt > /˶iʲ=9}X|?w+eD ݑꮸq¢H>>`&OeV?zݾ%ve}}WefV{c+pJl}'FfݘQ(i85e ye j\WԔ_|RBs-7WԟE%U08+en[EQKݗYgTxB-O-艑&s V?/ ,7WA@TT9` *q;2/ Z#k(gM`D%dPVC/GU;f*Ú"HS0k"o(6XV'~1`ux&ֿKq(pȺxM5& *3#bvuTÏ ~pd4;4Gh7U"F=vb-VU_rN[;BsFj;ʑnw :(o$EX6wv6FYp g]1;r^$l@R[MY LˆO_$i{jGx Wz(oi)Ya4vJ)\0w!z+(F5)4 --gK_T9u{ (F_M7AnIo%ysksȶ 8*m<4`T_4)s#oNt99+p(5Eꗿ'plePۢZu=(9vTS_{jJ?(Z'Qv0)&gL6RI7Xnq޹˳8Uo劺mk ݖdvJEQU tA;Cb#H:BGxp6Pu>Js(qZ>x*>*ũU7h tUW s6 *i@RH;T<. %S0<5d`e;Zl#|' '8 l?(l"F} ۶H@{MvK>^.쩞"bsW6닖T㟲M44[yx6Q@@CyvC9P8pIꉦɥmͻ(LtmMPU(jNӧFdlmY6a57$riG&3]8AIA++nEQ(;4lxPSfUś\ip`,:*[roTc9O<30*KF/j.vبld9/<=A.#MsS \xyhbOBmFL^VWE#`yKMGٴw {44ښ7ztt^.$(a ==ꚭ6CX4sEEUeKD aj&eB"m?%(Jw6Dm3 ̪DNbeT&"#8M5m90h9ES|eDiFѥ#y-A3'CLcu=xW$ Wvψڣu@N lˎzʢgkEцxm̂Fw+8|BȻD|2?R@j=&9ⷢp x 9[Kg0);Ht6*l`Vpgꪢz{4/mZ. Pˬm a69tB%T=` ꦭJ?@V@녰#g\nD[ %@ 9"#nqM#~e7*Ɖ$nAk=};.;c ' {oٞs+r'>[`ԛ+֓*VA,f{ f3=fxPw/~rV8Zk5`~k)F9J{UHl'۪Q+*D|׃)ЃN oTSV?0(:栔Ϛ%Y[*/C~kR~O^jLtUC!P񛨘AE]>n@+oM; UYRx`P o#$:EU 6ڟ}WϚ6Wյ䪀D|/'e%VGvUKO,+zn{rEDyIܩGiԂ1ā9O$@toPm6)sewť<=q9洖\$IStM8 摺8jn:"/rY mtH6[:! 2CP{1eQmA%xhU&'*UP (ԟճдL]LCX1ɽ<_"B443 ¦}!19j9*g$4&A'|ZuA&A:DtᲚwܪk,^xe ;sRd" *CMm̩$7X>']eA#?AqgAꎠ\Hkf ̕&@ea|>\u2J9T WI=4#s5Io nWVbpq߻)S1_9YFzU5M_<)Qlne|sMea>HCoeD%UOAj#x*Nj5gy(بVU ͲT"\&qeKwS{u\-E"H!W.\ Mv2!s(1ẰdH,u[`c D&GK52rl8;*IQyfÙ?Ecb.i +`ыUqT:s0\m n$Rg=Vnap0"l&㢧M tA4$N™2s'o" 4L8J`lK  ^Gx4\@EKB8L EF6(鱶oꝪxED.۟(@\='I?Q}C:f7U@0ہ{7ĵc JDMPwm٢~59Ip͓ImuѿaF|cqHĠ8#m*%"/lIʦH!;dÒ@Lr%݋>/ZEuFҁ"'kH@)ij!q8z/6耴LN|H/f)9("~+!tQ[DKMɼ©f=Tn`:57 4`8 "޿T,?SK^:4^$ȴnNg~jZZ*' }Vu/\,phu )h򐉑ʉ~ڎ䯥 -zlG  MqPM|9nPsJ-YͲHlajkI[k$a/`Օ`|3EdNx7J ƼzSN~P6xY\J V@ǻSh|[rGԷcA%#u[e$Tqo DFh&l 6~RgL[U?p9 fr ERafVf&y+|\ʰF\\# @#8W1(je\RmRԴQ]WaQp#V8d#"$GUxUHP#TxKj7'prUt h2%Xţ+ryGde*+r\3谱eʿd)`k"d~}aЬ-^e rr ]ʱCMځ g}ɟYmF]ݙd4\a ;s(j9`:2L}gD<Јr|H*ޡDMJc=zA$# @!a VĴڡ"}W~CۣIU )Dx$lgZ{CU5p9."2 +3VLC 1vDwH"12纋ʩ \GeXHpD]]$!~jtMMBn:*XYUd K|]OȔ\EY@!@B-(=9brU3r0UD8"OPsTZ)x*"m.n3zd"V?>+P2z!NapNGUna-} nW~apTG^K9ԛT0%o(ݶ︲2p]$0g+!8~}&y.<@S~wPtg @UAsȩ6HdD¬.oo,c3DJ9G2T8 lU-l; 7>QssČ]ȸp[{"e ؛ך6RgeS a߲3+f4 !IJkk&d4 (EB@Qpoi̎J&9Ŧn39.~vQa tNquTʤc l:Q0)1T Q Pve~my뼇U ċ !Shƣd 37͈8W9¥vnQtuBؽ,4pAڠ -2>wT8_7UeP3%a+kMyIa8 7V9Qi|B}h Ͱq@:/R'(7n!Hlt;FfEE׸ϡ\N3"N ]wP*| q%QLSl(&9\7 Җۆ?Q+$,-qtKI'<ӛjuk~HЍ*u,Ů$|NnۅLDGK /z478 1yn}U*@U\>h?麠 o8_,wENqHFyzNp}+dYP47{Ag `o19D5t)8j9h>);VDnE5 8PNGpv lؼ;]3|̔O5Fbܗ^HM0:.[)-ɿ_1'uÏ5gg6TU,N.7䢪|TT1+9HB{xEp=7A3TEA‘Y8#mC1&! =m.wbA[m>R%j%w3le3Q)>j:] ߅w}*gyf$ē`7U+3G_L(sOm" I`_*?E~iaOtXữ=ۉlؑ1eGm.>v;3nvS׳=>_uH.mʃDvBg!D{f<%;Q4"nDn1mБJ/ \1(lK(4^I.*ҿ'{(Y_'aQ*JD M61DQVʧ_Wk`*5LꩁnQ< 6v?6ԫoǐAv%x75Py B ;榌lB.ԓc1ť ]mՅ\{x"^XBPv쩭^{ UI6JHF ddcHϪu aXpY؀_d gx@ĕ64F7SWQ"9{Uݽ[ek\QL>ӏub0ZhA*t]V6*tUϚix%zE?O׃0w@snT+3覨y#cBͶ 0o*$c~q2AŽ-3!~H?ʄCyNc(Kda\N˰[U`Y`0<.1'ź-<+ -T:—H#% ^)+E[T7u[[l6-(?/t]M[!CP6/ݢ;SI-(x Z#Q xD3pjċe1XHW.$6j46Rf/i** " cNlwyaTcFtS2UM>FsGOP-i.oꯧy"tuwWEVےa G/>)8%!΁2eI/N4=k4&@/5w 30N{ WȋJ{wi<5袥ck ܝ\Lj\0@q͹Ruwr0 ( G<)sg{fD Zv_3O$[\N 1I nnkLPlUUY ZO5:{3uO8w?M\q7+9@]{sz:] 1a=I eEח6g|]TFB#n$Xlp:#¦ᵈ8UMǬ)o㷙)ɵǾK{ǚ6Uz v%LGUg͗-)pl赕.\[RxMWaB.NBt9FC[Bvh =PTar"T Mis-RD~NOv# WT _X@#Ԭq tߪgk 0^蹬:,D7TsXPf聲°d<@Zܔ@ѾJ BaS 2FSȒ)9꠸AuʷܫR8g6^ aU$T b7T. UQiV6jsXC',kTTK9gnOD֖HˍРH+e4;Nw3cthQ~qP'9|% 8M.ݪ/TN9B>svq":9b7:0QwsN©0v2 oɪ +ƪ-v!1y(Tmp:Z!S)p+s64[EQp6!6 }dmT&lt FUusA-&Rvxj~%|y*%qR~׷akX,.ou[䫲|oU'T?Vw_F8Rk$-~ T|ӨeY: wj^#~UTTn0$Zq*)Ўӿ$Ȃpۄ]9`j% a;f9B.%Hߖ۪KCJ)26%@KmEkm5._qȹCguw8vʉ1;9A9&(htfpgXLdF6R`U፤KwFI]Cpn,Msf65 q;|@MnI]1SUCHPʌIF7_Ņ=V(^2qCLEWydAZJ'/Շ&*9\LȦN †L!N7+L_ ZI*wʍ&;:ʿ.i2>+>"ќm{#o Yeߪ[(@Sφ<9%@^- ^OTՄ;+̸D Fc_N=UG=, {†GТtdۢ$+* sT}O4[MuU<6U%~zL)5Jʊ.pTE6ReѤwevʍ'+g)w5-|[ vݮ"'}l˲Tʺ:An̩-$xInɕ?rs{_e!OP+~Td(SJ$VTL\^iy\3ʬ0m6Sy>yYU"M2,A+7Xx("ZN2vY;U=.:w3%CUa΅#~hD Zb<كUa7!%wz'!+? -PDZq!$AP]nATӾJtRL+Kׅ;rDJ99!MG=λsbxl*UDLBؠ$ Kj$rFA ϒdn) ZV|BkGTDMd(")՞lyd"O2M+qv l3}e&'nSUAT {6n XLc fRE.V%Rʎ-gBC1;#VvXewqPWZUInp\/{j83UZċ).fo zȔ䛴r+EPsmyE rK">?(w<-.sT?N?hϰpw2,99"\:]5>&(3QK(GMԌ̕"=Q<9+k\&aHg "ঽ`/ı :̪@* qB-y.'>TSr ۪| $IMIp$CQ JW|оj2"4[0kmi vl7QM@UݐzE ѹ 6RǸp)ܻr Ao҅Z@pn 9 mBk_Ms6Z s 0o2~i`&ζffq;;'<Ж¿l\ ӄ)((VR: 0A0gthVqߢ&r1Np_{9H!'߸SQ[?4dAP}LIm/.awMHi&*Tok*yI\nB 54,ʎ.rrOVj(p2G2Z@>+ =;+JDɞo9 ;Tldz(cˢ.A;/O|18 KoM3D ͂=ANi(73Vz, Ow`Zɾ-5ԛx puN.vKQeWU o ̈́UyErdr<5d$4{&ך@q]7\_WAvY9L_(Ӆ$vHUnjrPՖ<V #lCUvl@ {q}gXR첕Wd-vI앍Q=S~*w">ݲh7W6?Br*>Hs#FܗV(%I Jrio.'AQ0>I ٢@ApW|6.r%1*}'iǢ(1YʸG[+F,|p@-79GQ`q6RmkxE ~YWyvFlvV JF@?5 )*Pd4瓰.+nȉB'9-W$r1{}xNO59kM#(w*E` sMTb05 m^|m*9+Anєuc6M~p U0Clnx \LP8b R\8\&D6⓿UaV`G$؏U#I`o9(yeͫs]I&*$UQX$"ʪQaXJGNd NATۚwy\HԙTEDe󒠋Gks8\ZC:WxRpA^!mzh? p1* lm&qA])}rv*[i ?~sB[`m*{D2.]n)$lL "I@?QI}a7 זUNyvbUOʘ{aM]sf`2"VKuA{}$v݊v#C~=H4tĨԐ$^65ŀ3WFSFB3<17+D/tO+O$j^v'.<('TwAU./]pv'&U' /Z p8Z*H4,e~A@\9 -/u?Nb/uuJQ?y@A rU~sEhñ=p<oT]ۚ:8{J<;U302|\9Sl**gRaeDű**W B#EqB|(j*5#Jd$QflC0FABu7` q^AOu\=)GU.}M&&ܑ+23m,c3ud9Ҥ3eH/%.07R\p5 $71dI=ZW@lZM Ŕxۚ›Ke:9>oU{A/5ǑLiU;Z Co]{;莋p^O2[k@¨ v䋤Lޠw͇A D)c}ߺc9W0$yTcŏk_|z%ٓtMTQЙSr Tpo@+kC@ Ѕ,ED"tTDTS| ajdpy&5KAQPpa;Wt~5o%\'IsOYܡ[}y]Oo(Lߚc;#K*[Ow-üVŕ4GL#2d5<"|FĦ]{P4MW=F‡¥X&Cm |$Nw&ֹ\ 3#e&];(jWͮ7P3R0rBT8wF?\mq~T{p_>3GPFOeNh)ز~ urmbU-N~J*Uv\V?M}2&E vPͷMpM3a?P«= W`wB> dNF3P| sQ1tqNPTH7n򿒤26R[eJ gͅ+!X$nŕ4.}TT`=/>SI夂8mb ې rʒ@_>J{ov[vמ˨n>= e\zvov{#aeFLO 59d(xA8f#%!깫ś U0Թǜ)nJ;Qm{mwQI9T3xndrXO.\Z2TEweqDNU.n_ao.$D#|A$sW~jN(sKO.|7*)r~ bdaD79eg'6SZS76Q`e\(? #4TlٜI5pa)Na[SnxE+㒨^$dޓ;os9DER#aAS 'k!蠓rymhŕ-Rֺ[T31|[O~5'R6BFd[yʉɕMDwp;D䃜 rR\8~pi-HRگe]mt&\7Uzγ`G‘GOOTÿ_7T1Rq29IvinފGܕr_l"c;vP]b* _i5@a!+c<. X_;.![pD#Tf5! ;+E\#PH'.a](c;$MW\f!)8 |UB0 T>kӴCLSLMnZʥ"[~pqrPuwUz‘S^[ؚf R櫤\@Ǫ+XM o;QaXiEf !6lW|{M_-(:v7\:osDq_ܦ4IJ\>e9UST?R ETou=,i2wAwn# ~1JĦG=DLPxGrV s>֙UL׿25kAҩqn䎳VLo8q1Ȁ8¢0iSI9RZc u(7OHȪ5LZnUdC,ⷚ&qdQa A~bߢ< ́2] طҩu: pwpUZO6F/}1qwZo%IJv.򻳤 yB(<$n@GU:;HX4baL6X.!qSxF fhjj;奄xoptl&["3 I304u(B-c΃5EDu e_Tʢ>h nS4D!6C1xL:V{UTÅtU;ebH ;x̶ʢ?R(#eTj-'ЏX~\).RţA0yz*x³p3Jx: $kպe\`2Z7ME=4jV'URck _^>Z6Mx \wu\"y(5|!=1(:`:)wlt~hD_"tǪ6ReR=-jNTDIn2Lp"aq9Uٙ! -HD/ ˪$3OO$q 7PtL'ug{ ;p 8xt' 8E#u:D5u =C_mΠ7(koUt|!@ߔanLrUt(n =@Nsk2wS"R*UǸ#;"Dm8G~YyNߕ,骟r'>$TT=\ 95Fk1ws K!X9 ȃT9oTJ7Yd6\LHT6ӋʍA 2ZQ&dʱLĢFg߾ lyu!Vƞ4N}/7S"?26L;߸\nńnmmP\$e|ROp8؃nGu1V˚3+ p17W(Ǫ7EH:6>tN\N䨝h1#9%X1>sjC L @ʡq33Hm!S1T+l?2ܑedDIS5o%YӵulO˲NG@SUsٟ Pф MU-tyqiVgXW;f~*;$Aº;v?r{20o# R Mo?T`QlNawnTjt~ͬx]6GldMot t 8櫦ŗylc V4}e@شS.6;cߒ5TsU];wJA-d]TaOI%v5Pt.;;8Qےѥ6,q]xQ$Zeꃅ؎jKNș˚fUǚ< 9ցOR[UT~J)n[K < 꾑l#V@'Jep:)v{a:?-047Np):(&D/+O4UDbU*/QUKCKHTp;H'Wqs*ldrkU.>vR>.hZ-jsGN!˜Dߢkm?2}p-(w"7 M8ἝʖFp:OqQCf8@08wb=^=dx}S@:2<d(6MD^:.qh uUcK7D1yۖro8 oy(1&D:NX'k @8qJIښaftZ*j}xעQ-MNO؏poLw-N9 [,K'J cEDY EU@VHi˛B"cuSI=gt;[ eip؁Ͱ4mk(-&1*'XM!KnH±Cٛ8n]/˳y ׉Hv . ũF7Wrd㒩fl:.fS4?ldTR :ٵQ]Qj nz%B\;L"[bB%aU89S{s :_2IwaU 'y`| qcEm߻)l,~4h`NnP\X)7wA6Fx i鑰 !Är™ Qᅑ4<Ԃ* C|!5 tTuENy# 3'(su5KaD@%)V9Tdy(=za\W5lxWLqk/\w}p{[ynC{a >U.4>Ћ4,~eC'90w^#M% d +cfߙzYHF4lj؁rP 2%=o§Ty]rhkKf,,=wQLbvTfWw2@sbeT{#nj̠/BexIu/+mMW U0rj>J>tx~SU9٨* )DO =ϚwDT~TLےu=MhFDnˡP1YW#a c%%c8$ wIl.Rʳ->(ߪ6"X*=@V&$Xbvp9 J$y5`M=^s4^츏uc8VU܆ TNAAQ}1|$Pg`i2 _渄Y:* nTA#'+U78TM-n4KrQ \B}PLZU.|-71@c;$7Ƽ/p?%Dѧ7eQUexc*d (pU42QcH䦯pبɅT`#")p$MӇwⴖFZK-0T0nTI!!nQ D4c c /O7Q'5ˢ, w -y;UQĢ3bߛw"oª} L$p=ՍB}U5jo\_n\xmRE*@(5$o$O%V Z%^>h3W# RF89c1׏&;*44B * M[͐py@@DaKDŽZWI<i'>}PnA^aH[GVX1R>Hsӫ{SYRښ~+->Ou=IʾM]ǠN eN6PFf@ߚ:nA{p| /IECQA<#䋃u"cp 1@𐀰 q.6o(B9|hɛ}00'^OAT^fE6_qI6U+_q;OITH$5uDqlߙ(ps 'Sך-a{eM_q)3"4 *@Gn uV(SK9Qn_1*R!SRU NyBi*>F2ZӜ\"Kb{^֘oinct(fOILߙ?TDR U~qI䃶@&wVmP nV赦:!%N<&T iEڌ `./U$+t+&gnJtʳf𜨏egH]z Py/QT~ aw0 دF4Y`\Ah~J"GT5\.ӃUhEa/%\w˟UT?&IKc(i~Ѫd̕H-tu4$nfy'w#ֺ9 Â,\K*H=Umnʧ@1̪Zg[X[fS4hp0Īr@T،/D̪A3Ts 0ARaʻp6^E(jCOꦣ;S$RDA:|#t[k&DǢ" \q />Hn%uM]#YL#CYQ^TM2xu~ܔX^E/w̩o^ؼ0?txj§&mR܉<3xwaNц1#H"H gVCMJcg}w6\-)ͽ`d\#5«~,dLu%TbE9h|8_Ȥn͑$G 9摎cB }S%I3uKjmD!"T;/NFQhj$d'Gѥԝ̀t\3&5N2p0?St4EV@ioVu\>-E" TBu/Ph苚ZzF|Y6;кUN'>Qluxg ,T YKbdl>.~k8B;EAUg (k k'I7aQ ;[iD2/(*1l!P {"/hU T&!XU -ط~-v6`%K`PිT? :osd^ewm7&lx䠛̨+-!C3z|>jf!NtCEgtEV7VpB7.H9WMQcr7Ą֑=繂`B,H"SN]H.T:@ Ъ&Ĩ>wGQR(AΦa",P0F礅-1k!]P+Iꦾ\38w\12w{ Ůin:GUAx=<T9D9b]]7*ZF+/ ;\↜+z;ݸR[lrIš{G%Infg0d+uubsD0?du첿iv=Ev캑!R9֛>Uz! -I*dlIſ2,{Ey+78T\:QSH%ǔ^ȃɤ<:[6+ Ī  I䡬EGiETM#@U.AE൤FmPT]ܨ%Oe;})=Q.s=WS?z gDQ`φu@~ OUO]Um96ߪ #5_ʞ&džO%ؖ; 6fr%AEmJRZI(T$!@1dCE ʁ! 6s(@7FcŊ-:/`58 6}U hS|n Nj/GEs)y~dn*n9v<¨i g 7c @eCm.w@Q J@:Ac>=&5] @X6:+zAWTbDAEUXS-0Zn' I#x}1z z/ʞhܪpp4y(f.w/%&0$jaT^*-< 6iUrDbQ$Ci@Ϫ5roҋ?[3x4臁l_\RGPN<@0*$F&DliÕGSMeBpm`ӓq6Tq >j [J)WٸUO-!wOp#5utEC 7ܢp&YaVФ3Ո@qNUܕ?|]wdX")\d~-">Uf!T?/ oHNwCCqRj*EYID؊yݹ/2xp [/h@˒t> jQNyeFj4 Ut\˜!>gU-rSمh `eCs5I'9S?Unl)N_r{p'?zf7UB&IwU UKbW+/CE|SQS֩) }Q|`O5xPz,@wM)1꿪FTnc8H;ȴ VoHS }[l1Ij~H9#7DN 3'X¡b=P$짘d,ѰGq9 "T=рM_̷uwے0x+#1 e}g܂Lj{|7 a`uT.Hȏ+_4x5!ZE 4쁙%؜>[]>7@p^Tj 9pD? z*?5/lToPZ1y@6SFWKH7\9Dp=!GST2rAiV1s[ _|s(FRj~$j6#4y!"'_憥UU(6#tL9+b6Q5,YKr{m2#w@)?Dp䌰,E%903cl]wed,Q`تoxhwN-w f8@NoG%U$Z 8 svUa™.w"Ƚڳ9T yP6TS<ʯ=kſEF}.T-;z*nL(hE5qxTW<MĀ{0PϰpH?R[>5Z|!R6*EOj1&G錪A]LOD*}BfngT ǚa?1e6To{{O? s-3 .(< b࿒:0`aw-JyN`_]e8"L*8Dw-t\9sP7P8R-(ij@TeK<^F^ T"Qqiubq1-l De<.3l`<Ԉ;|#AW#+A&Ux "UcQ~i 5^벒](l¶6B%YLA yS5ZZi ȷMcyPDWG_`!M?e *NlhO6 WG,?䝫Qol*1{"mu%f[61u1( \wEᲁ~R8(ٕrIzOsN*i%..[vB*e A2U.4Ā]BGe/o i莑M& #R"a>ZB+gӾw غNSx‚1a;lU\_i(36u#X7!#ewG^:*Պ=Q9O SppU¸@Q]elnUo152m*ʰp(HKp -}TqJ1*"Jxjwn倩Xԗ|I~]rTФ#5&lUMpW=²(9uQ"1v\/qb<SIE]If1=g>sQil1IA{E=ڡwn1?lQ<,`EuwETF (K^ 8I _\:(%ѹM>y(S^[:sĬbl$ɁdCs xT e:i֙ʋČ:$ sKu>L).pbײ#U4uWw8 #P S@(Nn]8qgW Tt*;6俯Rl9t+54#[m'T)&K)~jcK83ΰk5yvF56,ӵTEOWP}B3@EMZܸSJJ=,š曋Š[S` dk; . Zvs`1wl)D]gCTSFȆD󌪤LM:5[rh[Jaq%9Q.t |[Cl35kʓ膙g!I囪or55.]&`9U273t+B[J=t ~|!\atr(uaa/'!1AQaq ?! 3LZz^E \$Ɍÿ}!1f6lߋ' M8Nq̈́'3{c4r򝰛 ޾ V$x6)8{pD2n=>2'/Ϝh_Y.v085TtȒJxoG9E ڲ*8ڼy4{z"ny}&:B(! Oo/atĄJv;&K>rښl{aunXwpd"\Kbn1k%IGs/B]q?}*ud96I=q^'\`6M\1A8w& :oC5I'|N9>qɈ;1Msm`g }@5l[FXlp!4Z!Bo L0ިGc#{7ϜО(-7PԚ<*1ltOFt+%Tx]P}bH5mb$q=0ӏ n<鮦^eO ^ӽUuH#ӆ5KS+傉P3j?^R,=[^oƒOGd2C5×#y~¸tk,+NHt)"^̘(;{RƐ 2;|=L u$z-xpd{'bx* _'ځ尓^z`Y*.Z\UG)%1r0Jyb%^=L^ޮ42m<5 !P}3T$XxbZ}87 =Gz Di?2 |R&M+_z {YBH?8)NN`0vW8x"NǵVZ`'9`*Ӯ*`6NCޭbr)$񇱘o|4$g뇾8X[Ue,zSI DXdbR$xʲ+ hF22f"w0>Y&s; Z.MT!&^d0GR4YH_)I7߳$[1;^^چ020?_.T 4d΍0SC}$ )k[!(ۀ.(_[qٝ^*"BZ7 ?xLu9VDX#NΕB(Nt[`yh#]kv[k׶=s@Yv8F?5J]+|F PŃ3OKBj &%}/NG)&z}2éXLۺm $g#Nd$4U{:D!`kBzuG3Ku58fQnYl]~R.mM޸ǎdkzc&U.]@g\B@<4⇘EN@(٘?gDx_ь{eP^?N22, -{oP:-퀧N$532 Zȡi`5,!Jt=3V=nK"Wd a>Vm"> Wo*xB}x䰐P}c7":`H1GoxFٺGO&&$rAqFSkPƞ"x1$u9T#ds"H?e` f <#$۽@tzG8"[M8\2rC@Kс!.#[aj7.p& $ăO$]dx!~-K[-oQ^.(Ց@GFjkOJŋ ݤOLl= q$aDBlYksg!d#z8Irm.3d[o!GpN Y6#GϿ ] Y "d',椼?`EoJj_8O#I酁 (pMaON' sŲUSN: `E1,Ax[%d/`Tr}lև_, ɞPU\[ԌBzL*(TWw}2 & ?ZDP{|rUE=?MkPr MGnܙ$cdXHL5:st˧GǽbvbWNM?\MbydJ ˨:wjٵ1A~ry}~L~dϧ1S&$Gnߏs’yx\xtø>3b\n򨙁 H)I6-^O"7{e&Ov`@(sͰ !U?9`^AUt@̮ǙqLrK5+HggQZBB~y4${zۙtș}-NW&>.(L*DAQTh'f0?wAS"FNm ]- ;)0R8=VDj![ ;p|2YБbȉ] :ſ3&%Ԍqo`?yR!\}0G\dp+Ì_s)H lN;{r6'O&I) H2;Pud("8Y SץAlLQ0^ wLda9Y ǖA`2HB.pYAFSeGܢؠx=;D&Ԝ"ءzx D~l%gsT+U2>"z`iE#w1ũ~12=b@I7nj KuLO`hy/j˂9F*&$,:>FCI0(UƵbIsd)ajOx߾#۸7Hwצ2 5[2)#I%7l-J?܂{㞬x'"A'\@MVf- -+, Wi{.]Y RrdEǠR!xDsf_əcCĀ!/BEl ɧ8U\o(b (fD§p.8$F A`qN8M ԏ/RF6N+K"g'\@vXMI&'S0ET1kcU"8#\cü:abT*?NU3&% N&c!k˭-v'hJAPXUV5#}Ɠ!e:4~ug9cɄtk׽P!mSJs e l<)&"z=?9t1r)7|"_'QpBW3㌊Ӣd%|Dbm2hV}훔h0LSWU"Et톑@GZ-oxビ M:Tz'q)2X&>끶toKϴWu-AxXp4ƛz,ѫ~EJ_l"Ja"bәp~p%= 5g^T) *1~4yȃK^`O\B"^ykX%(\CT׶ exY/]d1u󂛠+Rb,(Uv_*:'ˤy0%@8Dn+3\wDl"x`KBniz7U4loO~JM%GTfzP 8cN+G= $ӄqXvo@*XwUOl $nQ 9s9D4d&glg۴dpN+~ر$ 5=Ln s.Nnb( 19 m3I nȎmjo\l! if㷌b m.9V\\ yʞfH \7sk$ A!l}|ȆZ8J̺xFk@HQmII||sE:b湆)s$s#NLCz޹/ z{z-{ނԾygrj& .B$BGIqș"db0<BƠMqA";~# pQ=W9+J}ii"9";"JYbBT^DdLy!іp:e*[ *-!Z&*Iz "73.r$̎&Ȼ(8/Znj\!9 j.Lӏ{''W[d;H;w tʤO=jɪ퀗+?=pv}3ABH;D+j_ÈK[c:lT2}3Wq ri7oJS-5"7%)O_g@ NfxkN:r6z;z('d={cÛ5~ؐWʚEdsTӗ9 󊭁t22x}ʘ<'15ȪLPR)0Rzղ7 S׶ n6}bī篷2aNEs&͜wÚˤO<_#6WU]h[G:Հ"Iw`mH Zc ɒs6KbYֻ"# 7QՏft{xLs~$Gف(A7 %ޢ98q8JkSlxUYM 酐h򚮽1&rqck,TC`DhWTWmk4ᖊs<?Q*6 9@j'SlE{awI5c|'KdMTİ#_yr384;F4 .Qz$Ia ZfO?=&w}2& tLꉅ]tCe,(NKɥ#: =7("Ѿ>2Re2b[1A]L Ӯe k&!c +4K׵XN9 mOY񜁒䆨;VnB($5)+i_O0#㞮&Nh5BG=uSAIG1{׳Vb1sVSsCM}u~dw$-C\"Jtk~?Fz~C' l4q~!6hJoD7q1S󒗍sǕbTghIF>o ~*2j]ƨ\O7rr*!;&r->Plݰ}r[ ۓ_D/B71K"|nj$,;/pCi3q >2DɮȀd W/*M 78*xF+0?7T55وR-yt _Yуh* mk $(6_t4{~9\81_ 摙;DsJSeh 4g,]l+5{EON5Fɚ񓀔ꉎCR@<ܝ3]CcRKoz`nm̑@`;Fy#ìn"e= L{?*%i(OyS70 tAy"`w8DBş$ _W&ξ"b%\euDW?6$5|XBKEzF]_MRI}:P8#n :5 :w2 5oːS %4e9oӌ4L;$+pU6kU'k\`ܶ?8 D##'*U@>2d7B Y'"흡@t~}r @TIwJ/xHuj@\i "Qn:gGgF=`k$ B]]C)k뇌 u4kʒ%qMC}Q)nxii*  *cHsAuxFD4r9 ؄é}% mF%esos `/= ML$#%aT1(;; ;j%}vhHnJv,,*h[OLXdh~\Ê=To|ߛThtN4u Eiqc1*_y )W*"JFY&Z$YwX<~`5|0& y*!.Hh(Qםp"IlM$9hX{{dC}FUFۘbT#$L _!}@ܮuܽ,2nu6@mF2Ȱj(hBOsuǡiӿ p his IC?{aLeޡ(HSǩrML]@oF ']%`R["Gny ^@i-'>cڮq$mÀNt%3"B#TyebDOR;5ϴ{r`CN(׾Xk:uK8zrdxȑ@y^ IL堽/ל0ܵwX;}s#+a67О ) \Bg,EIm6Y:a ]5z*VJJkZJ{镀zN7DZ@l |gȿ|C@=_|dɊЊoo +APL|rIkG0H1]-]ۉz;.J~T@L=N WTfy#614L/קR-x`&ɌI u1*;wĊeZ4z G:}: n*^AƚĐ:SE J*k)<{&Trcqex\M>Yo'-MBܙox:4䲅l^Gi,Bq,wpsɱ'xnQ cze #6^[!DPnO>߻+2ŋ"Ȅ]wb-uƪ٘CɉON2'B ˤAd}΢t^ӒBRSSQr;&vl ; *^mW=Vs>!O(X-5qlR,;}xL&J.{<Ӱ̸ $oXǰm A,=2+¬[O&`l(KR񨿵gQ1(LGgL@CMi|yG[^ !pa pѧFy:ߋԱ$׶)jb5;넃$1D1@f9!z'T*^qSպ_+`xPn:R/ WףfZG_`D7 =m f[NZD YxٖU$EqC~ \k/L IxTD%|e,q*G,A*V}QCGB2<%s *z +u`A*W?{^;E!TZ?xs(ޜeyIzU|HZzDtZ1ç吒UeLbF ^Dz1(!sN8;," " Z]7uL쟽qR&yS['LR1ϥ󍡤-MI%KL2/^f-Ǥጉ PFHj˨9Q>iyKz1@\^!:MtX.?^P~rEH3| FA NϵcqyYNVDo].&I3{ U4_qA 0!(eP{gL'qh]> VH]7[ZKM|o.M msQz%@'#CSh;OE:tlVm\HX^{uƀ` +O1L%,׎f5Sx07 !,Z}2TD-kzɘaqlxT~ɤ:񊀨.ZHXOǏ@$a|{}邛T6 d\ q{M??^@u_r*y_YJȂ(PB$?N."yKDOO||ğ&+<]X) u9K5Q u  4D)W&^&p gڧ`k~燙gbgV $֧)Huޘ|b5[";G|O 뼼Ts2*@~0Tqc616|Wti,bn3`dClƺX?4cT}pRR*DuyAr[)B$Bc㧭O=Y/:~KQn8{^&Q"ܙr8c:/IIu%O@zRu:߯Ne)MÞ:6ߏ´OOo\'#hS9!~;Qio*NbHWYdYBH=1 `1ؖI>dK Ls)EL=K'cY 2VYKviߨGW"bp$MUʂ_EY2SMV\R])]CG{OQ][߷ZfkUlN](MueIw>z$`"UA>t뀲VU&Ka5Q7s 3C6TkaxZ ˦a:ku菕ˇ!?Cb_H%X.낋lFm8i?~RiSF, 0n+qڼ xHLj/0'0b:R %}F9 &)1DZ\>AAbP&t6y5-<{8F4ׯA8K!-20DEdiC3]2A @}F4}יw4D6^8,Ӡy~TToi^KQa(PuՑ*O$u'+ I9t`$w$us@X `P{9{RI}ZG<4ˈqקKq+av/[w7gqC Ǧëǜ!&b-zQ2!}ߣty)'IuPq}7H҈|`Ck^צ!L :"O= J߮Y@cRP+oъƦ?N0 ٻ1<2lD$ې wpI! DL`=Zű:Cl;1&#n{$rJ%&bw: bo{m3D &LH'  &ھ1$f9řsh,; %r5!y>;)XDJteKn8JyWϜa^@i!lMLN,\QwpEI;`RX]I8.rb0(Wsu.MNS>q>zA5,=`i{Xf9KlNH}]j9jQvǩ88,';8$"1I m yM`;EEZklU6I==e%#zx3p4:/GBtO".:'ÀKֻmR xE`ye$Ty?Y92IWiP3JHk] 2qzL2zsi`l8$ 5KAt^ לJEuqo"ZW4 = ШGE8A`^{s[9== `$*,L-$j?-"L$;HU_903q7뒃)"9 ^b{{d_Jߙ7(Ҟ!t ofQq2^>q׌C‰JZ] \l.q:JH"bBY M,@s Pp:HLǛx$(0~plvtzzxŊMbWnIo| Uf_q2P#E!zyPB]=$$+λwm&#$s}}qAb,AxHܺt9}r^{4=P*0\LC8Sh ٩CBx5d.F/0<Mjavrʥr]3M6Mw=2Fx5̈+t#@HuTSN@HQm;k,c\hEc]Nk@LaI|dL ^#xr4Y}ۼ2DIv4 ͽ*!Nc&^4%gb=|V۞)MhBhҵ 0A,%oỌ9IyȀd2= gCƽ91D)%uunUo P4`u DaN8}}LK6i{Ñ_Á IauzuUeo5ΠM\=D4xs9g9J5 6!,ư`($'%Nz1tI &8MH,<̂(oRBd .NJ\K\l-TU] t/O 7p +ӬdϺeRHN0 8mߜ E]r$ާ؏7w`6dhAe@["w*R7)b^%?Aٵr[q3{g*ףg$t=wfd]_] D KT톉E G}BҲ"9q;9!. #|`z V] )mk%FDƪ:Ux%]/R~0'EuB=}Rw%,Aˇ dz}ӄ;2U|'_Q툁9tnǥ=|a) X D@5g1o7({j2WboްG 5|dD[!$5 q)Bk/n(A*> L/V߮p@l)g$32 ܖ5κd:Hgؤl0=n,q9t}p*V`zlv=ƼsjTa57״9v{Ne('LI>p[׃ HPU""#VЍ+ ߤM\"Qm5d-yڸxDGR)\ }r5ܶovkNᢾNrVNߜ0jwyƷhX(OxQ @v=.1Bat|w%{k{e S59Y"@,M1PE[]p l8ݜɮ_i\#dDd󩬙r=D=u nWFhvnܐcui(GLꊶzr]b%[/@N{wCco ڝ_/ w;zbF]/'ybO,v~፡-gʈVsYb{8!eb]:ʽFץLR7#qK>3Ւ竊PV:\{ʢe{A3E B<~g"@% #0ȿ=i|2! NL($J֊YKJM|Dvm/$zyA.brp OBEZFLbBH.YJ1"7נED3PwFM= tO$ykN$Q/| ]WN.'G'!qD,uqR6+6 񫌔mٸGoA1&oxPv0lXDg (.}ym6 ntc@bdt:FE0qNE%%¸&ݙ5UIH19({Rkק8!'H~p#ڮYA )OДodے0Jtַ=_5WrJ|;nZ$/Mg?jc>c#!&7Zf8nA^77٧]L/! rd#iS>JE wX=Xɂa?.B$݊w2yLO2v$p AS'#Zxw9D_*2Ց4t=J.)3WK,(k "KA8ĐZl7ޓHHq6 18s((em?yqkum\qDLĈkr$H͵ۜtR@n=܈Cc TϦ- !2B?6ΎFGHK*=&  q/#$3\bd;Y؀Q&Pu?F8.'w_8qW2O"4-t$kozn)%Dv&]a$sy뉀 ғw>I'F F G`Hs!8&C0MU^}}g͉ܣ}0`?)IDoD1Q&_MaBY ;?Љ9ֺNQ>>ꢑGL%=NN=L$}IrhNr?Bz0XORdMLsوyY9'aj6V7d(uw]$6@ht{bT{e{-]zfk<n^~3H۷ΤlCc}zˊ@ޣe{{d `lxw} L3cҷĂOwDk >xC/]3QX|p- Ow8Bܽ\{9(RO$4RN N qDLp$+,zB6>;;28hTB =;L0a~Vzްԛ&xMKN>* H@H O43yS&zx0 'ZUR[B<<ï":G-Dtx?RG7.=GGo=gWd4P4=qa+ .rs,בL9ֱ)H.<?Ą{m 8Aٟp$_?@ok8)uvmt =xΓJE`0ҀyI` È ]OKC'ˉm!iTB}Xsݹ9k޸.$g z`z!9闓x|4~wy|')F~i ~d]$I\#T\6X!Lxb~-S|bM0AҷcF% g|dQzXĢ~2d^Y!9x(*RxDېxևɟʀ[9Q wd^g,=S $4= ooca-"Q' B8ce+S@9LqrLNnDv-K17 +!_Wu5{vW} n>qK hKV-Ւ# I{R3):ò&yah|'$h(z9Co"1zabyvL[@^1 6k$&ɣ'~:E;dlQ0v\HQ1q2]IqU~rHhZ~݉e0n7uV(Qؽ25]˘ɪ%?xICSiDA.*o-9N&jHwr9@ֽ[Ib~~)n%l<5c^tMĝy" 1ߌ%pf7>R& T'MD _Z@|=X4z2xk& h,] SrY1JgA|`[y aD<=^ȏIܢh+2u[xbg׾LE@i -?4aMu#>.1_}9B tӓZFZF]O7dniiIa۶M)Q צlXj"Gh_Elf= IN꫟9H6厝qNVh󬲃C'5Ͼ5oeɣzPcfkB4#AADWk]֋?8š-}0r-E6"Y@xdkRKY"ӶoC9 /3%݅/I~IPrP?c!)(yBw![Y?^j=>|b:Lt'.e* )[5q)HJ \RОV6'`Gá"'bsr# Q&jUV숿MYL jNwȢ9sd 4bz8 D4A[):.d@dX=HP'z`9{iˬ C;햖Sp$p,㟵;\x @ XM:HE|:Aph/mR-@؋Y2Z Nqyߎjևso@u=* gL%^_ S xm1:R*MVIc#0`wQɎKIc 0ne-u(ׯA, " )竜?Qu!Q>cGr5)bԼ\Ft"5%'&=(Rk^IRdَp2*.oeeI^?22NYs1ah"SQwȔP}0`qq.QHCW{׮\WI^_9fp4=/Gxt oBJ=ME ؜#] 0y|^$zQrP<\8t Ђ0;""z.K7GnL 71sZRҼ_G"dE1판Xv\ !F5F)ƯC*9?9(ïHЫo_T͔ocsK29V: `0wn0I”w#u)W2P 57Dt9;xA=fY75__ |y'& Ih-Xc$?^~PAA ˥d#=ߤ J.y5RgB9 ?F25oɊXfQy!P}ф,a8"Fə|y[ 4$W#n~1vJ|}N0lO\k W6/ɣ2\S,>^ r Pw ۩X硁]xCs 2iK |xRbۀ_26P@MK m7zY@-;y*0 քvl/sʳg$ Ma5 αtQdngSPR\C6Z,POcV$S!EV57hL $TI_\i0ze[RSo+VzxdU'cW}d5}xq pC |c’h֓08k$71됽YjBa͸RZP6 F_wPa G>ؚ-*']7E ӭ𾋰} bR\S24}?܋ʇz_HEM\wy 'yfHD׍ǵun ZięY~2K$˧s (_w -6Z 5zĔA1_xrmp@oWK[0&yKޤrN9969Ed:lN25/s$Ere(mp3?2CaO:d),-cdo B5(7s]$ΰ[Q{ĸ."J4KڣH#r2=& czdfS&ٗ`v@u1 0[xXW 02N2;x󄢍@ay71\ x|19_s^b(ǐD,WY Z$50OGrSA??cXv"JTI]w Jr@=p-8 `Ej9}7YFU 9T]&1-Hi=t̘Ku8JTc66&uY*o9 &\/__l EQEܚIP\(MqHDu*εN$!lX? 5p~2#7% Wpbƙ6sAgˈm ôS߮@D0 $iҞ[>{tVMϾ0eNoLGC1iV2dՈ:.%=!} :钌ӹfk|YBRy4MƢF+BbࡓI0~7n֗9d_7G%q=<($x oVӶA^ N.$޽8"p-Ҽn铧=# Āf<{zo%KRU\2X+j]39$'~I1& /Mu`,X~{ S6 ]w)Y,]7|Qk;h&{|[ޝjt6;zNGoGN3pe5x=1Jg3!*~?̝\>7RJN*P@6mspL^O;C1 O#6}=+U+‡4ChF5"V={L[K8ּv$J;)^"{ڪ}cXbrWe:M f[1B@ǎ3Y4`%n[kmzrbJj}ÓB"u܅u2o4b7oy@Ppy Ӫq#A&&"tN"4%gqa!EuЊ|k( Lζ.#=)p:$20Co-=pčQw'$i}, fʼa4R ;h5\|IX,jJdgfS[!^0!;9 IDXZq$^~+tikg>dBt_C!g3uXgD'oȈp07?Ol(1g|d#ta9ڷr D$X dįU$Z6}dY8;;L $~GG V@}b@n-;;Wir(x"zw©6:Fkqy4gdK]Y*A ?)uKd;1:Z)[)HAp›YdrS ^&@^ޏ?RD 9lwe-:]~ l]2vI$-kwŷ9"qcC4IsC84 >AT:5hnE$ѐǐ0ny@."ZZ# f瞿Lx&Cb]WJt  rI&0k 1T)pFkXNAo2x,":)ƧzO|d@7 $;N2u@ʠ(?]2d'K5q %+v!^Nbц O2 "eI{d9XSXH+G4udZEFks*:d ߞؐPJu~DVʂGA?6,DMpO$h7nȌF9 \xR.kn \:9β `k}i}}0T _^Eԣ0(r$Mɽz1҆#\c>Bbdr*QvdCKI䄱"wnkŽ+kRL8urJXb"&(0ҵ؃p Www慧 {Nu~ྭnjY(kYBgcjg-W@ѫ סS$)*&b8?uo!=qrP=<(&$Hҿ8VעT].V'8I _Nm[GuU}/+g!/Ԝ]%ू@k)LM#Hp4C&F>鐡#pA yN"Ī7hcEXD5[u,BT`LudČbqkW4D6Nf"䉡r9WmU-zk@ !],!w!NJAX.nѵt e2 DLMD8$b){bt\SR)]MX!*H]#&LR؎:ri %$b#" 0OE"  ^jܰ ﷟t3f\"09D7l ϴ\JƦu8pX˜L;Ĺ爵tIJJa:,ܾg^ ;w- ;[ߜ!^zs񎬄~i)ґ=[\djAAIԚiUx@t6,$-w{..spn) X[ґzU׿ {W2cns٩i[@~dg Fr9\&%h7rrV n#*IgD\j Vs׏x t+k5;n<0/OηM$7Ϝd>~[Ckq22mȅtoX&X]T:n!ѱCLJػ Z x}|a$ґ yv}|d/Y&>ppPo!5"}8* 8 &'`s t1腾֣[ꐄ"Ug*ȉ(%G5gyF%rEܗ*,;]cLCIQgJZ ( }(w>HYeLtؘ5V?Xt}$!9%[k8l: jA]I zp5 ϷB`0.f<{a0)I_x% >ztoGJ=Ihz O=\Lu{,tI"NSW'\5}H!*g.;~͉ |˜Eeԃxp7]N4G -w % =V/z`˅iSU 5At$z$ Z45~A,Ab&:bY(M&D,Z0={Y"up2&Bkz.JN'YHd R_)gbBĝzFEiPˢeZ%OwPd 6O"n&%َ̐$\{aIɩJ%@AS!=&3{p3>rnċU֮Ʀ,"cmN1T%$實 4m0:َe*y {o^\TxHv29Il7Жf"\$ҕ dCLI:+cx*W;Esr L)~b"+$ $W'Kӌ0I,.~XFP)(n'@D$!Cs;@_L!oG{ӛ̽smos4[+oao+A\op5*|̚UT inê#D B&DxF>@% ˎކ%j]8&(H1Wh<D6rkgi9(?* /Zl׏\BqɅ{;IyLcYN됥<:eߦ4N郣a 2LQRQ2~xUr +Smm|9ubM_$J _і6Pl:0^BE2.^$L7ی[ t1mm_i xM$J#C'}%e10h{a,zԵ)^Bj}Ābu)m˧_%HnHr$)('{!YZ#1фM\ioR)vLp1U6KL]i.%?[gs#1RLoi^w&x~2kf:sg %"::::E17#$o c&P% &!!1QrS'IZm,NEKQk9 z1r2O39.xڔ۫yě{\uxj*"޽Ye ux'  H~~!"s:+gP2JB oJwC<4\_ *@-9swQ!Sz4Ni>Mi!1B: TW$dWC|~*l?bցc霉ncu9!| C]zBO-z4e,3'hU Ÿ*'wUCQ+ͺ፯~»w?$X "}4loSRas/Cm S7lbxBh  RMjcju ïHF^z>āU!$7Q@ "3[ǜW44G2+ w=GL2J `w7h:\z2 O!Ûٿhצ@`1 y7 du*>yi D'=iz' c6~P]4'!xg`q/YyaNH|yLrP>H]H!ncHck}ʐ[t< lc3Iէyzbu9Db>UdpA.iKƷϧSucON$< U:~́D|Jt}%|"_! )1Lo92A~Rh7շHFڒO_c l޴ O: =J ԤN _(L-=](Ɛ Ehy&.\* XWc6ѣ?$G#M6;;w$PX{_Nb1I})1%r0- S+v2 ﹬7:raK`t/dǵwEtѽIۮJ=;xv,J,C{#[q7'PSҹ+wkњ)\\F% C:byWu.rxn2Ϗ `0sz:H1%m}!}:YJenp-0YL((`Ie:01YQף?kDpətpHDɨ,A_FRh2MrCVx1#&KY \o'HMwv:mV??udRu*)Yb&*;H$NN뾸# f %!Pz~2ٽr*YJDH\vi~gE%gLk{| :VN# k`JX~pR ^OϤK "M'#H=vu1z\6rnreMҤ;kJLtPJ!!1howjH74U #j4q:r#z\!S\{{ ƢN~g1*dvj7Yݢ|nO(M1 >n&6"% Z cpDHQl!EԺ IG YXEF D*.ۜa tH!=w9 aEOMoxSv#/B|M>9qh"U$e70n%**7UGgP/Id^%uY|Ǐh V^2Ma@'N'E2k0)όm <}Jon zM),z?!=c_ o96PYӧ gSw"!:~N tƳy6s]OeB-<´l^#MPk};A GBFLD /cr]!Rdjg.5gSӮAV Jr/F?g$dR0ܾzJLE+qXpqyU>=>r&BmT:nĬϦ L*dyŠ.ei$%!+I&KF8|jk}AD.yT(hӯ_rTMY6Q |'u+mO{yt⊚)=ɉɪ!W7` \WO&D'ª00er?9!r҅5ǒ`-mLo+$aԬqȦM./F'v}늂j t[ĴWfDxH*G)H%]xnNqt;hy 52vMRLOrT& sXe#d`Z6ok A}7mFcz4 4bJ-61vTő9A>C%/tz3tMa;:>1j 3]Hza- Gr (~QX4O=~+lç^3zH}2ح3‰'I߯9.n "G$U4:C*e@^ۏr 8]Ba:: 'ID^™ڎϴWk_lj|u=e= i4Q:tuc~r)*F @{d BLr5U6sTIi؊jE(o51J@8 y~@͵kU~8鋱hפ}L8B|5|t9@7z`[}p& ,7ϯwYq%kb ʫxgOLN]߹$ud Wa WA{<~rT06*&i+bd.ʍ"ލ+Dyb7> ɰRiKSU4X4պ)oW! O!ɥLq\{f: ZD,!f~%R-.U@u|0/"ceִ{|OoϮBX ԻƭD0ZS<2 .:kyMRoq;@E|6^ AҿsbaK>Dc2?>4:+9r#&kq q֏8׎qK9oujT$#qDw>0 8:K>3Tl?ԙô>~4eɇ:N+rye]`R"qD,k@}V$y.TA"yTTtJ|]·jM4G:Spˑ0:C|}<$s*.Սl[UF_ 7!m(#s&׋]ps2Wދ,NuDF"H+]@+J;wsa ~b:(^qA%59Ǯ%պyd IQ㡔WUa.I Lt!Gn'J )j^P;r`D.y0A%ԻqV+喰 i{'W'f0Sp1!@v<Ӑ.F=Y=U:;qq(,UGfRWRί@I Q!d2e>#򶖎45uƈΉLaXb|uy >LZW)3%Yu秜;{o2 WˁF;>MJ:T=}3Kldb/`=~Az8[B ֿHEl0r+B?gf~ )h>]&+ӳ˙DǏeՐvZ#5f# $} 9(Q1&fI.bhFXSR&/*W'5i׃:*t५q^jFݜt"`m:.OF"<٨dH- rl)[>za*<}YO1(B"[I76v*mΧ!Sj&4j[D~"e1\"5=LSR:_krg!ab'.ǧ`)\wŔWA,@~1yUں0C՘R}5.{GIRˆ珓>&w=m( 2_xst_O1NO HZf-Ɏx.'qIijȘPlq@d_/F4;ƱB4yi,|&=2h|!43a$ѳ\~g!3u| q`'`e]#gIu'hj_;%C)LvH&V$QC}.8GQT-|V TIzKbn"6^9Uk(t=.7".{2n9L -Qvإ~2+lKG~%$>C r޳i}1rƾ|tN&b^`8oxlUe7;zg6)!Oq#d:9z)C0*΁mc(Fy d:urb3w:1&~CĒzD}^_ L_u6>pQaLnqg 7kOIdMNH[]<^ˌ e n;l񂁂_ Mk:5)/'#g 'bv"p!+(#צGURؾ Jfғηt"^}ɈN&pBBLO|VK!yt+e8x8^Z1 |dd:'\d\6JzF@pWP7< 9VlY?ܑR8u+{$?~O]1i,[Qf:iSRݬ㌁66|#ǤbiHֱȗ7-?w)6LQew?l@ԍRǶ$"U}dM3#.8N40ж@ ch'!"MzZ*1DD?3 t,A#EgN|0fWnr^4 d}<>ԨtEqbZD?#-+_(}[KAd>.*^c^bV<&X2svۯ]LG_yTlx}AL`|d/#yAn3ħZ@ҚӒJDG>Dl6,P"&ZQ3v:D)m: &\w^D:@a Dk1+N?|F'G 鍜no._eR ;x 0e# Cٜ2v LkORkFl&, $$3H'=2hdׄ7L  Nc;R= F x0LFf}4 G luB(ؔ0sԒ#dK{|*.+%0LK -gH&h(Vn9 6De=w5D]u/6sh엷:΂`(i,&Y@.EM'BG`uSmR\Q2SML&=~&6!bPLL!B.!8#&6ccd 7\&O\I@Z2OgLi8ThiR6Ь s˳BX5￱򤼧D:7&1$>$`= E%0}U2nk|q_9xwп#"5g U^]v\d, HFv./(XB131*1(_fY{ b+@YQ6ԡ .1 U|fOu½ ᾳdo4IW9T!lCQ﫺qX\~1'h"l:ukvQpv\n%(6$YALMgCU= -c+u&v{Aqz>ڞ~%Pr8u!gN$bGn7I8V'ZC&@(!Lt(! hpdm O}{cRJFKDO,nD~>vPY_GK% G3U.*aY|0M!:ҼiwHqlxэ\rNL+m&M ԯE uSߌoLJ&tϮ!F믜`wOl%6hp8mEHǮvkqF,o=0&T(omx6=Fи-O?@K''_Lk[4nZEA9 ^O>ǥۻ=>pOAXE{-߰hu)VqQx`<|*$IYqU7:$._=q(RSH]G3SMqsd&V=X{bL*z{0"rsr2A(WaG͈}{b2鉽 1iӇ찟0U7JI&#(4fDyu6yD2 d\٠17HO,I5mdzj,X:و_jRm"1S!Y1g/ -%N.Cw\`8bIgOzF(! 6-o0 hf)*>( 9 *e O䮎.Fy}&c_ /xLt.1;@OlPt_cMՎpi|)Q ׫Ҟ'lB퓲F)ma=1z>jC ǭd28’!A9]KEX%6OnrhbZǂMc͝^R{ө®']HFCiSu)LyXyb 4 nw{j0C7E 3)_ӌ!h/b.0l9~', ّu)^[q 9'{UP!Nq[VS.酀FTy г)ʬJ(9?1,շ&{ WƵHHzEiW^jX}p1S.^pú$ Ls*?bR}J@_ND2 ssxCJp{NJF%uSׄ\􁘽b$^Mœ 턊@^4cY:4ҽ@:d):ό2p]%]|8f?7u :隝쪉l&hFۤ]Թ66Nk4-w"ob^^FJ!MLLgs|Tb.ƭ,z<Ϧt|arX7$?=.X1M׷ã AF MPƣ|C2I 51ݺbH(P%/:R T3{bߧ`TW~+, w7wB 9WrD' -ٱ;ߌ"DU7 N+il*}i'2BWWR=?c"D!{aH}_]IV4&`g\k xa߄[\@'u2RB}I;d}j.@miPz_DF멙t~6f[@g[tA?>.ʝRF';Cj?;ͺɂ' |o #n> rZAMS @`;`8 lt3C@P)ʱ$&oy9ܺk|>.C#vdwݖ C16Úb-;O/1a(GNAZ LTįj|vc`fut=,a}/5hL~K-@Π ZY|"bL>]Sӝd,G8rKm~O\Gi F{}Ǣ޲OBh =20TdⰁNkWM%9eYS~8&ֵ^^J@~$ 6-kJ1txz'Ҿ'; D[؝"'OiHzqx2/Zdӷ,?3f^c2èX.0p?jsCS`31$1J$\X/HV߿b.;zDEz]?D+50 ߶>0$||de?lU>^Z7)dKkLG ?NT iBpvgY^؀HkzjpCJfC .MG_4"x(@$RB9x33 $<2 KB @eVuLؾ1Oӈ [Hvz]}0Q[IfKwx{o>"19v;>پ0*noPg*c+pzd6U~I_c@iS/#b$X.}5d<~`(H{JLS3Ƿ9 K p. qn'QzO&RD"lC׉z1HzI}`1-# !Ӧh#=튕r2998L&(;>HlUpgUDR+> GwTI'K l.aqqU&i|]+*<P"ĩ`iD^{ASb,1}ZYO2˴J#g;-PH?5/>1H2{}bw:$~ƤHvk 6X 5i8"#.D'Q$FB(I1=q[2Izgt(/QF{L>˰F,R>(M+g̈́)'[GÅlW77>8)@W*9uL K֣: =0;_Aߤx=;AW*:_L uW\30[o钅ʮ" QᐦyNKjTe ב8 MN:DGW|!/XIEID"%|q@{NK:0lJe3ᗿ/\H v"d./ GQ^ OpZ)>0nT :5ǻ"`R%޾ ONg;邨D48ݭ-$:3E:b hߋ~S<뵼GH?#GoتO…wA)dS?;6ي珜%&5s tc4u|rD2aπK獀p1O k|itƔ63/"0؇ηNE|}eW&e-pO,aɌ7ǎujğg9F@jOǧl]LReuJ"Ǚԧ) ZK/w+q!J]?5E11H"$^- kWRIPx\u„$pqǾFϨMc[#_Sڣ[mQ7O$ɞIKv9)AX 2d385 xr1O-sl!c4J~k‰ VhN "B&,:0뒝Tu&Ƚo*OkQD{+fw5 4J(zsdh5Eړ^/4C\.?Uɶɩ( Ⱥ1Ŏh~O? 0hR!GBYUL*yɓd//L@qoT(Q 8B9U94ԴVm(~%RJp@u]&f@|څ~h09dਡXN~F_ hWW:0'㾣/ZG |A}=6#ąnPf5ܙUTP,;wh%ZIGOnjFLVFcMx K${J pL|.ؙ#Yu0fMDxN+h9sNP -A|Kzop35]gft|eDH3^r{ra.0.}vaD@^ 6WPףǦ*Tg[馿G6WUV* ˧GTD_^!#3,YEp!?2B7LK=S6Et$r2:~ö'| utSxTJ@}n~=tr0<~g: cן@ϒO/vE$]?vpPfi$sfQ&C¥ٟ0"Cijkl;_g7inyAc]*₆Sz]^!%L2 u|RX@Ca SkFnu- ǡ@k}$Ѷku s_aٿ3bA%q.@wrv]GĊ>Bqy}D[NrzNSuaN鬋rJw1H7k0]X?@J5"hESZ͓|. HVm$ 5;<뉮\L'1}gnĒ  r<'F B˪@Z%=C͔C-=rIfY/?UZ@6i_"0чC S4/kQU4zyΑi|$ ϳp'HJ^I|s^7"{d+:Q[raۼEaIv%i!$O z+-;~rr̭=NY #X6aaj47_M$HhW;0qq! isTwO4Y}q5 & \Z Wz1$6]M~0d.dN%Q$I)={ v{^KuXPo#Y(aAM+„ ߜHNnx¨:߷X2`Ci ˟ U%q%3XL, #gDdX7L{xB$b etQs1!?9JIoǨMN57*ä댄~ X~9%]A~YK_T#b>rHB6բA=̡ O>1ҩqɄYY4쑹ЪdI m1>G T_H!õrE8x7} cr|tA(CK7;K3dVbGQmq/WbW_F, Շ: C>Gɼ{_𣬤_XvY|;O^/(h ;眫jKz\됣p|1S@{⦀ (g# `^6l ViXCznm#7@gL1=ETS[Nx#b@8[ }]4Qv5 `~^޲KBYxK.>PX\Dkڅ\^4f:CœVJĝ,, 6tx.S(O8_i 4_%|p㑠[om*,k)=a]`l/O8G!ED]ES|v LX)i Q_(8LA󆐂Sn0;I=kMx8Ɂh3&}q_)u:͛|1H.0A]'1C2 R/N@sF# ҙ՗D#\HbA)"3,G7\1l%|oype$̄D2?lڵy8M,SG`Fs[AIs' ?_-±לr/BLw0Es^J j'CjqG 2R%>ϘA]s3a2bKIP`#j2$ lG0S?NءB| qs8B.>-TGצ$*.+'1N]\7H@c|k&َA;o#MR&2bk+7y)IN E;H"u5P{ Wd [` yqoND s}ym%Rzx%1Ah0$}Ox5,M4C$[T=xɡ[J$DAQ+C[RoJI%c6mBTnu9a#Ih׾j=;V^x",9d@H="4",΂#`n-N!b%PaϪC">qn ̔aL;tuĤdnYޣ;?]TwtJ_À0Y"I'1hm]^=DCJv^xk;2lzaHR т׎ ;פ-tzd2oqH.w˯-9g4[=| x^ bc1SCSd2y1=0PBJ1AI6mdnFQi;a󙳗ë팂c]f'$-}gQsSgwrIJxurCyZ_\{%0ZAR4=|'DUNTI&NVj`9$z1~ɳFf+A'?vN=cGf}6!L1(a=2A__yb]]k D(])r Q?d4zY&0*&Le,^v]K\=fI;9ZEbc)(Ӯ""M~(t.%!|t(bWE~}2 8׍` H 䬖A)"@#!a!K^#}$i%crXaG&_4=uG|}| $1E)3ĝ}1 /Ʉ ְA@gLGXI`:q*.fd KhSTWoV/v&{?08 8Gh%n3tD1 Ӣ4 JJOIxѕ:iAPgG2/Dcr,tcq-8w -YQe'X{Atk#62bhwqZi"؝ P;y&dMu^6&w헡I0b cpܨQߌYPfFn&KDuV0$Craeؖ}"MⰒeF$쐍wu؄= k<ǿ.x8c9 NM, Sprַ}{yU9@¹2C.Ƞ*U1@ȀAG튖P oыŸ.O M@1ׇh8 r~3hSO!8!$^QsSd42~pR9˭,Νfh/|Eqګ|c&zV%QiKKaQ26;qr|0@n"˿NnD.ԟud-WMdgA=+ܧXo0T\VU) PNV} ~1DḾBK'}Nzrڋ`HI.\lu"D&lg?X&4wȢtA٦y&H*x&F'( WA'=?Lfmq4Q_8"އJdUt_\V3wu5zIih;ϲq!-\Gں8#R˸"X! z Js>:wss*&hɗճi[Ŀ֙& y5e4v:wsQ o; 5 ځJN0DQauDwNrz 7I.߶_ ˟5!u3Yy_+Dy߶Ll$<_AmD!xBHE]N+J`;R.c&3U&SAPkg@RɁ <.31L~TM| DMQ֙v?ܠԸz4JH xZjzD]#dʷ5G.S&w}p*j(Ruj`$# F{P)ψ +/7{eBZOZ0i^q~ku c(/~oz.IKYqx8?xB~O|E9wcۦ$y|qޒQ1#L9phRL~r& k cEBI  -EXT%7yMh8Z G#]<2e1M<s+7]ޘ%MkӉ"vDp!G]o5y_Dv$bvzǿ9 ́8tJԱD$-mnj*&G"g8#NN%&Aqd $: |`%+I"-ClVdC}rsqQ5O;HwcpZؾ}a4 jvE^^6j+P ZE7stCs:fe:^oinᮾq "k־${}p o:AɈo LeG^%/HYdB@Jb| "n7uH G^q%g:[U]?b"l[20sP5:Q Q@ Kl+숝̋*+Goz!&sL/Xƿ4_|T ŘX8KIF*H֧µʞ=S[uG抒_YA)&{lkAP 3)u#/>QAgu> X4A2(|zGW~#'i>?{%*n{L14=(U>n^xŔBnpקHɨ a\i}kpm.9ClK\]uaS$q5 DQ!hnw28\g=o"Ⰵ=½x6?. [h i"g(G}:[{P]]~OZDE2fڔf+lv"zWdLwH:AN ?9n C},,tǸj  #q/]r, ,]:_N! 5rQ{@S]esH<ȈWZ+Cp&9D2*ϫ}@b G $t{9aY iQNEDE2`%nt Ʃ2h2t.2tw&I4:NZiI sۦg `obX#l||2+<|qXڕWr2%TwJm:o٧!;O4=N-mA+c B˞oAUB)\tɅ#=+'];I05]Ddsal;oԏDrU3# >0H1x0.egI:n <"6}(iۍb[|]r \J{4ڐiE:K!:lTrN0㸪Qp0i-Lc,<bd?󿜀TO|M$倱 =!뜪)SMq,DSңߩ _=C86N0LFqUXB8!C7?xXC!,&(~N= b=wl ~W u)"7=.yť)YfwLwm?:qJU5=r%K}q6uDXேN/M5KOPMszj(,2^WCT xVT<_OŠI'' M!%@zXbSp&Y044nϜv)K 'I9+ O{c]H$OQ0n:UD Ml慹ne ѫ3\$q ,=r(]+"SԻs˼P2n{>-(ߥ_̍^!zS_Gx ?×Y)$P_?k 2 {qSN[QyPOL>5 kdy.TzbPŢ"}֌DR<yȳzfH"ts gOg@s=h|s }u93a N믌BB\`倔ONmN>k,_l,iu3bdoD{Au2*LhXIY7a~U:U}; ($R g@ d7 +@Q6~1HU ?3bCk5Uо127KRP;O\I`Lb&Tc;i: \k-R !dP@/]e3OG&g]Eq]2&[7͑4oܴee), C  NtO3*%KflSVe֣qYgұf FLz$GġT|fڴ|0RK^xCdK0 0r9ۜ+gd@=E-6EM"!]=6Os+'zp2Ŭ6Gd۪w>&/VX~|gl-?  ~&MO50߷ou׮VX"l'|{{!%hK 84%TN I ?\ <КX6/+ <_l8kHаK{s'`)ļ !4jXۏ)@w,T]dTFPwktXʲc"VD+KZ0Ek&DDK⅀N(_}cF\':EU.!=LyE+7ߧ \:HI#5RM^-)![M >8 l$%)-F>o3Ey.1ƫy.!W%FXDl|a_6rzw2) k&)TzNF0 jt+J~wjC3 mVS=+PJգwZL`tc2F71&kr=2OAHcTo$*D cjc&sta|:F)"m>r+aYZofPxuAnyVvf3 ^oAQ^ЕT9'KiGb ` ؔ@E_F D3";!ڃ6yD\7`0zBR__J;׋ɀG  Ŭ4}x-e)S2ϥ{ҖPl.[rڡN|Ma:|rlWO5)ʬDv/ 88nrvfxrbLMݳ -XB}uYT=bg% XN~/mp҂hW )+w]YyM ^Md le#%D9@}4E\vS~κs$w6{IW{'C*u #lOz?8U&~B6L/!,W*&k^(aAu $%W504o=&7(nV 挳%>~ cOmYЧ *==ɄDb| tH'g k'm: &JWWĸ_;22$rf05dqt+YLX)Ȑ-OqɶGs@L~8D kXơD$yڰ桔%pSy#hg/,$<\^IXT+O T9"dE|m&vt6";ݭK;7{]D~ ( ,vɩf0iMS r[P:fL=$b@-vAÍh$=0)l Pw~ QߘJ;F),|H>(nSЧ{2a).t/C7Y+0w&oI^U)-Ȋɒˋn@w5nJ@M쮉"¨&$ w3p ͌_/"hy!J0RY}V„XRXmoygw C鿿VR,3+\DO]@~24YfH$G>2٩s] mxExAK& 61Iɶ5 _3Co% N !!\Щ,'״1_i t{9P Pe)b*u Q'rsp'A;e"u犃r"Q'¾(N\BQ$޹;2M@)'qv48|c:(.} 2 Q,;1S^%DfEN۶@!%ęC5a#|LV y{ی# 7%_~qIS{xH?~JUοh1bk5uj]2DS;QT,D<AA4iχ`}+[& YWO䊠_B殰!`F1[ G pzOFfkD:'ˡ:V* }Q 'd3L T<Ջ3ϖCH!v_xN|so'sTf}r!^t]0#)3E&xK61-7ݣ`Lׯ8zG^1v84:JQ$U3Ȩ0N6fItk Fd=:ܾM29 vwLk n7db6\ԋ@7ʨۢX]zW!!ݞvSs-bӖÝ7l83+4S$xDSCy@ض->kWO^o|h#J ?+uל(JA5o%C 0 ^8CN[fOH ^ =s~p- D{3M}'ɠ&xP^/ DWb>n<l=f$nం'66 > uF9I(t=qiJD8<3it Rcsu)y.Zń?,M8$Bjb!s!R+ZxJNץY ~_f ]=#hK^^r*IĿN>V q Yѭ[n$'p_i2@F{`;fPI"N!T7#xQ7:r!8Kޔ.3x]|eo6|[M'4+j٢MA0C1m1%T^2r%QFVJ:!Y}|W.@H=S#g3\>^ y$ ڽJAhf]0lq:~d[L} m/?EQ Qq#+g3YݿS,,9.u:e;؞2OlR"cE" *8Z7N;&.03# JIxB&>slH;Tno!5[Q|֪'!Q x4.V&w^ؔ%Cs{v7t|Vl&!'Cq']d=2] 1~DOq%'#I^II=_cB D D`>xfnƂx&Е·}k3g[֖~EQ|fTIG%\e 3+LvtDk_zbkC?߮#;1k֊!kVMG_E}IMk=>! n+{hM@LCLNʄk">X A+`X&#1, vF5o1-sB2{`ҍdOJdD:=>/ūhs+Y(4:s%r$i:뜖:^rdCP/kb(vTX&[Q+)FF<]eNH >*PX:&Km# /?OQi)=+&̔ V>yMv}U:(^5+,J-}!\) a.5^q=dm4A'_7ߟ') g'RN q:x^ 7Nֹ&Os1q 5RwMt&~|LeI؜bx-.;h+"F^$ O>x&g_̌TjzLu\jjC$JP}=z`=:2 B>f$0 ã\MoxIյ&5? Ǧn2TzT;˄eLԯo=u13wxnJ>M}_#8n)_:W_<=2P0o^zAGfxqjC+ɂMqӡg" L6ofIlh WZz/Ѫuz?X@{艎$06Hק9afe1HaW﬐%C m(V>"j;bSH",i}ߗ9&2 ?zcHa 0U|a:Gޙ]P- @$` х/ī"#']} * y=V(*š^hw'&ק\E*E,Цc,ϑ-?DlCHǤ./@#Au[Am!8t ůϭpq52EBg 𤋮']=+ѐX8LN]?]$nvH*Ә1 SWM@*/gfĵw| q  }GtJD۾2؂?%m=7DUFRR<dEvL]iqL#f>16u =LhXMy.#Kל5 Tj^z(!y1@]n'|-Ė^`6 \gHhgΉ$}o&"\ʟYD%Lή Ik2eWRbKߪpUl믈\HǙ& ܲ ϬcO$o Y@xew-Hן8P'ҽ7Q@=d"ª&byЉr1 {:%vtv/$&.y:hJgM`,f(gX#3/za % 7At:|$aX`Z$\+]VɲKdRG|!C ˧ݦR9f%H>@l!ʠNk#7l#,KB*55K ƀqAt4Wׂï~񱔋>qđ>=XGIsKIrHҌ0(vR L3%5XcN5T%_ kXs FdbS}>"#נ€t4dyP7(BXSFu=cgMΔ%G^Qe"y{x.d(Str#b+G Z,&ͺvͥG'r:B 73msXPV{sOLi%ZsAgBzCIh#]}n<(~^C7=nhM$Ӕ7AJL%WS6bt_4C5Ua,uqWs7iEAFf ( 4Óh϶K(.7c- x\BºFo%{c"P|$!B^3dlrsqR"Q9&D?9v\3(6瘜P`K n s`BWH ƴ⌨]xL2 D9IA~D_?yQ4;k&!tu\u9TK7#ALNmOobC(^nju%t Os{Dv{˃<ǮkĀ0&m3).u|A%YE`֍vò7?@r+<|1bKѢ<$KD0";䀗kɦָY:YrOIazn;߮lUdhyH]5K^] , 4P0cȒNAQ+eKA.Fku5l6uHr~t] HGhL_,'\B.a2P.<UhQ"Zir:a,Ѻ3'I +W|{0G>f =zu"aZϗH]AH)pN2nXDϮl Q[Z[ #gOٞiBkxq1:% ,b tnW^X#"l;#B<aؾ"b{qn hMq`3C $ ߟud!ٺr2eSRThDh1gHKS;gv Tƿ|L,CǜKe+bl>Rbk$1Y3BbIaZ$?5˨ L-KY+-,_} ,[?Bf8-g.;$wScK!y!4$O_ ю-2_R-h *]t kU ~NоE;:tA U1dJ%1rMֿU;١I5sz Ж>]R;S`Oî211 ^2G_9;}2y%Y?@0/ ,NJF:Oy?Ju; ]<Wh6{~ &{Dkh[VD^p U;8j /!MEr.l})qw <̰ f#Rc&`'~=r9SoY>3)9q0t =YQ.?p/P3b؉ zN' ԁD$k^?8i$ _hlARƛHE*oOTr/JJ,U8%10'[o T1MK5IǾh/t>/f0C)2;MPIY])ɂj+22tΰ$f7>J/B)=z:N m&& 50eC_7iYQ=DZ1~ S~o& u7vwJ8"Ah5$˚N~I~g 8Rs?ȶ$SX$&:) #**mޘ0LϟwDgZy7q)=\Kt,L{V(@Kr0^a8 DO\SBͽ,q"^lJBA+ۋts b#&%k땒TZ")߹U2絟؝#]!}k$!ZqvF6D3gwhu?^ӔEO|a"(j7y|Gn:ᦊܘA,Y lYՍ`A THR^opcQף5"TUͲ0_=yL Bnk&}hsXVY&,ئ]"==4{Is{83:^'Vѹ‰ }; GD~+X߫soW s鑮ҮǶCo+;Lq?ܨ9ႌʤ'0܃s%%-z)Ԟ޸H*?9gM3ϟ}6 n&!M)6!]d&.{[y'TMOǍ$]ONa""Nd'88,A- Z:u)[8!].zY-2rv L.^NZ`gOs$h)`\471 @A M6-j/K6-g5߶D^&`"N'"6z#%TƯzbr{NRSֲfk#yR=OY |9o;* 7$?mz$ޑu 7B>0T$%,ķW"e8^:Rn}z[Є\*I-y?zeKU[Ia7EzEX^>`*gGr'8xlc~:޼w)P]ev_P~m 5D|ԌN-`~-?p Ui| Hӿ\[5,Lzt CRE_`s:oiZ_#ų l!w[R\/ u;QFyn6.H3;|8"JShuCX.JͲ5rMG0ݱ R ğ):$BVzbHHi /&QTS5x`A C=qc_& :1''&Ua~-Eܩ=ySLsqBzz`$r U[ڼRQ³]dڨńש@P7armD}j;dq&tߧ9=nSV^+9~x ~el&G|7ތ]{~HC=\DG% `]r`@! @G=SPqD=C|DrgBgb 4mнiwǙD%K oN5p4 ` (k:] yyM5N4xSI:DtV$ԟ@@B/%{ؽo'_#*ƇP?y ]JDEzYTOhHţ>3v?XOhT=&dgkᴻՓ Uc\ۯC#]ߜ{JSz\ ;C q44u}y &3d@-phZ\zz ϧ@4^zr@S۱|e`a8Gx xH ,܉_2b?x̍鑘(O/wEzs ]p2 I9mA^tboJh= IkIO cL.|FNRLrq,9XuVˣzĔ;^p.Os DD!{d ӜeL"}g8mz୲V$3; 3& [:SW H'wE)OMs zZ943r3D| oGz3._7)K1E(oYւkL{îhj8qBkM!Zrx~qhЖ6zUM͜d H?0@0x:AdQuZ :GbpԂ:mZ{_M \-Jr23ñtׯ'}d0 {B×23IQb&s?Ae{pFЙAqRj)WEP/Aظ:$Ur ?G I}Ii39RD06EMP4{]"O=',xZqD҃"M%AKg_6Ib!$kr?9)lF 180qb/ }M 172X|8 #]?"g8aF/>yi]aݷM?ٻmHZx4SKN)745bA30T U2q3$)G'cHE!W8P`zGݹ*d\~b"6;b}g(Y3p l(vׂ<1 @gb[IO7#'q8,Bze0$Bw0%ET5NqHK4*;7!DoGJG9!(? Sr3;rIzt&m.ʫrJ 9E:c%kV@EIP/s (ؽMl2 _4}D>3p4I~iț7^B//lc _ئ8Ep7RKF,&@u;dQysf ްp=>wbC8&!J=kAF&FCD',S#S r X˪9U\ zq|Kbc#n 7ömW^00"MFf>xp%A)Hqr;) e5tQ|bHYRT􍺉ep#H[>(NKtЁ!kPfe)n1)U5$+8ܿ\!Lq2ϋèB@nuP|w(LL IR=9EJ1Es 9H7 X802ں{cʐxjbmٸKS tZO ?( d:I&ߵ B3k@@.'W``h=b0vxUdGD^$9OBNrk}E%ӿB"*?dK1F`9*ԂW_(WȿlD ~pqEyEμtT㩓Rnzs\9$嫰|pLK^cqO$:֜j!^d2gحqD2834u/$Ro'%H,r -e Jfֲ (:j؎>\QYtux- PUv00{d谠*} pw=q;2jwb*mZ8Kb/n*cC{M12ӧMŞ Օ6ő_8HNck (_DLT0qsyJ s-ppʡspAs>ZU4OwP뮣 xZY $wb&~ C\dn>vPTvR"K|QAw=*9㌎$_K"2)%_$XqK1U1'nS #U%P\ ,҈/`wfϯ4z&H g\ z=r )}ι  ]~1R{3nlQ5A UBrgo)4iz*5ۋ aK:6qZy)0LW$uV]e-gI ; ZBE/qfCOFx}:By\Rɂ t_ҁXx*,`#u9"y׌-xNXExOI5(;ޘM]<Am_;ސp# o 3#&J?6d$( yﬖ(l DmxW~rnoܔ79I $mdsc G>cYNB7Ah2l ;H8+!ӋNj!~/Lr 2?Rhj \?dç) @ !-:=镏羚S#E'1Ң9QUSk{F){Ʌ>r>B￯J +8H:N ?󉲈Eȫd@FG2y~2e߾G N1y8(;Be lh[AE_M|Ɔv"p&6N2 RA87¥h*L|Lax7,z&Dzq3+Tj/O$Yh2d e A&D }l!y^J)712&$֍Öq(uL8ޙш4g2@q$Lr}$,y6i9>?9"X~Lx|}dRKU~z|4 e?J񱤗ֻEI"`,KIE*"Y0:]|GŖiUC*b' &[7ɘw4q Ag(|t?íxfHa ~*:-9u2/˽q#E lt1I">p$z٪ ENiI r3v'%1x_1d%Jk @Ww_9* gg" Q| g'ږ*ma"<8O.y3Cі<$BD\w5^|_p!˾ D@'ؠa9??E"dyqULg u4 3ŦՑK %?8e*"xv/jc8L'?S{=Mw#A DQI UO\2\q皹1I}1^#2$Q _u1b޹Łlfk~` }DGOOpQ95&%Y.0< ;y]a$J& K!-׾;Us}MuAx\AyA%@8.GAM>_= fOP ebON5Tf%e!#XrVJEa49)="2NLM5Y-BQ}~pŒƛbF,I$u&u m-NA6:ǟNhD!۷^Js>&)ܞ5?+%2^a[* sqgD1c ڻeQ".CDJZ|l*\*jsϿxȬXDP; FBwhb.Tsgw꯾?iJ?=GIP =g !ƽL ,F YJ0.[Ql mvMRJ:5.8sd=1dֿH; pmw /GTĽ^=dൗyؖwp5wCc;ee):-EXi!UO7ֹ\OT=c ŠxUnD__09AW[Bu E Lv6$Ѯ'RDdCmj-|a6Z!} `PzW5gnFsE<%ܽ0e؊ $ 8f\iNu ƾrKI7kHG~0(G6 ^Ǘ(-}1 eJ:g\}!=.Y)$)2VV37 7L04[q0g΂L.TxDܜ@c}GM{dP?ד`Ӡ3Ҿ/20i5ж^(]#.XXy˅ kLI>R`PXs?GnjEf*iQe;%BR5JLYZ77QysE8_@|=%Ig$$F￷ K4;ٮCe۟gyQ-<%Dw5Wr9WJz=h"h-$t_OQ@t>K͒iu2I9Zy+=/jAg^3u\M9 BMy*5N9&$pr`aL$LB[?YVdDv=gZ$$R">k%p9Xbl@h6g ͨY5hģ7#ptTAw$X!9\ U0OCә2kbLoWl4A$uEl$N7B}Ift-6qWGgV X< zGl>c31Rbq$$}~G\O~#%w +J⾺b€篧q0 S22>&OkI IFăF<$۔k88D%vA5 8:o!܏'oOlRtk&|Lȿ̔' ~.oq;ba?-6gr<UK4M}*25,yK^'G^`0۞#k0z5 \3Y @g 5s9&dAtO S G|7<ôPڃӃ~' &_g,N^JM뇞 *uG9x+QλePih} v"`V]~O ҕA X뉕' [BbYfd\%I 4z{V\rQQO='VwhU vOÓ&愑;wvD%<,DU `㊏':Dު^z[T??.(+=:0A(x V^:4Gw !MCNX\&k"ȡ` e-ت }1Zp{{x`Fn}鸟$!G@d$(SRbG kCeiɯjz#] &!X5:'튥LC"*.wߙA|%n3m<﫬`"5N$|Qhn/1V24AûC6BBSDXFA5B?FrʅȓI`oC$tړQONIt%A8|4C\^o!W\stx^.1 i"u@g ޿ cAC I#5Oz?yh3 8Dg{?CU V/ى^T;Fi4)Tz5n9rD=/D۵x4p!|*s9Lۃd~Md"S8mD-Nb`(\~ա`)T e}0 V&f<ZaznXCNDgoO%FDubp&vVa_AǷ ϋ%\0 :E>>pV! ;D[ :eagלAUdH7_숟@6ΏL=C5Sꛏ[04) IpVŠElPF FPQ zPMܕ]kbO&o2dojtq@1$d0s[PNE۷'+(]2Z~q!{9:p30+<Ħ8CP^~dߌ:$#3+׶IMa@hYh]j=d ` ~=\/SŸO^o{te VK Jd.=/I!|d`N'$J V9]Ϯ9}7*3gdLۋ娟 93~r0K )1hwO\ee^Q&%(Dsn7 dnS4.ߤA'Eﯮ!bŴ$Hqj*};BE5k K:F]%{|z`J{<{G kЙ^Rh;;z~Wh4 [q)Q>>SYLόFXc(wJ늹7w{@AfoP e_GF(~î>|sB֌ÊO,#TK;ۊaQkߘw'bB.ȒłK?{p8@3AG7&،H" Nv5 ro|dvdV|1IjXAv:h<=E+Fqdz[ BqH>C:qrrHr faB%vQG=>`$1dہryC Ai%49>i.h;n W??EC I'{Tl܏i7 eYUj`#]PFac0>D^]Io~Tˡ!Mײ⣯nXSR"!  teU<:ɝMk ^ nub%0*L>;W2>GJ(.pHzrip2yd x1RT[ψ!-=)1nhh;̫#хH֙ET@, ew$<Y^SmwML vbԊl]0 ; zqJM[ӮAbZE32Rj`b&!LM} vz:B^쏇%e"z}х~W~^ǵ_c LPhٶ^HMxi E!8" \?$WHDcmx^ $0dyfጂ Mn>H%{9|fdf d@x ^rJJZv銃Y.} "d@0ޮ >v -4dFZOG\DvԆag0i 6c]K@ĚOr,dyg JveQzFîP>Tב< ;Xde؏E.-禛@nc*/3|!7"νc Dw0C_Q =132.ㆾAEp> k?8o(IǶ ЦnsZ,{BEd-%Ku:$RAre"ȒoR5%3"Jo$D:OMק$,:LF:zC3bk2Q1E#|}݆(DC:cܤ/B!B:p8[' zNageN'z9#ԩa%[&sK1igOem7MdNLITi~  Fv;"Iw!4R*'}cԦ$5ia,FRLS`z4͐m"Lo%93{h4%!hƄAvgQ80oX@Gu4xD*a,x._}&NtlFޑ yy 4D՚[n&lh/g AZ RK>\:#܊( ϴ{țr;ӎYBB#{#GvH=(T,{T0C8P{E@dWߧW*%^fV*/#|{D Z>,iTqb [Dq Be}ĐtshFU3YqSS>}dCO1bCAg&VkxD"abҔJ(piV%KKH3K a#'&);J6;"S Hl+mA.Wv:el ?Q*!nERaTF>>>l$MG;`CU:IiOF7LZ]DT, $rU֣$41LBT7q !MNB|ZLxm)sxh5>gQ ? e|W**#i᯼A =0'L᭼@u q뗑QJX'='jd2K !Ec$,"9ph$bkgsN(V52E/$ 4(2D>ݰCc>1CڎuɃG/ X뀀gغ@4$s:8x QDDj~@A ǎ ֑rs07sm]`1 )}ôBTB q$ʅ>2!'rGγC{Vu뒪*w8*W7]}0PP05bG) KG2 AU*_&Wюh6'JZ=_\hz2@B$ ]r60|B5Po$7c:mo%)}^0MAk$ u???_?SNlKk*eIDw VMm®\/r 4ֺ|s,̑tk#$ֺxI3_ ;t:j"[z`W4$oWH*]9 uDL )Z'%(8kUd ҺDqėGLtɇEP%jy4+Ҏ'XI8a`?(QNH@(M0-d"u!匳ΕΌјg~@FAE*6GP[Z'|xϾrqJS)çWd +|GA3l` @ģJ(%J@`+oc+- %_q56+w$xc= Z&o%a5%#@Gpe,lI=Y9B0RDgI^&MT~6ìΝ2[dy$֏5v lhUB/k)n>2 ?p+_w_vA)Gt am6 ׶Bw"=+LFh± Sqg%35}$ t$8o!&51XQ.BM1 Op{yI ==`D*)?@g[{MbHˢjGAm(1>9!`QN?]r)x#eeVE|*! CcN<:{s*&"ot W&Br{ue !-_L޿\[3w\j[W8,I[|I^$aVB,!Y!.}H*G ht9hУ}™dR!NO<0$kg@k$ iW\(ՋBwp/kr.5y3SY+, 9lr$W":t}&b&"xJfZ^[j`|FF/uB.8#$#([:ly $4lDxdNL v;|d VkmĒ*ީb݁KBjbzdo5S=1/AFҨ N׏Tŀvպ<{j [$C}gDo-uqw}C@9$N>.sD:Ltka#0k͇;NJ^ $cytm#2H7'|җwsQ} Fnq*r|E-T=5b$Tڜ6 #g r&>;4 VF qǷWA6ynSZ]JEEV"9XN- $ROrqB?N!wBxX2usB-QU2H:__}m{<}Raƭ8y`Yq'BL;c]pHxfBݢ:yûDDRb7%>⪘]1N T:}dƀM7bI 紸(>!0!;(1oy+1Jhd \9uB7 IX>P0uG/y A}H.O>GI;> wϩX\HS͒X0c/6: T[YVk!Iy|ka\w1$J F<,sd >>r0ΑYK+SD4D}YwXzQ5uxp uib(4a-  HL٧~[NX< {C'2m^H2#XK.;s9bHI;"`ʷU3 ۣ7|tǶ.]WxRK6 z_̅}/KSq4 ߿ uGwD)'>+قj4yfG`90ZBrJyV#4fZ\v^ zb ;}`^:_}pAi咪?0ECTNF1b*vULD_feiA<'$䅂R|)RWA8Xװ0zdؖ8!qKNcէo=?o,sR+jv\= 0j] q]q\S^" canDcf+Y>lqT\;sEpsR(v-+H(>'pYS1$Znz Tק"SӞ($!ma \tdE%0T?w!%3dH\ ?#6a>}:SL:Y[š6wȡA2 )r;6.6_.nltQ0];!ےۃCLn>&J)`/^%`-e<DW? Un5HXɈxLinl~ִu?>!#AMks?BY({f'88DS^N9 E+q] b-5SX@`Td )5䧰6mX y2'{_ZHi<8SP }Dd'}PzdX a=ׂɫ4(,Ci|GL*ruD(FC҃~^! 3)GNkZtüJt^d$#w&.RJa8dB( ^㱐S"]G5`NđlZdMڕw*03<"=1c!4l>\pike1b6H~L\տ1` sz ҁ}jCOhfϾ4%!=T矮2yX+[)='E񍔀O> s @ZWkp4پ{d,6t1u)&Lтl@+|7~y"G: 96aLI9FOY$A ίx>q}&JPsFF3cһ` ii)⸵g׾d@enjuTxnsXυn8(\gby.g68JTyB_kp)eW$*$ɝ&5됉RL[5ЩH< xgKEz{{6G/%iB,t0(P3ҏl({B[=kNRIR-JMd=`PvⰬ^ ?/ */^^, I% Ig@eЕ# 3"8b80yevap` ǖ7tH#r[z@z>XȽ!BNo:YܲĎg%Ymz"qZ(n=IQbrpWWk$ڠo}rY?ȗA0RituUn%9=QQT^fLw>ZO__UL*u98/-kѣ9󒠞F-~^hCF>eH(޺c^ᔃ%V:SXwEqmz$"z;KuvE% )zV4 u/L|p dMsǔsKz+P{|o-w'RIJv%cA雡!q^w[IQ!j[[( @7xg9L''d.B ZtD-1BK o:߫!q ɘr3 i3XLZM%~Hgƍo\pb{M+kQ; k"@1$K_˥ XM|JNyrY :|lN E"B $X ju$IS5\LJDF-%^5 eNho(Ib;HTͼRxYkJ0KCKޯ'<'1X?=w w0dR '/^F7;&sfM8a#Q(b&cldu5τJfytzSx 2V.0;&~!zN2G&9?lDj:|fJx}Ym{> 6=)""ew=1tPMzi yZLtT*͆Sk_81@xߟV )}t:5NVP[D O$I7D̺#17UJ0Lv'd q=l;+a yEX&削z )v|:/Z}U| I$xsf)?@wrN-dd:1b &)uA*ñ{IɉM PzI|C MwP[k+ǃ}2y@Qwgy2R5w=fw\$ (]?<3:?2rJט8@"RU ˱.l1jTCo>)uu!bZ,_OEGǶ sbk9,X6WqRH1jֱ._lC6E?-j:&(7qA wQ!ؗuM˺D0 @=\@Yw_uk2V\8O\+ճ'oI˸jİ)zʀR߄I~ #S:d!?9[`Go&$5^T%$juyK,Ogm:ѧC8I*.Ob$O}xh`pECR~LiDgc ?zM)Rԃ]/!'Pk DZa DμјB*f4Z%A2j=|FRank8B,n=1+>6!,Q-I‰ VJ=1@;B&7i㉩/E.rPB5Jty1n]ߏ`Ɗ׏!7'APY52 "-C01P4rHR_?+Ʊݹt}>)H"R^q^0fJɜg.ip 2> /ze##6)}wFMK=a~)R'磼M"fu<d# Ya%iY2j$2Ae;{@NJG}2T t[z7Yt RLD!:]̻d9j>yUOӾؐ+_p07y&Ͼb# Lҿ*jW |܍iLَw.2;$y9^!ꆘTlXm*@@%t -5?c Bk_`8vfsZ/*O^\=ԣYH"+XY@0zc8#u^ı!\r!7'H zb4mTMpYs=1O~I`KkPT(oS5G @ =!3(sUuقBMq1"4R_Cc`SqǮo99o~3nl20i &! _94H(c-6+X2Մ}aTfP"$ȳr"OD=3Y)R#tɼ E\_Æv:T jR>;NW?`u5ֿbM 'n,D;g+ޭ~Yhܞ k|H8.HoL\AtR-뜌$TxĢtoɐx ̯_.px"|;`;fnDRRU%yribo{8\Hm'?ۄx>IڹP~N6gIΊ]9'̍U4h&6 {Wؼ*B(*uI!⑅/rKoo)˿\;}0"x2!(+o] p'!vǶ,1<0 3*@;s>29ƌX/ ;t} d#KY-H0=Sx(%}nDF4#;Esw^ |#H#s5|-; ]~q`Lw`l,B5Ҷ,8R9VЯ7EQdsI(S{[#;&YºdHUV4{}镛 q:c*ɾר|b.=80'1{a٥89t?k%?'\` "$ MSKl=M㏦^,29钶M8`+E׷V5bN1m5>kUvhq$V'Bt8ē/B*8^c4Sy¹Rs%}?:S,KHG޷8D@)b^c2T$L1oX8}>z$,AL0Z`g[:F"7w,xFЭ]̝r-h1&u uxVȧwqJOd 2ug#KsO# 3b䄧QDQ6PO'IJZ( }QYY n%# u=8m4$͘z[5L![/C囬cMw֝;V(P,T٪r mbX5)).M .Jir;'t$mE:|zDEau2O2)Fz4;g^@ 2ԡx}tBǣ&3t緜 T\;b\72tjw)uk~ZͼMS$6L<~ Ї*t?ЫרDMp5WޣmUdI".=pX’UTJbS:T|5܏G7@% 4:a.U_8&5zO ߙ.sDu!TuH2XPj;JD?"to~9Ĉ=uQZ8|9kas*@f$w#y| *alCZ)`i)rG!c-D8q$ n!%h~:^LE,_< PrM[Yf&. Fjҟ?zX@as?_\MdUx9UPu(f>zbRT|P9~cra1wq1Š91Byɒ/wdYyi8!8#.bd 9qbu?\yڍWIŝ)mZ\d>S2k1ܷ;LzӜ(w=#*LHܑxH:Ujm4"v]95?s(_|2T=B;ƺ`W]x1=s!A <JS 2b%&Gh>(dzTC<u:}+IA lzI)hZT1i_9oYp DbNy߮D, )Z:ip1о\0({Ix02k8!E=\EKИ/"]qds g |O.?AEe8JE-Gq!ht2c}.1Y!4:t9%qPSGEhgZ鈃2Bo85dZ*#oi= @4bH߯nvqEf7 ^KI<g$fJ i8Fv=}rJM-ӁSc`b_b G|`- Z Iɀ-V5"GVz`L;w~:bp:Z%룛Đb*.bIZ2 _N~&o ߲^Ǽf#E; Nn^ d QF+62n/`ZuJ鼵0%Q `dbTj&.7OICes$FO+rHp59w] Q)1;]b*:ۿCā3R*e׌mA\﮵W;0eeOKeаΦu^4% @*'O~MA1N=kwJx$Ph]O޸"v+`op{FV]\.NM^:fE іZ*,&  gn}xsud{+^~cE_%p{o_qXA y'g\ #Yo-H?+b,;&&MxКiGNw uqei$eo'î)&o|F)'׷**B~!MtWS@#JXxk=xT#Qtq5>cN}ȗ8 A/mGۆ @{=\aPfLqn˪xU O?Ulr^I4q#,OL&@(]~'EAk.FPT;-ȠP!\2EM35G YKD-i0hdӸo|p|*C`I`5.ȕ`%8鄢1(>;aO%x(N>*]: LA?`NOj~^3 ښ1Ffg{H<`k՝di3ԠKްI.8[;LbJ1$}=2oξrAT}#dі_Jˏ#xo"7՞z(([HR.df2׵-9>2PFq u} _.2w6kbɶ&EXw:P@@F4t=A`$8\XҦܝg#lX aߐYh +YJ/i!o&q\aX?cFa^"n[*w3THxTb@=tEK!sK1ZoY;*7F| RJ<-vĭi=okoqniH=CS5Do|m)y/|8"wWQthu v+r"{N0?>\x߶A7(ۗr({*MjzbbcrrV,G3mY tk{DPRֻ:"bV:α(D4pka @A{p zv#Y`S *nY"BDW|j2i( nu1nrkqpR]_L+njrz-Ǜ& SV&UZv" \dl u++bf'{6HIfi'Q'"r-it>%_V ѭ\sM("Sʉ Mvp4mxbtuA)'Ĩ!ܕ }ե*NPi9!69E ]nob.n3k8F\+O9!?{X蘍u۵ ?82{nq~gl+oPy$K^H2QX^Y TۮP!|#`o$- N73IZwؼ yo]5 /r3GWE~Wq 509."0$|$z:~)5NHhW lWG6MЪ!H<8bokƽJP*/}oiY'Gg 5$^<4ώӏXz+e'H8EVM17q 31 :m(LX~rBۼ7SGS((;ZdVCޢnDCY5l1E ZwT 0Q p2vb7H }ɨnJє|Gc!G1dTVr]6ݩG?'H vz흔^\67dƢaHY&I>ǍK$XO1MSj[hÊ?\b;J #yL6&R53lgTI~3a'M1}Q"~Ɣ`4,Ŋ" :PU S.M 4x^Jt.oL(!ǧ|BlD3M(82fS`5Z% }=1+񐎶4m`e-F4~[DEu;p]`Q@@)u't1%ez.;1ly!#d |z/֊[ftFn+Gz#^#5Iq Ye [ ?}+ @t?g CDwyI2ħLҽ) ،Kzc;}!HS&-(o11Ӝ[n50 B=/?TQX.-/@ˑsc©Q{eGq?:"y4~Nzϓxe:\V"ELV`! 2$3FYIB91[ sj(>OǍ85|}~1ϘqZA0Z0m^xʂy5ް@]\(]9A=",k\˟FC.26-o|d@F9Nb/mƉJ~ghBn 4-y se7"S !ʂ cPCU{R :S ]Q߭0q&} |܆SjzR%ɩ!b 冒`M /8LWK6f(!RLOSI%O< OWĄr=6b DhO`"NyL$dy>. >[oT +xzzzk G>4t| ֻn(\_?y@*Rz1+8R'ݼ)mz>90`ͺ3 ȢC5P6+ Mf# FtFr!K%' *YCupTSYqF C&J;h~o5)4yޚ*R";e5 D=FpcMN| Dq f,=`Z|z!'peVA|_1Na9QI%(3B@sOp"hhw=jw'ErZ&O={gWNL4"k\b^ӲwpɳdQ穈iN e6)I(p;ٮ<8.6ty.t4˻7~4K@ZoM%}\0Ԁ^g+zz =]iB@ /n`Cv*jFxԁ)Bw#Z(tvwt(+T&#@|g`YǽMXv@g\>raVA$7>ЎLkWDYI ]=?T!$\6YFge$ 񏃽2"J25r~M'"J ~Q)'t~1Jou ~z? 0&:Gqe$Dr..ǭaLq[֛DEv8nT`= ͡FSw0)C16Mp󏑼eBCn񘐐- ?Cx3D[߾A46qF,' gvj( {q{ѹ0@Zܒ= lBco|)Sqy^ٺ;yY*n'\f#}.8p)eMJOTEH!a]ovS$ H`&EIH`r {S&۾ lU1.O`ˤi G@F7CҾi_Fs">-L,>7:#Ȯ;T(}F ֻ9[.`:u~zB_4ojb~GPe%'d ,4B+L3o_9 i:׳L)iBO! ;DJ!8LȝޓeStsE ]늇|4F_Xti 2P/+y'Om9;Q~񞁴j7 D2* YKHLTAdw8,`VeV1!bmbXL<n "{o"m7SO*ܑ!)ћZh֑WZ fbh\赔5l"$Q72AaEkpLw+\W]hb2Yת-}FIu|`jAyXl0Dk]7-ۺxs-auۦ 'q >(eOA7G\<"A3PͼIW ,/"V\ u"L ͦA y>\_P2Qh~Yt=19&aBAT:_D|>d@ 3\ TdY%GNa0#^2J>UG>LcCz)ZٺyHigY*A1yP}-dv,0đ;&`=/Dk9}I.[>ٰZ;qB7r5t3I{L.pQschH/ )έTl%}=YecbVӼ6%DkDjl|/ &Ͻ#W#o)'뒉Цǝ0QS[qY4W :iLtS#X|ۮ&q|XHԭѓ$l/:bЙa[Uo-?l?@Q:GadD? _@NZ \)Ba!ږ7mMP} FEd 0 OXZ*5JwE7DTPSW&ɩ:~C,)u<8 iS~,u mvUW=5oˆx>H:8]_M<=D"']"/]袬dcS3 _d!a<+(d:ı1#'LoFQ ~@͖ gq,[,!R"pW6) }u2h^ vy!1Q?[uΰ<98 Iθze D8ll]b,#FőoJ|d`YĽ`%ЗPSFoMLxoLi> Ц#&ؐp7|?ؒ@'CQyrQ14 :O!Av"{>Q,|{cIGZduHȄ@PEtGǰȴA բ]w7ƒGHF}0:K9iY D(+e[pUՒc~aH}+Nb8pamj0ĵ)^uêc+\|"3yX|&yƆ<z?82M ^UPi2,hBޟ5t!/0rb 1;k8Ȗ|YNbG^"L o~pq'T+Nde >5#G:rXv$1x!Q눓vOoAKue\L@$r;>]1|;+PlsUpF7]{)ME<ٓHjz7. WCbG^t!?yá{P:Xi iaQ^ ݟ!$M}ԜSg^? ?]ʵ˯n<305C!~:+m|kd$izf`]Uw|>iLޙ 4k˕;F\8 _u |c΋i5=@LU[Xs[plD.vq@i+rР5(5e'Gc=AQ"_\UeMt}`i2Od:N|@t A|9Pw A/VD8$%&gߜ*1K;q._\5&}H+BPd&q#_dDYUc:_Z8I}&}s/CuaGC 38:)*" m,(FUU;R#JoҲ*jZбs{] fLR 'q@/d>2ߌ@&I1SI{&p((٢`ih^q/UﴅuR猁D,7X Shf[1qiNxۦjLI9-}{d?pk=>>  [$}dQ1[Bִ;IDY?b q )/Do| cN$Ϸ?@EM(o\v( ޙ gfʒ:E/ gw$Ԥ5vNE%"䙞g!,>}i ?9t̛*e7}Đ+ɼU% =}8PQ))繑4Tqz`AfBa$ELn@׭I݂=}A(:o8 vK%(ѽ:8HOO|\`S$kQקr$Q? 1-n۾2ZJWegn5Ϛǘ6ItKUj˴B%\50ZLu*|&1@3lK]9ClR#k84t_J̶=WQ>TIԒVӜV]IK!qްGKT`yvRd_8A5s%pG,`cr>Fy) `<8*ǟ=l.Ica:p#}Cf2D@AY]k镤DXARbwk L@'y!Y^tUUڨ[bSFnXrl$X4#a'&]03j jϽ{w Tk n`?޸K Ԡ{Y{3Hb싚iϪH,˝2 C]*,NZ֪zI|k7z>1aW}cЈKI:p)"Z8%: KĚp}BW4< ,[M}Qs P#ac$"]O96_d$細; L7}EOhYs7|B'qܚ\ȤYT KLEVd"wcW1D=SO8SC-<?V"D5'8G~p3iLGaa|YGӦN.ftwX0if7 ]ޙQh}ǮP725i͈xT|sF*AmE X:5*Uk4*B|,\c71; A]2 :6=/X >xVl^%nawĒ,&u(4Lx GwLF&2)= <`V(Z#.z_{}1T#?aUkz|-[&8r+3"8P=eJ'\:$M*yheWnƣӦASU%svp3'ϧPmnμ.yϽ| 2!*]0w,9],ʸ)vq$EN6867d(}N8\A,an0tlo!>Sl<J%~st}C vp|yDG -h]]J|[:#qRkLhV7>v\qgW:c:FǜT q>b1=\bq;逄xNR'+Y . ~o*{)0oKvLGSY@Лv7z +:'gEdvA =?8 M@m_5)2>(!1p):hčZE޺i"Kd:,nw]Tm# Hd!W_= b|t@23t%ؘݺp,I OONwl@|&$ D,r2œ:HLo8| Oq }`dR g恼*-B^J{l.ؙETDx8a9oIDm +"L !:Ų󱗔 k|Kv]N sH7WN W@~جpdS 3g~6bAjq=*!Zoy ==]B*u _꡾!8@V;7AB m2B+:+Q3<.losAIwx.1\sgܖTi5gԏx#nDD{dQe䇟8vpio{hJ+OLӌy0<##־oǾ/hyǹȄ)ȓ}s ')@+K.=2b*{-̇~w}Jb `E<{0031Y<dU75xT$o a4 itTH$٤r7x-\j.+ lǧ?o#ԙҿOn,538QQUڥjjɷ댮.eN< cx疸H f-p̮]){ɉ)#K{]_w{N H}o6MQ-N%Q^Z(bO˂.ykn_M)MD]iu-LrW I"[b%1=5|XVǮ&ABch3HdAIzlAN!)Q(FL٘|!$c3Dcg~CП40&bsg=]A(+D %OfO_\LFaƺ`J[њ=8$]'pt]0L8K\Cfx|EJ)sdwe~:亨}==0?,'u5^QM;GNŊPΜy͂%*e "I*`JTs>蕱0ikDv0 __>o% K !tKdΦl ":&HuD(\<\ay3. 1'Q y Q޲[@dy'8.ȭ2^"f/ 7uړ0&]IIi=!}&F (S&0&.dQbp#PE޹PE$FT( LPcf1VC3jB[S~3 1<8JSZ!Ab:_|lFGG%Iݢґn͸5YE3J]Ʋ$u;`dע>ɅhH|}AC:+`ZEι0!CmB~⫄q_8+Ntuuf'ruS<9hL rX)c:( o42S6bnk &y B!,0ȰJTl1C2!XZڱ!f:^UoDzpT{7&MM]E1P ^rRY_HL,󖅜ӌ@z{J37z`ec I,׍䄔^8I!3aO5u./$Ι^arK@T2jHTWpHB+^fh}giZb~Vob }=##B<}526rOC4J{'7ܲPMgPEӟl$Q0:s(kt2W!l]y:$D|o** @31:fթ W9 [zbm)s]/ Ec$e=qc_<51' g%crϾl?ܦA:a«;'LL(AĦ؅ fdJ$lUƦФ(["&ΟL ,H=CWrTS{%mEjr;z~0e&A3z(e;`:<䴙$gG*  C͙&(w7*uIHZbpgW&tkwy£QPСj):Q}28VZ=pv8MtGN:,*S|J% Cej/rlF+quuE! iTnvx.@gE &,FNs0ULI+3o]}%0 Ⱥ<pi)Q;x{L >sA5*-3d{):^ǃ4o|gǟړV :?L1.  p ^:$J~q@D:tO)tK?7lH}3pȩų_.xE؏n9KۼcG/KP(ΘUh)7Ԍ:BG޸V l5,<͜ei奂XxlX.g^ء\6<ONY$$\5@w}LLug'DL5#nhP$|J,d@`u'qr,łxIeM<Y&'?P{b .P]w1.(#9A*^ƽ9H[-wzk,{A}8jGq1˾9dH0yf9CϫS%>x53P_ ` b4޸ɰ޻z`U$y7`M%.rNC)sr\ )JTX>'<@%I@d  F޻yĊ F>g)rnL&#aҔdfBb)A*;(RMг/通Bц!>ѳ,W?܉M5]^*CeDt&PABԬ d1[bF$ rkL hw}~Se$CcSaÙc#r<6@ duÍ[?"=oZƜHA$ApIn&I't 3?}ȳ1xQ$X y ؂|F98;#xppv$LAwx JH fU}2eA%cܹi7_n00wqpC|`lL mtP9f0Ⱖu;k}e &-Ɍa5Owc2Z3!l9u' -0/ l0TZޘɒ\Ĝ \`QX Se/X1({q&r I͝n>%64s3P^a8Q2za"EY"(..ksg<\$qѸC׈tc$! x?xT>(\ZKq-\nnm_9ķ~"'NQ,/Agy m{>1j?XQP6>1H::6am}hwϘ́+}VX53p\ֻWA:2e_ 㶾=Z_⠢euY@M] "QӶMDWX]e:T/p` uD]mE<銤NRt;s!9,Nj)X8)YzN!iQ{m}^94d٩@Q|JJ #h^O$r@-}[<[}&(Vf]NdaqFe6\ M$8 ؏m9UvK\TgX6LSp`a wggLSO\(d{~#^2 ͣyc8zdB׬sK%KZ8le_("q&#٤k}k&]qRȀI~tba:V KiS 161HAN( A/NgkޟuFw 4oONYU^_anԹ\:׾2f1TIPm55=m`:^XʰtqRI+ǜں2.O55gz{sv2'i 6 {ܞyŌ۞Nq wǦ3<*9$6Jt>ͨ[K<'&`CqPݱ (HsjN6A5BAA!eVyDu81+&R  e\JG|D׈^\r HGF d7:hA䡋 J}Ud5'K,F[/fz)k>lv4ł!Й7=?ua$@'}t`$/lC;OM.}qxj~i\聆;bA&/۽ᄙPV|b%Zq2,8C]f/4LtOGa3J[b!FaS)FXIte2iYCNF=$)֖H>Vly2)v5x$P"cHSLGceO.7ks]H/`DI