sbin/res/jsdoc/LdtPlayer-release.js
author hamidouk
Wed, 25 Jan 2012 16:04:59 +0100
branchpopcorn-port
changeset 711 323205a7bd39
parent 520 fe008e95a716
permissions -rw-r--r--
separated jwplayer code from pop.js and put it into its own folder, players/.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
520
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     1
/* 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     2
 * 	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     3
 *	Copyright 2010 Institut de recherche et d'innovation 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     4
 *	contributor(s) : Samuel Huron 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     5
 *	 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     6
 *	contact@iri.centrepompidou.fr
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     7
 *	http://www.iri.centrepompidou.fr 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     8
 *	 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
     9
 *	This software is a computer program whose purpose is to show and add annotations on a video .
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    10
 *	This software is governed by the CeCILL-C license under French law and
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    11
 *	abiding by the rules of distribution of free software. You can  use, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    12
 *	modify and/ or redistribute the software under the terms of the CeCILL-C
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    13
 *	license as circulated by CEA, CNRS and INRIA at the following URL
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    14
 *	"http://www.cecill.info". 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    15
 *	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    16
 *	The fact that you are presently reading this means that you have had
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    17
 *	knowledge of the CeCILL-C license and that you accept its terms.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    18
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    19
/*! LAB.js (LABjs :: Loading And Blocking JavaScript)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    20
    v2.0.3 (c) Kyle Simpson
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    21
    MIT License
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    22
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    23
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    24
(function(global){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    25
	var _$LAB = global.$LAB,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    26
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    27
		// constants for the valid keys of the options object
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    28
		_UseLocalXHR = "UseLocalXHR",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    29
		_AlwaysPreserveOrder = "AlwaysPreserveOrder",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    30
		_AllowDuplicates = "AllowDuplicates",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    31
		_CacheBust = "CacheBust",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    32
		/*!START_DEBUG*/_Debug = "Debug",/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    33
		_BasePath = "BasePath",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    34
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    35
		// stateless variables used across all $LAB instances
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    36
		root_page = /^[^?#]*\//.exec(location.href)[0],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    37
		root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    38
		append_to = document.head || document.getElementsByTagName("head"),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    39
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    40
		// inferences... ick, but still necessary
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    41
		opera_or_gecko = (global.opera && Object.prototype.toString.call(global.opera) == "[object Opera]") || ("MozAppearance" in document.documentElement.style),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    42
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    43
/*!START_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    44
		// console.log() and console.error() wrappers
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    45
		log_msg = function(){}, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    46
		log_error = log_msg,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    47
/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    48
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    49
		// feature sniffs (yay!)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    50
		test_script_elem = document.createElement("script"),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    51
		explicit_preloading = typeof test_script_elem.preload == "boolean", // http://wiki.whatwg.org/wiki/Script_Execution_Control#Proposal_1_.28Nicholas_Zakas.29
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    52
		real_preloading = explicit_preloading || (test_script_elem.readyState && test_script_elem.readyState == "uninitialized"), // will a script preload with `src` set before DOM append?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    53
		script_ordered_async = !real_preloading && test_script_elem.async === true, // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    54
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    55
		// XHR preloading (same-domain) and cache-preloading (remote-domain) are the fallbacks (for some browsers)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    56
		xhr_or_cache_preloading = !real_preloading && !script_ordered_async && !opera_or_gecko
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    57
	;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    58
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    59
/*!START_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    60
	// define console wrapper functions if applicable
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    61
	if (global.console && global.console.log) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    62
		if (!global.console.error) global.console.error = global.console.log;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    63
		log_msg = function(msg) { global.console.log(msg); };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    64
		log_error = function(msg,err) { global.console.error(msg,err); };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    65
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    66
/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    67
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    68
	// test for function
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    69
	function is_func(func) { return Object.prototype.toString.call(func) == "[object Function]"; }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    70
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    71
	// test for array
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    72
	function is_array(arr) { return Object.prototype.toString.call(arr) == "[object Array]"; }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    73
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    74
	// make script URL absolute/canonical
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    75
	function canonical_uri(src,base_path) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    76
		var absolute_regex = /^\w+\:\/\//;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    77
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    78
		// is `src` is protocol-relative (begins with // or ///), prepend protocol
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    79
		if (/^\/\/\/?/.test(src)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    80
			src = location.protocol + src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    81
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    82
		// is `src` page-relative? (not an absolute URL, and not a domain-relative path, beginning with /)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    83
		else if (!absolute_regex.test(src) && src.charAt(0) != "/") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    84
			// prepend `base_path`, if any
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    85
			src = (base_path || "") + src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    86
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    87
		// make sure to return `src` as absolute
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    88
		return absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    89
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    90
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    91
	// merge `source` into `target`
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    92
	function merge_objs(source,target) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    93
		for (var k in source) { if (source.hasOwnProperty(k)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    94
			target[k] = source[k]; // TODO: does this need to be recursive for our purposes?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    95
		}}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    96
		return target;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    97
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    98
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
    99
	// does the chain group have any ready-to-execute scripts?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   100
	function check_chain_group_scripts_ready(chain_group) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   101
		var any_scripts_ready = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   102
		for (var i=0; i<chain_group.scripts.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   103
			if (chain_group.scripts[i].ready && chain_group.scripts[i].exec_trigger) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   104
				any_scripts_ready = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   105
				chain_group.scripts[i].exec_trigger();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   106
				chain_group.scripts[i].exec_trigger = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   107
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   108
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   109
		return any_scripts_ready;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   110
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   111
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   112
	// creates a script load listener
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   113
	function create_script_load_listener(elem,registry_item,flag,onload) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   114
		elem.onload = elem.onreadystatechange = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   115
			if ((elem.readyState && elem.readyState != "complete" && elem.readyState != "loaded") || registry_item[flag]) return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   116
			elem.onload = elem.onreadystatechange = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   117
			onload();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   118
		};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   119
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   120
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   121
	// script executed handler
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   122
	function script_executed(registry_item) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   123
		registry_item.ready = registry_item.finished = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   124
		for (var i=0; i<registry_item.finished_listeners.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   125
			registry_item.finished_listeners[i]();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   126
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   127
		registry_item.ready_listeners = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   128
		registry_item.finished_listeners = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   129
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   130
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   131
	// make the request for a scriptha
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   132
	function request_script(chain_opts,script_obj,registry_item,onload,preload_this_script) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   133
		// setTimeout() "yielding" prevents some weird race/crash conditions in older browsers
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   134
		setTimeout(function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   135
			var script, src = script_obj.real_src, xhr;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   136
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   137
			// don't proceed until `append_to` is ready to append to
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   138
			if ("item" in append_to) { // check if `append_to` ref is still a live node list
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   139
				if (!append_to[0]) { // `append_to` node not yet ready
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   140
					// try again in a little bit -- note: will re-call the anonymous function in the outer setTimeout, not the parent `request_script()`
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   141
					setTimeout(arguments.callee,25);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   142
					return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   143
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   144
				// reassign from live node list ref to pure node ref -- avoids nasty IE bug where changes to DOM invalidate live node lists
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   145
				append_to = append_to[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   146
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   147
			script = document.createElement("script");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   148
			if (script_obj.type) script.type = script_obj.type;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   149
			if (script_obj.charset) script.charset = script_obj.charset;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   150
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   151
			// should preloading be used for this script?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   152
			if (preload_this_script) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   153
				// real script preloading?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   154
				if (real_preloading) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   155
					/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload: "+src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   156
					registry_item.elem = script;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   157
					if (explicit_preloading) { // explicit preloading (aka, Zakas' proposal)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   158
						script.preload = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   159
						script.onpreload = onload;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   160
					}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   161
					else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   162
						script.onreadystatechange = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   163
							if (script.readyState == "loaded") onload();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   164
						};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   165
					}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   166
					script.src = src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   167
					// NOTE: no append to DOM yet, appending will happen when ready to execute
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   168
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   169
				// same-domain and XHR allowed? use XHR preloading
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   170
				else if (preload_this_script && src.indexOf(root_domain) == 0 && chain_opts[_UseLocalXHR]) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   171
					xhr = new XMLHttpRequest(); // note: IE never uses XHR (it supports true preloading), so no more need for ActiveXObject fallback for IE <= 7
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   172
					/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload (xhr): "+src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   173
					xhr.onreadystatechange = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   174
						if (xhr.readyState == 4) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   175
							xhr.onreadystatechange = function(){}; // fix a memory leak in IE
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   176
							registry_item.text = xhr.responseText + "\n//@ sourceURL=" + src; // http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   177
							onload();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   178
						}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   179
					};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   180
					xhr.open("GET",src);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   181
					xhr.send();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   182
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   183
				// as a last resort, use cache-preloading
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   184
				else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   185
					/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload (cache): "+src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   186
					script.type = "text/cache-script";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   187
					create_script_load_listener(script,registry_item,"ready",function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   188
						append_to.removeChild(script);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   189
						onload();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   190
					});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   191
					script.src = src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   192
					append_to.insertBefore(script,append_to.firstChild);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   193
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   194
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   195
			// use async=false for ordered async? parallel-load-serial-execute http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   196
			else if (script_ordered_async) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   197
				/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script load (ordered async): "+src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   198
				script.async = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   199
				create_script_load_listener(script,registry_item,"finished",onload);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   200
				script.src = src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   201
				append_to.insertBefore(script,append_to.firstChild);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   202
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   203
			// otherwise, just a normal script element
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   204
			else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   205
				/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script load: "+src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   206
				create_script_load_listener(script,registry_item,"finished",onload);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   207
				script.src = src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   208
				append_to.insertBefore(script,append_to.firstChild);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   209
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   210
		},0);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   211
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   212
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   213
	// create a clean instance of $LAB
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   214
	function create_sandbox() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   215
		var global_defaults = {},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   216
			can_use_preloading = real_preloading || xhr_or_cache_preloading,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   217
			queue = [],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   218
			registry = {},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   219
			instanceAPI
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   220
		;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   221
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   222
		// global defaults
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   223
		global_defaults[_UseLocalXHR] = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   224
		global_defaults[_AlwaysPreserveOrder] = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   225
		global_defaults[_AllowDuplicates] = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   226
		global_defaults[_CacheBust] = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   227
		/*!START_DEBUG*/global_defaults[_Debug] = false;/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   228
		global_defaults[_BasePath] = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   229
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   230
		// execute a script that has been preloaded already
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   231
		function execute_preloaded_script(chain_opts,script_obj,registry_item) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   232
			var script;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   233
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   234
			function preload_execute_finished() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   235
				if (script != null) { // make sure this only ever fires once
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   236
					script = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   237
					script_executed(registry_item);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   238
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   239
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   240
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   241
			if (registry[script_obj.src].finished) return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   242
			if (!chain_opts[_AllowDuplicates]) registry[script_obj.src].finished = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   243
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   244
			script = registry_item.elem || document.createElement("script");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   245
			if (script_obj.type) script.type = script_obj.type;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   246
			if (script_obj.charset) script.charset = script_obj.charset;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   247
			create_script_load_listener(script,registry_item,"finished",preload_execute_finished);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   248
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   249
			// script elem was real-preloaded
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   250
			if (registry_item.elem) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   251
				registry_item.elem = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   252
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   253
			// script was XHR preloaded
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   254
			else if (registry_item.text) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   255
				script.onload = script.onreadystatechange = null;	// script injection doesn't fire these events
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   256
				script.text = registry_item.text;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   257
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   258
			// script was cache-preloaded
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   259
			else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   260
				script.src = script_obj.real_src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   261
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   262
			append_to.insertBefore(script,append_to.firstChild);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   263
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   264
			// manually fire execution callback for injected scripts, since events don't fire
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   265
			if (registry_item.text) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   266
				preload_execute_finished();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   267
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   268
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   269
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   270
		// process the script request setup
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   271
		function do_script(chain_opts,script_obj,chain_group,preload_this_script) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   272
			var registry_item,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   273
				registry_items,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   274
				ready_cb = function(){ script_obj.ready_cb(script_obj,function(){ execute_preloaded_script(chain_opts,script_obj,registry_item); }); },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   275
				finished_cb = function(){ script_obj.finished_cb(script_obj,chain_group); }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   276
			;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   277
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   278
			script_obj.src = canonical_uri(script_obj.src,chain_opts[_BasePath]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   279
			script_obj.real_src = script_obj.src + 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   280
				// append cache-bust param to URL?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   281
				(chain_opts[_CacheBust] ? ((/\?.*$/.test(script_obj.src) ? "&_" : "?_") + ~~(Math.random()*1E9) + "=") : "")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   282
			;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   283
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   284
			if (!registry[script_obj.src]) registry[script_obj.src] = {items:[],finished:false};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   285
			registry_items = registry[script_obj.src].items;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   286
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   287
			// allowing duplicates, or is this the first recorded load of this script?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   288
			if (chain_opts[_AllowDuplicates] || registry_items.length == 0) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   289
				registry_item = registry_items[registry_items.length] = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   290
					ready:false,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   291
					finished:false,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   292
					ready_listeners:[ready_cb],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   293
					finished_listeners:[finished_cb]
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   294
				};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   295
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   296
				request_script(chain_opts,script_obj,registry_item,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   297
					// which callback type to pass?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   298
					(
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   299
					 	(preload_this_script) ? // depends on script-preloading
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   300
						function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   301
							registry_item.ready = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   302
							for (var i=0; i<registry_item.ready_listeners.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   303
								registry_item.ready_listeners[i]();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   304
							}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   305
							registry_item.ready_listeners = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   306
						} :
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   307
						function(){ script_executed(registry_item); }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   308
					),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   309
					// signal if script-preloading should be used or not
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   310
					preload_this_script
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   311
				);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   312
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   313
			else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   314
				registry_item = registry_items[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   315
				if (registry_item.finished) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   316
					finished_cb();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   317
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   318
				else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   319
					registry_item.finished_listeners.push(finished_cb);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   320
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   321
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   322
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   323
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   324
		// creates a closure for each separate chain spawned from this $LAB instance, to keep state cleanly separated between chains
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   325
		function create_chain() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   326
			var chainedAPI,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   327
				chain_opts = merge_objs(global_defaults,{}),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   328
				chain = [],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   329
				exec_cursor = 0,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   330
				scripts_currently_loading = false,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   331
				group
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   332
			;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   333
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   334
			// called when a script has finished preloading
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   335
			function chain_script_ready(script_obj,exec_trigger) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   336
				/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("script preload finished: "+script_obj.real_src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   337
				script_obj.ready = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   338
				script_obj.exec_trigger = exec_trigger;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   339
				advance_exec_cursor(); // will only check for 'ready' scripts to be executed
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   340
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   341
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   342
			// called when a script has finished executing
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   343
			function chain_script_executed(script_obj,chain_group) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   344
				/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("script execution finished: "+script_obj.real_src);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   345
				script_obj.ready = script_obj.finished = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   346
				script_obj.exec_trigger = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   347
				// check if chain group is all finished
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   348
				for (var i=0; i<chain_group.scripts.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   349
					if (!chain_group.scripts[i].finished) return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   350
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   351
				// chain_group is all finished if we get this far
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   352
				chain_group.finished = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   353
				advance_exec_cursor();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   354
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   355
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   356
			// main driver for executing each part of the chain
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   357
			function advance_exec_cursor() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   358
				while (exec_cursor < chain.length) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   359
					if (is_func(chain[exec_cursor])) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   360
						/*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("$LAB.wait() executing: "+chain[exec_cursor]);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   361
						try { chain[exec_cursor++](); } catch (err) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   362
							/*!START_DEBUG*/if (chain_opts[_Debug]) log_error("$LAB.wait() error caught: ",err);/*!END_DEBUG*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   363
						}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   364
						continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   365
					}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   366
					else if (!chain[exec_cursor].finished) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   367
						if (check_chain_group_scripts_ready(chain[exec_cursor])) continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   368
						break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   369
					}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   370
					exec_cursor++;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   371
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   372
				// we've reached the end of the chain (so far)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   373
				if (exec_cursor == chain.length) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   374
					scripts_currently_loading = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   375
					group = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   376
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   377
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   378
			
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   379
			// setup next chain script group
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   380
			function init_script_chain_group() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   381
				if (!group || !group.scripts) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   382
					chain.push(group = {scripts:[],finished:true});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   383
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   384
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   385
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   386
			// API for $LAB chains
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   387
			chainedAPI = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   388
				// start loading one or more scripts
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   389
				script:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   390
					for (var i=0; i<arguments.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   391
						(function(script_obj,script_list){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   392
							var splice_args;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   393
							
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   394
							if (!is_array(script_obj)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   395
								script_list = [script_obj];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   396
							}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   397
							for (var j=0; j<script_list.length; j++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   398
								init_script_chain_group();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   399
								script_obj = script_list[j];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   400
								
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   401
								if (is_func(script_obj)) script_obj = script_obj();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   402
								if (!script_obj) continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   403
								if (is_array(script_obj)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   404
									// set up an array of arguments to pass to splice()
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   405
									splice_args = [].slice.call(script_obj); // first include the actual array elements we want to splice in
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   406
									splice_args.unshift(j,1); // next, put the `index` and `howMany` parameters onto the beginning of the splice-arguments array
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   407
									[].splice.apply(script_list,splice_args); // use the splice-arguments array as arguments for splice()
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   408
									j--; // adjust `j` to account for the loop's subsequent `j++`, so that the next loop iteration uses the same `j` index value
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   409
									continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   410
								}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   411
								if (typeof script_obj == "string") script_obj = {src:script_obj};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   412
								script_obj = merge_objs(script_obj,{
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   413
									ready:false,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   414
									ready_cb:chain_script_ready,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   415
									finished:false,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   416
									finished_cb:chain_script_executed
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   417
								});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   418
								group.finished = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   419
								group.scripts.push(script_obj);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   420
								
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   421
								do_script(chain_opts,script_obj,group,(can_use_preloading && scripts_currently_loading));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   422
								scripts_currently_loading = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   423
								
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   424
								if (chain_opts[_AlwaysPreserveOrder]) chainedAPI.wait();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   425
							}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   426
						})(arguments[i],arguments[i]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   427
					}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   428
					return chainedAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   429
				},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   430
				// force LABjs to pause in execution at this point in the chain, until the execution thus far finishes, before proceeding
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   431
				wait:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   432
					if (arguments.length > 0) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   433
						for (var i=0; i<arguments.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   434
							chain.push(arguments[i]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   435
						}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   436
						group = chain[chain.length-1];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   437
					}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   438
					else group = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   439
					
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   440
					advance_exec_cursor();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   441
					
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   442
					return chainedAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   443
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   444
			};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   445
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   446
			// the first chain link API (includes `setOptions` only this first time)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   447
			return {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   448
				script:chainedAPI.script, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   449
				wait:chainedAPI.wait, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   450
				setOptions:function(opts){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   451
					merge_objs(opts,chain_opts);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   452
					return chainedAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   453
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   454
			};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   455
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   456
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   457
		// API for each initial $LAB instance (before chaining starts)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   458
		instanceAPI = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   459
			// main API functions
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   460
			setGlobalDefaults:function(opts){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   461
				merge_objs(opts,global_defaults);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   462
				return instanceAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   463
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   464
			setOptions:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   465
				return create_chain().setOptions.apply(null,arguments);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   466
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   467
			script:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   468
				return create_chain().script.apply(null,arguments);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   469
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   470
			wait:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   471
				return create_chain().wait.apply(null,arguments);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   472
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   473
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   474
			// built-in queuing for $LAB `script()` and `wait()` calls
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   475
			// useful for building up a chain programmatically across various script locations, and simulating
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   476
			// execution of the chain
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   477
			queueScript:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   478
				queue[queue.length] = {type:"script", args:[].slice.call(arguments)};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   479
				return instanceAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   480
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   481
			queueWait:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   482
				queue[queue.length] = {type:"wait", args:[].slice.call(arguments)};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   483
				return instanceAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   484
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   485
			runQueue:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   486
				var $L = instanceAPI, len=queue.length, i=len, val;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   487
				for (;--i>=0;) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   488
					val = queue.shift();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   489
					$L = $L[val.type].apply(null,val.args);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   490
				}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   491
				return $L;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   492
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   493
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   494
			// rollback `[global].$LAB` to what it was before this file was loaded, the return this current instance of $LAB
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   495
			noConflict:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   496
				global.$LAB = _$LAB;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   497
				return instanceAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   498
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   499
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   500
			// create another clean instance of $LAB
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   501
			sandbox:function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   502
				return create_sandbox();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   503
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   504
		};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   505
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   506
		return instanceAPI;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   507
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   508
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   509
	// create the main instance of $LAB
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   510
	global.$LAB = create_sandbox();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   511
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   512
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   513
	/* The following "hack" was suggested by Andrea Giammarchi and adapted from: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   514
	   NOTE: this hack only operates in FF and then only in versions where document.readyState is not present (FF < 3.6?).
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   515
	   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   516
	   The hack essentially "patches" the **page** that LABjs is loaded onto so that it has a proper conforming document.readyState, so that if a script which does 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   517
	   proper and safe dom-ready detection is loaded onto a page, after dom-ready has passed, it will still be able to detect this state, by inspecting the now hacked 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   518
	   document.readyState property. The loaded script in question can then immediately trigger any queued code executions that were waiting for the DOM to be ready. 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   519
	   For instance, jQuery 1.4+ has been patched to take advantage of document.readyState, which is enabled by this hack. But 1.3.2 and before are **not** safe or 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   520
	   fixed by this hack, and should therefore **not** be lazy-loaded by script loader tools such as LABjs.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   521
	*/ 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   522
	(function(addEvent,domLoaded,handler){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   523
		if (document.readyState == null && document[addEvent]){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   524
			document.readyState = "loading";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   525
			document[addEvent](domLoaded,handler = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   526
				document.removeEventListener(domLoaded,handler,false);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   527
				document.readyState = "complete";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   528
			},false);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   529
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   530
	})("addEventListener","DOMContentLoaded");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   531
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   532
})(this);/*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   533
  mustache.js — Logic-less templates in JavaScript
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   534
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   535
  See http://mustache.github.com/ for more info.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   536
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   537
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   538
var Mustache = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   539
  var Renderer = function() {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   540
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   541
  Renderer.prototype = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   542
    otag: "{{",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   543
    ctag: "}}",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   544
    pragmas: {},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   545
    buffer: [],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   546
    pragmas_implemented: {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   547
      "IMPLICIT-ITERATOR": true
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   548
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   549
    context: {},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   550
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   551
    render: function(template, context, partials, in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   552
      // reset buffer & set context
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   553
      if(!in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   554
        this.context = context;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   555
        this.buffer = []; // TODO: make this non-lazy
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   556
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   557
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   558
      // fail fast
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   559
      if(!this.includes("", template)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   560
        if(in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   561
          return template;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   562
        } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   563
          this.send(template);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   564
          return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   565
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   566
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   567
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   568
      template = this.render_pragmas(template);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   569
      var html = this.render_section(template, context, partials);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   570
      if(in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   571
        return this.render_tags(html, context, partials, in_recursion);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   572
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   573
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   574
      this.render_tags(html, context, partials, in_recursion);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   575
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   576
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   577
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   578
      Sends parsed lines
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   579
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   580
    send: function(line) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   581
      if(line !== "") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   582
        this.buffer.push(line);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   583
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   584
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   585
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   586
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   587
      Looks for %PRAGMAS
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   588
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   589
    render_pragmas: function(template) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   590
      // no pragmas
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   591
      if(!this.includes("%", template)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   592
        return template;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   593
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   594
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   595
      var that = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   596
      var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   597
            this.ctag, "g");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   598
      return template.replace(regex, function(match, pragma, options) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   599
        if(!that.pragmas_implemented[pragma]) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   600
          throw({message: 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   601
            "This implementation of mustache doesn't understand the '" +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   602
            pragma + "' pragma"});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   603
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   604
        that.pragmas[pragma] = {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   605
        if(options) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   606
          var opts = options.split("=");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   607
          that.pragmas[pragma][opts[0]] = opts[1];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   608
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   609
        return "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   610
        // ignore unknown pragmas silently
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   611
      });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   612
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   613
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   614
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   615
      Tries to find a partial in the curent scope and render it
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   616
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   617
    render_partial: function(name, context, partials) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   618
      name = this.trim(name);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   619
      if(!partials || partials[name] === undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   620
        throw({message: "unknown_partial '" + name + "'"});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   621
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   622
      if(typeof(context[name]) != "object") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   623
        return this.render(partials[name], context, partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   624
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   625
      return this.render(partials[name], context[name], partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   626
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   627
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   628
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   629
      Renders inverted (^) and normal (#) sections
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   630
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   631
    render_section: function(template, context, partials) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   632
      if(!this.includes("#", template) && !this.includes("^", template)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   633
        return template;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   634
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   635
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   636
      var that = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   637
      // CSW - Added "+?" so it finds the tighest bound, not the widest
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   638
      var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   639
              "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   640
              "\\s*", "mg");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   641
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   642
      // for each {{#foo}}{{/foo}} section do...
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   643
      return template.replace(regex, function(match, type, name, content) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   644
        var value = that.find(name, context);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   645
        if(type == "^") { // inverted section
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   646
          if(!value || that.is_array(value) && value.length === 0) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   647
            // false or empty list, render it
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   648
            return that.render(content, context, partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   649
          } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   650
            return "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   651
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   652
        } else if(type == "#") { // normal section
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   653
          if(that.is_array(value)) { // Enumerable, Let's loop!
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   654
            return that.map(value, function(row) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   655
              return that.render(content, that.create_context(row),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   656
                partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   657
            }).join("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   658
          } else if(that.is_object(value)) { // Object, Use it as subcontext!
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   659
            return that.render(content, that.create_context(value),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   660
              partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   661
          } else if(typeof value === "function") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   662
            // higher order section
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   663
            return value.call(context, content, function(text) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   664
              return that.render(text, context, partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   665
            });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   666
          } else if(value) { // boolean section
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   667
            return that.render(content, context, partials, true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   668
          } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   669
            return "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   670
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   671
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   672
      });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   673
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   674
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   675
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   676
      Replace {{foo}} and friends with values from our view
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   677
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   678
    render_tags: function(template, context, partials, in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   679
      // tit for tat
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   680
      var that = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   681
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   682
      var new_regex = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   683
        return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   684
          that.ctag + "+", "g");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   685
      };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   686
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   687
      var regex = new_regex();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   688
      var tag_replace_callback = function(match, operator, name) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   689
        switch(operator) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   690
        case "!": // ignore comments
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   691
          return "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   692
        case "=": // set new delimiters, rebuild the replace regexp
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   693
          that.set_delimiters(name);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   694
          regex = new_regex();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   695
          return "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   696
        case ">": // render partial
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   697
          return that.render_partial(name, context, partials);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   698
        case "{": // the triple mustache is unescaped
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   699
          return that.find(name, context);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   700
        default: // escape the value
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   701
          return that.escape(that.find(name, context));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   702
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   703
      };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   704
      var lines = template.split("\n");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   705
      for(var i = 0; i < lines.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   706
        lines[i] = lines[i].replace(regex, tag_replace_callback, this);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   707
        if(!in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   708
          this.send(lines[i]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   709
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   710
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   711
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   712
      if(in_recursion) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   713
        return lines.join("\n");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   714
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   715
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   716
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   717
    set_delimiters: function(delimiters) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   718
      var dels = delimiters.split(" ");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   719
      this.otag = this.escape_regex(dels[0]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   720
      this.ctag = this.escape_regex(dels[1]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   721
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   722
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   723
    escape_regex: function(text) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   724
      // thank you Simon Willison
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   725
      if(!arguments.callee.sRE) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   726
        var specials = [
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   727
          '/', '.', '*', '+', '?', '|',
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   728
          '(', ')', '[', ']', '{', '}', '\\'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   729
        ];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   730
        arguments.callee.sRE = new RegExp(
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   731
          '(\\' + specials.join('|\\') + ')', 'g'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   732
        );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   733
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   734
      return text.replace(arguments.callee.sRE, '\\$1');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   735
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   736
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   737
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   738
      find `name` in current `context`. That is find me a value
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   739
      from the view object
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   740
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   741
    find: function(name, context) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   742
      name = this.trim(name);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   743
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   744
      // Checks whether a value is thruthy or false or 0
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   745
      function is_kinda_truthy(bool) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   746
        return bool === false || bool === 0 || bool;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   747
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   748
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   749
      var value;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   750
      if(is_kinda_truthy(context[name])) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   751
        value = context[name];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   752
      } else if(is_kinda_truthy(this.context[name])) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   753
        value = this.context[name];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   754
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   755
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   756
      if(typeof value === "function") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   757
        return value.apply(context);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   758
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   759
      if(value !== undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   760
        return value;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   761
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   762
      // silently ignore unkown variables
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   763
      return "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   764
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   765
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   766
    // Utility methods
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   767
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   768
    /* includes tag */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   769
    includes: function(needle, haystack) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   770
      return haystack.indexOf(this.otag + needle) != -1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   771
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   772
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   773
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   774
      Does away with nasty characters
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   775
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   776
    escape: function(s) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   777
      s = String(s === null ? "" : s);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   778
      return s.replace(/&(?!\w+;)|["'<>\\]/g, function(s) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   779
        switch(s) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   780
        case "&": return "&amp;";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   781
        case "\\": return "\\\\";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   782
        case '"': return '&quot;';
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   783
        case "'": return '&#39;';
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   784
        case "<": return "&lt;";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   785
        case ">": return "&gt;";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   786
        default: return s;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   787
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   788
      });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   789
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   790
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   791
    // by @langalex, support for arrays of strings
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   792
    create_context: function(_context) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   793
      if(this.is_object(_context)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   794
        return _context;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   795
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   796
        var iterator = ".";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   797
        if(this.pragmas["IMPLICIT-ITERATOR"]) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   798
          iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   799
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   800
        var ctx = {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   801
        ctx[iterator] = _context;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   802
        return ctx;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   803
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   804
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   805
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   806
    is_object: function(a) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   807
      return a && typeof a == "object";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   808
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   809
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   810
    is_array: function(a) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   811
      return Object.prototype.toString.call(a) === '[object Array]';
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   812
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   813
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   814
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   815
      Gets rid of leading and trailing whitespace
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   816
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   817
    trim: function(s) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   818
      return s.replace(/^\s*|\s*$/g, "");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   819
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   820
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   821
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   822
      Why, why, why? Because IE. Cry, cry cry.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   823
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   824
    map: function(array, fn) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   825
      if (typeof array.map == "function") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   826
        return array.map(fn);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   827
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   828
        var r = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   829
        var l = array.length;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   830
        for(var i = 0; i < l; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   831
          r.push(fn(array[i]));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   832
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   833
        return r;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   834
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   835
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   836
  };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   837
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   838
  return({
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   839
    name: "mustache.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   840
    version: "0.3.1-dev",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   841
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   842
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   843
      Turns a template and view into HTML
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   844
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   845
    to_html: function(template, view, partials, send_fun) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   846
      var renderer = new Renderer();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   847
      if(send_fun) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   848
        renderer.send = send_fun;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   849
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   850
      renderer.render(template, view, partials);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   851
      if(!send_fun) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   852
        return renderer.buffer.join("\n");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   853
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   854
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   855
  });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   856
}();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   857
// Underscore.js 1.2.3
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   858
// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   859
// Underscore is freely distributable under the MIT license.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   860
// Portions of Underscore are inspired or borrowed from Prototype,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   861
// Oliver Steele's Functional, and John Resig's Micro-Templating.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   862
// For all details and documentation:
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   863
// http://documentcloud.github.com/underscore
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   864
(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   865
c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   866
h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.concat,H=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,I=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   867
define.amd?define("underscore",function(){return b}):s._=b;b.VERSION="1.2.3";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   868
c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   869
c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   870
b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});return e};var D=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   871
d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   872
computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   873
function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   874
1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   875
[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   876
c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   877
var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   878
c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   879
a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=G.apply([a],arguments);return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   880
function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=I||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   881
1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   882
Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)==
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   883
"[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),function(c){J(c,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   884
b[c]=a[c])})};var K=0;b.uniqueId=function(a){var b=K++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   885
"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},J=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);H.call(a,this._wrapped);return u(c.apply(b,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   886
a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   887
/* main file */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   888
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   889
if ( window.IriSP === undefined && window.__IriSP === undefined ) { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   890
	var IriSP = {}; 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   891
	var __IriSP = IriSP; /* for backward compatibility */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   892
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   893
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   894
IriSP.loadLibs = function( libs, config, metadata_url, callback ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   895
    // Localize jQuery variable
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   896
		IriSP.jQuery = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   897
    var $L = $LAB.script(libs.jQuery).script(libs.swfObject)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   898
                .script(libs.jQueryUI)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   899
                                   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   900
    if (config.player.type === "jwplayer") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   901
      // load our popcorn.js lookalike
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   902
      $L = $L.script(libs.jwplayer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   903
    } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   904
      // load the real popcorn
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   905
      $L = $L.script(libs.popcorn).script(libs["popcorn.code"]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   906
      if (config.player.type === "youtube") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   907
        $L = $L.script(libs["popcorn.youtube"]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   908
      } 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   909
      if (config.player.type === "vimeo")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   910
        $L = $L.script(libs["popcorn.vimeo"]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   911
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   912
      /* do nothing for html5 */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   913
    }       
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   914
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   915
    /* widget specific requirements */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   916
    for (var idx in config.gui.widgets) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   917
      if (config.gui.widgets[idx].type === "PolemicWidget") {        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   918
        $L.script(libs.raphael);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   919
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   920
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   921
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   922
    // same for modules
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   923
    /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   924
    for (var idx in config.modules) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   925
      if (config.modules[idx].type === "PolemicWidget")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   926
        $L.script(libs.raphaelJs);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   927
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   928
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   929
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   930
    $L.wait(function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   931
      IriSP.jQuery = window.jQuery.noConflict( true );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   932
      IriSP._ = window._.noConflict();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   933
      IriSP.underscore = IriSP._;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   934
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   935
      var css_link_jquery = IriSP.jQuery( "<link>", { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   936
        rel: "stylesheet", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   937
        type: "text/css", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   938
        href: libs.cssjQueryUI,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   939
        'class': "dynamic_css"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   940
      } );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   941
      var css_link_custom = IriSP.jQuery( "<link>", { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   942
        rel: "stylesheet", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   943
        type: "text/css", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   944
        href: config.gui.css,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   945
        'class': "dynamic_css"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   946
      } );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   947
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   948
      css_link_jquery.appendTo('head');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   949
      css_link_custom.appendTo('head');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   950
          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   951
      IriSP.setupDataLoader();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   952
      IriSP.__dataloader.get(metadata_url, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   953
          function(data) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   954
            /* save the data so that we could re-use it to
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   955
               configure the video
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   956
            */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   957
            IriSP.__jsonMetadata = data;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   958
            callback.call(window) });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   959
    });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   960
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   961
IriSP.annotation_template = "{{! template for an annotation displayed in a segmentWidget }}<div title='{{divTitle}}' id='{{id}}'	class='Ldt-iri-chapter' 	style='left: {{startPixel}}px;          width: {{pxWidth}}px;          background-color:#{{hexa_color}};' 	></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   962
IriSP.annotationWidget_template = "{{! template for the annotation widget }}<div class='Ldt-AnnotationsWidget'>  <!-- ugly div because we want to have a double border -->  <div class='Ldt-Annotation-DoubleBorder'>      <div class='Ldt-AnnotationContent'>        <div class='Ldt-AnnotationShareIcons'>         <a class='Ldt-fbShare' href=''><img src='{{img_dir}}/facebook.png' alt='share on facebook'></img></a>         <a class='Ldt-TwShare' href=''><img src='{{img_dir}}/twitter.png' alt='share on twitter'></img></a>         <a class='Ldt-GplusShare' href=''><img src='{{img_dir}}/google.png' alt='share on google+'></img></a>      </div>		  <div class='Ldt-SaTitle'></div>	  	<div class='Ldt-SaDescription'></div>    </div>  </div></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   963
IriSP.annotation_loading_template = "{{! template shown while the annotation widget is loading }}<div id='Ldt-load-container'><div id='Ldt-loader'>&nbsp;</div> Chargement... </div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   964
IriSP.arrowWidget_template = "<div class='Ldt-arrowWidget'></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   965
IriSP.overlay_marker_template = "{{! the template for the small bars which is z-indexed over our segment widget }}<div class='Ldt-SegmentPositionMarker' style='background-color: #F7268E;'></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   966
IriSP.player_template = "{{! template for the radio player }}<div class='Ldt-controler demo'>	<div class='Ldt-LeftPlayerControls'>    <div class='Ldt-button Ldt-CtrlPlay'></div>		<div class='Ldt-button Ldt-CtrlAnnotate'></div>    <div class='Ldt-button Ldt-CtrlSearch'></div>	</div>		<div class='Ldt-RightPlayerControls'>    <div class='Ldt-Time'>      <div class='Ldt-ElapsedTime'></div>      <div class='Ldt-TimeSeparator'>/</div>      <div class='Ldt-TotalTime'></div>    </div>		<div class='Ldt-button Ldt-CtrlSound'></div>	</div></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   967
IriSP.search_template = "{{! template for the search container }}<div class='LdtSearchContainer'	style='margin-left: {{margin_left}}; position: absolute; margin-top: -60px;'>	<div class='LdtSearch'		style='display: none; background-color: #EEE; width: 165px; boder: 1px; border-color: #CFCFCF; position: absolute; text-align: center;'>		<input class='LdtSearchInput'			style='margin-top: 2px; margin-bottom: 2px;' />	</div></div><div class='cleaner'></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   968
IriSP.share_template = "{{! social network sharing template }}<a onclick='__IriSP.MyApiPlayer.share(\'delicious\');' title='partager avec delicious'><span class='share shareDelicious'>&nbsp;</span></a>		<a onclick='__IriSP.MyApiPlayer.share(\'facebook\');' title='partager avec facebook'> <span class='share shareFacebook'>&nbsp;</span></a><a onclick='__IriSP.MyApiPlayer.share(\'twitter\');' title='partager avec twitter'>  <span class='share shareTwitter'>&nbsp;</span></a><a onclick='__IriSP.MyApiPlayer.share(\'myspace\');' title='partager avec Myspace'>  <span class='share shareMySpace'>&nbsp;</span></a>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   969
IriSP.sliderWidget_template = "{{! template for the slider widget - it's composed of two divs we one overlayed on top    of the other }}<div class='Ldt-sliderBackground'></div><div class='Ldt-sliderForeground'></div><div class='Ldt-sliderPositionMarker'></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   970
IriSP.tooltip_template = "{{! template used by the jquery ui tooltip }}<div class='Ldt-tooltip'>  <div class='title'>{{title}}</div>  <div class='time'>{{begin}} : {{end}} </div>  <div class='description'>{{description}}</div></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   971
IriSP.tooltipWidget_template = "{{! template for the tooltip widget }}<div class='tip'>	<div class='tipcolor' style='height:10px;width:10px'></div>	<div class='tiptext'></div>";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   972
IriSP.tweetWidget_template = "{{! template for the tweet widget }}<div class='Ldt-tweetWidget'>  <div class='Ldt-tweet-DoubleBorder'>      <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetKeepOpen' alt='dont minimize automatically'></img>      <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetMinimize' alt='minimize window'></img>      <div class='Ldt-tweetAvatar'></div>      <img src='{{img_dir}}/profile_arrow.png' class='Ldt-tweetAvatar-profileArrow'></img>      <div class='Ldt-tweetContents'></div>      <a href='' target='_blank' class='Ldt-Retweet'><div class='Ldt-RetweetIcon'></div> - Retweet </a>      <a href='' target='_blank' class='Ldt-TweetReply'><div class='Ldt-TweetReplyIcon'></div> - Reply</a>  </div></div>";/* wrapper that simulates popcorn.js because
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   973
   popcorn is a bit unstable at the time */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   974
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   975
IriSP.PopcornReplacement = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   976
  msgPump : {} /* used by jquery to receive and send messages */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   977
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   978
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   979
IriSP.PopcornReplacement.media = { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   980
  "paused": true,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   981
  "muted": false
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   982
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   983
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   984
IriSP.PopcornReplacement.listen = function(msg, callback) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   985
//  IriSP.jQuery(IriSP.PopcornReplacement.msgPump).bind(msg, function(event, rest) { callback(rest); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   986
  if (!IriSP.PopcornReplacement.msgPump.hasOwnProperty(msg))
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   987
    IriSP.PopcornReplacement.msgPump[msg] = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   988
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   989
  IriSP.PopcornReplacement.msgPump[msg].push(callback);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   990
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   991
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   992
IriSP.PopcornReplacement.trigger = function(msg, params) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   993
//  IriSP.jQuery(IriSP.PopcornReplacement.msgPump).trigger(msg, params);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   994
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   995
  if (!IriSP.PopcornReplacement.msgPump.hasOwnProperty(msg))
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   996
    return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   997
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   998
  var d = IriSP.PopcornReplacement.msgPump[msg];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
   999
  for(var entry in d) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1000
    d[entry].call(window, params);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1001
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1002
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1003
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1004
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1005
IriSP.PopcornReplacement.guid = function(prefix) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1006
  var str = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1007
      var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1008
      return v.toString(16);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1009
   });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1010
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1011
  return prefix + str;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1012
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1013
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1014
IriSP.PopcornReplacement.__initApi = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1015
  IriSP.PopcornReplacement.trigger("loadedmetadata"); // we've done more than loading metadata of course,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1016
                                                      // but popcorn doesn't need to know more.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1017
  IriSP.PopcornReplacement.media.muted = jwplayer(IriSP.PopcornReplacement._container).getMute();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1018
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1019
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1020
IriSP.PopcornReplacement.jwplayer = function(container, options) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1021
  IriSP.PopcornReplacement._container = container.slice(1); //eschew the '#'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1022
  options.events = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1023
      onReady: IriSP.PopcornReplacement.__initApi,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1024
      onTime: IriSP.PopcornReplacement.__timeHandler,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1025
      onPlay: IriSP.PopcornReplacement.__playHandler,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1026
      onPause: IriSP.PopcornReplacement.__pauseHandler,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1027
      onSeek: IriSP.PopcornReplacement.__seekHandler 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1028
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1029
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1030
  jwplayer(IriSP.PopcornReplacement._container).setup(options);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1031
  IriSP.PopcornReplacement.media.duration = options.duration;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1032
  return IriSP.PopcornReplacement;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1033
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1034
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1035
IriSP.PopcornReplacement.currentTime = function(time) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1036
  if (typeof(time) === "undefined") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1037
      return jwplayer(IriSP.PopcornReplacement._container).getPosition();            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1038
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1039
     var currentTime = +time;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1040
     jwplayer( IriSP.PopcornReplacement._container ).seek( currentTime );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1041
     IriSP.PopcornReplacement.trigger("seeked");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1042
     return jwplayer(IriSP.PopcornReplacement._container).getPosition();            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1043
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1044
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1045
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1046
IriSP.PopcornReplacement.play = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1047
      IriSP.PopcornReplacement.media.paused = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1048
      IriSP.PopcornReplacement.trigger("play");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1049
//      IriSP.PopcornReplacement.trigger("playing");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1050
      jwplayer( IriSP.PopcornReplacement._container ).play();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1051
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1052
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1053
IriSP.PopcornReplacement.pause = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1054
      if ( !IriSP.PopcornReplacement.media.paused ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1055
        IriSP.PopcornReplacement.media.paused = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1056
        IriSP.PopcornReplacement.trigger( "pause" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1057
        jwplayer( IriSP.PopcornReplacement._container ).pause();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1058
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1059
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1060
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1061
IriSP.PopcornReplacement.muted = function(val) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1062
  if (typeof(val) !== "undefined") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1063
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1064
    if (jwplayer(IriSP.PopcornReplacement._container).getMute() !== val) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1065
      if (val) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1066
        jwplayer(IriSP.PopcornReplacement._container).setMute(true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1067
        IriSP.PopcornReplacement.media.muted = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1068
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1069
        jwplayer( IriSP.PopcornReplacement._container ).setMute(false);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1070
        IriSP.PopcornReplacement.media.muted = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1071
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1072
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1073
      IriSP.PopcornReplacement.trigger( "volumechange" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1074
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1075
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1076
    return jwplayer( IriSP.PopcornReplacement._container ).getMute();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1077
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1078
    return jwplayer( IriSP.PopcornReplacement._container ).getMute();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1079
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1080
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1081
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1082
IriSP.PopcornReplacement.mute = IriSP.PopcornReplacement.muted;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1083
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1084
IriSP.PopcornReplacement.__codes = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1085
IriSP.PopcornReplacement.code = function(options) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1086
  IriSP.PopcornReplacement.__codes.push(options);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1087
  return IriSP.PopcornReplacement;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1088
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1089
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1090
IriSP.PopcornReplacement.__runCode = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1091
  var currentTime = jwplayer(IriSP.PopcornReplacement._container).getPosition();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1092
  var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1093
  for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1094
    var c = IriSP.PopcornReplacement.__codes[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1095
    if (currentTime == c.start) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1096
      c.onStart();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1097
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1098
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1099
    if (currentTime == c.end) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1100
      c.onEnd();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1101
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1102
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1103
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1104
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1105
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1106
/* called everytime the player updates itself 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1107
   (onTime event)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1108
 */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1109
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1110
IriSP.PopcornReplacement.__timeHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1111
  var pos = event.position;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1112
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1113
  var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1114
  for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1115
     var c = IriSP.PopcornReplacement.__codes[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1116
     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1117
     if (pos >= c.start && pos < c.end && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1118
         pos - 0.1 <= c.start) {       
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1119
        c.onStart();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1120
     }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1121
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1122
     if (pos > c.start && pos > c.end && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1123
         pos - 0.1 <= c.end) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1124
         console.log("eonedn");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1125
        c.onEnd();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1126
     }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1127
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1128
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1129
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1130
  IriSP.PopcornReplacement.trigger("timeupdate");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1131
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1132
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1133
IriSP.PopcornReplacement.__seekHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1134
  var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1135
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1136
  for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1137
     var c = IriSP.PopcornReplacement.__codes[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1138
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1139
     if (event.position >= c.start && event.position < c.end) {        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1140
        c.onEnd();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1141
     }         
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1142
   }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1143
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1144
   for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1145
     var c = IriSP.PopcornReplacement.__codes[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1146
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1147
     if (typeof(event.offset) === "undefined")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1148
       event.offset = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1149
           
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1150
     if (event.offset >= c.start && event.offset < c.end) { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1151
       c.onStart();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1152
     }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1153
     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1154
   }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1155
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1156
  IriSP.PopcornReplacement.trigger("timeupdate");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1157
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1158
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1159
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1160
IriSP.PopcornReplacement.__playHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1161
  IriSP.PopcornReplacement.media.paused = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1162
  IriSP.PopcornReplacement.trigger("play");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1163
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1164
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1165
IriSP.PopcornReplacement.__pauseHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1166
  IriSP.PopcornReplacement.media.paused = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1167
  IriSP.PopcornReplacement.trigger("pause");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1168
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1169
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1170
IriSP.PopcornReplacement.roundTime = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1171
  var currentTime = IriSP.PopcornReplacement.currentTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1172
  return Math.round(currentTime);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1173
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1174
/* utils.js - various utils that don't belong anywhere else */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1175
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1176
/* trace function, for debugging */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1177
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1178
IriSP.traceNum = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1179
IriSP.trace = function( msg, value ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1180
/*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1181
	if( IriSP.config.gui.debug === true ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1182
		IriSP.traceNum += 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1183
		IriSP.jQuery( "<div>"+IriSP.traceNum+" - "+msg+" : "+value+"</div>" ).appendTo( "#Ldt-output" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1184
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1185
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1186
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1187
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1188
/* used in callbacks - because in callbacks we lose "this",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1189
   we need to have a special function which wraps "this" in 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1190
   a closure. This way, the 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1191
*/   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1192
IriSP.wrap = function (obj, fn) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1193
  return function() {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1194
    var args = Array.prototype.slice.call(arguments, 0);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1195
    return fn.apply(obj, args);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1196
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1197
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1198
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1199
/* convert a time to a percentage in the media */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1200
IriSP.timeToPourcent = function(time, timetotal){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1201
	var time = Math.abs(time);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1202
  var timetotal = Math.abs(timetotal);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1203
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1204
	return Math.floor((time/timetotal) * 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1205
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1206
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1207
IriSP.padWithZeros = function(num) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1208
  if (Math.abs(num) < 10) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1209
    return "0" + num.toString();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1210
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1211
    return num.toString();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1212
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1213
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1214
/* convert a number of seconds to a tuple of the form 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1215
   [hours, minutes, seconds]
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1216
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1217
IriSP.secondsToTime = function(secs) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1218
  var hours = Math.abs(parseInt( secs / 3600 ) % 24);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1219
  var minutes = Math.abs(parseInt( secs / 60 ) % 60);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1220
  var seconds = parseFloat(Math.abs(secs % 60).toFixed(0));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1221
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1222
  var toString_fn = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1223
    var ret = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1224
    if (hours > 0)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1225
       ret = IriSP.padWithZeros(this.hours) + ":";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1226
    ret += IriSP.padWithZeros(this.minutes) + ":" + IriSP.padWithZeros(this.seconds);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1227
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1228
    return ret;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1229
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1230
  return {"hours" : hours, "minutes" : minutes, "seconds" : seconds, toString: toString_fn};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1231
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1232
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1233
IriSP.secondsToString
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1234
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1235
/* format a tweet - replaces @name by a link to the profile, #hashtag, etc. */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1236
IriSP.formatTweet = function(tweet) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1237
  /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1238
    an array of arrays which hold a regexp and its replacement.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1239
  */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1240
  var regExps = [
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1241
    /* copied from http://codegolf.stackexchange.com/questions/464/shortest-url-regex-match-in-javascript/480#480 */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1242
    [/((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi, "<a href='$1'>$1</a>"],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1243
    [/@(\w+)/gi, "<a href='http://twitter.com/$1'>@$1</a>"], // matches a @handle
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1244
    [/#(\w+)/gi, "<a href='http://twitter.com/search?q=%23$1'>#$1</a>"],// matches a hashtag
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1245
    [/(\+\+)/gi, "<span class='Ldt-PolemicPlusPlus'>$1</span>"],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1246
    [/(--)/gi, "<span class='Ldt-PolemicMinusMinus'>$1</span>"],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1247
    [/(==)/gi, "<span class='Ldt-PolemicEqualEqual'>$1</span>"],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1248
    [/(\?\?)/gi, "<span class='Ldt-PolemicQuestion'>$1</span>"]
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1249
  ]; 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1250
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1251
  var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1252
  for(i = 0; i < regExps.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1253
     tweet = tweet.replace(regExps[i][0], regExps[i][1]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1254
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1255
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1256
  return tweet;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1257
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1258
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1259
IriSP.countProperties = function(obj) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1260
    var count = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1261
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1262
    for(var prop in obj) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1263
        if(obj.hasOwnProperty(prop))
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1264
                ++count;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1265
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1266
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1267
    return count;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1268
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1269
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1270
// conversion de couleur Decimal vers HexaDecimal || 000 si fff
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1271
IriSP.DEC_HEXA_COLOR = function (dec) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1272
	 var hexa='0123456789ABCDEF';
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1273
   var hex='';
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1274
	 var tmp;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1275
	 while (dec>15){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1276
		  tmp = dec-(Math.floor(dec/16))*16;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1277
		  hex = hexa.charAt(tmp)+hex;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1278
		  dec = Math.floor(dec/16);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1279
	 }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1280
	 hex = hexa.charAt(dec)+hex;	 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1281
	 return(hex);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1282
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1283
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1284
/* shortcut to have global variables in templates */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1285
IriSP.templToHTML = function(template, values) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1286
  var params = IriSP.jQuery.extend(IriSP.default_templates_vars, values);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1287
  return Mustache.to_html(template, params);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1288
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1289
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1290
/* we need to be stricter than encodeURIComponent,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1291
   because of twitter
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1292
*/  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1293
IriSP.encodeURI = function(str) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1294
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1295
                                 replace(/\)/g, '%29').replace(/\*/g, '%2A');  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1296
}  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1297
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1298
IriSP.__guidCounter = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1299
IriSP.guid = function(prefix) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1300
  IriSP.__guidCounter += 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1301
  return prefix + IriSP.__guidCounter;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1302
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1303
/* for ie compatibility
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1304
if (Object.prototype.__defineGetter__&&!Object.defineProperty) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1305
   Object.defineProperty=function(obj,prop,desc) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1306
      if ("get" in desc) obj.__defineGetter__(prop,desc.get);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1307
      if ("set" in desc) obj.__defineSetter__(prop,desc.set);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1308
   }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1309
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1310
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1311
/* data.js - this file deals with how the players gets and sends data */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1312
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1313
IriSP.DataLoader = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1314
  this._cache = {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1315
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1316
  /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1317
    A structure to hold callbacks for specific urls. We need it because
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1318
    ajax calls are asynchronous, so it means that sometimes we ask
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1319
    multiple times for a ressource because the first call hasn't been
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1320
    received yet.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1321
  */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1322
  this._callbacks = {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1323
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1324
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1325
IriSP.DataLoader.prototype.get = function(url, callback) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1326
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1327
  var base_url = url.split("&")[0]
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1328
  if (this._cache.hasOwnProperty(base_url)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1329
    callback(this._cache[base_url]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1330
  } else {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1331
    if (!this._callbacks.hasOwnProperty(base_url)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1332
      this._callbacks[base_url] = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1333
      this._callbacks[base_url].push(callback);   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1334
      /* we need a closure because this gets lost when it's called back */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1335
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1336
      // uncomment you don't want to use caching.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1337
      // IriSP.jQuery.get(url, callback);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1338
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1339
      var func = function(data) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1340
                  this._cache[base_url] = data;                                
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1341
                  var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1342
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1343
                  for (i = 0; i < this._callbacks[base_url].length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1344
                    this._callbacks[base_url][i](this._cache[base_url]);                                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1345
                  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1346
      };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1347
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1348
      /* automagically choose between json and jsonp */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1349
      if (url.indexOf(document.location.hostname) === -1 &&
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1350
          url.indexOf("http://") !== -1 /* not a relative url */ ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1351
        // we contacting a foreign domain, use JSONP
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1352
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1353
        IriSP.jQuery.get(url, {}, IriSP.wrap(this, func), "jsonp");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1354
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1355
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1356
        // otherwise, hey, whatever rows your boat
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1357
        IriSP.jQuery.get(url, IriSP.wrap(this, func));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1358
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1359
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1360
    } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1361
      /* simply push the callback - it'll get called when the ressource
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1362
         has been received */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1363
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1364
      this._callbacks[base_url].push(callback);   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1365
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1366
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1367
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1368
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1369
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1370
/* the base abstract "class" */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1371
IriSP.Serializer = function(DataLoader, url) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1372
  this._DataLoader = DataLoader;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1373
  this._url = url;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1374
  this._data = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1375
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1376
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1377
IriSP.Serializer.prototype.serialize = function(data) { };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1378
IriSP.Serializer.prototype.deserialize = function(data) {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1379
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1380
IriSP.Serializer.prototype.currentMedia = function() {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1381
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1382
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1383
IriSP.Serializer.prototype.sync = function(callback) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1384
  callback.call(this, this._data);  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1385
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1386
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1387
IriSP.SerializerFactory = function(DataLoader) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1388
  this._dataloader = DataLoader;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1389
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1390
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1391
IriSP.SerializerFactory.prototype.getSerializer = function(metadataOptions) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1392
  /* This function returns serializer set-up with the correct
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1393
     configuration - takes a metadata struct describing the metadata source
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1394
  */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1395
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1396
  if (metadataOptions === undefined)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1397
    /* return an empty serializer */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1398
    return IriSP.Serializer("", "");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1399
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1400
  switch(metadataOptions.type) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1401
    case "json":
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1402
      return new IriSP.JSONSerializer(this._dataloader, metadataOptions.src);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1403
      break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1404
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1405
    case "dummy": /* only used for unit testing - not defined in production */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1406
      return new IriSP.MockSerializer(this._dataloader, metadataOptions.src);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1407
      break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1408
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1409
    case "empty":
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1410
      return new IriSP.Serializer("", "empty");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1411
      break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1412
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1413
    default:      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1414
      return undefined;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1415
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1416
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1417
/* site.js - all our site-dependent config : player chrome, cdn locations, etc...*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1418
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1419
IriSP.lib = { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1420
		jQuery : "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1421
		jQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1422
		jQueryToolTip : "http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1423
		swfObject : "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1424
		cssjQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1425
    popcorn : "/mdp/src/js/libs/popcorn.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1426
    jwplayer : "/mdp/src/js/libs/jwplayer.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1427
    popcornReplacement: "/mdp/src/js/libs/pop.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1428
    raphael: "/mdp/src/js/libs/raphael.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1429
    "popcorn.mediafragment" : "/mdp/src/js/libs/popcorn.mediafragment.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1430
    "popcorn.code" : "/mdp/src/js/libs/popcorn.code.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1431
    "popcorn.jwplayer": "/mdp/src/js/libs/popcorn.jwplayer.js",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1432
    "popcorn.youtube": "/mdp/src/js/libs/popcorn.youtube.js"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1433
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1434
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1435
//Player Configuration 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1436
IriSP.config = undefined;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1437
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1438
IriSP.widgetsDefaults = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1439
  "LayoutManager" : {spacer_div_height : "0px" },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1440
  "PlayerWidget" : {},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1441
  "AnnotationsWidget": {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1442
    "share_text" : "I'm watching ",     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1443
    "fb_link" : "http://www.facebook.com/share.php?u=",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1444
    "tw_link" : "http://twitter.com/home?status=",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1445
    "gplus_link" : ""
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1446
    },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1447
  "TweetsWidget" : {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1448
      default_profile_picture : "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1449
      tweet_display_period: 10000 // how long do we show a tweet ?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1450
  },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1451
  "SliderWidget" : {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1452
      minimize_period: 850 // how long does the slider stays maximized after the user leaves the zone ?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1453
  },
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1454
  "Main" : {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1455
      autoplay: true
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1456
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1457
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1458
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1459
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1460
IriSP.paths = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1461
//  "imgs": "/tweetlive/res/metadataplayer/src/css/imgs"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1462
  "imgs": "/mdp/src/css/imgs"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1463
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1464
IriSP.default_templates_vars = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1465
  "img_dir" : IriSP.paths.imgs 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1466
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1467
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1468
/* ui.js - ui related functions */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1469
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1470
/* FIXME: use an sharing library */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1471
IriSP.LdtShareTool = IriSP.share_template; /* the contents come from share.html */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1472
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1473
IriSP.createPlayerChrome = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1474
	var width = IriSP.config.gui.width;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1475
	var height = IriSP.config.gui.height;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1476
	var heightS = IriSP.config.gui.height-20;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1477
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1478
	// AUDIO  */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1479
	// PB dans le html : ; 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1480
	IriSP.trace( "__IriSP.createMyHtml",IriSP.config.gui.container );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1481
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1482
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1483
	/* FIXME : factor this in another file */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1484
	if( IriSP.config.gui.mode=="radio" ){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1485
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1486
		IriSP.jQuery( "#"+IriSP.config.gui.container ).before(IriSP.search_template);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1487
		var radioPlayer = Mustache.to_html(IriSP.radio_template, {"share_template" : IriSP.share_template});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1488
		IriSP.jQuery(radioPlayer).appendTo("#"+IriSP.config.gui.container);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1489
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1490
		// special tricks for IE 7
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1491
		if (IriSP.jQuery.browser.msie==true && IriSP.jQuery.browser.version=="7.0"){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1492
			//LdtSearchContainer
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1493
			//__IriSP.jQuery("#LdtPlayer").attr("margin-top","50px");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1494
			IriSP.jQuery("#Ldt-Root").css("padding-top","25px");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1495
			IriSP.trace("__IriSP.createHtml","IE7 SPECIAL ");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1496
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1497
	} else if(IriSP.config.gui.mode=="video") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1498
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1499
		var videoPlayer = Mustache.to_html(IriSP.video_template, {"share_template" : IriSP.share_template, "heightS" : heightS});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1500
		IriSP.jQuery(videoPlayer).appendTo("#"+IriSP.config.gui.container);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1501
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1502
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1503
	IriSP.jQuery("#Ldt-Annotations").width(width-(75*2));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1504
	IriSP.jQuery("#Ldt-Show-Arrow-container").width(width-(75*2));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1505
	IriSP.jQuery("#Ldt-ShowAnnotation-audio").width(width-10);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1506
	IriSP.jQuery("#Ldt-ShowAnnotation-video").width(width-10);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1507
	IriSP.jQuery("#Ldt-SaKeyword").width(width-10);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1508
	IriSP.jQuery("#Ldt-controler").width(width-10);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1509
	IriSP.jQuery("#Ldt-Control").attr("z-index","100");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1510
	IriSP.jQuery("#Ldt-controler").hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1511
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1512
	IriSP.jQuery(IriSP.annotation_loading_template).appendTo("#Ldt-ShowAnnotation-audio");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1513
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1514
	if(IriSP.config.gui.mode=='radio'){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1515
		IriSP.jQuery("#Ldt-load-container").attr("width",IriSP.config.gui.width);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1516
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1517
	// Show or not the output
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1518
	if(IriSP.config.gui.debug===true){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1519
		IriSP.jQuery("#Ldt-output").show();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1520
	} else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1521
		IriSP.jQuery("#Ldt-output").hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1522
	}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1523
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1524
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1525
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1526
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1527
/* create the buttons and the slider   */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1528
IriSP.createInterface = function( width, height, duration ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1529
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1530
		IriSP.jQuery( "#Ldt-controler" ).show();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1531
		//__IriSP.jQuery("#Ldt-Root").css('display','visible');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1532
		IriSP.trace( "__IriSP.createInterface" , width+","+height+","+duration+"," );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1533
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1534
		IriSP.jQuery( "#Ldt-ShowAnnotation").click( function () { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1535
			 //__IriSP.jQuery(this).slideUp(); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1536
		} );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1537
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1538
		var LdtpPlayerY = IriSP.jQuery("#Ldt-PlaceHolder").attr("top");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1539
		var LdtpPlayerX = IriSP.jQuery("#Ldt-PlaceHolder").attr("left");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1540
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1541
		IriSP.jQuery( "#slider-range-min" ).slider( { //range: "min",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1542
			value: 0,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1543
			min: 1,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1544
			max: duration/1000,//1:54:52.66 = 3600+3240+
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1545
			step: 0.1,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1546
			slide: function(event, ui) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1547
				
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1548
				//__IriSP.jQuery("#amount").val(ui.value+" s");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1549
				//player.sendEvent('SEEK', ui.value)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1550
				IriSP.MyApiPlayer.seek(ui.value);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1551
				//changePageUrlOffset(ui.value);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1552
				//player.sendEvent('PAUSE')
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1553
			}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1554
		} );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1555
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1556
		IriSP.trace("__IriSP.createInterface","ICI");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1557
		IriSP.jQuery("#amount").val(IriSP.jQuery("#slider-range-min").slider("value")+" s");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1558
		IriSP.jQuery(".Ldt-Control1 button:first").button({
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1559
			icons: {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1560
				primary: 'ui-icon-play'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1561
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1562
			text: false
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1563
		}).next().button({
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1564
			icons: {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1565
				primary: 'ui-icon-seek-next'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1566
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1567
			 text: false
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1568
		});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1569
		IriSP.jQuery(".Ldt-Control2 button:first").button({
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1570
			icons: {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1571
				primary: 'ui-icon-search'//,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1572
				//secondary: 'ui-icon-volume-off'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1573
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1574
			text: false
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1575
		}).next().button({
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1576
			icons: {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1577
				primary: 'ui-icon-volume-on'
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1578
			},
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1579
			 text: false
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1580
		});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1581
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1582
		// /!\ PB A MODIFIER 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1583
		//__IriSP.MyTags.draw();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1584
		IriSP.trace("__IriSP.createInterface","ICI2");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1585
		IriSP.jQuery( "#ldt-CtrlPlay" ).attr( "style", "background-color:#CD21C24;" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1586
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1587
		IriSP.jQuery( "#Ldt-load-container" ).hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1588
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1589
		if( IriSP.config.gui.mode=="radio" & IriSP.jQuery.browser.msie != true ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1590
			IriSP.jQuery( "#Ldtplayer1" ).attr( "height", "0" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1591
		}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1592
		IriSP.trace( "__IriSP.createInterface" , "3" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1593
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1594
		IriSP.trace( "__IriSP.createInterface", "END" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1595
		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1596
	};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1597
/* the widget classes and definitions */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1598
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1599
IriSP.Widget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1600
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1601
  if (config === undefined || config === null) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1602
    config = {}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1603
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1604
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1605
  this._Popcorn = Popcorn;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1606
  this._config = config;  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1607
  this._serializer = Serializer;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1608
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1609
  if (config.hasOwnProperty("container")) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1610
     this._id = config.container;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1611
     this.selector = IriSP.jQuery("#" + this._id);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1612
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1613
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1614
  if (config.hasOwnProperty("spacer")) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1615
     this._spacerId = config.spacer;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1616
     this.spacer = IriSP.jQuery("#" + this._spacerId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1617
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1618
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1619
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1620
  if (config.hasOwnProperty("width")) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1621
     // this.width and not this._width because we consider it public.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1622
     this.width = config.width;     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1623
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1624
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1625
  if (config.hasOwnProperty("height")) {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1626
     this.height = config.height;     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1627
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1628
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1629
  if (config.hasOwnProperty("heightmax")) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1630
     this.heightmax = config.heightmax;     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1631
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1632
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1633
  if (config.hasOwnProperty("widthmax")) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1634
     this.widthmax = config.widthmax;     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1635
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1636
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1637
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1638
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1639
IriSP.Widget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1640
  /* implemented by "sub-classes" */  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1641
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1642
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1643
IriSP.Widget.prototype.redraw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1644
  /* implemented by "sub-classes" */  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1645
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1646
/* modules are non-graphical entities, similar to widgets */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1647
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1648
IriSP.Module = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1649
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1650
  if (config === undefined || config === null) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1651
    config = {}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1652
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1653
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1654
  this._Popcorn = Popcorn;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1655
  this._config = config;  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1656
  this._serializer = Serializer;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1657
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1658
/* layout.js - very basic layout management */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1659
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1660
/*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1661
  a layout manager manages a div and the layout of objects
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1662
  inside it.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1663
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1664
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1665
IriSP.LayoutManager = function(options) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1666
    this._Popcorn = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1667
    this._widgets = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1668
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1669
    this._div = "LdtPlayer";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1670
    this._width = 640;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1671
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1672
    if (options === undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1673
      options = {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1674
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1675
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1676
    if (options.hasOwnProperty('container')) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1677
      this._div = options.container;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1678
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1679
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1680
    if (options.hasOwnProperty('width')) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1681
      this._width = options.width;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1682
    }    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1683
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1684
    if (options.hasOwnProperty('height')) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1685
      this._height = options.height;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1686
    } 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1687
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1688
    /* this is a shortcut */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1689
    this.selector = IriSP.jQuery("#" + this._div);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1690
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1691
    this.selector.css("width", this._width);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1692
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1693
    if (this._height !== undefined)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1694
      this.selector.css("height", this._height);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1695
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1696
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1697
/* we need this special setter because of a chicken and egg problem :
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1698
   we want the manager to use popcorn but the popcorn div will be managed
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1699
   by the manager. So we need a way to set the instance the manager uses
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1700
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1701
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1702
IriSP.LayoutManager.prototype.setPopcornInstance = function(popcorn) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1703
    this._Popcorn = popcorn;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1704
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1705
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1706
/* stem is a string to append to the id of the widget */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1707
IriSP.LayoutManager.prototype.createDiv = function(stem) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1708
    if (typeof(stem) === "undefined")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1709
       stem = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1710
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1711
    var newDiv = IriSP.guid(this._div + "_widget_" + stem + "_");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1712
    var spacerDiv = IriSP.guid("LdtPlayer_spacer_");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1713
    this._widgets.push(newDiv);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1714
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1715
    var divTempl = "<div id='{{id}}' style='width: {{width}}px; position: relative;'></div";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1716
    var spacerTempl = "<div id='{{spacer_id}}' style='width: {{width}}px; position: relative; height: {{spacer_div_height}};'></div";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1717
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1718
    var divCode = Mustache.to_html(divTempl, {id: newDiv, width: this._width});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1719
    var spacerCode = Mustache.to_html(spacerTempl, {spacer_id: spacerDiv, width: this._width,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1720
                                                    spacer_div_height: IriSP.widgetsDefaults.LayoutManager.spacer_div_height });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1721
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1722
    this.selector.append(divCode);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1723
    this.selector.append(spacerCode);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1724
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1725
    return [newDiv, spacerDiv];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1726
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1727
/* init.js - initialization and configuration of Popcorn and the widgets
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1728
exemple json configuration:
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1729
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1730
 */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1731
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1732
IriSP.setupDataLoader = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1733
  /* we set it up separately because we need to
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1734
     get data at the very beginning, for instance when
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1735
     setting up the video */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1736
  IriSP.__dataloader = new IriSP.DataLoader();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1737
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1738
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1739
IriSP.configurePopcorn = function (layoutManager, options) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1740
    var pop;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1741
    var ret = layoutManager.createDiv(); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1742
    var containerDiv = ret[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1743
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1744
    switch(options.type) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1745
      /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1746
        todo : dynamically create the div/video tag which
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1747
        will contain the video.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1748
      */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1749
      case "html5":
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1750
           var tmpId = Popcorn.guid("video"); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1751
           IriSP.jQuery("#" + containerDiv).append("<video src='" + options.file + "' id='" + tmpId + "'></video>");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1752
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1753
           if (options.hasOwnProperty("width"))
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1754
             IriSP.jQuery("#" + containerDiv).css("width", options.width);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1755
           
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1756
           if (options.hasOwnProperty("height"))
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1757
             IriSP.jQuery("#" + containerDiv).css("height", options.height);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1758
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1759
           pop = Popcorn("#" + tmpId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1760
        break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1761
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1762
      case "jwplayer":
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1763
          var opts = IriSP.jQuery.extend({}, options);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1764
          delete opts.container;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1765
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1766
          if (options.provider === "rtmp") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1767
            /* exit if we can't access the metadata */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1768
            if (typeof(IriSP.__jsonMetadata) === "undefined") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1769
                break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1770
            };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1771
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1772
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1773
            // the json format is totally illogical
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1774
            opts.streamer = IriSP.__jsonMetadata["medias"][0]["meta"]["item"]["value"];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1775
            var source = IriSP.__jsonMetadata["medias"][0]["href"];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1776
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1777
            // the source if a full url but jwplayer wants an url relative to the
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1778
            // streamer url, so we've got to remove the common part.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1779
            opts.file = source.slice(opts.streamer.length);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1780
          } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1781
            /* other providers type, video for instance -
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1782
               pass everything as is */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1783
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1784
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1785
          pop = IriSP.PopcornReplacement.jwplayer("#" + containerDiv, opts);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1786
        break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1787
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1788
      case "youtube":
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1789
          var opts = IriSP.jQuery.extend({}, options);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1790
          delete opts.container;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1791
          opts.controls = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1792
          opts.autostart = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1793
          templ = "width: {{width}}px; height: {{height}}px;";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1794
          var str = Mustache.to_html(templ, {width: opts.width, height: opts.height});    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1795
          // Popcorn.youtube wants us to specify the size of the player in the style attribute of its container div.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1796
          IriSP.jQuery("#" + containerDiv).attr("style", str);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1797
          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1798
          pop = Popcorn.youtube("#" + containerDiv, opts.video, opts);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1799
        break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1800
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1801
      default:
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1802
        pop = undefined;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1803
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1804
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1805
    return pop;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1806
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1807
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1808
IriSP.configureWidgets = function (popcornInstance, layoutManager, guiOptions) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1809
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1810
  var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1811
  var params = {width: guiOptions.width, height: guiOptions.height};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1812
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1813
  var ret_widgets = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1814
  var index;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1815
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1816
  for (index = 0; index < guiOptions.widgets.length; index++) {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1817
    var widgetConfig = guiOptions.widgets[index];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1818
    var widget = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1819
    ret_widgets.push(widget);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1820
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1821
  };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1822
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1823
  return ret_widgets;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1824
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1825
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1826
IriSP.configureModules = function (popcornInstance, modulesList) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1827
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1828
  var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1829
  var ret_modules = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1830
  var index;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1831
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1832
  for (index = 0; index < modulesList.length; index++) {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1833
    var moduleConfig = modulesList[index];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1834
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1835
    var serializer = serialFactory.getSerializer(moduleConfig.metadata);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1836
    var module = new IriSP[moduleConfig.type](popcornInstance, moduleConfig, serializer);    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1837
    ret_modules.push(module);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1838
  };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1839
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1840
  return ret_modules;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1841
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1842
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1843
IriSP.instantiateWidget = function(popcornInstance, serialFactory, layoutManager, widgetConfig) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1844
    /* create div returns us a container for the widget and a spacer */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1845
    var ret = layoutManager.createDiv(widgetConfig.type);        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1846
    var container = ret[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1847
    var spacer = ret[1];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1848
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1849
    var arr = IriSP.jQuery.extend({}, widgetConfig);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1850
    arr.container = container;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1851
    arr.spacer = spacer;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1852
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1853
    var serializer = serialFactory.getSerializer(widgetConfig.metadata);    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1854
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1855
    if (typeof serializer == "undefined")   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1856
      debugger;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1857
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1858
    // instantiate the object passed as a string
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1859
    var widget = new IriSP[widgetConfig.type](popcornInstance, arr, serializer);    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1860
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1861
    if (widgetConfig.hasOwnProperty("requires")) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1862
      // also create the widgets this one depends on.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1863
      // the dependency widget is available in the parent widget context as
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1864
      // this.WidgetName (for instance, this.TipWidget);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1865
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1866
      var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1867
      for(i = 0; i < widgetConfig.requires.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1868
        var widgetName = widgetConfig.requires[i]["type"];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1869
        widget[widgetName] = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig.requires[i]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1870
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1871
    }       
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1872
     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1873
    serializer.sync(IriSP.wrap(widget, function() { this.draw(); }));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1874
    return widget;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1875
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1876
/* mediafragment module */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1877
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1878
IriSP.MediaFragment = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1879
  IriSP.Module.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1880
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1881
  this.mutex = false; /* a mutex because we access the url from two different functions */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1882
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1883
  this._Popcorn.listen( "loadedmetadata", IriSP.wrap(this, IriSP.MediaFragment.advanceTime));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1884
  this._Popcorn.listen( "pause", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1885
  this._Popcorn.listen( "seeked", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1886
  this._Popcorn.listen( "IriSP.PolemicTweet.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1887
  this._Popcorn.listen( "IriSP.SegmentsWidget.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1888
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1889
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1890
IriSP.MediaFragment.advanceTime = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1891
             var url = window.location.href;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1892
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1893
              if ( url.split( "#" )[ 1 ] != null ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1894
                  pageoffset = url.split( "#" )[1];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1895
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1896
                  if ( pageoffset.substring(0, 2) === "t=") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1897
                    // timecode 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1898
                    if ( pageoffset.substring( 2 ) != null ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1899
                    var offsettime = pageoffset.substring( 2 );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1900
                    this._Popcorn.currentTime( parseFloat( offsettime ) );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1901
                    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1902
                  } else if ( pageoffset.substring(0, 2) === "a=") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1903
                    // annotation
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1904
                    var annotationId = pageoffset.substring( 2 );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1905
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1906
                    // there's no better way than that because
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1907
                    // of possible race conditions
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1908
                    this._serializer.sync(IriSP.wrap(this, function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1909
                          IriSP.MediaFragment.lookupAnnotation.call(this, annotationId); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1910
                          }));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1911
                  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1912
              }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1913
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1914
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1915
IriSP.MediaFragment.updateTime = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1916
  if (this.mutex === true) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1917
    return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1918
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1919
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1920
  var history = window.history;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1921
  if ( !history.pushState ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1922
    return false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1923
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1924
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1925
  splitArr = window.location.href.split( "#" )
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1926
  history.replaceState( {}, "", splitArr[0] + "#t=" + this._Popcorn.currentTime().toFixed( 2 ) );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1927
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1928
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1929
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1930
IriSP.MediaFragment.updateAnnotation = function(annotationId) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1931
  var _this = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1932
  this.mutex = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1933
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1934
  var history = window.history;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1935
  if ( !history.pushState ) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1936
    return false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1937
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1938
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1939
  splitArr = window.location.href.split( "#" )
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1940
  history.replaceState( {}, "", splitArr[0] + "#a=" + annotationId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1941
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1942
  window.setTimeout(function() { _this.mutex = false }, 50);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1943
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1944
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1945
// lookup and seek to the beginning of an annotation
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1946
IriSP.MediaFragment.lookupAnnotation = function(annotationId) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1947
  var annotation = undefined;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1948
  var annotations = this._serializer._data.annotations;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1949
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1950
  var i;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1951
  for (i = 0; i < annotations.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1952
      if (annotations[i].id === annotationId) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1953
        annotation = annotations[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1954
        break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1955
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1956
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1957
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1958
  if (typeof(annotation) !== "undefined") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1959
    this._Popcorn.currentTime(annotation.begin / 1000);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1960
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1961
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1962
IriSP.AnnotationsWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1963
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1964
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1965
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1966
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1967
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1968
IriSP.AnnotationsWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1969
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1970
IriSP.AnnotationsWidget.prototype.clear = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1971
    this.selector.find(".Ldt-SaTitle").text("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1972
    this.selector.find(".Ldt-SaDescription").text("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1973
    this.selector.find(".Ldt-SaKeywordText").text("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1974
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1975
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1976
IriSP.AnnotationsWidget.prototype.displayAnnotation = function(annotation) {   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1977
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1978
    var title = annotation.content.title;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1979
    var description = annotation.content.description;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1980
    var keywords =  "" // FIXME;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1981
    var begin = +annotation.begin / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1982
    var end = +annotation.end / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1983
    var duration = +this._serializer.currentMedia().meta["dc:duration"];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1984
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1985
    var title_templ = "{{title}} - ( {{begin}} - {{end}} )";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1986
    var endstr = Mustache.to_html(title_templ, {title: title, begin: IriSP.secondsToTime(begin), end: IriSP.secondsToTime(end)});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1987
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1988
    this.selector.find(".Ldt-SaTitle").text(endstr);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1989
    this.selector.find(".Ldt-SaDescription").text(description);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1990
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1991
    // update sharing buttons
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1992
    var defaults = IriSP.widgetsDefaults.AnnotationsWidget;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1993
    var text = defaults.share_text;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1994
    var fb_link = defaults.fb_link;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1995
    var tw_link = defaults.tw_link;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1996
    var gplus_link = defaults.gplus_link;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1997
    var url = document.location.href + "#a=" + annotation.id;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1998
    this.selector.find(".Ldt-fbShare").attr("href", fb_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  1999
    this.selector.find(".Ldt-TwShare").attr("href", tw_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2000
    this.selector.find(".Ldt-GplusShare").attr("href", fb_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2001
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2002
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2003
IriSP.AnnotationsWidget.prototype.clearWidget = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2004
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2005
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2006
    /* retract the pane between two annotations */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2007
    this.selector.find(".Ldt-SaTitle").text("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2008
    this.selector.find(".Ldt-SaDescription").text("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2009
    this.selector.find(".Ldt-SaKeywordText").html("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2010
    this.selector.find(".Ldt-ShowAnnotation").slideUp();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2011
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2012
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2013
IriSP.AnnotationsWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2014
  var _this = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2015
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2016
  var annotationMarkup = IriSP.templToHTML(IriSP.annotationWidget_template);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2017
	this.selector.append(annotationMarkup);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2018
  var view;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2019
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2020
  if (typeof(this._serializer._data.views) !== "undefined" && this._serializer._data.views !== null)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2021
     view = this._serializer._data.views[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2022
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2023
  var view_type = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2024
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2025
  if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2026
          view_type = view.annotation_types[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2027
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2028
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2029
  var annotations = this._serializer._data.annotations;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2030
  var i;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2031
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2032
	for (i in annotations) {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2033
    var annotation = annotations[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2034
    var begin = Math.round((+ annotation.begin) / 1000);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2035
    var end = Math.round((+ annotation.end) / 1000);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2036
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2037
    if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2038
          && annotation.meta["id-ref"] != view_type) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2039
        continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2040
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2041
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2042
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2043
    var conf = {start: begin, end: end, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2044
                onStart: 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2045
                       function(annotation) { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2046
                        return function() { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2047
                            _this.displayAnnotation(annotation); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2048
                          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2049
                        } }(annotation),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2050
                onEnd: 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2051
                       function() { _this.clearWidget.call(_this); }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2052
                };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2053
    this._Popcorn = this._Popcorn.code(conf);                                             
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2054
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2055
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2056
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2057
IriSP.ArrowWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2058
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2059
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2060
  this._oldAnnotation = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2061
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2062
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2063
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2064
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2065
IriSP.ArrowWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2066
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2067
IriSP.ArrowWidget.prototype.clear = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2068
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2069
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2070
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2071
IriSP.ArrowWidget.prototype.clearWidget = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2072
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2073
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2074
IriSP.ArrowWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2075
  var templ = Mustache.to_html(IriSP.arrowWidget_template, {});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2076
  this.selector.append(templ);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2077
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeUpdateHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2078
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2079
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2080
IriSP.ArrowWidget.prototype.timeUpdateHandler = function(percents) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2081
  var currentTime = this._Popcorn.currentTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2082
  var currentAnnotation = this._serializer.currentAnnotations(currentTime)[0]; // FIXME : use the others ?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2083
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2084
  /* move the arrow only if the current annotation changes */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2085
  if (currentAnnotation != this._oldAnnotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2086
    var begin = (+ currentAnnotation.begin) / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2087
    var end = (+ currentAnnotation.end) / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2088
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2089
    var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2090
    var middle_time = (begin + end) / 2;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2091
    var percents = Math.floor((middle_time / duration) * 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2092
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2093
    // we need to apply a fix because the arrow has a certain length
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2094
    // it's half the length of the arrow (27 / 2). We need to convert
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2095
    // it in percents though.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2096
    var totalWidth = this.selector.width();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2097
    var correction = ((27 / 2) / totalWidth) * 100;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2098
    var corrected_percents = percents - correction;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2099
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2100
    /* don't move out of the screen */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2101
    if (corrected_percents <= 0)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2102
      corrected_percents = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2103
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2104
    this.selector.children(".Ldt-arrowWidget").animate({"left" : corrected_percents + "%"});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2105
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2106
    this._oldAnnotation = currentAnnotation;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2107
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2108
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2109
IriSP.PlayerWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2110
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2111
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2112
  this._searchBlockOpen = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2113
  this._searchLastValue = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2114
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2115
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2116
IriSP.PlayerWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2117
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2118
IriSP.PlayerWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2119
  var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2120
  var width = this.width;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2121
	var height = this.height;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2122
	var heightS = this.height-20;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2123
	  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2124
	var Player_templ = Mustache.to_html(IriSP.player_template, {"share_template" : IriSP.share_template});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2125
  this.selector.append(Player_templ);		
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2126
	
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2127
  this.selector.children(".Ldt-controler").show();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2128
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2129
  // handle clicks by the user on the video.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2130
  this._Popcorn.listen("play", IriSP.wrap(this, this.playButtonUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2131
  this._Popcorn.listen("pause", IriSP.wrap(this, this.playButtonUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2132
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2133
  this._Popcorn.listen("volumechange", IriSP.wrap(this, this.muteButtonUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2134
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2135
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeDisplayUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2136
  this._Popcorn.listen("IriSP.search.matchFound", IriSP.wrap(this, this.searchMatch));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2137
  this._Popcorn.listen("IriSP.search.noMatchFound", IriSP.wrap(this, this.searchNoMatch));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2138
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2139
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2140
  this.selector.find(".Ldt-CtrlPlay").click(function() { self.playHandler.call(self); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2141
  this.selector.find(".Ldt-CtrlNext").click(function() { });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2142
  this.selector.find(".Ldt-CtrlSearch").click(function() { self.searchButtonHandler.call(self); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2143
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2144
  this.selector.find('.Ldt-CtrlSound').click(function() { self.muteHandler.call(self); } );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2145
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2146
  this.selector.find(".Ldt-CtrlPlay").attr( "style", "background-color:#CD21C24;" );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2147
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2148
  var searchButtonPos = this.selector.find(".Ldt-CtrlSearch").position();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2149
  var searchBox = Mustache.to_html(IriSP.search_template, {margin_left : searchButtonPos.left + "px"});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2150
  this.selector.append(searchBox);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2151
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2152
  // trigger an IriSP.PlayerWidget.MouseOver to the widgets that are interested (i.e : sliderWidget)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2153
  this.selector.hover(function() { self._Popcorn.trigger("IriSP.PlayerWidget.MouseOver"); }, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2154
                      function() { self._Popcorn.trigger("IriSP.PlayerWidget.MouseOut"); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2155
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2156
  this.muteButtonUpdater(); /* some player - jwplayer notable - save the state of the mute button between sessions */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2157
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2158
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2159
/* Update the elasped time div */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2160
IriSP.PlayerWidget.prototype.timeDisplayUpdater = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2161
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2162
  if (this._previousSecond === undefined)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2163
    this._previousSecond = this._Popcorn.roundTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2164
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2165
  else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2166
    /* we're still in the same second, so it's not necessary to update time */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2167
    if (this._Popcorn.roundTime() == this._previousSecond)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2168
      return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2169
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2170
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2171
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2172
  // we get it at each call because it may change.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2173
  var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000; 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2174
  var totalTime = IriSP.secondsToTime(duration);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2175
  var elapsedTime = IriSP.secondsToTime(this._Popcorn.currentTime());
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2176
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2177
  this.selector.find(".Ldt-ElapsedTime").html(elapsedTime.toString());
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2178
  this.selector.find(".Ldt-TotalTime").html(totalTime.toString());
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2179
  this._previousSecond = this._Popcorn.roundTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2180
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2181
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2182
/* update the icon of the button - separate function from playHandler
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2183
   because in some cases (for instance, when the user directly clicks on
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2184
   the jwplayer window) we have to change the icon without playing/pausing
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2185
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2186
IriSP.PlayerWidget.prototype.playButtonUpdater = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2187
  var status = this._Popcorn.media.paused;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2188
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2189
  if ( status == true ){        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2190
    this.selector.find(".Ldt-CtrlPlay").attr("title", "Play");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2191
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2192
    // we use templToHTML because it has some predefined
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2193
    // vars like where to get the images
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2194
    var templ = IriSP.templToHTML("url({{img_dir}}/play_sprite.png)");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2195
    this.selector.find(".Ldt-CtrlPlay").css("background-image", templ);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2196
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2197
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2198
    this.selector.find(".Ldt-CtrlPlay").attr("title", "Pause");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2199
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2200
    // we use templToHTML because it has some predefined
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2201
    // vars like where to get the images
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2202
    var templ = IriSP.templToHTML("url({{img_dir}}/pause_sprite.png)");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2203
    this.selector.find(".Ldt-CtrlPlay").css("background-image", templ);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2204
  }  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2205
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2206
  return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2207
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2208
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2209
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2210
IriSP.PlayerWidget.prototype.playHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2211
  var status = this._Popcorn.media.paused;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2212
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2213
  if ( status == true ){        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2214
    this._Popcorn.play();   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2215
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2216
    this._Popcorn.pause();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2217
  }  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2218
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2219
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2220
IriSP.PlayerWidget.prototype.muteHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2221
  if (!this._Popcorn.muted()) {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2222
      this._Popcorn.mute(true);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2223
    } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2224
      this._Popcorn.mute(false);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2225
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2226
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2227
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2228
IriSP.PlayerWidget.prototype.muteButtonUpdater = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2229
  var status = this._Popcorn.media.muted;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2230
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2231
  if ( status == true ){        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2232
    this.selector.find(".Ldt-CtrlSound").attr("title", "Unmute");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2233
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2234
    // we use templToHTML because it has some predefined
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2235
    // vars like where to get the images
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2236
    var templ = IriSP.templToHTML("url({{img_dir}}/sound_sprite.png)");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2237
    this.selector.find(".Ldt-CtrlSound").css("background-image", templ);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2238
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2239
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2240
    this.selector.find(".Ldt-CtrlSound").attr("title", "Mute");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2241
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2242
    // we use templToHTML because it has some predefined
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2243
    // vars like where to get the images
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2244
    var templ = IriSP.templToHTML("url({{img_dir}}/mute_sprite.png)");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2245
    this.selector.find(".Ldt-CtrlSound").css("background-image", templ);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2246
  }  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2247
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2248
  return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2249
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2250
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2251
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2252
IriSP.PlayerWidget.prototype.searchButtonHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2253
    var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2254
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2255
    /* show the search field if it is not shown */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2256
  	if ( this._searchBlockOpen == false ) {      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2257
      this.selector.find(".LdtSearch").show(100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2258
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2259
      this.selector.find(".LdtSearchInput").css('background-color','#fff');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2260
      this.selector.find(".LdtSearchInput").focus();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2261
      this.selector.find(".LdtSearchInput").attr('value', this._searchLastValue);      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2262
      this._Popcorn.trigger("IriSP.search", this._searchLastValue); // trigger the search to make it more natural.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2263
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2264
      this._searchBlockOpen = true;           
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2265
      this.selector.find(".LdtSearchInput").bind('keyup', null, function() { self.searchHandler.call(self); } );
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2266
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2267
      // we need this variable because some widget can find a match in
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2268
      // their data while at the same time other's don't. As we want the
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2269
      // search field to become green when there's a match, we need a 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2270
      // variable to remember that we had one.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2271
      this._positiveMatch = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2272
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2273
      // tell the world the field is open
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2274
      this._Popcorn.trigger("IriSP.search.open");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2275
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2276
	} else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2277
      this._searchLastValue = this.selector.find(".LdtSearchInput").attr('value');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2278
      this.selector.find(".LdtSearchInput").attr('value','');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2279
      this.selector.find(".LdtSearch").hide(100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2280
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2281
      // unbind the watcher event.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2282
      this.selector.find(".LdtSearchInput").unbind('keypress set');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2283
      this._searchBlockOpen = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2284
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2285
      this._positiveMatch = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2286
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2287
      this._Popcorn.trigger("IriSP.search.closed");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2288
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2289
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2290
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2291
/* this handler is called whenever the content of the search
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2292
   field changes */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2293
IriSP.PlayerWidget.prototype.searchHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2294
  this._searchLastValue = this.selector.find(".LdtSearchInput").attr('value');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2295
  this._positiveMatch = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2296
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2297
  // do nothing if the search field is empty, instead of highlighting everything.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2298
  if (this._searchLastValue == "") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2299
    this._Popcorn.trigger("IriSP.search.cleared");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2300
    this.selector.find(".LdtSearchInput").css('background-color','');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2301
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2302
    this._Popcorn.trigger("IriSP.search", this._searchLastValue);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2303
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2304
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2305
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2306
/*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2307
  handler for the IriSP.search.found message, which is sent by some views when they
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2308
  highlight a match.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2309
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2310
IriSP.PlayerWidget.prototype.searchMatch = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2311
  this._positiveMatch = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2312
  this.selector.find(".LdtSearchInput").css('background-color','#e1ffe1');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2313
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2314
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2315
/* the same, except that no value could be found */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2316
IriSP.PlayerWidget.prototype.searchNoMatch = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2317
  if (this._positiveMatch !== true)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2318
    this.selector.find(".LdtSearchInput").css('background-color', "#d62e3a");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2319
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2320
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2321
/* 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2322
 *   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2323
 *  Copyright 2010 Institut de recherche et d'innovation 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2324
 *  contributor(s) : Samuel Huron 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2325
 *   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2326
 *  contact@iri.centrepompidou.fr
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2327
 *  http://www.iri.centrepompidou.fr 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2328
 *   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2329
 *  This software is a computer program whose purpose is to show and add annotations on a video .
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2330
 *  This software is governed by the CeCILL-C license under French law and
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2331
 *  abiding by the rules of distribution of free software. You can  use, 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2332
 *  modify and/ or redistribute the software under the terms of the CeCILL-C
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2333
 *  license as circulated by CEA, CNRS and INRIA at the following URL
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2334
 *  "http://www.cecill.info". 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2335
 *  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2336
 *  The fact that you are presently reading this means that you have had
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2337
 *  knowledge of the CeCILL-C license and that you accept its terms.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2338
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2339
// CHART TIMELINE / VERSION PROTOTYPE  ::
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2340
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2341
IriSP.PolemicWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2342
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2343
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2344
  this.userPol    = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2345
  this.userNoPol  = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2346
  this.userst      = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2347
  this.numberOfTweet = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2348
  this.Users;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2349
  this.TweetPolemic;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2350
  this.yMax        = this.height; 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2351
  this.PaperSlider;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2352
  this.heightOfChart;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2353
  this.tweets  = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2354
  this.svgElements = {};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2355
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2356
  // Make and define the Raphael area
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2357
  this.paper = Raphael(document.getElementById(this._id), config.width, config.height);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2358
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2359
  this.oldSearchMatches = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2360
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2361
  // event handlers
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2362
  this._Popcorn.listen("IriSP.search", IriSP.wrap(this, function(searchString) { this.searchHandler(searchString); }));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2363
  this._Popcorn.listen("IriSP.search.closed", IriSP.wrap(this, this.searchFieldClosedHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2364
  this._Popcorn.listen("IriSP.search.cleared", IriSP.wrap(this, this.searchFieldClearedHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2365
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2366
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2367
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2368
IriSP.PolemicWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2369
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2370
IriSP.PolemicWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2371
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2372
    // variable 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2373
    // yMax
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2374
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2375
    var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2376
    var yCoef        = 2;             // coef for height of 1 tweet 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2377
    var frameSize     = 5;             // frame size 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2378
    var margin         = 1;            // marge between frame
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2379
    var lineSize      = this.width;        // timeline pixel width 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2380
    var nbrframes     = lineSize/frameSize;     // frame numbers
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2381
    var numberOfTweet   = 0;            // number of tweet overide later 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2382
    var duration      = +this._serializer.currentMedia().meta["dc:duration"];      // timescale width 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2383
    var frameLength   = lineSize / frameSize;    // frame timescale  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2384
    var timeline;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2385
    var colors  = new Array("","#1D973D","#C5A62D","#CE0A15","#036AAE","#585858");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2386
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2387
    // array 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2388
    //var tweets  = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2389
    var element = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2390
    var cluster = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2391
    var frames  = new Array(frameLength);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2392
    var slices  = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2393
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2394
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2395
    // Classes =======================================================================
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2396
    var Frames = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2397
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2398
      var Myclusters;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2399
      var x;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2400
      var y;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2401
      var width;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2402
      var height;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2403
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2404
    Frames = function(json){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2405
      // make my clusters
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2406
      // ou Frame vide 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2407
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2408
    Frames.prototype.draw = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2409
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2410
    Frames.prototype.zoom = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2411
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2412
    Frames.prototype.inside = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2413
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2414
    var Clusters = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2415
      var Object;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2416
      var yDist;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2417
      var x;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2418
      var y;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2419
      var width;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2420
      var height;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2421
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2422
    Clusters = function(json){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2423
      // make my object
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2424
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2425
    var Tweet = function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2426
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2427
    // Classes =======================================================================
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2428
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2429
    // Refactoring (parametere) ************************************************************
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2430
    // color translastion
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2431
    var qTweet_0  =0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2432
    var qTweet_Q  =0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2433
    var qTweet_REF=0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2434
    var qTweet_OK =0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2435
    var qTweet_KO =0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2436
    function colorTranslation(value){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2437
      if(value == "Q"){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2438
        qTweet_Q+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2439
        return 2;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2440
      }else if(value =="REF"){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2441
        qTweet_REF+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2442
        return 4;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2443
      }else if(value =="OK"){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2444
        qTweet_OK+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2445
        return 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2446
      }else if(value =="KO"){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2447
        qTweet_KO+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2448
        return 3;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2449
      }else if(value ==""){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2450
        qTweet_0+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2451
        return 5;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2452
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2453
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2454
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2455
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2456
      this._serializer.sync(function(data) { loaded_callback.call(self, data) });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2457
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2458
      function loaded_callback (json) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2459
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2460
        // get current view (the first ???)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2461
        view = json.views[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2462
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2463
        // the tweets are by definition of the second annotation type FIXME ?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2464
        tweet_annot_type = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2465
        if(typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2466
          tweet_annot_type = view.annotation_types[1];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2467
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2468
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2469
      for(var i = 0; i < json.annotations.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2470
        var item = json.annotations[i];        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2471
        var MyTime  = Math.floor(item.begin/duration*lineSize);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2472
        var Myframe = Math.floor(MyTime/lineSize*frameLength);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2473
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2474
        if (typeof(item.meta) !== "undefined" 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2475
          && typeof(item.meta["id-ref"]) !== "undefined"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2476
          && item.meta["id-ref"] === tweet_annot_type) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2477
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2478
          var MyTJson = JSON.parse(item.meta['dc:source']['content']);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2479
          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2480
            if (item.content['polemics'] != undefined 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2481
            && item.content['polemics'][0] != null) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2482
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2483
              // a tweet can have many polemics at the same time.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2484
              for(var j=0; j<item.content['polemics'].length; j++){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2485
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2486
                  this.tweets[numberOfTweet] = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2487
                        id:i,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2488
                        qualification:colorTranslation(item.content['polemics'][j]),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2489
                        yIndicator:MyTime,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2490
                        yframe:Myframe,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2491
                        title:item.content['title'],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2492
                        timeframe:item.begin,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2493
                        userId: MyTJson.id,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2494
                        userScreenName: MyTJson.screen_name,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2495
                        tsource:MyTJson,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2496
                        cinecast_id: item.id
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2497
                        };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2498
                  numberOfTweet+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2499
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2500
              }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2501
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2502
          else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2503
            this.tweets[numberOfTweet] = {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2504
                  id:i,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2505
                  qualification:colorTranslation(""),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2506
                  yIndicator:MyTime,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2507
                  yframe:Myframe,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2508
                  title:item.content['title'],
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2509
                  timeframe:item.begin,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2510
                  userId: MyTJson.id,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2511
                  userScreenName: MyTJson.screen_name,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2512
                  tsource:MyTJson,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2513
                  cinecast_id: item.id
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2514
            };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2515
            numberOfTweet+=1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2516
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2517
          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2518
        } 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2519
      };  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2520
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2521
       DrawTweets.call (this); // FIXME: ugly.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2522
       
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2523
      };      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2524
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2525
    // tweet Drawing (in raphael) 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2526
    function DrawTweets (){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2527
    // GROUPES TWEET ============================================
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2528
    // Count nbr of cluster and tweet in a frame an save int in "frames"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2529
      numberOfTweet = this.tweets.length;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2530
      for(var i=0; i<nbrframes; i++) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2531
        for(var j=0; j<numberOfTweet; j++) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2532
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2533
          if (i==this.tweets[j].yframe){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2534
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2535
            var k = this.tweets[j].qualification;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2536
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2537
            // make array for frame cluster
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2538
            if(frames[i]==undefined){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2539
              frames[i] = {id:i,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2540
                     qualifVol:new Array(),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2541
                     mytweetsID:new Array()
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2542
                    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2543
            }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2544
            // add my tweet to frame
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2545
            frames[i].mytweetsID.push(this.tweets[j]);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2546
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2547
            // count opinion by frame
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2548
            if( frames[i].qualifVol[k] == undefined){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2549
              frames[i].qualifVol[k] = 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2550
            }else{
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2551
              frames[i].qualifVol[k] += 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2552
            }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2553
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2554
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2555
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2556
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2557
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2558
    // GROUPES TWEET ============================================    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2559
    // max of tweet by Frame 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2560
      var max = 0; 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2561
      for(var i = 0; i < nbrframes; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2562
        var moy  = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2563
        for (var j = 0; j < 6; j++) {    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2564
          if (frames[i] != undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2565
            if (frames[i].qualifVol[j] != undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2566
              moy += frames[i].qualifVol[j];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2567
            }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2568
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2569
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2570
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2571
        if (moy > max) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2572
          max = moy;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2573
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2574
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2575
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2576
      var tweetDrawed = new Array();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2577
      var TweetHeight = 5;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2578
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2579
      // DRAW  TWEETS ============================================
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2580
      for(var i = 0; i < nbrframes; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2581
        var addEheight = 5;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2582
        if (frames[i] != undefined){                
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2583
          // by type 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2584
          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2585
          for (var j = 6; j > -1; j--) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2586
            if (frames[i].qualifVol[j] != undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2587
              // show tweet by type 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2588
              for (var k = 0; k < frames[i].mytweetsID.length; k++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2589
              
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2590
                if (frames[i].mytweetsID[k].qualification == j) {                
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2591
                  var x = i * frameSize;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2592
                  var y = this.heightmax - addEheight;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2593
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2594
                  if (this.yMax > y) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2595
                    this.yMax = y;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2596
                  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2597
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2598
                  var e = this.paper.rect(x, y, frameSize - margin, TweetHeight /* height */)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2599
                                    .attr({stroke:"#00","stroke-width":0.1,  fill: colors[j]});  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2600
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2601
                  addEheight += TweetHeight;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2602
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2603
                  e.color = colors[j];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2604
                  e.time = frames[i].mytweetsID[k].timeframe;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2605
                  e.title = frames[i].mytweetsID[k].title;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2606
                  e.id = frames[i].mytweetsID[k].cinecast_id;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2607
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2608
                  this.svgElements[e.id] = e;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2609
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2610
                  /*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2611
                  e.mouseover(function(element) { return function (event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2612
                        // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.                        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2613
                        self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.clientX - 106, event.clientY - 160);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2614
                        element.displayed = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2615
                  }}(e)).mouseout(function(element) { return function () {                          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2616
                          self.TooltipWidget.hide.call(self.TooltipWidget);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2617
                  }}(e)).mousedown(function () {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2618
                    self._Popcorn.currentTime(this.time/1000);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2619
                    self._Popcorn.trigger("IriSP.PolemicTweet.click", this.id); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2620
                  });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2621
                  */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2622
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2623
                  IriSP.jQuery(e.node).mouseenter(function(element) { return function (event) {                        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2624
                        // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.                        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2625
                        self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.pageX - 106, event.pageY - 160);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2626
                        element.displayed = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2627
                  }}(e)).mousedown(function(element) { return function () {                    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2628
                    self._Popcorn.currentTime(element.time/1000);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2629
                    self._Popcorn.trigger("IriSP.PolemicTweet.click", element.id); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2630
                    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2631
                  }(e));                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2632
                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2633
                  IriSP.jQuery(e.node).attr('id', 't' + k + '');
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2634
                  IriSP.jQuery(e.node).attr('title', frames[i].mytweetsID[k].title);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2635
                  IriSP.jQuery(e.node).attr('begin',  frames[i].mytweetsID[k].timeframe);                  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2636
                }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2637
              }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2638
            }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2639
          }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2640
        }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2641
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2642
      }    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2643
      // DRAW UI :: resize border and bgd      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2644
      this.paperBackground = this.paper.rect(0, 0, this.width, this.heightmax).attr({fill:"#F8F8F8","stroke-width":0.1,opacity: 1});  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2645
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2646
      // outer borders
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2647
      this.outerBorders   = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2648
      this.outerBorders.push(this.paper.rect(0, this.height - 1, this.width, 1).attr({fill:"#ababab",stroke: "none",opacity: 1}));  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2649
      this.outerBorders.push(this.paper.rect(0, 0, this.width, 1).attr({fill:"#ababab",stroke: "none",opacity: 1}));  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2650
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2651
      // inner borders
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2652
      this.innerBorders   = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2653
      this.innerBorders.push(this.paper.rect(1, this.height - 2, this.width, 1).attr({fill:"#efefef",stroke: "none",opacity: 1}));  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2654
      this.innerBorders.push(this.paper.rect(1, 1, this.width, 1).attr({fill:"#efefef",stroke: "none",opacity: 1}));  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2655
      this.innerBorders.push(this.paper.rect(1, 1, 1, this.height - 2).attr({fill:"#d0d1d1",stroke: "none",opacity: 0.8}));  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2656
      this.innerBorders.push(this.paper.rect(this.width - 2, 1, 1, this.height - 2).attr({fill:"#efefef",stroke: "none",opacity: 1}));  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2657
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2658
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2659
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2660
      this.paperSlider   = this.paper.rect(0, 0, 0, this.heightmax).attr({fill:"#D4D5D5", stroke: "none", opacity: 1});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2661
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2662
      // the small white line displayed over the slider.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2663
      this.sliderTip = this.paper.rect(0, 0, 1, this.heightmax).attr({fill:"#fc00ff", stroke: "none", opacity: 1});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2664
      // decalage 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2665
      // tweetSelection = this.paper.rect(-100,-100,5,5).attr({fill:"#fff",stroke: "none",opacity: 1});  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2666
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2667
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2668
      this.paperSlider.toBack();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2669
      this.paperBackground.toBack();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2670
      this.sliderTip.toFront();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2671
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2672
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2673
    this.selector.mouseleave(IriSP.wrap(this, function() { self.TooltipWidget.hide.call(self.TooltipWidget); }));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2674
    this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.sliderUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2675
}
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2676
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2677
IriSP.PolemicWidget.prototype.sliderUpdater = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2678
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2679
    var time = +this._Popcorn.currentTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2680
    var duration = +this._serializer.currentMedia().meta["dc:duration"];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2681
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2682
    this.paperSlider.attr("width", time * (this.width / (duration / 1000)));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2683
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2684
    this.sliderTip.attr("x", time * (this.width / (duration / 1000)));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2685
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2686
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2687
IriSP.PolemicWidget.prototype.searchHandler = function(searchString) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2688
  if (searchString == "")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2689
    return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2690
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2691
  var matches = this._serializer.searchTweetsOccurences(searchString);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2692
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2693
  if (IriSP.countProperties(matches) > 0) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2694
    this._Popcorn.trigger("IriSP.search.matchFound");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2695
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2696
    this._Popcorn.trigger("IriSP.search.noMatchFound");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2697
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2698
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2699
  for (var id in matches) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2700
    if (this.svgElements.hasOwnProperty(id)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2701
      var e = this.svgElements[id];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2702
      this.svgElements[id].attr({fill: "#fc00ff"});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2703
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2704
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2705
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2706
  // clean up the blocks that were in the previous search
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2707
  // but who aren't in the current one.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2708
  for (var id in this.oldSearchMatches) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2709
    if (!matches.hasOwnProperty(id)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2710
      var e = this.svgElements[id];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2711
      e.attr({fill: e.color});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2712
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2713
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2714
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2715
  this.oldSearchMatches = matches;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2716
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2717
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2718
IriSP.PolemicWidget.prototype.searchFieldClearedHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2719
  // clean up the blocks that were in the previous search
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2720
  // but who aren't in the current one.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2721
  for (var id in this.oldSearchMatches) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2722
      var e = this.svgElements[id];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2723
      e.attr({fill: e.color});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2724
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2725
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2726
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2727
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2728
IriSP.PolemicWidget.prototype.searchFieldClosedHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2729
  // clean up the blocks that were in the previous search
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2730
  // but who aren't in the current one.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2731
  for (var id in this.oldSearchMatches) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2732
      var e = this.svgElements[id];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2733
      e.attr({fill: e.color});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2734
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2735
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2736
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2737
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2738
IriSP.SegmentsWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2739
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2740
  var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2741
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2742
  this.oldSearchMatches = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2743
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2744
  // event handlers
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2745
  this._Popcorn.listen("IriSP.search", function(searchString) { self.searchHandler.call(self, searchString); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2746
  this._Popcorn.listen("IriSP.search.closed", function() { self.searchFieldClosedHandler.call(self); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2747
  this._Popcorn.listen("IriSP.search.cleared", function() { self.searchFieldClearedHandler.call(self); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2748
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2749
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2750
IriSP.SegmentsWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2751
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2752
/* Get the width of a segment, in pixels. */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2753
IriSP.SegmentsWidget.prototype.segmentToPixel = function(annotation) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2754
  var begin = Math.round((+ annotation.begin) / 1000);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2755
  var end = Math.round((+ annotation.end) / 1000);    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2756
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2757
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2758
  var startPourcent 	= IriSP.timeToPourcent(begin, duration);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2759
  var startPixel = Math.floor(this.selector.parent().width() * (startPourcent / 100));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2760
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2761
  var endPourcent 	= Math.floor(IriSP.timeToPourcent(end, duration) - startPourcent);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2762
  var endPixel = Math.floor(this.selector.parent().width() * (endPourcent / 100));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2763
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2764
  return endPixel;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2765
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2766
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2767
/* compute the total length of a group of segments */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2768
IriSP.SegmentsWidget.prototype.segmentsLength = function(segmentsList) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2769
  var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2770
  var total = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2771
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2772
  for (var i = 0; i < segmentsList.length; i++)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2773
    total += self.segmentToPixel(segmentsList[i].annotation);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2774
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2775
  return total;  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2776
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2777
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2778
IriSP.SegmentsWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2779
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2780
  var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2781
  var annotations = this._serializer._data.annotations;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2782
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2783
  this.selector.addClass("Ldt-SegmentsWidget");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2784
  this.selector.append(Mustache.to_html(IriSP.overlay_marker_template));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2785
          
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2786
  var view_type = this._serializer.getNonTweetIds()[0];    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2787
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2788
  this.positionMarker = this.selector.children(":first");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2789
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2790
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.positionUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2791
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2792
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2793
  var i = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2794
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2795
  var segments_annotations = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2796
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2797
  for (i = 0; i < annotations.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2798
    var annotation = annotations[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2799
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2800
    /* filter the annotations whose type is not the one we want */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2801
    if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2802
          && annotation.meta["id-ref"] != view_type) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2803
        continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2804
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2805
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2806
    segments_annotations.push(annotation);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2807
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2808
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2809
  var totalWidth = this.selector.width() - segments_annotations.length;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2810
  var lastSegment = IriSP.underscore.max(segments_annotations, function(annotation) { return annotation.end; });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2811
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2812
  for (i = 0; i < segments_annotations.length; i++) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2813
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2814
    var annotation = segments_annotations[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2815
    var begin = (+ annotation.begin);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2816
    var end = (+ annotation.end);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2817
    var duration = this._serializer.currentMedia().meta["dc:duration"];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2818
    var id = annotation.id;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2819
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2820
    var startPixel = Math.floor(this.selector.parent().width() * (begin / duration));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2821
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2822
    var endPixel = Math.floor(this.selector.parent().width() * (end / duration));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2823
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2824
    if (annotation.id !== lastSegment.id) 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2825
      var pxWidth = endPixel - startPixel -1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2826
    else
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2827
      /* the last segment has no segment following it */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2828
      var pxWidth = endPixel - startPixel;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2829
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2830
    var divTitle = (annotation.content.title + " - " + annotation.content.description).substr(0,55);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2831
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2832
    if (typeof(annotation.content.color) !== "undefined")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2833
      var color = annotation.content.color;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2834
    else
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2835
      var color = annotation.color;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2836
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2837
    var hexa_color = IriSP.DEC_HEXA_COLOR(color);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2838
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2839
    if (hexa_color === "FFCC00")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2840
      hexa_color = "333";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2841
    if (hexa_color.length == 4)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2842
      hexa_color = hexa_color + '00';
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2843
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2844
    var annotationTemplate = Mustache.to_html(IriSP.annotation_template,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2845
        {"divTitle" : divTitle, "id" : id, "startPixel" : startPixel,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2846
        "pxWidth" : pxWidth, "hexa_color" : hexa_color,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2847
        "seekPlace" : Math.round(begin/1000)});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2848
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2849
        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2850
    this.selector.append(annotationTemplate);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2851
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2852
    /* add a special class to the last segment and change its border */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2853
    if (annotation.id === lastSegment.id) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2854
        this.selector.find("#" + id).addClass("Ldt-lastSegment");        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2855
        this.selector.find(".Ldt-lastSegment").css("border-color", "#" + hexa_color);        
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2856
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2857
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2858
    IriSP.jQuery("#" + id).fadeTo(0, 0.3);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2859
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2860
    IriSP.jQuery("#" + id).mouseover(
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2861
    /* we wrap the handler in another function because js's scoping
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2862
       rules are function-based - otherwise, the internal vars like
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2863
       divTitle are preserved but they are looked-up from the draw
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2864
       method scope, so after that the loop is run, so they're not
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2865
       preserved */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2866
    (function(divTitle) { 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2867
     return function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2868
          IriSP.jQuery(this).animate({opacity: 0.6}, 5);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2869
          var offset = IriSP.jQuery(this).offset();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2870
          var correction = IriSP.jQuery(this).outerWidth() / 2;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2871
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2872
          var offset_x = offset.left + correction - 106;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2873
          if (offset_x < 0)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2874
            offset_x = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2875
                    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2876
          self.TooltipWidget.show(divTitle, color, offset_x, event.pageY - 160);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2877
    } })(divTitle)).mouseout(function(){
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2878
      IriSP.jQuery(this).animate({opacity: 0.3}, 5);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2879
      self.TooltipWidget.hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2880
    });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2881
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2882
    IriSP.jQuery("#" + id).click(function(_this, annotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2883
                                    return function() { _this.clickHandler(annotation)};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2884
                                 }(this, annotation));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2885
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2886
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2887
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2888
/* restores the view after a search */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2889
IriSP.SegmentsWidget.prototype.clear = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2890
  this.selector.children(".Ldt-iri-chapter").animate({opacity:0.3}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2891
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2892
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2893
IriSP.SegmentsWidget.prototype.clickHandler = function(annotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2894
  this._Popcorn.trigger("IriSP.SegmentsWidget.click", annotation.id);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2895
  var begin = (+ annotation.begin) / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2896
  this._Popcorn.currentTime(Math.round(begin));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2897
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2898
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2899
IriSP.SegmentsWidget.prototype.searchHandler = function(searchString) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2900
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2901
  if (searchString == "")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2902
    return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2903
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2904
  var matches = this._serializer.searchOccurences(searchString);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2905
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2906
  if (IriSP.countProperties(matches) > 0) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2907
    this._Popcorn.trigger("IriSP.search.matchFound");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2908
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2909
    this._Popcorn.trigger("IriSP.search.noMatchFound");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2910
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2911
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2912
  // un-highlight all the blocks
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2913
  this.selector.children(".Ldt-iri-chapter").css("opacity", 0.1);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2914
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2915
  // then highlight the ones with matches.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2916
  for (var id in matches) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2917
    var factor = 0.5 + matches[id] * 0.2;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2918
    this.selector.find("#"+id).dequeue();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2919
    this.selector.find("#"+id).animate({opacity:factor}, 200);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2920
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2921
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2922
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2923
  this.oldSearchMatches = matches;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2924
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2925
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2926
IriSP.SegmentsWidget.prototype.searchFieldClearedHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2927
  this.clear();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2928
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2929
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2930
IriSP.SegmentsWidget.prototype.searchFieldClosedHandler = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2931
  this.clear();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2932
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2933
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2934
IriSP.SegmentsWidget.prototype.positionUpdater = function() {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2935
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2936
  var time = this._Popcorn.currentTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2937
  //var position 	= ((time / duration) * 100).toFixed(2);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2938
  var position 	= ((time / duration) * 100).toFixed(2);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2939
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2940
  this.positionMarker.css("left", position + "%");  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2941
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2942
IriSP.SliderWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2943
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2944
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2945
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2946
IriSP.SliderWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2947
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2948
IriSP.SliderWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2949
  var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2950
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2951
  this.selector.append(Mustache.to_html(IriSP.sliderWidget_template, {}));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2952
  this.selector.addClass("Ldt-SliderMinimized");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2953
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2954
  this.sliderBackground = this.selector.find(".Ldt-sliderBackground");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2955
  this.sliderForeground = this.selector.find(".Ldt-sliderForeground");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2956
  this.positionMarker = this.selector.find(".Ldt-sliderPositionMarker");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2957
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2958
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2959
  // a special variable to stop methods from tinkering
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2960
  // with the positionMarker when the user is dragging it
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2961
  this.draggingOngoing = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2962
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2963
  // another special variable used by the timeout handler to
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2964
  // open or close the slider.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2965
  this.sliderMaximized = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2966
  this.timeOutId = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2967
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2968
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2969
  this.positionMarker.draggable({axis: "x",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2970
  start: IriSP.wrap(this, this.positionMarkerDraggingStartedHandler),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2971
  stop: IriSP.wrap(this, this.positionMarkerDraggedHandler),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2972
  containment: "parent"
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2973
  });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2974
  this.positionMarker.css("position", "absolute");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2975
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2976
  this.sliderBackground.click(function(event) { self.backgroundClickHandler.call(self, event); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2977
  this.sliderForeground.click(function(event) { self.foregroundClickHandler.call(self, event); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2978
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2979
  this.selector.hover(IriSP.wrap(this, this.mouseOverHandler), IriSP.wrap(this, this.mouseOutHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2980
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2981
  // update the positions
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2982
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.sliderUpdater));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2983
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2984
  // special messages :
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2985
  this._Popcorn.listen("IriSP.PlayerWidget.MouseOver", IriSP.wrap(this, this.mouseOverHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2986
  this._Popcorn.listen("IriSP.PlayerWidget.MouseOut", IriSP.wrap(this, this.mouseOutHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2987
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2988
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2989
/* update the slider and the position marker as time passes */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2990
IriSP.SliderWidget.prototype.sliderUpdater = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2991
  if(this.draggingOngoing || this._disableUpdate)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2992
    return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2993
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2994
  var time = this._Popcorn.currentTime();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2995
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2996
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2997
  var percent = ((time / duration) * 100).toFixed(2);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2998
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  2999
  /* we do these complicated calculations to center exactly
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3000
     the position Marker */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3001
  var pixels_to_percents = 100 / this.selector.width(); /* how much is a pixel in percents */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3002
  var positionMarker_width = this.positionMarker.width();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3003
  var correction = (pixels_to_percents * positionMarker_width) / 2;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3004
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3005
  var newPos = percent - correction;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3006
  if (newPos <= 0)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3007
    newPos = 0;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3008
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3009
	this.sliderForeground.css("width", percent + "%");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3010
	this.positionMarker.css("left", newPos + "%");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3011
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3012
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3013
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3014
IriSP.SliderWidget.prototype.backgroundClickHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3015
  /* this piece of code is a little bit convoluted - here's how it works :
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3016
     we want to handle clicks on the progress bar and convert those to seeks in the media.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3017
     However, jquery only gives us a global position, and we want a number of pixels relative
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3018
     to our container div, so we get the parent position, and compute an offset to this position,
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3019
     and finally compute the progress ratio in the media.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3020
     Finally we multiply this ratio with the duration to get the correct time
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3021
  */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3022
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3023
  var parentOffset = this.sliderBackground.parent().offset();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3024
  var width = this.sliderBackground.width();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3025
  var relX = event.pageX - parentOffset.left;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3026
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3027
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3028
  var newTime = ((relX / width) * duration).toFixed(2);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3029
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3030
  this._Popcorn.currentTime(newTime);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3031
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3032
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3033
/* same function as the previous one, except that it handles clicks
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3034
   on the foreground element */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3035
IriSP.SliderWidget.prototype.foregroundClickHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3036
  var parentOffset = this.sliderForeground.parent().offset();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3037
  var width = this.sliderBackground.width();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3038
  var relX = event.pageX - parentOffset.left;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3039
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3040
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3041
  var newTime = ((relX / width) * duration).toFixed(2);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3042
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3043
  this._Popcorn.currentTime(newTime);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3044
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3045
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3046
/* handles mouse over the slider */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3047
IriSP.SliderWidget.prototype.mouseOverHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3048
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3049
  if (this.timeOutId !== null) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3050
    window.clearTimeout(this.timeOutId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3051
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3052
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3053
  this.sliderMaximized = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3054
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3055
  this.sliderBackground.animate({"height": "9px"}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3056
  this.sliderForeground.animate({"height": "9px"}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3057
  this.positionMarker.animate({"height": "9px", "width": "9px"}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3058
  //this.positionMarker.css("margin-top", "-4px");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3059
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3060
//  this.selector.removeClass("Ldt-SliderMinimized");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3061
//  this.selector.addClass("Ldt-SliderMaximized");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3062
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3063
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3064
/* handles when the mouse leaves the slider */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3065
IriSP.SliderWidget.prototype.mouseOutHandler = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3066
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3067
  this.timeOutId = window.setTimeout(IriSP.wrap(this, this.minimizeOnTimeout),
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3068
                                     IriSP.widgetsDefaults.SliderWidget.minimize_period);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3069
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3070
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3071
IriSP.SliderWidget.prototype.minimizeOnTimeout = function(event) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3072
  this.sliderBackground.animate({"height": "5px"}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3073
  this.sliderForeground.animate({"height": "5px"}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3074
  this.positionMarker.animate({"height": "5px", "width": "5px"}, 100);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3075
  this.positionMarker.css("margin-top", "0px");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3076
  this.sliderMinimized = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3077
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3078
//  this.selector.removeClass("Ldt-SliderMaximized");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3079
//  this.selector.addClass("Ldt-SliderMinimized");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3080
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3081
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3082
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3083
// called when the user starts dragging the position indicator
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3084
IriSP.SliderWidget.prototype.positionMarkerDraggingStartedHandler = function(event, ui) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3085
  this.draggingOngoing = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3086
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3087
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3088
IriSP.SliderWidget.prototype.positionMarkerDraggedHandler = function(event, ui) {   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3089
  this._disableUpdate = true; // disable slider position updates while dragging is ongoing.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3090
  window.setTimeout(IriSP.wrap(this, function() { this._disableUpdate = false; }), 500);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3091
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3092
  var parentOffset = this.sliderForeground.parent().offset();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3093
  var width = this.sliderBackground.width();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3094
  var relX = event.pageX - parentOffset.left;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3095
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3096
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3097
  var newTime = ((relX / width) * duration).toFixed(2);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3098
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3099
  this._Popcorn.currentTime(newTime);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3100
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3101
  this.draggingOngoing = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3102
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3103
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3104
/* this widget displays a small tooltip */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3105
IriSP.TooltipWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3106
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3107
  this._shown = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3108
  this._displayedText = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3109
  this._hideTimeout = -1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3110
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3111
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3112
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3113
IriSP.TooltipWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3114
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3115
IriSP.TooltipWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3116
  var templ = Mustache.to_html(IriSP.tooltipWidget_template);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3117
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3118
  this.selector.append(templ);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3119
  this.hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3120
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3121
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3122
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3123
IriSP.TooltipWidget.prototype.clear = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3124
	this.selector.find(".tiptext").text("");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3125
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3126
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3127
IriSP.TooltipWidget.prototype.show = function(text, color, x, y) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3128
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3129
  if (this._displayedText == text)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3130
    return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3131
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3132
  this.selector.find(".tipcolor").css("background-color", color);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3133
  this._displayedText = text;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3134
	this.selector.find(".tiptext").text(text);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3135
  //this.selector.find(".tip").css("left", x).css("top", y);  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3136
  this.selector.find(".tip").css("left", x).css("top", y);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3137
  this.selector.find(".tip").show();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3138
  this._shown = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3139
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3140
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3141
IriSP.TooltipWidget.prototype.hide = function() {                                                   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3142
  this.selector.find(".tip").hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3143
  this._shown = false;  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3144
};/* a widget that displays tweet - used in conjunction with the polemicWidget */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3145
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3146
IriSP.TweetsWidget = function(Popcorn, config, Serializer) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3147
  IriSP.Widget.call(this, Popcorn, config, Serializer);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3148
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3149
  this._displayingTweet = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3150
  this._timeoutId = undefined;  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3151
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3152
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3153
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3154
IriSP.TweetsWidget.prototype = new IriSP.Widget();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3155
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3156
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3157
IriSP.TweetsWidget.prototype.drawTweet = function(annotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3158
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3159
    var title = IriSP.formatTweet(annotation.content.title);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3160
    var img = annotation.content.img.src;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3161
    if (typeof(img) === "undefined" || img === "" || img === "None") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3162
      img = IriSP.widgetsDefaults.TweetsWidget.default_profile_picture;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3163
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3164
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3165
    var imageMarkup = IriSP.templToHTML("<img src='{{src}}' alt='user image'></img>", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3166
                                       {src : img});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3167
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3168
    if (typeof(annotation.meta["dc:source"].content) !== "undefined") {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3169
      var tweetContents = JSON.parse(annotation.meta["dc:source"].content);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3170
      var creator = tweetContents.user.screen_name;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3171
      var real_name = tweetContents.user.name;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3172
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3173
      imageMarkup = IriSP.templToHTML("<a href='http://twitter.com/{{creator}}'><img src='{{src}}' alt='user image'></img></a>", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3174
                                       {src : img, creator: creator});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3175
            
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3176
      var formatted_date = new Date(tweetContents.created_at).toLocaleDateString();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3177
      title = IriSP.templToHTML("<a class='Ldt-tweet_userHandle' href='http://twitter.com/{{creator}}'>@{{creator}}</a> - " + 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3178
                                "<div class='Ldt-tweet_realName'>{{real_name}}</div>" +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3179
                                "<div class='Ldt-tweet_tweetContents'>{{{ contents }}}</div>" +
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3180
                                "<div class='Ldt-tweet_date'>{{ date }}</div>", 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3181
                                {creator: creator, real_name: real_name, contents : title, date : formatted_date});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3182
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3183
      this.selector.find(".Ldt-TweetReply").attr("href", "http://twitter.com/home?status=@" + creator + ":%20");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3184
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3185
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3186
      var rtText = Mustache.to_html("http://twitter.com/home?status=RT @{{creator}}: {{text}}",
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3187
                                    {creator: creator, text: IriSP.encodeURI(annotation.content.title)});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3188
      this.selector.find(".Ldt-Retweet").attr("href", rtText);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3189
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3190
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3191
    this.selector.find(".Ldt-tweetContents").html(title);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3192
    this.selector.find(".Ldt-tweetAvatar").html(imageMarkup);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3193
    this.selector.show("blind", 250); 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3194
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3195
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3196
IriSP.TweetsWidget.prototype.displayTweet = function(annotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3197
  if (this._displayingTweet === false) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3198
    this._displayingTweet = true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3199
  } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3200
    window.clearTimeout(this._timeoutId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3201
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3202
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3203
  this.drawTweet(annotation);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3204
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3205
  var time = this._Popcorn.currentTime();  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3206
  this._timeoutId = window.setTimeout(IriSP.wrap(this, this.clearPanel), IriSP.widgetsDefaults.TweetsWidget.tweet_display_period);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3207
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3208
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3209
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3210
IriSP.TweetsWidget.prototype.clearPanel = function() {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3211
    this._displayingTweet = false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3212
    this._timeoutId = undefined;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3213
    this.closePanel();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3214
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3215
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3216
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3217
IriSP.TweetsWidget.prototype.closePanel = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3218
    if (this._timeoutId != undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3219
      /* we're called from the "close window" link */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3220
      /* cancel the timeout */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3221
      window.clearTimeout(this._timeoutId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3222
      this._timeoutId = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3223
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3224
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3225
    this.selector.hide("blind", 400);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3226
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3227
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3228
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3229
/* cancel the timeout if the user clicks on the keep panel open button */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3230
IriSP.TweetsWidget.prototype.keepPanel = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3231
    if (this._timeoutId != undefined) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3232
      /* we're called from the "close window" link */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3233
      /* cancel the timeout */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3234
      window.clearTimeout(this._timeoutId);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3235
      this._timeoutId = null;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3236
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3237
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3238
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3239
IriSP.TweetsWidget.prototype.draw = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3240
  var _this = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3241
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3242
  var tweetMarkup = IriSP.templToHTML(IriSP.tweetWidget_template, {"share_template" : IriSP.share_template});
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3243
  this.selector.append(tweetMarkup);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3244
  this.selector.hide();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3245
  this.selector.find(".Ldt-tweetWidgetMinimize").click(IriSP.wrap(this, this.closePanel));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3246
  this.selector.find(".Ldt-tweetWidgetKeepOpen").click(IriSP.wrap(this, this.keepPanel));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3247
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3248
  this._Popcorn.listen("IriSP.PolemicTweet.click", IriSP.wrap(this, this.PolemicTweetClickHandler));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3249
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3250
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3251
IriSP.TweetsWidget.prototype.PolemicTweetClickHandler = function(tweet_id) {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3252
  var index, annotation;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3253
  for (index in this._serializer._data.annotations) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3254
    annotation = this._serializer._data.annotations[index];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3255
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3256
    if (annotation.id === tweet_id)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3257
      break;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3258
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3259
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3260
  if (annotation.id !== tweet_id)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3261
      /* we haven't found it */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3262
      return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3263
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3264
  this.displayTweet(annotation);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3265
  return;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3266
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3267
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3268
IriSP.JSONSerializer = function(DataLoader, url) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3269
  IriSP.Serializer.call(this, DataLoader, url);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3270
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3271
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3272
IriSP.JSONSerializer.prototype = new IriSP.Serializer();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3273
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3274
IriSP.JSONSerializer.prototype.serialize = function(data) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3275
  return JSON.stringify(data);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3276
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3277
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3278
IriSP.JSONSerializer.prototype.deserialize = function(data) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3279
  return JSON.parse(data);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3280
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3281
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3282
IriSP.JSONSerializer.prototype.sync = function(callback) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3283
  /* we don't have to do much because jQuery handles json for us */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3284
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3285
  var self = this;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3286
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3287
  var fn = function(data) {      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3288
      self._data = data;      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3289
      // sort the data too     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3290
      self._data["annotations"].sort(function(a, b) 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3291
          { var a_begin = +a.begin;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3292
            var b_begin = +b.begin;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3293
            return a_begin - b_begin;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3294
          });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3295
     
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3296
      callback(data);      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3297
  };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3298
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3299
  this._DataLoader.get(this._url, fn);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3300
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3301
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3302
IriSP.JSONSerializer.prototype.currentMedia = function() {  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3303
  return this._data.medias[0]; /* FIXME: don't hardcode it */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3304
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3305
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3306
/* this function searches for an annotation which matches title, description and keyword 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3307
   "" matches any field. 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3308
   Note: it ignores tweets.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3309
*/    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3310
IriSP.JSONSerializer.prototype.searchAnnotations = function(title, description, keyword) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3311
    /* we can have many types of annotations. We want search to only look for regular segments */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3312
    /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3313
       null or undefined.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3314
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3315
    var view;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3316
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3317
    if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3318
       view = this._data.views[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3319
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3320
    var searchViewType = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3321
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3322
    if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3323
            searchViewType = view.annotation_types[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3324
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3325
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3326
    var filterfn = function(annotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3327
      if( searchViewType  != "" && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3328
          typeof(annotation.meta) !== "undefined" && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3329
          typeof(annotation.meta["id-ref"]) !== "undefined" &&
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3330
          annotation.meta["id-ref"] !== searchViewType) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3331
        return true; // don't pass
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3332
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3333
          return false;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3334
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3335
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3336
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3337
    return this.searchAnnotationsFilter(title, description, keyword, filterfn);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3338
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3339
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3340
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3341
/* only look for tweets */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3342
IriSP.JSONSerializer.prototype.searchTweets = function(title, description, keyword) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3343
    /* we can have many types of annotations. We want search to only look for regular segments */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3344
    /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3345
       null or undefined.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3346
    */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3347
    var view;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3348
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3349
    if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3350
       view = this._data.views[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3351
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3352
    var searchViewType = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3353
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3354
    if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3355
            searchViewType = view.annotation_types[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3356
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3357
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3358
    var filterfn = function(annotation) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3359
      if( searchViewType  != "" && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3360
          typeof(annotation.meta) !== "undefined" && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3361
          typeof(annotation.meta["id-ref"]) !== "undefined" &&
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3362
          annotation.meta["id-ref"] !== searchViewType) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3363
        return false; // pass
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3364
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3365
          return true;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3366
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3367
    };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3368
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3369
    return this.searchAnnotationsFilter(title, description, keyword, filterfn);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3370
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3371
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3372
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3373
/*
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3374
  the previous function call this one, which is more general:
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3375
 */    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3376
IriSP.JSONSerializer.prototype.searchAnnotationsFilter = function(title, description, keyword, filter) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3377
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3378
    var rTitle;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3379
    var rDescription;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3380
    var rKeyword;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3381
    /* match anything if given the empty string */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3382
    if (title == "")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3383
      title = ".*";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3384
    if (description == "")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3385
      description = ".*";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3386
    if (keyword == "")
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3387
      keyword = ".*";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3388
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3389
    rTitle = new RegExp(title, "i");  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3390
    rDescription = new RegExp(description, "i");  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3391
    rKeyword = new RegExp(keyword, "i");  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3392
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3393
    var ret_array = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3394
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3395
    var i;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3396
    for (i in this._data.annotations) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3397
      var annotation = this._data.annotations[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3398
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3399
      /* filter the annotations whose type is not the one we want */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3400
      if (filter(annotation)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3401
          continue;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3402
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3403
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3404
      if (rTitle.test(annotation.content.title) && 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3405
          rDescription.test(annotation.content.description)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3406
          /* FIXME : implement keyword support */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3407
          ret_array.push(annotation);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3408
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3409
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3410
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3411
    return ret_array;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3412
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3413
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3414
/* breaks a string in words and searches each of these words. Returns an array
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3415
   of objects with the id of the annotation and its number of occurences.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3416
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3417
   FIXME: optimize ? seems to be n^2 in the worst case.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3418
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3419
IriSP.JSONSerializer.prototype.searchOccurences = function(searchString) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3420
  var ret = { };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3421
  var keywords = searchString.split(/\s+/);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3422
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3423
  for (var i in keywords) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3424
    var keyword = keywords[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3425
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3426
    // search this keyword in descriptions and title
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3427
    var found_annotations = []
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3428
    found_annotations = found_annotations.concat(this.searchAnnotations(keyword, "", ""));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3429
    found_annotations = found_annotations.concat(this.searchAnnotations("", keyword, ""));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3430
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3431
    for (var j in found_annotations) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3432
      var current_annotation = found_annotations[j];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3433
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3434
      if (!ret.hasOwnProperty(current_annotation.id)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3435
        ret[current_annotation.id] = 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3436
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3437
        ret[current_annotation.id] += 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3438
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3439
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3440
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3441
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3442
  };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3443
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3444
  return ret;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3445
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3446
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3447
/* breaks a string in words and searches each of these words. Returns an array
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3448
   of objects with the id of the annotation and its number of occurences.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3449
   
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3450
   FIXME: optimize ? seems to be n^2 in the worst case.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3451
*/
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3452
IriSP.JSONSerializer.prototype.searchTweetsOccurences = function(searchString) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3453
  var ret = { };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3454
  var keywords = searchString.split(/\s+/);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3455
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3456
  for (var i in keywords) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3457
    var keyword = keywords[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3458
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3459
    // search this keyword in descriptions and title
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3460
    var found_annotations = []
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3461
    found_annotations = found_annotations.concat(this.searchTweets(keyword, "", ""));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3462
    found_annotations = found_annotations.concat(this.searchTweets("", keyword, ""));
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3463
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3464
    for (var j in found_annotations) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3465
      var current_annotation = found_annotations[j];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3466
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3467
      if (!ret.hasOwnProperty(current_annotation.id)) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3468
        ret[current_annotation.id] = 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3469
      } else {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3470
        ret[current_annotation.id] += 1;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3471
      }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3472
      
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3473
    }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3474
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3475
  };
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3476
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3477
  return ret;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3478
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3479
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3480
/* takes the currentTime and returns all the annotations that are displayable at the moment 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3481
   NB: only takes account the first type of annotations - ignores tweets 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3482
   currentTime is in seconds.
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3483
 */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3484
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3485
IriSP.JSONSerializer.prototype.currentAnnotations = function(currentTime) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3486
  var view;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3487
  var currentTimeMs = 1000 * currentTime;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3488
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3489
  if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3490
     view = this._data.views[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3491
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3492
  var view_type = "";
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3493
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3494
  if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length >= 1) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3495
          view_type = view.annotation_types[0];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3496
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3497
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3498
  var ret_array = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3499
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3500
  var i;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3501
 
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3502
  for (i in this._data.annotations) {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3503
    var annotation = this._data.annotations[i];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3504
    
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3505
    if (annotation.meta["id-ref"] === view_type && annotation.begin <= currentTimeMs && annotation.end >= currentTimeMs)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3506
      ret_array.push(annotation);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3507
  }
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3508
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3509
  return ret_array;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3510
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3511
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3512
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3513
/* this function returns a list of ids of tweet lines */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3514
IriSP.JSONSerializer.prototype.getTweetIds = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3515
  if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3516
    return [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3517
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3518
  var tweetsId = [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3519
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3520
  /* first get the list containing the tweets */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3521
  var tweets = IriSP.underscore.filter(this._data.lists, function(entry) { return entry.id.indexOf("tweet") !== -1 });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3522
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3523
  // FIXME: collect tweets from multiple sources ?
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3524
  tweetsId = IriSP.underscore.pluck(tweets[0].items, "id-ref");
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3525
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3526
  return tweetsId;
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3527
};
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3528
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3529
/* this function returns a list of lines which are not tweet lines */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3530
IriSP.JSONSerializer.prototype.getNonTweetIds = function() {
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3531
  if (typeof(this._data.lists) === "undefined" || this._data.lists === null)
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3532
    return [];
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3533
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3534
  /* get all the ids */
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3535
  var ids = IriSP.underscore.map(this._data.lists, function(entry) {                                                         
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3536
                                                         return IriSP.underscore.pluck(entry.items, "id-ref"); });
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3537
                                                         
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3538
  var illegal_values = this.getTweetIds();
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3539
  return IriSP.underscore.difference(ids, illegal_values);
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3540
  
fe008e95a716 added jsdoc support, and a script to generate the docs.
hamidouk
parents:
diff changeset
  3541
};
{[< zv{Y뷔zh]Ӽvr6O\gn={ݏhw/hmֽ4p}w4\ề]U3Am6fl@>کӧ]{o)^mooOim/ݩk}{ޟKg[{]{nYM{njY>zu]Sowϙz&.wmQ﷮S`_}vf9/ZW{ݭ˹Gwn]{:h;gcynݧޮ뷻^ڷrNwvօvvw2Զԭ{uzmv^]=-iێ[{au4t{n)ڗ\{wdV^ZT{gKQztKۭ{gvޚ]F{w]K%8]u3׮&kL裰eV^v9;ףKvץ]۝۽o]y/oCݛ:5+=n]hu{p2 ;w;uܢp^]޻w-s{FqLGK'G^O{׷fֽzmyYښu;uyW{lnwݥUvz{9Wn{=={B:POvuy]w\N vsoGM5Yͼ㗬Urѥ5^UmG{/wzWlpr{w[չlMP׳imV\rWNWuw;{T[/o]=7f@;;!6۴ 7w#օFu$;fuׯ]{^O>ׯlu^rXVluR 2= CGͰ==^{vny'wLvjWk=nҳ^olNnm kݳ`;՞Nzyw{׶^:w{wzkoofqokכ {\@rhe{t^y#w^wgǪ;[=iwVٯ^w@n ػP9!םގj$FC׽g{y4CyJ[LuRYӳVvulkc{9:ް{Jwv=ixp^kVOT ״Zz]nsE+ƛv۽U{M{n59JYݽ˳{uw[-w;Vu$鹽׫N :<owիn׻zgZֻ^g=vr{:ױPE6Ng{{Ѫk{{ S@Rۻ]{+·^y:mo`η]s{ۗjz{ZIyfvw[cޘݝ]7m6g{zᮚ{ƚכ%NV/g9(mu7䍰[ֻ{vg{]w[nfz{׊%wZ`mys]nvsmZl6.ܽ֞mvݻTfuNkzP=:v{nhh^Uo/w=ƻWKM nm [=ۡNv=4{[w w׽ѶjקwH-;zV{^tSg\w=zsNݶw{=;7]{wf^vzKl5WwmIns{rozm;]۽{9wV:wm:h95mëأNwZ=+XW۳!\ջU<;w{Vq:zs^{Y$S^[Ov{[ w;z-zK Z-;ksj4ε[{Ewu]o=Vwznwowmy9^o{dv;wn뻞֏ovM=kٶֺd] .unwk]vN[sN<%KOui7lGۻZ`{yUfDG{wvVt[c]mwgxmؖޞ{:nWOUVv=yx׵j귫{xf׻no/swwgz޻]n6ڢ۬oKo9pyޝ5ǖc{qVu{S'˺g{^rֳJLYm^^]Ύ;=k;z{nԽҚO]ƌMw]oVڕjz׻zt :2v=ջpvh n]wmޱrkwxʽwZnuwlw6*&T*~ *<LL hOU?T:#&0&Ja044hT OTPʘ24 )MTL&Ox1O&L$ idh @4tS{5ঌ6 kBcKʮRҼĦ04EDj:g]]؋[=Gȋmvmo\5xkayݯwz0aQ` 0%،,<= Zdq sMiXQL2{g6Bdpó;2؈3'lC=8`$3!!#7%0ƍI%2CǨLA %-jqn#5b w! h*!,!.ٍ0)/0 jId&-n'MkqhU'z)}kyRz*:ivӮ.*S^j֫^eSaخpּ4ܱZ颊իV{kzY^iE4n*ްŷ/?Zj+MJf^. z l=^Sj)vrgegFplW{ \Mz폺UuMRjخX"tjjZh',Xʣ54E3g 4e0͍)MQp"&)xi,uITSJU(ZlVYy54Rki4yiv b[u]l^2ՔW=Z*uлTl9O) +MR2Feg=Hjj֫Eiʦ8QwYYU{,u jQ5U*jWh)mBVNΚ%1=4'd<ã9z+eRL]Jܷ-+EDb"('7;+WnM;lec%`1ª澒&-ɂđ)(6dBGU 2T 2fZ[HU%9 $2H!!*^Q9@1V$L!6&vO*Gϓ|垒>J־O`z_~/zz{k_w?|k2f2h1Ddhjf8d4 4RJPĖEf*9"J' p=1"EN&&e2 e` BIE$ K:\IAIadÑ9 G&62E"R\s $|ih*#`g{~>n3GѢikޮ3-C K4-P>N%_ k ۶j6}'L`ք/= 2@ +Jk#<ىƀ:HM7n+{Ҋ"'fV~]{xu7wc[c8ޝ#oﶚ r mL<f6N?jdrôt+Clj't 1 M6?6oΗk?ǵx[#K_ hV0JYreLSyQKt(ySi|z+}l%0xB?'jo˥!-JG9+8%7;;s#{@i;tyĊ0[1TN[{y:8"B;6+; 'uZ_ wzXN}Hѷtu@q<rovl N.3$Pxz5辖;ؿ^@-lSg@˷j{>@HF}dX~%w4oY0"C#pBYWx[~Wy}i;n=ŦK+q]H6|g%wyK{9־KJSM]d}*PKɵ!9`ncꝋHKg|nz&=C?nw@b_#BX-{窅?67Ϩ) >oX-p=jܑPB@%h$2/5K  =*"$֢bgB(0* /m{w0z]0XiG]}w?Wf\Ϭ=aބv\ '(&c( XP,h8[ɟ i:2 8u'`p)loN[s-Mr@| mmm,6mmmm6ommmmmmmmmMmmmmmhvJ2dPI5H Oo,HJ"c!%ٲ.E@Bc #0 (~ [z4%} ?E1ND3Ss<A暾[Z4=swp=֨ f%#L~~tyWٮtxއ߹|'If+Y<ï8x?ay~ 4(4V;c t&qQ߮m9 j$üoyhv"ՏvbkSfd8Ҍ-v6~׼jM۱6TN> b je!\>n8~lGds_C &V^C/r]yc Γ!dqc9`괨2ϩ H+`1芃(@ !3L3ľQ"ù,A M s 3G]Q/i$cVh0@xՑ T;tmˈ1NJo ~dt҆ 1f9.|YTb#[00h0~)]cO=bǫyXG`D3=A\=8 Y eq4 >C{b\[]~(`lWŅ2W(v9 OA@Г!`bsA sz\IZkmGoO7Y6~u^#>d| &Uie€m$nKx0@'!Kp BWz [8!0R  wD,׽)ZU ;74fHK{}]چ^G?γ\ׅ ד_-pܺ̆w^sTm?m`5:s?[D3{9yF1)-وS'njk "Vv`d악U R`B3`y`gnOؤ;ׇ^nG$l+PEkC6_mb@̰ )o 9џ/K* |G ,Q=}Rlca \wك9gNk{FYќכxׇ֞t-R7a}(N0A6U 0+@\ý9" ts/o>-؋1GzkT;I?3/i{ahӌYyc.jgpv'y%4/;W>+׷v_kǃ}iͻ ^xrez;OaίRJ$H=大uFTYV_A`[s g4Qޅ_ -f7Ntw6;ϣ5Gy_;Je@UgbwP|. ܱE m0JBc ~ qLF,uߠ =S((o,*MmCgowW>?] kٞT xo?M¡~g yKjp̷,i_p i[R\-S;^# C1$]lfN%U7{Ov̩Y ;D7x%{nDK-,dUj m!ڱe;FbD*0؁LhGlT``=DlmO=$oHz$r(hfwN7Su.cH¢ (#ĀA4`Y:Dy[~=sExkǷT%Y-VJ%Ǽ_ ꚶ[|LZмe܂\u`NYי v;/Ϟ #A\4fAʓKIi.q 5̭Jgx PP ب'x$ge:Q+SB`v!ҵ, (渚ɐKú5ꉯ s(þaP'm߽RP<8u(Zㄇr9rnm=Y:%j~[B_ ֙W* &kʾ0rC9" ]ȷ IW'"Jj 9U7?`N1Sl``+ > 8@#v5Rsj/ľFcPQGAӫW+$13⾤Sowf#$6p??DCgQ Im^MWiE{=/_sT &ocwd!A&ّ3F6gDrF0K KW]v -}m.r'#7( Pԓl|RM!R|i  |2 ުy3b;]m7WCNO/R=f'}Eu:QXP PBE(IEFR LS~0@5tTGG4!ܟ?kD[JVJhD,le(Ɲfn r7ެwf9ě~5eKŞ ']T"LrMG6o0W7DYEncQgJ[=W˖ApvGadۑsOY4--N"cwZ:8~vAiUv#.bsB ;G0-OX8:˷T!qY.w'ʑ!0Aמd,AI-m7~1bJ)QϢ;B MC[FL CrIxH \ r |+,Oשۙ\ p6Qb {Bg8E- lV|H1p\"B60!zUFgi?uy/IEJ*#ӯ6 hE)oreP=W$ ^3]zF-x1*iE 6>,J9\}CRE? XƸrL uWbLZe(=Үi׶i^yhMQ4s)uvga/vD TpI/CB#9[~C׈*S/,%$!ldnY T^OW\?0!efb}nkt1I6U&> چ PAj B'6uLfFH۩ɽsZD`J5\S4ݖ[RٟpLDJ o:jK7O|SpCkiD8bNݭ_-RX`KxW5g+8ܔK\˴wC&e&ik{$϶B̵ږ`Bh2p&Wp{bB͆7`B.AK56~xD(s cM|g=6*$TI_T՗ܤ>yst?Lt jAB2EǸk#&r5vTd>t܌h[>ȊpcM$Dd#ǔ@+ ?r2H).7hX:-6tjie(j5m]c `ǷE{Yڭxť?Ejy\6USk "`Ӻb>K_罘'|N>l`z\` 11$[ݖ齓{ ѱJ(Ih134>sL7M&A^I}?c>{A4 žH~k(o%7>սo;n,|$6q'k'kq'sD}'ddM} Ap-Kf}mW26k+Z.BFHkm5bEhR08 ρ,)l!E4wTT,edJ;^Nmf{iFuGn@y vSN4DϮCzt17޹vn =l!!!8{b@A@A3 gr8p}^ ;– Dfd)aO#Yc%p8/ $G x(yݪSɯwAƇ}.N$xW8e[IBk q7G":Zw3 he%4H5pf,pce&iB `̻:sb u7fOIK~*4"ov2`h }z3kշYx@4e9" bȚOJ=wWi ÇU;M( \aB`3~7l^^3feuкM/+:v1HP`yh0)_ oVi2K#RQR@!xPO?gIh[ө[h ͫwW&I~)g~|##h0|#&v1[[ 'deՀŒs[שXZz1W:Zh FiP%ߡe騑:M%*&L<뛮?RԦX).?A'A)hexO(ٹ* ~aged;0AеV'SGmX;PO$,u{b@Ā{ ]HЬ ?'5P#+u%'c~g"^o 9J.w\֒;1O , tzxcf J M}3bȘjRF=_98#hwǭcw -@͜7]8:ku!B4x`gNz!N=tY4Z{W)\fUv6>}%iòhO#@-J: UX;av `c=`p$X&ہQ{?l ;{Oَê/~TQRh}6{%$ 'sN&Ԙ$yk[e t1Zy35-G3%NR1Y]zvC?ݜ:X~GL-JDV҇ Vm8TRuk!"\ƺX|E^> uފwdv=*S$hڣ t3;C4sz,M5gMPc:ܾ5'v* 4oaW9߁䟗r¡CRf"EYP9wf'  TqR G 1&#2z7\ɗ3θ?J=a>%Re$T y|w@+3[ZT[v;M +˰z,KK(KԟER'L"t'F!F-30D+Z4f]HF9G^/1-`Q9'D@('qzI\D|ʁ u}$X<1$oӲҝ=~j]rQXZKx&wjYL)(7ZD0M%Bx԰=ڪMq2MMxlC)}/5[ۆ^>xGcD ?E֧`b7,V­,[P&TTw(NEdBkd&ź3 s~ ?Ёơ4׍q915%D>Ag%ؤOQŸ蚘$d1H#aH;V"+w$^ ߾5BEm__&Wk3V(Kޭx\C+|r [ȼߓ}L iV&B9Q"ޅ%4mA. idB@u-5pOD i|[v\X8#q4ίV HCGFdȪ -"PTG`3QWIV/Q]̥W_2?U-Ț7p\Uų_}aJxċݵ% ~̒UUvjovL >H~ ʬߏa[?=N?f)U] =Ùbײ U0]3n"ä705Ms7sV a/1 *LŁMn(}B??Ny@ oD4*o'iϗC% ԰Q) q`n߶9oSԆS$KЖ`>#)q<[D/M+0  b5 cDq|(+&eTZr_ve)5 A=pHbmOtd:Z .~_.rCO@Lc <]>+}Jz} "?O= C?"~n[mCIF\|*Y!S.v rLν RJj c3$K0ܕ㴰pDNQ4$9p^Xk\Y0ӯ`\eW?G %hkD6(yd{ŝޡN+ilS񄌻MɶeZ-TJ$u7 }d<ЌƵ@{^zӤɳB#P)EbO{,h䍱b30"$׿+ #`vТzIEN R̃ OGVMK&Od ڭnK2GKcR$Ɯ6.,8!#G?"+eFMw;F(n Y?km^+f㰸nZ !]vG)u7j9䲉ȷqdd`2CHw` @E͇+uW /@ŃdPQ^OPA L`r|\j8wQ>l\NL.%nAnZ٧I;}o_tۉΩtF x @瘼9孲ܪ %?b7&euUtC(lW=@eѾgRSRv .֔^ 0z .\Jzuůwj j͝tc#Aވz@$#q:p-os-|!+ᓦ#8#r{2 Le.D2=&Xkq._`8MC[;9'q+,bQsuJeaV`Q٥]kk!1߯~2 ({ȀF |ssEɽRn.8 u!5A^@CXbѢDwN@U.Z!7"Z{̚^#>I:NB3Zn~g%!Ȕ)'b#j">j$[2KSti"‹|{O99D;5fXXlLe2yS*)=q${mMXn0gf*ҿ98U"Dd 4H3i6^bн3%ƷwmLKs+>.dQjLڰ9U*ܢ+sf,~Lj9o3kޢd}u KA.hĢLʅ;#5)Hl`3G*rx7:mB ڧBeDΥvO,/c)+?lm3t@Qzt*ľo+:yioprDYں)Jov`!.W`^n CБ{ :u4rX?Yy51Bh?QW|TU-Eƙ4͚2Pߕlng=c?Ca}Nŵ6^(Rz?ae$[{,u y*B^i 5+Qm[g<>2e<=p}X_28I']X)QppXm3^I$:d 4nNXu{؇%.'OL[($PswI N)./A`[vDL$qElj}" 5Ӟ:7C׺0JUŝWМdf^^>Rf2B*+갍l-a^:D钣%Gtk uv&e調jSt`j22 ҇j2@ {QeWiR/6|//D(ĕ"xP!Lzd--|;fgvDȣqPEK<,B]Kߓ3>'ߵ8lyپ,Ӆoq7) [ԥ8.=ǣ=KۢYࣉӳ3 x&r{*]HmƺUj .Qfb؆>Ʀֵ̰ݑ`oM U!0wӥ6G [V#WMkA/^˒g.a TE1Z1nIix<"cAvO$”TDC;$ә+PloAλXwH&Tw4i.݈i;)f/Q%08[3&rI,iY@G+"$׃SR{g``,Xj":xީ>q7ူ9eBVw#CTPDRw% POmL0u,{'e} Floz&Y=,,qq&9(2xB$ DZ;Fљo$r']+抉= rUbtÍp`u' [}Txၲ靖"gx.ZapW*z6?۶"Zj6o`0ZG;R3yj} xxHfZsD *cdSdmɴ @W!D`Л&!TP6,Xd quMĐ(WrHZy172?X\["o,ma`g3yTq f4 $nuo$y G@gCP,|ɻ C`?^]f,QWNTeo}ac-MMYBa8hN]xYZ^ x`+,\k*J4x2_$N`1usv#bԦ dϮ @1 ZqMYkoZFaR A%یS_F%#p'AG`k[V4 l _P_MzݳT30ڂy2GI@:ؾ[zű͜]wS-a?)3APoFv0Zx3 `Riy<~@gQw s2x;ȊQ?Yg?H=QIՠQs/߈z=%,bc}`{㺞r\KV!_SF "!3*8bv9+3S1W |Tƶho\~\N@l l%X E7]~%jHD֖TV-B~pWt?ųdOX^%:W5 # ~c2]cgKOO% j+O9}²x"@Bbx&uUƗ(ZGL]S黌Wo"˃H," ?p\ +S ?pGqds?\/:MHXyH5$$MB?wSȌ3j&TVZGV% 7IYY{b-&μgΧ ˍ kJ8fD"P g9OM~uC͏ wܑ:xlF*"5L̢aĵRTBڣveJЧ i+իg eF4`X, WEͨG^I4BS6s}BDX(K >H>ULڗjM6f_j EvPJڋE^@DRGn.R2.L苆K[TTezᱛ<{]f#t-\u8jrЅgGm)mDŽ3=$YDr E[6P\qi{' *dFN|`kIz oM }O!*”wcV'lRs$ t-ەvlvenS_B5~Mis]ٮ/k4P!q͝}.OPNr2N{ρXX3j#X^13RyNʗ@[2lwa.0D %VXkt߂ BWM"Ȃ'J%r &*wU |X*z33@=U眈.F͡D~g'G'lH8?vZ4s^Ta A=Sn-UӚ|zz;}zmiforͩ4&Tl aHO!A-b BSZ\mvhՊ]JW˫&,ٳ6 ]dkyJ$.-3 ?fr6GgVXiVDޅ;9ĤҼKi9(;@ LO]'jJ^c|K7Acux3[<( Nް8Ъ޸CF{G‹bʼn[@(gE[u9QF*̺HL! Τv5zU>O@S' Tϵn[=4+"F1% *wCDސ#ea>G) 5&7)UU= {x[}`\`j )2^"nƵtV` @]X zcRe8[@Z0)Ԡa,.h g0X9WV-K^|AY4>e-9]dBE=IU.B夅qOs XaHdHP~ 5vi75C#̷k G}$7LAmH~A}-#hN(k2&UQ: |"N~b8y-Q6rAan`x$ :dV끎w$d6'URr v;Kԭq냈_aF=Sx&`%Tc4`$sqZ_c5kq!DeEy. VGO>Fs,xI}[-V uHD?zL뗙6\$q7![`+4 *Wb[[ƨcpkb  ǜ̉I$%}^'qj6w~Fk6k9̇i\\]|!O{|; ݡi)6?7ÇPJ&$F?#M&TX^#QtC zϱKmŹw5K\-Ic:4NzF@L]ʧg ֠Q0hHέ Jy>=1\`H?2r:213;UmҀ$b1ƜV:B}L0<) Ѭ |2"=ڰ:Jm%'f4Z;T)87QrgD_%VPQ.{roės\SX\=;J6Hɷ( xMg+#\L!"sX^;m-3)wV@u 9c%59)lILQu.3'{o,"fVK|R}m4N AV&i'4eq؟#{z51M_f",3ƕ*t8Sb%Aq1ɢ1t{^w:#PE Xv;_ą>h,hXyyE sUfsPR\ y!SUPReDGAz>Kˠ()wAS+nԇdgdG9wU~R7\ cC.6p.*CA䭌Rw%x>LcfKYD"W'w]0Ybb>'0gc7:sJsL94?i`cqJxPG^Va:J.d$FI󿕴>?qG4tFRG-ymtWU7Dž^W*m SKBDˋ`q/v=ʾ>0~dL(A8H۸ j-S!U//_g:ʏf_W{>I;kD"@ľMbSwoiSvj~+9€a)y^} V:NrJ$.hO뇐,ۗig)pTUv5{wVri}cOcN+KU`.!;c2PȺG<@]YM3DsJ\VjLN^ M2T{EaskYZAt`Z;ӗj¥)PTՠ3U om",8`-!!V,}Fg7Rz,Z9-C1|M[R^lq`z%}1 L_Yr.STwlJE + /Z>啇p4zєOs{lpALHKĜ$THV )϶ ` p5Eqr&Uj;AږA{ =l.O-*vj@Tm yEm1AQή<27o!Cb2͋Pd]W$<.rĝ+/r\ٱH~=F@r~@DL7泥 `]2[ x>h+A/Y+uUc}u Oس{{!g'2eB1>smkpj`'**-)} ;3_]ZD-p";221uL m#0!xHO5q4oGRMY2z?[[p&s1IKKa^W]1B f-(CYc5Wdi~c@käK擛vQ n D 3Ģ{eyƼ0^obB jXsIyfC ťvz8$]<ګ{3„POӲ֝4[d#"g72n ioRK`sѽ ń)Z}CId **4mWK+ӤvgTaT#"a1pȀ2OtD6U e ҠIKQ @QTp7vBb؎,; eؚ&zpe_r<8jp3NsXN#8ϩ38/`USN^$R[p,A8. Bo-b Z?v Kcd1ὀǰBIarЖg:^iք(9CPQ(8;9_(!fZtz[ P2KC;4BV/ %^s/[4LUv )okV,&FS(L|`5fA,yڄM 4+p$>K5um> rV Z Ԣ6 8(F\(ZR颴ˌBGJpcv1{ѷdA[G0tj." ͶyL7-؎%H1-]&.HGw<I"_Kp^.(i5dMw,|,f2$J-o/'u mh4f8Q)62ftH@]Hd &ۀ>whqg?Hx=3@f m eX%υֳ'L}'~ጷ\=;|?6-iNiF F^>JvlULΡ^=KYU\C[c8o])x7$%c)Ly{˛, &A{}쁙2IX.04ZVP)Q̕=,[M]Iw6,ʺm!Σi1[T3*Xtʔ,#l"~ř)}ʩ8)J" ֢Pecm0:JBp-jU\:0E )J,FaZi8~ RVӁb*7CSYD2U'X(RfkhjڇQ$A]aſ yYE!Pwu bǷRRp0RwyHM/@o N3,~ Q)>'0{V/3w)A~H>ݶOx=}ddI֣.B\u^bFתTG&k~1,d6'F2.Lj (/Or !)ɿu;Űa(XkfG=W!>ah@{x]RALO?|HrO{я('^ڳ[ sbk3S2CЖxtc5 =ka*ŽrL8ETNɸ)(#n't݌L7#DUPia_uYi?c&'rzBk#/WT;dtbqx3 ;KtoϻaV #aN?GЅXz2\O $I9~+dBBU !=ͷUqv@k7##>9}^DW02pl Z/A77EgCu; :Nm)z$C@cs)fzXvN[pp/ ߾y? yAHS| 0B_7Io~FtzjJfj1&Ղ;8 GSlsZ̆ y,?Od IYrQӪ{*srL.] %EѹD&Lf9 (Ӛ(\ =Xu_oUonI7A` 5/ƥ;wt!lgh)*XBT^s&^tD?'V Og LV͔qw'~'qgO" Rk=t?pփE. K]\6fud|4/A3-QfYg5#UAyϹ + m+[t~KQߓ*M`C~~`\J׿`5(%im٢tƥ],dH*SB%; sWʊYgp.iyy՝:huD  @X޸RxIIӞ\=74ߠހpNvm_=;$QnlEVdQ1X_]}(1*&95|"_Fgo%1kPEoKT@qfܘ, _NmjR| jU.aB(_#|׽q{a?S:3aK2"p}wη<5dyU ֲoXh^8`v L^dtyU^ӈCdZFj&5Ӥ6"q`s *݂ZqeX#570?/Cd[HF(lGݖ$3M6K_K4,߳c~g{|ұuBi6g CVߖvwñүx0S?tƭy߯q:1yf#/۩Gɵɯl7lB=nݕlwQ " Mwc|x%;v~Qe.րԩK9V 뺄z@#_~mwm:ix2(Cqr+ 'fs^Nq " 3W92ٳڹ$ǺooP_-sxҦk_B,k++i2ӣey|G{wyvRk+z{L \PəVL& K98udrM$fA UE~%uz J/OBn[,2ǹ~ z/Rp ~_ DD!cZQ:vC][m# ~H ݆:;/Q2 ;{hЛ[Qy:*8]:|*NMl9:A82hjm񫊹^#;:~+Iҷ-_{/5^?÷jMa@p Ȧ_"b ٺJҶI&~u^˃^<UI6hztix2_շ LiK8bg7ђ+2ꆯoߘJ@d.nP }RFNI%t TRZՖ>3vl5IgC]=c" T?諔prA3OI*4J+#`h Xأ<c5&)N_@C*ݬT4:+Kac bR@͉W3|V(WaVwn X\aʫ_:jVsKRE]k4OgY@;V6&xK${pGbCT}q $M⼶"Q M"T.xMӿ##϶tނlS;]3qs5f٥x东' kT0J !"\vjsX`en~&K@6R+_GYodu('B;]q՚z@i)pAfYbsUzE>l7 nPOf {9eQ:e;M:Yw]trӷK =3Er>[]N;?xd'7@hh=9sK@>mNs=jCi60Or1M>KbNj{LKV>i| N (AOk;X 1NJ)O+ .D7xpKH?JF9$ #̡k$KoM`>v?]l[0]@ڒ$(, XZCAܓ4dQK-V5g?Hqs<7. Ty(^S |#skɼdBƴ_{~_ P;'49Q4L&$(kIǬm0د`w|i%scArǼŬ>h˜xmwb<F xee_ 3(샐9ȕvhW5AMKOMf/_κ׀wfV4 D}^-azwt?J8c});L"t 5js M+ikO)<VV6&QVBWD~SaGi{j Frk2C绞y֊HzGdE1t?3!ǝaH2KYg-W⚩͎#ś ||dX`3!s|( &}ue.fۂ&TNa.Ș'h$Ie΍5T=o`rJWB1/ !à wbO''`%mTY,4}LN*?$>To@YhvV9EG|;0=І g@"!(%d0fgn~ϷA*ddfnVS>I+tؐ .%Ofɫ˭b̘_gtQ 2"\Ɛe|Qs^<3hGW1Rb % )zŔSy}X9_)uׁw:{z܏Y-_i>O)}=6Mmm0m0mo\dР-Ȕmd SI-@\ WsJoM؍udi'm$v3w[4v>yEf!b43膫,ẅ́F.Q{+Kd7$@ QH@ C1Y(DA $`.-O379O5}&WRYMY]o1_ggy'0ʅ"2T7b<" "M`o`Sm汑څ@Opt-'Sd neg {O;o 1N?/.<)CAڶHjpN{;Jgƕcc~\~zбS|/c0_M$9|kUNf>; +n){N-o%w}v SOO4`A"Š| t'yO!DFh P kIJMZJBNωԁ<ȳw i6˻uv EdOk_~#;iK-1"XcI:Wsaλ[L?fXJouSZ]D~Q#T'9P-AB na-|H: !C#= ޚ"TJ$:ax[}FmnLV5aaM})3cOPklqZWuEA(/(1)Wax ~a&H7*&B3Z3sUۉ^NoܗŰ٫q7lwH]v ܽ>`2Yȝ86 @F)]“ݔ)bHr'O'ο}YF嚦śWݪZ>|&_1 @H q3V%wh7T R}|}Ҳ=E'࿛ɹV__}g,.6ߝ0sȺqtVyT`j}xt6j>%% <-fVFt*#A;>epDh od-N(Z9XPHuɿbt]mЭuExt#M4R^U-z&vcv,'m|5:nm 9 ȞD)oCDD҈c m1C|.Jm3/Z֡|u lR-.Xs,jD?ٯrq\F#SRq,CGHyצO0^J^"6,Z 2|wOڋM̪^=*>(,v m$Y{zW]:s?[1-dBZ #cd )=s- ڃԣ\zʔ%`*mEupE9 :)12~ OE^S5;(Gj), Ś>Mng(`dLOlZ"nֶ^Ӊtk3K2$* !l hB$]x.qjqI03/5X|Lڰ/,PnX$~D2&P {R&lۇK}ĵe,(`N~}WlvUBtvPӄȪ qq J>ui*)r#%S%`fTaN9 uJQلIQ[\ L_< CXų+wnV}WzEѲg/4]4JPu(GY;|\~@ơ~̓BoIv; 1ٕ2~ y itB'p[(-]Z_B஍Z PcfFzCBaGyb,3 O, Bzauh_?IeН?*i^ y&Gu{td8*PQIp2l['N{< &g_t1>ϭEakӝ2%$ )K#+^siwIzeQ[;dm RoQtRd{ md12{[ A4VB{vLυC9NcYp/h$1]⌴ Ԃ(;[p%""a Ľv>Ns_ KYu|tǞ Dt'o^Xضz+7 ]^USP(h F& 95RK@ ea1iGץ)X>[}`-S,@x jhSFI&Y%2qf!\LU:uKX1e1f4u660aTSqG1"e`)3 )+;'QF }ܦb{s:R/Eiap2k9?{GT.3<dT2`RBg Q%$QS[^-}‘x)}sD_#e:_]7 c mʨ -hyvѷ}" H=dgc q>[p3'[b\ ;́&vkd P*!\d'ۿGY<|wUBМ)DoPRn6/u>(K1}Ӹ X }H_af >]Mb z'MA\]rݭ.'K$%)Na("7IF9jsJ֊ϡs2<; n&p'.he5zfD*mk_iK$W;'A+1uַׄn7|IW~IdD:MN.n[ꞃ"HzkS[w0>L.yV‡ܐRMn;whý.jEӎnF_  2[v ĤOQXu5^i@V; .L=a6K06C@LTX ]_S\zPHW ;V&́󆙹T>"W^]#vCYきAUf) /Ĭv}k,oX#jP3;VВ0Erc^ #D ӗ_Pߩn)z*} ѻKGșm&`󗌄qO 6aI _; Y fy/ ('!cMCaBi )%cpҫ2BkN6.}0j5h3Qic}>#J xg9+; D}&riS%7%-`F ^يad~>xk8x 2"{3ӭs?їj# %:};8U~i]JC^_iC>F^ʮ8OP . KZV95EHn݆7r9Һl9o]zniZDiv,Wxu#~53vǽcɡ/$C#9.k3;ދtɰۂ:F̞9`(VnæN&_53S<.1G/FѠ.t9%m"} ?VCU"έ=57 Јߕ%V r3r 8eOp۝jyYjUy4)69}D7[ÏEb2)g$;8sPNvVJ-+SF?"צȀ+B}%/anNݍ-MQn(ޯʣp(uIQuW#K \M=+ !*_a/X/jGDi v`[ ՎGnC{E^l"šk2Ur'i =*ۻ&.+BCTӕΜdib ?kg1T gpJ+c @;@ZGt]%h]%=Wukt nϦ۫k-,ntS<.N3uI1Zh?h\w(\[j%'̊O9ym :tl`BTEDR@ [Jc5k;wolRӳnhĢ]<|ya91w:tTXN^(|;<9F#kSb* 83>qH;ECցSilJL(",J} y+ {@QC m$N4`>0E{Q`I =Xc|'"inO[$+&bP2F'0}h|),)WGѯ+2ǯـۥ@fpAb 9bEw#2|9-yIJs7SwEh%5p%cĕ.Tp9TG=I]B Ydz1x R  s !u7-,Ct/N7cTZ֯cN)0]Lͬ ^iR׋uL6@i9~<3>) 9WtzIǛH9Y]{8)Vb]xA:q}pZSJFBx0=hqgr2C14%n("ZT:"S3R>0tlW-/>ZbԘҙ;d(fnU'| QܥՂ# W;ov f71s@ .BS*ekY3ND}l`$֍8_y- w'X ^ѽd\68qzōؙXqgR5[a,oOkcHZ"lLfirQgHoPti-X`ч D/NBW31ʨ{Mm]dz?nlUۅ;6,ScCBmF>C2_Z%l~[_[EgQ(k)B]_9[fň$r6m'ncڮL<ٶ|6I| El*C_Kzw݉VjPu'i\AeUXupM`}v Q{߅8;%:M.>zQH]U_7k^u1>+ TSƋ҇81ZН{bz O8͋S5qAϊ+IȞ"hT*Nz+& y6u)ݲ 4$s ۶l؄ZWeۧۻrar"JÎqUfpt)&  ،wW1خ8UNg뿐Ȇf-aV(ݹ$ 7@EXnE[:fM-9_eΘ.3LN(&C,j nf_+10B% T/^@D˰(pIݿlyh1B53Zc!!nJcZ9̅;ҵq ٦]E{;3, x L_@ؤ+Xe+|š!6I|Xm M978O..7 Y{/|Ak51!q>gR9qyGTrkp; Y~/ld`ߪK_ju#pԨCn +#=%hM0C+$/Z_@:N3%h2aMɷW,u-B.,{ r)GVsh29x}uᙍ,1:|0'ouN-NjGXkJfƶ#ܠ'" [&HK .R[g|3cʺ BS 6?P_M7^H@} tTSBBqXz#k)ېe4OqϭC' LHzMX?* tip0Z4x8h~{bl{q(<* *c}# r,?<q u$7rxva781(/u̥Ԋsތ2Tȟ S ѕ;#Af *i2aqCfɿ$* 1g ;eF4/wVʻ,!/CKjy :Kg%`[|N!l-RБkg>h}x`X=[z 0!UC*FS9eeg 51Lw\̂gk"2O'ϽaˎvL%3e@TF[ŋa$)]Yj$+d#EcR9oWUGW^1MPdlQ"f1Mln7j\^٧V`\iN! ңzQzoc@KVRweJτiWƔ^C˙̈́[# AC.swCd7rsr9WR]LWP.RrƐ2o>Z偸k?CQ]ay]vpbz)͗8L짴UL²m=[ڕs{׵%4mD^8^3]bLR]|y(2'Rwy`Vz"X؝6&\#5S$qlԚe],{=t5.'4mCpoY?_!!x)m4$bFM7eԡ:~ʗچ826K,|^!Bf*DdbD I>:j0a(:\.kI$6!.HOSdv*Æ2Op ݖD7s0.i%da˰ilLAً K\Rم62P~ F؄ڏ@ЦPu({-Wa$O)4 .s&K691,}ҏ _u[o9׻t>_!GYU l0{0)Q5œ+XPqS7ksfFږ֤[gIs2m~߮РT螳Oj"ةZ跍鴰 Ш>$A>GI8vҙ74E.~m$;)۸8_Q0jSm 'd<3M=IpߡkUJwamV PlO€B\yo[ xl B} %tSn7`c9y/87 Ue 5 |&m5< X< ' S69i߱b IˆO|~s=P3KJ}O3a|)wπELZ`fKrfxOM4ݦz]Nw ߺ >N`oCԈRǭe}W duc <;ӤOLR?;d{D0%2:)l%_k7(৉ٶXE ͣ?t4aPJPKnk^(弽`f%^3YVP- @©q[Ae΢ès,cF^IùrDvkQ(#nkwľA!=\Fc'H♰K*d\ gdlxג^x>Akto<h] e c{4\8Oc21X\^QD~EnÛ\ܐA+@I)"{#z!@{40/]Bv oܻMࢲĘdtHx&!CA1M\GzZ:9j6ԯ쎯;W(l95A|Eb=JWMeI˭`/{r$⽪>{m(.K縦zSkӓr6a8[ YO7+LH\m/q`5yJ[֞6]ۮܗ X'S*Hxې)y勁)|+GS)d 8Ɛ+%V#jVa藂Kמ #Watui9$3uq ɤ$ 1};Qײgyxٍ޳MU~KybnWtA Nȑ .H#bs# LV.Atvo<,Q\ $ ;^ 28j ҂wxktETԝjY_^ bMg\c7ﱜ+Nu:z|*=rHϐ5sF Gl^Te ^T{#=_*cG4/պ7 ">.$Dw3}鵸sd4LSR j1mJ|1UH9hG2tn THfr:AA>DX2j iJ\| C599tEtj%^[K刞8MMhzވŮa>T_dxKq{ U۪IBJSsW$xd ssr1PǀYG(X{yʱ_L407')z841r ACt(DsUݏ,zv4)[9JLPa"/OaP nBaSިg$Aُ^A:{dGN{O=<q"Au;PNHRbZJ2+!H*̈QpQyWM:Ё/k6UO#T@/ܮCqjӒ;ZQj+ HK|8|UR:]Xפ+Jyw@P%&)XU|˳\noⓋKg`] cٹ\;\,> ]%_iH 7}ƍ8,!C7& :x3VGݽgRQ/+?S X 5cNibO8Ț/R0_ ~w1!}:}qApe-c# 0X,ƫH숚R3 m/z+JВ=ж|(e]C2 o:JؼIbUCIYoIM.zU5zyP ?_נb+TPq^(K 7JqODF#Lf|PBNTh ^1pXu/61.f/}ZtC{?25ڜV#a CA9kP)g hjy޳|ĴYLm.RTHakQ҉(pcL>F N}7R[T2.FޗO# ڱJ@BNN"|vc aώͭW8mU_+ ^LyO4W^ae\ _wNY+F/P[]j,>r"4D'jm HrR=)a5H?Uzs>U_b#5eچ9IۜΙ"[RveиP%W S0<K(LGE'<Ѫ;9gjY`|Y}y(q!i(',/8נ(7o!U@IJ~g h] p[B36*XZfN|mo G=:*bSr.N˂ A9z"'q\šiu9j1W4gA+p?|l[,Mdls-FGOa-m?sz03~|ä.֯pҪQBR0 ]W-o^l^=L.rj ғ -nOL PZ4He.D$qBҐ\Ӂ `^ҋF":-mM>#bW4\ tRr%ToY08$!@!'XػXfFCv) |o xUѵn`d0%ry<bquB84oܵ8fvylj;b'oZ3Ph:jz8M5;LetڪNl ; OP Yt iKaBSd܇C],k\1 &4 u>pw_GôN'eUWr1yػ;%| :! g|(^ a/ dRN:@;;*ZM[iꟼ ?8pr!cVSw^4C~A?QD!0p<_8{B+]9[Q.z-q姐DzmE[NrKc,+uJDuĒ956+XXyh{_{7ǹL)ZPG1ߟo״Vz%,p`Dݳ^=\FƏjeסtlҖP$EK AlIs-hw$r|SzD)ciDNrEz_̟/3fQ\ؠ/kDB F(y=;՟;1)h^#m0mZQ`BCYTC o:mY`FGt =H׉+c!*`2lƖ[V'Q#ZrC}mIhZկcE5u}ތ-Ј_iގ$XR6(yo,2d%{guΘz5`gƵ.2ɉb2YC}n*y98y3:""9ryϰNm!*e<)Iv JkBN ?JٺsiU$ t k6M谕K,H+u$} ;ԈYIͪ+r/Uh}W^hxJZֲ0jBp9ԠKa^dG w+ɳzLuLghi&x#tYFv,@ܔLHG-+^'ٯ -b4yd"Ҽqc~N P?$C(]lR@] yt=$oL? Øb؞g,B[kPHتImX@˕ <]_ю{!tL;?1WM¼Y~Eyy2|%JZ;[#ڞ:Q_fD|Y3^)kox Oi0!ϸ6Ӽ*RdVn_Q"h8K"sY=5,eP[(>G/,%vTIߧq ]Nj~6f}gl; n8NKwFZJu E}ca 3 ?s?]G6T+7bS@tc}XTG W?fڹꂙ[ҵ3JuE]G  +6,1F"T+f&iFiv.@lȳ lLhڦš fXؾhq~-(?&_ԒA0'vty:pXIW%POx@7l+\'bhKS ls~S }L`=5&ΏZ!AS`uHsQ? йƀ$_Ice,h+M]huԃ= yv?zTDd@viqUA%2fsɨ>i̔W *,8&3H4 S/cDC<7Mv:Ó48d>.mdDkևpc"ȕB{]+3DNho=Ϝ)MY I,I? ;NVy˞bTQڈ8gsb~6=ӳԭl$E FŮn &hhx@c "YAQd d>k8VqM$~?8 ] 4FGQzєTf^{ egLg5^vJd;z1O ikL%j2j4s5I@=F'õry ۝c)^ .ujܺŤ7T|dY sc>U^]X5͵lLlpc+2X?%wV7YaZˆq\SE-)a`q'.ܻNWz7 s v[;d3s/gh f6ԵiaUeuf=/иS#tޟ_KgHbl|y"B^ll ꭲ6ddU|+7瞪.Ag|\P _koBA8'jκ!q[:@Q`i[L}xVl jONGN kTt*Ե{΍ }&~kC3 d ѕsГc}Ә/r{rJ2~`HcszC<uUwUҹ^Ʌu\GO %}XROTC{$X@g7}c&G랡iaӹ IM! '>#q2$T; `'"=l\]^7̋VMwMR 3r~%+!YB#FeKފ ܩOn7LkΑv9УVrP.L%i>19{&VZ=ρɧh[~jdHh<3ɐ\-Rz%GQP >VR)PySc}T-ĿVN&?8^lLXIor1k">8A8"-ΚҼv[Llfs[rLD.MR.J?:d^=7kq(.lo#ถdBM?!%9&%_nF(i{YSlig5[֭}EQ3in H^FIᩖ.NMl4] 9Ig;ID^< D6Uܩmu|e2{bG+O~$*7Dh%v EU+4jam QR +G5v%6[#}#86uێ;#zǷfZ^ u.`;+ǝ Qb,SN5&Ybl![&21 =Oִr~VuK˺86 B 8\p&'߯v"ȟZ_D=ԡ¬Mn%aj'tfc0:4x:Kd& kCu 9VKGmpނKy2c.xJݙ'L #B؛.:eY5)}dr5N7b 'ΰ[~ĵi'7ؿHCsmI=9?/orBI3];Ztޞ1٧jyW 0p mتfšU9X䫵}YIu%M#$fC#dR=jjUK.dMMɠhHBm?Ę8Ԥnёd 1/ѳP'ԆāD Sߞ ^XEASX@d9:gX98v|zо;͐:"{XHz(B!kD@K1e=nѠޠ˔v;.jZ'=3L JqҀJ"j6aUSz RϯlILGBeHt)\ge;˃{4}5~/fmD=]ōGVR1~mi|ԤJf0hRjm_X9.Ъ.O<ѡA\񷿏xV֣&87( MlibLm^cޠ#E%G'(lHR2NePՂVkRT=x.k" 5Cm1`>٧ē^hE2X;k֚ %d&cvAϨjf"O+t~K_SrPBի۱̑߿bՌad3b湱&gPus3:݋TZ0j2 ~tB!_{dguT0^0f[`ܠ ||7f$9jEJ#ۚ$+<3<zoT_ʋJgSܙ)/r/;-<,a+CVtrgs#!8U gPw2Kxp$D5YQ毆I՟{e2 j$֚x|w<>$.' MO]6;=uMKTCk|8;|m&2e+L%6BkGnWz0fKxcSe2{2A3JRA:TCɈ]•ՑO3&ʐ7r#HL;i\!5pUY5:(LD]&||Xmgӌq1ͭJ8+p8@C>U ;DϏs{nڐ骤[gL# `S;>t Xu5w[vʞFeaN_ȑߚ SG>f;(ֈ9 /Tj/)XVC ~ק?CYE~XDdXL|Wϻ]S0;TLQCKC)Zo`]FPEaić`~L2BaXg_̴0n'gYf߫О+\"V?Z34Av>BW]p(d6Z]u}s\F *j4Ge 1k"Qh[OݭTc'ǞdƉѣut  #L ,`B9w: +)U a19DP'P f'&э3gKc60C<`3E})-Hw*"e_ h*?=sB5uLh8!mX27C)ͳDb³#&] g[m5:-h" kuKoUgca BZZ\LnM5x̻%[t^,bڠ/qX jVkӭQnJ;X=`4ľڃ/j2* 52!Ql7T8挽 +|s 1H !e4rCgT.BцU3Ӻ9/9>-5O&R,Vӄᗃ"[ꌍ(J$qÊ?x-p_4," /U/ȱ^q-X-FqwFddWs#k2'OvPp޳AW-̒+T'LQ0j/ln*[@a9'MDg+ d_"bgk|X-:ؽFoS-$*.Ս8bPyo U ^6Eܵ#ӑATaQ0U8gФ ؘ[O[Sr]8 /y"&xZ=rk18!8"pr!)^w!! `uO yqO&$15`,՟6az3` P=N}"g("-.k5z.b\c0xS~$F9\]rQ$? ]ʤ-JN Tՠ>s( I8κu 0"᎘7v-f2UG`+NoԻ>p.=UL] *EdJVz;$|`/Q^=*lZp᧫זz_ɮ'9:?.^|e;2q} CrԚg4xMr1]ɻ]|q/b_o'.`B+XUH'ŗ?P^MꕟZc>}.[HKjdYȇϬ wh uq݈9hx!\̰dޞߌ3uzC4TjҐ_1T7 Vد[J%@A&.:#:vP#(a(%g@/4p6@wa9NO-(Nl=CuXL.O96CV4Qܵc|"~'W^MWnª X~Jt\nKE>'1lp6!˷;eu&zҜ58G6l6Ajn+dzYBg "OO LXǥ!l§mLE'aFy)U0bQf ɱ4d5h[٥^K{]tԱ`!FJk1W҄08K!?u;[Z o5T8_tN]0ҬL!኿4\7n2EW-ͫ > 4>DNBXޜ<^GOi#z*:㗝D:4k|47Të#Zey֠WY؊\^Nsdwj*%<ʑ=f#ǂlDդ%PC>uH3ӟx/3ʆ);ue|fL11處7mŽ7O| fȿj&*DIyIqX TtZ[ ~ŀD&9 KbOr;'ga[ NX+'}~X&3nYYy:KRT}VOhŊ>h\\Z9q6sW|' yØsPQəcWK2ۑv_\k/>P?ĴEl\a/3j$W8Ddq{>oAT坎ܔ;>8#}ڲs ֘^BF} D- mI4`Q^cR Wpp#Odؤĭ{@Dc3P4Ce.yt':#S+)x$-&öMޟ9Ĕ48 IJ|nB.]24uZVa~.aN !Err. {3RNFߺ".F "tuP<Xe0;(~EZj2MCXAUX@)W? YXY:nȠX60>ʀhhqfl΂jIq켍oFi:úpp #o|nx?vN'^98.bi43i3SD7ey)waLlפSI @3hHy ^5H.#si( bܸ&K2N*,&yqNvρ&0쏔 S[U>SaZ ¾PjkDDK23ِ+˵h4;pcvUW&+r}/Y|ɋҹ: yNP4o>H䈈 Ӥ'yf$wߣJihcJ|ݯg54{vkp@R9Ұû$GE@f[s1Ta RkKf"Y-m <:QG&߿75?x'ӫtXWk#Pk;J/X>VnuU׭:Y=ޛV\7m7M-i"n 3b-jc)oM*CT{<kQc^|u dOQR:o` q-bNO O",]w77E[H:a `9VkYh3A,.C+oqflWӍN^Bo]Ӆp@z]MHGE7L?X$£dU&M G+$R ]RkUl%mI7%%$l7EDwbR/Gi^2ǘXMщtҷ$z|> H Tk*ؽRd1 ղ+=,F"UAP&8$+zBl0P_u\8_#݆ BgݜWfvCW ۸4sCU4κϢ7K6G^8♥?vtwSe`;EazK$OxHfYVJӝl3IFefͩ㍇׮b_!eKh"Gb}uOqw3tU.DB`V_P̪@wBkS$[pQ^ղ7i fL/oPB sa/%ɋog atá517&L*^.:37{_JH4|A_RA467 eazn)JCMZ(B;霨h 4 le|}< W#z=-*$Wkrsx +aLfQ6<3UFy=I- uksm*\n~vp|+;ٙL,vMS 6e_@_fHt1<[h.'cODD~a-^KپgMDǾ܀M/8 '@ЦsO~P '6(dUkA`XU?uҟoR +2Of@~B>}Go)l8's?}UᓚpV)ٱ&+ ѿόQy.аѾWPxdɂ22E7?m 0W,(kUSGiʺD-22G0HRJvGճ`zRO$4q4BTܝbⷰf?BLmVZ낫nmR_fּB! :6Q?"!"wxoG")\||䑝n \"85\ɖ9+B3^- @X zN9:wU$>RqT%1zdobK9*q1G}}[25`\ I fٮ DTkk* a}߭LꮫIut2Q^Ӽ}%8m AG%ȃ2J7fy9C$!G}ۊnGB?a`=7AjcA·"}ْ>ePݡ{cdfǥ47@pBHh:R KUe4 \s}Q e7)vo[(b9[D"X3]xf0ɱfqd&Ш(V> pr39`!lC*a[$lFbn@C;QÈziL9F 69Z]lV}by$!s#Iƾ='=PBl񜚹%ȝ5m+w|w6 ;` x &8G|)0$kP%1xgZ: ͘VyN:iqQMǼ[w,f&1V aa;?P//%j9a7 h81`vR(h 0 D6*YiG1Ey^θj~J&ea;ͼlu1˟+ [,~8݊yÐ~x/y!zh&h$fA=ڭ!`Vj){v7\aN55$=羮>vGMmZ\Z~Dһa= U`Cz@;$y%-# Y |tOoA3HgjsH84dUD&mmlB.\T(t`ܙyI*<9uCĜC܇5^5c"P~~fI6CWw;$ D:vOјO \dz %M;)#9l [|" uB3ۥHb!:A(Xxh[,'P`./oSw'e!Bu'3vPBb$y47F= !-yJ:{ \VbZf K_ =`uxGn J0.%~p)ow=~*{4E~F *bvy&ϥA4ީIf&t8'\Hi׆ ׇ֬|MEB1@6SS^݀@?ydŠ`uհ8<+ Y #HR_B|'fF?= @?D'(n[3>k];-Ǜ~×ᲧW*8/b&, ెaňoSI eѧ(6W> B !P8T4N u06 H.|zKh`$|Ȼa 7`ӡF~p!D oJ?Ovp̞&:l%#MPw7H{FxN' ! ]Bj($cp^Q&5 a.UQ0˞[m=•4ן?q_YGġ,}YL*FUXФ-.~hb䕴-ċ#5{feg7 J.n ^/`W31WQJW$V۸٭qƪJ$mK%0EZ0L S9{n59 D@@ˤ,PixWd NWxRNM'KxEl, /@ l9Dqk>xb9G$c)X|2Rvg%%[JExQu0wg7_y!W[ d9ۃN0cyR <şH oNi0DR;A7G;L(JWۮ Heqjз'&8Sb(|LN,qhϗ7s0Y2j . D![uk{}-~1"ob:lj=:i,Պ~cD H4:l/} WT\JW,uD.;?t  >ni,?Ve T<>yK.*h_ii'+8J i3pY-ZC#=^cY@&>*DB<}(~sg𵷿Y`/pI5!/APdN V'wBWZ5ſWN4t秒UbSoI-nCU ͐L=PfK^/N |FVߢŀ~>#WÛׄ"Dt |`0-Nm]z㰏֖dMh bc52gu7~q'/6~:y{E/S( Vj  :o&yfBK-F(E>9ŇPftuD2^ )bx֛#g+a=LϯJԙ`|EƘtC➪qh\/8cEƴOjwVYZԔ\,qx82n3,"V#0r, Y%crë8otl^x?2 L'23)lSadˈ*☈; LZ5_&: |y=jh>){R ?Q6-H(#cőBJb 5oLwU a+cT?"WM߿~n`r2| 2*QbopEP9c,v_>Cb^7e~Zwwtج$ ^k* f>m鴡dyE S-#{dᩲh&zfkUTʻKm+? ;qWf+6~o 3s0"0$A-_Hq+ȓ8 EsEU1ꂞ81d |P74FN}2otA&p6cKWJN2viXgXyb :ʧ=, }zH2(bÑY)5.iZ!!N J=2UX1$33 rR|.u{V8.=gLjV!7S5ө FC@EΨE5L=N BapNRI-O6;7w#Yi ^u#Ɋ5,/#niq3ٔRiF *T;(7{WC 2ƒ1klWgYlOm{Cޯșԯ=opT:nU7]bʕTVӱ{)3Uy<%b%BzȠU@5ydJ5e b|qd'JK+FCk'ژ3#ɲt9As9}Gm:YOXyE^/M,4䩧L$Vsn AǛ[ ˖1ѕ'l9*qtl N]]ѺSb̤δ #.=>SP%6ܝ| Hs&V.s8]aYjKiOvEFU}K~e A{*t2ugcxL~RJ M{L0ӏ0 $Rvf2mD$)~7 wū[6FSQeN#ɲC2i=YZ,YBzGAiA #q=zuxNpYCE$kQ<*Wާ頨s:hө*M-拾WCo2xz$*+(pgcM٬t#)_|<9Z3s}荭l]YkhXhSsy-:қJMG] &v`\kr3T 1@pDw*Tn3|B'^W۫XavNJ >#~Yc]9ڕU2ө\|IԠ*X w//0<pc+x3ee}UCrzPppS='I֯.Nn!cOlX|gvz!:9H~ɫ77CZ4w5W&u^q1|SGW!4Wc=DϞ(>Zc %au6d$ު^[!,5fd @[~QTaܓC.eD/ ˰+E^gLn+ fmDD t-QFl7@{&C>m$U*[<.G rDAMc2ヤK=P+f1ץ͒u՜e=]pto7cD4YxLybu)/Jzڀ#FQHp-f}/h8J7yPLXӘ2I.d~)('#Y%g,,oT)WGj }UO}~Sf]i!Zx'ԬwᲧOH\D2[θ|$RNun}Bs}n%N)L("_Hʵ@r Yy^7cP9*e_N|o ?5mbw9\`6ۊ= k'h+Fa­.̃ބhÄ}9Xg>m .tCb8PPyX6@գZ` ZKE+2[dDQF #vE֑T [?UOv`HP+꠯qT{PC׸DOXyK%kY ?mkdIfQxa'U-}{=-X}!SMuB<̅܏`5~v# mxl7bѠ;BlrQ1mlAm^M(lR3B|9 :˳pkg}i, cG϶V:T,!8nmZ.>i'k->HyeW,GA171uQy8*W "c2Xcy$p8-5`NFHb{5 FT˃(&FpDq=D,U@~Phy} gZ_ %Qh[ X-fcU'鼰EPv9DfzY1"~ lM\ӌxӖ7?H6=ċeKa ,to#)ߪ^J6PTU A8&k㳁ĥUlmGa2Ta* D%i9}3~!n^7?:MR&|T^r&hq5+l˹_"MM!؋BP06m+cg3o#J_{W,'ld{]1 yGf2>,HB_^{g^_#hie:o<1>Vml^7CB ](ECcw,66z?,#t9-N11-7f]htXꢫMV=1KsMz7M(r *P* (r4&W>^Z]?wfE ((4t3i"K}@O'}῟G L6vrKʌ"0g9m9to`uͻ/'[N`qĖN_2leߢHjb"~i >bӣIA,z[k,}Sޭ(IAI?\]]((-AMV |)!GKQ`[ɻ')ǭc mł驮"_lgLbF!wb\?c۰ʪAe`/G'5&ГyQHrs?T A>Fk~W[2SuW)a1? gb\X#+Cq>7 YN 0KޝD^!~8+{tƶx:f7t8b81t @KUݞhG]͎eJcr:\)zF0/ÀOQrC: #m%b5 ;0&&Ϩ;!}"-2|BG]Ob}Űkb.&a! 41OV$Bgg7Jm0>karȞ6;Ť Y2k&2(v; sfB[I`rl&8?~uՅI~hUR #kN"7XFs^С7+-1e,8^Q6 jwSK/Fw*0&yLEyRg)uK&VcsLm̎uRtTNY\d #RY!hz4V,?Vh_WI/0bbr$Hs! k>8|QA1]o ֓uAI]߇M+oz>t (<ڴ!."]I@nle3+uU8bUq$-@, 0#P&"(S!6o)H{Wo eBFR<< a@+cͫ*wFs}7bkL' ӹ\ԣTe$⃾ ?^Gwyn|W{ZP< 3*IW,+-/̻^w͆ƒ4<458̴qfyC{E]n71t( ~ DU\ !8|یb)Qs1:#f"פQWƑ2O *;foc\AWKmԧEB=yI *0;C$MTJ_B*ܟ&eD20u77ᩬꨘV ޅ5|% %$EBml+wP53f;R'`^EL:Η@%B7ql;㬣黵Ax fmzOks6?U745.,S@8<>'m ovԻT#(RG6jt̷qaQ!Tz:FQƚ l9^YyT!0^1slRۜ֫a>-ogn>ug͟N=@:r<ԹXqIUc N}qxq¯"W=U zx&$4]KnIUJQ/<(,Q~*:e/RXWHY28 %2vfGMavua/+gpUL):ZwY FnX\5U Z:() |o,Pn3Bv7-x)m nI*VZwE$KoH%̡Wkx:ò ~ŢG:!w0i2+d 3V ҝ(iuN:z#L",irJW=sIp]ܿz?Wҩ $z5;-X"i:uUgsCS,O>b~<:bc'SyIa_Mլ]opptt>ur^Av<5̦ח0x}h"ҋ.s( `Bp4UO1{1"O[n_6fA`Lj/F_\a6&hflQ *β'b݋6EvSڃ'3 ^PibϨ㋤XVu~H۟wl]dzEtFGoe>o*Teh( *D sܭwv]`fgWɥp@AD7c&'X[r@l?wpfyKR1.\fT_d5_^{ Q^m@#":[D-k+ 2?x"L)hHds hLABL-\VZQݚݩϳ 3,bPn$/P ^,\b?]? :߻IH$_9l}=0nV:lwXrAͭXJ}C+C.\[)Crƫ]rCJB45 EXrkio7OX{/2noaIYi@5"q 2Nx?t>BJr6J& HHT8k2;-̱"DsmhRR .n#bjp""$| j_/ O2>@ԜYQ4b%^+&4^nKT]T=0TFbwYNaɂ2¤)mTCV5mjqJE|9$UEJ2tXz+6d5h{҇0E3j;LPׂ؝MZǧ~qF8&ˑ 2Ci.:Hp'۵'($m9ʴ]'O!d}+s3E/$T~Ι,r><3%C afLXP-$q`Dkzݝ~+,8yhL~6V*XNB0hV}].GSc>z-y/P3{i$R5]]4f_ LYmxFk{L}lNPuNfzBSZXF6<ѶmZ5Z{% aL|?Pgs'85Rrzߧn8qog(~Zy\!L{3!ǿ|jIι@>$*A_F &(9'd'_] GSMeF)躭J'9v("(GIƢۆPҦuzTDI5]să2Ek'*BE4^ټfzTvuG좽'Zs<+aD{6 o?!' l_EF!(s$I)ˤzwyy"-]&#Gs՘;Csp]W5ݝRlt&ϳ$f/*~5|liЌy, XNS*ԨA ֐͆l< ض ~aWDǕ1Qn!GuKr,0P 猝$$U6ٍA)DS˝hifM\70mrdmSHwnn%|j˛`rTM a-{M`pEKn 5[{ Xx-mvf*|7C/!ex^9̕½0K(mB3-a=aS!vo׋XR=Y 9Izvb#x,3nҐDcrȉ!pyyl)5g<_On\pS ѯ&?N^W`zX%p <3m&DP܇Qqe) Ьwgez[NgwGE#)@G;vC<(XģcIJkM1էW~nm=M=pWJo|GBYO_O5;$"V(u*;2ߥ\0!GRY3 ZM%8pj`Gd"~2nI փ'.`x_v(*7{NBz46P}m|BI8uWRBqxAnF^,1t<5U*(nF> oE/m e{۩G x0dQj\AR4.C=qLkhB\0 oWcMvhK3Bٱ5?D&_^Q $E/ZޡWJKNYYjxѪٰ )mkuN΀@ ~@D{9*Q1-O#rϿ(ڴtͶec{n񈪓)}o{JSSXpO Ca/Nh驱6_(y]2JD $ZZ;)utM| c{]=Jw> @a6jUV3d Br8>!lOS']Ppͫ(F?X vj h#I&G?Tǡ<^K:W| A9}LÞjDn療{pJϰ>@TPTyizSթfЙ[jZTVnz[ )٬q;E(w8-MrW U#{ V1(c='4𼦿A9ҿī+&^M?&c|,BT?qe7n9̻zCjF]w0z=wNZl$O\#r}Rڀ='HAeiȉf{[=4i ,V'ZaJX_rEo6эc^vmڨo٩ {/ϻV=_(IDwN%g-0-z2f}F_rO5^mm 8Q7]iOS}rX7mI;="x| Q_QCs[i %rd XNڴK5qeRދ%W,{$҂R90TN#pWE]ϻk\ 8eES_v0QZ 1$D;i94Rj~cO?w[l,Xx_op9C<+hVm9,rpg{tJߺ>z$an<_}5g @4"C;=8uX9j;Ujj@iF0*fw~s먡sFxt0rE> O_;xTZzU}7p6>(qif5=XZ08XRڗ&~z(}Yr,ȏrqb"qE|,MQUNW75W|\XŻ[Z r\ ~+=944Umw] D^A{λFbܙ⿂6?Kvw1ޝG}p۪8JK B4;$*iϯv + N\S0Ndh5QվtO8j+!YdhZg>E,U ht1%)zM^p-)%0 dPu}fuD1l Eh/\ ^(~R]q UgcI[P321(^*覘l F҃/*s+eeu Zl7_&\T-a8t@%pW_>3 B͎TD'-;,>0#6BҰX:D xp2H$rV}QBT03ؔ6eOds_tIF<ïN⑐q  ~Y{ܘm]eWgT6@Yp0/J}QnQ MOY/Yݸ0Mkaf3csE e¬/l,􍷶҈/[ 2gB,2iލL&*fUB (moRB/::/Ү}5 3͖;[p1r8Eu]u6m_A_h^ J&" X>}¹Ԇb%4_nBN-V< CET6XOO=# +$o̮yA]eCyo;D3]XNk}u.PP؉1h?P}- ynqUHmNka&=ɁH̶ /OKHp =QIwqOrX*l:Dߑ%0iFҹg:"G ;qL@#gKqZ~t=,mYo9IWwTfesAlK.mJV G7U,J\&_v:!4\CЭzESD̓f/gBA;?x}qO t(P3THH ͫ.uW^l[6SwA~UfG^Qgxi'~!yJ,r1duqBsRϿu9uM3FX*v0u8b >u8™ `:O9oso@SzäO'xI cƉ\:(ܱv`z<̅݀S$Ɓա޶<e_m7&@9Yn{)gy-.ɈKFxpg0Ha+zkF2;EjJ[$dBL=]~(nޒ`P kzfT݉ v=|CإX'J-D DJ銋<2hۻfXS,B$ }e+$+qAstL!!(9bo`78ko[ E^"oCMBs+j&LIvLu1u)7q YItҪ]7]8ݣKQUUq62ȾTyBMNOp{IO~WwH}Ub yMɶj̜lBż TŻͤ3,/?=Ky2{So>])'[u0V>󳹪2 |Ul[RIU4k ˩& z>%;P`7*"Hs@\ $,v%AL UC&0/-abSڞ$`#d[dǂwWʭJ*+!kb YG#9O Â(.օp{骰XnNϭT.rW7c~}MIbSLjI [`]驵,p1Ek}ў%jKNdU 7IwMrÀ !Rϯa hըpdǫ[p1E {M?y"A K mϘΠJ{[_Ծ0_գv 5sUNL۔7шe'hLfZSpdb>R6#\c@2̭X@F#pGE![>}geXPn;=Hz,sYUfTM0;u9G0'SBb1>_rB<\O *ZeuDи~]O׎$t(C ː'W/mt A! 3|p j9r ,nfkl C+Y.-+14_TXIkJ%ߖ,E 8/ӈY>-/EA}HB]~vC,Af*?CW)4_s/v;r[_Xs4fo_.d*~ՊX^»\;lW# uEY<2ey[dLlnPѐ()cԠOܞH"W\l~iO? kez45eg6uΞ\|T̛qcsJ OERx@Mw~|*1aϰy׹2tzߜ8)|M#c8:zΘT&+u*{3s^Ordz|usӱTI6 1`cV[lox-OR ^ J(-ǕkT+re\5q)iA8/[m#*#AR5C8۶"\vSe45D(6Inp^(عM,W;EhpOhvK%{  h^%x 60c,kV/ry u_nċh`j0+Wiveӿ %Mk`tC"Qc+;v685X'ngq$I<*.&i{a5YmN 8C?ʻN]U>l ˫l.( јEgKd hPcUTl剢Zـ '0!"G~e1Ѻ~:ז1r@VR=l 2:fK+F O_[#+4b .AXVG{"Ǔ;zL Xiq8O^^0uF?^oTjM8hq0 όt0Oep 4M8UJݼ)(U1vZEF]&IofX׃,xbSEYz}EBRb$Cٱ&(s :~$)­Di '_g,I4ь}$XTq,NrfnnS[i⤬|pàܺF;WAɤC_5i{'#|˶[!C։,hio--dgqW< z{PqO&{sIy{,x{w|-EVH3ްMu Ex`̾$D:<9SwcβZ5Iu%p X>  MD,>ԫ5s2FGm2C* W-c5iItF"tPlk47St('zJ7Qti KSIX_˜?B![W7V5D^tD|{CR/ۅ8qnHt 3>>O/Ty)PH3J1Cf!En%{[CǣE.Qf'h f1yͱ2Prػ+6؏=Y#ڲ4 ue .l=5J¢32" VJZ<_B$AρHF1Sn5mRFG5U:g13?*lʷ{z #Oe?L<0.˵ɛf5xv?yStd1#&eyIn|,f5=CY Q9ME ZߣFUKNVC =\|O$pSHn2I$a-M7ZuFmf*3PքD^ݼ tfZ\?><ҾM*" f`v_O5ՋAhP{ Rn(0%PޔU<NAa;^[#텈VLsBb2T:)A4Hˑ2歰N7rA7Zo)Jˤ6qo(kDjC7㉿ձ -9irv 7a(-HYgD݃/ٳ!͆  r ];wDQ|*o& "_G1^bobdz|:l" {>hSfSRg3^V{`Fʞ?ykH0sDNwLx/'SÎmx]\VGL n]~hoʘ#;Tw, 4=9Nvޣ_i]j~736D 򒷇?1Kz9?L4݀Uc(g$v~LA淮Jy Ma%_dSh]|έ>[~n&#w lk5^Pg-{TxWe)gjD)m)moDKLw\l"Qѻ%g,ZEI7PCife͎U'=b-˯]#;9vNOu>:.~XD5LCD!%eJVIel?A渕K sO#(&O&yD|Sſ>Ordݕ!7יo5\`g3~w]w M|-mr41IS\<u*@d̖션_fXCylgW&6@ٞ2q_UIZ 3Zr  5y'ẜ~)ׇV|\k4k_Sf>2/Q_zm"cOYl mέ߯2$k==R Gz}Q*LaKocz{חնc:giazcCb en4,*Ml1(^PO\6ߤi9K# ޚ,>9QZ-|z@K&,Bs9(uRgmnCF  0S` Nd}1caVI2Ԡs>߹L_+'U;K佈jZ07T CM!dV/ɇA6[ &Q(HC\终;8+J_( rg=RY8f8Л"Ca9Ox3pn $0% Bc>jFSup7^P],* 465jq+W~Zj[Lgٿ`6Sn]@򞏷fUbz+vL7->VVcj)Z-jN ?F3 &oXkR0pJ!&5F>qo͠QR %Daېr2xȃJOJ}DǨ3o|}΂/hsZ;ܴE"VgA/ dU@2NH4X 3j7F֏̤eײ]a p2x~,63#%nL!Nw?_f9 jqD7U;ND@ǀ{5@ s |HSw4:$U9˫}dXN/\|yUDJ++q Ri ׹{e 0Ht:y%tzo2E ؿ.2`i`,h9wЎ@T{U!ޔ< &p1Wv ԨolfF_"=,#39N@Eg_Q ˂۷Sa~LLF.Ǽ=ϳjd.27qJQd~ &ݔOu(9%u_=sOd%˜5tNjBo"y偦ܸy=J+XjHB3q4Lj>+ ,a5\VVkӒ}fZKu9hŶ0.$jܻ,KsVf,,=zb]Q\[c*7XPWQd ?n@z=C`bc3֔[*#щTI٫4'.YsO~Ǻ }%w3#ʧ2(V|qJy-~-<gU{x$%CyV2v)ey6_cŞy]YH6f|[oc_كCU bXt?!dzU=G&7]+5AqaK q7InlGdk2јI%7j";8 jnuj0}Xt`%ٿVB + @BgDk[CCWBD&ALB.08ۥ/RÐoGf˘HпCe1D6RYlDy[C%P$z}9ɠkg#ApP>ue [n!`%UIqc⑰jN'!éx%չ-O3A_SlmtR6a$<єا?߇Jh ;v *ve\8, cӻ|ht̢ /}J)֤5%/1;ς좷w-%D]QCш(P]6ЁFdWP?%/o];U8o0aHDҁkkʆ,qbMyK2俢`y7Hg~7_ 7ueO(1͸luL،dL=p$v!% A 9?;ˊ6 F|sZM z}"(PYB]&n{(|؜yTZ Bԕrw/6<N-]Ǿh0V'k`Lec&{!3b5]^)/.oכ2s"w)ZXc"ժI3*I]L [t^p5Ԩp/'tA>aD Ε&43JݨSw`IΗvI7OlkkcQfIG0z˒| 6H)YZW5ӺͤYALeZ6b@˾cF"isL&jG-I|SW:`@0NZR7U:o?>srG/]U74 B u|ו3kp!4WG|DʥЭc E:P{C9A3o> 1>@Z``>zj'R>`@38Y47r,{sʆq+=3W\Je\BO }&N^0j7!sYSahYMa rGI5->8zWp|wAp B2M.!eYlo(4J&իiff,q5|1ƠۂKw@rF E!cp GiP #sP/.ӹ]:Hwc6WX̽Y&MCL[Jr>4yffZtQS%ލDAm|a1+Z҈* ^ T/3[H? m~"4\*y]2mbBVZߛ6" tuƬt5u4jѩД 2S!#Z;6iUEqĵ, шG"EOHB xػ=<|b͍b eO?siJ0 6;Nk82Q([plTyCq %2 j@W}Hh1/h5p mNmrh;#{[H.P0Eq_D|g2֜O82qC5t[D _R$xiXʎ$ &x=1 C19OWc6F5n|a:Z=xZh"PG-GDlZtNq }!VN֊i`wk}A `I;.͊3uAbyd#3N)vjưy>:>UO: ox pikKvk+r}G~EnK]xڂjKҗF^z0r& sCE)CK5-gæ`XK߇T`s ApЮebBefߥn[iފOAÊuqMH2HR+K>m9 ҂'l±.noeJ*^#m"nA\BįNP=ZAs@t5}b%oGe :Y`<5=gyo&wYg奯+Pa$Ő256E=U2(*n` ^[+TR@@œș [}YX!{:㬎mĒ}Ew)Qk]>q r{>a1* c_sq%V4KT%yRnZwŸD2>D$#:4jj{'qک{ƂX"3[yB x&kC:%7|B_s/%IϦ@;-~=1 o#7dv3av~wM>!|9&4+y=kHp6+qpq$ss!)x],⥋G}av7h6Jum|͘ע@QeXGg8;;+<6ό}qTPZa8Ž:YzSC⍣m'go\\) Oʱ61=~D0GU@{1ɞ?ͬH..!V$FhfySn:2;dz.lmgǢcoTFj$n(|/hum;|(QKamH] Hyd+S$ܮj(]dv PI=;ThhRM/Hh#xX'(7Z(f[Wtג$mQmY{胾_yzgUdgr0;xQS}Ĥ&C3KPFyݫU7.;rC!_ E AJLJzT8lKXen'+P55  /``e {c. UZyeU\wVQ(2ntiBR&qaԥ& DnPp`r^Daʈ0{Sbe[LSŧԬܞ ⸳98uPRîx@Ymio-2=x"Ѹ&bj^*I-G5<&Ȧ)2ş+ [q3U؄QzK9<5v7~1Atq?l] (* Gcu5H>ZX /O`¹+|ʠBk"+K[KުXӐi=-#q$|).5Mm5k1[Orh ЉX$5VIB;iayF2Ip݉rb㸋7w [Ezi3튪}RU| s`j"IO(`?ДSH^`}E!2a|=x_ĭd-w !!IO tpSɡm ZW@Tt`qz?_Ԟ<$@y!Ъ)Ŝ9`o[9I'4l䆏hcDGYm&56,PBqqE\n?f҈`!2:}KcEi CISKf|iCq1QԊ\܋OT|9FP6l#tEGg ^%?ɶզWe'6ŞPe{'X~S/lk\8B*%P1} naEz 8:ׂ[Rw+`Z!$8"b{Ì WQxzZKX`=5/^c@Nӑ0JeHMN/Z'r{覄_ZHb;K6rCwCS Q.xP,&it"9#NU[N>"XĄj$h@ tPqrX2PP5A QJB۱D c?#xњ mR _NnxPGsznb1> #M*-M%=#-3_o"ȭ~CՊ6l?49vp7qVGI X<]UB>"!T׀Dq1On ΒƿTPse* Sc<>Ά{ mx \X{ %M&K} Wb6kQFPh,䖹`jk 5C` 爵0Dx[p*ʥQS*3 <74h)A1v|.Jg2LIlJ]ϯ_X!R]FD>#w~-Nv=-Q͐bV7v #:{j0vwK:z2uU,&,$)EAd\ʙ@,Eܚ%F&wili-\A ;%jwq=%̽ȼeH[Qp|wD _ fSKgw4~r3"#b:k>I1k)X!çD>\)$qI/' T]Ŵ?dJO4"(?;{ 2i^XR5[i|&YP4gû2$!{\Zfr}q^HH %g%|}aK%-]L t$;IڄWlVOöOj~ax16˺bSlL/pTF]39nexao9xmR:gBeh %j8S߽|#/yl+]|<1jCTkZ..0;Z}R?Kťu܋TȤ"l4zuM.RFA.(LMxl}Z s4I+5Cك%Y!sLzWIbd3w{PG bNo_axNvmU+6;]JS=)2E#CExjt甬C)eϰJ0%&t- Jќd V5RtX%Rؾv:[u_>(~{"k^9!eK.%E$VIZ~6 5]`zQBQ# q .Cy.w*+/bamx!#Gx)>cSjGƏl hi߬Z"qf5#s;e 1.wP9G sBįG܅-)jAE.܍F| (YnSx> G*c,8C97VG?Lw,RLϸxW28- iJ"Xfѥ;_SN7_(+g5w\3MosfDЋZS27׀4Ki9.{>ܥaOxσgl{MLwq C;m;~G&"-ioKRU45pBf {VWkFK+R6+.0•MEp+rc:t1}4(R!1\Z,(1JU{q+3Jɱhv,qks#K " 4-9judbqaw vLGv R!mLFGzH)fxNp7?0q뿣둋6#ԙ=Dq0X#XH%@η"]|O6%:ƟTSL`Fs,ou?uA%b2GRd)M'4fvíu>Mkp%ii 3*lD0!rیoaB=CiKO:䁧]FRogOȴͲo癩}#46qI2jv<]Iy{xl ->MI t)0/l:!FAe%RAV}Q+'KV]ztftdE&5̼;JK|w͆=]7Wȍ3Г/@5![`[,G%0CGy!?o,B%LN+ DC&6eO}b !0 `1?g7g"LU㭠RN\20&NPQAx_t«gt@+z2w+ۣ\#cT9BQs:C|6tkY9<Ǖ(T~!<=tփø Th`t6h?C, gPO ž#D󗨝`]7#@>YhqI9::& 43oJͼ#@z <'f=tuNR+CBo+(Ҍ)^XΪGaC)v7 kmzAk@>09\:ww8>+;D VO&x_ȑU"n* WM,R !Cb h| [,] 6S{L;,y8=健q^ИƪskE}v7Y^ j2Le POI+-Hquw6dԬ|-"ӡT`(6V3Eܛ6#G:m̼i$4^ݱxشadD,nXކX%[%\mq<]Ed]• ;9X#'H$RϋV u1T|_vf)eθMSR54oA`9ol#U*]Bª'(C6ϋ~B#S)w=B=$ ?s߼)*"'h^%я 7ќ.w=΀Ǹˤ/uŸz Lqvj)j)AU/ؾTf*w﴿&lLD.~YF9vx 2CvkGHg2rmۘג%.KimۍBqƿ o/1 1̄ Fb2Z$o/@C5Cڬn(* n~p<}<%  /y$Fs'5݊DZTS[ґÀ.Yyy I-t0r9p$$aR]5b- Fj8`Rfkp.Ae{0{6[0W,,v蟑^M=W>O;xeܔ,b.r wؽ: p0Gkg\a0b\HPֲ_OFBһABXrN[OА}Kc +tPl>b8B>'⎨Rs\H^yd@:IFoKp`[JjL(PJ!L<ѻ*%26j6v?.)Ønh"eGr1nnxL'##Y=DVmJjG& 0:/9"vhLTe$( -HnvDd`A,H?k Jx/Ox-/nHr1~Fzh,ueZ\oEXpթ~#'$(xvidKky0^r:ENv7'LJO9)F=À]B<((JUOZD 87֮yRs⽡fwp"()֡y~3Z85WbT=i ۻ B ApŲ?j11% 6I_̃H+ nG#!@a&sB9z'`1DM& ;ުK}!YwWEYJ}GW3A>%@XJW#`inAM&.ۭV1 >.O Oքy`9-T?桓X?o_HYO \yȷ#AQxzo:-mWQ5)Jڀd/ wkAI8j:s"|ȱEQ=o, NhjfGL" E3;{ |7aqS#1ȦGD%tם:}B<:[PjY2X.!~}oU\Ѝ)t9x`ΡcUU&kK{7^jZ4L+ۄJS^''zqE$lemcFFwN>S o[ @̹y5Z-O-- B;& }0gU7Ҟ\ҧH6](q&G7OW׼ozBNaJ<Q4NIǏ@!H?^;w 8LGD_! ^]?3L/T a&VxSN|eMh n5(KJm@y͘GBjXމNMI# ci<%PEc1Ra9s~f,p[ۥ1d'P=!tywM&b֥1M sI^_:E(ײC!wr|)-BX8d yeD Č;Z.yڽ[.`?(7m"I1tT7]_vb0ztǨ;TJH7[nr61t1-Yi )4@پ lyB‹n3f*NApÜ>IEhQx7ʣ$GKTAUJ1O'wHh1"1%/y)lzz/b>BZKq??]m$Fs|9@Zw\XpB7[ rS QL&G#iJ\st*'nC-hभ*F}kL4:\A)v[x2Ku?. 5Bкў}U>h\grX45%KbJy5u6u5B:9nmᴜ'ؒ =B5]K[[ᐛ#ȿI+ ?$3*/~fiǨ+Җ?@o8سBUwsu+L)ÏWɴy'M5f$%T6!F0pp}26cԹ-:)I?K֕tDс/&:wx(BP{Kͣh !<. AzybdL{DfY{ ,/w^#]SA c$BC+F_^瑄iJQ{lyV,NY?g(Zu S@rD6Z"Jĉ3QNU-Zc* "izj{w}2cڕ2Y !Hv3uDL*Lmp_w<^CVWKg 'ˈ۹l:CUp7KOuʚ|B;-F]4YuyQ5ۋOHzc0e # e<*R{YЀ8M.Ԭ'm xC@\|Zist-r̷/9 +27&2I$=a]"4lG;" ;[k'E\hrbP7=#xw_ k*Q鴔]HN"vyJ$4Х٘*t9\r^|j ⴈ$4kWCÆ@\b:'UIJ_$>h8A8&@a1?C=&dt5hPٺ̦3 ׶_/ۼ^OMh(s])<cC7KkV 2E=x>ahAPc 6ޟt׭ +:.ӭ +wJwle~UL%gd?cjiqKRalV {C^}Oj m1S3\bmNbũ:1;BdICd @O d(c)b'<?CH)SALDj cɂGn MPHipy,1^!(otxQD`6ZE_RԢ~ӮmRZZI4WhSK8H'.*L-ܔu^l'Xo*k+"5&{XdjQXJh)Lu+L2v-)+9^涚Trqg -nycқI/jw~qwK_m|O N&,d&1ڔCQ0PfhtBL"@VQj5 Ja$6^ǍREh@SgM(yd3n ~u:acGv]p;Rrl-ӸWޯtϟT0POc[bUlJ#g ig@B[X'*BI!.{>cP5:eJP(cAkxyAX^v$f?^3ڕlk>Gj80VWpk# ;K>o;ck3?WYss6\M{km\.]"}/mݲ8@ ݎ'ˊ{F`^E??S7;MkIyn_;Ҥb&gknh(^Ror"'UÞ驲S00X †)_"jzT^tDTCl{jXVaR5LɭSJ&*kSUXRQD*Ew{9uicSj,2ܲ ̨-N{j҇0Y*" L]g%VޅDjŅ5+Z &^ȹJȔݚH=m~U/) {p4oix=s MAye'Tŝ%.hU`IXME|w>\={I!]b"'4q~CM:m;MWל]Y ػ2pS(E풋'VY.y 2-bR ]ie)]-lb&SJ\G p}&wʭf:Ԣx%2"f­ut^qh@\\MlMzةM.9s?bTvؾ^қ{ EޥPWk[8RXV,nez.b4T*JZaՕ4ho_6sf7[Pi\y^|Iߨ'A=6⭇=IzI]ݶ 7Æxh^eym;]T1T!NJ40O ߪJiqRX"@Ig1f&$hlxB10clh)aEkSM5J1ʻxgvI mx^YefCM  cUU,g9]L]ou|d.^[ldJ) hvUzq,ëb]瞦@i#4z& .5Es /7Ji$S)DidsdEަV&mPRI5PvRM&M 'UلeYP7UCQUVU*VW,"ՔO4D:;,ZO>RbMYOfLP@JP6BNʒeF(p枙[ԤL+z &ʱA+TRҩHBf8@EyLOjOlc)P0ӭƏiB"v?Ød_O_lolvz|kk=8;I!*ĪVMJNn{P<_@Vk4liLb'C1(^\ޥRZL(Ê("{au" mDB"{j̱4Ûk%n_p95()qVRI׻z8/#[WkgpbRWEs3B"xyL&jCQ471vO=T_e3/ԕ2MITQPoR R dOK5y\tSU֕JYL98luaׁr*W֜իS J̾iR[< +S-$YP2DDgմc")7~SL8ux'a*^i"aG8WYWfӫŦdmajY,JJCC%LCxqܞrXBUB, %MYm)N 8&_0av1k,. e{O^x`0'%^!U$FlJjRߍ?'u>j &lFV4LP,OL@c[ZֈM [=׭$1((?`/]X̱X5`o)ֈsloZF՗w:{ tֽ׬p8Dnҧӯ rZ&SNBkgk^ %`(Ziy _t:v=-0-Bry5G65z:H_@G%cIIR;|M߬8'a;'iCT\1|3o;\i[d{id9`ڊot QyX䬧]-iXjw[.2;)xjĹ˫p>L^Ya_.}rTYLėk?J=`wyo0z!9Y)W.Fh&7ŭѓQ x0tjuH2 `w9LOPȶN'ɀŖ]r =E6YN7TW* .Zr$+aѠ CZldu<Ǔ8Cddhalmj>+5;>b(hX`-ͽ?x4SIdezP~~t^m2\Rh"*]7HP7Z%VJ}Ti^mI˽}ɌO?ifds:[tOe, 5xko< *SXq H%w+H.>GxwK#BNKцiɛ9=B<75GvQ1bK͌=+ 6l1 k##>9"- qj %sø +F2-f0? 稸\ʀvfLʾja:PB|*!ݹ{_=Toze]B\q'~g?(SsMP$<+ᭁE`F/gb"Ԃ&ĸ4HvRaVigx5cm> _:PMdi[VT\'8B+bn \(H+khNq;E??pjcлz|KK[-/t/ԃi- L".8*dGtg:FLDie߮TŪ ev _X7wmM؁g QvC/UN :[ EV`xn PmYu70:-JZ Us3I%?yg}Z m3pfEYgcF@;ݿ ]OLh|wsɆx]2LjnJ|U zb6 .yoRGAb.c9;:]`fwep^s!hybLėMc|A,xq"$Xo5a6h;K QZ]Tg-A8Z  ((!R0ϩi1jZ"ϩ ;yU JrCy1cwr}NVM09&V\Asn5;voyYHwz%>͈wR<{*]l1 @v4Kd2m ēq 9vIUWǥ_ŝ4=5- K<8WI,ގ;bH{ n]hq>;2%e[ w)(y\ ~kVjqQ3ό-f$ ¶o`,4pˊBrByğbKV}bIi|_gS㑃 |$TqzŁ@Iq!YpIme֮~\XQkV҅ ,aX1XkOE^v x}`_%b_S8 7}dv긴≈iظ,V}nN'1οīe :sGm[ox/oBh 3m"Ō*!jpT"c%LܟT"Kp&RzjD;41;C:2 T/gEH: zVRܾ$<xm3į b[Ź*N NUqix4I` t=JVXh]m.|x.N%;7X>3ьOWw`܄ODO%;T~ˠBMs=qUlæ\84ąveݜ*-G֖҆]w} yl/UW#@mmt@oVs4 ?\a{bu ̔eF?{S J]kl谥,ZsLX߈\ #CL O"=[_ǃ cyIB߇x!!#SK 'om8~'y:lGn!?QfL-Y͕&C3I¼ Ö vw,PK)%n> ;L=7TϿJcQxesƈhAXo^$}ezp v.fk?7ojX$Gg]vuyoe$f߉;F\wrYdk?^7Q?;f|D}Ǯe,۞p+7=BHL$m $KBO0 9mO mv^uXv ң 7ɏ[R6ߪmLllBK^ЛQy(k kQ0?;1I䍔,אtfG/nUfi鞩iagߥrRvxy1P:bbDQRRrpD)D(r,蚙Qԉ9L8MHiVLEhqiBo'E~߈Z]z7b{!_HT`Jkv6xj,(r Eh&PP93t9읦|N2/S|,u#FҍꙍJ贴_waLFc4'sG[px ~^g~ݾ{rW=_ ݇Nг qV1:oϼ 5{i` j,`JbxMf~#uԱ[^Ie7~4+||Az=] L]ګytڰ٪1T<vؾ +48-_5Y,W^nY>ǵpwg|/S!r57b bxȧlQbm8)q ," >۰1Ī2pXEoKd$d~d '&CI+z>lo8} hYj\N mϷW##;ח3G-m/t9 ]Uie -xU K7=gW]xr'׵q}pvgzNٵV./~:)&kORG@=es ݻDA?ü]n a<0P@@=jyP5ODXRn`D"jv>v%>+y[l1WY-JǬT}//UwA&gpSh4] #|Wk<ڸ%X!*Jvk|jU|szom0S>b l)*;y O/Fjk[ cAآ4QC49?@?BiL>l+&^8&g$[i焬DvR\ioƝx[taՊ>8{{_?Aw]J׮-~o (C1CՆ g4<-EnjR8cZDIJ7Wzƺ~gCeTA6tH yøQ~tEygv}If:OMAXk66j, D"> ^SlwS E?KkRm3(ͽiw&5,n#$~I9=pE !{ e#GOjC. P@H|2Mw'(A EZբB ;NwNtqM@SYu;IY8JEm3N;iAkp 7ŕ+cu^/`o_.T//S tala]O6,=.v8'^?> նv M, ~Gdc@R?/Գţ +B&;77.o9~Iq鐿yL i,15-A$0%]VJEw{ *긯.ֱ̙3<`t\WyyG3t$ʼnlY|j)iɈ :oqդG'NsXǜMfD|TWbߟ5Jӣ[Tҁ>x lZQ]qjѮ^JmwQg*LIԳ`c5HUzHZ>A`Ƶ@Y [?/~w:vq͸jJGTLĕm:%OKXIdȓI64$MY.lV =RT)5K7A%BaR&N gvƌf-`+ EG VP%·ȩZev* 1>Čʹ$'qb9 `ۢj 5uDA43P>b?pNGD_-|B-o! h3sjD_nM|軿o]YQ– $nͭ&eئ\]PC Hy<%%?UʜP.=qup ܒGe'qonځ<={!SARl 8̒#TS|G׹0P+==[mBI>v-%SQ$P`3Оn'͇nӚljӽ3XI-==ٴ0"AUot{o׆˹#K"]eTYTF Q0bXLù )+Ҋ7=H޴-bٵ5 -%2l^ƽK9*>B@nd('}!똧^Y6#nũ:cx5 ʎա~:<=f4sJd>[@Q+§@>;ذ7 |E'}/.,QH%J ( LW+\;K&!ȝށߠ„@ ps N|dLkcɞʣK'EYN 3D~έZ~A)p(Bn^ܰf˃^^:QAHN;5:fIO񅵻3MåzjMJ͟f}9`1f D% -k.%|4noU0i^K_pa}+&E]"\M>&7-=륐bt50̱.c'G9 M +,1IC䞮ԕ-GYc簐c:X<*]2GGEbPbJE@;Q]09'ŵe,{]hv,?x!.<_(GF?Gp4u9bCQ @%2Ie)8iZVJ_q9|k5N2?rYɗ}H|{8I͆nWiFb7^'!o\ۼV10C):Ym*"6GJ!VcYH8N%+b3g~&DAS\IoVjGup vvo,C{BO^acz0Dr^Ψ41X%ЙϞ@#HV |5 8 /v֑Y[0:po:_1^G{\#7SGIww?v6<ՏH NDQY-p'BLPQݢNE}/qJnK_C4x$Ɠv޿ o}Vq7}_;a [p(_VpP@@CX=}9>%[Id}"Xj['tcle!Sޗ whU0W 6XGs&7:&&/!R6 @0w".LCɕ?ŷMI5,4)0 qQVƣ"ᳪC (//.\̌|ZV@ ^)SqcyRӘ[L2Dݛ`v9S2j~#%@(wq;8C@6O|Gn^)l|lcbe TѤ &0g 2'y?@kE :۪եX7~^Á"ɁY9} A}oKBK`3{DqwEQ@uxiW<"n׽.>liC|/-Xmh9|)i6B6uph >g~8 -  ~,gsؿԽHmCbyPJtQ;I`u?Ucw $<´A(K)!q['D?+:(?q?G#gkeT {ǥBkiأ4-匔Ѵ4CJ8ЌTk4425L'2o !(G;A}U*PzP9߶3M0/KlśCGtjHmdO Ć \klj"AlWh3FbZ;̘Yڸ|Ij6Iz# ɀ^nE׉j .V?@_uLC^*G-L|d \|L4 MF2Wc/&*ڭyѳCNhௌL<8 4~_੸]$|/vF.,d6exڞ;IGc2]o"* !Zq.4ޜt(+Cb'{nQ[&2yM'ԫc#L;'t(nB `Fćusm+wM0Y9Q@d։W![woce UFŶfC~{DR*^X,\UoGhc .K["@ @ǪK P,/[IĢ?&̡fh$YnĘ%]hFY* P8VJ;) ]%X+$TE1Bͩqn[eUU,mUk;۷LE'' %} v:- h9'Z !G~1^| $<6ctT`JB;XP~l o Q7A3p'VRp ko7"I)3e^x\j$1'Hޤ( -`2~h+7jm^mȮV ]b3`@[uTW{Lk])l\^ c)1*lb{Ȧ׸Fc '- ~OQ]hNѬҝckXV $15NP zvOp!\ wqwXКae/BX{)5>Acnj॒ϑR3lщ{Yд+Ϝ5k)5wR4y70}=EZyOO$*SF&ʇKyLCJs!L$Uɨyi4޼gpIM3AX{dIk +8tV܍i&"t{0=BY Tb}9 \Z4=d'RKd:<1IOD r$0h#[@J=ɂPUںq89(UaړDSn )?3=Ը /<17;Lgf7 N ǢKC$8E]em )%X>^ԓ{n|E2~9'|R[ tKxۊDbq((~"O8X&2$VR'j+!lZx\S`:.oݯ6X&'dnB'+j.g@lUoFA. CdI.OMK[u7E>ybVRUddS wK5VJ 2+S'vq€Ӿt>|r2iJC'g»IXdFy" ծ@&lm_ ־:/< Hpw{Kj[tLq_hs' ;Kr\E$| Mn?Czm{ݘ  [3}9~"9tq}oEgWvS. \S8;z+A&a<m =&!7T(|e@"@sF?k6p@p&v QcZ >- ›=%>[rǙʀ-'L9zC70M %b"SJb/CR2?Menv> +gB _XI"l*![ D@=i:Q3e e욳9>lRK!bԻs"{n180rTk@\@pEoxq&LG|XU l2v o Ah"sx1j[A-Ehc e^^Vr- ?q <`XWMdv$W) :kKZтt&Ez9RJ*qc2v pBK(C t[6`ݣ]R0@Z"17!;D t^t- i-,6yfq *Zuۋ=1Bis9ju~S]YߜrhKR t2`1V9@) X??*D<>MRs-y]7c`gTgIOY 79%[QSp{X:wdP xS1xf4*-y*uXNʤcU~ '~Qm\b} ><:%ITqӳ#9(RjTM7e/7#HwLS7˂E?S: e#D4? uM5Miy/ Ǧ#ytN޾M?e[-dPe^mfҫ6n+$*Dr{4'oz)cg(ZbkT=NVܝLݗ Z͙Z6N-RܟAߌ5 ..Y6C6b |biQ! } G QRB%m^0i[~6$qhlZ VvxNΓ/M2ڢs\t#=qMֿU=-Ɯ:_]w˟`]}f!I\ɫ7 NlPòL\S=+/Nh;.M8/`LǮI{@g `ip4*tY-R5xma"I)PPS!S_R8"$"?oR`q^_ (2 wQPU@#4lݢdhwn]oіeafï>Gă|(p ӷZFCʰD-Pʆ*c7`b#α/O%U(Y>;X5s=qukĦ o 3.Z#PLy BvZ#x٥) BmP{0ec+fbp@gV BA_%M\J% ͳc̚I7h7ss}o8x)z`Z>B6Uc:@W;>`y͏)Ws ^?֒Os avs4yN= kH>.l-r@sQǛtXDMwmh"{ӅٚRjtR3D *&}{=phHE{L ;ۯ*%Ѝ(Po<_eS38&̑kVJm&8cl7hB1#P/1"5j==4f}&G1G͗z$R2'NP]bNhW@ްNti\QҺt=2D' k7rLw+sݪ_\=Kmݸ+a*f9Gg \e0\C1ȔまOGDb;^#f LWKYHW (1M 8 Q(^Jn=Ync8e7.mQ%XX8%U9o_aѐwWvBj|W5E`(}j{ْju;X7wՉT < \{?[J{;, $]4Jy/ ZiN@ȺI[n/ 93"ykÎ~S SG^~[ߘY[V|=6DGHXHᶼK֑|g,PˇEr8Xiݺ]mK% 1L4FPٵԩ. ~pR*yVVi [&2.ߤhƕAC;X@m~ĕv_(t 8ϸmQQ"5؇e#C(zy&J3 vk^sLDٖ̑_oΤ%l~33K]/iI^á8%b6m~VM8C|VIDiQ *Q % qݪTˉ-qm G6#%B(ъM݅Aa1S,qnМ+:-uԥ^(f˓ VT#_aЀ1n ̓5"ƀ!0'yWD2=X+/ o__$ eBK<-=ؾXdgIqELd^99]=W<9n]/#-R4X$PJ [B[PZ}5ǤŴ'k5/gcz=ۓ^=^Hjt?"7Eb, x2K᧣HC=[SDiN_eh&2Ah`8uEpJ]ACbrl&՝5 1yE@3M@X|ʼ/rw^Utp3$u4&ўzK&Y*~\ ؛YFEPi\sg} z4'GLF&XZ2ۦ+QB?m]G6 ong$9e<(xXKHGCaY({)f,6;uP. խ6B梁0~XڨOu >`{\vlZMcWt5G\1 A6&_엢xpJ=1M(N: } { ?ip0CrL{.) ܈(U'팛z'74b >9{?@&i;y"XH@_ / ; hLUTቧ8+hP>ɰ!eYJ†v뽳v>4D_oQ6PaT,GAc0ԝ [uWD̅AW; +.kI Kz> t,(4VSkk8O/>rI@riR̓H.os%/1&CpOwՒ CB;g5,rjP'/e;]Gi+kLL$P6NYVѫ|IEAot_-Y&1@ v9D/$`*-!b G_ަ˔ PccNiov`i@磊AS{_bi|t6SuI1Q+[~m1)*{q ,kq :o=_bh( 6?D@+,xנ^cw&YcۃТI<-nԟ.pL+!+^Aߙ'%.5p˧&aYami$}GbEAbEA>  0{5fi1i.GF4A?{_ 0l'!*Ґ^r\/KȪJF>{SʱGӕNaG4J]6!c-GH>$ʟI<5=?˩HK'P2#:[ɜ)1e˃up-/<0pQӨhmeGD{}H(W5hd )o2-"EWL[Bon x$4>-{\\+~MtOM/r>~~~t%Aߙ ׁ/[8Ne]ҊK@(&(9x*oؠ[lu;8R2`húS˿>A|`1+`T,%FSoxx}[[|'%>bZ 1s%eeO0'5O5~՗ Ǘ~l*Ua^J¥ԦY`ڡ=Ut/#KV;hCRք)F|ܦD<ǻwt [{FyCTg)|n^E M`ʪ2VP_jq&>sFX* rT ьB d ؠ+pr )̶SWb BYio&ketiEy}M pkrƧL+&U "rznߛ{ Oe+~T'EGCO_#G A!q7 +f¿T IB7~7GV](`R^bY>r~,lIaπ'..LdL 1xǗ*<9b b@OI'v.j|1 8>BDŽ-p5V]xiȣ4uDPqh#lUC%&vr͊a$} x/4!'h{ t*ijzq0Ht ho i;GVKM䞞:Z Ku/~3VbGB>%< fNJMAǑ?N?ͣ@Vhx-w7JbLRM  ĀQ&,nψ0 a%ͨ >sBŔs)F&%:XF|L#+T%ˁv惁UtjfVl>bakCО*!eĮ;N%^ I7x_& h:x?R NµS?"2PBhxne(SZ56S3j@2'$\l8"e 4RV,= KscOro 272f1_nerL~igK \DvW]f?2Ө`W* ЎԹ r)E)͖E(] !"d{.41⠮KKb )! :tn".ĵP|cYQ,Vm/rP= R+_/oG=g>\;cBRVW` P¿.o"אoXFZ`@Mzo`)`" 3ߨ5'x'zRHE9N}FmۥT{59ҩ7fw0ȴZkrWKU^K^R5X>INZB2[i(گTEylo܂pd\`0& ĂO8ܠ-̐A/wQ3Cvze o\E=0ۓAw`TN+<(=1"g@ ղZFG%w$ᮛ=>Wx9_{dySp.=0I,6.= Okm*G#WBnqmJN PB/(ͣ{oCqL6p:ͭFP薽HBHQT6<]De$P DmJo4a`x?%Mb"MOW+&N+=k q30EVW {!ɸ;R0yim;¿h ]w/LiI3iUUsd8i'^ĖT9%w~H&or2}SfGI݆FX%L -f636* l ZJo3j=# fy!;1Wq?^7Oopz.>xO_^w~.FsD>N I&甔ȄD7k5 N_K(هY@ `v &*HR?j`@ɢաn(sF@mq*+Rϸ:\o\i#DTY~_GdOZnSrV$B'_jPE]+Box-jvp-8!&; L d4Tj\c!jƎtiB B/T{/&p!# O{7-r "+"n P{rWgw]%O3{Z:__>Ϫ,)ԩKOM+9[3)W;SVa1=+$ Peу|j.:e~/K_p}F%4t>w/oz1b?7*`DQFjo z2FfN۶:v$L<ѠI@|D9koLtƊ[:aII xKݒM:W~Ua6=9Bоzűg ?_ A͆FMTI&ŦaߦI!䍄+^NPX~fu7nӻ h?'IVByh (~uUa2'H_0~_մ| 1af(lbNv^Fc φI1I;YU%F &,grs\.\W4Rd:B Vd4+KN[=APer}tM+c*eDc# ImB˘47`cۑ9R lAϔR N>6i6 8a>_b6wpk6>x.πxׯE)];m% jN/{Y=X\'u[vMv]i#l3nn܇9XEmSR,c}&TfӏQ} J.T4$;54]Υ  Y|>uygV6; q660c,V~DEL[GhV|7 ,,lxgCF7r|/r|njLL ̙y4bѓ}\x0لymȟt,Vs~v3qA.cps7g\dn.{ȟ r}tۅ)E}*wdz!kjV_{$ޡѴ lUF.5l& -C?ԑ@7eH-pGЀOG.6{qY8\=A3P$U:H&B9zW(HH"bA:1CIl'_gQ3(#|Ǣ}M iNį50נfd$אY)zǞRʬ`P{'ͦ?ػ؇WWr0i{<5D, ҢYA qP;g./4df k|0y>D? 8837:) U-B(2ͭ";R:0|ڝD^}i сp#)cJK?Mu3n1\lv#JV{$קt uāgu-K$_4(Bf$ќwDu̼fJ b<\KI!$z1Ls&݀o(RXD =)BZYqIuskq V2\^.wDm i#m P_i 5ɪ =7X#Cl\6&-_#i: ]K|lʋQ}~8o3՜Ɲm>ƒ ,@sI} g dDP8I bvD\5Z ]砙d{h`.eWgEnyZzrmONS)$LV]:??bmFx$擷GMifRMv\X)kua+)gxZQǴ3P>ksyjV „2JE\?NX>T0IPm5r{v!^\l̶#BJ]s3mWshTrrr/8:$Ґp֖tx`IыD [h]`Ui%Ns:1ph3&ؓk_pRu;Zm/f8<8. r4@ٲ{ e(D!ȕ"0/y&r[qbhڸ{2^kOݚΙqr}|; Ig_kL*HuWxLKl.9)L0F=k]vs }|t@@ &HBXj3s\)1TKXe?j) Zis=gޙ5_5xѠ`oVs  #,`PHD9?zGjXphn$޳tg g$HJW.^X?g"EQ3Vw_ KX2#<;kd;/uN;q6r՗.gHH-LL szw$;hDa+ Ru,90E~OoXkU^}ˤ4%i/7a#pg, fҌݕ&6~ 3,@-{隹5 T)PBWy4:[+uABրwDCKtY=Xoǧ %iS]naƔ.j=K Zƅ;TcgBTɏy0+T +p g5M5jttC \,d;;6P~QΜq #WW mP1]!;-'3?qWF$4&S|!a87JAfrBn :&׈?D.X !ײKշ8#Ze䤢+$gǬYf 9h8F .#w:Cp-,LMiYPP ”)M+䌭JP*6z[%6%(I"sKa\(9ع3etǓ?0q_'Yi(0 5_W[px~R:}i_?zoci!cMTq>ZSbWFWHB7 AB KU%1X,e_9 XlLvo~J{ooRYDTbчd4yzR$n)An0G!SUw&:jP @zAcnDx&$傛sRO_j4@^f^rV<+X.3Jca~U JEJyt\:MO^FrCGymx`-e C?:_~?8M_o{+q4?y"0بxn*h/290 p29yb lX»&)#b(`?K߫>DruĂk4TR;QZ6'}: E.B8d@fEnZa%J.C-󵱔vA_oN-Dr+#x/| D~~71}f8/'6J%B/{zKmI/o#A?K&Hc,gv~9)b; ;h RE6!&q8s Psȁ}SV AX)*m8e' 8[#*PO f3>-k *q`@%>E(jsoq֔bȱb(q9M+{2Ӭʽ!-U\n> I`)nB-$ތb8q=YwIq4C;9\IC[-dtbHVA+pCFx8L6WIl Nc;<Z? 0+$Oe/^$T@~sے&6֤٧(xj`lG,,a-󗝝WUX'7:/Ng;Z[g} 9ҎoTY5òӔ$Iyk9h(crv^7e,wgAAѫaYw'0[}Nw@;!I4P CU_ʒ<*ȉQ2!Wr7{J7Crҽ,^^D좥>z^6>9_ž\5V|DP^UȜ'E]O牏Sp`>uD_I)4*e+s+-kYִGOr}pLDTuTf/-r u~ o:6*u]FϚHw5<4d\4:KiqHE$)Lv}(>EC;@cH21&*S %cO-ʌfwF㿔yTW]Q>wqa.҇ȶ60H t]YZ$.;z>HqK`ϔ&^3m00CWF,nZ $C E:w]'YiR)6tќEbS^*-*H9S`^p~ƊVSKsG8|xyWv(\ә&~4p w\-D{@jY)xfY't%S!+:0=G,,z|f~_Xsq@y3 g#72a'v1a4NW#t(b٠jfPG%ķBO]y\GBEwh޹pBt']q"IBfLt:(J{jCŤ.~Jx ZvߕSʗkە_To3TgY˺TR,%@'\d3 xWx%;}z9?i>Ԑ(a8rEz߄F`yͧVpw`\%Aeč> *y*ז K?7z!5<G8w'hQ܌MF-^W6U^{!=uqj ɺI9UFI5aݿmgw59, BDx,]-7QLkՏ v3i0|1>'8LMe(sWwdJL7͒lBhN6@hkΣ]%kt)G #ϹY^>"y7SW6^b|}>wD!N(9ĄI|at٬'dg0b6{XE`. ~Vl6LMJ" _u,`'?Zq4)5VrEQf8Ȫ ᬨF-l O\= y7PilL5? >\xb 7E+x(abܮ\ygz }Uf̣Ú~@;vp1gi@4i^ğK2hU=8Osxt5Ei7knӢmE悀*#Lv!)oe*EEٔ@#S9!>{xY?R4ǘe0|*!NP0k_3ceٶorw@IWͶim]  4.w[bf&/+~'3r3o[N jt1(=+hɰ/0wLL=&Go=̘ACPq>x)|`WdxIo& Du0nCZ94G#% BL=r-ɐLxN;AP=tel4%UUjv%U.yvj[ݘ:{.]dr}{\x+GOMVڮ8/~I vfZjWcCY}7\?[Iv APm&$˽̕(n<9cȤ][HhI8ˇ}R@! $&&0lCLAax=>~iYr^78na#.YI? דƔnwv7%q5771YT_\n yҳ, x<O?DBce'HwfBh6XVحGu*\^g}Vh7VeAUaTn:2[~fs.[D)&}>cl ؚ a`=J`BC-d槷t`]6hOFp `r)ڸ9)Ay7"HSMpb\atU+-2ONQc2Gj]J?VaHLts<}&/I Pk0XF5 ~P_z`&:T̵Yo}J4'W#8뿱.(r Wd ` 3 CnI}/̬S@vZҔ{ؘP !ƫKGNC̬ ~j '߆03ftb_հۃd HǩG $DR! Gesvo!}v"URnPEѡ DY1Owz9lO2sZg>}X`te FQ^5,TZ/1-Ux@TP D0À#l@!(rw Kx_JkU(om > ;:O>./7~WY4Ӝ'M9_sIQo9QKj-=pŪIB9^ETѢbss`b%2XԘ%nu1't0aX_ @1 Ėqф@z-:avJJ[[]!sv΢(iotK7 5__L8bWc흣Ntx wHClAÂ8i? MxrT@v0*aaZTؚ,Sml?} }I{tF)Z{fcי>kĥ UtlHXƍe*yb[6" BvV!ZЦTMYx/|?6ռ/_I#0/m/)y-K3Z\٠i0ޡWMӲBb$w*!P{ϱ!jJ;J޽_(_Qo6`*%D56vdRîIatE ax&+%ALt8MNAچ92J6X "K9zZ/ bj>&U(&3ڈMXjw>W**w+EG}!`i?HƴǬ cݛ?VQbb8^vY)VMonRʊ0GGA@dj Q`OQm1K,+Rx:K}:VvI*i79.NX;t84Oc ):iP 0 #yNJЮ0*āՒxkSt͇\^̷ 4K@"||ޮgFrs^1d}wxx%@>t]>~K.3ɣ7,.&kjd پR"  !Dl/>ߏfz|yES Op?gpهWef zJh|;ᓂ@s<@*d]U.WS[hQvt1k^~x0#WVOABgnPأ53ITAc|g+kޛ^Z! a<:"mb72R һQ+VPi3+~7;jV }IhIHʷ^6vH"gwXw} O׃g  )ͷg!5 Ůf lb9f.H } L(߈5 xg&%Xkv -8p\T'VPpP8{AN0+OjP/w smJld{1|#{S<|C֪s/n_VPOSBӤ I*9WzW~4/"5},@D5ffj/^Gn]ؿ( &[pB'L\d <)(/\J;6PI4!"L괼bvST)g-A`/_[E] o)~mϰl]ao}#ڗX924$KY(8o&UxTۉ1SG[U*5AJ @ʇ/T,"ufdKVF#?V>.gI8Ȃd$@=5ªb`J놃Jkm tЈGv@vX1~wVGv^8Ip-rO&b?q")=;(M US\<~%h־Wbi`|U)pY *k> ͧ3xr{He'1 a% ,WLH)B%CrϹiM"]|W&`W@NtPQo&=TT\l~4;/}ǚP>=;Z5[zUA.t7<^lK-}k茲*89BŚK dS*IBf|(i'.}`*aݜ|F/EV jD B˛<7:~RlBAu|<&KŭH ;T.3^QHjN1jԜWr)abnAJ<8]W}KΒ]שVDRlyH:K%ft1=J~GqS \n(}`PY sFo|ZwxP5,?}+@nuSy'Ji'VrBFLxiN87;c|$+3Yb[cϕaPF$ꀓ\Ѕjβy/ rh|d3M= V:aC◪FX3K=<]{Y#xOBZlR-΂gB^)*B$! G6atP91Nηdš:QmG0pFܐ6m쏑-J6&Қoe {Z~ns=Y#X-bpH,FqYؓ[iJ4͓cL:6Xf|P:A(x]t}t6,_EBZDSmhWߤ_c@IY˜ຒi~Gsp"`fq.eNa$[0T*CP'!wd(hCKf3X;Nsk:!O`C7.ZqB ~W9bruz}OF4F⤊&FPx&v.>CHxE9p"r]/A,߭ݥcW@i50TzChB8;}GWSYRb3K  ~81͏G u1(lzʁQJ+dk"E__iC>w '0>ZW+m$?a_1q&5,C]wM㿇/\b>jB]=;Bzݚ[!c81˂6ML->qœSN?q;)${xlJ!nwXh6?Ԣb5m>2OXT1DrX)#d-b&QMƅ!QHИt TK5 `y:*֧.VPbux#ƯS:+pGb,jmȝ:Bfj/LȰn7?^Z2ܶBC cQRu[W?̔x)qy]|dqŷJA. JpȄ{BFD0 4V]/;^4jQRIYթ)ɚa4Gkr Td=ykpH6  sk[dע֏eCrz;oѿEI3AA6v΅CٚZu-Sp=MֱT odV3 a4nB+qXEkXFN>{2>joU9s΍P0~Y:#" +qOYrľ%GGuE?S4`k;W#+zy1'nnN pؿb[A{w֩>\_S?v0]2l-n+g-R<~2"/Pw5fS'$1|yu\Zr_|#[KYfKu_ jAdR:/HZ\R_6ۅORH( O[^;6^/>;{o7F[VlU"Y2ɭi]ɃļΕEHW8KL',W,Tj-_gw:m~^f(u:P܁đy;%<͚x@%:H-. =R *s /v(|Dx6b})_MlD)XB:yzX-r'M֑B#䋊YC_S*"pAȵ + ]{Bi۳R vU:r3ӿOqb/n}JCĶ9p OF#G)fsg-^*BMW~.6ƌ*t3C?, =EH^rJ/ԕ*Yw2p{J62ufr-vT{m~ J Ox#.gH/.<qc9 J;,TLK DfF á! QQl[>zDS6[_kw Z'Pz1,#S {0l0(?[N8Wnֿ;?H|^AO.F]Z#D/t[t'$.aQ1>zwJylY ?\5yϞ OW"e37Vʉ6JN}Z6F tƷk!{Od\;};*{A3]0: ym0Dʽ@d. ,t !*z4a6J)o_hmu (^k74 R UTj4`d ,]%fwlrdAW1|_7xH _˭ Lg޳]Czzȸj:˫edSx#E( >$ʷYȱfҠ0c:h Eʶ['paE`nIlS^{[V$pj904D10xQ5^x7K!#y^QVFB!579h/P_v:N/˾]]з1עE;gj@iv,QwzVuyS֥[}kL,LJsUR¤u&Uy-]iã@9NZfi>ZFPo֍|(lrQV_*fRM'eW R.(R]5wPF81CxY>wYRoۗxkDRy1K|nPoAI9rI:G*{T'xtp$j#~SІ IF{Q!2\Ӯ3@+AP1HZ~c5 4T>m( :ZVC`B@_*y%m0N~|dൗbP"^w~8Zц?@ws9 GBvRPEd @1h*}ݤV:'@)Hm6dHj\D8\,: 8^.*tESQ<9:h윽597me m{XCHΠyD/ةwrbCpqo^P[ ,M7wVh&YDyqDgSYv& %kku_ 3V/'/-)PkxLNrїdpܕ;3h=}2+yEl}D 2&ozʜAKwyrAМa,UӀ]7jxB`Ct(ưVsŗs`AC$PLۣ(xZ;(;< u,^tnH\(p˶S |#~UW+<-z ho"pξ\!~12 Bhϣn ,2 8 « ·)͙rϱ+6b\˳mi"=kH4Vpdo.f[>z5r4y ]ԝ:NY%^(qX=X\a[y1>*v{NZD}9:=9C`=Cz`XЫ) zGD7".1?](;*cs#=!c|JwlEF>'%Hx.|8m(݁hP#τ0z~uz\zӺ΀ ^iαkcdoQC ̂s}U0PD+71loeuH83?\֣aet`I)}ix2Rp;L̕ uUZ896DAU:2@/$+GKA:0Vb?B#Fƿ3ܦji$ >(nAHmlS2Eͮ^PE(KLӨ[!ÔtsDG"ȍ˙kiXiqDcdҵJ!K{܁cn D8 NyT>I3bS$H\k@FxH~R|Y>RtTϬd3 RǍL P!.Ѐ+6*['s62\X]KJ=D3RX?/>spQ}˜$S fbzv?KF!Q"t" gkq5T<1On=倿@u xy;LW˭kO5l{W9Ѯx?`ܯvJS2(Jgjێee G gdSrB0Ozrӽ//¾&Dx֓x`AiHβ_0W~Z9;E8^BV/@Gwn!-G λMU̟D3+ئrY;S_v}I?¼i)PTxaay]u`b|6A QE(9-RhrAdnfym}gG[=N3E7|:@)$[wS'#oDdhWo.Ɏ"BEèZKy_b鲉f,!QmHզ ko 0&~i=j}'_,f Wl1fL-vzU3PUju|̞(j$hU;*Tz`^MVJj"`zҢQ %RzU UӎI$4EᑧѸU(" sIbwE\MY-SQ/F"!qvbXۣ l#n z 0H4>̰YEsbٞNoJB69{`TSlx ;Gs֚&񟇋v,i e rBXm8 8?5zUG K_ ʃW ;W XvZ4kY`C๎5~3À"҄ܩKNC1=r>֌c£.mgo]^D#T~ubG m Er=// - rj٘3^?.r+ r)` f}4(qT`@u[COpoIŲcLY"OMDöGiD/lzH3 "(c *rNF3,]:\%zFۺڲY2ȤQxc4w ko:b5Ya$Ȗ k[90X^l !(x4 ቖ1LZ Ga2{īaxU#EL!k4vj VA|r ~,c3 0)CWVF7]}@fy:S_[,/MqUg!Vh}taHce4H䅀wV@@rqO8]#aO!zUTr_hXܦ^GI֚neӸ_gKv1nϟT~kX5^:_n?5ij)gLLYMboNjhlvq^Q]o^1n}`Hᇽz[+a2f`{ڕz.kz2*Z a:)r~^yXM#.驸-e繁LlO* u'idN[BuG+k3p8kjYXPK?dΚx$-i=B Z#OU֨xsk.U:f.tft lMYu1kԼd{<2HSD5U*`*=63A+4fZ۸b,vq9~ي>:D,TW?w̘Y"_!X\HC9s ܳaDa2[Wr=ƑUa 77U}[OM힌ra$TL$1baX. ]QhF諫T鯹P8e*ڷ8[h>V`} yv:$v1}lG" |]y IbܖYeU=t\y o HyDzs 6f[!%8:Nvd\e2}l؆lO&;'bs3>13ͯ;@AwC Wb-a릱 ۱nL| :Ŕkܼ/eңr63Gyf] OjnSO}vN8"q.öQ1ɝY'$~eIX:n~4xtoJdj|/5N4If_5GF#دLxn{JBVlwh=N伖4Kжpؽ /NaQ?*rH\GMe!gvS sdv;RiBJe]w4ˣ-Li7O6nGMNj@I I+pzTBÉsdM][*pR~k36/?7$ˏ ~nlG-̨Nk;IzI!@$4!d9vA']aL={ԙ hL]q&ǩܬe6,1;@Ck*m%q. 77Ks:/j"p?qdhDGR%|A3;F,}ԝNu(նm{ n@F-w[.湧=\M| B [{nD>-!כΑyut4YT)nl "_o8o){cu@&ٜq}ZP9˿B1i4c Z<“r_4%UΈ1|'_8dh[gڮ: W!]8.N=yL1u24^s6=¢!be9e;4ZwMfz4|~'K!\m {5&jr)9d[}5bOtdͿtDG \v6&|>cҾB䙟ӯ"nWctŷMa8or$?} @ vwzy#|ߟR!lx,25`c!QuG-sDDF'Avʕ{8A| ϋ\^X1Vzi'JyUktˤ%uH]W?~?ʲS(\iN ,+"G-̍ٵsjZ*-< wΌ2i ] rA`xw 8VE6s+W!xQ; +oE .hQGPl鿍HJLR jCX 3QRD $yp ׊MՕVD.(')܍cvJ8&ݎ/wlVxeb2jky<Ş赊, {> %pyN^aV^:eo{Ş\NS;oie#L0GSgSd}WX`Z|\T NUMdn*:cVm۝,b׊$j:F;|rp-.k=7g=kYX, W]O}'~.WWJ6H:Zno[턜VOee<+ؕ>?=Y'!xaev |Iqw[0V{577t skW]kWPܰ8š%UJYq118Rc~G!puns=-[ϦG/Ol*u4aE{K\W˜ =:܇,`16?2̈́V$Pe+ Z^.K쑷61A iJ'Q-b/b!i?}^vXF;V. 1FYœ0!AWk'as)$H;l-W8uX9C0p}[c罭G|?Mn81ܳ7|mK 6 Ngwwyz,h{O_l[_Es'f4V8 omtJ0аc٘<U X<LL]z3KC-J̀0zr^g@ %a&aZN1 EƋuuyoST[o|5`KY< >A_`\,!a{OL#vl5Px g^پˡ~-#{|kfUC`5g?fٵ$7bHq%#kolP f'+ G^蟞*ʷoq }v. ̷[Oy3FOU5,䙒!Hb~h;ly]KJ **]n/d9(V=vCVѡv'Yx9wPUpr|]tᯞPΓGt9alsy $Y ~R\̆c"1hIP}'QN~G6?,.5nCK0;`8#$~Z3>>R,9eM-9~Ỵ<Ս]y#ہF㕪=Iz[yJln#%!ж~22*8uEU¦+/;Űׅ"b neED-QYwr3[5,XS@7#\v;p@<6G̽n~\xC<A%_+/'GΕ6#c7z? 8.a/[oKhD pQw5xG+&UEe=EZ;RMX^X'P/rwDzIZ앐m+7prMHoGK)Rycb=5,kij)l'8l|L9g@Sc*(=yLh'6__tIq*86*acj&^_&uq]_zvpСDnS31:{03ݱbF؇eƣ `sUW!U sJ,gV,8ik.1Tu. Z ^nVĐ,GxX1l!}tgɵHup*Y p{_ɥQ_g6l# NX\ۨ+a U|DuZ^7,/6MF F V!P. {a_σ"Mҟ8蔿\g\%?J"j댭(N':r}{z K9Jդ$G9.,Q*wfpVM-C&ĮIzSV (O0 E:Bx~wb;!(>_o7X\/)t݇g]t мmV{>!mQ$)[HuLgqc (Fli#k+~*T̒;׊K[茽NwA5Z6 =ӃoPtXFTЬ9Dbg_.8+0}kjoo[SʟSuV_qE=NOBG3 g]hlO>HhJAHpv#~WW)Ot!6ZL ųư۾_-.P8 eǛ8?u9 EfQֲZz "o!!-B@F%v.$C!SYHI}ԗ'9õuLu!+a=bRƒ,$$ēc%(a:  @ю<8(oxք춪%uAoKɶwLLYww=gIaHK<ctҺhc:~ mo䐖?#W~پCw67FQk绂0)/([IxŞ|+[.uS>e*p4H@3^KjN) GwQ1u#-;8|J˂Ď<APU,_YOti=E+fPTH(zESƫp(@kt,{v6 ,ߔ TYgS$M<$Y /Z7܂4m~v[DpC 34ȡb{ȆH;\bv%ݷhp!ސ eoeꯙ2n[Wz\r/A?i$7tAJdFYNmCi4*5v9Ob([O$ICVڑ{  T,s(?䛗{z&c?=ͽh"=q@{=&5FuF "%fm9*1ǧL_oFVt/IbUÓۓsПwПɃ(yn\= gBPTkk@mvS \icowg`!tŠFIn̡+LBKwG. /G- 4) }N?'%yI52,p~R߹invVnY5YO_fy bhn^\|ډQ#l7%ngs! |Sb ҿWˆ͸6l7CROa7s~uH@@;[Ŕ3B [! 0?:1qt8ʼn`7;-r}9OIq/VfvvAJ_Q@q?kBnۜ\x`>VhzV7?%jɂu-L ~eŷZˎFgkʻGC ZMz$Kl"ѼAGĪ˩OV-N RM'.$k/+y 1,r,B-ΐ"X߱U''f5k4TGx7cK= f)-B8\`ՏCc|}xnh:Yw@opU#ݼaDc;n[qri&Hk[tNQQew7/gwLjmF&pĞMꣻ6}!(VOJ tTNF=a"#(ḍmjZ:a9$.vC:0!yo)my+–yDY_"+ Z1gBE\!KbdQXtdu JI[Y` @4u&=' UEd(YL;A!1hMpHz%?  yqpoy#!+SO?Bf5 BFs5OܽBa09d5)yn͋:;Pj*/ ;M\? TN) 8tQ@&hWŵo'Ac{ =UK:/@.Np8V^qMW9E~@h[W[㤓Ow߼ۧ1AY3T6fQؠ#;]Z]nB5i/ԡLe HhY&ar;Ra]jt3?Q+|~(qLN½B|^E?!߽W'T3? KAXk0YW@B{tIo9"g*&6; HP]Jrô?D;GA 7 mR8td0T?EWSCѕc/n 3;'BoGV`/F /9@ߺs4*Wʤդ))2ǎɉYL2flp‘B\J ]x!S-S$sz<e gW-h9'@y1!f.utC@AZn촒rlz&%SٻVD& L}0,?_o] N eiBZOɩPD[\ 4ʰ<"AS7 FМ ]rGymam5,#هYh1…HmzRea+7  <[i{lԯP܏be@k'ًr4ЌRH:`> ` !e: ?7sCWnYuߠz?#. W88ܡ }~?)غ7C\ Cru}ESH11eޣϤOݗf_lFnֺ>;D76.wvô(K C>;6MAVd.'-=53е _y$?+֋{,dvݗW}EGN!I듭7XsV ͤ%iZ2P׼,gvڬNCq"BUzkpwH}~5~7 Vn+xtGY~[J[eqw\)WhvQX Tb~;8&fyCdX $ۡgBT10OA"<ؾO@d!r4r(Kj l8vsz,H6W~Va/=yu ,ն[Z%9֮'J%JQr'4\naE1q37KD4V}]"@1W P+Fs=z5ΨЭU-b`)shy 07Y2p҂;GcvC@z%6|i1:5>ѻ=ټ␔@hn^ yjY\| [)"}BNNJ&8mn{Kp' d>A$XNX UU4/WY ;ۘKa/A]@u奷_q c֔5L%%PX:doMn 9@yh<]Y7'3s mb(T A>ceY_*a69FL.c yযmԥ΀m\>5vwirvlM; sqR;@WAz؄>CAo<>"~S+WhYfYtY.M 6m'Ɉ]}Uh7Pwj4^*V}!uD3tZڅ 7ԖQƒ/h3 vb(]$L} `u>[#- FraTQMD76Hu$$ZvK -Nn&Hݫasm䲆 Hqievh `kztij!Po 3{h ^ѓꀴDȞ!4Gr:s -vg<JN)*.J#UOWoSY.ˎ /xZmlMH۶X &7`ҝݝҗyx6Ψl1:z!Z9P-6g Kt&R3XJaa?PLʓM;C`_;VW$8>gW3Dd)Ӷ^?NŌn;ڶ2gDAZU(8ΚӣH `BE(6MUEA7lۈJh 'n"s[NL~}0c%mw:+ɒYEr}ߨҵ { KnqQFP әEɦk_γ|[=b]J\5{#:<+_Th@SsMG{,1IoQ.ΎjEgݣJ,rq4dYݡQ(*:)A`9b'" +ڪ|hwPѹ2#bpway%oNv#Tib ֭L\ܶyOij Ka^cs rASF"ǣ ϒIkm <:2bָ̯)*˞8 {kBr .[;v#~Ѿx?2;&I%5O7Wv춫[*gHܚ(LNlEdJT1&dݶ[5[_£t4s0mΓclƖWXVsv?dkZ%9xVۺ52AP4DuT>]%}I42SH>qY<!ىo "ցEU{B#+&x2>e#4ֽipb(< nE@L05b@0Τu$&{&6n>ݼ :3 MX!X2x!fZg5w+++JiFQT{@FxSbm`ܘ,G@E\ÂG2NbDGk|S궽㽍^ϳ#*ӂ%M>plK$LɒC$r; dE brP$݃~XΣ?39J|Q>^s/]kgwF 8kVZ#7*^pR*Hz7n?dҘm P}q ]H+LCD`'oRhE~)RJ 礼,0f5I }Wh`V#!?pu) {&/F7}I40D{,BK{m0D{gQLIG*?@w_xBVZ>%[n70}!zgU|!<2Ծe_{doIpӋmd}.Ҽ6a$7%Qc;-RP}-0Ž弛5 B/YVDb%ٟrÿ?ǥqBykL܎@6m3=J^6;9q|ki 1;ByQu1}s*O O)t  F"dw2 ^o yIpnx/MYQX-`n)oԙ%{ɏl ϡiT/5|Ʋ4nS%pV.ڀHEBM'.GiSb^+0fu cChO{w,A8lW+1ͱGJ[Y#\xe0P# e0e9v뇌PL W5:Rn':~jp}iIZۭWJl]y @6U$1d㾊Mmk'x# :QZ"{V`fW5:v rF s.1eoEW,G!٦HwL> `P6$[<+Ln1+^PdS/n}v8TՎx;?4]۸B RRqҫSWΑ9%.WS GU[u@MؽcyV!!}fiS#v%wYXEXT2|~U9̲ؽ(._m׆)P<@y`j;:6GA◖·g2- Ohq61ǝCRG M̛Wz$qյqv93$(!%?Ϫ娪Ḩp%sr8"E|xXyd6]y^K7-YjhWxWh%jerZixv?e^!+ZSfZYP4|Y:¹Zq+7+VzH8U:}$EH#R'CpE~Q'2Y@2yHy15ҜRBʗ@֛ꝫn&w^ueי<\wA6rR۱=PFO89; bO3l *yv93<ʽZsy G&зO\qyZV &X "ậx6>MRmV3(~1?bͶs˨GiF°>qF˿U=+F5Qm#KwȰG2N_;8~V+=7#_|He_X l*@mSP"ȣrwn/&h"0dݳ7( Co.ħV<&I*LFIKh~>h&IqgT2"Q^C lePb>v:wFRCGi'\ 8235^vxwi!OF]3OǤk݇#Mj}>SYS[$t:_]dE紾k fU&jTmR;9BY81e@٠Ykļ9̞;={ʭI: YjmTm(7ɰH\{2 A݈8+=> I-Ʌ J˥"Z_$u_!Lɪ0a STLbc]W%,2F0:`քySbd9ĜH]1D!~ TP4dH*: WI׌nOVg| : u9v$)0:j3$m$Y?`&jKf+ME :T:uy?P4_g8$x'Tgtuj /Cp$1'IٗMr6eUk'Ҙp8 pea _\9.qt\. <꧂/^+K:$!v/\ьuPGmf#r[yNn=’ H'϶2!UD{X@ ^CHby0PNu mHE8GϤM8^˹Wsi.& Jh,: MO]‚$I󾳕nU#.Q\RA,|q1UJMlf/Cʊ/8Z1& s20X=DÄ$QhL@]ނnp}#Nyi;gZ͎/|7̝k#Gݚ{(>c#|$9O"TWa|{'kTԥ9G @[?F>AE h(\RoxdҺ-'_\{>&m3´~]8КDJ9 RK\˂HYa3yN02(q:ֻtu},!Vmr8lu h@[fl'2L.De%XP;|~OǪsڵkyV)V#/tg;|l;Jeq)-f\ bu ;W *JvKmj7z1j5N#>IAW|L ja?Hw!?iРNCBqs dSa5}tЁSUʟ!2y52Bv8UrDw{>c\ыb_0 _6ܵ) jB9}KpB 38c& $ַwF D <|>flH%WQD Ŗ$ﱜ2qʶ;Ǔ:/"4 Z1jcdI=3W熠kOՋ% FϏ_6AzSì0_Ex pyoʄ]Hzn߬f!5R7xlzA,>wcI|TNI# ȮMCwMgJJ8GA *%;[#]2+UFAn<m']]1qp>.VL9ob1PxH]A_8ߕ"3ܦa-b/n<0eOiF*!M\ OͰ'>K$Z~$Y!- ;*akPtQ'x5Cbse0Z퓂"zpZ{hŁW2C؞3L36wKd C.\`;J93s ~UpRM.~]ƻUh;`;%ii*}k~v7͔#”NS]|.4/Z땼# 1dӴi25̲B!/5Ԯ99.0aLG0m8x{FEF A%+3A[$TSwWԵ*0i*ũ݉7M/[Zǥ0'u=eM5_uOvƲi;V?CCPkBT(JHu H˰ 1ڍ^&;e> Pߞ.I "lO#eϞq]"~Pg}JƢbNa'g^0]Gc?ZB.$@@ȶ@Jd06@_Ǧ hJ4>wVr/\iy@wwb(NS ߷ W!$N^z ~aUܯ|Z_U/滪gRV1995h} CrRVW +!x~4uT>uo%9eFC&R 141 G@q?KIjâ [hVE{o'yI:91:H" >)~1 f!u5}^Hh)nn!(s@/K>%VY|Ҡ1.=Q֮-dڒ1>ۛq.xa%fP?"Pk*]>_Lz=¾ _,o>;ePbC)=;P S*q $*ݿ8po1z/2vC( $PRxfN!]͠3*f]9eC$ tfղ B}\9.?:mvG3bWiHQf L6 F5usY}l bxFrPá;{X&l@[ zrدnU_}S ~xnH(54[L? "{`-PݱG+y멃~f+A ST s{VUSf^54֑IJϚ=vuC<5/q-%foFׅ%$T+>[6IUYlF$wJdŠ@5#_P/W;d<=꡸OGR KF<4`tp||>' sB{P*/OA/XgPeA,(o[)t!h)a3֣D)X)neiyeͥsRY|ž¯n^BUK?oq@~p-,,nPpF}zAhnT8iSϨ;)1y^}1op"CQI\e=ihc\v@ı s9GS՞h֔0xY)΅XO[/n%ڔcn˞ F;+:D 85Ee!krûRU0"^ױ.ki;q.:;"+zH|~U=td1ҏl, c/W٭x&Z38M3ecZ~U/pߧоq7oQZRa!0]N @e2G&5 /L|h,R7&dʌV9鱯'3d00<t9CMn5S!3I"H{c` ,& `UepO*qϟ*e^GYcYnܷ(i#dG^%57/E ƪ/ϼ ,3x5?ۅ]7Vmv39@Dy`y mSUSJ 6a&AOneZ! lap{)k)bڦEQNȲމ%c4ADPG Nn]w>f2&_8esY}P8XPbxE1q3:O }mޅSe8l#E|=)ڮaVxFCp=*eUk4mAT, 58Tu*f+tL, r6@rX.G C\aS䰊(LY+߅n b*7tCz:,䓆%nC3d8"w٭dS#Vw?UރC 1ZުRM.iNõ,1'ۍ$@-]~H[W4,;CP L e4Y8n7;W^DNw*E h?"PnW?S'a}Nm.tl):S"hgR{nD"_,Qod Kho?z:!to)e{q4Uݭo0jő hVI-Ԉ`Գy %(c@tg$5YA3rD1&r{1#ta&b.0Ga"Z2z{(nT4ϙfDjxPL$'_]^?r;T]`\=3z - _ 4X9Rzn`( `d39ڟ?(]#Vڔ{t#uQؒec]%4C -֨1 ?9rCޠXY)+0j׎rWײp *VBgq >DTJfaa LIp,qXlՌm1 # ^(riG:#a䶅JENх7`D9bcpW#"eÝ.U.\Z` M|Vc\vZ.c,~f vFtcO9@;,'ŕ߾'C>S9\_!ؒ%I![Җj՛dؾPZ\8&+IʜkWcuE%]\O-L$⺩ʽn @+{~qx#s8uhq UywDXF VeoٱIkQ8+*=$C}*Fͺ.-4[15m.?Bll\ſ;cBp;ah<#u/8!"G:I p9ͺV7N *eyES %Ǿ8,ۧf‡ÙHuQxkc b"itm;l @*5 |y%5 kS2xNn#}5:;ں1׋1J3ALi[8h)rq7%ߣv VaVx3 J]%d5`c^H Bjo='^9u{æ,|( j?V%hF(t(>Zc1WUxVp0ciIw-Tj1^c!تV1y3e;[~ QÝхQFA2@~͡iy ]'J>8JJJhN%-!TM@(j"0:`ώ{oܽe0hB EA¾Ϸ7l?qxpIʻ/?3c؞cLBe %^wYT %:+ #aR0|qK)Z4)| {Y?-'<- UO4]\82d5%zJտ.~Q-.QɄӬ-3VQ+TU]EU>lc^Wugc+5!na"ITGSIٛV!U<3R7Մ̸{HpaČoxV|N[ #yi.?5՜ecc˺bb!=;‘O b7Zc)5x-M'UG]YmJ83lXo!_ՉYvY& vªpKnDn]Xr2g4C}|T0M 72}FȠ~&ĸ&C]G[&P}Uat|$BTTѐ(2;"Ta;eɿ~MWyь~Vsz-𖽴WǽQY !?s1Piz/]3O-тJ%Q-hJIhPJ  YH, K#!_W,ToHM$ta'65ypQ芿6#HX>-RyR}I+߆e~erC2 "O\s[E'ySHr#<:psR]3Ӓi5 5>s>%L2]Cp: ~bOӋ;-⎏Ʌ@ZAmQ +e }L>FJ)^KN!-룈@矓h2ʌ ᲃ,lKBľX:ۼ}fVB#6Ιq )nH?//{;S»h$%qYt^77=={H9Ev gZrV_rGE㖊]%㿽N}r%l^ $-:b/:)9/SI}iTD. `eyۣ 81DbPw/``TK穳+]6bcU_%ZA>ɸ0PgUG`dMYYam:8X;9]CrTvjF7DҐ<|/ Su2h9<{vص7T,Æċ)8$ho9^{Gz-Xùڣkų4CNd }p"S#^ gH#L0t$9,uv>ɋe 6U"]V\^j"dmB+Kibj?k6ٸ Ky.dDfyPXa.{MFLXh5V&L2vd0T$i(hV]MhCa~`<`!)"DD Ӆ#XmwqQ/7/)ʳ+d+<dʧc-t1;Șψp*Af^KpͩH#k' /`R[$F~ʊm\0ZS7F<" %W;+2}@fټipD fz^e'M)BFT0㩱ʪQ;_Swnrwuӣ}kZخz_(3Rߎ%M(qn,;2_s뽈BM'tYI`G(r?Vf_2Aͭm2½~*y<m04%aٵg% t}X=zZ'O& yj;&bm§SL<ϓZ_2I+i$# O'QBqnBzfe|JŚp{=&Huy]p l6ܒyaihlMu6nI[vc#Z0%Er %d"t.-208/k*9PnHc SRc)kD<71/(S\Щx^hNUkcTlQZ?`bT*\Q-߃Aaq/Ua( 5n)4̦dՑp i}ZOJT?D1"J+(B٬ Knx̳d 8y>q)٣Lvk$X:;^ EY4z8 ,Kwk1FSLL"i fňf*[UvIS ƍ[F0VCJخxӰ+$Z,iD_ ֖n~OybcMZ%C} f(FŒQ/3zmAp .-RCXG9S+' M;N_{ $`5>)kߪ=Gs^w:+D@']/9,.g_œowXTI qjwF{7a y_TיpKk:2]Y!sGKas6T;MbY@ +tkAý1;C~+IлĶfKIP5'칰=1Lpo} KJd ث}@Bfv%4k/F7(=K] .t+Hg(|KLhY=Bt=&}܎wsWVh$k3ZU+R'3{ЊR GnۦO"sc%Oj42& bf!(K1]#kCs-@mP߼߆ޱVۮ0Z@/ *7FNv`-bȫz&8;/ ^9g&rfw7/^{R$!]ԒDs,qa~!\,AFsprٌs{ϱ;?y^2\jk\gh/7/{;(ɡJ'ҺPƄM]EP#9P*t`2JA $k65wHh\{Svq+4Ԍ$P 2*0 QjYE`.%C5丌 SUҊҶp:/Ɛkd񖑀L/1=lqv灼S5" JAK, 6g±:Iߑp')ЗSd^))B ,f0k/ImHQB>+t(Jb03o#7T >cjS-YV:3t|MYS0E`3`G{bm:`D@vf0ܷ lihwՋqD|P8Χ&]~X@mlx=6›p@p]1Bs8_)(A+S?0jl'uN{F58(oQX|R#Jt_Q@z˃M <>SuGLϡ2W0eT 9+N@;<g۩8yp{Sv*L(%ѴѠ4q.(`8b! M8"fh,&"HhtƠGuZn?J86i>Thoܬ VV2?X<2 ueeP\O}V1gޞu%yTy?bgK#j4D)=jŨJ6s-7 \ 8h% b RUzj d|<ݺ2!^4ax.]g6gQ!3 ט3` G<k sm|~CDͰ;1-uWbf Q.F(Huq;ED"մ>x`|glV`҅iaGc S^(mZɜ-hH|5AUp=D;|!RȾmPI>a74 =;=2SHjKbǡ@)V~=O AC)7PԪ#|,ٜN0E54D#3'ҿ)B uA3ݍ;pWY zhÆ튀n︦4kP͊Nn3GPDD&I7k?gP Yw`E?h- S£OESqzF^:ŵ=~"z5(cuB `8\. ۱rtR08yU%mj/@'Yq|9sW_^(8 #kPa. @/CtȲ6iG>EՌ8tfkXQRJ`oU\@7 C=1E~72Zjv%1AXwJv#4)"BXP `@1pŭh\8\QPQR& 4^"*I5 ( s/)0GBFqwcxG弤J X/5I{΀FΔO&Qѻzw ۝f,tnphݹZJ cf$Vh$(PZK 7Ip FR@DʾŠaO'(K2SiGYfI 9LVUU$ 1v k'Zot>F+]> @Y/Lʗ#Q| fS 7퐱+t4wV>WH }ƏIcqy1&][m]L=ϋ5B)lUCVr(*@N_uL$%?7W!B@uzuaDz[:-\o_P P=Ɗ2=W$ 3޹%js342gK;|%st"ȥYsP0AGBDO9~v֐A/2bS8l%)4I187}16m'&,0?v  Pjz{눫v,>(=Tiar6C561N X;,di d2dbL)oi @xXN1BUC ؈1RsBa@)[U0 7I JLTWhb& zq 数#$-c5{veF_UӋ}vB *0ݬxGgB(MBkvğ"o7<s8rTE@xyth Liu~BjR9RX88wy2o-캋Le (%N DOy udrc.E+P RHB"3f7D sBmkQR~A*+=M䫑LaID'7z&lc3A{Tλo\&W{FL{jRNj2ٷ Rs8*G9ⷧibYűlD @ v<)D n/I`<׺U;5}^ E5?l@Nf`_%ɀf*L_2S_ `t㋊ZM"54qi_hY/B!"j-xTiy0wP&Mc´fxa؝,jN `;iaѴ| p;Q(İEBkZs?[bnCK?PRHoK4&FE`̢MwWLXT[A  z vbH5ѣ,'՝!+x&-u(^=k1^ 3^g,h(&ZbhhC 4ݾr-Nlcu Z mhcB!~iyAM beҞGxdbPxpp~'4[wL/7"R9V!x䲆5Ƨ̩̎}ȃ$Z!YLCUm1V;K=$853j72ʧ FL>U1U{46=!кj;GB1;:XJbwxNx}FѐlsƵ9vStKޔIm>2. ?V{#SrdBei4 )d6R.ZwFJ &.`}0!h=Rj…8w $kswI%(:?E*V /a>k55d@ 0C2J.iR|n3͍+]el[P]%cfw·+I|a)I$=쎿ۆNx( >gĺS&9&aݧl6`JNdVOӯ &* Mۛrmc@"zڡVN'袻N]>L&Q?cғ=)SoСJ"`B+Q̞a$.j#Lw*3V+i9m.Wy>P;GZ:m6𒧗iYMg C5|bėWfLs I߭a ԁI2G@vJ ZV.l;~lGfwf_u ne:` %e^&APm=aU~s[%Ҫw~gsr ׍dC}>3rRqDͺ[8aqi]Ws)^rO]#)~㔧0뜸DPm> !lʱq|]k'l)N 9F: f8oF?S;e(8Z6b*l4U/-B`ȩ_]9'ջ\* XYm{`y@hK%}%|l4843N~on|: v*3gbc݋D_%ʛRgYj>?m-`Y>E[h*f!uv?s o}+zK7,rxp,+Ĩ4 .[c(At|ٺŽιR2gr)rpZ SBU1I( A4B$!Y,aqk؉~Y nSDgGyp!jX}wM#Nb*~j/jė%q $P75$RB&0(ZT”o̸v]jW܀d6{"$X 6R#P" 5eNaR^ 0y}R ~30< ^At^Ú.cK藓h3RJ  -ERgءl.Z@p /W-~g\=<ډnBzˮC:W Iu]fJl"uEI +ڴm=b.78,ģ PO -i3i`aL5Y -Z}Lg; s,(Dmŕ\YtN^cāOYYJ|YZA_pq&U L<ZLpznfα3\k@MSժ ޢ 7u 1#fX Vwn~ݷuk>nz=cZ.x,!K ŕ["e1{x r@@F_U7^)zS pJk6`GSM*-ӑLN)µ &5}%A{HOE]Ds]zoc*Dj#Pkg+J u Ed%@05AH7v9κ5 G9;Ob\e8c^CcO`?@4_D9yw&oEMaXMu^!&LIJlkØv)X0V2BT51U`9j4rg-d _pJ9=<罼u;D g_UJ%>I a Ϣ3S~_2=fߣZ9k/;c2&us1?r5hwӒuIvk KhsUxYraMs}5"._!) O7בHYH~^:[cR1x-&êiYxxj,N'AOذD3mPƗ9^Oer8_Uȡ?if-݁鱃r Gm,OPJ+;X$tZ:SZm=- d?-IXf~7lONDԉI!ZR07`qDDYM$د݃RQDO {ػOV6Sը8n7ʦu~ 6jHT듹vS?Es|OqYy\?)P1̍74`2b \[7ׁ*Ȣ0f鶚h/sA!dk6hoAMdFBfSܜCENQZW0=3h6 vDw+  f[?~julv.=icKؕ|%Qr(2ޮ\dRsFu4bUwC5 }/GWs4;PB,w>I$kM|ٴsE%YLYmSsRE!vl.qYn,I΋8{jkËHB֭KJҞDO=V].IX^â>`n7^a:-i)1nyL3 I5\@u<u/)~(^+IPP]iMZ'!eK8 ''>9+@ cR[a]]t}̈g Bk'X7KCr?O^3V|jMZXQy ?B%*(SߐΠN8HCyѹNһB/gX\?hqqR&.}BI}-:8F,X fEovi q7uW]ICP_O5I{]V~"}8+GmEWb$6m,4ht.z.;`ɂ*UjIv.qQ-N7ʼac&/V"=]"pyvV2/s,DwqZUhp:#=)$Q Ȋ顂ps+iƄH2FQQ2D9ɤ5DUzԁi!aIzT}j]̶r&IwqXY C s2QnYlR6[{c{MdmTvi<%y*$[$LG7̻| ?tXі *p[M(ĪS%"^%|+ ņUHvViz̴R0S0U fA#zDxFϘrM.#ܨ!r4nY# Wq!b ;KeFs8-@3 ?^KpI j=v[ cok7dFGx\r..Z QwٺoA}ԋ? >2#w\zӚc~CP6齕ڟMk Gznؐ oW7+vZFS8R`)r}<#$Rѿv!5.o9[;xm$}A֗5"58,o6|5*k\ڈD[4uM +_9N)2u$]|ҥOco Ѻ&ë4FdNmRH8>â4+ƠKu$l9p0@MOSSlY8rc{J3"ګA(S3#n#?ʦD)*3nm.+D`e|Ke^q}/_ϊ vhXbiNss,@V8Vg:Q$ʕbU%Yꐘ;ә:]p'iSfSw9#Gj8Ue]d. tU*EX݂/ tm[#e>KlSW6 ɥqnnL8T/<]&xSX<.6u䫷 Ua8y:kXxu| {3 _ >2PsPЫ "!, E ꉻ4҄-mZk4j:rWE*4푻d0:BuUN})~f$\H4 _׌#Ο0@\$$ ΒxFX )Erg :Ja'5SCQg׎8+|#o]`:s:\HӔ7q7($i۲;Yfۍ/o4W|yӸPdo&/`HՈ~VJw͘ rqW/LT s?P"+(݋x{-p(ڴ&Uv|𑖖94!c`c8]ԇ.;6 hdϦrt?zfvS6$_54d]۪xϨߍ&v;'¥(2TLOwwROȑI/n:kh_J|5"k'pYy{V4U'WꅧN& W㇭@dlkx*G| Kl؆ǙPb5Gt O=y~(h$`ꭟ?8<].`T=Ayx9&-.ØEδ64Rns!G,W-"C-;i|vPΗUБJsC<*qWܶ&%R'L>fJ)aw({8#rg`hS \E)ssX6A}$K{pnti7ϡ+ \^93/i:xg~Z5m(/ ޟ-f=ߴ*Ƨ/hD±@TQ5.48-rE( .Ќ(2`G+3] =({? cxThWCҹa; `78+c-)}>h;GvU8Rhs`yڀ2ypK#YTDh0[^d[x؀9"Ƅ4ƯVkM,qzPir(J3}la$Gɣ7QΓ?rwB'n`o80 A^ q/zHUF]ǀ r.ovv>A<;8 @PlfJg+䴓&jWXFɲؽ'WG"ޭ$BNߦ9Kac@n<._hTxw_ozh xE+m"1։lw,+ODukv{>nN dw%Ϙӑ \Y[0g?n&%+l UulE?܄w0+hw44|q|b&MP7q7Fx8 ]fUe9qCm@\/k3pMFhUfnph25_0M[Ф.SF"R 0j1Hәo28F'RU@svK_;T9 QMxIZdecB+5+[,+#Xq NN7KV8V!ɇ Z{稔uYO># CGqP#8?Hx64 CGI_; `-ކr_oY\aQPŮŸ2fADDHj$T=[?ΩOKrAIg.|fFHE^L_nt%BAԘ9g1P &msA1n8w#0oVy48}DG$g6^(8Y l-~L$btjל֣Ai*XO﹤ؙvp;r`Fh({*<8g\*yAaJx7~cX3rtO$&M-fV5! uBbc/}%ӷIʔ8^`6| 9XAH/ aZNBkS}&Tے9Ny_7ô#\oi왒s;]H!YjWZc?9~~VR"d{cr{zx~&Q$ kob3s~J3{]Ra n7P.DT߿bf˨wVaDg 󭝵Lkĵ6QC>KQB]j2 ,'CA;X+ZG|~ko,0_̜*]NYNvQ (F YJG.g#`}׈$Ig­Jбytv;{{$W (:/ә̸d*!9<`^]a>ZI"a[+Q4%(>p,ҡl ThSha_01J&КbK?ZUk}5os)V'=Lrٟ+I`HB-;Z0f]\c5&gE%HBπQ(7#&zG]6;hF }Ur_"U[*?R dbӃN~(ˆYϽ'Ul@'jrc QH٧q-C*v'\2DgU4%0  To$_P$:B9'r* >*7fI:>ޔ`ٌ hPg߉laYә)#Fu-R-t|$m'|m[QA{0s!̘IB;GR hM/0zҸDLZom7Vg_\y i[0# y%\!G|8~pk|xfU }K(?(,mR+:6 vimw9-ˋल)w!B4~"gLY(#`: } q_l(lܰE ɄnVřnBTTS,[`˛YJdÁҗ]^ĉ[I2dewHt pX +u@!nLa@T˩*(čb?y+ee'n[YSdԅͅj;Me E*~jpXXDUDYq}SW|c A۷13 `@qW|JB מTqhȴb_ c1*nuyR"I$sd&ԙdܼNpgRw^0j9$$EczOK5#B3j}S N:x?,zihNh{yUàXJ5oiЪ,5n͠B1 '{/$c~q4yg\Bc="=g/Z5nd=K]hS.4yA!*D~ہ Ds]ry־L۠*AXyb[tK<.KOѾ5ڣ+0j/xNtjb.QŒ[?1 H[Tc)|CҦ}& ̮ 9pGC|MO"SslWW[m>0dpC3hPtCd2q jAZn8D* K[deSyS!s]VY7Jcl%*v|/;`ZV;^& R@*ٰx,O$ռMW.. *V&.k! lϦ1\鯗ϒb*nT 5Ŧ6Ɓ_%2ui{/(;=Bn`ON2NV +k͆~x|h*͐3/ݚJ7[? /T|[MoK>cߏSLH q910`xXeUYؘ|wu/r4MM?T#K]2P#ΉXuKe&ܩ,4S90+fc p춲sf!ᣍa"!|^b+)l{O&%H 18N+D^zpVB`sRX,hZSt2-v߮m_3ehB%O墝u?-CfZlDtj[xHo9ZVG ܘLu\ 2h@X`اf!!^Ԝh*Dg?n5!rs|}poZևWq Hɷ6rr~$*RWG 쁍D9fOx%h`qFD0И eOE DE</(P;UGA]9r/L+gDn3'ިp*HҩY)?` ˥n^S;; ]O2hWF*{$@d񶘍&90 u/hⶺ_( |#)<1;bc Cl*/Es$> /.mcR.8M5uP\(R0 2t2ڻujs3抃I 5wZN^U. hQ9 G‰ג Gwy5ݷXT#!v!׫PsJ\H/̗c)|mGr+CҲO˟I:?'R-~Yu\ūYkN)rF`v5,yoilsr.6ߥ#{Ht-6E|o zp~1›Oqה6tE>$Th٣e90^?I"AAlfyFh{ ^TW"8>g!V$ى vlod1 ƖIR(IBIOA"*O,G*#,D/SPKUQt,/e5Bu ѼF >< ld, Il_;;ohuTg„emsg)9w6 ZJ+ @#Zf e=Yw-"IlԺx7'HYIMSC2 n[ }Z\ W&/DNz{lC=,e>,AA%}3l7eݑ'vfR8!D^",`%t߀Obg|?fv@&dox|iMt4"DR̷>KSwBˁPȔG\ *EDABY] xῗ*ЮmJcaD7:OAq_ i9!|\6w#h֢s\M3!ߤ.D !rƭm+)Da>F|NSuN%zmIAIáj ՛cBLsg"e\ݒ\BCs9a4'$,d ӳQ&hZPb[6K<YN$a Ufn$=mW:Dkk$2OA985A6ߙL9kDOίmL Bvr *AGt9MiwP׏T0/B}2 R:#DLF^.5.>r̒4 1%Z bG== HAz}W>%[[cᖁ\;baO7 0iC̫fhw؃ꞿLMΊS[ylԿTATsB q^ NYTҋR9$c^ 8>xl.%! i 4ƂP !HyۉY\$$,P攢l)J1^9,Z)n8wCҿmaqT}'>Yj?B;TXr.~ĕ|r+1eʌ>+ӛ^2s"l<DA+\xO2Ms:x.W}hƈaT0| ȧ֤$ Bٯ#4Ա AjX T2h(}%IX+5=;i-}^&tEÞ?=:}7#;,A8݌GXŻWb >jtzԵUu,-xr|0HdEvw,YΧQ]F ZR1M!>>{M`٫[l^<Q|b;t\Dy7uł$h0Sؼe0z{SԬ݊qb=nwo\t$bk? jt/SӜ:X;jڅ4Pģw+qذ*DO3}DV:y~ x(= Hr9RJf]yE^ށ8HcJZfx? g^r1bAF=/8f<<:UT<'YׁkaX!FrumHހH('}h@@E5fَEeCC%){l}(MA41O } ,]2H"7աɧKM]lgt @֓XyLaD7|G,FEfTGavX 1S=&L!PR)KB6MfY(S&ПIM?O4_R]5c9¡{Ha*~v;P-e\#?$(٨ h[J;wtA37L*B`,*iK{"dWtm )oFE&c檂>}]$ʦ9;Xw8=T@B2a%ƻn! Bkg֭hBXIJv`nYnV$O.WBԤKq F,mkv6wrT aO K~ƷGPɵ!&;-. %Z؁v"ۄ qT*9o8:$d>F'Σqh[w)!F^o< 'QW7]Ddy[ HoP j+ޣuZp^^q*Rd%,b"j0`aܢ^I ߯J^:SkzY[*\yleuɯ)fi;rp`!0ϐqAN|B&(zE.A4:(+x={sy#o`ƪZZ\$qA=Ghiאҝ8'Q!|݅=M9!ꦟ4텧gn3/p l3yaM̍?]*68v0:xKQf,׼dcFX$|@![( VȀo̅>;6\D~{? n9:,ṋ3%WgJMKIPKqi5հ6fD~!Q;[V0jt}^@4ҼeHc~nKM(Kc1#%! %;#(щ\Cϭ#N`_Gpr8JϝƖĵd.!L7VF*['K|4\|c}ڀϣ-YC~-rjΘR[T)A 5R[rg+?ӉG}3a+CڋHUc#g6yW_"%kBPq򵛵XކF^ͰItʫRdH.s;6aRk ؟RK/Rk `y}ŶkB`2]W6WXXgs<}PK|q 3lP4s87U(:m Pޜi)bAc##EinÁhq)t[mWv 8o덚o r{v RpŘIoK9 z6&;z8f#hf銔ٕ5L*p!%tiS^i= B;EsA ?TY'@qRL)+(MK_xF<$%]mp'ˀ^t. [;qXIk{d/ny:+qf50 •f_.6$677vr><SUrnM7t:)D5kzg}Ӻ5_;鍫5^hKVid֑#00(NG2) "pׅs{*8Ap ^ug0D)7|h=ƭ0pgZKhfPMl .ԎlCʖ/m<|Ga.OY{#@?&|)pcs|R&N;& 8)eI &̼BG.u{&> /pʭq SZ%?4dU8O xSmRӛs:?k}mWHՒKLZBwcMQn5N0'KMg'J$Nǃ,%QĶ v@p8 s\,Mm+8Qqe7 &-`TЮtExUąc ZeWC<<ͮXН LNyARRD9X}[!u<koMUul`e5Ӈzq}=$?Hhq0̑}57)ǵsl)E⟰ _k0k`kD=ɒyRc_縱¶Yz…)$:$hӯ:X pDqZG1 gXACq殺x'Yu0Kܜbz_H-N F`CqQb'oahyCI35"BMʺ'&UHT nH+\M`YXnvJLwۿ _ Ь @!(<_7t3/]/ gZ6Y!]?,xRh_(6Kc-;}c?b{Yt[òןqzo;?n:Q]Noʴym!W51m/vX*5 pDǥ؝WMڍƄ6؛V<.S1.ݦ^ۺ[`; &a(vho;{p1Cemk-J4`,wG5oCƼ߹Eu9|f?z^'__K/ c6RiIqUA4r.ϮTb&< D.v#9 \LX@* 6BR q vAn_:(/H\K+smc lW%\9YcN:VA}~Sg; .]i>ߵX+Lr>%jBjhQ(5+Y\PAT&݋KI$eGH:.SNQ ;C2qW7Ԟ/OD^XP>dcPBD$<3''>2QC04K+)7r&n;Š s:𫷁nt¼0{\: (Hr/Gt*De*_ߧ&mΖ;軀+( bXyJ6 .:rdB:$d6.9 vqq1 L#yUSd@2NIJba ʅցS,M$Y;CCa7ǔKyj4vK3Obh¶zl5 UySeWmTf\WTqr5>]Q(8&)9W0Uzߺs4H <43Pda8?PXc՝ד0#RaVYtBL* u!P+<fz qEa=4ȊD06T |صNGmf'ynkΑfWc< ȦBDZU "O:YJ&Ꞥ^ P/;td/xܘeP[QV~€R5'.st8+src{ɷp%C+A11Z"7sNE(0/Y )Q4Mg$j{~z {x68ap͂.jfAJ'AMH:2 5hw"~bŻ esKq7Zr=8g;˹J,, 'LşREyR;-=@"lz:b{58$qm?ו;Uo( WIeq,HDQ~YIHV+q|ީ]Z5Kg @^bxB|HK9l56KI9wŵ[t70q&R2C҆B_Nz ʫX0YVUaOJiW Ok*Ep޳hYE'¸U #2%lZak8(鮟50=EUd؍"wޕdu8dA2';fBF,S;iBl|,„((-''yZ[͙7Tc)Y=؅{yeK\19KǏwVb}ShsOm6:1^'`F 5T[8ƭ8A]MRWV=}n|'!l4  Ah4ɬ:eKZo#H޻h1)M+-̴SQ:ڤ VoX 1MR~p7#(tW|6p>#Mߧzv b=b:"u3?E}vno)8rs>]zwY;M$/߃Y m~#( hyBCܼ=TwU_.1=bMlÁ^P*㣥,fژDfS8?C3,' 5 inH|Rf/Jq3&zDX'gc@9Xg c~84. 9Lw`BYVAXIr=y-Ll&/^Bew|~A;X;P0W^RA}b k &?Xvs@ Lċ>t-eUtԳHVHa<^d`yGiafgZW=-y_H{_菊z^ZwVtOSIhF #q 6FF *gq)Wf҇Z׻]`I o 6vB>\N݂2Ūxogыj1۩cQ%1WcK8s,.`eW?Q]B&(6DTl{u2mF*X LsׇhF񅝦Vh'@u/Ul*Qcu45%j)yTv6\ &:Uc!odXǿ4:{*@5o~ b廷vB8YӯXʔ6OަqtK7BsldՂ~{8d!?CcA$,w͆}O$hvw}JKcI( |ndpgI|Ut=f#u?X{if6lfDw+ohlg4mpBes&0,Cbr"'4g<]kUtPhjd<ijiu9+&X Qgtv++QSxVx+`3<*ϸn!MAANn!8>05m5䬹D0.6۠!%:RnAO{[c] (G5X8 h[~KT;a(Ѯ,=s*ߞ'ʨ` ~ $ &OY*ǰg)ҳ`u M<8W VDTE֗[/5d(#b'Vk7#`G楫”m*(3Ԑ?u ujM H&Ğ 7C+_TX rI !cY!bk 31&!NByihJN#Z/?i?64# dF Z>qcLs[> D+0(Prɾ S Hm"sζ' L0jIFj-lU~9=qS5h.]_q_Eɡ>@3'<&&<.R_6ox!Co_ w&/Wocђ6+eFB5E J4ɇt#lKOQ dGb]p,eZ_ZxӍv}bvwDsH&xy.eY"rw?тڶ>ͧsjWgB+gh; ?J䩿S!LVh["u+n ZCK//^(= П?#FZ.dҍ i}whGp  2XVwݺyEn,pSzM5Zȸ~ +of΁W~0#tS ,+)>T1SB[$s̅}ĉ6 Y)&.50gQb]6@ IBY4DWFtN;G w Cؔa %wt$i)eL>x:DZ@ҷ+y@ xKQ@P$+m?#G7ȡj fhVI&OM%"Ϻ?4AST W}dPۺ~HgO5u8DJXCdՏjV-\%=} wsO!D@ÔVUa9AC^ >`T,( *3gêf)YnF%)oEà J0.Q1q }RaN%}id rcAZ%NopDqD}yt!jE0zǵZ;;M}S}փ.|=lNcb>0B8Pȃڈ36GDgA©cJWEYk`GndQU+!<}Nf2J9ꖅ:Z;ln犮4<\8t}nLz#TX :ۯ 'F.3Zé<Ơ s}!|<: ~?{]W uUIG Gs owsQD?l`iOp|l!_,#i{>d|-^uLbB_ou}m8$ZXˡ~; dz.R$=J>A+2t& `=)J59;q9C_Ja I@{Yl\ #ULɫMv}9Q2=~y20YN"MQ*wKeMސuQ IE,էuo;oQe!PeZ `d4RSorXpԅhNBQYȎHKohL鉾a`>bEDxL#`Pіs{T%G UFCb಺ӕ=Pwo=v&~︩!!}C57vJ/AuĿw\% K@DwWx8Pyj2ʛCz$>+z'mY*@NvC*IqgW !eL`ʧ51yUN*Wpic{7f& :%U=)!ALQÈCm_ؘgh~Ƃ}%2Gʎ*JA'iogጓɹi lgow< 3k>K5zR[y&~Ci bAtr T!:&;u7X^`p C k 56yt+{ݾZXnP$^O.&c?tw #.x!9 NFIc= xY܃Az/!|OL(֋^?ƴ|e{p.wALN?:pBոKd ߫vȌ޲zCE Nlf[uǂK#N򵬔X㒂= w mLە?t=p|@TvIÐU ua}^_v\=hZai2y .fU<08# wȗߊt4U[yW$oYABP&-v3i4IaصIl$`9a4 7ZZa=>X'c0y\k8nP=y X,:QNA CۧpzЭ2KU%GXj"Y{G$cA;@, ӉnZ;2օ<4}d C.O:FU} CzN 8ؓ{(,8[:3I1M۴-(IJEn&1>Sv9sO#ۃ? ^P8F+_H'9 Jѓ[';F6qsOF̶e㹦"S >V%-&iؙ0b7nP܄hC&W- @2B]nf!#[=yOixDa1Ux/0=uVm1eaՉ<il})m錒Z䆂So2kbjj(!9g6|bj;s+] %6@ _B o< MgDJ) 7C,$?zFk!`ԗuǣi+%q5E65Ʃ[^Kw ܀fo-k8O 3W:Ԑ46ʴ[;GGf 펿uOGGhd3;H~7NoANqn ~+XJ]JZ& "[U/>?y>?UA gYYϏu׍( $]QlUhY@pytmi4ŦK|^,%,x%i m6"WؔIRgH,QR l@qp^I̲u +./ArFɻ8FT" kɝWPRCi& mVT*&x 0c?y͈ n]IV%/^.ݧ7K3o=FƗu5сUWC] =Q²FU0W `Ub+v8TD fWp)?y*(ay{_7p}tuWu<_T蕖I jz.|b(V0ۜٴ'Whf8f&J be=~ aBH>]Q[˃Zo19QX߻_иS'-v5ymx#6fV.L $uw'Y2j9Y>nzwA N8;¢vϐ7 QiX\m,􅪹EjE4 op\~.]5G 6&cZ׻xr๎2_G t{]ـρ ZG:MILW9x u;݄sv͵yfNav:F mE ~󤄢ߴ 䐵pг П\B( cj[<0f(WvJnhP3D@'zMwG& QNxm5o؎iɉmS z|%ϼ:bRFVym@[ ,J]6l3ߞm_2TVxSuw7m>~.sE v%~cɵLnҳ'bPI?!+PIsZA<:Xs!dVjIwz׭9ʚ;m72Ya:,U xm̚JI?Y 'Vj% /CdǢ7UyGW0 !>ߨ$A4h ".-C6D}f>?zŊ&B螚غ% TzBګ%߈%#UcgvFx: b 0Kr[k2gKF_.׶pk`/ׯg0[-C8wN$~]^,X7V~gE:)3/#'j(8-Ҝ%6FsF=HTFD~v9=c{gDE/>Gzr7.# k]=@5t2h[:-+w%tH@ex+@'-NL P667B7~@i')q)l.&Q5k~K3"w2POG|2iߎ;LS(֌ؓcæ6åxڞUsg{T:J0yr`[]A ģ(e1F"^3}JL3.vADl+LW(;G"_/+8Ǖ07A~$X ^ X~|=1{ {ГuV56t]O9eq_ZV@R, Pz/XG 3Zs]&k*2$dUTBȜkM)&ke"Ọ0@ QnQHc\$ǸM֯v7,"Ψd!.B"H0Xyb (@'SvN\9>-F r=z9^V bnGFm- üS*s]IfUHPJ]FKkZ_DDZ -Abrauj{q-`>+cAAzF3ϻR~=%i-&S#nwܱ=ߵS 0 S+lܗx<3LkDe*`e4 o |`@AaHőDS|c/K[Д9٩ԭ ^ a%>B \!k(!ʬ@۠2z0ux?=/AOy1cAhǞ$Hv`vf8$j_ڪ-_ Aomg`zJE頭eVl$?hB_F5#yX2,_cb[Q% Ώ+F܈mx1p3z&TcKjŭI7϶?.AXd~>m:^B~\CiN+~&XRgVmO7y@2syr!`. h?jDG32_dTXBky;k.86t8YTT,Y 3Z@wmQ/`d{Ok}S )F6sǼ o #y&k!/475{˘xҡ#Kҏ3c웈C J80B#5oQ-j9]Ź@I𿹌Z" TN /Jɝi~c FpJh0k6uɼUl!6CS5\]I`25 7?FS1^N#6-B4y<"0gԚa?;mֱZ>W 4յ"/ kq {} e7dI- ߶\^UPY\F]l>yѹX'h,G̎_;l|'K>CV>B w̳&ľ'*n5}ZMV&v'F6>cIgTS)h!+"X.>V1~ę .p,! xn1?v`]KAZ٬ոgEƱ `.l -\\},2=B%/}f{4@)!39FDA/#L~(Kˁ+eIϥw}$nYv,#qKѫ(`P$ݣpRD[P+dX d?K d&4MB̫zJSAV)76nX ߋ˷=:B&]IuT؋=.܃}fEќӽ^(M ֿ8ăTTCJ0=w̓XnƨX*e`wd_T53 a`4^+ӇTHEoa!% *끟7 *!fz)q'gmB@; #Ao 6ח,ci۹x^:Q{5Gzpsmdѽ87|^ 4Z0g @Pm%M/&,iKw=d/g.50AY:IŭRD?rn,5dgHgƄHÔEy' |șFF+ z=.DnmPjXvrt,˰PK4o ǒ;\W_+M' e j-9`刹sǬc?9#h?ki*ݝ\CE֑AW&g0-*x}t ,K^8(?MP IdC?>" Һv >pyҐKE*0nUHBRQȼ&pFs0|1NLHyq7.>B渄Xܘu~uOk6kƿ3y)ͅ\6FDs7;>xRGʛ.y i$;(CC\<6|~ enO^P[NƖb$qw0e KHI#}UR^ Ml` /"ۏrC3`BJhxpY ?F`Vi_ { ^MQh 'vR̵ 1u'j Zx/pL<PXaډe|er൯=Ҡ+P} MF4mw^(h@wvL Eڃ<0AB •1 PP~Pn򋌇OyOp ՜HizqzXՌ$AF:rᖥ'rJuIR3.Ʉd]g*W-c@JH%%ؐ.w_/HӋϕMI(Z<ʣj?h1!Lj}@7[H9J犝˳ =)0 Ѿ$j/ZFd}!cӦ}QeVbnʢ܉;/b[C}&ܻ76 x.eA\fԴ`N9g{dE(6?2Q{!g?f--#eI$ۈ#"/m:!7(\PR=BFXop$jxVQMg?p'=~^lZuf?*7Lar ˪8g[+mMۂi)*o/$2Jne1.F+2~i Ibр#[ X _B^s6|0_ xfwnEŃ1W!Ez\+NT?? g.fsZ>/ WzwQY#XEfځ<tS)o4_p=h ڶut)l}dnHsӍҕ|.4M(?ɇ H#9xkn@FuV$_eFGZ/v::"o V8c LNqSP%װkbgo>UKȟ='~gʻ\qZ5 SE,Z; ]+_/l g &lys"]/Ihng! {\a37jT."uX;)M>Pt@+`޼eQ q4Gؗ#fϩ K(Jc & 'akwLfO'ߧND< "h,~av-JRhwG}Mf ~Ž50CAXqt0OC 7H`S!`⏉1 RwjT8ڽQy) v`7j8G|ʭld ;b( P[!!PgZzm2U;-0?)5'I.IuG7b'D;2f`R@JͰPigQ+H} E# XO#!& Jd/hemy -Gk93/<0vdXlB?eš=π/<9Iܱ"kVRNAcP1Ehew)6 57yϾӋJ܍~NպI ҚBz7-Wz˖Ձ35/_Eӟg+,bWEZtOe{X)rNiLmb~9tG f~ \v m"ioJjU҇X_$dFذb?y25Lw(b^4]/}Fnξ"H6ִPE?dј>éBҨY84W.A,/J2J=?.Njot n;SRN|{v`?_ z^̑,Z5o2' |J  |[􄻱F-R N|9<`/zeϞDA>_U vPED^|_ //}dϿ]_5<)>U.^ەSn'DFDVD.3n0^ cWeeJ)e#d,nIn\FoNL  (3o q1+FQgDs˼R&mn/HIZ_Yϫ/ FnUMjف%C%d;}ms_G5t#mEG+)Ha3AO،@جQ 0Ŀ U#' L::q:w.z ї |1"P /PֽC|W"DWUOV XmާϙT-4pn%)?#` ǁ~3[O O\l qX1w)~cҿKk:E8U0qkzWWmotG;a 72umV c 5 S1&bؒԁyv|{4Mq{}OW9/g67MPc"X#V>GUcC] {asoBp?e@ĸPI@FA=z*M|_U^2x+4JcN #78Fv^Z\c˅߳Ƣ:b"!%#~B,,@@`@G0; Gq)x 9]Xإ%|`Gɭ M-xW8 .n,!d95Nh"0d>]ɷE"fH[KL?_zKs}uli˝$IAMKߤ4<1n_=Ŷ尼+ޥҁ 6 dsZ^Yd`>%™@y{J$OFzatWG:3l4uN9}DB%`?bRb(1aj9~?4۰m=ǬOҨB:n-|փsnVY WuɑQn }1XtP5usvR$uBxkgq)VGY @!R >r1:58NMu.9wGcto Mfj9Cou}辘ޣ qpF?XS,qh + pZ_- _r%BeT\uvaKH7'fPhK)nE=8iՠNJ'Μ9 TGxk_>/p|7_y,lȪ!_8~0q K#^0 ČeՊ)v5 ~`_I!,wT1E"^6U sd[_ iwC[3 f߄8d_ f!j ǘEE=,* JMgh$lUk 7Θc9n$N.eoL9AI ŚpD,-*ώD'JчB-) 0Ff)%Rm\4Պ$_cD~ X&! s)Zhik3+%bo_Dt2 ~',cC[o†dam\@wWSzT QäbshH{A둙)C\L`;=[~eq]AX3 ZZL֬B*l|j3<;Ԍ\U'%DIKTBD=J,c:i ]!R4ߞʿHfMrƸ0+x>N1޹{ k \|)c_\Ae]<o9u{P Q$& 8WzLebc!ĊNG,S@}h Kh!׾U[;S*xc[b\NV : Ijj+u]WHrґQMΤ4k1[?iV˗Ǩ}jp[Ǘ4;W5 %5Z5}}ğ4cun^ƉKkl Qsmp,}ڧfH*Zy %[R׾/N[Z zaD 14QEEıh?NA ଼碐HYmV.QbrFm6 ?/nV(#jq?]Qì^!D3zRD#f gSWPá%Bu6-2#݀7,OT {By4. [*p6qxΕ5=E L+5>?^6]k5\bY|h/g$a%_&\ ŜfWuWy 9LA(u}GT؍4Z7靦_%ǎ(f0@T ?PxU'L~ bSY!8y@]V6D`` /xp I8Ţsa35\ a xHU*1^ƌlsfkssS_' 4=nV<)G;Bw2BX"%b;u8cv5fYywyh!3x[& qlVF tþx-r\&v֣&hm׼D pǙ3T;d]>l}ݔWv:Cf<T܈[ ʁG :kQri<NŲUxy~>mBnZz/aԋm&:Oд!?lq&{n> qf$MyMiԴ2~*4eliDۋ(_{"oh /2ZkWR<4e5},n]_oʎ`vhBnR$1\LڽՄjRPU "wjʝH%mpm0sB?eE(/XaW`E$3Q'$#@#Q ~کl$(fɝ زx' ;60ՊF*9yJ3N\BY, NJQr3lk12Hfѩ&!_D's50Az٨` Ts?ܯ )*?y98BFP?1Q\bbP2/q{h5d:WʿA Vlӄ؄xGh%eϣJn8R8y97fL#D9\ OC]w 3Vn]ݚ5^D>CcQƍKDS_|3((CƾSX y=E BqG07<*BV^e#0U\Ok+X:Ȱq\U Eeu~Y.MX*aJp8N?KʚńE-amɗάtڒb= ԐOLi>By= O `KU J NHu/y%9R pͰE֭iʕ VH=>_ ݷa7Ɣ4jsҍR]J_U)DsK,"T^EnHzEB=znyw/+4nÒ$+ ]AJA9emG[b"{KzEvi I8m):S˧Bie¨WÞzBVb*5u4;.l#FEVuvN1"{ >ϲqE>|pҖEUi,RLlRjbD[%^w%DD>qk~k!Y})0͆o^Muh@]rNH_?DCܷMmjazlMX݇ &%wb^ OMƶaGd(cҶ/(XC,JwfDePq"bl ,Mx(?d6@b}6:tNFa EcNWw;d5ZrUuEQm0b|("ىbsl>B(YZl9Պ>XuiE6Ƚ0epgCE*يM._xӃRrJ穭Or̠gi :"KJDCOvFw{Vbo;i6ٖsÜ5 "a"Q Z!옶38Tf ^Z _w(Niƒćx=~(7liNft0-`/.q+#)M]t=XS\Dni(CƂxy$jH:[MD׽l+r l!A/МkjX1͛]:˜ lauISgd:o{2ْQ2mZޜ"8]HQY5Vn% ҁ'gCe ΢ݓ7,qAjRWN]=BH]=2J5bQ= ."-HL|6f_zƘx͐{@jBv0plp2ۀN0J|&q=n6wG멊%ɨ4̹xʿ|pbYAk'w&^onS?W֧-7[| eV"d\lt;eaLY>aڙ2j'>uVn Rk.E9*qDWo 538Q2L|iG~Xк}r8f2_[^5eoBPyr.>8}O#yyDF0j` u2wppjݽ!1T)ѯwpvmP)݅|  ~D\֓5[MعG7ꦊto=o¾jvUwPeZ1M)'G$Q(ۼJz;HtW,K1`m+W>\ Lp;w#o0)nYjƦw3U^ՅjxS@q*K])g)v;+5N#Fa63mv}jإ8T} O$ػcSp9T ^NAcyO)|H$u|R-:덀?P@ZJ!*ij6R 1W!ZqRE>4蘅btm[߻FFnh@j=ԃhh.U+vec> Ye&+KF!m*$mn lӓ]FD(Doa}߃FC̣"cTnE]1B6 @ͨ5I#tT]ˁv]mV1p<=dZU%o +c-]U8[(6qOY{>U^z{fR? ,~l]|.༎>Oߊ zFY電r%]q:-/31': &xV#_bkqa&^ YVQ:莖;^p8Gٻ5n̄>$ZHQ 3hG|p.k'Nt\6;~ג;\#p A*{̑Ӓ4yQ”}uf"[^𭡧"MΫD2ӈbp[4 lVS}25} {OPv„e딡W~lCPyClr-(ec޵$$Y͇M`d=aJ8YcKCd8>-yΘÈY2nsb)Ap_$qJJoѶS!LU8`akTF\hd`/x͏Uc\^*xnmF Cb*'1jl*TsDEGNvӴ.X'ި/9@PŪLkMK| DuLrtºqSї`3vztqI!>6nUe|MIm~3frt|npY  *VG@xiĉ= DҹP?]1`1~Q($173Ax <(u:=[@) wiW$p`<6o|mxܛqI1c|"@(TpxăA _Zƒը|XՑ@!,@Aad>oI|'eD$F|a1yU s@L2&I%،to柗NC-)e3p[z07&UrCސZZF*tEyTqZKk{:+G(G6J:|:t rcbi5V9G*rd_?MػI(hx8+@*O!J☶ y>Nymğ{0^ᄪ)yW[{Tn=OX:bNLf f,ٚQBXSiBez%_ϔ؀d~Ve0$ցdA \IO.y@7oLPƄl"5Y:vyZ+]BAnDI _դYc:=2yϑ7l~_6hW.7 t-F2Ȃ4uodB\q*lSׅ"IA! {dOGN@7tw/ n!ɜ4u!@fOUT يc 2V]37( j'̚?fG -l "+R:Ć2^W:':%K$@c"U664]9-ւHPL"n- S؀>56=Qfk\t2kZC.>U;[q Xe--B,u"At%"bxk'HoxpQ>4ByK?*Jp?޲ $0;55kI=b [G8(+2m72Ċ?(%%H0'/#@(nYBAaKElșjE5Rc\T9eic;R6ڜjJZ+tINr ^PCP-4r&ZCP37R\!1l9\!8o@_ϖW}v5O 2ܑ+v:#DUfPAh0Җ#CתC]:`62R~GSD4;ѳP<ƻ6.ɦªvZC]Xycr'x 0PY)P YWs@rsM@[pFvN`?*0bLw$ 2_aq.zbauRұaJMH<<Ǫ l42G M? 'ȓ hn:I;Uw0гt;Rk_CA5:1ЂB06pfL6+vFhdA,'VҐL_N~a[IŜhLc2 FN8~u/K ChKA z ST2kG+r>Wb+ {Vb :/͔YC|N͝!2  =p@8KK+sKs-?Sփ=K&9 (Yaa(#`%sɿFaw՟ˈbW1ΎTuy!`X`8U(p o4ƌL+ Y@<猃fiqYSwL@޻*ϼ&y+0G ~RC=ٽ@Uo@EsuY0*.Ԓ8"u^8R3@IQ܄An(f^i[2K0I}@ifxn`c]HOrV:M5Eg<6 M9TYڥaW ɷdp6*A\^MⶍA{Axd{ β bRP!r b]Ot3|_o{38?.Vёbʘ6X4z}mN=,=ڎNqHDqn{XJқޞc/}x{[]lZ&t\A<',(gh=`~NR!O0,ã!غU=ƯgB@V,nKU`CȋɛVALyA/'7,E$A\\ : @,-pCe!^EG`w~ LYeϺړj63aA +H.<?S~+iC .QtwnP #2#2L8Pk3ͦ0O3²_sFf NzB!jEd;r3#Kfw'3Cvo컇jGvծ"5*h,2S;9 Ԑ!.#3y+߲v`ƪ3<ꑅR1ƭ$֗A)nۼYx\MɮfL\]Y鬣:YJvXDmѹcoCbѿ({.Fz\9za8HuJ9:II%R)1p.j''zE" sZr ^,.rP\B"ܺ\VUiӈDY5g{7Suj&C9SCh$w%1IuE%ڗ"6wWq5Ԡȸad1/7D>/ 2pדOZZ[/`Vc+|I{SGXxcі7zinTMypa{+Y<<7؟Jy׫nޭ"9?2%q~ +'.(m9OMC9-@,n4:`M?YmOH(L~[$ɷgdEvzJlU\#>wȏ *hjJrTdXs6؍10ѺPi;U2Tξ^/:R4Jl sзd%, OJ ޭT-f@*?;4ԨmiEܓX昮F%ǔƬSsm%9 oɶ! *f20Y9BA2A^תVvC  q(ɤ{_ (WWDWy~L:Rw62q3o3%,jZ Kc 3åN{$WG=&d'>}лk%^ 7Ayq2.ڱ\NKj|6LҜs%Ϋ%` ZH 6H=mKe4$XǷpZ6]b\}~ww>LnY~󍘬EuS*\Jg9YEÅCj% X |O=Nw/r9PqhfQl0uL&A7D"f}ƌ;&81{'-ށA~(,g#an Y 81ˋ@-QGA5+F2SKbZ֝{K%:迷,:8tN)(խ8RM k Ӄ{}+a{df:I忏",s}m>Ʊq&[0]E}׽|‚ՏV;` PKoe?Q:#z8]^} u0T3bcҽ . ;Wڡh6$5*6XP}ZU\yU*k9dc q""0Ǭ=xտ"@SbtYp؋Q6Pa]  sSܳOȲTUUmP.:NB5Z=x8}~cf0\K/'L;eGj-gK,ue}uSMe)놘nek!r$ i~r0UVa},J67OywFU-LD,qGm [ lai[ٜ[ RKwEH}6مute6W Z^q \(y( 8 p1vγR,؟fDŽ-cnBμSv9?zt(B{GK[VɢL(GiSb;:,ĭQJ#VM=-VJXvO ʘP4 uSH#jǦɭ]b\UlgkHyXXa:ǃWq%:a.XPDLAMz[!/oFO s\_-0kTjBSWd`#E&84\X"JcΚ&yEM5_yuʛ_ܥ(eS'l )PA?H yo(8 GKv9 ے]UXzK':DJ#NKsb#WDf!9XKQ'bU4]gYiuAXoC(_>BM CoՖoel3݄_μ88-<-`@%UD"bC0W1.O{^m6~]鐂O}#f9Բy 26ȟj c`⁧f͉/еpܝ`%fKl7lU5GAl.)!9Ϗ24֙JHSV57bTK]#5IM.ύe:/rtG-4%mKmgm#VoP8{*9k.tv2g#CNKM CT抯9&g^EIx n@e "e*}!RAj 4Le@[h8&&8Eyy/M5> nƳS) 1(5uN1CyĠ`)0"G\ A5 Q\ -]R(K+rET* B/MpmS n{ _I@ރ}v6&O_GNb$wZCY (DvqqpF`>fMb*硰dy]DZ/뒾4/vT RCL55IJ-YbREs+]Fm #sZ$؋N[nr cyUƮ(dT{~qūҐ,iD4vaWl䤓r2`msXPh* уž{IbDmAlAYW `^%L8箾 `Hm."8V'p,\?`%azsNHB(sIr7h{D9ˈC\"!-T)iԆ$JQ[Q1~exb#;U?MC3bhL֪"X/|AmŮnWIiP%[c'$F w\1"ofԖCU1cƫ'QN$%=iJ/!IrYlDz=`ļD.N.gG5M,n8l'6yWVEקb9RKqJ_(.yAqn[%PQ2s9SA-(j=<[ufPc ~(ى|߉盇bX0Ut4|R3D%iPגeJU 8eS:V:DL 4#)0zk=Co p⛏l3V~־yqi`m.T|k^Shޞ1ʆТ߹iYC]8fn%:`檽'Ea=%F`ZNN&i&OR}X0t(e!A" +nWigK{42`^w˔+2Q"gjoYVHp6Cp68M5>q]zgdyJr !>{3l?bapFm򥄰 p7?B/qx+s\JP)~)P8}}~$~*!rO9pqss@]mBx:n+Zdǜ!*ȬČb7vm/Pw~GfqVfm5e{Hu)_˱i<xd4o(;+Fjb_bdA|'s 'CJIRz2%U>=y7q Wg AUn1o d'Fv"fve{U1ȔͩpSoΥ~DInNGi3bm1BL- @pD; ALs0aY,Um1Jޗ{ #X_N 0O!7#˽^5a9+`@ѧ&bN{R(2=?7Q% PS_@QPá qez}vB$AD Qs+ɚO^;r?wWO<ф*aN=z+<+e1/vAUH!x_K VcWKbNI6oj=n_^9nc "R']f%i\!!5nShh*ZX6\*'?cʬL8іV.8c?l>"<1> 83DR6ܞ|cYS؊;0PcJ \Lk2A\7Z_s+HO0וXv/=IZwKYcI\#rXq<` 2݋p"6Aj]66 ~6T.xM3 }.\"t<-#J­^-Je Jy {A$i m0TJ)VhQ,bdrrx`&BV };]>nx>\!> (j0$NHx;elN2 71Ȣr=SOIbvk&X&aQ'x!AOwՑ`N<"Uw^ .h!x|)/sɘA8D&y^`!{U9Hh*7L#,hXLTDDۀ wƦ84 dӮӈB@ϐq`!DъiPhyK})Iu#|'m'\2G;#&P0:u@|u]!F{CR#e@8Z/P8s=.;o7lC^O!+ Q rYrIo'!7k3M}5mhVV]*S3<|@v L?AZ8ku\ucaA2'ճNdn{ ANujo<' =^]6* 1x\*s[7ۄVT|@3O2^) JbـŃ &(qw#?0 LXP@')!&te$$;T.m-Z)W\Zu[jcg>n{ɖ 77WѸa"7f6GU:&?zrNeO/bxvCi0GygFOq]f˄H!_gLyyR 1T'&Nj]76&ؚF?>yɃ:z[&c^ ߋf7z:}iMmacH.W}| "l~ԕ{nKϫ FO }aqii^UٿĽZ BRj+0Z0SSsRA@:h_tEfXρ+דj[b?q[ *;{&N}D:S0QZn+D>jkx PiFGm-F: 6Ɉ2bD$/pw߬-^D <7r?F-,k7ko/ЈAq1=XBn]q5G{K͟ ^ED3d~#b?:CKL/tĚ(eTl6ihgpI_C֎Bu$81}nαA\ ɚJ!QN jy&4#H pCௌŚ$|sʰZ?*:$Yg7&{ڇܢ9 mIE.f$O.׃nI￰+.ˏ]T?ovxH) [5r9jX 'i&WIv{&Zm8F}!$<m XtIZIPԺ ,=Gwz?ٮe翮|}Q%;*A Jc+)KEHFmG0NiƱ[7i׷qVbe|GL(.=[s1gvxd<-HƴH䜪ETjӞs@VZwTZEu%9+P9F{+oŕ_Q ];ޝv&WNNGO4j6LcZ-&{2g }利5෶xE_Ӛm N߮;ç/o5`c6ae>ފtֈQF6GV+tXQb6eċEavB`mlQ Oq SxSW[Aֳ{ۉ^-p| 0U^+_o#1P;m]QL't#U '^:M޼!1A`9(>i"ěHȥO{2#>o󱴰oG+1:h XD y' ~8UkG@+$߆4as+%TSJI*d8N^W2(UH~m*Y &#[ڻuuwpeP vM /?2^dV=.,Oߊz~f]Uyٕ M ]8/,Ž[K h4Q>a}%Zh0ήŤVjH{'aŎ'e&tf &D0"c^b#Դ&%LnN0pS':ӑڡ ؗ%LQ\j*YUh^ +ϩ|`5 7uu5ܝHbORY7guU@;c$! ׋MC\#` ukzN޿H3h-4NWlKFEJ_z-Dsj~N{bcpB/ׁFz1U;ܕ Rlxod-%uD3ᬭIWdX}4\epC(w+u 6d*ݛ@G@nr@j}]ts (WmUyN$u!6{%k!t2ذE=KwIl8/[*Rjɸ,Uq9k+b>M9.=hxY?3i&% Ed߄d@:O~PK:v-m`otK < Lr#a ޅGV}$fgyVuG =Wwh@ ?]Nfሺ u.Ld?޹A"/{d j7eR -m'IܭqzzPqPZ0u!s*jNBwt& ~߬iE_%8p%(ȓcmr [$ݢjiw"W璱*fܺ;FY.IȴFUvF gZDco}[{uZ-zI}'uCn; \KUx\vtV,~892 eǽ_Tk~&rD22 cssW Q#oU2fǐc!>yTnG ]{^}Kﻳ3qvkt碔$o@[ ;; @=@X;$\hu6fj*MVBýr܃K,(w20-~+1nˉ dz]Oz3~ Lq 7 L@ya85K4űQ6B*<ʹ` N&K7V)B9m4)bԛa~^ W嗝Z~TguBlzdtbvHMhk`Kwp\ςZ`K 7 jd-M-Y /ϻv(x8#xe6/዆ г)rLKb[]5MUcZ>!b[(a7餐"}PD}I>3APlK[Fx ;# rns ;IylnX|f2@HEl$)^-S骶 n4:$(6 r՝:pȃg 9_U{>@>mܪ1&#Zb1(u\(T:R|2$޽^nb5!rkKEXcшӬ]ːE86}ܤ ݞ)оtХaVRq2/HU{߾gec~kI**EW-c.2b_͗ZϯUM?ܝD 0 )QkPr$A {:&4. la^*Wa\ZĔ9k ;B3bz2@j-N@ G\|x顙EԊ*gEFF\\vo~DO *Uϫ?th-nVjҫ=_Z{bviQ@ A;$X\T]\]=k9]_$0eփw([VgJpLWjfvBSd&eӅ m Do6v4[.ДqW%[ ЉQ_PbX?K*fSWVc^8rN:PuobO\nvkp0[P!-}»*/lm RsJR=) r:> %/m $%: WbzM_QKripJ>cuLbܕw3_>/(LqH0gcVdb[hKdQK ӏvu+`8ږcoA2u(L{4DfH?P#1*kӼϰֹz8yp)AQBkm| i2`ӗ\,gZ7|PWܰųueQ {5Ρ[K^waΔQYԎ&lF˜tϓf qbc4 b-E5})zvaѺ:MչEt,k=٥ƥp>@eJDH㍨Ųc B >Z{ `я(^.srami@_kCA_AB;(p_E=Xv̽S$,XڟJ!i3莸XF$y[sh;|s !`w)w^OݾFS}h+[N`FI>*ĮV CuNJ/QLJ2?zy됐xin2b䅟wח,ˠg$fjOL vOmRS%G連 $}EA]ԒNSCg=!Q fEG{>:e(.p![ADHϾyl ˽LT]r,ypλ~-s0|&<0,, oח&?^cOvz^+zV?Y%9V$~ % ; T+9IG.#O1>6/ھUēj~1rXz;d$'6)TN+pg<gCEVZ%X@y4_C/wJ" MgE\!/Pp}w0>Wkυ}|a CڨV}#_(Zf γg57BgN[`|ڹdOhF quH3!8Nix|aEiqU~:,dZ`=`?!ܰ;)J)\my0%o6f>,DGdGJu@-adt".v%I1)B$@85vxwC9*>5o<\v96t&vKe _q, FQ߁D]=9HM xWtY,׹m0\ 1H@7_;S%;Ώ-&p5kw0Gu(oWA܉pHCXz]qWx@?!$J܉MC=/D PyVqbd"<RLxOK7(a}<;jHQ*M!TT+6Fy6 T/P5Kj@f{Z1:)bu7Zhu/?Vk] ,1^8}8(z/3޾b>LʦZ)%K&K%g3gSʭϿ}:g˷Y=LG'$8zz,@zF(RQx"I$x\$]E: rIehZ7וcujffYgŵz62УcU7H.hx  [fVBE1ď8D@yN׫!ȗ-k]٢4s?2I_UZẰ>C 3yVM;6#n U:H-hmqcP߂QRKARpPSїĚ$w {ϐCv- |]D̈`4<ސd1n,7 CBP E}} ?NBHQBH5ITezs&}(OT23842^{)[ޤl.zQ+X@86fADդ>#vs}:ox ers3`@!<?AѼKeΖG@+ԓb(砪8㖹-% JFyش@x0Z ŵ^aQmYby"J7UT"SC@f|,T^՘fZN"Z1a8 l_ M9NCi'cac¿a\NfTJMv[`l<Ǽ)/Cꢨ/X̧m_K0jir044IƝnRm<*s|V\ P_0hzW#+ކv{A0y˯TKh  :⼂.55FѯCC}5t%3"#h&c~؊E$@%0PFɁ]IK(7>E}QY~:~qrjqVrt ȟ{ _|Pv@Dd.U`/JyVwK&l~6[c1Nȁ]d*т HT/Bx'鵫SR(r=Y5[p?'N(0j$nHlpt^fdq~ez*"|'7^q|0wqEϋ ߤE¯EmPʝ@u6Sœٗ(@9!Co`_ upϔa⏎CDK;f溪SGN^ Ԭ)V,s2W1 G&pM$H KJČǻt XXU>ف/#n&bɪ-VQƯme6':R5 P|I:ÜZ`,c&I~hM.2#<GINFf[ص܎pIr@mӣS_%p?jF?$O PA: n33HK*ZÖ8ԃF8`t\WDA>FᏤJYC RN&Ù]I EChGo44{wk9{EeZbvEqoaE +zpiܜ@,#vAg />Ÿ~nesP#B@(ti2Ht)=THYIlht[%1.Ըߪ>5TOYF%CintA9$-" `'i[ŵ_aSNWǶ:jMsZYPoΊ#vpE005/-c$^0#>&q& $P k0g.9frXm[Vg#f{0 v8tj|3NJfhY_<8&TaG!$FYhtUF.sRhHHL!-u_lNjYlsev_^5~BFնw }hڧyVDRw("gZ@cZC@'}r`=6,yLPEodE+\Eu3v›A('%M!ZMoaj24Khw=o0B6 ӣTtv ^%jrSԨf (8TKRL$*$OQ*p*p$؍&,v,ѕQGFv*c!؊=xo3HO7rIl"C'pB8}G |񬏹9.X&?O4]a^ѵ) .#s&%C5p|(NIc@_aQ;Ou/')30'Ta&9pBL,㑱U8&8en<ck=)s1衰n[+P }|WOL&y#K1A.Q0TFLG밗9d'$Kы"6v 0:0)0wޅHGxϹt!ZVt:[h*To~)evC,ׯy]6ض{ld") &F pk) [pH.3ڳ֑ $G=[*w(2hD}OC[.xQ=PVO_7 0VJ7 \!a=u?)a-W9fER$i8!IP 2`)J:osGQB|IvKʀ 352ARBF{n_u_p"H@9ĄQxB0gHNHºej#"%@O؆yK,fE|v/cfyuiH`x~L7w>`!3p ?-%:rw)<jão'HkVoLN{vߊ_˞yYOv͜yn/xR`̠4fA]lhԣ:o{2ᛳJtE{U\6FB4^k[o7zҮ~_vk~ kCZtF )i~cD9~ n93/a+,ٲLW1O5=,3ij6(Nʏ:z"G%)쮝>B!`?w+e^:k$]B};K얗.e Jl ~؇ȫ$D/@$zbջ/7kj=^e7 vyU͋x ,+: ^-5ˤ;Ho+i?zV"))Y(:YNQf'=:̳S37Ѧڙn?v";R}~tQn6n%)(aLfsV6c V~ξ}W3$Iẙ6OzTDI ʘ@=vbXŧI-)Jdo)z9Ҁkol/;9 46 z5ෆtAg3Q% ]3>Z–p՛8WohG?F/C^J0 ?at&`WO[%%^bAɔ-rGtxv"|.cșԝ'W#wpŖ?c\8S6mGwU!: <;o($W^iDk3GŐV;kn:p}{VMQo4Hy&ԸU6nXA% xB<ʤ}sxp'&,?C-3Yu:4Kn]'ʰb`qy%c )$=?O(Td@(D3/n_π& ê\3]!6)7+P|UoF_%S]xz J #O/!ksn%܎%2c$ۯfɧ 20f$DS1{ɵH j0dQ973ʸ'NVl AKJKRx1U[Ԗ5zY*jevAفP;gv{`g_> `%ae$Y5̧qi@uC2 Ύi|0tAȇ/޽oCVZҬf2KaHuDy d};MFhBWgJI˕m߇;ǝ9@Һ Lee1>v̽vÛ %qT64->((FE&-c(U||~`W,'x,Zf6Y/=M5 .2,*E!ide.P֑{rmB^ HYC^n|sWBnWb/WwOd±t VcylF ttO&ND)W$I>Q ZK <[PUUH-$M=%yɾ׃ |~j>(*ndw*8wyHPun%,K VQܒ7I*XЭۄk Nw1".^}kK1)nx)V .`v29?gMpe-/`bf Sq_upc-ǻ% $!` ϖ&r vM->hlY6* (6P`:Bg,8ܣ7gqT+}sCߗє Ap\6,RG3=]0)o[DEFz%ww1O%&ӈLdL{VWk~Q, ;o|nrs$-n'}0}fJX7^J٠A%)xxpndR{G]#W67$VZ/Ae(yKgԯV( ķƒ{=kzpt8^3η *5? 7PEaj |n3V\7<=->1szavW̋l i3GakU{܊}Nq`Se$շd |Hk ṣ-Zot2Wm H h^6H=*VZ% 4 L%n>E, ~~^^r]@zNcpyX>5&d>غ\n;Qanx̧i;,%4DY\$CXr e*xZ)σpK7my?x@ο[p 2f[7Rwo-\su^#*/<ړE8keF^0?iF#)0<}._Zo1|8 `crEbz+zu$%tGlۇU-Fjz?ywFaMV\ (Gā)'ZF1Lp lG2A&E"S oG"s'bHjՂVblbk@4QݫBvJ9DWIe1H\ݥ`C>EfŁyn̷sƢ++i| gNS?ZF0%Xiiǰ *:\- =PEG2vy[LyA1P]3?&C#-^!2܆h)x*07sa3^Th4va^AƦc"I4Q4> ;~x:=kJce7r֪Y qE@}R PVi<ǦǸǁ쮖L xdm":3(ƥWt՝[c{ yWP| _BEҚ1b7uBKNGN壗 គ>7!+w &e#pVysg<ȚWـF aaB-ŷykjxwU6w͵ ifXCɪJw1"fGX جaIqyHwq7fPP#QFFHeIq;¹O4w5WlUpUA!!&> Zs8ӓ6+=̚vnNRR<ւ챍)^\>v@ ^aH\o1/0tfk9S46}9cQ47ނޙܰI]?S@ҵV@*}ȽtᣏPW],Ieq,(~KȎGсhw\֦̻oGo77nnq kZi7NV…#q1dka:UYkxg`C~䏊ZXf1G~0YAF$ɊïmN>|~[hsN6F$\Ȗ7L+h/Q)Ѓfe_2(x  597YII3 J¿zE@b7`mZCNɒae9ΓO8.c@--cb_!كuthN;+(Rv\1Ã7 D"yzZQGg.sU׸Vt3WF&㩫0]N85l &+ #ys45 Z֋' =~ ,oSkaSs~ˋSjBi-@uX@h)((7 #w<e=k'} )޿N DG 3D@:{M$l3{HloK QV\{ޑ6& kx:Ue1HSu33K[p dȍ4{B'B1z$ P:)^](J5:݂!<+;|@?ג49V wT) y 6n,<1.C~~8h@ֈ$~ Xkn67aQisyOΤ]XGg 3mA (B!YI5w(ãW0|02(LtvHFu@>@CD;|A\^ R|FCCP0y:HFvvy.4sr uNE^w]DҮin$w9n> C4x!լ%v!Gnct6gf=M;&"`= oleЩR-LtجQ9,a:3#(i@d)2sNIX_ր.&Ǩ _3y=lɪSjw&-+Aރ_voL \S:藯 |Y"\zUЂr롉ECv#  5mb [<ʼNp1Nm5[lqbx| ,>O"4vhgc^@[D~&1CI_)J.!7[uZk<{h%gSvLEW"i6|9UTyF-U31Kd7G#HD|$UH@P(9DϥzJR]4B ݚ);'Ty"ϸ辻iJ&(@ Ջ#I*Du~}ߤ4coks P&EaM0pF 7-c{Ng`54k@ |JO#Ʃ%'l~z?x;+3) [IJ/.Ȏ#3N_w <Z!o /rƹJGx] J4d}PAP'B$8ZـJo,Rw-YZAφYAfe=S1iL]RJE:qOn@i-r)K9}J*( \$>˒oȯ \N:|K}#4Se0s FWۋ=n<K/4rf`MAPR>*+275&^Qi=ˢ~P5QE$*t."MAkіs۳HTFTZGs: [pqn9r1*۶ZI NiE^;҂^mC}.WKTfV۷H3}%[Zփu^If\lah++kIHU6F/AԴh9k t>ɥ/",;_kDN9msK^H#'kuFִ3$df;bWNݚu"- D #9;FxGӢô (gtg_A9_ kƝlP2[2'sZr ۗ`V+ydwzF' gmVy-.vVeT&0` 9xө^uή[iuVϡSPɽֵL;@5R*TkXV'GTg%x^?eܩ{ZPykL;ywHfC^׺Cd+7):}<|@v8\M@:ɲ$'Լ]Jl4m0އhbka~Gl9jU!.&%r/8sQ, qi%fu[Wd,`XF/M.eN9 GM{\^ qA=u u=_jpp+H*Ν <0i)MzW ׌>o!`6=y<)@X7Rd&hOAP'h5b5hoP퇭jQTıӿɶj;D6`LU[* ۚ gf UMMrP.kh\_&׹mֈ9Vx}wuV{t;21w?@t G+^|PdbW822ǯٴdlS7N Q7٥ӱ9+(SX C%6IM,'cm=ʥJSq3zrl4uZaa%`XaOt8$::հZ,+W"CҘ'sI\Y)t#åb;D)r C:Um'UL1Q>eHޞ>7@C[YpY(CHoC89Z͝>/O6djj>&R}2M(%> &{_s5c(=@U}g `:VzNwJ4ɄeSb97(/[Vf^8_ JC{EZh(P;)T}ߕqJ Kr8WI9Meb2dղuɎNO<~upkh_NŘ^/>}D@dS^NqU3ϯmCqL`M[#`, %~-HaƳ ^s1a:4*F0 khP`eYWa]c,AgDi+'I{Q>4j@SqP )kIU&m~ aḳˈI8ɭ*9u2v' o\ݯ9òXT.n_ !=eXWs@OH ԭ8Ɩ i)=\tg{HL'}nScjx>)SԾDAoA[=:,aX?yđOGon|Fb Hx9jx >!% H"?JU s\M']oBbM yua@3FuMDuX&O_! *$ WPƲ yԩwA4gM)[5*AVF tNIa!0-{Y}#фi?_?coϙu^7qjݯu̷;0iA UkpH9q,0FzBЬ1!לhOn ;̋3{$]Gb;{Enb, Z Â-tp|WՒFvC`A_fyk (Nk]ĵ 9W1h&a~~2|s":hvBB?fg,K}O=W*I7]_r\NS|;W8gVb!z}LRMowSY,IȹoMTmlrڬa]talQHiVr?!(֗!G*/0W%,OWkj="*q6 |[Jaepb~y2|A\D5 Q{%67Lk$vH(_SP|IPȹ㦹.X Hդ5WHL6kl;&eq<+) ?_3 1k37Qxkćd]?]Eev3),l,GOsCAGCYSFҘkMu*7O'S_(N6k Y,тI h5 b̫ UAᄚ{9ɵN620Rx붚>cNutLwd]oxLY!7Җ7 y4 ;] پ!gZN xv'5xud#!alЂ/[O4->k.Ăf@ JXF4 S:\mfEPyXn%IG&Kozc OY[u')B{ɶ&(Q<)^l˅&d C[PF '^D 6]iݾP/C;^Yֳ{/_jm=NjKᖍVJX _ j\dGU22xk2xF$ *ߐ>yG 6.^\=ˡakgaT @AKf<ಣHT8dZ7߭ꘐCMY8R[-05L~-?*Vr}7'p,$#$] $Sv{G?LE_?k[|g*rg9>,.w;-c5F;ވ]SAi* ]G#ZT.|woVd #ai(4k@7pv? ^*쾼הS_=K nju9Vʒ(Zl6OE^wPAQ`MU;$c!cԹNJ ǐY 5EF7G p+D5\M}}a׻W R} м#VP jF/%ZOIHc$ab>ˎXl }ܧf dw-'و:DI J:GO,Gtõѷ*:l`(8e@_sDLjQh9j]tllquqJin>ta{3 p1;Y&wv$ sSj[f)zafZ֍gNF35Gj$Z.JY8p[x٨`.Nf$Ep*'x}U;VKlӓMcDk]U`u~ut(tGbeԤ )8í< \fkR5|P?` 2N+v/81nFe:T4aى4+h1b#q8s Y!3wlGp)YSBܽTkW b)>k 6!x+y4]$ٸ! ҨGGB9/I.M%d&"DychVBj>X $ 1 b djWo*??~C}N#_graP4ޭAEJa~| 8-JiNj;Cʧu^|!)$!C1اV}[T{QL"'bP(8jd?70>64 m~SL_X΋Ϥշ4̄_7.^2YmG ֫ÎxDULfZ*yHꤐ~t(72 Xe,';yӅWW=cyJ90iW*Bo]Mõ:v6d0iP1Hw뙕7K /8r o2uC^izULpL)<8-P@Apr^ϊ;Ar`'R_]dma%C{$CCތzWψ*\RPI"$&ӦIJh=R_c7FHj~u}A–C n "oƾKO~?;ĆtIM.d=f3nƆӓ379t;YGk|gDPihj9|Mx:/ͦ|W]ʐO}àDIC7v6X9 -,9-#Yga)j(EpH4OW3RhW5CLgu2 פ Džz<E= Hv Ŭݦ}NCҏc_9]Ȓq7oe~OXl؞pGBʠ;P,V/ߔ% ׳ bM< \3$7ƫ)XxtL%錱tghӻGGi4 r16|܀YÆHb @R?HzW;k<cG! 3d:P@ [ 9Kb?r@ymrC (4ӈ؀B3eĦNU_.vcxQ*4A]41CGT||[ #2*ڵs4>@FL0HM*߬ G4 :]:t [^a>16H@43ۦ Q%}\Pk͵+ob1V?S&#gPpRąWړlSdg]A6/_Mp޼-r]1E.͠f*E,Q"SUKr"Jtئ3d( %4&2:{?*3Dx L`о1D%(Z'H(-QAr6`gNdX3eN^W,7dF?x瞼9E[a_%>8:gY[]('@ڧ0vOk7`BtIAY~>u⾸]dž sP ִAr 4tC `16V&Mjƃkt23d@w/,DR usK/}M |2;qnYͲ*Dz#[>R^cC|'ؘ8W~/IP1q1T6OwٍB塬Ci 9Nc<譌70p>8-hx9nL#CoF1Vkpg >$юۜlXlCP1:iDB){Q PP֜ vx0Լ'Z;l2wno-fwn8C_{~SEIp1*z4[Z;QUiϡ 1Ah90&:3nA?%'qs4G=0`v8E] D3 '7(oe疹SF>(figG K;8W ]n:A +3Fu"Q2qv ih "9C#(vfηC:VJ#Ճ~ޝ|ih䇩:x`mTr: !j]H Ek =Pu(pp#7U7j Bg `ff,[5)cH\Mͧ qޣQXMCDjg}@d^1@v@T[}"H{|,PjώS.U(]SIۥ,NK} ;fb͞eWf &/!|-Ѿ{J$ֵ0GƙH]g|>$#l/0NFHn__ Ld[f0$>ƾE$bjZvZ2u\n+a'P,}vWbZ3gxli9% .=A28-F4 8HP3I M51ID {5> q!]{e:p=-,X_*c0pbE_8)@rL˻n-/Gh;,Dwr*5y;2U&o/[(`a.S J5B ck}^):fʋ=m{$rF$2jX>5xdU.V&"㩁l Ϛ&H?3Z& YQz~27>!)9CEF(ZyhP28[;A"rܳfrȮQvjeÆBZǂ;Xi]7)< "ER ecPY-thIEM*حQzk/4=04 -Xeo!&ydzxl_ds’сAg.Fs#I-+N)E.7)kKajݭ_֦?+"FMϘ}h!L|j@R|lK3N%-}{& -(1ⲽo*lzb]j#0'j3 ra"MW$.t)Bu5 (j QZӻB lT)sY]}Z1LEPKkƍ8CW*) jD׊F3b̝6Gd-hg"ѾT<,dI aYA2_t@3H!0!b= ;OedyvcJc!RDloI엋/֬ܓЎv}b&fH#M+y@5VSo⫝-*[^TF;;7ՌŒtXA~DjBdП3Y1iɊHV^EzG$c"hI?L:@mU0by8K32Vvq[f/s,-1Yygz_;y͋|#l%fL9Uɿym^k6iκksMc6m?њj ](~h2מ}mX9а3 gG:__!&v2UEj?/$3]^v[j=~ɿ)_kkM̶(DfjS9HYw.QTiVr)³/Z=|^/F@LD*IVx( MŌ s3<.:]cR4 )Z=鹤PB%_`U vCĖ}ʇ5BN>w{)%?BOX m1=@Nf~п2 Pr8H~3~5rtlAvwkM Q>!~u}83_U /2Zuwf$=4I *ÒXCV90ϗr8ap w[:PMG'XDru6],Ų=L{@m)Ԅ5(PhBx:MRqZn8W#(vRsSx q1zڿV`[W5$(yHsx~6ېrY%8Zݤ 1FhO Μ~Ę9:`ud']FUW{e \8q',~=I$ߍn'}_ qbygwA,/qw`=A8b:wLxa'Q-QQl i2NsNjfRrm뢄ԝKviM LvdR*E-hl^W9b6`US9ML(,Mlڀ_ELOo>jE:+7%1<ʙ<̇Al< Gj;f#ABVH.g2Zd ƾlc!߮JЦ.qNp!VV_C{^FaԂ9rGBQnİ)_ C"/ϧ Ӫ.K˕#o[!@ؗDn׀PmfV۩ױ_z(k~6+5U}^`\svpn<A#Nг̼'E&R9e{Y,pG}p0CK4HqfK(Q (O~ p,]T . i)֋($~K-`]G3qVmoʯF= HZ{&Ĩcb&mq;#IuA{6WVeMv[ 2Y͸#}26>Hpg)هVy|6~_fD//pIjZ?OW_Ág8`LYyL5"l;Z8qLT4FRu}f"jgams.5(R43.HgHP#J%|F"70 8#OB̨oK9:= įH\/Q{`FU:UvV,J`4x~ќ;{a:t6MY-zbԌ1vH 2 6J"{^_0ۼٲf;;#xצ$m/PB;t֩}&pCNCf O_UK|$Z{ 6]DH3ɨ z~sqUܪx>疏2~)ĥ0aʚK 5s1]~:sqYGXA S~s==55޵P\wnY%+ :e3Ŏ^xv]}iVrå1|{ \/ 왯LhDJ|J,|ys4y23yKKTGnk֯ٶĭH뗫) (Z h* ͑qS H@8 7!n#N:Zm؛ 浴;_'l\ Fѓsk XkڇK0ƕ]Ni)nbbC Qg?>ҲZzeP_x.+O oI4 RmPYCN:Yva! ϱ{`!oZw iY!>tI'^3gq“Q(o%eEhDV?\ɣC&mGe5-~ e_0réOV(ӱhouptV]^`; -tv#n,oU̴VȓBU&v <Ր]UHi0]vx{5T7OxY3#<8JM{l$e3|"wQq/I^@4[ o 1ӞJ 8rh}k.wDuKo+wi^!THy*wK/"Evf*N {ZG񯣲*&=*_r' xjRc›pv5e3;)XtV}dݿ^Oq!/iO⹓,iV`7[.'Sz'uov%L.L7l bq^^Nd85VӘ6{Ow?f4+bİ#z,ᕭaCWgTI '1c(|caӔU 'xPa8> 2l@/ Mj%ۓ]|YԬuEOS!T{U[B S>\vٯsHM IRsJìS'vq@|5wNްCOҰ6n~xVYjbk,i!L0X\'-p(>:8E+S@۷#ØU8SÍ2rT"`Mz dc ҁX@ݧ608)s[/i:;MO`"AeÆna8T(C ru=a'܆d$bMǯԜce>mt/-yQJ؇_*UM y˛%kDl+\Y%ڋE/̈S>(Kj'ZU%٫zJCm19kaLhOӰ~qqX%:@,y#ٜkWvQ_i[t,9yyvBHKoFD3 |ۮ7Kr'R@ͽ %؉-VT\]kr  ǢW)1#+HKߒ7-@HX>8+7Qx|oRb jAO J}-5jA0D)[fdVwֺ "~Yo'\3AR\.нZ4ûqO)1rzGB&|Z<{#nCzu8d*s>.hU AdK?mJ~x%zg34w;>Իf1_ݯwRPː&l`2Α3`Sc[_|*" ;0/\kf@{ :ލ*,+zS47*` Pw>B-PIpdctsbn \9#L$^:Åм,mc\V%S۝a-"`aP0Flh 0"Y/qo~lC""$'t P&-/<"}y}-(Idt1n2gsYzH<`<׼;pLaWmsȭ/"WX#3c低$ hB od!ȅnD9RCL0ZY góa IQ2.tݽ ډvboeTLz͝EoUѰ"_&kD5 YlrmXam Um2.ZBu]>OoX$^Dۿ+r %쑟wz{|.7Rjɕ[X),Ϥ5,|p pn6%jLFg +pa0nMspP7^Ixѽ_6zܦnEwEq<9C_A>exzJcRG V)_!Ϧ!=tԒ{f5^hHl*J[ʨi ݁[;;I C8n3.+i\pцaQ#x([Їz&6P_=+~nOҎp֊;D``ʂCp5dz+3onoI0wcTN*ݒewA|} Z< YOl0P^Ǟ}*b{-qs ;!Dm>&KWkX-f/G1M#e4c摨/>Ƞga^!JDA.;v3Po:R s96(l,"$==R{u䪰"d{uz\cm# Y䨸Hn=RoȠߺ1e6awl4 Pl.9P%wCFw/xόݩL|;+(櫃NK*e/𖵾 $2w59'tz?+qZ./@V7 sEHIQ+VށW~hq?/!?O9EMYWcղwo{\_tjC@/M보bX#=:m2A\;#Җs*ψFO㱓-h =/7bi+ZOB"Hu̓`GK?k|0y`27_΂rfOy0 z_PQI_ XKoCe;f/)=# pVqDo r Շ9*VO341]0PecuR=o`'7n?7'+b pt岟),1A <7]..ĭpd?J}$5YQː5DR:u2Q`t8n}"+:rշPїDuq/u%,)bdQ>VxJ!l7521q38]& ׳MʗEP')jv~ExnJen ^j}Ňv n3]{7P,bcCg?%.),KC1QSP9J?+yK鉍=yjr:ta!Wi,}cUUkΨA>Ld4 Y|TmE֜Ɇ^ҷT FQA(=dh1p_߀x'Rg]Xր@#bd[ez4BD,i]!][k{ILRv>{Up4 ( Ѩ*16CUpĬ+[?slDb m`.|hIx2Tw:Oa5a s|s4nF_a vB"Ⲩk[Aw{|bгrnaɀ 9}EѤ͑BWBHhރћ11pǫIs^䩬KmMl8$`i@)guԛ] =,>Mһ˄*9= +2ԙ{ 94"PZqwrzT5M{S?E/kyWB<yҶ7j m8C04q{B^\g\MRq-R.CǖuœP?uk\G ; *1Ų0V_zi1O %g+Kl ģ`,_W(>{䉞2<2%20^ l_5P7CS$D[%WIi'rf)HטRi6`֚'jiߗd;i2dAFuY:dKKu9wx+)ҔrFĻ@=bύ.Wݓ~<Kc.HG"EYUk*t, H1׼GMX,֧r䄲az(34~Y@<|^,rIO_:'w)97vMOSdW,Xjً$Y#kS>aUFėE8G]},| ' 2phmKv*:/v}3;n$u,)`ߔLFt2n4 ^7)L^8{,N@- Y5:Gr& }:ςEY2*J`Tkz#zK;@= ڒ^o ;P{jxy$wT]X,P ;M:6Up-NBg pjT`3 RYXJb讱'Smbf+˶M3юP;cG3nbB==_B$s=OCB3fR "CK9YFRӻ>@ $1e9}PǟMi\gaG;~IFϴ d| \<ݧ/ΙoB,a*M`f*nJɴ[M`8T5{W rYVHO7@ܙ^:"7?.}9_t^Dkt82ݎwM /JWoGreo>>5 AHךo풶9>(`Ay]mܬ.Y՝BL @J5N" UȠqb_0hw͐?2".c9Kb=L̿S ]M`zxGb}gn Kpτo"GⷜVX5[/l^adIdGYv\f]sVDA!#UPvyWRC[cg=m3 V^OTZJ'WeOިBȭ/\0ZL#1<#Q멄` s@hLȹ3S< qGB0 +t<К#Tv_RE\06M t6wjW`-G5͝a#TxAsG 9.fjGNBȟ+zQ,x_>)cm-O=-dKPƨi55,"Y  UB/Q&ZFŻ78evs(ѯۏ0\UoQ2b?\ն} :e!?b2sf]XJ# /jY&j/ծ o.tg;oiѠ@%<$`!} J*l*J 'ت:tLVJ4g)!oL4B_{DbA׳5|[ǨRf)<'}#0{ $*ʶb֍!B$݋aOTdM ,WS8QyYSO:Zdiݲ kdbg$:[SA2bu"zÿ[$Cr6IF_}b8XT7DI_'SntA Y2'ɹJʟ걤 }_,9FRmGlh>hRe uw7bo ~D|~$w>{ ƽ3ڡwv|N'<#xpԟZ7J/M3IhD[TYJlѡhtkwi7)v]. |jhXfKp>*|2Ie |;fHs$U};~R+YZ^UNtzVFTXF{%Dn" sؽbZطxe 6؜'?ixbNؿ6\޽͞s~JӯV;O*4b Z)1?~L1'9b%O]٪8C ?VKcP]6Gcܩy^T+U-6Z`i/47oZ6R0+aj0h۠A>N 5{QNRA+31Oo79n5-T@z ry>'>]w9cm uhhU0BYDOChXR$(AأSڕ^ҽrVV c.2kapQ "+`%/@Z+ W" @88r2&@[&ʦ/Q+g&V[cN[oo$bs29c@?PX-)Qв e3ƯNi攣XrQtƔ]J"T֨ar+A.FG`sNVBϙ;k|{R y&YkmyJӾϸ)z go":Mr! Gf%p&ҒM㊳]x0䯓5xmb]f#Yo'w q5 W 4s~ܓ-YuyP#l2pHwyp(֗ a?'% ˯vNsl+3[8 ~'ILw-z ͆3a('SfFPXT<*gM|B ~|%A֡x$D|l ͸1 bEYvex4"+z~@܇grݙf(Pte>kRG5&\1%vr|ٕxܟ'գ >f#[M#K ]j)FI-1nOB厁J-sAL̰/{wjcB[F>,J⢳Mi*X޸ao*YU;i2RVjZ;f3[`7Βtdݽ"5GvmG5?eZ+͐>X78&JZڙA,I+z0}'$-agG>Hql̗O/zWy*U폧!YE4Udco*^M^ynh\S;Ȋ2qCPF參1וdMDc@s{FLf]`G$gGd\Kg"Xp3Qla K5hΆ +38 ذU+RMl) 2A(rrɆw3CF `{ys9f#'lY*De[$,B qU^!2nx[Ѝq͇ew͙Wi"|CpD fpyuɸk?~P[/Y 6f#@:rn>V۰فe>v)W_zM|(["A\0{ƔYZ3 DCg+R'RDK%Lz:MD)av`yY{K+Qs>>q*ϖ2'sץO}LeWa /]} @oy#dFFVsST c_0sY"“<:).p"J@uZ£[(juHp<}ΚoJdnW-U}(ԁR#So)Dk Dgx$p]4u۩ۥ@4sJ225>ݒy"+X"-?zU;ʫSQ!5<筂j ْ)_J.1E*9ZO%o_y3U[)!j?I:G{ ¿OX`ҵ%BӭL+lIiP2I (4ǍL'P ,E6)gF`{uzն)$I~:vV)ET1CΡQz:IQӋi=o@Y<~Y%! Ek[C-kihd ZO9 C c c8IU8%6*?-H ]IyheTZӠmjc5'$HdNl̻ s3qf̵2ux$V(tK ?IEwCaXm۹L`3EnDOL-A`8M]KnΌ8Ӛ; ^bW̳5/q>@wlzr+iο .&vrd2EyPKtlG(*/@`ۮu _b!3-J__"iG96&[DqsF'PRgvZj%lJU۠xEΝA'VHn +[u4{*2b5$ϙ#Ků!,7ܜEg/W4U?I\,/^7d,p4AHE %`{I7œDBV}{tԉ.֌CJ-kEp̀ܬe-L ꔵN!0GIePwwJc$9?H(u?r LD2+Qj6zhK3$k! |I.4QϾmofjzgs?rm6J`"}%FJ,%^g=rr3wSjXNCGCwWʿ;"eptF s2 >iKs]l=>&Y92q_TgE9ɹGM. Ux~4GoՊ!^EDuIGg`2c5Q?=~2?wi[<++.0nam%(wBi'n.r}fJf.^ 'یn4ZJqͳ{}&f}hϜ!.C^wU@g/ z~/M&3EcLD!^LӈSa!Jqu~4{)mt .!q>J8N^ ny4GcZ%Ѐk=W ΫK͠$~CnS04&9OYϯYDwfTxև s8 3M^頮ITQ{aC\>E~1ֳ˥0̰TsQuCʒEl6n8O󬶄[EvL.0ܺ綡G[trhG!z+Z%̝vʏQXP"UxK =hZ-B1]vI5`*Kt" ;Q=^<}=ySS( AeDK C9~wGفW0$WkqJ` MK{iF*6Q3O>@cOn,;=brv`0tz,I1d_y P "%W]}Br]5>.v^1-<-u`uq,1"`S?H= Hky8Oia|!S_WEdRlChXQ4j6^l=g5c‹MآՕ<jJp,E4cնuIhcF&xI0~~DI> VZ!)Pʧpy1)$vTndb>L?q]##{:twLms_ѭm00,u71z~o%|{Aى3q |OnSiV`6N7 W0G`ݙ}HGk2XޱZwK9;?!Y*( +0jξ!;}Oe?HVݦiZ'Ve3rtd݇P%tpsXJ-w`#mOFJNajmr!F8Pqmt ?R9V E>_K+쮕[Sq,^69QԧYGR3Qx)a~ @HgeE6y] EkOpס=X,BZ҅g Sefe;:%pߚa><8R3, n8>7QQU3oӽ\(Ɵq€ȟcm˟ɖ3+5;U;*QhzsEr\.jm-U8v'!wX<3㥠O*| av;vJhGCG:`"v]?2ҚY#lo턴Lbݶ O7ks{`9LOx!?L ;,SNcFS_**5[7m!~477(^$M-Gf$?=u(:/y[ ??§KI:!A3u h5xYJߏ"rkyu~ӄv \7/ؤ4D5;oUXǪ: V_t٢c~7&KLQ{ P,:_lev+ǠXن9gd5wf$4It#1BMtg#قP)Lu {TC5ӆD#:+Q5'~p2c9#DZSohTx\C#A.a)J1hu7f$]UpL7)uoXIz3T.2g*j6Ϧ!&Jƥ:y225r!%Ύ \x_KFK`{H ,,o^,ȈyYOQmt|A$Ɔ2Ji$cR= G&X3r&!6QK0dxƷ~d8^J+f*JwbcOkSՂ#WPrUCE4~%(;{RV <|rG;7, Jȥfܮ` P Y0)C6.+0(ƫb[ɚSUqU~sU,k:؋*YK=[T[a,kDaB3Lvcɢq#j(:ů l_r A"OjiWI0%jCjmިƵ?HڱT?~`GBy ۳;lE,HADÞ=:}BK~dlHNͥƏNΜ%`udlqhPªC_K⨎]]XFT/Jni5T{.3M @ިF.i;@{R2\ p+Cya{Ӝ]^0Qs̈/m*GhR"W1BuȆ5`I\lvŭjؖ %kQNN3 q%20LP\l$(=WfR`_Z6 Ԅy<#rG}f /8Q+h|7nl b8Kx\y}J mE#V=?0|# l R41j;Da -j$heSAp,<X_R=c~]ҠӋMD|Y%I^~:Q @YnOw .x(<7tzBT'~DZI쌓#`ER<f""VDPKChrg&x/+=;6{^Zdo^07]>1 nK Y/JF9☓t(&BHAn@=< H(n5*`£,#&ͻ tѭazi o/j| gQWtyT%A5mIOgsa<9FDb8!"M%R,TPM\)Ho,]mh)_.i>pelz,vYD@]aQʻǻn8#߄:ܤzk#ʼncObAGF( K@Kx, |,TPy4~) ?Y# OoއP8}4՚7RHkǂY9ͻ@ kݾ753"Rc0UB> t.48 9/(_݄ʤx:Sw%|PkaFh3;b`͠k7.E\#،jxg\}v,.]ws2Għ$DKDOD$&8 tJgR )53*zõEi\=n=,6kQ?,݂YwS& OE,׆4!&$6>PQ6XkWn}~"_8-SӇLPxō hJQ㘳jF6N5o6,^ diᅸ42}9Mּ2o b؏#.=d$R#n?`2X:'[7Fk7XܜޓLQi2yMB2 /a8N`*L+!Tl)PqV"F>KubOSŷdEm`hT3[U;KX+=&ypʤq"Ekk&i7+]Glnauxz@x' H*FA8$ʙ/2#$p}KL=q%Hb GI̹]D1>u-o߸yAoP_ u=Y#D`w\Zplo%1tC`_ք &IrEG ];Vf3GfA+۾XԛT6ɍ0z)[ CwPW~ U & QC13 ;+p&k3?DO鴝 n[xG:̎bI30zCBT;% W.aS.!vEd Mazg S+JiaNM.; R>;u /%~{Ϝ7kUu}lz47 tB@M%G¶?EΌ $ڂUK{(]FYtI=G$/'_K2("p@pT>R'S9b8R4bޭ3_(!?0yw\=dDU)۱˖7J7wÚـ9ןh)6XdTa/łcvq:Są.气ʱ/|]F)ҫ,_͹<I䯘' fXv(',t`.=QJ ;$&@Z.D4LZTBE4NbxRv3]/Kzv6':ik][K.55Y6q\2t+_6?9hҹh}~.EQ쾲__TO/.GyYYy-.< ]8$`6n4NxV8GAm.V`- _٩{ QvJ-(f ;㍽->,cs&g3@1ׯ(:B"`qijwImY!GF֠g8b`U~uTn4Seo8'ƵZ (OMEgBkMT1T={>m\ Q0H~B\LSM|w#0 9@ ~3b<ѹc:k ˞Ulm3a(܉ cYƑjE.-Pn&SC`< L|(. L'xYP6lMU|_u~zSG <<ΤqBۚp`}xs]~$,  '%iU!y;L#sfĭh`+;V>= zҾtDNƆb Qc'ym]0Yx`% 8%4 D$붒 #8E{PBdFPF<DBX6 =h5;׷2H`" k2L #WX [>xn-L[KcزńF#Ҁp#H8s6{?z68%c^Эu͝!#QL>/D r5kIÎ'^m7KC%w{'JW*R Fzz ҇0π]:Y՟~&,fׅ9\,JjeՁcnuvL熁D&b򁙇)=C9]/T 1¤ViHU8Q3NIiMuuyfXe޵racGOz@@qF-Զ)_=yYP#vѸalko ݢb$FN?+ԘAj+牌翳r Y^u{53Y$wF87j8`R`?$n[E},&7#B4OQ6/|d{BAb)F>J-?({яZ119*Íd\O^-$dZE|CG܂lf2B"0;E+N=xJ+ڮܠeDB0(ao/<0-e&IAHzGDuw IP(6reHׂ3%dtdJŮ:gri\,ҐLK|K?|b[Dfc%|օ>αAna%èRHRGťj1;1   N 3ڷCd3KH`P+h$rdʥE{E: yo[gZ믜΍Lj`y5@P' ĉEǃS1-FNMPʏZ_m{*7W`N&MS=+a{؈y;3y.8 } M:S4lb"Qi[Y8 Pw‘|2 e:u~ut#YŪUKHnE+9N][OVСߞ- $_1g¹  ţzOK 83+G/{݂>6p򰉲~Lr/8ڑO*(HX >fSJTk_ȶkv6]ji2!v)mJ~EmDe-%\ ^JJmu W*$J&5j]6hQ I7 Cn6A,'.\FÇqWU7[RNBOnTw *%q mcz K-iR\wcwE=H<9@uϓ)ybSMyZ:YH؍bDL!{UJoќg%d[O.* &SW ⟍An;)@ J60$Ю0^ؗ߆y+hu-,;.290[ sQgUH-Rb\oc]1A*$k d`QeMd(&q4>'caQD0jee1CF{]ht + S> .2Hq q8tZ+;\aAI Ebi$+_aZS2fh-|Gu(sxxsD*a˕ށ!F7\6/F4MÎiǙҵz5rd ,E'8pH tm%1ѲQgU^?7N恃i r0z8QC0\bk%k9\'7]oc>E&;Ţhf2y$% ͗7gF+X MgL7<<7Nlq%ptp{nvpr),M$&EO!ޛχJư4{G{tc qLیAXf 3.ܤAɓP( )#9*jKQ Z[4ex/D^L6xAβ+7 #E_A$["Ky_7-Dmb(qsDYAf yG_bTIY}ՄW0HPtGRP4񄉟`y.20EDuA(6ɬdq:gjJ~pnRoj]dX$!8\y-׌=4Ȟ'Rϊ0, /K>[oj.&P0]2_&{MWrjnx+$?b|,7;۽ ® m'k=p;]ـj#c1馜6엁8wDlA3G fvQOK$ޫ%nmA1Xx(L %ݰW* '4*gP մ(7K:  @mX+Ͱ,W¦_^1V)pՌ n@x7q\lk$ ^Z8wRD4}_E`O=VF5_"c|v~}mѬ.nbT憧-C]]7!j(>* j> 7&{nÌ>Q<$ 1#IqNӪ}zԌƫ;mk^_zUgFj]B8$d`KK_|Z`HxuZ 1F-H9'NNӃVjB?ToM5KJ}T0-f@lB ɸ/gE9?N~H#>~bBўQܲU`:OJ8vg8ާ:1ՉG>KD$W )`Ad`G:Dk6]y%Q5/q *'8%jYO!< b"36@m:F csk8Gu+IpBGTRC߁O(b f+OnS4X }mÃVX$.xɇGԋ'ZoSs]"{@9r{?#Kϸ'(JAլd} Nٴ$~]8c4C7SW0 ք#Ӱ֦(tkǻŝaًCjtp_Y\-$vnU22gZk9@.0POxM8ȉ"xUG 3ܝ}wcL)<pEhypqXcS*]K[W8?@gȢ~u8>}Xmʋf&%4gA@S!HaMD&SN4JCUr"]\#0>z\aʺ_*Ú(oA ǁIWQ&l92XCe],޳SsnC/-ؓ9Nj:m R\{Lg%Uɼlp~« ۋֈ$5\PJwXmz>t3Ɖɚ*@$gVPDe> e"V 8Z>=-SU)@:{HN:i<p! -:BW0^dtpqĺL @Tj`?ÄyxPoٸroJ7 xtQg&ZI@OMH#3+ee%b?\s}'y=M@MtN]hcNcy0 ^t m:u.E֨Ztќ:zʻQف+,J&,]k?EdQ,go z C6В>~F64;yTL܄?PUtRE=24T $(PRa҉-CM \ѸͲ~41jg& gN76f֟^^TXj (Ϫڟ Rb6j8 ,[YŸ0W 4YH'My).. 5>QdJsQ©6uMwA#H#q9CcKKלKvU+[.=lvR M4qJ䆠׹`fgcs V56}kAϐxymf.9Eb 5}A˄BI阌YdkO ;շK^ W? l6qbzHXƊGsRaq97Rd+bq Oe S_:%׋tU&[d>`Q ߶T~5NY: 3NM~ܓcĐsO'Sn{SNA&.YHQMM#WGbHe_4 ͭ{mAC kx@5-L Je1 U>Z{m+R_Ipp*J'yaϾ`T?̹ 1mz 8E ۼ(gwo),-9_6rYb# }{KaB44uV_#S9/Uj+_Z7yL? @s1^c%)oQ"VKdg]X$VBp:v]?Š|.$äiǎ)IX7a q=IqaC Y-gR2뱭چ5~(2/ _,(o|95$2+I ɗ48wؓOؕ,6d:m;KG _O5J.Z*I;΃!/3boo& ._k{f_ <P~`V˻y$.;3lgGc37'h! 1+#.Gh$(66o %R nEAzEk ),)HNe0:d#[c8ƉqR7Cyf υ0fH'{2!z {E0APKQ*i|W;{ sMNW~;b"Gk C=0J24἞%#%vӍOKց=3g9JK=84X8j!y!^IٿMu~g\CO(xcl0_"+rIsQK[P>suӃGZ߉@i'ڥ^| 䠎GY(3{TK^d^,Jij1 qI뱍Ҙ!FwF\|Kry& .-Ӝ,Q,}АEO 0zMJ W1r</| 1^(uW Dc^g6Z}8XP&WI+)<58 h2BtlNOͿ&Xl)Ry`Xb6?ƚk=<^vESߋc$Hlu9%x8- iW~ڗ}ݚ+<7VΞ7&оսDaVNt av#|m2x12r0۝nX%֊_E,O~q >t%~R:Iue|Dϋ6_.!BѴon>$mG(Ĩt{QakOw|/l- BJ0y1FTQey~ea.\m9!Ϊh{$dhd ?~4?VAiQ7xekL/^=/cJ_7Df= 3Fv(³jX6 Eᅯjj. Ĝ`܏ io*,g0`5mxqiݫͅU%dO6) /./-لq&YV&a +DwC*y$-~]Bѱvhυ_~Ia9ٷ}"U?4iRqFjPӝ =˥gߨjuuN[y!&+;pE,VCH;&f C\aYV %5!o-D(=05AYg8ZF9ѿ {AN~rHlxZ>[w w ̀Ș>G<ڹJY3ca"۳{aY£z~jwa|wϰM41K== ^LI=NI_ȓylD8aYSM5f j5ߊhlRojwYNFv,Ҩh$qLbk{6U Jn&$pЌ \1ǺJ[j zl-_11*u%<w8DR,/ʪjџzh(=+|(|!M>kgu+I%3e =%<)# `k6]V v1Us[A g6C1:j][#*OO,4"8<1L.P+,ϵ]$ AӚ4oE:Q!BzIy/LZw^J|PXgz_g$T'1:T+aT hsQw1YJi$Ҳ+$wQoW;b5W zƚa҈c5Fm&b^4RS@-N8-Gĵ۠עR X-Cg爱8ƣ Pa*B$aG'J@AeFQ*NEٔ]}hFW҆oOBfݼan!<:vkiJXPfpYV=Q. }?v~/UPBEe,+5pO|ZQe\;So+Ty^vxQ_Ijy#Pm ct4p02[F4[LR455SWEm垝lk<> *tUX-WF8|9]$Ry.Y(6vN*0Go ' *:Tmk&N~+#@]Ls:A:NOYz,$pɜW~4FS@Wj g_ˈr6'Vc ZK}9s3dʍ'ff ;9G:d vcёI11ڶpwIg> #> Kgx2p|#XoL2X'DBr<wwEQ>/+îA58LyI-MXTpd2 ?;ÒxXBa$f}ɻ#J0ְ ÛiQj詩>B6cr H0o?+ Q:>X&]s8*C׍HhˋRi9Q * ɚkCG ?np JOIM^;wOrŨ]AI1;|N\6 z[EoheXX,%?k)/s8`ԭ9S8P%fmmBC'6&o|?Oy*Ay>{+KWsoO  {h:xO~uT KXj\"lS>2]Ɣ >B+@\ +&⾹=倀_TF:@`GӞfv `_jMiV$DH QgQ{lN^` Ҍ -gʰ U!DݔLfwTP1@Х:*?3kTjZ5DcN]C~AYK5>I}7 ?ղ@S}-ֺqU9'7@({iu#M:C>C`>a A?"[ 'pz2LtjKdI&V1\ᝓWI7,dIby65ڍRso|?$qG6z„T|3xV: y+J nZgIj7b,*VqCƔ+M]мҤ2jΎ&P;t[F2K  APf6VϹt ZRA1/]]w>`ZcJ1Nz(DaN?uͲ0vi Xv_%9$U$aŹ3N}7Hcנ|MےCS4cBX~ AMل)(0'9_MڛpOwjz}h諆oħJx_}{牊rOs?u?-< 75[m_Fض#b Mjxm~'Z$NN0S0jAwŜmBb44Ղ,S2TB$sc 3ҩ b=[As  1U}ߋmnh qv6s1&Um@mC4)!!Вb˹&#tE؞mWIT$?16 C 4DHKg, cݙs&K:[RT h00ݬO NIl~c5^]^%.I@{HЂ쐗{'i(H* ̲$=2_:UOqx|wD"f]X%~6j}?p=$1^`gloWԶ]p_UݹOGty濞wL3vnLڱ.D4:$\BO~+$~yݡ/^M]˅Z#*vc?oYh|Kɀ]rx屯t}<&k'tvS}w鲮4]Mog qVGm{qJ̑yJi1"R)%3f=ez\3!$r~yoMmT Z\xFgsAM2S_I q6[dSrA$'udf5Efj⺟L?$y)a#BUUFXȉ$Wt Y1A"=J gQgY/@brLۿ8\\}~{9wҫ7my{9zif,jǤ,\Z.[<71#qA㕶߉0eJ{ɖmOXsSf-!fTcz(Q1Z 6;2NJ;I) _WSħzpcE um#|IcIfڼ^G6u2D׏6Qe|,>~fjn訖7GY#G'6-0TB>1y$~|Ar8YIY潦Ͷg(T>B ma+IV 8Y @>:dT^ kC"Q6X\KBw 6>%/`ڈg=?dרs> \k2Ksna'pTp2#a0~ bHk^V/)GR]ZKƭl)nj:J$`h~-VegdbRtb᷿bqg^'pJ?ԾĖoh, ]IB\l+< RhZ1G8_'&eiz2 R།>gSB rMB4|PJ:z"L2';F`Bi7 aֳ]T6yߐ Xcsiۻ8zͨ1\8eG;Vc!`˷Y|(j| l-w@V=S!_ʫ%E? !gTC6hQDT` aoT0߯$hx+'&4l3٠Є,Ž I+U>׿nmoj^]k;ΎmpZ*^K:Fڍm<\1ù`x#^dF}{j\-ɞ Jΰܯ1d79n_U1 aRmx$*MN7։[~D)~}JX[o`BS&p|o慎 Ā\{e1n{Rp:V TWe K TiW]bݍR@$s-zlfd2|#ևZ;La@:zh9!3BO7D%,0鐼T<bތXq\pqॢҶ,jS?[hWmVP\0(rL3Ϡ ;_ѢI?,7LsWwsL8p1KZ楲Ip~o/9ٛш+uoAeqТEB %un~a.fX^mn*+ZލsVM;:9ܥaA,jCt"8Q+Pe6k8f`~yM\_#K"LHu%H#Y~ 36fS#znx<'\0x@A_JBRF Z"bIUH'Y1z(E<ˁ&ocS5|w9=Oz~ }ݿ 6  $41b9'ꖒ3VMqKͰja6멄L%!gmvQ|k6Wblh8:`<# b0#Dv}-!S{N?yOwg.T|D]JXx=O4EjV#:BT\,hd[I~'ߐ.N,M!Q-mww}}5:0@ѭG}ێ n0/ʯdZhHҪ5+mx+-ZN qȀ.ZQNan>1 Ϟ7 jѩ-o Q& ݠH全5"&6^S*Nl&jk %Pv di1?4#Fgy&% Z_=Tt{59;n*6P f1:XX4Fk "-.'"`YΊiFN5ӌs"^N.{`3 ~c^Y>+zsnv2?F:M {f!,4 8kĐWOW;(o <1\^ڽmbr D5ﵿWv F];o5QX+s_xn[-ئ-VE!Pۋ7OL/p !mObfl>Њɏsm'ҁyz(?;o-*{bIDfjBE_N’b K Ҧj4ipN&E~<@ 1UG0h.CiC;5zopZ֑/ʠ˭6\6]R9qԡ+(Aތ̂0hϲ*MwU?y2Q'֑e=e x'ZeZ$Dme`kLrZR'Kog ${GH6y~s#Az10lz"## }In6蝭7*~k27 _.4H ;W6}0( .HU8X53݂3а)"soT,Dm96WDaTX9V>>|bKy8"e}*T}x!i$zE 2\Dȅ1@(+K JD pDmeAIFo_ߕZ}ARJٱe!.m'5gbP[jƲn4 +>fHy2,{A4\ua_GOcL@ѓq ~Vh2lnaWI(/B"ڨ˷\`k{ O7tw;|8U-4 S?r{m`:S}҈|xD2PL(g 3^ $?ύg-ͽ1Ņ/•e#1P[2>"xD)'.'1-CxBF6[+Z00-ӁHiRpbSsWY?~>%-\EL3X`yt4LeW~OX`XCmN9A6XNQh_҈~uVܰytIT\`oQ98Έ}2MA߷Ɠ D7se\wfT a8Xj䌙ᜡ{HwQJo!=j+_"hۺ_V Y KQ;"l#Ix@pbëglPW_& }Sbn}}2T?SrP*R=&B$=e+ ^1eu=v4Lv$\.[8ǓjZd .>jM`TG BtyvZ G1 Z!3Q .6?76+얀svR#bcf;f|.E H Ҹ0-FY+Áx`;s+Rb͔Y K6#b z"u#{N>hql d4 mÿ1q cK``CP5}Or;r|L,Ů)wA@ 7%ݭۍVQqO3pmY[1{]*V|V6H!cXG;P(u_1~u/p{:?E_72o Z6'Q/a$'G͇MKv%rcmNč0AS HG :O>Iɯ;$3L',1 ͜'񌻪z:dd)#`"H7Hc:z=i`lzeX]㔔dq9: 20@vs#z2K;b7 W:4)I"( ӿ W3ӗ ʈx)1؂xNtTg_I>fGyZx4n[^>߃a{_w:!z?wyּ̤̆ ic%ui@6c(c3P*N4T)2 ]Gul^l/4+|ML~b^+020H g*irI<pcmG>.t_N,Sggw M0ƛi6.bW_ޛl611/4`{3V`@CH\PX@.hm1ؘ fBwiБi}XegUxwNG&`_!xS)Chh l GAzվwYHg] AUU8ĴJ{o.ʷY80I6! qIraL$م,ReބB`\ b ev&zWoV|2=w=uհ|~L-T>| OB20ms.wx]}Pԙ.]/3٣M M#b P6C` ch dNvCi^HbxL A0>5v =|-RA] b{KDȰQr m8闫ں~T;@`*|rȰ,GiG?+FKwb'ǏEP ЭY3 E =45! 7VM ;W;í7oWw[lEu#?Hxc}ڌ|u"`A?  MHo,n߄q庆=eGzXGK[JB2U`4+F dܯLX7?G}r[z)Tg. ʹS'Ck$pSs, 7=R^urKfͺ@eѱf|;\TZǑLצ|'- Jx G3JoTgM{9 Ohz_=Y H`ij%.nh_XJD5[lPEڃC=|xy]yOowNS;i[gt|]rx.~(:* yW]^oUJbZQ<|,kwzݣ@8ӓMlcY/N_:J=%\%gF#bCAeu\}qfOiP\®pgAxOZ'mb~bB›w{P6 ω3Cj!RG #1p'zՇeV@Q΍phy߁l>!K{Х,|pIEEzdƫZ3ƕ;~wTʬKLc'S qe|:>ߏ`@9~/Ѥ<uȜ TTy_wU$/`?}b8#9T9J׎3giUY֊iWb{Qzc=:ǣ'@r`ѹYrC$(nNTZ{2ZPs6Ny-FYlnZ BOOѸDISCBrN`I3sļjM_ @ِFvq\\` zwt 23RW"''d 08}~ k 벋_/T}"3FSv^b@W o5BZ,_;C״BI{Qϫ`ŎSz5˿V. \յ8LB+X'LC;|ҠV{0T -VA`.7D_KBtNDZiG7_^Kj 01zcrnٸk<7-~9}6g>2؞EGz Mi4mCaiml5BPަ JOL: FVzۍ ϰ?#քiDuφ` .ؽڳq … ]ЙGH=0AHz,:S'@&HȞ]˜@7#tm:mÎTԼ;'ɣk_mqK{C,?_$bQԝU ޮ#i`HԿW|j@6!gУAO){f*q?S}m`2W;w:;D!dvp[>G\e︞pvU*'QAԾZ @bL @;YWN_{Ҁ$Hpɍ%jMחD/3s5 jfC,8!DMG#(r|2JYYOT섽 0-ϐLu Z@4-t=i@}k2=;煕.Eb=( Nݿ6j\͔ɧ1)@D 5]fb |i8,IljNbf. FШP(4qyG]خNT|N˂!2 򸢾ZF(BtߝtY޷ 1ѱW^sxu`u>[C&ij8ӳ&=R(@,') sG3AdX (Z BAY7V T6DYWNaPUH  Hs" (+SccOs[_άs##TWRhv`4\%N8Л* 6SB 2٢n,]Q ZeEo~թ Ʃ-x|^ '{tl(<KMuC36sp>@|x;,sRs8@Uo/qw[HY/ln@7P`?pTh.VpOA.b\0aRd\@Ye)B)Dr F imnIFο |bfv0.帗HќރӬD2@WU95ҷSPȾ`&_/wgH p!M?~rE.@,UX|K[8@u_3\P[,/q)_6zyA N%c HcZWGҢ&Ƅٗ?z6ډ}^Wux4ֳ0,7DPoV&+O࢕i Z"ôI5DE<ʸ;f2jq/p/_ ![}JS]hМ?260rv/=01 MX[J|mNOxc1Fu'y_VlLUîM6ḥo 4v;@hef*Yqz#7%k*<8>;"a j~׹iB#Qg#s{~ӐwOŹ !v;DÞJ"@Сn!>Q4岰z!wLr!.yuk))?_~ݷ+uS޼H=Ѩ-oΐ|cb!8;0*:z=Fk-6nl}FCc?غO #~RT&lQf]O=hocM8qKcF2Crf>[o;: JM.rв $s'c`j |Uidfr6?{5=ХC4r3EQ4^$]zE!]@Dx pWl05oAoPa]1UCFV /C>KZ1Bvu.Cw EBHIlgm3f -}#7CN~lv:襗fqI lC?yXl縠ƎЊgr6o2V%u tҤ8vr2?fxtʴHy0 ϤfNYu*ղ[.c 1!EEAHayNm) Sb-# `,GƛǨ! `+y ^^Cw, xkN*Ş?9p~|N0!golz]G9MGINTG`Z.PRkV`X&_gZt` muR7 .N}Peͦ(4Ck<b*U`hl %'(}dNdf) T4a~qox_8S\9ң`nOjcZkx(c7&J~3(fDu^0;L*UfQNH%Q{?d,gh#T?̉wyz6p YEչ[N^1P>U3@j9mCn)I8#Wtg=?߽8R6\jksK:'BFUX Dۉk(ɀS)a`V9DUDmdϚ&e/< {I#{~/d?c_\*H$I)ȄA .B+ @KIZ0N?HHi7څjDjqa8,_ƻt&nh@YhVoy|rwmO=$@*TxDq8(]w1GdK(c븎6hJEu(SYTv0@Ϝ*ܩWtqIZmο}'n% <]S(H*|'ʉ!WDzc4'fV@Gy:dsu];;e8o%7wS1jCx>b0gjJEp#>9*l}b*y&S *(i؀e>rRhJ1 Ƥ4IJS2A^u-YT)SDDDZ*vXNwv4N??7=B(1nˑܼ"ENv6n ibuSXBSf$hZSwxy/c M0x e!3@ A;jw"P`v[%3XywSf'?Z-F4'LU'K,U8uF3 .% / DSx^#B1DQ+1~} _A2#HK2?ݭ_ޓ[Z,`*XP<{j:|좶}W]1emI(5H|lPm> i>Xr2F#ާcXfg''D6{TAƄq()I?ɀrgBS59*?m =Z{f: ;o6Z5 v6}U|//g{<߶ S\#0+wߺLjzYʷWJ m0=ˠj}gB茖@&A~A@JSx/sUKkg]wa1}g97~Lp(P$ 7i'؃wmL(ѥ!F/gE ΋3:(nVHk)m\M[Z\7=7HߏHƬ~8¸+s:ش tRdF pI^r@$y rN{QAQ +Wnٱc6MJeOS<ϯ"1kn9?R'Rt3*r(S ,mv4.JyU?.x" SliPޟn?|Qc]}<Eӗt&7s$`[(M&B1?uG@cJƿ͡yZ w_/ ETPqH΀S ch`M"dP kZ?ebɘnc}X۷VeC޽"AlMeXWz4VR)M4lf`UHD:g"RRtV`sEvUK9QRCL JٲРXc'n.%q1|'amY^@'#T2mk7m9#k+?P=_-o\zGuB,σ.́%{]|c*&YE!ֻJidM)U323EK:gLy(QL4%ZjYP U@clLBRPJi!,EDLH)Ba`bDGnVD4{+&@1E"B BHZ;*̧^?^3[P,ɯWQ LO+Q5*SgZ û:&oiz4uLRLExcfĔR*I b*b6UhQےIZĖ& a'\<# aMȘnw{g jסYj K3cSDc$TKY!?x02ޜ"CM1D166HcmoemSDt` 411HhbbhYAT.KvY jsVþ!V_9~~~Gn]WAHf~m$`FGYbxk,jGZѤ1?Nn8Pbl»K~an!5:P&dCe+0N~v׃=tE1TʦHz=l=*(`'5Ԅ I]`vT(Ĭ:˜#/4Tc-x~&t͌vO})E6ItqJH09DžnlRgJ`/Ga;c-z#^)] uuKXNlrp?KQEA)DO P`"E:w-:cJՈNvH?\ޢY.÷Cu774o +Sw:-cDDSZҎk]vpo䩎=*dAW$3Y'j/4NeѭqzB rjR$|%( 0 l7'BSskM["qcBvhcb -fT*cp\}P\)P;;3^95TZXZ8/VQQ^2)yހč.xTb,~hPD03, "mœ+٪}3<)O4~io>%}e*3\f(tމ&`3?i E#,].O#oFDc i# nyke57JYz/v8 ).`5*:i|]Kf y L3T(}F4YS+>H-+ny!d(DPeg6SJx<_5rZV.HڜT#h@&w}oFN"JPM Cz|6PKDuwnQ.ϲfKȉޥ.SK`ZJhX)oGn e0Ir" =˸ :o3Šyk*,)p8H.Dt,G^yQg+JEm-7:)Rsl415sqϑ}DL TF&>]+Qauخ7}YXum:ncZ,ם/^8MܷHcbBi #= # L9ͷyq7b.XU}-[&s_]fYo&UIrNLo#k;޸\*iT荍jwn2WMm F`ІgyrT{ y"|lJ /4rCcBY_Aor3>kmJ=}U|e}7*7fS~dtթo~Ib7V~zcHFrc^YB$\wf=V_8*#Xa}QE+v`W ;wC"B )@9LJ1P<i)k~'_oO;Oa,ya*16*F";RIhΧcmDCH :A73e~HlW^^)I74hCڛݙ Y4r?:QɵF5#ج,g;<! J6w@̮MT"dL:ha9wC$-q5/apW0_4b2&hx% VTt6Q=D_ _Ly;q`ZI)rb a+5 僺LcۨwbAWL<]ȭlzp_2DVu=;]Gvm)`-=Bv?Yh8 `KB)E}i!Cdr@f9buŎk綮[D|}L Eƌք--:ʠCj6,m..EҼ\~n~hF}9> -#@Pz% lChМ&=uu/յiLΛYY}of2qn8Ek'Qzб,N"T1B7 rh `X2ü oТ ? : 49 : i/'N~o閱)iEmЌE2禳BU -Ү 始i1oՈ)ϻzPcDž+(\uJp]@aLG%?~ʧFX{Ɉ-xbѬ@bĹ>ۘ[\ ua#o~u/VL-LqSޱ<s ?Ny&t=|%io ߏaz\,8 Bb YU1g) 6S3$%yt1GX?f'u%h#gjQOmiu(@E(1F|,E旨.2z7UD"N=y #:`'Fqªk>:@Y^M}PS0N1/.߂tOӠ\wi1ay&OTfLlHT?/fZ >TAmXޥRއP?5x^?ffm{M\gF1_ &mBVn;B<nbUe3` ELлw罁̀"Ys9x"8Fh)|\PU]%ho5rMwy|Ϸ39+?z%WqhŦ/Q{MD$y Go~]o;TAvD&+3峷 O@'(hNkd"j|Ũt/b~bS,i3=K`C14) c٨&s7 PiߥHPВv5mScn.۶|}]?،4JS AȞUg%ޛG<$.?VhKN`{E# ے0{n&<"?xvgrJخ\[s[qT$ݫgl/~H[ Vg3܊Y 6N\,Oo;}gjHWd=˦ Q-lD.f07/( C]<x+& `HVha> F*=@?$RRƂYIhBL$Gд& Z6aOXm ergp W;AGΕdFѵ[Bۚ =Sœ_1D7LBE6ePܢ.Űue9qp3NT):7q?Wt: x:kJٍ"A=.cjgSP54`G;T57r2K ,gݪ'c#\,I.ڈCl]ɋ%IĀFtQ_d<շń>zU{$&}d ?1{nF\^|4%"%r}e zkk>9THɩxb !fF-o?nH/2 #C֥ (cG Rl".EvEIQۜ{T)>7mRN.S+'Bo1W&[wN7MW: WvX C#߱nO 5{bV4K\LM :3yCdVAP9Jm|S:7#Mo;ttF{oW}|;t >Wrd 1 r:p>0nX@!SVԹ> GüTt@xdoO&ZZ//V/M,][%yAFT˿3U]mGPǻ2cm,$iS.ZIZGl1~Tn\1\Rjpp^ iwvJaӗ|~1 }A^pMT"-"x<+|'iHZ>886A xTd(IBD< y޹]_f"ZSJ@#OFZ㪃IȥY)UuRZ h=rĜXݬVxIr/xlբ{#4V?.F1LԹ_GE9@ ϼy5۴FzN7N"@btՌ>Ih'6{4/{$(Bk] YmvzJ*BwpAOȩ"(<|={VݬOm; vAON m~{v UBFWvi5#$]l_':Cr/*ǎi`Z#i1HHZeQ<_!;!CD-λt=z ij֔4b0mha6.@dȋ'q&'I!NRImUJp!NiL)5)&r"m9%&1tnƱ}/ӴO+^ I!W^k,ڒB^nkx9h(a2N?@ !~AGDV`2{:Vر_{eqtk]zt <mwsIo~)կ)ҼWv?{2ۯEAQXkNJҩAMu/+@(@T"ny)?\hPfs =fq?2m+Uu 1Te\ _ oAMmUV3aPafTN&0PGǀ鵯;JrE"e^O`PS%ueeGyBz)`zx?sSr.7CR(3soAPYu/j/lҴ\^ҭzȋ*&Ea[=، َ.T9'ӣ18G54c'̵Chc j*Ae=>ɊPo/P}`*CcMw>7wn.5c!?^1VzṀ->5b3+-D:Md<4O.0lC}lnP9>5 -}x.0&]q^]7xqT!Y'yYZœ Н~G3tp6h}j>NAb ,[t~xA`b,CDif%`cÂ4>Gs||<di.˳xpP/ bl }ծO{]W)4Ôos Y>r Z1Y1?a>%X> O=0>:L@ͶmؗmM@O`PF'%4_(*@3*RmE4:?#7S#jTOH#5q 7㕝kWX Vc>4OT=ؼ9"( _>liH3Wc\=G@ jU @p8R|~ȕX9vѝPm.IR|݇/n9jy;PY q1Qp%QncIpW$TO%Z"-~ ; kR,jP!NyT{ @JtWp35V~X!<5aZʏR!E,8XUS*$$ FbnKɺ$c ۸0ߞ[:VOdy= &hgpۣVYUKjg$U>_@J]9Bb¡zDI7< Ch0Wx3g(cE WFxq8MUKsOIX7lX)A akq9,ܲ`TuGc>+zڐWrlĘڵڶx`^ oܒCEu9w$@*pײ]`+o *wR=1O~vj\`-Ukc'k÷PٿN^3:Y1ǽrbȉf0fQjBhmþۆ3].[8bՈԱ!-IjNwS (Kr8(?'$.՞vIJH 4t>`ջ@1[QYbW]YϺ6^;E\,#)HRݡ`$uI 0|))hŴVd'59ެ/$ f.@Ĥ[rDt0N#`´|,gGvJ.FN]v%cL\AUC2ݰqUo C$H}ES89ɿirR i/EW6#oek1vr<dJ4{a< )Tgx1VGe`yaūj\eSMlv/ͲT6XHyD~ NN𘿲S)( 6F5َ-qu&N-..6A>ص^u C sO'C!Rn{ڣ[fwU4^$;8h?SWS;6)oTd_Xفc{H|< #]~90_J^t+h");E<9,'9 T[tr6]{#sv-@yfɯ3(ꈔ˖.GJ*u5Fɦ{dPWARgv? jq7$r+!w݌wx杄~Z~,zk#[֒h3E> or+He:/rF!Q\ )+B8ekĦ4Xlc[ֶh&bs 4 -З*`q6ѼoA ,s7 vڹtW24\C"w'yExP*N u%m,kppk#s@[7&McnxX}7瑱9P*1^\ "f1e8y}dI/1+u57?27ᬒAU*%LW0D&:SXKI,=sϱO.3m0;Jɤ_˥H ,tԱh0=vprUvczb)pIgZ C5&&eRc{rlT0ԝJD^omNTZ';XRFL0l`c+irt^?, mULdP} 逳 tp. Qpcl8qo j2P\%<)(ϞZLb;ɹ)д<i10ΰ=}bgZEo`g:,pIv]^伃J`@J4O0nqhW. Q^{,{ͭCH/j>/Vj=Ήo*ǖ"ivJ"gZ5q?'|ZxR-PI4 &&!5;Y&`"@.k>P3J:k>sܤTU:r1-@(nhgmgy| k0W_4r`i,L$f,Fq%:|i8N H?𼇷ݳ]1ƙח0}<ѦhHΘRva1 3NOnIh4$ؘi I6`i ,绬B%hB5.2CUZ Zvïd/EظlEqWb)kPz.Ϫ:r2KL!u]221wA 9Rb'&Dr@Tlh $ OHV%Ej0P 4LL`H&+,+dA]UA$4 +]wrgڶHWGks6g34/bIn=<:w 6[l䭼c!JҦ ^:(7/x._}sl=yb徭K㻆냣S/5q1D"P5M3sd:%J`ގ/ב1.:Ǻys';ذu۠BqxeݝB"5ިJ2F~`~Ǝc|3D9(qigBߩyR>2bd*Rq`u9 0sLp&t\JD3ҩ?Iw$Qyvw|8h~ t`=3^)_;rTcs+p902-$_Im-NeAшV*B+wo|ɾx6kqit5p^kp^4Td U=.m[ڛi9 J'#FK%\WF0Olgʞ2a-@ Cap~P]X,{1&3N,Wƥ|wz LxEEw?̷M23->{ulF,":FmH7 g O=f.'P1{N~EmݴQ Yrgf6)0t=l<3œ9MF+uM=.m,~kj^:)7j10A3層6;)ݩo"[RP{uG8Uw=Ajtm$?8P6dlo8GBB}aP1 YY dM~]1ˆUA~ 9V. φ^:W7]~YZJU[&>X-j`R۹C'{3nQ *tpjW]VяdEx1>4B4ܢv"Aja}}|]}Į(=L kG1j~Ӵ59+o,;7&vuCjg׼YC5H7\ G_ 𔴼}.BvL+|.{u#qU:e6^d£K?al$+% Q8pKFρ Ɠ |?m \ 7vDT:J(:_yI5E юOX ҭ_qZޤցGR|0Onʛ7gmXj .֐D%bav~@Gy E2CDx_~) ]=cI溑\62&l+<׾/6 g ğ_CC ^ הt@) :Δ̫JT%SdsHYD_H8lNw6Ơ\Z׾n`]z~L^1$1^mڢ#zAؓO8- Y=]/hw(G [)o yp WW^/=j uql _Lؿ*`gIK~5}MUaan!q/[wi{ à*=< ^CG 6cjqLVo EoJGr%voTO <_߶)\1V~]Pf @ɃO j ZlK8f:Z]$> 1 #:Qsw/(>_X\M0ŠdY᎟@r)&K1AHl,f k??[]j: ,\KF}3{ҫj֤8wQ3EpWbک3xk/ ̕{Ώ]{Y/d"򋋃ZDkˉ8DBSn\[;* iBJլUUl~_gЏ%GM6*b b,矤|pʛ 835iɧr>7f Lb<=݋AIQT^W~=Lژ s>h/vDy oQ ?`deEAߔTwi&:@ܳ+&f>B,A帚qզհua"btwvȕW)ķsax(JSN F+ }/^E2iʓ11,k?X}!9lUg(L ݔUF{ݲ>{7ϲtc P}^r&%Br:OǔuSzmm#-닸0bc zoȆh@i A\Ǯ|.%Y܄]:)Sd8FLFϬӷ\MNZ^I!X6,'J|GW$g;!t#ۈi,f#^qEcso~ۭV|%no7$;wj,&)!/fmOj +qʰ%£4PWAXp;YLʹ ѩɟFu-dgC|ޘ!͗#"JsDTH~Ci/\o2$>Xv\Sigd܉Ս;/4B7-R&詯 25ܿn+%[{x>L6j #a(.κۙbOiӰ6⡼CnE~-3>a і;ItbM+u(~.Ihxd67W"^4˴, DW]l JWT_8YsDяrQ徸}6< f' [F ,"jh#eր*Il;E`?eOvɠBPTK 2r?*)Ftjui \#̰V\Z C/mdTWltGLg5X͹\nVwP ʻ#q匣7^l%*Y`6V-MQB |H'v[~.!YKoևVʆZhA&Df D;jUj&W<5 {(=jbm(KQ"UzK){>3nq' s- WiTk,gh*+C4e_]JnQQS[c9Ty*o`dÕHeyTrAY՞7{c׎DE([zv32 95Jv"DiqhgTCO/*O@s/Z)_@Yf)9YKoc䒽 \,sщ '37Dg!)u cTDzleM 'n6qx^U! hdƂQ u&I|dm)व6]r'ruSJo"$k\UTB'ū>p3h̊dQsɵ0_cr9Tr '(s9Q65bxė/)+B&肋qotg'aj2u .*u(]*帏X!JU{&b涁uq[ ̜.B ͔82=xk,䓾u<\̎^5E;Kgw9=]D]&_l.̐=4xx/P KR;<-yo({HF1k\>tK/ĂQs):"LWM`f*]MN>۪ "/ sHq 6K7Y*7_*߄ q#9 Ù w.zS,wKt OfE`]&b&QB6 im#R?$Mk:7זzƎUpZX[o '[+ Σl `s3X/w>g *U-GܕHPM VueV2rD?j1Qtm~i>DZ>‚7-\Ċ;wK4_ B7OLSk:[I.@oGV7UВOQ_;[.X% yB`Q\HܧZ?] &:1&a5OK?Ylx,ZB?eZeɄ{j:l3^@RTukg-0њTjS7 ROpʡl!A^viw:9/ /Np _d6JJ\&.{"Tiߠ Pgl9ϝ3Nr 5Z0vYOȆb¢5s77.M͋g z go͒:ɏp9Q`Iώ0 GlP(. l}N“|SBYAMs083+k]!y ;/mbi.S 3Rfu(ƊdfH |z&>Bf+|+q )wb=) pK(E<3J$7_G%c42ΎLtd-cA>9gu ɂ,_&(Tq-j8}uvIxI NFP `D/0Ppm~k=c{E'Dz*т:>;~bH3ȢdEGX[e˗먼7!6Ɯe7F$/0%o{ؽ#-n-D c?4{K|eQj Ś{٢S3&ƒ:%> ?)(Y^C[gRnfn;^S"c;I;Ax?ƮDn~ 4Hp*vP͘LGmZ.똹WēJ5OQ^L?TmHYCX!kSX6X+=%!!7.&8cWOurƹupO7nTg볙)$of.kp5Xot&fH Sr;1=/ӂW'1+8>E=cJu+p5nIJFMqy;պ{#r,桄)u_)X-X~Esbؙ:Y%c{1.~#&Rتo:xXe֔zhLݡ)5y_ֽLYKt4X#{QIoH)L&bbZ'+5v{:ʛy%S钥Rc~:4^0ҦGyu@cqGjݸh\1K-z=h@p|b% NRq+I\HG6Qׁ¦ z#{,3pxaVī^e'R<5w\IבEvÀt푾K[yPAkH>4]uԧeLi zA[bp2݀2*!s-ZI)P#ą;L_lH8lf~q=|!O؅.1y>C;1)R-&fg*Q &7=W1g:0]6 7QDDNgl\,fq ihgQ.ٶ^iԷH -iŝ(u]u/B2g|#j˅Xz;὿Of(ǎ0f(j!lm@Hn%͌Fɟztvlv;;@E"Wi(i{dr_D}z~|=+2vy$#w0M{Bwr~6p}Een5 6᷂^ whI w{$}_ĹF >&P~/qF7i2mA5;T9S˾T}+W{<;쭾PSu5VOIի& {".޽׾%ϯ ;q]xQOT`( 0>hO%"!$U4ŸjkWAbQ%~ ӑ*{:Eu2ޯ KGy-#m}as{o!3mdCq2:tGH`BblCMHITS{RD(ILbare@?HښVN4J+g(~ŝYF/ mB12j L$o2LmD7$OX" d69Q8sM;)w)$STu &m&48p1'"_cy)$E(Ud%!jJFM!4@D `A1񒨦hjv[ŅI[ `E,_D!1قdAXKÄ-JϵA.oI##ܮeL{$|j:{Q}/tM-PkG<3C~1 9*x*_OU?> yK""X`lO{Wϼ3΄By65v\OɊ~$ 1&D$1`ȯR"gU:䀝P`Lf [$/~z6h- z+Kw8k;9[}MF& f3҂?YKU"hnN$@,T6w|JWkv:9z#*!ضkh!G Oԍ=p k1&QK&5* 4@b/_AۖDALZ^5l2+*UP`"<$VlCIQLNPw`y?x* _qk% hE|q(}t_; 5wҧ %g!t): .%soXGL_oTzLK0eqrE٘RfDUypxc1s `!cyW>GRUMs{K&%*`{pGN70ٰ Llnӓ_ d1}jdiJ{?NtzsQ? ZBE5ጏWHMIP޾ mI|h%gx"+1 Gcws VEp2PVq`ڝ3șhRd)#- 脟c+OcwO[؅.6_L@ Ӆ-+qOiIR;N>%jup s<; AGGC/O ,N_hl$y=IzD?CoZ GHU5k+嵼bC8ne"<ж֚LW(m´$xhҳ`[O9S|K~[w6䋰 'tқi>`qjZ ڽvz|p<8*)3z;G28X]N=LŀC1X'MgDd p+mml) >՜\l]Ju\b\xXKxk>И'%ўC&S/-TʠdW&.8.;S}{/?z./%rd06\ b @ievmVlnx|Oise^5NmFNM1t`|@^T ڙRY1^Ժa4QloF- N`I4Pb%fh{obYXE.udӿBt;LBo?2|jǚFIŗN"I YiT5iy1pvwo/8o51d,؛BLh Cl@1癋B!&e%ci&!6 v(Ζ3 pؙ) +q74"lr 'ơH)#$b LrYNcǨ?Y"T<q*-r1!4 M!$&;8c"c0]R]7݈{ vv;t-Ͽ3{9?7zxm6!1^8IH@={G|nKhT{M fWxucޮf0X_ԺP}ؤ4&p%Ac]/wx? {`"ZPЙ2g83|fÏq}75O̭qU5K{ ]gcFe=tf{[so{N}a!/>s12Uh($2fxN#Cv, yKqt;>n9KOA_rט"+Hs&[(_ޞ.~ zڥ\}n\?J]a치?}4/=jK ~>Osg;w[kɟFWbI1>} "T ;<}j"&gm]N-Aj%62C,P>ܮ31},eyL8̙P/6jm)~*;pG˃ѡ|$WXYŸ%;P~U3f>v5V%^ܑX'QE*quSGkQNu#|tȚ0tK U _D %8(!*'.~vSQiϸO.J>e%oֳI QQq{Et.>s6 Fکp{p xr$l7530/d{ؗf */(JlŵLOUHxH3osPaD/ٌ =LVr.^ډM zXȎ PyT3EBZ7oug*So}XM Su{i+Wf\Ȏ$I3wZlIﶉf>P:XE"Lv؁֩P=\H2߈QAHw׭t˷&ƺp`\`qR8yZh$,!7>=$UxH%A /4J7'kºʝ*V=֩h!BhvbM"q q>K) [D3B!o[` .0\[kF63✜ӆ]h>1T1[5q3U{(ó[jcY%n]*uWs#v>i_'F1 r9 1ȪG Qod(F @(ej*_}w ΞνY7/ OGe/_/LAMrh޼Ϩg>?.jr9h !C IHyY43&؍J^T(^P 6\nl+T<؍a/_K^`"\ 6ߎC. h"YseѪ7U@Õ]n,%u/XUIF1wuщ8햺l'x5mv9yK ݞ`ԓ9Pԕ5dRE9g$xi>Weh)N=SED9/`uJBw5q:L<,M r΁vq [gUtE%]rnq@X)u1X8z0Hﳘv [Aj|sqr ʛðK .;MnBo*1^24|tGu)N; nw-FzHr[DO9t ˗ q iDRc/aIu=k^̈́#Ar*ݟ7ux=T2pl%V֚mB7a]{3Bc2S1rg?~/7r P7!ATO׎~ʉk7э;HilsUy*l :!ݠӛwpb{π/Gdl<Λ:r' Ct},*j :Ijȡ I=N%4;&Fa koۉL Ϛc5uLق1^YRMCpJTH~}.MR/*^lE+i *Bct + 2bS0WbiB'q$0F'Pm+)H:`CD)aD5<󩦘rdBa))M3lCicBl$6Q 8Hjh$O3H&iHp<'9t} jjH vշ<ҧA0a Ii h[c*{Prmd|IʣEs???B~(x xLCuoJŒ|,~;ʐXmP0 0BS#ȁons{ZkSBXO+s{uKnS.m1[:]:-[1a&;t9s-pBy,p!T@l]&\&3y W3Ql{jG0@ b=i(Ƹ{'JJa awÈJbG ? s[[J(VBQCnkQ罹Rb衎b41E$mxz͑qlg eZi2kB^oG4`Od.|iq.7Aȟo'm7z>ѠsHp}uNU7PE|b'VGv FL`vZ1߅{:IXJ|i=>B l~XMEeu`LQ&75dP VV"kGBC%jS;{ԘƂ>&&r8^JiN `z>H>FǯqAFM՘+6憊zn{n)",nCN~ʤ84L;4-8VK"K۵, i= N}o7ˏ )?lw g@qyMI`_=1xM Ġ;c0J$12Ihl4j .'6( Sѳ!q=O{]z_/hʔWz5eu/)ru0#w]H9Xؕ).[pNS+D^0_w5!MPVnѨ/ҽG-9c7 Vo]|cy'2kٹaSqSK8BxI&Kd5+Fa %ԚָH`U/[r盎)$UO2ۗ1gjRe;Fi:'1G4.oi (=ȫ`bz?$4X.D"=Ƕ8*=ZE*L0EKҹuNH;lyOnU FXW4AF*cnFy3ٝ#~oY%w{To8B-z?`N8671h"3)z=0dWFrHDTCx(i AqULQjaUWO*%~ 7H 0ļ`4C*IAe_Uvz,'َOha4z% .]5_w[s۪@{iZRWS!!Ǡd?g,>SwHC4MM૬U˄PKOR^Go aBtkgqVU}"ILA{=<jOG!=-yomvG[c -#RI0`q X8ݳz>~0Ho7:?b1%0GDAB?*⧁ZM2Bc mE>é61 -v9$0KP}p [)_YS>:6< M~P0iB7$]݃ߖk?Oۭ}Hvծ Thiu),o^[1|^p"  #h* zkLqF͝mzqVqX#2JH6в(}[5N´՜hdy9UզNk{`e`fr*`_leb6BI%т2W)(pFqΠ1ڜ+}M•np{vx=rubKW,ܺ/f[́~3 R`3 cTe%&WKawh߳<~u$9ONOqv/vЪAh|Z+z]pVzQE'')cjH1{=v5V8, ) V?ch6/.0ߺ wn2 ?~bOGʂ?\d i\5e.+Kx8ŵeU jYw=&DVnNi[ϗY:0VQy+ɳ($f' )mIw JHT7䀼 pQvtX5tG$ hN@߃b=7ݎvM s1 lYah .Im*X=& fcY8A>z y*r.0ҙ @;P1yk q=+Ag#2hR~m m|â~AqE/VlR,MCfh Ӫi\U]Vy(֜-!S@̶N^FށV~ZPG7jtIȑAPoSQbǖ)|a׷kV"KHտZ,nZȭ 9- i* 4ntho`~U {YoCpsűD6 5Ng:z85))j]b38+$ch&9 .a))Bl3NM"S@guzC^)Q؅De0d ËS ~`h0|JpgbUX[l.^W{*AXj]ݲoMwhUWX\AKO=սDo $t/{/ӳ;}c@p`^ŘwWMhLD{4Qt~\ѩz12^nB:lY4HMAtBgb9z]nt:W|[רjAXvSNq٦kfKmoEy=iȗք gc]6{xqqe_.[k "P׀,OZקpLԇ MW &[;.'[y]U&_C0]tbs^賓!_}ȯ7º z mt}c*'RM {͘Ȓ`Ĺ-oՒٷo~}|0cM9.B`!cK @ B'r*ƺlC EKIHp% z E&ߙ8GA"U%'`6q] Ċ4C ^KQ^SA;@hD11CnѤRB M$6ɱh֒@8hS3$2 Csab WJ4ډ!$ιrt2uU&0=@V)ā cCcBp)"I&40 }mlBc  yv 1m436ElHH cϲATZU̦.a/ #7-G ฑ$1q# X 0\'ֲ ={o-Ƒ]%4i(FDClmK_pc"y@`NDW戾0A49Q@¥H! 1P!""ާJn 6L #71,}A[VpBxtccEԻ3>ZIwWjaJeFMu0٤ZhB~FK+f&㭶5 rгW; _-ȣ&ۇJ * B-jm8=;ɑHL@$,dQ¦1Bj.iY`6_cX.2rWe}Kj.l0TehL/da̠hc cb2@c.eTBJ/!}KQʐ }gn.vLx0XͰ(J+ \֧Sܒf?D>([  #! kQFGeۈt#1M#R ~__}Dg&Bu6^D"RYBlL\LAi=JlcjvqXT& ֳ\r2 -P CohaZ,|յ B޵QWȼ}fZ0?M q-_#L5ƺǬWH-owqZNQ^N>|44(mc'2PAP<*n:sr t듮/ةA\㭔 kKҚwM(z 37w0gT'%u=e4rCq񕚠 k\;dqs;U pK _e.a&_P C;3Fy؏ AUO'JƵU!2t9_Pf^A)ˬe,,{yj0#Dߧ]2r>f@7I3Zy,) _Zeh ]?͜W\F&F-)1 p&?KܨaHR|" >,xUȍlG"/Ih#@H7W(`։FN=YE]&lӬK\(6U\d%u!r*w: k~#t,:`R{,>Hn/`K;2mxsE6:A#ڶBPЇV1'KK>`r" ifMj:<3̱I9R<)1CR~Sa׮Kk~M׉k=>_6`DzR4@ &f,"-~[ 22DaL _6dF>%f.'jO+Ou(C&7|G `|ڂvmԖ.\xDa\=+:b:(NvU*;,t@xcW o3弌LKv,moέ6q. N[{\}^K|o&t)7nۣ3Yܟ;JRgQri̶l%BRT 6= Mjϭjˍ BY]SSհ ՟pQnfWrsc4pqSvl=jƂ',<#QQNȔkN@4"Ǯ U#VJ@ɦ00%Ӥ 9~oq{sc=VLXElR5±.N5ױ2Gǃ3-|7k8J* #+vKڼ sDPѝ LhtTѪ6>+Qc|ڈˌ3Du[af9{]f\qz?Z*c ~n#>HH;r!k q.@zI.mIYVЌҸ|'uܔ*1&ZwNy)yR~u e9.sr^`8[)>nW^=佋xL_VۈпZ8a 8@\4vQۼ:ÆnPaٙF/Z\y giKGVmڌ}<$ypዠ#MymvwDcoO6ogEX8p; yo#t>grFQRm6 @P@B`(IBa#$q"b q/.̛m PH#Rgt15:NGΪd}6@V&ϙ5` gw3~.oe?N>/S56dtx "IwP/Sj(pmICm@?аW 0/JVi?cGPfTǚ#bdt=% ‚X]L* 8N\{/| WIqBZE23->Kew1T4}Ww\!aLJIi(8i3)ZܒM `$i"LBbćo{fGk;Y{i 5vAAs3iA*L4` MD$Hm&soeS; '{/1Á#ö}o`9?/yX?ju_ǧgw/oQ9K5R$K5YGi74A <#N@]bOa_DYW\۝^xΤ><K׳d^cH"e(]e[M  ֢CQ&H:f7%F1XA~@Au&<Sc-jzihr=gk[^g2FJa70jN1;%ы$̽CB^,W}o@̡FFQ*h/F7Xsh4o=di4l-Z: zTȓOP,l 2:fB& "z#^-UN侱@3ek0hgÉ&4U'PrltM\埸a3 pSق(=I@zqG!Jh8~<{6^J[Q" ;c w~Vx^֩y|Q_{/GL%&&DԅXY mcɪu5׍tG1HˮQaDc5#罽bRy5&[d0+4͐F;rG29酱7$$8ۤhtl,kPmѶN zI9l1*Ӯȫ\ǐr2AyuÒ5vڥhpU8YgiZIBgBZ(%QO<~3+-lx4#3Dֵ7 PjVu{w72nשNKҸq=)Kzt. U (^F:ŝ U%I&rzxі6ƒHlFj+?_% #Z}UYʣrԎp995@z sxTetQe}FCd@^wJ+2BgAd(=VB4B9cقFqe)!+e)C9KѤq8טz2:CPٖ8 NBI改D6q:$LϨ#|UjUKmQ+l2G};)c~oGڄ2L%kܘ`Wڱ 6t!]P(VU;G ů"]D8r2ET.U\wzJ, fkRrgG \rnhG؞9* ɮh|$%;*aH5d9oi ^N3'ܕah~ube-Aڏp>`tx%`@c7,ҪՑ2_2l?b^׆!B!%!"sv a*X:)LW/@9,{*;6*QS!Ry aqV?E(|/D$/GW-_2J{BlЃ>NyD 6P)   "L4Zr Yg a1_bPynPuL_Lier='f/ԚձJZQwU*оF>4-n~.FvMJ>sD"E<`RP)GK6Aўz:@ ^7"#>8I9pLL=FЯNnT.Jy i:>WB`SEvg!VNlC`mSJA*ŀ<ashq(YEs)*0 'U#%uWT@ 530T@ʍ' Zm,N)YSS n/$.MT|ve؉͑sܔ քHEs&d00Iם>G6+4~1VnvN֓`">Wct䗆e(H𓛷"r- mbߝPTTmJ0Ia {ޗ4xGRv$$٫nE+ey-?l]<OPтdbT]_㈦$b[$PEc6?8!#<.j I]/c*$E@'y$F}!.%xЖSVAuŠ(Qָ+E>Ot 0rt+Z/FΌ^_USz|F݋tkF}1aWĆ$]o @ nq8hWw,MO>]w_c\},/r}^ ,Dfjo. Y;Dm9G.iQ`3N;|7aJyYX#Kpu8ワ=Ko"7K'A/pb\ ƾN&Q 閝^pos=!X4 w `9g˶PM(%4zZ[4p6j6N &vH# gbj6Ќ#yE<Nwn"U= =!m y9e2F;v@!(n %ʽ^!;GI`L:NU"D"7uʯ3!7&BS]SXI[4{s  &#t9G?(=D{b0J 02 SO] ,ƳTx k0zBT\m`;hhS< ẕ7Ťs*u{`o&Z4ideݫ.>j.j> CQPBF1 Ҍel)Rzk.=ږe?߽.I·SX5t[g)OCX\wNĐYymUfK纪HW CyXRӘdݐsCbfh1M%~97|F (?'xڮPؼO 15ap w"H. w8$Yj4 вuyӊ æ,KC*V  w&ym,odFQk{DXŊHAy GN =[:uoZ6MCdk?o7V}n6_7SYJzh=XEq#D5 Ün;يF~RtE^W0b>-$f=u1Vy?EE@?PO@ϋ+N{O᱂}fϥhOy4]ՙcs{M @O|RXvk=\xyf= e;TmEgܓwy,|K)"= 7}yɁaHOH"bK^toF4R9ew֞~`}*BxSߎIʌOap#I֬&w2~$euںm{8Kwcw^ar!TA!48 D0pPCPd69!I p7P (0c2m'MLm$s\cl<>#V=,nB`؛Cci1TGqlyy>h-N{m&b1O?{Lx> Gۙ/rWNzMa/d 2m;'=.X=WdO?}O]orl^FdEHye+ x, Ӂk ;Ygqo6y{ ܼIHgKMh M16c M MƛccIcHcLL7ۧg/IvL+0//6nj4.XhO?b7b: JT;,a$4Ko2?p{\vnj6!|-VQПfW<ܘ`YZ%q;Zyb[SjCf핑`1DKElaE\wHfi6u%ʄG9RswK׵̅=y[ AXv\,k`/K~ѦBܙH[5#-2f'&E;Aғ* S:gDOIٚb_$?s4~P,6Ș@@-ΒIE 3bT69 0ϮKjGsdIQ% H!=bjnLr',e; ;66K\x~ި04G@wYw ֻvˊi֣D.˭t` nu'֭Dڱx_ΫC 1F2䩼ЄWJ6Y/*7b%kWP?cLaȋA;G:^*x^E d9VB"^4M/@O;R;HWefs|ekr.oKS/w]){~Iuoj;ΊUBX3!+ZT<6)1QC2Kf2-Պy=ޚ(Yul<\J.*8f..癙#(@eH7BTiHC!`C"9$A!/"as Ȼ4C,XSXZȅd4M($4:3N,Z`IW{F+&Q$O'-BBVA̰f9"wu$x鈰7Ȕ(d0"+Udz.qw#vB]01䁌4lf7GE|I\OGIlcp#8U*@<)81 Є]K1 '6m&(+:TP{n>,~u|,ț]+k_ٷ\/eڰ,i~z%}6MMR?kx:AlL$Ӆ4OTTIE"Ʒ:SW` $R#]RMz@-M]jb4F}W(q4U ` & }$!d UPa2q-'a &؄~YT^-ڒKHLѰL҆!+2Bs+iϘMOźZwЎmpGQz=mkD/Qw~w{_!oZ_z&bI@%3Meػi4k݆ܻ[c}9,ΏQf?38tYV]@ kj73[pFw UPȲyE>y#:|PiTWcS‡9AG/ 2㾐 h}KwZ~Qo.4QEE[hyH"|ljM ;.J/q n/* _tj\'vv^py3$DŸ&˥{Q#7lYBhClBmY2TjN/y~kǞqq=Syl5l׿Gxce->C`WAwU:h TkO%lPba(ܰeGQ}WQ J Qcg/bmlwcO!<9lGtt~7nq_ TDdXiBu? m5nTw[ټSL% Mhž0GF*D]rz&5òfplqտ#z_NQr@Zٜ"*ěL/ tJ91xbe a#pH *6!$.v6ve_J)mx6[rЩnl;m/e^U%Qj+ U1u*Yb}T|bmӵDq1x=IեdgGrIŻt]灊׫+L.K~uP RTa?Y?YŖAyK=f NByD Kܬ9BϢ?pDzᏲ.<,| &ZBM/ C ;*2C]Rbᩏw7 YEW`:_|#~uɕ])xVWDye|,B?%5ll(J΁ttjXLOYbD/෵*u ibቁ?˦k" >` Qf汧Fv(āc]0E8֛/7^nOrKԚ x q4.g³ '28;(07hmsD Ib m¹ìޟ rTroeX9r]5?Hh>߿;Bms} =@aG SJRM a>BfvݔNȧ5J#*C%|}4(ZPdC99\[ ̬T^.P)|ҁ.hFŁ={.wSe PTY=@'K_qtJm.U=c5js꪿ 1i]q,v- k mZ3@Ԗ*>||/AEcؓ>˯ lcws}g#đ`b\a!Gb.9>KB;:qOVM uz%}yln 57WQ;5=YDc7)C"!C uSQsE!Ej1) ^L`ו SrKݦ*ʼC&&Ub*QMHձO"7TARjqo=a( *ԡSŔEjZDL4ӠɆ;6"~E:l5R 4IZPN*IԈ+:NRz9q3ۓRkM=4ՔJ̨DV5 )9(GP9ɩZԫ5T"휵qvڄ[fHU. +HR\!P;Jڧ[WձURev=v`S+qVȲ.DG $ $N?2l{ߺ\B;Ӊм='eZyBА AA1A^ȌFٝo+3`vODA~ +vo=JFiJ>E==mmzy嘜Tw7 %VbS5v:;j+Vl)د≠tQJc@IZ*:K4TJ)IL* Mh$Y`L7{H$D2  D )`%De7. -|m%w7 ~/3[իi\B1~2AV *R=/߽TN[#CGeH"+lnp')HE*N3y+N>xu ܜ>զtBXSt7yĤ25ry!?5Su>@[S&`r}0y4"Bvi0'1weGv{en$\S•nxxRϑ w =u(2NVTA'5tSWr6I]٪ЮI P۽4[syO~բiuF_ع_~`šMt}嶟|DVx_ ں7e1 i^ͦtׅ/kl9lJRrD˹N>Z4o:6(Dθ}>X"P05UVb3ZAj%ڙUs3}F[ z̎b=wTӺ mKKO>Oyj絋.pyx|1徏@2z;w1{wa:6ds0T/ ϟ3?Me|֩ _~\R ]<2vt&!U Dl>>KӦBAzoa޹^/0[N+B=.R"L!ɅDӥ4%6V Sw,H /ETJj47* 0,EDCHMhe$k։rcLlse'9}MPwM[B3>&x: U6|&808mٹͦZ'jߍR")v 1y*e`p)~<E|==^7YpnV̽Aȴ/ZP \MB&X)ǟAnZ9v%@!}Z0tp!eUv*WLG#dh;l'< w^ʵx>l|Ώyx,^s3hGvoU70oBGP$hˆb\jIH]c-W=~pVǺ~Ќ53 C$Ӏ<`H,f801Dj-*ۆQL a,Ƃl_U*$+E*R(&84Eo2~M۹iŴuf*Z'?\W=_W}^r}qEr/lIr 6MG/Àa,tcs~h/Bǩ]B{+  ǒ p'\ @a+Q:Y22%ӳټNqvkL!fK'x{3հ(f8 5?3.d'X;{yB3 g-˄WYxK,̆X?Z 1\$im;f`wYܗf&]Ntus?Yd@j_Lb@?HTstmAO `lY'Y>94{6!)X\4ISiHel{,U:M_GXa[Q@e=cEyr5ywcB>lX\D賾woc{c/yYm6ߏ?d61".߆k?i{!l6K$K.*<%QmbeE#O"Niz׽ RX.zŴ袑d hm*Y@x*t!@0)=ڃUd9UYL;Q9 s|e\97oɂ{vT -s4)C+wx>-[Dkq/~\NJȟu(G>V BS@logj-01ڧe XǾp:˰ J0;c5{K 'cѶ +WCp6kyʷM^P^! Jpah71,F$4\F f)KutC ,2ۛx ^^h;1 B;8o8MLXM#LurUЭvgd@ԣ.1⇯  +!6:a $dNqu-\lce"D7"Ti}Jj;uj=*9:XtODQ5HX&YRJKYNeB)Je A)EDT,QDXLUVέi(JU: AVMVvJN '&*a&ڞxR.'RZQ1ҨN~6|~/n7߮ŕ+;06Je 9'PDZujyI;vV6}7v:NҁH],BbHjxmo۱j~А\3$ /_QF_b[jr?%F6_#c"5kWVi^ DF YȇDV&n,ڹ60l~뛠. mBX+ ymw߾9h"+bv 7$hL]g'CYdJ9tLQKDdBjS(qH{$Wֻo{Kݬ{F P0+2M,`4 9c%޻.s[̓\ʞ?)#:F{!Ν{F2*<2f<öRO~Y=/5DD­>9(I,?/p)^a`x@ vs'''z[[PԲ^Мӣn KjA6uh1.q@Sx'5G 擒RTl%jb!x N9%h.p>;'ATL;Rcr^;>foLJcX |B8&>QM '$r@Yy1ki?!ߙOJH"@ NH w~rh@m/۬}98 @ KB[ͱaUz'O _PI8Q"p68`_3DM; Sr&GAX1X i`6b4Us,*T@7CؚXB}@62!ʨ$*+ 5ϳLi_gڈJpjI"pc :Hë] BUaXA=]VS aP2d$6D`ӆ@pC9Hnnc!$ cCC@8i7DmĤ10CȉA4I@Eju .o6``ɉdʥ]%\AC\gza5H3HFߌ@{o#j?7$m_{S`@GIǜ54V$fV3`ě m(Rp E,g3vGS~?E/NΞEaZ)-X` _0 H&`DlIi1&%! FlCiQ#hc;}m*Bw É D8r)[_皑T([am|?yM[WetfTUZ "B)`SL:iB11@x|q-}W5Ydgk]Ab9ffޗk|ol;mӦFa %f5AR`f\&PBF2Lbx>XUom;^N7ۯ`?}CַY54@1=Xܐ̗}LM-~ԿvOxi9 ϿƊ ho#ȯr.5Rß:9ݰK;*G^ԥP GJj֘.=_܂)-iFi;al1CXǝT zRyծ=ŀݵ%< ;:EW,2iScgG,pN!\k_ EdlO\^1k!%&ВU'pjXjCre7M|88$%ewWⶬ (FF*P7KTnOWE"&EiK-{@͹vu&fF ڿ3M_d(Ǩ.jRD2ZH?0aNֻ֤äW 9OVyrn5! Qm@n?٦(uNl4'a<cZ5ZX(V{|}54ai WjO8.15 ;qjyE_[{,! vxLmD/ [Zp%;5CzAgGw+BDUZ`E΢/±ωhCYV 2ti>)zK$b[ /l43 8.* czI-]ruv5b"02I9يdpRʐ"%ՒtYݜ͏x˳*`~DsW0qd/e[aW+4SÅt}7 mh&~wr'*}__0*sguBagw K=ybվ #1⩥ F±p^}}I 0P1Jhp҇iE`|d[j.н˟>;7 pYTB6,|=/>;v~9|n؜۲S\]!D}S@u "{/K=#Rf*XBq/#'U ά(qI#J*NUWUe [,R5pzwY9JWyjxލKh (]V"2c'+K(kOdA:$vnV]:"[Uޮ4i>S`KW(+";xJOB&q u]_| pCVȯ`>f1GC_z~YO)J 2Tഐ/UPlM,[Af%$yQl 4ږ}(sW0Y)!H(a BOߖR ?+/pTQXεܿ{ dp %"УV_oETϿKԝl&3(zA9/hz͘B#-1s[gB5t?xm#$P"Z^6W_3nͶ:D3C~8};Y4=@. c nk{9V_u^Ы׈Ai .$ $kOdE~ѣ'owS0ϫBHXΎh ] x@pBl~93:fhZ6zܮonK/ 3Sєj!h]N%^3^c,sы=?}X ^#"^[h]j◌g$gHhL!X\ k2ۤ mtDO8?踬xWq!J!k z6ĜPiQd>+@yte_r{9|3D8i:Fm,vd(Eýٓe8[unJ wEfL8QTLGg*L.^7cg SE-W}5txvXrvPhpd܂F/w$P0bTOZa[) KEK<&>I#pHl^V.56٭j VE~59&q8'%5|ka5vXoXZg ͵r##$dUx2bH*|qLj|,BΗ7ڱIb7on]Ԫy@8 O`V"E2-4vկ2FU5BG`ZJkm&j5QǀT!@?.Lkjh-7vڳ׹Ψ'rKuthK-S)ok(hN28 (YCF̺'禵thb/&)F`[}ַҡ'cfywZ'rJ~tCIM1&MHv+ au0}=XGpTK=5C#afCG97 PI΀;I,RD^iTYƣ+KV!*yABV/f*hv|$Jm4כ,*bri}c#-.&pOLzJ5>Wp*V&%w634:Zāb$8xpQw KW[6<̶9'w嫬QLQ?e?9"^Nik7 Q +>Ʈwbk8ؑ,?v6Ӆ>zk1xZWvo<5Hr$x<(=Rf?g#p= QN#{#/:ID4啪$^ H^O9WC)"~*VCLi)qa|)Ώш=0?1M̶ǜ)zK_=;},dLπ`jwxzTf`8%XfSԬ#^/{ HT#`4[(~Yw _9T' UbL<$ л0EA*r_qi; Ju(}܌g[=}şI}).Qy*s$a'fdb9F,sO tGd#^$'6es% n`|iqq_2{3|Hl)>cGTή^l>l '"9ocHo/  Q?!u6~"^sVΨʔn=7 "4fR9b b)Z] vh3tW29[B;pQ?*p Gj2ȗEt=Ə8:s.r)9_)v%O76ϣֶB;z㲑Fpad`lTSiQ6 Eiwx1돞ǽ7%7zcԵ~%a PEƮS;;̀ʚ,'ƀ0mھ ?i?y`0* d>K{CY< "?Y&)vlY`Ɛ."-m!m}KҖR^&ֻ[=Iv׋lv5g)6<o>5smqVjMܮ-):= 7~h%a^f [q~!oFB&6gFNrҶ)0Ҥ,&xr^XcqAj\D^X#O)@vplbЙ hFQGlsϩI9rhȡ} "*f ]w>GM*i:Ċ>J '5 3*>a[USkpzg!8{hle9TlR2g{61\0f⾗ALèffjya~f70G6φ`ksF#7&qMvi7gl FS{% Ȭ!)\K J5 7.5|GX2l,|d%B8ӱ4X_w9F"8)z5^.wbƝzj$4V]FA" EPY9OP؃eywB ͈]xq9n*x9f!Eag| 6jw.X68Eל{z(6.o_3q+K`"v,Wj$!g4rbhHo{PD Ms CӒu7nt;+mgvnh~m8c蟩h= }>_+/32;'B/MZf&K.ćO'BiF1;l$̕Ee ĺSaH7Peix(@8vP ">I#)?_/kmNâA\Y3H.j5yns[tg.U'O5><@MgyE٭YR9w2Q B8HY@#=>8&7Ord.* *G7F-S!RR5(l/ɑp3lv?[Mƶk?ai9TlWBkl8VK_rKz}#L@0AӪ:+M-.cdU.h6Z6/sҶ[?;4NbY ;VcB?Gk '~q7ñ]?I!NDI/QC @ VRW8k)^, )IVGhN3©Q#[ƷKewy+lٽYiU#[T*Y鲵$0@M>~`CHɈ]Pry؈-Ӣt5 q(d*cE,W aNE!l} ^Sۜw~V?% 0Gj0οNB2}qVY+-vt2ǺJ(F"?W^zeG}&wC_y.8EuQr徻xLr(OrEOK?67:C <g#2DWBBcjT/B˛M\@BVސB2)_5zUe|~e1:w 5R2dy  x x؄Ab:i.|Ic[lo qȞDav]ӯj{23COuyYRh7b̐&&VVPv!&]",r)9HYׯ8Q8.Yjzh[ #م7!)r\`gdɰ?0: @BlefAu09<$'( CX=,7ij4P=rܯ::L/NfωR9fbsF =N!$@?R 0Evµ:ug5Z'%3I:c~,`zq/is -{TO<$wPoْ5h㘹CVJ]ˆcp"fB<]H4QJc(&Nb,T&QUayww;3! ;NڙNZ`zG?S a{sPjtPq<+)Մ-Ad b!N)6jPT蔿gX^s q³õe# w/@d-6<<Q`jo5o |uUp㌜0(X#>}9Ҳ7ssg %%hs,v@Qs A_,ZXzXE~=Nˀ[L{FXxYF)ZՒ­hK*y'Nz<{%ӓCO-BɗA[Z` ߦ<T]"S v#($dꠟŭb"(N^@E⢐쭷h N݄R(bK!9ӱ-F'˪4]z$C45Nup{%3R'b yһrwf4J?Ѧ9?KҹeCny! j'Q3-E~A+R`IhCoN 0Oᆴ)|k3Or4*\L% Emy2v3eݦJqr*s9ef*j2ohu 80SX ;o"+E-kyY}vAHs@O!N.XtɌ>~+AfU' 垪oXRDj#Ġ;JQH*A]d~{ yԓA?ЉrK|i^ȯ|%t'ML3:};vM9iݩ7cɶ64'vW3S@s4+bpuzp W C7l[Ü9 BoiGap22<[t<8;XuWcQ`Y MHQeFǓj4dc#Gq}߱sG=c;?[($^:;ƹySD)oLk,}9S᬴WB">+g.sچ0LqL9ab8R2RH*18aZ tIgrx2E£OQ!YY2D|p us޴5~Ǒ}Wx ߣZ|<ݼ ~.f=G2B [Hb4?_/h݅TV m{&@ia݄;( mT  T0m{C|uk0ML+M[D~1ҧiDY` xg➿ɕJMfVDY'X_;?$S>~ЀD;X|Lt0./&A3Q1lŒnwr>Jy^ O S±G0eI$*F6* tnGΘ'f{[f:rPO{/􋈧\V|~@kTqVfT#g"pPJ'.cR)1<;-oh?Е/ S)ifs ||rtpVoN[L#w +ܢ̜5,DP"x C+-K3㈏itЈ& mCTp C_k.X ފCd_P 4 X} ߖuԅbzr.ljbYpgZ,au&^Lz-?r2-_RnIbP=XծP}F y~PF3lAXdcka"v "ky𤑍ՎW%!qo8J?y huFsA<%*Xؓ[ ?Jn%Y FPoQFR(AT=]rA'rcC <_cOq=rO\ez$>)6cV)s!Ɏ&$(FF]{䜟GJ> ͊'bcdAi ._p ,یk_n5䕙AF G.ش"q$#Xu@c4u`'б+մ˿9'~eQ[~Kf siLgB$?|lԊM87]#RPj0WaӣrX?K) 6U"ejzhe )5=Tx/0GQ+J><< '&] 29vMQ_/i؞J`%'=W]t F5?ZLcЙ!_ف%zp]!']aY>qvHkf_2xN}!B`!!5XI"b |9O,$&y #m?o` '| J&7/|9MkH+y|X9f(Nth4:A\2x FpV9x7㱭ڤn y=e u:1{Ty"VI.JEϨyT=`:jd Cuķ<x)U:h$=7^`po#+aӸaRL=S\Cr}#BMƌ(?\GKgJWDb>I^h'!N2,|uhup從f7+ˢ==rgzYP+NSE$= vY7J kd!MD3)97+M <71@,yo\E<?@-P%s`^:9Ѭ7==NQ6/|Tw/aJ8%[ ٟ#zgڐHc`f_X-BMw3] }~ 0YZtR,сSM>º5O L IT)9aux( :ğwK58*!͋oexnxxk8Cy{?|YJ_|ƹx_ai~nsέx%okټ vLK`V 4Xp@\׫LdW&'JD~ շNǘșKbA^P[NXbɿaI}CgX6Z3("0`=huEd ZRkZ*[PI*,֮BF}d|πogĿC)HPIk[|Va@׮nues0~[ ﲃ7&rdȖ}2i$pb%R(zrNQK g֡rfqh 8&~F1"Qk=G4:Rb4i'1]~te:Y򐘟 B~ t[R *@xc2 vOx(_U*awO/Y1x%!˳]-Tf^g]d0NcT^pnRe7p/lGasw?IBu+ Ëw"ҋM=Bə> Tdc#u`ܤ%:W(*o%Yv.$Yû6[eLo\xeQ}0o$ Vrg9kdJƸ P_@jH fso~ŎGp 0'/6A0-.8ZbLXHj&zVXk|8y6qu6<#@eaQ-W6ff,0M [t> wcGs] Ai}gb u÷ H]T #IС w$Oe"2xNo]i'F(T莺k ;NAFSK1n6Ҫ wuE2LIQCU/ هl<[EKAF~-u9_&mJ.nDkgHr{ZՉ^0OŔ]MhU+ܹOv0.*]NpeZXq0XaAU%}?98d*Hy7-[9~1q0YeTJ׭PT^K ,&MfYÉbMԃcQTیH)ʎ),3c((en9} 1þŻ-'c BvHSOWǼhN-UprH]q.gdKYSJlh46Ĵ/,\9? 1Kk? To. A¬>,!;0 ΍dlq\@~']&+< Ucbnyu|/]gu+U*&JbDǩ<Ĕ2,zj)Oc''S(O@r,xWz$D.( =td&<͊a|!ca@ 'X8o~vx/ԣRt\\cNFJR9e*3;Ð՛y+Z ^|̯X G \fy"Kfkrh Brѻ(UE4g:J^NpxOމ/;fg|Oz80;{ӣƦ*&p<H&RD-qCϿ\#Gx/t8`]ŕ`f7Q^v+ij#ǿ6p6rsEf\a<b+ T ( E$īN > XX}2?ȫcO{?Q);n¬;'q0hU jSk<96RhaRN~7ݢp0*C;yb'޴&  CsAD䏏hz#H>>n.z^zڤ#jkF^p,pDF2XMJuҾwD/BJUrgB!a"7U 1zC@`?ں%nQP(ѵS. Rv0߂˴e'e,Pg@UM(@GuT',B`#x/닌S}lO]Fs_ $YaIj&L154–L/ D ylZb]Z] .a'O@?J~^d&{O /CO!:YF} עJׇMI#s i*>HM:_/q}lş< Cu$x켉t-˙þ'7f̎Z|8=/ﷰح?߻;!`R@Ɛ~~Q~󿮇^pe|kk_7؅5HYR ?s\1 M6༝w:^>ޜlYM Ik+Zs_w尅SiE8` ڕ [oq ?4^`cxg҆<0+!ɏ]_>u@gGEd+q.@6wG^ oԇב9,{%2D7x.N,+UjѺO +T*"۱G-@3(#tr]v^0C1qFX͋>G+Ȇ[#{pG%\2GIl (LH BF_ܪ#j2o_1cg{(A)0\uɦ$ / e 4fA7 $+b#`}\=0qiA{#8|NfzqZc4 uKTJA͟P{Nȇ$#V(ҾX}y#E%&"Oj <;LH JQM*5b]iz/t$D>u^:R|1 y#AH;K륀^5 d5/4mz+\^ yfxF}-CFc87m?LGC+vD'96z --t9qzMB.\Xgԭp&[zPP@km;HןdQ!NяnX["$~]B<àX5Zۣ^t{3V3 8€p,),/I\tw5AvB/nN`]-ph#0"f03H23tbv6se9zWNÕ͂\@J?`%CT}!9*>;p[,vw(3Q@N U_zCB9v ;qYTAJ6!p*A0Fɰ* GnQ fcj"jlO/DL~Ŭqf#4U?EJ@^6H>^w d[0ށnwCôA(^݃(cyd,5{Ku61W^Ytt`-4w?>Q&і%E|٠Fgl45;0{C&of `3DꛄaE?>]K )nMBVl ({8<Yl~{,@ )6OTlQ E1-IT 4 ˵.DCB>qi@g91btѵD*u# VHջ>8둀)>:H$ ȳ:en5C*(+dǛiȚm?C 6#(.fy2UXLZ9azm@x(J]9毳dE@5'u]0_W%HK@k}Qɾ@~>"d"kS &P]4Faxk[H"_&NcHF !ͅ0U;4mqz*oɕN1sHԤ\磂Y vQnHݧvWj$|B:g p<|$qgG&3(4͏P|YY=:Fꭇ{˾=2.f`9Úx"`s-A=fg=oI%HɭW㋂$,XM zQ,~YY8=p,߯|+Z Z n2G"lUvk^ƿ™/w=]O}m?nv@= 4 9;qW3ivy9#+to\zW]s^No}wp B?5C΃<0`?S ff[fL l{ZI3VB3̐,7+|^dlӇJ S%߮wz B`#f5MEQ3Co0@ 6eJZlYyCgf۹hQ=*<@u5;M5̛- D5&O-Q7;W Jl4fQO X"ɅƪP ~M̞PmY1VV4 ܵAQI6Ugzcs5`A 'oCV^}YT2d>P[2dJjzKnL UK¸B:ɈRōi50?Niey}"8kY_I[}:;T1{+{nqIa؅/~=^=@LB o*䟰TonO+g%Ay$Yk ]V˽BAZ\bMsJjQۇi#CL}IR׈>ƑhXc~443ƺ=HHVla>l~Yui?oڌZb'0vK*9"ǔMï&ZP  |-BWh3# ud LQS hL\@VN/Y _#/|w86;W]U'`zS_ہ΋vK D(O9_]2Uqx Tx|U Rz%ߒy\=?(F6kژmaYIa(SW>0rL .\$pt|2Qat'vN ' M}&荔Xjm~$ ?l=HaKq^'x闅_kN3pXAX*b"IqвNs\ [_mR :>$[|0?*'z i0'2rF 44>ǎΔ@K qsq^_eN}ґ R@GƯPU6d8Pfrnrӈ8x`Nr}XOJZEsfzRWPJC>OÙ jXUޤ$<N O1x o F74/WBSc@fE!%Ni5NoQxUN8:qs l'N9tۘa;K?1j'0.[{bxv7>=@1PmoACx)Jo/p9`C7":&4ܬٝ;ytTOf`%y YVY:o<I ¸醠z!.߻/@@f b`m 1l! 6D@ @ mIh̆1i5vOc/{~n[3j|@Vw<L B80mG`C "awTGf3d(~UJU/Zp&nvCr3WHgL*b+!FVX:܇m1ĥ&$DQIO\<;vLr燈IIwp-ŋJC|H{a b4N Cun0&r2n=-fn[Yw }6U,t@qSLH~A؉]=KSˢ+R Ɛx_Gs8U$QK ]wT״F#^&y 3mKv'5.}MB'ixAz2)P|!πK{g u JֽzѬ9Z1㼮fAWs(@(@-*=#׿PFP]dNbnGsm$^7ޭ%Wi ]HD ; w= <4 >T:<EGG/,<生c1}yVe(j갤!FOX>'$_Ta&ƢU U;6YRm9l;UCdտ W!vG#ӵ >Usk\1>`k_ו Pgj6o3λ(ű5&Ϸ{@skF &^ [;bRCnbX2Upv; Cz HJĜox6uVB-Q)gKLdO lg!1>C#6˹׊n*;Ct.KY& YDK@£8网cCn=b%% 8Eᔤ.~B o^Q(,K`>WbN@3mQ< ~URki2|ig(X%gaѕT]Kb\l)-F i֢觉% mV5NJ L(CׁdH|pcUS5`pV @."XSrA0gG򡍃[Mj}M~~eP\w‚#}OQ^[Э=wՇ^`˞ELc{#ԯՐO98l-n,ȪԼ|w"R AUIɏk7v6`ID/!^FnzSbXхȜȜ! [F˞3C+ MšDQ` G-%#j^n5  iMi6y t42g%a5{@qCMs$hhE$=}ѧFӎcy>Ԉw=* ݛXvׂmaT?3`bB_ɝw?Gd caQğehL(_PnFLj%_.Z_9I=Y_"uXm,g h. pÿfl4gfCD  "bH0,Yp/ΣwYoiaj1EX eICEqX(Xxb1o+ZɉAAWw &^V%!þ)i_-? "ذ - KoJDGaBGG:vF1Ax6X]l{mΒsNTkN{Cqu=.9YI5RufR9rzADgY ?рF,mGuZvEfO7`9eOlzFc3ꨤȯPρ۪R[SeUT^Mjfm ~jN"D >V"ǁ!4c .i & #"YA{0tG@Ue}F$V~nद  i,qN6oz]i/@YGgH}`®gvpV$M4-\T*\$AXKdCнgݗ*M LDzjpMK!;U<7 `FR3Ӌ,ԗKYnFnnLfkhL%ׁsd82HLa&s76+@UѴOaDʸAIdRCY-8+ΔDO XA l[.3jRZ ʞʉlf<;);tCOg0x*FXL#-m+*| ;bD+zs qd![~|5JѼTD4N4MsíA]f#+aNIæ+!$vΗ#HݱT' cqc4txMAOti&`7!wlQ^'a | v>S&(50t .!pB>$ӉGPyMh 2u?W"`qY^n^C3lqj2@7WqP=2O8 u0{aLiQ}زoA8B{a9vFFqK:P?h* }@CJhn{' zAtO1?U}C1b%ȳ%I~m'qR9RS1_1 X253)esg Wo:'Bs_QA]DL v(] "Jg"A.:cԃ18&/p@ k6=α)8R:OA1%FGe#F{5As[0V֧LMfʷ$*ܠInE 'mJ=SV (c^t,A'{to:1~%{)xݯ+cIAHͅV,Lb>!R/P\)]? :!](d`XJlعm!Z3\Xlmzd gAK(8Z&5Y}(Qxw#qR!O8sfgwW3y&%" Sg&L^VF%6xga.afXm )eh%%.87MpWi|;7$GbIr_J?*B0(1R8{/Df[fMt&ӎ;m#6o^KX{_I iR,0<Hھ]2fke<$uJD $gZ1}:iܩ2kYC?'D.#W:I?\l &f߫Y7^$Kp.i *a<>d(: C3wx^ٶN $5 &hQ=g$ {^]t,@#2[tY&98 G$3p9X"Y/"EZOZTBפUcTgF;Ҍ* c$> hl?Ɇi^J A}=30}Jp"4m,gDAfωtŒ'έ ijKaG#)m~(TRHmrX tP}/좤WX1UzX O'qoⱪZ]RZzA$;MW-?>gqχe,/luvB{۩mrXRO/ZmW O?Y !RGguaƼC4ovN\wzZϮXaEc[^Cq%\s܄˗Df*/ciWF޺MIc ( 6CčE~n=מt8E 2U$ S<ۿ+n WWk`;_Bxle&nF{1FߏͬRِ5Գ!Yb,_\Q@>'yf-E3+KOJ!m,~;}cYS5TfFUk ?*=YgicP5xƴN"y Y|h &y"+ )Y%A /0wjCԛL,V}a_Ln쎫l8>ܚ#s@bo> | >=<\.%lRG2it@̲a4nw㡤NؿWpAD+W!Qg ً~z+WG+͓YE]f]C<_˶hJ`E (@-0p%-c[M(لI1b//a߽5H ekt2Dael̆_(h|dL(/7Ee{I W픯`G]h00Wyq&W,V v+G sGv #=:<(9d&CT<Սor:Lr nwyդws<\֫ yom5& f9;Y F^uHvWj%}4vk U0,D 3'G$Hܮ4Mƕ}a ReC[}>/#Ll:CXԑ^+MW4PKLredڰ$Wfw]I7, h#ݻߺ`YmT8gomt>N!ߕzLc/ 6nPjNcAMĨ4oHĴ:jm? 29I \Ä́V)NDͼ d>?K]tNCq'Tȶ [o.}h8e90P԰ս]}ܱߘLڣN1՜:\{rs߳ q'>6L,zS'ա8 2Ә~u"YE?+M Πl,;9ݶ2+M?*V fXt-)*D^r/ `̭#!Wm0Mb5 \KXs1"^=}*,W#oX0Wn 2+Iq7/V3蝉24!Xү5cPR{ڌt3*Ņ2܂ #܏s[bBտhiofNoeCњ ZE"t}EINK8?k2syWkeLOL1!G&fp g#$7E¨1e#p{)d`@!Y/f@xБJbFƂoJmM9t?q#0U).%rJ CHǫ5Oa?Rz#[4l9${SWaͣ15I|K} b$VA^y8u`NdD;}bc:Nհ(JpV-\&DS+!!'Ow(?C'FnBA['+޷vYthʥO~{qFS5c}F4UUtB-"c+ 5k;S/V_|*c5UOF;n HC;N7,5Э'=gEԙ{(UuvR,N^Uyq6d@JD0 hDs6r=\"òxCcvo.@-v㰎F)o[5j),d5eHMN}35$y68fm ^Z,U#*P Ո8!$ MvT,2 Gbԁl3/Ҝ{Efe3ձ2+Γ7c̅nR}}9-"sA>TK_/|w2= .CP@fN}w:=4 i aL2ƥB_/K`h6KҨw.Oh>l 8vIO~{c,sc*ݲT=am!jUE:&hM&\K&k>>J2a=Goo_,)*)CYwf,פS't:o4#=Z<}+S~{h~'\ i͋65 /LSCX2~,*<+ T}3;](',T'¤qh{e|;@bZQ{~6vՙc8Er|B,C %V+Mcjr4j!'gN|Jhtg'?6dpcW!~ڏVSgppfe1'{&@=F'靚dEBt`[_k%6#1'E[0(_|zUC4vbCe~ĩԬ01Ne}W%v PuU[Tp9Qy׾Xu.L,kBYc^{Vp ɾ:,Y5SLj2W:KNLP||VH֘1" p= s .N>bFMU'=MVz@LsՆ?5ՅZЇ8cHrP k_) j; `T.4(@7kamyB%QQI2Y9J916NSBJ!$ TKtB ;E٤`6C҄ $xeŅSZtj}s>r}tn+F>,E"u{\2/܀Q( MILJkma=Qn\6\Ea{Auyw=5TF-qt]H3wOpD2&}.O~@-!`UՀW 3Z8!U wi*t4] JAiDN22M`/arsR b6I H]5+uW~r+ӕiCR M r|`Y 4{s0n^=b.DA%Bր]Ur3,K]38?]wcRjo(ؤ鏁&oIHFK<-j#ެ驃Sgu:'%v\SԒ@f);;ʅnQ(wT΂{pr %O 0yUO-B]ѨK6vA27Oq)O,ַP>\!aCq!2T䷖Z~T("C_ŷlJNU x8W vAEp/'b"VP}aKs]-rʀy&JX5V՜kTX#k| 7#Zɝ#|[w W#_ugD9t1'VY2AU i^ 3=OɘD-Fx6h*zә)MX$t˜$xp&Ўe.7ejJžA! w:c3`a뫲B, q?a'z|;pC;cv >ղmI VZ P3hߖ>J0&Ɔ.ڋo00G ZCoaX X|]~?#vF8?XKH񡡿7-n]'.zns*.46&l}C|TdoMO&g.G PP_)+3k"iӶ>x Z ּ߀oq֡_ ",5_f@ԆȦg$ b .eC+E&XbOek`"H%6CDfX1J X?#ەC^U: bl1=@gɯ#atq["nÙxYU6v o<$ܦI$rEe‹+0D%9c;.ZI0!eY5 )R1;mc6^sc4Zb[,_DŽN}Rey!Mٔ!%X8A;EvwMz0հ4hpnsOPC[NG"l `XA"D m}'@^qmZN@Rpnhfs?6 3!+MhgQS9[;U{70B]3nu:lܡFT_cPwQ˳lTȶwO B3w20"DWNP3 8" Ⱞ]Ƙ U7m72VMsw 2ˆU^+I۫NJdOӫE 4:Kh>ͷӐP.t/m ,bRPEm& #}_?@Su:J!SGxilֆdJ*@MDa@6=ay1#%0( dJ̓/^sExpqwq1ak^w8aF\'SXwjO&Xqz*f}gPmL3gT,OUcKG //D;aH3:*~Ze=bM7B_e"$PبհH־U^,f`|vG /߻FDpRfoླྀwұċ3g}T ]5`gSĶ ҢZu0TpamnH޷2f")ُ a\>.̦K^ A㟦ȕ5T -9!I#&O|fyBT-uZ]7z8}՞9=z~Y%h&?3; ߎ|#{'iZ6Pb͒R -Y\tK!2|]Bh(4*)}[͜ yRb7RـRu^<eEhX! kӌ!EAf"Z y>N-QEWJ;i'{멼5ؑEΩ|s"ӷ@] oz]`t7`i&^Tw8Gp7[^,Hd|Y[(V<5 V"I f-%18S 8&R~#eclk7 E АN5dC ȹn(w5c}s~/IȩD8q f{a?^0q8AFĭhe (F5%\BzggxGO  7P-lI>0bVf/G$]cLXqIƖ}tȹOO'3(+v?3G+,r{A y{|=|Ad~2f*{xd00 nr3j7uQ̵o6y3+])x2K|gtu%<s&頾$,uasí! (M'CdQ?Ė@=?Yg[V?MNi,`q 3J3 zٺʼLw_KW4F[|Hb52s̝bGX( <.3WCiO@y"sr">hunf'Gd`Ŵ$Ȧk21Jc]8{aF#~Ѐ5 =j[ٖt<Y`Vd)1"3r!=m| w6(>nIkN,S6Ҫ'e?'ȁ4> vH|F~GK?7ÚO]Psj!R偒W(we{K8 oIl)1/+ (p@z[ac$iL-y*}z6ݧfԋT{?Q`G̒1V0P \66l@s\xr_78S|En%oU ZqmM#AWm Iqk*(eÔjbjmrdpJDR19<Ā|4b|Hc{ gLmo[RdX hʝ'PK0aPy$Y(@V7s[׭Y:\k{~*p%J֞ƑkժȽńE[GeFrڽ̵CJ-E_T7dtckBl χ&>]0?r LGK,vg}Pŵ>#VZ?i$ k:dԢ{ ڻ/~5Z5|Y3͡9)_/S<@CP?FV=Ռ|يg{JpaZ|rP(P"&ambT[@0~m;Rj0D]>+'E˵WLuxq q ȞՔ WjG|Zv}}vehE zՍ>ʃa (:<QmI ۣb BJu蓣d Io !ݍƦԀ$%!,n,`%yB%* *<9;D){*bVYX9zW=fj'6Y<)ڿ#iH 4R*ʜusX%pu+>B2X=8=O\Gdnٻ]-x'MĚū}|i؊um cˆߩh{! 2ezKYR(o1|D+/(mz,fS Ld(;I=Vi-#]rt:2=xF0xl(Q Aɡ 8&[D+Ve9ļrt*_>vu7]}C̛^?#EWD~T$"dE mYQav,`#a }u=Qmdpȁ!Of3fD33T"u2w9FݥkY<"-\9% 庘#BttB&LjES HF\K0a6B8nQ9t-xstpIDA3AýTy ]VUD11-;mՑX?ۡ=%SR #T]m65˽g z몛;!1ٲK+ R,޼Zġ=[\1CQ̱dJ,9v 1f^F)B#JZ zN^zmwj`[̡G/@ )/)1 %)SXu%udć!V jECyZ⍎j%Rt%LUT!v T,%4S"/M3ZHq#I&2J6Gy9H(6B8yLxZbzk&e))FiAMԕ;ʌ7Bhh"؍@_ u Afߕ*Qx~#Xշ|q!CDnu*H)];8.-Naa_]tx ,#NmL$£X>"f0zȶ`z>m-4v$u5 5d(KJ\X:d }PDk2WtL88 =FLJ<nEkc%ay ~Wat{=mh8JٍR!Y`tO ڢErDE%ғ 5zz 0h!oBh)}mx&w̿3L =, NQ/\cZrm:#>__Jks]A*[JHN?]*֙!A k o86MXT)WIx}%ZLtF8ԣvqE ˙|4Q"? =%]=&;*%;Gd!+6J(-`[=Rѯ 4tS?qэ?ڮa^T;r+?V* nԧ!Μ" dm%`lR ; pVm<1VJN(gM1oF'eb{C9Qhk ֟PiEYGe_JQJ(,9i٪;x o CQqk=йļ^UZ\%cVb\k{%Nc[cJK`N^#E~p(b8JyBXZJ6أ0]IqQp\e,ŵj8!N8B2$a(CGsQ倩%1(ŭ0>,n S v`$!9J\d jolIhزpT;ʼnnou"]>D:W̆¨@!`gѿ71U7^A?,:'Nm(gvOzIf=XWufP3R>!-"58}6$EnB ac!TEJH`rɋw /â Ǡ {ZUV}$߰SIF,0BG XِX{FP2 /"R5,+ޭHgꕂ]#k|AZ=#I t0/X9#r_U7&VL.Pωmog31 }JL6əE͇/- ^!3j&xЁs1n;Euzi'gB^FVR!Ł d1¹zhq E,"} R\JJE< CVa&f;'D,$}\w{4hNMS Iu1=? 7€$Y iA"\btw La TjK Du/YdƥǂSvտnvb n2K tAɍQ|a0۰}P[Tܔ,BVοW:uV_ꉬ`lX̕{&Bn<>p^aLCGǫZPh9Yv93*ɲ/7 ZXx2Vxb-{% Ujd_d K򁨫:plAXFY$^IJT;ˆVf` nnZq/K /U< ?Pl CFBXdB jԈIv}RV؏ oo< GV Sw:}d{)8R(*M+kwVJ  ʐ}_P~H}J&>`ewʱ4p%0}^-twׁj'Wedm'Ҥ/Ц튧]Ů ?㥲[-GW~=  k`apS!lWGcKe|u$L`0P:-sb{ Aɒ?9)$ٷ(<1q=ORCqDHO@c@G?8lg `Q4,Wvyb!9bSf ·gZ`Ut,s%-ccВ~Z2WjytsdH{=ͻ t\V QqM<[,N RkOPNZ'M2?QNYdV>>1>YZKJ{6Ov`b1jrSUڪ pX(kЋV*Wjb0ࣈ6`$˿n(ъަE>X` $xmk,8tievY&, )mN#;0Nkj+gQ4WjZ' yT2~༇ Z9yU^_OĈc {UB0 `+\O~p/iT>ٞ5uLE WӋ]3^W _l܍[ nߪzN5d˫0ÙJWd /K~k J25V c}GPkEF*2{p`yVܙxgc?6|(W\f=?մBoM4$շ9 #* eK{tBg/P"U73V*{>Ew:xA JS Ѫo VDv5Wc _){tNu>ξ'ԘD>R1K`ߍO&@:&?\.Ԑϰ$A߁#3E zaTJ.Jμ!T";7Ukv\)^GFRZ:k[&lV8ᴟjUnZG_F%9YO M=`]2V22AA= tQoM Q;]LUO)-g/p9ڦ$Bv̟}]PqyO 1 ZQ\YKz'xA ZM_F@<K7)Cltng\K7zQAz`y !m;pEIάE>8թvqB:/ogu MS'54C' _>?wj(MW n.s=$-*#]Xȋ}PСOH#g5O5J[$(薪VDݨiesAVm2:K? tT6e`ҲAUGcelMhM͓$$f}^׶$;Q,\ ~|E3kP*(7BVJ2E23/Şt3eaCW\&Vw4+ ^_FIu:@xvyFy!08~:S![֦R^@f.RQfutҢi '$0vwTo_(|ݏ^iJʥna3㻇95~uykfi Xd]eBoaNإUI<'̳g7sʤ C l2%"w?mCش{e@ HqΩ…D( )`.zKf>0՟?4}%lj^WD^+*LVUyzmVL*cc!`c5[ T%n>R&cHJ46s^dgd[hR6ˤDo;+:߉y;8#("Ci+waP_ʻ7N}Hh"x;$317fs+Vv(]ZG-Еr€D+#5m:B F94\l|y΄ TBI~>-qGsʼnY @/lW\yB30ů#lD2ze=6pXmї_ mҹD12CҰg@+嘉Bp@ޚ< B nn%4L6ʹYƣr |'f߱&|O ^ ay6LlBn<5</W1 xLLnO]_}|гĉ _5r;qZu$v_ jymЬRd8} Μ KFO쇖9݄rN-i,H#LDiX_Qf5y<@Te9:с=Uհ˔5$,evó&j6tn; nL `*iNX_T> f)l`!KoW^qߞ>]A")"}T ԗ$JhyOXF _$kx~!bN\ׇ$rW8,ߕ:N2+V}zJ s#E-ԧ\>Xx9%'LF,xDєA=hs00gfAD+U]m-v]vh\zFf]⺴X~ӧTF8`-I7'U0EcIHwULx,ӝ2^]ɰpyuaͯYUʍl''SrȎ.p{L~Hf¨N $Gp5+-]-X9bיOaE=pqk/M_鈧x* efrb`sN{o9qG+,c ~ؐ9\_^Y-u VPPX$DQa\dƦm ŏ@>Pm!Nq!qT¿PVQj|~\)hXvۏ W WL[e|37ؗ*KCkД(F/C ex3j3qѪzOGʡ}liN3ꗒG8a6@0kڈɭƷ}P&؝F}L|`YGF)GɒU }h Nو?΢0I^?qoI#amԢᢑny٤G\E'rERY W:5M!1 h,ct6(!\Pˑ{;`|D8}71 o8L,v(Q8g(JXiXN}7#lq5Nr3{( 8({Ґ >VƲg:cF懯~/ k /c3!|n[ U]?y++q RC˗%k:u0xSrMcW/YbeyOZ]jϬzC"&Q71ʉ#GaV十{\ִ撅Áp@  ! Q>3DW^3xѡZ5;XSĒQN=|7R&q9Kįtn)xN>z|h!X&̲Z_]ʰޝV=>{mň+$iFYp; sJl'@۸h Qvw=Blo>-9_V&ab1R*N<L/OMu4ƸXq &t95\Fw m1ibĄvwe)ӖaSFx*I>t"RPSTǠ NtfzUx\Kݥ ᰫnc8cYwCY6BxHMZ@gg:KY_H Z/zU G '.mJ S'1)f|1NNфnhjQ3Qvw e'kLRa:6wu %ROw0<"[û!YIRؾ]IDb RHh*1p)`%~KɺWM!vbJ; va:Y67 :2P7cD7`xb%)%rӢ\>x7d=)D,$"lXͥc@ p 5YO,"e oCsqƩ?]*͆ 2gT>td!bxb)ܣ'8Ab>p9ZAHk! j$Q Tg8P Wj&x\=I?wF4=ЅDф4qϯ2NPyؖV<7fGl er豊fCn}oYMHa)8jgTb6j̷[.] Z*N#^Zy2[C1s^[V+^oN(˷/AlYAh7]:sQlM5ݞZ W< #zeGXܲ~M8di6=֜@𻠅;ʸȅ$RI@+8I]_Γ W $Z@O-a"Bfw$91{ 6iHсACAOmU8˝ѮUHUgn-ҼM"ahg,L{2%L0E-a"Zb PluE]lՙa{vJV<sM&D u`U$Ğk8%-^B⾬V~kTqQȡc &77Wںeն%BiR {H =hqM$OOH0QWݡ# CB0bن{+8+QL?C,ѸGO…pc߻7n}Q3.|}[1}_\HM%rTa^sw$IoKDqZu2$P:BZ8˵I ʥxX7n>&R`⠨A#A:bN>{}̋( B IZ&ˡ4@FX$QgO@tgϾ"kn&'ǟDϔ cbSˬ g& |0*S>5}!C#Vٯn'X:i#a*t )ؒ%ם[1I%\W&+jI ;w(X֌9O*(^W>v-l rWXO;;Zܱ*1`$Jk;^\6^ه'},s=M%9Ɂ}],6Sᬏ))9۲a_wơk %%oxp#n|s*>-ѵ6I Dh n⾻5uyrFMHDg]:yB_FA>l-@͋ qY1vI EY24@`jthKxէ"{G1PԮ~tgٶ< fIxZ2AXA_.l%bp DcL^QWj%Ji.NsӭMNε!dg= )5N*1O9&g?87-Oݴ%GI[3:ʫG,pju5\|#c7%@AEQl0uK$bQ }_?+'{YQdcsDT>A.,ʫx2# ʆj_AB0ߵ}}8$i8Ig#$WEƦKk$·,dxw2s[dWl0T*9#-[~?z.yykȢ^sʝ8ɕ͈dy,C(ꯨrp՝$HS:Ly4Jgh6)$"(^Fx6;Jj;inρ}C&z()0 K3!XPCQB]S,(I|tՋ# *KMy :$)kS+6RH%ZO2w#hd9+1uVpHuaʆYh_Rlҙ +lftv]Wq[PlGZ;I'ߘ2 0"T,yS7: ʼ&nx n׹u񖬝r߁ 1.Y8'hL8W*1~TڌBLel.(BM_] 3of XsyS=bxP4tj|}'=3`v |q1vճ=x Y(Kj8~ߏ2<;d4Z6qȣ G2ȼ!G7P7s)'"c'W `dlpl0^YQ!z/}xM&?İēU~MȲU]K gWlZ,(0A q%cF?f45h|_nF:EAu$Cns V_A<`YH UBj=YQ{v~y*O>x`m$Ѡet.GͽZ&d|-6w8Sl~9Qd|D+-ߙ*!na.@t(M oFgiJA7uSU{(4'QD_FŜ̌+[w}:PHjCelP1ď®9SLm syzN} kǹ .m!;61iF]'ekOYkfxw4NB!o吶ScPޣYs-sJrLQByWkKyf0!p/ryM__YvQMIYqOjƧZ։~?<0YeC V%u#e}!7') m(iMaB!0+djϋc?s:OSF`إ4o '֠E8I|&6"BR][dk\vX&cKLN᝼AvS?8>a{H,N{!AwL}c\SB첉MQly{`p x3̢P p~_##]{A4 ]D/Z;{yd+UmM&2X Zj720N}S7QX'L|&B8Cb0dCelN,7I*/d+VWax=_2:sXJFTR@$h"7C\y35R No*7T|sI̓T1E' CM=~TLpk:R1oZ*/`("t[K 8P[ܜ©sM?1Vy?!wh[Lgʓ H}h6QWMVT 5!m\y5 X=EqK P92~样I"̨7p9#9&醧UKXǫDZpdۑPGߪ6t0PvX`l(^ZSӻOrz|bCc ?#֭n%gjHUVgcF4(>vtjSU.Irƞ7k[Wv*$u8z7)'h@o6"l3(KhvBYy1z놻L hOK2,G:k5Ýt|(SF^Nƭ_x&c*ǎ$SO3^q\i56nƒy04j$k(sQ|iHZTȊ](_m9W~tWy쇥~4 2RI7 L($8N>! $΄{ [ul@};N#2 ?DGy:lISfiP.{$ЗTד{)aVl BT ٨Ѯhj9ube7 FeBӑҹ3[%*#enIr/\v7\Bمk <Jڮ9H+UʜȢI8R"ö _pds@̦ҩ *\'sZaU|k=cU:] Dɧ?Vu9]!%˭ᷓEs>BD%Y_꺲Udҿ( 0̩(I@7Λwr_K~[43]g24GnP[^>3cB7F~i?4r3tWGEz[η>4G|n}[Pbk>]z} #PGX Ry?ܿ ZW ]F-qWH|E$Җ3?V6iG; 8h y}]Y&1Pbϭ:?"(^?&g'/=qXoIr7Xlݸhh8}N iLV[{ш%::A/@Oq1 gtG3{K".΄"&Pǁ]}@yF`N_L)_'@٨̜39K񜐡d*ɒ {uh0MɮHI1{)/Z`kQ3uVגv'xڎ8rMWr'yMPTr\n ڄr'<"z gJ^Z9RN aQDQ] u)QXf }%UI3L,:O`\x*$苙`;wz el:c(rĺ',: W-6V'Ҧ~ TK9Ux5ae5q b'3WkfA[qZ|p m9Ne [nan+ykZƛ)|rl @F]hz;ɭPEJ'PɁQ%Zp[9J/NUK䳙Κ9jv@+awRs-݁|n8p7kBB3n0mB<ƶ\/ /P |xE4igOd;E46; rR[-}+MݔV"_(R }%Voi kYrQO.rb0O> KIC ];O78!ayN&vṟ+]]7ƶ+dFi3C~szY2ÍOo}W6 g ?Tn3uϲI1aPu2e-t|#V}C[KY:߅,8Sc⚊yvp|kr:íEUY2繁򔺚>67NwHGmB68F-Rŕ+tvKȁF mLSV6җkCt*J:GqY]NG 2tFHrcQ#&D~DH*QmXv >oYՈ\9/z ,#0(B(QfzbT]oe7Cȗs ̊`aXmvZ{ubڍ%Lxko"HҮTW,] S&k%Z:#[_Xhu`[Xat)s&`*Eq\ wu@ T,D; BK\ oؔ(c7ٿc-(MDjڔF )[}~b;K;<"ĸ^y!:O^ ohs Y cz[W7W  -VoY<Z91귂N]UWv9(~.bl" mo kmL{,!8mIkfЎicPGn:ĽÄ? n2Hv+c1{-n X?Qw 5r?GO /z f84"<*98gg6dKAhC}@x,[lnXX)2JM$dt+乎,0Q +.곬, J1>Gepsh{$ X-,u֯%$T[>~;щ&|O&iy$iCG1O"^`{Ԏ'XD7&}eSE+(07He'v~nR4C>hkY]ǞCryqyRoʝjC3-S#8IH==}8ۼdU,Ͼ^r$0T$t&V%+#I8_ {*>z9lߢD+O(߽?k.W)ϻyvaTTgOD+_yuuOy F,֥ dQM'ZT9CaJt⭤# h*!\arTϕC (x'h[Jeגt!UF~$~$/~>i(FQc#Ϥ4z61ɒ"LgL,[&2JvD;2+5`% CD5C-e~  t>,*!טg("?n#oPTbVZniLh_Ö9 NXe?^W! DЕ~Xf~cŊc#Bk')28 4S@ ƠC@{(D tKl}"&~?dX6Cc$[O&vޞ|x&!Q؆GQ8P{3ƛ\}mP!WoQ]۬B/PP}hQ6N b"3&_'+wwPV)vMplikE8rfF2l:.$(˱y~d umB u}\@akbI"8S2gVBnRi]q 9եk*(B%/u}؝OM\<>f9" tSA,sJZ4Q:w,<{]3=vx ֏#U('f]D`,yS(dy|CbNa{}Ȗ_\f!Py#C-s],`Qx,=ӳM1AmJ=WC^;kў+Տ#86Nn& ||S蓓SDRrYTOS0Ӟv6L\S2p}˥:?G4X`ւȏvQ \譀ùS C@߹)7S q8 Z%@Q5UDp R? 6NK( :ӡCq% =ow;ND֖Jϻ!HгlF-QqS}ژ>:QSn R+OqPl)=G.OxK.^siZ"ya]k<9cTC/Gc/Cz΄lͷ:ǨF7.vq@)|[necoY['U}$!BȋƤ!O[)t'wBGÓ%M">*[ӣAXЀ/ԲZ-I?=9ơ?XB8f'ްxN=U{40ƵNO9ԢL֓ Z0A"hEtf l ~IӸ dpo3Wܰh8H`f[^j[NPtUC VG{ vf(MA $#=JM%H0G9>`׏ +ovidžL huzh!??UQSo!x-OhU-ą_PrS&+/$C b `Ý9$(9zQScHlaB 44hyFQJK(1]j+i {/Nh?~!`8d~f֫D6Y[]tc"$H؁'YlO+iɖO ʙWs(^H,)L. x2tSުnvXLzJ5.O!(M3%8"}G4]vكsX/)/k0U_Rbn!WRO;8n3IOָOCP ZA'5I?$N*tXif3 ᓽ d`Vd}6SsewÐ5[K#^svO{|hbk#叱) ѣe*`ZcADLE~XEy㽷XVobl7)綱aHIܪۀ.4Ӹ̋z4g'*tcEkkShwni(-'3tn&uL -"O.bC-t2e]4HQ5[T K宽r6QͶAG1cw]: ;%n?bC:EqNc\SXچdH=BLc3>:1կGZKuҰ3NxM^0]3¥fiD]-=VCS˚~n/*mʙ˩ > ;tKa_z--G;V/!PQ*#!qv\Ƿ1388s!b|ڈ,s\Q*uƚefԅ =W(Bƶ+''P ]F +Vvč@LanNR%lw]FT,Ϧ^ɱ{.Ej>uAK{\L s%5˕9p^ǐ_Nʠ`t%sao_5ʴ,YҦ|̡1:: 6dn<{E=c'm[&%pv8iq7;wS?l'h1~VxqpW2A!V3@NVv!*߯0Hޞr^+@ I-õƤWޮ6:m Nf-g3mcxEwݴJ!OphB5 _I]<҈N/maU3#=KzPOP,RU8&|?BÉC-,Q]!EY A28w[Pjg1&`Uv>!I FȦ-.L?|8<&sGȘЭXf+Z=LU[[ Db;iV`VnE_t|C*=}8~Èh5)kT?q=P^R=ĵP[E ErXvEў4s^\irցajPX.&AKY,GD)}_=jڹ\`Zhq'cu XYV_<%K>p- U ,rlдz7HŖ/;1n}&)5TYȸu1޽31sidD6okF2}4q{}BUz2; ڛaP.|;š |&F2x7T 9oAk0Π!͈86{ (ڣ۠0M/qfEZѡhHj-Xuta'zf n~HW ;~O[xB+^y;ө$]p.C87 '+mд1 xzgobG1:")H<ܻ!n[` !<1aU> (\b)0#w;Lv_#4 Tآ=o~XkG[L|E1` 40rUAR"Ws̾J{/ɞ2a+=G;I ymXiZ,Q w1կ&| 2{*p*j#GR~I)"~SēvH.-ET*KVA!a*le#qwr䤳oV< v/W~ Nl#]R=mWoR’cݥBsʤJg13Z"s`n/ MApv\6=B˄Xf¤Y/jy+BCr,eMtMRdP7TU>7K^'=Tޫr1(Nͤ3CJ=Uw×Q%OD&P?4\p[iZ? Y3V` Q((Jd_AJϴI EH8ڬ|Yj 4f(CKѤaO{z6 y% EKB B"K̜T/Is̡azѥ<ʋkfIdxrl6u ڂL2V|SV.8al{&dB~ɢ}2lhuW1N3nY)OGAzH(Pڃ|7?ǟ}{kd!v#aZl5Xjwr\W|Sl\ud&i^-<$9`a (=5CFO*amGe™ $c 6)0R ߵBAs*7)է۠uUǩ-8g'~7ïp5X/t%}iĔfPk4#3.IjJbTҘ:-m5󔆙Vxʼ}P_O:+X{Ioq$mhksUⱦobyޅw_b١ K 7Yd1v*>Y:1w#43Ǭ_撘*`8$`CvKH!I¯]C : f\E+bzR`#cO|s8%srZήg,>Y\vC-acI %E{dPx vT0er]DvFOm7jkK%)~cdixhwM U8"jMIL1DW@20w%]O㦼_~,2h:d Q7^_7h 9^eZ[å<&,l$[9n[QwS|_.jp1AZe4Xi@BgTWB$?p&txt\͇ghy-L*{ޞ3R Q2ǝ=6xZZL hprյwiS43r %2 |pt袉zMOA(`pMЂ./LqVF Sj?w,.$H"d3ǩģ;RWr*?I=1iϏ8gDFs0Nv$s ZxС! :vi+mժ"78HFf ~傔); y<vw(|M>U71 =a!,vH UَzAwD&A\EsrCD2?@Llp ]lIp"mLhz i!~s]$ ј{Ф Q/x3)CPT;+x5`2qD,ѻV-s%epJQ3n7HzZرO\~3P龛˲HrRxI"{Y8o..1jt5y,lHν@QɩKM#VoNF kCNJ+KՌTkLŧ|@ +D";;䋇uPfS`5 u05A$DBL\M]0ߺWƜCJS5FQN6Y7duC=$\ک+| g5wSӧO~P\Od9 K>1*+rdniʬ'|0$N զ2A+g8G Oֶ4+%5%ǜrۖ4*l}RݎD>,V\teg^km֪ ![jxϧ/|G w'QQ]WX58Шykf\:VC GHX@V,cB"^O:]>"Y>3{տA(|' ˟vY4(2<"TS,_ NrQUin G z6)d[tKIJO0g5f:Q#m84w" ( |a!z|+|@|H#8!0~qhX梑's@ڭ7.1i 6bPTE؋ybr<]1Q99"vwyy] @>=AjWYQ 3})N3o{))1sa׺5`Sқ\dK3x+0DbVI8U<7+Cns'wA-@(p3OǗF63-[Iwߟ}5UZtP)mcuU&?mIHO(_RaTDk9Ẍ4z=}C(}6rcD 7ƸC?&n윢[9~Sl` 㠨Puo#ǁc7g7"=2#f60Ut} 8ɇ3LW=xLڄvak5S.by/9stT{`M>rBYW tTϝĒ^ iEd.t&ܧ;͛RwCr*? wQ2{r.%螂 Qpк*&ZemҢB}gӲZ,ݮrZ^P.r 88KKMiUr>FpZ-4LmY8k±G: \6[{rR~tH3]gRF&)n9xҔǶ[nI<fy1gk6\tykW|6“-k$ T>-|]Xh) WQo8kgGypO@ڸ/H):Q}$8ߵ62IaE?Set~dlwr Mn0"bU~ G]ț*H؀Ao|HV;xm^>jVxFd8gHWU2IDleڇ0Cvk{FMegNZPєnllIx.A  pHn[0쪁!pԁ]y*JHZg}82)I\ѓ&ɨȁ]|'yZ)QHk pwm:z#F4)Qb&L ZP4Zb*ãRb1wqMת/GCJ]=kDܻiooOS qՁ+ ;#ܢ` 3|)&y**JoVI9(9gTؕAWg1Mj /[ -S{]GNT(K95,.>r!"t1ϏCz$0uVEPmQ?׳ˆJBVb9lWZ"% ԩYhjt}5<ȈtYPxtGǹzAhqxT"&ѓ2]Jy9i.p!s xUof}Yd2V* VsOKz'݂bEynW+  Mk6e۟3 *X1O6P[ь6pm0k q.4m7$Eo 9j:ņ)^e&GaSSd>_xh/.he3JYb0nL]"B4,{\A|6qxM*)p150snה5_@HrnxWE|%8MX4S>(=rc&\VԬHd$, ng !a#^6"pe%:Q-SX#rU`8z5{c=˹ j;{ۂ~l4 &OD\B0J\ZʶMOdV羭nq{goJ}3Lytk-4ԧ`3UùR3V!XgW5Z=#==hMu*ɤF2LA"z@O+a@B*R!HP-}՞ą|vB]$vϻ}q}RBR=8զ"׃Geg[&`,Հ An"wwRRVWu]ޏeYm2(tT$ӤfS}ewX|<$Տtʭ+^VĀq~0AEJzpwW=32 1$]]!z< CY[A*$`1^+\g GUnU0Q~!U~bX]LdTi׌+HdpzΠC5@X UOb[mp1nnp::0U_wwX 8?}CZ|)FZ| nXXP Mpc- G+i+#D43KN>W<)d4n :^YxYk6_Eb|m=;~ߢ wbnQ~ /݇i"uϖJkΝ &EO_0{iOf!1{ޖޫJxY]Fpyz뱮$ӞI0IsMi5NgQ}g+dKQ䏲mf|rX Q*2 Ahs*j/r W&S|9*^G% 1._c3 %kPm,0SHna2z3D#wé7qm~Z E|P̺g,/ίCBus6@"$v $ k 5`3;!*@M6È }]0(1I^Kr|U-sX;Y5U$#Iq&x4w18s_hVNRIQ+sB(w\`9B6},ĴU?U #*)81V oh>e n&m~m3)xn`F[@Ak@,>h(5?#/j縋<)7`/Cv_)X*xW6EL!7>~xߥ ȯKUgc6lbbr{~#7N |~Jy49%7o-S(KnԡE>~Ϻ)GJ(ᖽq*żԁ -~ZGL:Jʆ߰ES2hf}yS6ư٤M\KIf8q*#)i\b֚n\?dR 7~Qތ۵k(&Fny0WZ GCѹUϥ+ifׄL7RP|˳P}P {_ҖNBG/:!C-j^" 7IZ)ȶ9$ &} a{=Z+7dᬉL+p)bʵb|amφPEނӭ'\Bz+Jwr.(EwҢM9GA! MGȃ'?w+H>Q[ X*mA oK 㹻!Bƻp|ky ֵ}NTkL/ coNl=ٵFK":CK Ztn  )Z$U%^|#0mvBvSHˁ?T7퐑Qc&?"3%} wė$+-< Q_Hr]'fEoJS _1e>7܌o0^6qk# gqp^5uv~AF􃇒'aRL +7>F ̱ScsqG6bU zvI5ώ^Ή)Qx̂s7Q8r9~#gt]tZ%}YȂ ~E5jn0M}TM{T=[ V|`##Žv`CPثJ,ugO8"ՓN(ͦkMݛ{(]x4R@v- M-:Gӷ2+zQ*r_^fPӵ[ąyi{;+ Ԅ9 7Ok`>8vZ]xf ltG 5eNԝ ~vU/{PyHf‡ *ཟLsh5M5a/6R7 ߉QӶ SMW'U綱|nFܐT} fd#X&N0XL8ILdFx*0z[P%y,W! 7OO-oxC4P$DfZM R[9{;F[ڨB`1אH#+G%1vK! zЙK㨓: H-2{~`P4+x"gjӃ丢R=_5XhW')cĻ'\E@b4\G UE&h(LCS=$G@)dǴ+$;9d-ktN/?] pʄ GE;[ sOg.8tJIC͘8icΐdiZ(%f=L@zIy,?ڪeXU)꼌./|/m?Oa]\ h}>\ Z'&g+9} "v7&FB|a:b.*0e[>9gr8cɲ &6kdŎ Pj$wW//,!M=|cH M]Zvsf ^bJv"D˙dաniA% ;07An=O(b)\pa vMl渎C27=aZ'b*F,tbb*(6qޘnsn~88UyS>AK(&Qp7#mE]v;+ZD_@Ă_fN;tgG!HhlBUE@C׾QK51SRL= ꧳;D̢b\ie(Nމd(f s8M-אqWM+,1}t&z2ox;$ᦸ( vPoARVmLWgMF9]\TY>@Uk&n7L"+ 4eO갔 yV4sr7є5Fde|Ub9-;v("?+#,*lr_pTYOWVTAVrN?1@V&p5d%9<+OdޘHyŷK4[Ov?W_7@` OLi֘\7Ξ?~ jƲ* YVa‚3 :mlܭ goN*^ Ȑw/Ҳ=?f.azn'WYWвfdvIvEnX8>c &jTڼR ZO'Kw'IK,ge;--A6zKV;_GֵyeQmRkhd;(N0Z Qe,\42{20@P{ؐ_0"9&2Y[\hCyF^,l\)^F)zeB'j]0׶/Rp-}(iƤ/Ŧ (. W,xLA7 qqF"SdIZpm&1W=[,ejUfu.Õޛad ߠ!t1Uo޼Z1w2[cwa:u!SveV$mosήa xB|'cwT2-OG# س,?ݽkFT$}-w;rdMRE n:cEqd n΂S*1'ዃx/6-_~}0R Sl, ) >ecarZoHkxanL8ßoEWI-~z^fLxQ!TAUk(hY~tǚmAmZPh=)uvLqGj ~@yWG: kUOm V+; z_)g疩3ll $ n0PS0N˲DD4+)B6_92+SeN iDb˨`&"E'>JR Qagw _d"VԾHNY+0is ͚oBTx/ fS:$9U}Į9Ԋj.Z%9);5iONFJ)j:zV͞ 낫JXug(R|.¥#a*XQnNc6_40u$iJaBE$;l^00)vWqyEyHd1uńu#czy<8!lpO]Ӑ<<#bkI $NO*[B,#` {)' -!E{߉1cОЋfP8!xctdeCZ0JHN#UȇAݓa*T)rĮH0{|{A h?ST'Y]" g$x xd[ )`^ZlfmAU%G-Q8&QC_Je=^!i((Bs>2< kD*/rrvRq:Bq)Q2?_߇`.}x&5t ]zUG ӯgȣJSP)?ו|Z%~nIΞSDU#olvh~XAXѪ WA|.x[d+jOWQ'!Qz5*`(Ky?r@ݪ#cjA-~ү5ZR`1\_ЫvJi N0]%F&zBpugzlXb* Pd]Es'Q5{x;u!!tD&;ySnCaJ: (banөRSFڐ0gV? ?#$U2u<+JɫF^Ϩ^N:C-9hHnfmʜ!`6jIjK(I0V/`H3t~Kk != rd#R?Ff;mSqY{/͘mvč|vvCe9VXԿa5AO`C.^n*h\ܒߊjmgۜ 7RV.x'Hp)Y$(.-9tS_򐹼7]C"Jǯ\oܕA=K68Bdy uVXبq> 4+G8Z,@s%YA?ށ~ø sB)Q \fC:ESsu%gg8(]nXc 79G"ɺ<]qgtwkd_7̨i:J B6 Mj\ gO$ CUVYwbLKWLh#l1z5s6Y~C<7Pi ۍ$GdVLf HfVLɇ,qN}q1 H˙Z<:ZZk1>5j/W1?4=4~qygC1TͰω)`"z)"=cG-a_`/~j_"RĠ``f_n<Ê7w!U}fcJ&8*<_H1U !d5ۤ3n53B4h=f'¬;}ՅLBnIv͂ь6i:[kf5jE6Xj/>EC)j4f!M \yz+[*%ӑR¸ fs9?pjΒN,f.0<1%~6"}tԪe-ck2ʩu^`DjPLC9D-B/ZyD-4d_gGhMί_[s rM؎Z 3NȁOIF1s(5(TǤCuoXB,{cfַ / qtFci<jKX+!3Q,oR[DUևlomlѶy2j7a@:xE:S agt#}_@Iξc-`7H]BĿ? O 9c(GCIX2wcHnv BӚ#sf8kBRџ;(Gu-zw/ivwzI$R? KFT2V\KƋ+~61V%U>tVDqy "Dk*ip_PL/n#= h-$ʠFCݑZWIPWI4t%IB;TM w_2FQj7*>i;& Jd'u2D4.&bxX1Fٜs,a3jAsڣC+ۂb9Ǘnz5x# e8Ѹvj='|߯K*K<,EEc0 3{A}nSNS\T>i$ֵ0cCURx1#xJ(0ҝEV:Bar_X"fJeuvK=fC ѝyk+A :ibŦD;`Fmrm|"Wy;VJt:r~)M=Yd&c~\_8ЀZ;כs#`VJsZ|#8< o:Ƅ6YoA:ԧPe i.! \;Rsp^uPlrRoCE~rőN &:ŷt0urs5#{Q`EjI8mGdFHNj|Q ՉI(! qvCj{SC^(fdr8?r2b$ Ll6w0 d!v' ug) 5dў"m˓oq&61oLleWep P|lhMH)BE=W36< Ā8"b-bRoùh^hi\DB1+ #5Xnxb]Tpt&=@7yCJ'R F6YMb5f74Ɠ;ȲNn"a7ȡ); %ԗ*chskRS$ԃHXA;#~Vv2gei8{kFzi`up^ |?MtӐm~YƆv4 ԩg'\ `f~ Ys1pjU9Zո<59 Z-Ɍzr!+oWo\+J'Rc{c>~Vne1oI*,m` L,58}'-=H)[kK ~R oĿSMѷ+Z غNTEN.sIBC;vtV)aqDIOczq 0Nx,ttUXw~Кvx~9[Dk:9&u&xI_k+QFrpb{y|J2@"xo/W&#~3!MA̡~E ,ڨMr{+-ҷTھ븫)q6kӣ7PA{ Tzs$ ۆ3O/qWl."(8"@ #}}ҭfTn#5/q]&f^UX?|}Vi<3,,/C:tEK׃-_Ԫ bJQX ܽ>.?pARPr^ dY1ޞX'M̩n}DKIq RDZnO"EF')iw|$[F>e }R][#b4u9pY? *PGgKtg-1-z9N$U"E{ e g\m.g)!$ГTxP'dz\veufŬyvg (ޏc{rg: ,z7dZj E |@o8;pRMZŝ4Kr%LaU o} H5XfuTXap q^< gzLRoǬ{{lzL$4-MJ+=|~dZ VDw1bJA_Eo M5eIR_˦+GӯѤfCJmM̝c {yؼ5hXv= V woa Ulhoofb=t)oSDզf!߃zS|}ټN>l*zHar_CI T6zb& 4Xn̻W|_4lWJ۽b'D-9ZikX:>X2IKU5`3t;rjI,!Ǜm#L~̃H% Gٺjx*@L4U[Y}wuDiA2E'u0nma;h;^YhkGvꘖ4g/Umx!(EU'd2=9:QVF)H'CGxm~)glALV޾^Z<O] doJAK 2zGc[DK鈚5y9Z(#e[ŝpu>ġ|_ih  BAkN)}%X'P\Ɉ*;uT}fFF{jm6o0i/,*s ;nG4`9+p}~/LU۶ع]aI75$>eF0By^yP**F=βwW8:U(gJv'jRq_K!`5; Gyӑ}eyF" iy錄m.GA8(?H!_l@q/q _X#cE36ܵx4:-FM͂Krۥ Ia,m0/ʨ~r64-%d"i HzFι0݃ IOW<G7f N<"M'ӵD|-1vu6" 3#ܼ5x4K|% [R2[ LS}@rCVAWk`6dۖnF  35tI̷מa``U&X\< G4*-6F7IψC1|ow0Uŕbjf, 27Dum>Ūdl)__ZbA r ͑ 4 %e0|>@T.՜U2I|T鶵׽6>+fKe<' e>=&9Tc5F0,Ovk=Ws-l{5eX :yEJ]sMl MM~Č+JB-ⲣ 5MyUgV' CҜ6<~ I;Djc^;ScnWD=Iʬvc ^ j~>-ړs>AJD\ݮ*yz2gQk4=|b9pLP3Qdw*ɓPwm#Z=oU*qVby;j 'mR:UN*~7!ޟO4P6PwG 5m=vEr\Tx]W&ӈp0_YT]]s*:6 ɆB;nd)$zHݸ£𹳛4O^38o- YbDQSZZU.a9 iܘYA`?ܿcߩb"jC`9JjT.yGJZm0,kc,oWT׬ZU:XzS:ο*c{X?B1I&e@xAe:{4Mvfg'nRP.)΍SSp:×0p ISVd ݗR݇@W HznUQAnUt iW2QC@պ$%1BʰaF."İTP7=M0zɏ'ʜsH^ 3캲;4}.gn *(Y(y)̘ISLj6@yphaAbSge!8p*KRpcUuX%tם:-+ ׯ~ [JL{V0 7h(q;wF#6:wT pJJVxl(6 :Yp*1_Ҹg^y\v9Abi9[}(CJg.fC!%THv3OCDH4d=9;m|KnsfZ8r?uW`$Y+!X/ }= uT.%3rܮktV\^bpKܨ~4yP(xiݥynrF9MЛyx̋|R]6͜OR<{VQ\YP]:y7RrD:BK 7A/`ʥ`q ;ةfۆ"9xqU~1DU/X__1l0+1iו$5(y'"8.Q0$FUJ?&G}Q)7t]??{BAVJH,.PJ#kq~h[B=H 8' ?#gQGK?rFQBֻ jz7w䱵F*lghp q_% w:¨mZX#+w[|Z|8W''m £Qtn/ Am;xhEWw]U#t$IYS%APK! g؞ [\ ܐ銛04JWnT!/ y-a%].tp\Cg(4]=G9ⵁtC-bgVAkS$ݕ-Z͐ Amv6klu /6 ${W@4D=ECnl4yD۫%J|'9\ye9RTDG4dho(|ay/]A ;knz$s~-VQ]PD!pb<T堕2o?{.80m*M&XAG+41R% kw 8 yA$~çٜ706ثG,*^˞;Izg8ѳDV yE8|6 %e4 [Ӳ)otHskƹ'dWo1Hj;*mxbedǝb=WZ.`F\^0V難Vtebl9,Qe+˖5_sWՖݡ2~dy9j|ʔ4FmK8Ăy.brkD&mċ:^ML<2>j:&Xas L5`(5K@5Edg`^wK_ & JśW=I}Ag؄b" /`g/trűwV9GyQB)q1% {,u.BH6LԻ5:D4QO_ήw>i BØGmF%_`;BxĬ1̽n;:##(E (o:"K{a]D 2&z <&$ReEωi[[z@TYּGc5,2(*u!U2&0ap8/6Of^AH5B53ojI(2Tіfڱ2jMU3Z6vسA#v;_3C1N$u x|ҁg?t:L{L",Z"cƿeiY0µ.rޠGVfȩ<fHMO/Wca4'U\ CTrÖ,odz2JRXc($mWZ{b`\S1a6HI󯐠jꉶщ%#yMNLpZGr!\F٥FO~G^[)#1q$HvHP g@+kANfc˂?QB-Ո+$[ A(N28tmc48?xW}*8uDVhf#!zLC9 #gǰxsM3'svKjb4^3'cˢL݄=SF/wmн<(uH];V[x[9cc6ZDTI)YХcb`"DH| z}U !i6^jʣO, z]*.ASkhRkB%ӴJ~=d 3,}їƨZs_);lf5ja4xϙ31e9hC%LuTb+;n^7Bj(LDeTݚ_jɨ+kՌX@rN`A;SN阝Ddk`2ɠ5Fyw=N1gTT- `25dqVS*xnW MCVNm,'Ilh㩽鱦fiCu?pڑ8 jJ]+g~N>˨HӫTaXV)r$ޫҫ|5;}Zڨ3Ty."U YBaƋo?8.'ͦM1#EB`,4"iXwqbpGGgdW ~8x(K#Ί,=3ǬXH XX(nH?b/D3b"@2+R= JF-k!75~ dNG_Ș`?ޖZO*)m&ZHPq,Z*sÉ HN8Sy&vwTѸop/(G 9=Grns?JP2Uze[ƾhE{fޑ\_z*SL< 9U58*`_K?PmKpppNp׸A~CDH ,UŁW x;mq)ܮN[ƘU. <aӄE'.uG$3f@{YsTkg 3C3C(tqѳgI1P6R,<':%.Oݘ dUWvMMJ#)hpsb1fQ7+ߗ gz;ToZD=N]EeZv0ݨ rM;$ug=j PN e KT}({hlai"iB$:z X$jyAۆ0BH8ܩ7Q8׿SS+f?b%d϶y/"r{ٲ@[cM|tQ bxcM*POH/J#h"K+m%:1oPz'щ_H`zKi^b$) ֵ̻ǫNxh/^4.fWj7Vh<± *_/` H_o.\<\3 "Nd/o?D/you uxMS#?M5TȆ(aC{q̆IbGhƬ竄Pw*3ԅ.oJ{t&;L{6Ru-5W=SuWg2U,]702%/4$(ڰ{*ܩ u2\x)Muw{;۫areDE}.gZ g)ZrX-p)9|LG ͖ms {\O0{[l"*/$ 6˦ fQS[MpNa{3lCSvlVoȷ6:^խ4BPzl}!fH=KJ;lX!r| &2W: [z+<@N.d۱Lj#n/xC r0Ƅz^*˸D1;FBlJ`;{ϧM-V۷1ߎuuK~A㞻?">u(Zψ&$nS坫WSgp~A $H_)&6*|M-["|I+kuVaًg. XU{eK3$F/[ldlq1B}6a6z+љ!5[jsPut,cFo5HjMͦﮕ8,'hAh>N[jk{hf^D*K7i,hXd5o(HP:p jZm#0S?,3EQO̯{v4 3.h԰ά)tq&`񲜧F KUcP ۧ=*DWSSh3*bVqI;-޺p9CY Y@7`YTȃրuPE*W Q}t 2.3M 8`/[rkc4ۨ!];$^r딏 b(>E$LrVZgj`S$jlnRg򱠼z ^vfyt\]1Ǧ/?NICԄwb$jixUl# sgU$*&Rm<Ձf#%nsq!h{C6MYCnF@86K7vS7M}_P],e]Y?&{HAjeCߏ<;<o| O>bߒiv >Jpۭẓ1*lm3R"ʲ78sʏSlF2pP!M,{eD GȎy P \YU-"8Q:h*p`>DbDp +b@YߊZ,l8YBNIbTϑkNSzĐ\ a1e8dz?A ЙUk ը]f[o\vA耗jjʆ$vQ9 ?  [K")ɱq{n0z^EC>v ~-ƷYQJq\:c"usUq^!|wr4-{Р5@jJ,0*E#u;ڻ#`=_מ~nNBcrŬ]ՌR"0 ^%XORn+K7+t! ],GgŅ?7 j@~x U=]2ەb퇶QF;L!%wX}POZu%'^G4i DңZ/oZ]P^Zv=1AWnJa]];+G74䜤1m*yCXu%.la]J >x<5O+g}ϛϋ JhZLhW #vf6GJ;zݪ5[|W3O+EVzUF5 z`Ib=E h9%$k>7 P k탤"<a<0>YFł~Q͆p.4po)6/:m(J>U+r,jn?&.ȣV4ܐlL'~Q|ޜ/eNOL(pڻdjml&X<; `E‘)`gMv@,T0',ST 79- "d%}J*W E d;N^wӔ5$׋53gO+WfT4Z`"]/ݖƌj;9F]܂JI`juLX*`dcDq(} uDt _X}Q U-kɸA\D П8y^BaU_&[Zã/OS*xI\5 0U0 2o|BZ6DYo OS,~N]qS@cI(pvV?C kB1)N .Q۔j+fa[TZpQ4@d6>$@ҧu9@^(N^goJ˽]? m 2 S~]TKzYmjֺ"+5z~SԢ ⓌemWouFIj<"^xQt5Es^2Fmls#4F.1 xHG2C:nĭ(+w|+?J^)3ս"9L{KxCO5skJܘ'MPϚgJڢ0#"'2^No}R J2R{s싅7xg\yh/lj $?\:[*t:IO @uҟwFYnͰ)}k^J)^G: |"j[ʏ7o'3Z0 ;!x7wG?6F@`lKj97N(:oƛA5*E(93Dr+:΢a54V Gm8a=p\Xޜ9sPoPrSNGL!I- =Q#օ|^i\':ONj~ˣ +|hmÀ-%- c)mR2AnاnelB~J&=Mn9;79.AjLr*1D}~!EƦ{J_&o:IiL?WFa^#xS->{xco\HcEjiCM5)c<0;*1#NZ%ɍ@c&|^ՒjqL}9*ϩˬZ&kN*:-72f*TY%8zoJQ-c@ tK+=v 6jzO}9sd"o]`jmCWc %P9굒-OGI=~5Yz)&whKИ̲{+&d,\mҙ\}f6BS?EF ٫x&x P;i F_kqCu8aEHYyx+,?kHsYv!^p͊XЋ$H'Uv lTc\ş}aGPef3 Wy'!a< <8"HyAǭ!z|ӂHov3׭.pB^*Qű*l%QXa|4WKHf$\ V|&r2]쀵C'$ݏ^Z[ _M7uK!&@u "$;Bi 6JH_9?)p ۻc:BٓN(8V)Lm]NVV&(9F/+-\5I,za&<4FabӁHĝoDžƘ%!2U޸0F^)4#e8 Huu 6&ފƥ ͶԋݢxFqmc*qBSs:؋L f$%3EA_i2ء fs:ٝV$ï01Y4 Ϫd0~MjI$if3Xcio1϶]nN]HkVꅦƑ>)z9`o2b(}XnFlZcFX*MKSj n0zǢ DŽ0N!YRl1;5~C-!6 [,(Q< 'Kො:d^}+0{ٷXZ 1=bIk!|<=nz:SWݬe'q@F$~e[Q%վ*_xd++4R~ڤ蝖}Q Ti3y|H}{O\<HP \Ĺr0rzzea;C Ζq*C/R30Z(VJy^CܿB27o(>@ҾNnEX=pnur{9-t2:D nkZQuP1MCXEyFskO ز8ϛ=ol (b'I KG/]wDkT&͙$VIh>3$"Fbu*y.{! SR\0"CJxlN<۷ƶz b6d+2 `hI+ =囀t[.ʸ/+eՙ{t r9)6&t* nyfh]d b=CE /D)Ҵ>0$V&ZKT{kJDiŲreo&p_Х@b< sCdl~Q`J¿&Ɇ7|)J5ɗi:8%K!VzRn(lo{P~^2zFpPghNkorDRHA܃!,#u̐^ޗ}?Ɵ|K`kK(W}N2\(e,4/Ÿ TfiK Hiڋ!w/߫-Kc#̽ V Ty$|ffh5'{;]z!Ұ M=fnT[RU8*as*ntY9y2~D,`sX%ߠjLD`s%/-@$֚B*$S{٘1_.\ZB>h96eDOe[bw>(ز^u{R$96x +/^:͗^Oo >pZ=N1aP1T(*Q"YڦQZvA9mA 96\ VO<'ҽsyJdҎcWhOWlJJMSa:7F 2ҁv]63N~0WٲOPBǭ 6 C|SG5-"v 2,5O~5 OD[h^9L".xmN 8V#$,0Ӷ! ukϒ_U_Hws/|h+&BA+&#l*~J5#9Yzb9躴Uh;A'ߗ2JwVtk+bw#G˟%C)sFIu ?\GIVWKMvbpӠ"hH n]wІNfCj>'O} $lWEAYrG=|5K ~ڼ{$h/䅞d (ش))mq'p '35PQTPJvM_Jՙg̳ 5]$ XIDXi!*Qg'WSG%kY*yw.3Xӽk}k|a-Uޖ@F`Wrwf-l"'Bw\FaKs@ya֪볳;d%ڀ^ D8re*"w]vΔDŽY{OJݍ©VnpsLzIs(<"8ꌣ p_[8[+oX8{,Cp_xEy7m1ўO|ތIANQHL|? S#qn7s{f5}󜜲yUyx{dGɀp.TDbzw4/"8 DjѦYj&_DdQ1oh(wJ8حZ#ьuǺ"Aj.+9{ʣ>X>NfBc@ WתJYklRd;%Ip MJqP|pt`N>} U:u6YP6 /F"ԬcAkBan`m,,q[H=Eb2c!irM9vܪS E8Rwm/ca^{fV 3ɐjr=}lE&A4K(sШIN? [V>DѴ(żR0QGy6sCOh+DC JЪ-qk3cb b&NjtԌ(3 Rvp>[*UAe>JR&&"iBޕ {?icDHFi?j`P;)Y8fX\פ K&j="%0M{dgVe]iJlg]66.{MMahYVBYBT/]ZZǧ8.A ̜,,ףVoQmU܇JCfIG Xe'FC3qIga2vU$XX@?AJt=ai6 ur躘uI޼%|R=&"OI|'+ q=&)n؇*"HN{S\#BWo>U3aMoل"Cm)7 qUHɻ{:_F/tH1fqՈsRեvr)eI ApϓJ[|˗u`R̻o$}*҈ eă(1XKҘ~W#/B xa7GH8i]@7G+2dFk9D̍d %I?q<*E^w:Oe'5Y`0c >l.$ !]&`D8-g-E/i֢Aq-Jjtřn}9,7H_?7{Y`e"Cl3bġڦ}"5MS#gv+rPsr2VG==3e($UOEd] b֑tb2d4Z+S4TGy@ybh~;)tZA ygx0mm !V̮H)eCoڟtJҿȖ&AqyF -mu?TVC K|^ۜ/4# H}MqPZ8 6IUmа7;)5ZƅT%Ee\Z2Fܙ.*6>cvz.)M,E ^n@sbsHM8'} {[%{jʕ^7@1NݺAl ҳFFUJ/vUu᱗Ona& Mj[ֈq%(PPu L9PRGj@d_vhykUzgD)N5Q0JNjQp@6=?'1$Pܼ>|Rv:H`I4}KHjIK}%fZ~ۅnI5zZm)_j t k2WRCfe-hAs8v Mݜe3TOm!YicFA6R\''% }x!Z R~aW\Xu]R~0(knr'Er1UKpؚKԟ^PydO %,v.K9۬">R=vڱ|7LXA (hu:08 E˖S Mi^ [U&A.gM^DB^ASfVaBz+CItP( W˂-H+];O+,.ݥfY'_y)^~yvm=YVD/Yf+yf3 bL"eيl*lU, oJ~_Phͱ@6BJ*0!9./̟p3!2Y^'GkFj֯KVi"h; jnl9zg#4^5]MOjCh: -άEwu4+.'Nbuvsv9K 6xY/I'%« ̜Ίk qil,Z ʸk72ZG:!M&U؈xMb0=w. ˢfnN>(X;̶+Tbfqcml}jw A`zk+b dR%9ч48ƫW)pROTj.g:s7#Nw[>ͼ?*f]E&F9\ dE;]]qhBیQAj^]9M5= 6A>T7On:)#ģŭpyski&Jt{BkvO%D6(πrh Ws(eF$xA"O\qtlC; D`Tio_:O#XX .69QvD%T=h`KRw*ÒTCecnA놇?ol-ub.bi! ^gWWif.!}Tq! a$K8S#M|BnLSCq-LO&)e*Wϙ]kKXRRM)2sed5wh죐`^ ᛸ]UHoΫD2=o@%@{Lh/, eC9j h.S5Ŧd)8V!לTxi) {Q_hL5}Bh gO9J$Ni=^w N?L;&.31uUZ /WuM0sK 7 YBؕ<=ZݭQ'L4϶tmcO5gDMqt4H[pI+*}(q ۯi]d*E>r|yH {ztSٝ2r8wU+~waжltxFnpQljLO'c4,jLm$r>F ύ$c N1}\/q`'lpvia nL'AIsѲXlݸ]~~cO Hޕ R׍*yFY еe%=I1iσ.1CFN.8b3n1. ?|NY\hؙq!7`/'DD`|6Mɒ7Y |Rݎq㯹KiO~yOOcGCċLPzrظZ\"C bݏdv"BE V\?n9* ~e:X! 報)УkriKy5 0( S$:iFvTD}j[G]NVf&N䦕GR@)sTBLPVFsC#ao9~LLJPک_Ėxfk;HO8Cma!v!C!_Ma,+/@dqF*nÑ1 Q(nfIv3-y``AeR <ܨ7qrP  NJ*OUU`D;^߭ &zxw.7$IS("jLo,}Y$K rH ~׭)j59-Yt}XL¼+41`SPN1[޶zyo,cd;,mb1üX@JۤxmN Bs"N|J`觊B@]}ՖCx0qu6 ?v1BxY!SS/O$#+EԦڡ)`:ʯ\Fk9#>ƿN4HFs!JaV;eHiiWJip) o wL1#tt'B0I1ZH-<-`z44Aࠤfy \=11N5\189&LɀBC6 8>0K3yRla=ym+# w¾'ǖ̫V(ZHS%F*+~`0Dw1?s17vJ>'1 D5_ iEsS05 ?J[LuDW({{Nجlk2"cGqm}VSYb OqoYy\()rܼDǷ$\ATd(Uq^ٹaOx!Xݠ XvFg>vn9`Kt=bwM͙K>M[~vDJZ'Raௐƚ&! ^´-WhCop{9 A lY{H_a8f͌i:.sa?F,?W]%Fh5'9O/F͔ A,DI23^]L@hLڑXzƷyQAl9@+Ca#GAr2M9R" SmV]^O3Ȫ8PMu,Q;Sd CBIw*pC5WF$=A9'cڐx6й7.-̦-Ĺ1 vQ9(C]Gr.Ŗ̓_Bi@`m?89-Љ)EEe6Qy؀ﳑQo?Ë6DD{]~lJ§Y.]i0[2 } @L5''. wsmUoNFjU" ZU{o>WnqlQy7ݙJ-73mYRDC[^<г!kͳϨތUsjVJqpQ(Q Nߒ".9X$K4/5q J#H}wőy⏵_z@V' |c~]E:(}Vt]y^`񤊨JF|lBfe{ț/a- ί)ڼ$((72|rYK"/n~_ռ2_o"ho)v8J#`n;v-sS;G~E9pU1i95dpiX(l!$"sɪEU zWw,wm]ޭ{#kgLCDV3xa%enpV/ Rϖ8]g7g[׷0>TUlܙJ Bexz[`^Њ[Q6p2=ٙxXy  $k)7~<%v Wf2r4eD&=YI_ɎVnL1.W[.R&0{׎D[! ^wr+ vj)rgstC'NhG׵ ?0bmKLZm#D>Mt)3D`8xOZo÷ڈ-@iZa`!阸Gі%nǥn΋xڅa=Uw,4 w% Q0c{2~W=#OQt`Ł6Uip9I4Vǘ;\y]uܽ(sѓ&~mL:Vh'(%X񛴚Mig;6"0zZo87n K5y#|r+T-M(K*b~;,-ШH*Vq4m2 Nvq:p4HoX9w".ss]5FνGi*<8.6z(6nԝ zW CR'RU V#}E{4'ƐBɛøFf~b ?jH2a/]n)N "aO 4Sbe\zdZB؅F|(TZ?FBjymG$R'"ʱ?%8}}T+:ôVvuLùԆ+Q#6Mf8FIL,VcyD>nf,S177 yѷU^pЎɕo,8/۸!.c7V,P(BX{cV}Tj +N;6V!ua74 >hh BҫŊIc\%51%H݋`ene5[XM',2ezQ8 k򤹔*ȎXba ^0/W!`|8π,yHhӗqf{T`u i՞۬RSOpJ@ 2τ`nE /}0=^:(ӵ)'}b͖@d$GQRgsgLu3u.™eކni@p\,5"8~ YtVuԃau dCv%:[lq ю*sb=E^{Y} M$>'df!b~0J xg ['ڬă>1(_+k[bjyPMۡzg*$,pȐ3إUȲqבK~c!$&3^ i `̓G#"bf$Uv>N8D@9HĬgQ헹 )bԱf~7SlzIhq^-\bNYzpCKgM:X+0s9+)f4+\cNӾR .: 0IR@T6iEqtH8s|ttF-)D2++f[Q;Din5};RU3QH*+CƙHp,u>T"& )dKW+%3 OWP.z8jh1>[[B31 G]?l(Vy:"FwcO#uc߻$aVKR#*ug?5y=*`6ٿf>6U3#E4avDZE)w qm=~ϰe񼣑]J:}\zh=8We ՘&58ZYBS7LL.DdP_J %ރa b7I\WxǙ'rS5a~3B#6[ɣd]68_ ȯQѳ>2:lI͂hlE]O[:h[tK䁟$*h;^+/a,017IED|L& !HAvl|%Q !! YN16H)2\26AU윮4{pri!ov# ?XPeYGYB"ɘKp&ފ]?ncܲVY/SVDp,砗ͫH(ABnto@6hǻN `&YN8[ 3x7}StLn$}*[_Fxyfm"SF[/,AabԵC^HMy x(-:ymgC>yN_]l =]2aLdp\P[)p{fvr{ْlTAw嚩8q&iG i;BCTW# KCD*̚Hb4[t6;s%3Բ}n Zg{SH8$J[#jObn+|nX&olSJeiˌ͵+9:[dMYkgwp]y*|!͏5*dD7l̞6glRy7yJ>a ԏ` fV%X<>ۥm2tu2kH[vʁϽWN3J=*;[z)喖$h1a3 um׳#px۝'dқWR&u^'eTΧ vom0S89E¦-% yͣ#6ٱ˫ JG%r ,_#텃Xc!H.G2ɣaCK`9 a-R޶w:6UGTʵPX6m>~mk_˲>3X4\#i-J]hϹnCN]W`n רxMED~#c`ɬ[dgwlgǣ]oԼݹ z?[}5t [Vsm Bu4b;{ _= ك /+hՇH[N0H!8m~Hv1B&;A tTvɮoo0 ^A#Q~!ϙoFC=%'*<`ĝ};&qfkݞyфw0'-_E$*e1vU~ aߦ'E$_ލsY:Ȟ2LNL8ϥE3~I@դ;{`?0l%Ռ>a7ՑFcbV=ǃ2Ѭ`JB(~aIVܥW^MzM;x^(˟ZPY(xU)2lsd\]tMs[i#@=*>jM"k+T&yø6q}q΍?.L?Ǟƹk,G2~<-14^jHŅg(#~ R44t\5+hΔ3cӫ3lBhyj9r}rc)O` XpM"E~L”`louH SΫ"S#!&me=FԘ7wuim3mHidpјQ]~R=~5]zaÆP^A2qWd^|J:"YZcE]MT[6ռA ?t+ 8«X⻻W$9Gp 呝 Z.&l9"@%7D2p`cJOm~k9ŘuU0=Q;*F0Qcx'R6DU7]#,D׮gZ Y!2M;4 ?`TP5Pu?X[1J= EY}DW%}k:>^UNj[=U%s]pn:WlgKҹ-8?8& d>'Of+-JM-+*oU$/<_Tܲs.A;XHCXbeTckIKfz :<;TZkˮ(XgO&M$n\AO仳 lsKA<Ψ(7C.W~ʬa$ygL`>0I6Bb&o-yKp8j=2#|Ll (S@jw?XQ91zXN]19sڇc8#)JC,AYQ81)6dLyl[jZ&VƧja[NöYDwfEEw ,n΂T-t+l'Hi j@oD }7kEs&W7߽m~ #.xs;*4:,cn?E@X&Q_rJn"C+xv$oHs*ĕ?{ &CY ڽ# g~csyzi>^I'6hHNi!Q]r0=cT1< @@GG2XRz󨆠qVh{+7L0 mx7cPHCF 15|h(8`ܑ#U1tY -*?pQ&E> Y$ \&/`(Cj>5(f]ZfC!h7DHXLy)F߬?AEj2k!& $׌e[j2O|g1gݬud*иd)bl+o\͜:- ]CS#,NIp}lEcfayQK״{'%+΃o+phZơ1&&yHޖv||] [:/V\TS|]Qi OP%_VuM]_~_ed/]˓-TK-O1lKNO5rJ:,`F_s UB-5;L=3X+!K ذmC_RIi!/hV?!=`}K;%nt{+ݍ@bY7 ¹PgUc߽q`bExs׭n ֶj@*-Ah<4 3qn erUnqD NIe&$}޵6}@{RʚP{;,'JSpg)h7V Ybi8F 6~hi`,Sw?F;x&t{Ӏj|#=?] b`^E@)J-Ǝ579𶩘ۄ ,t5</0$r!#5墇"t!.ua$sV dy'A?\Tm_ވ-٦/sYY8\펆`Z [g$<@wMp%eaN}\;~/X{M=_{LJt)v0lmwuΖ/)knf |"YmvT\Ʉ9Ӷptz{S) h9_ݻIb= , ЯnM>!3-lz/щon}@L u!6#eADz|xڤ ne;@P2&'PO]`uER\y)rsc_ i5Oп&ՙrBl2XKlu(-MS} e,%1=0V\(@gדuj=tƠ#tz=uCvE8A[١<|/Z]?KӳD2K>ouÅLYʷ%}~Ȟ3VՀeGTylȥpl"3{dk)p0.=a.^Dkb>ǂ&MUCjLzbۓ m wv9ݡb|ɚg1,Ht8P @}ꂒ1%kCgc} ~2*Pt/(dRGl7/ѯf"ĵ9)'*m᧰޻+ms!6}_^iSb5V|N[k:Ca07m \GE*e(Ffڦі "ʿWXpn6%XVnC}B6_Utv\IԤ"gjzh%U @EJ꧕g,Sv0u1r( v(4[Di(r<v#%*kv #B)y3SyFt%w^* s45Q( ;GQ:v{MOh=) ߰|ruϝAر ʭw Fu`CWtΊ҂-"l?_YA #pLYIJ]FvlZ|HU79J #8 RJaate2.2CC3uQs;+,Е`JG'd4Zk|hg0yܟZ2s۟Ƭsa~xXf}1Qo~ɻHHNE [PV'TiH 5MhjfXǐ2_lʤNTN~S50I'RwKc]^[ZNp-T$mPxYj#.^ iXIfmlwQQabbI"ij`9]ҋOx{1o#S#&rJAg/HY<ϻks0cEX -wqeb#WǓffLi)qW eI;dH砠ڸ?RU+JmOmu"Q xq;҄w3i:?f&nhoA1Jie 9pgb|eF(: <y~`p =t$E-f=uAKʝ"@aai>e!mhwr:R˭#X7qddbt3e{#I;JxMdM]q@~j#DW797$2%70 9~W1~=3&v;;X6GQW;5#Zߧxkb[;JhBGI֜2'ٓҋ+@|Hw3B*Ժ'Z-)^դn^k7(DrGa+n\с&cQNX0ul H6=U#YBϻNkĔu ufh΍^𦯌z!u-Cqɐvuq2b? 'F@$؁Ͽmݎe-$O@y )џ"gƤ+\3c&OU*VKdV;BL(r,b/r\+_O>~P1h|:s'ϛ)Lݐ_%:rp1bJp g%M.")BmB_Ӵ1:#j3+TcBۻA[JI$v ;6Of'kVT\okKk,o,[@v#xE]tEOo~Zc| %KbVQE-9ghȞ%d\`iXU?ZgcK#Grh84 ZeWKp];  _uA8}О Bg15Z9!KgMhWMA:vCNuTG>Jz0tXrS7ٷ"@(>\'h6KOEU"!| i,hq aⰬcxaN2fݞZ].:%T%E֎Tޅ)}+VV,gnk@Jx0qK$R3zF Đp(| 8qǁ UtFx.Wk9Ď7vu"}ŏ 03Rj;EM3/h&l##+ 09p;PN]<1M_>ܓ^blIQ%ս*FwT#dy 7W#EVj>N/fd7;ZY_I[*٭Ԥ /h=G{u5T=HK{~J-YCj_ -o>"!|䣤u-A6i+Ax~"{!9ZFB 03EQͨ'2ŽIzrfdo$:*r1CJu01kV+i]xSDYš&9z#/^Pm?Gbw(nߓl;drQ zKpH0H't3@Ie~{W`T(1be(ـH&6{Bi}||r1P&hscϓbvg\?Pr!4uy!qdJmI*k愦SѶvW D?U(Qf!wWLx2 w{89 Bc ZFZ0qg(Ti./1'Af@ʹRyzQ+E~7,x7-ApGq^ v.9_yTȟR%Kg!Kz1,ѯrLaiwl퉭XDe9rܔ&:Lw=YWUnLwaK*7s}'Uշ'd@gD)`=HPqgnÐYXZBU\,Xr|pyGb]9A$k\4C=>k:9RK9t8ۢzg"Eu*x0C_nFw[t0S3W%k$e^ZY\q$-D#Ug5bAWKfziحC굯rz~1ϪT;Uܨ4 ҫ2jϑG(庺91C-cR,W Y!>Lt<71fG GoӜɯӤ] ,='+qAG[ KŹ鄣8@ =.-E+0) 'nL&9.(ueJH;у{WOpħb1IتBF,o*x`GTm*/4QQ4%Josv xm;OHtQdFm†ד&G\l?FoXLޚl:#Xf-fxC;[8?;˾CP4-nWsسW'ME G 0N@doEgo鴣_֨L18ܮrۻg"(y vNdFE **fDsA.hFZ5 a1 t|ӣ=NGq19RJgP( ,cЙA/4@8j|Bhz׆[wihPSCP۶:CaNߝVz~h$X0C5#:+H&o>'0yS$~L4з+:avf|Freq=*zv! RO|H~u뻍}bַXZ2TӋcj&j81._QhǒJ`ӵ|ݱLY1'* 4L ʙN^7=;8 O5)6"'IQEpO mR5< 7ԭ>U=\T]3uϣ߱) Egb7moL 冱t$V,ϐϙ{;AT (v6xsPb<`(t aʁMfې&Q܅ ;{ω nNZ6"uy'+v9[}zw>nj}O-.)e'`n*A>Z4Cö΄&/;6gnkygL)VeTZR%[]$2+K1{t ɒ)"ml+.O14>YX>L~%2pɳ* *{}( g]&WNWDǜ_5䁦),drl ہ;$0S%F#\r85͓y0D4@<) سES7?fD*.YSaT"nOJD՚w?k4`Xxj!"0M c[(Dl:C6tjC{ķ癘fJ뱑![JK.йbuxűN(Nn+V2y_(oB"퀋 K`E D1J^5)/D F~ˢK>4 !+ZGy@굼dŔIW:%hu T!zs4d :mfF#pq8vDd2G>oǑlX/Ȁ*Sj_3h2W\$9ٞW[kb8\Ӊ=To^^9 ܶ#3%@5ǯ.qrls9FŰOZm 7L,!׽AV kL&cYW1#_|n-t5z $%^B|3GJ"j k۸:ȼΜ)=&OltEf4Q1ab`;n/lhWj!I>)d,k+`ߖJ~:QR8B l!15w# :Lz~۷2(e|NFX˒E!A@Fox ,Y?aɄTK[>C]lqpdf/sR7&VCËK(j6)zĪCW|Y],gX9B5(R|֝`AETrlNUbH;FOQHq7w mW"ՋD 9VvtkaE<z܉1yRd⡛f/[S>+~(,? u=,k5cGٕHrL1jBS-sx+E#Wʇ_Gѳ)E$:IeS %Xͳs,EkqOxų$24IGG ǚR7$yҦ Z8JI544Z5PɊ*\:Dh?d]P7ϧo*QMD/ʲ7Xŧw"?7gTQњ\zRtg[Rr}v|(_OK7čR0=ek ֦Ds/FxuFjYwtVA\d[b9YM'/kv&T5 y6GKf~a-7l UڊM, `-xa[yq8>^&9oab5CWŽ+V-c2mxЫ IF)HCr% GԍJRKS,&G}-TD0PJmŋ{68XW!t)Xx8܈Ayp^ cPBx)ν obE.\;z- tC @R357} U`. |,Rv C'Ub|ޯS!ʜYpЇ9uK2(!mT242~qK=ДvI(g䰵. ȕo4WwJC=W.d&2xIO ;U;B_V7Zyqͪ_GSgw#OzdI:KMc4-   bEM v Q^ܹsԦC+<0LWVgok; L9SOf'ߧ"1/0&CA71?GI\AIsx$3-uL[3etks?JW7 3hldzj^]-?[tiAbς5o"M wW <'ئ3^c 5c$#~``bk\b :Tf!3v+uB4=_m6OGfbjT4.M;NΔ%} =K/p>:;>S{IyTamV#oi' YpX1)Bßn҇]`[z3޳pH8uR9|Ÿ\{&hpEk;K$IV8sN|VJkG̉dcӲF;&N+)jS.yV~`Rk5)K94rnju,|~:E_82Pe7Vi. 0Ofk.ytփvHoG[?W13\6D y-Rbi"r뢊lOMWZ%Sq>7VqyMEm-"8uᔿnڌTOGPy\p Z0k7!7yŢ Kݑle\PDt\d1 #s;irzSA29fh%'ݦfϤ/ ݰFr_ѶjL3wi$J.7TEɨ~$.J`8Be V[])l [ k3ޱLHaBTQ 9V5Dk[SZuW8X6dpߦt_UJ|H򘂃rܜAS8+ pQjpS:`I$k0o3U,6wsy+.߃d|>`koWWJ ۹Q~^q)y;Ĥ<%JeەD;mx y}*zd'DlA["b t4@ʸ?\@ 1<OlTdb;&ymVEm\RȵCPllSb(Iĵ'b7^mJF@;t`RcKja{ okρ+H%ʺs R) tcu<j]9 `Ss".Dސ8t3Z~$\^2Z[1G#i#Q3WOΊ^x8oI?7h=|(^s;1oAYkYCTc0A O=w Cz´&*Lm6럫@f f%zD) C6#A]52W7i( L[{685]J7p;-%iM_ W9TvۮJL撤Ì yzKI ='kVlXzϊ|u5>rtb⏱O*ͽ`SJw.1;a/]W;={rnun\ОfH=b愝8ʵG(~BY%7YLߵ UΕ\9m囊j ˿WIJ"3$#tv, DZSHEn':ơ^o\tLi<-jCA݂\ KHI#; MN.S,t2 P8ÚzoGwJvnaiT% 6]S w覚 r7ߊx\42CR:ֿ"$!OX񦪅y{mj37hj<%Jr&)g҈92*%G+`"RL=Xiown/2(&.V=3Sna-B'4[tC9abhsԳٴ=)E:2&ْآ˿ })/BM lR7! 8]w%ү1kN/QM&"}³3N%!~JR"Y+zMw[Y:yi:PIOܳ@4h 9ӣ`<<-9ц!=Vähc!{>-T/uׅLh9.ڊ̆+VH/yǤ^$*X5ֹ˹귒 @%c4:AMT~,ar<M{ j]_Pl.L:y~m_P+'xinӹa %Tg PASyΩ\;^;+S8\ XUFgZ@M8Wix `<}HWl6]X"Z?{a\('C.c<]LmZp0I6V  H%|>Pڿ UJHi$ދr!hĂ$["s5<7mW.?% $ȶcD/d_+Q1."o([m yEFKD??lH+j(OV*!?O[c04ab! q7 76!nF L֔N^!sqW6F@p@@?Q ո+;)4s7.(TBrK/YܣhURK!%NS pC$%LڮsYfž4F+##Z6nҪxxL6z ݙxR3b.A"epaR0 6)6Ei I12-׏~RDۃSD,PR}#J@^-1ٍnsuq.̽,V )2<28l߲gGmd,11Q*e 0|RA糧4ń! "#*pЎc_ڏͩܬ Re!TY sk8a#Oakz?hBڀ/gӚZ*Tĸuݪwz=XP Z q3\?!&8`~ɤ]N{CPq.2΀N*HHAR¶$#` X`>@N~#"Z2jQ/rx7e[w L8q޷x32 QX¢7ҁyog_;[o\S]va'&8zW#ryRg`SCB5 &:-]P.DbIC=iBtCWZ&EveRVG!5fEqg?﫬dG`Y.Έ9py`"`uok@{wLv1h7TS]~A"NqʨK3r>mlkPV%IDfȎR7ä)=vrfp4q$rC"tP0 3C 7}UY کq\[U<>_(zG?b2`RSfG61D);>'B&t@ƘP#׼;hz^K8bt07{R4a{(opӓkSM0!IEE_Hۈ +إ4:#$jե62On ahN7›-p{36}U߬[GUBKAxANP&K&[<}0YPooW>+\']$=vPevQv_{S&SA\k@؁ T{3ޙuE~ZrE&NFPAC4[p۶urX"d kD80K*E&"=0Ώ6:,0uWAPnw>1dqW6$[:ÛyI>(uJ4?%ǝFH3R&ta O&]HY%'.s`H\/X~[ޤy0L%ֲoWN|w0ߩS hPyը>n# ]V4$>UYbvQʢAbY8-`˝/n9@  NAyO X39ɲȭia6P$,giW ϐ&wQDJ/2m| 0M9=J'SiǃGB/THxWJqqG?M%rǚg e * J_.u Etɨˣ| 8nTA J߼(Ui; 6 r7kؕ7 ؓ2T2jq%m,ڄIfT濼2U~Zolm-Y7q$5tnWErژ4ǂ""XI20KWZn{/I]n\N77`Xڙ|ZRg,Q&S B)F0Br09kiq*.;sc6QAec`V:'J]J " )4ݏKHEL`p^Dmx5 : ϏTNa̢0`QN{JGff/ƇXO /dRV0m'ߒX饻 ǧvސivJqjH|]ԢD*buA k,k͵n>(ekIHhad}h  WZ'pq >aF c 8WtڮFCuз!*y%|M,R/.~RF"oY(*`/Vh % | w38AL\5f;PʑIi_SRn :_x>pS׎vTt"Q{-U^cP(wTV (7 api3Z1Е o{S hصF*hġf縖u.G -nyE776"X$ P`3h%-^~N_ WR|"t8jn_AV>X(Haﱚ x/hP E6QLE|sr.e;z"Qb QNgR) 0wj)RT4B4~; 9&0g8/*g7ίW8IOgw;]55ihp0/X Mq^pٽ0@?3.BLa^%923`hMe#hp{U䕢ݳ탺;a&b !.'-m@pEv6;̮ݭUS;l`x1ihE<ʈu`*q>w&NrH%)<06%)M#7.Y(EwAkBDڼ㍓JO4`2i$AB=4 ]Ũa ,Ut&q6u1@<^+ yT)_ ~(@LC@%' rPc/!{nL`.jI8=66{)['Iюin..?Ќ@ x%p^c)Jmcj)Sk@&0$viS }[WayMZQs6Yx*9M`I..v7 EӪ[1j*3乎,׮z$SBݸGIQʜ!q9(]|~LfWc؂"B Bst~cv4u91~@x۷3:ۑYb6A '9G HGK몪[@H$ k_+ғBGR-/wTux/7xE- Ͷx{n`3cۀ$;=f4> 0bvGN9(˄X.wա^tgjH23|$ӿZlxUO \{rlx$J//"0>qx3}ֹ$F6 W?;I`Z8/ôϗʳJz5TBz;xUºi!E1`PSÎ! a8eNC {HEMe1.%\II%UA[s3?3q1Yb:=%88{G.%1iL/hw5`Qn:jUlIj %ٗ~t#B2P%f^ǩ̍P)uLcwq19^ ȵ(5[ =tP9Hi1#] F+ܓ {8JX8/wx4?D2?jی'8df$#xn(fxY$o#Gͮv<u^G/&3osVF͜rD@Yв l#O&vLnUۇxv噑 ^Ol4@e#;g!KP12.S(g_k4")i l)wE?ii07#-yP/ܓx;}:"7|g,c*7/ CtshA=\t4k,^[ܵW7OIV`P ;ctZD-aNRNa:[~_;z+~$ G :Evzr8pnpE3兒J6h2Hht6PRIЋ^'n\?;`Z@fղ z&kBv+8@d(, pU]#Zp0`.oޏk?,)7hUX{\ht&!K[cx:YgL(DNDKnxz_?< %麆juh~QJITn}Xks{7#guA@35 =ҝ{­]c(r/>C2&p3MLixsrҵh^5fg}]ԓyK _(DŽlc-s.Ijq'O+Yf⬎r}֝[' lN$9Ku!bvG q|f..߸(K*qSA :.(,~XSy;פ:E1*2$U! Y\|}d+=b E|A0+[w6I /+RUC?DdC,^>%37u5k50e[t`pfaez|2Oxq.4Bi5"6enŀ0L.cQ: ]LYCsO)qTb_xu8gCb^Hl ͼ;։6 ޥFs ΅(hQD[+ H7 pxSS:!4-(=۪BeS+\3 _2,9UCa9R{ O[aB;k;z7|XM~y=013;c$8mS|n4jeV鑴oI=Q-G T68̖nMzi,$N%WvUrwVL}w3m4l7> D99@diquepDe:6c޷|tF~^vS~F&M4;9>z``TA(YOa,U+ ^p3wLK;1 #I.MӨֵJ ylyHe[a'*6折 ?'""G|;:5b`޷֥ʷ:t1ʻ-N3C#-O M>wvtiȏ$V ]{Dt# J)aDX_eSY9},1oncVCޟ&멹y H,oRv})*:aRjOJ?ǧ;p`+0$pT. 0VXЛIQ^w> ڂla^n Q5CY{32XTqnS&x"̇3%MdFm :#УWkXPn|+MӒXI3ִx2U!+-ޔɹ+c5KDbbbŞj If֏ô\nC_Ep~Nr6mzsQfF/_x_Tz 0*:)%$(_2пzcx 뿤^\Qv6|aKk xg!Y"pW= ߁׃ L(/⍵1wJ_|/߻>O:ѩOb4 6_Ay(l*1<<4i"Cځ9RnqRŹ qΪ+P7 e7E|>-abjtDE Vc1h{s0cU#=V0>*+VRA4]u~t`Q͕!2gryu/W, ÷j|TOLfnc%I/L-Q1./%aH-_Xi..Af_E; m|S;(ep5{H|eSwc-;쒹3Ҷ,+,Q-<w5=!@:Ňj;+_\ر|ao>4 *xC1KjyBɇϟv.=>y9Tg&70 wy9=pPr.̽:=|EN<<1VL,5Ȝˍ82KO\֏xZ/P}DDXDTX ~[V}/guǖ2F&f\}b[ z/} Fy7.>]5@3Ēhu{SMێ%KztNiޫ4@3*<ɌHT3#42H1I7ds7lnٲaCvM߯5КL3Zs0l[[ݢ|з՞2Fw58zH-:o>]AH*W%7Q,5EmƽdM$,bg@դ;xjo$(,[1> UKA_-nT9oNQQLMh-] u:A :I]l f`zTl5Fhr~8,̴RZ7?GɱVV4\YV|)k{V.a< ]"gAR[ˏI!%cַ"_CpSDQrUΠ۲S ԟKFF챎q+0ӾH]h2F&=i9v^goBb}٢ 8ʪg\=RW&Pwn)# qC5}/:Xu"mdH><'uyDHӝS%V9T3A6vOuf : dzMfkHx<Eǁ~МЄgWˠzS7<5=thDp{ 6쳓{ qMMXjA^ 8u7wM{-蝡τao zEAnss+-3QTvwXsp|/g'V*/WxJ'&{g{g}B_gfh% YEqs ^S]@*xn{ ;R5bK0'2îɣ JiqSCoq|M,v;Yk2D18hO=6cۼD.)^2F䨯5`&O3QYu_=VUYW4tbjFczvTw*wsƫ4se+tl[v ࠝs/ؔZqc.gcS2n|4˃cIٔϪop hlG} D|G:Z=%MӧP#b|`!Ѧ?XޮҬOrKO%:^/7Hiȸ%zxmG7aQ|e>*2t="y["eu}s9Xcw)Cn&=v"Vt-Z3h@gցBx ٫juΖ4sm;} Of,G}o y=# 0\ +N 1:9*81?PΆ]e= ZA$ qT! @ i_?Ay0u=`W> HTwV Tl<0=\mq?d3 2:ܟtvV6C~0%@ߋ&gg(5*ފɋŻG隱PbD@L]!UY4qoXnPO57Bm{H2NA ]TY?[wJE/({Ü[ x,Yȯf(DwS~C㗍j[Q Rqс iV`[ ݃ZlY3 E^ـw: Gˉ4"gf(i=E1f짪LE|TMCNi&FQ=@FĬVlCHGQ(lcy6}¾8v.Zщ^Iw@s/$'e)8(モWY .?lC+NPR\SD$ezcx)>ڠ[Gl[|u`Mk"mtUK@[l#ѨESd0tdX]'\Isl%׊6H{` Ba$/O*V}BX:R*)V A_.0`P$ *4< qlXAx*қEB?dM ^5G)t4."@vOCuc2 02zkX{.iRf&~[fPFsMi@q1T͍zo1k\_L FW6l8dK?Bs1\7h.參X@䴒 6e٥7PQIF1]6mkZc P31X鴤8/!zͿ4dS'X915z~$׺ bR2Z`ĵ}a$n/I=| Awq~d.nL  K(~rB35gtӳT~`xCRa/ү[lJK6kgV#YKD ]FE٩(@ClOJwgV x8Y=)T4 PHU'j)^ZJEy/lfBʠ|`)|/ 'PU fBsyvotAVaڃ//|:.^JG'F$zT~enoH*-'A=qjǯ/4|-̺7;E2\*ar%~ϗ_AoVEЋN&Cwk6m9Zwbd(; g& a[RL\ܴg㲑]{mjV^j..na$2/l B489Z"n/Dz9fn< L<5.ByobǁP~D)Ӻ<6ԵI )KE[AX 96hZ.pZɊ[Zv}<~OWFľ-n[dza!P&&Br鳜6|~$3R6SUԽ25|ZYWnlֲD-\d$b08"+Hh1}V9@PDpT+z3s..J16c+$`?OC%2z$)4N%{{rً^Z}V ua7>ZN}[dt(3mtkwnmlAwd/6bkK0d=F_igӪz1U8e.ك2~.- u]y#1ݷaigi^gn+Vfg2VJY-ԓk:f)wE* ߀]Nar4gjIxg6r98,OyA\y}5(3}ċJEzANp@l+[Thj0-fmCItGBR=UR<&~a@48Ͼ2`@RhOS2rnXrMx{jO`(P]GOj\l&UOxJ"hĚhb7"XFНtx:XJ^o:I2JRdkETKBK CN'yW0gS:YG_kH&"P nsIU/+aߟg|DѳTg>|kdGۑc"!wqdu&N.)D I௬|+1 a}3$Q;KkghJrj#=ŵ-'Rz+@&r\YqT,JSMM#+tnǐ45Y3ѲdM(`7grU'$׍^v~X/Z s ?Dyd%bJ:&KZR#lHJ?[(]4=l$Gc['N߸:{O-WQ '*vB>sk4 St#mI("OM%JfSȼ-]rO6iO*!ݐ!<_YK[xa#r q`%>@+Ћo82ʛGIN4*ugĩp"(%j!C;c쫇MEVfHMg<5@rTӜ yDr& hhaU)تM(diwz/jEf㶓Dze٪:2Ǭ..5iJIw V^8?[Q<˲zb%cRrm_z"C1L9.$VP2AQeIށ̎vYoUeAEX94\3632Yz_?D1ߴm E?qpM3rS_[FW☧rj uP|.w"d KI "ľċDR O+\k,Qt{CS2/s 7fI3E2(\ug(Sn[ĩO Gr8B5n7S(19חM|O6t?f܀d!*NYE i0xPPwD.1mtPo +` QFqLXQ+4lKc[;T%P#2k=o~nTEw씄[oо: rގ4fn؆ S8-"Kzm}}7@T}Zxpz5_JkhY49+["4LM6-ML:9fDXfnqwോ3nZa9SSqk Bg VhQZ!pxM$zooޏmoQz\6m$'5r3PJ/H?l_TbJ/{YɦK5!L]kT242{\-Vg şpHpLzWiq_Y8@;Rly"=GK0V7:v& q"o~NbE)ᨌY|a M硍HW/(ЁN,.B-*[h`@  PoU6i@u=*J4>rgllSzLa|dP2 Zb_XأB%YZZ(nP$&6O P}a j.( v % &wqxq\7j0I AZ3*3'pYmѦ c ȯ*"bfe : 4ϋDnGXҿGzANV5\5_Njy:"گ.)VWfRL!)yҭbc;=_`8=Ւ;˥Wwԇb2Պj&:mgc K/ae_MlFìǵO0jF 1Ca<͑#̝Jh9i]FyN<^fȢ,u {k҆d'='"3%f(N!Ydi`Fnq8܈S7@&xt1Hd^:24]J Uxg;K\Ȉ<.o ~Wg١O׎eL7#ACi'd.gy)A)p;<~|`.[Yrge|e..mˍDIĊqO AIL*Fv$2n y8_ߎ`hkjOۄYڼݽ3y^@! rn&06V;Y&"!QYc&&zWS\;+M) MD<fݿ7)Ӣ-:}`x79WlyxBO)PCwwlv󑿷19UM%NGha[~EMa4I܈1(%H%QQZq[0<ܢhy2VnX |3\ΐQjMD*NAx51ԳY_7D }+z4Yr&prQ BhGoq9)vl`+]8ē<O.UzBKxAULK l\=3f3IuMv|#ZHyACBAZ[U5cERa1U[)8/@>D0&<hڔlw$:k- JΜF'$t3C<:YۧD҄/Ŀ9aUj8+U̎dvxA*Ά TT}zvZx[ɱ!楦1?XiPYRmS$N~85.f&3Ä! z nA5Ƙ4I26OߐvfV+RݐPeܿAą#_j uo ٤O#EJp )>j"ah}֕<㿿%06GQcW6XoNv%ƣ8ɕs@TZ.fe$ BioO . bѮ4ĩ{ʕ2ȓ]ʚ%C mڡ ʀ ^S B&9Nm;Q^dzjFzX*|Nt8gɒG24ohD?USxq\%gCc]rXgw0+ x0a5 X--B}Db5yEQFA8t hX n gpUPCv%.]e}[!$ACނ$:WpXlh3`wN05JiΈv WaKxPMgEf@_c9+|jS&r/EUeCGL&yyr/`iC6,/$KeYX8iY}(*#EsfoLJxVf[xd4PCn: _$GpډseqLtG9)5yQ2EހrјK *gnFVHԋ@a^ WٵF3xʑ"3ʷk؀P RX4QѯQ-vC&.Ŧཥ+!}2Ss#v_\eQ.~t/~[<- 2klM߃x,,w \d0I^0kwL9#RhRVSFdԻO)chgk]X; .+md~ 7yOnmJHɈݞMv* 5<l ᦷmrK;ڰA$ERz?A!XSlh|ֿ=ُY)DiҦb֮l$z f[v0d}@L[˪KOJ~UQܵ`y̪4UwVY6pܳ61^GX4q!͌I@QrYj͆b W|j;ؙ"^u@6{R ̘+RRV t)YL+R1F1C*=eO"|}v-d(>r-p1OCrq̴g;Oҿ[s|4eopۼ2ХWGӧ:V4% ,Wxh:di~[6My@'QbMKA1L`i?Ns\+崡.8Ϥp1N aԅbL%lٜ@C-UKcYFX2lW ZiytZ̑FNA")6_#%ⲃpGۂ19VF>6ÃOF2R xh ?'oKǹa^ia7"i_((D-cJ*FxJPs~kJ8џvt[d!|6i6Ui@^"P6wkXAl8$"ݵ?'T^{3rq2:&C9 |&\ҏ~aY;rdi k(6=IEfNKZGBhM-OG ފ(Ua;DA9}ds8FPu9S8Pw3ZU6SQ؂9K%L̰~ gU+}f)A6h 8 |dovTv& Xu sSrR5K xzYQ 3'Mּ:Oḙ' Xu=/#OВeѾ"\ҮGWX0o8cfΑ +tpA[Ըx}t=K*e~72<W!GPmwZk[R0kvqA)To|bsQ=݂qF2wwjU; {F^~jgspFLl(-ZZ*TV2x _O,a9.0kX2Uᷝ#M[( |Zђ)3 BI n|W0*>Xu&j*k)|䃄yiy>kH$$nGf*  dr,?dEE')͘ή+ o6ͽk1S~ AԞY&vٞ{IY$upNHԶI1ߍ\1rl=.a?sX1,]kT~ n#N_<.?ߓ-CkQkWpHRi5uyN*E}l$Ps+I*b? P>TjLnjŸA]M#l˳ {n];H3xwɿy" !bCp M_x}=JH$Y< lB+-Ż8Sof]tPTAdlGQf5yZ.FSz $ =x-ƈj# zM$U#Q$9!0wX l{֑n'K)'5TtC4ldd΀^M ` B0 21ԔLl0+Ák* 39uioxU|͉`lV4a1W~6\ a g›ЉWc6g!a#,)$ T{"/ ֆ[@b'\qnqLE>2U% r!7`j]F_1%J4%`&QP0S0%Hk"+#YvvB8IZ/V_$Uu&FAE=@k3\HAce!.N;뤁T6m2ȏ*JPSRO*lM%uӳo1pa$7Ri߸e;۫ /]RԇxMdPN"kg}lY*bPp#ȵH&PU {]Y,z& h@HǯRܹ4h}=TZsB+M ;>C`_6nPg^i'͘~JF2 s[<<%8LTM>ؗZ'V$ԞЂ]or=Q-Z4"xK`MYƕ?aPxW&Bw65{/S-." yc?ьFZIDdScy]2rW2+Z 9 ڢw?nt?4F4<-A@]?4\&6;6h1f!$5[wgy˥JF0C 2+ JI\LNf1p!v[Z Hjު(,&& |zҽ}AJpt9,w VLKnͻ(eg Ĵ 1/!~}5CS(-N~PL|Ԁf723`tp_ڎ['^xEY"1Ïಛ˻vI~\̇@HO, }og ng/G}@;[(32ZZE$P dh6Z--(rI=@>og;9j4fHqJ KkhŎ׊[pf[02h5^JĵfT^M-iҔV1 1{tJYL"@(ʹZy$ BOqJz~\T;u -Z(\! jvIU N##Dei{au1r+:CSRt*XT$V?t?丶6eeiHWgiAr‹YpY,P/\$Me7R>>xJCL3y68T6Q7.dDo<ܡ{V"[AKt,~٧?~gԳ )P1~ ;E֟_"fQ)ujqVoVDg-H>sf8q'%fE KP͛c.Ņ!Ϫ MFκw`R MՒBhJ~73ɐ3J)],L%/w15825*aފqJљdյDtsa)qW%@KM,2ꫧ<Wa. ML}ᇸ(v7.} lz>cuO_g,hQ5b%ٵlG;IPA Wȸ; .<3;UZ:^\j*>a-{ bҥT{FEtNAhԭ^&QBM*7t/pYFCҠS]2XJխ wVNeK?Pz9OM{%ڈ}@Y6ulag'TpfySnn/4IZ18+ aOڬh~Wtۭ5L+b@μa'[li*+7+SV?m56tro~.ԈNJەo]R_3MT}q}[ lV"S7eIԙ䭴@87·sAEI sY?A׋!=ᕄ֗xKnl(FVu9L|!.%W+#+(D MT2z4'jMB Z:` GH$Y߮<=nE*M-Ńexy>GˉB=0UhѽDF xhv49XiS$u4_M0}D-^p>qb+:"RU=Ԓ, vY1,+`wV^șBh-Oc=|jP2 &XX@m za0f\? Pv6!Xnzʡ12fW+SPw5sjD:kjDk:TJ~ke_:=) 92# =@IgEhrW8͖ 'nJ/1~A+gh/HH&€_asn@$,w'E^-d! mCAa#H扦`j hNBcT=t$XBFl,-g -φ7E1h,u`%>焃13.5 ~ǖ> _-ߨu?59fR-mܾoK,"S6Awz)%-*`QCG,Emʸ7iݳ̨ЁeFlxZi>`{R$C~B>@Wƪ"tGUUv̅^XASvRJX'ԤhC7 nJ$}G4܆+-z?ހGnE#!e"Mh R`ʯssN&jP,+<'vҟįDQ$}>mR5L#:ςӸ6GS׸D혀wqݟ ͨqVǻ;bj(yE=T!n5HДW ¦;]0"dwYz8ehQ&27#i%sDQ Ky}W}뜌ER3#,bk;*o]!uxN5H1*4`ٔ!nT C{Q0Rj9ә-^o B@3JEݕ(V qz3U3l |!\fpIjCq4DAݝ^Qgb3J@kH)Q?B"W Q t󠰸K4rSNv"5TmNFNrAn mqi3M@Pq.@Im4yS,S0*fzGvu9aa_Uv"m61>)Cɭ<3ֆ4tևw<aC>t1^a G_4I~pj̮Mʊp}+.O_ <@$/0$A<1 BȞj&љRa"Q-81`TA="O=71}nP Ϯ:,igƪ$^\HUgJS"'ySkŗ36?{| sw#+cZI%j(/dAs%VC"{[ 3+}=eHl=$5/j?6xZY䭮kcӛVx+TW~*b.*a͕+N[f* p`M^#!@8 򇢙:{ӚغssWyB_٥sɞrϔ<ދ2t}5w6E6BӶ$.*= R\0#}}<- 2]cbƫ7ņ2W1q| Cz-{t2IdJ"%Nջݯ5xmem Z?M16||1Vn%ruGak؛ ԑP!h8.-%T[] ,ɞ!B\^#D8 3eoq+$P;٩ax|'Dt7xJrF`''. %/-1Fgm6a3`%M61/WH>.洛س'3LuIﺦ*$SK0FhxvcQY?kGy#Ug\F+BAD5vnϬ[+~_`\Cއy@-7G,\FZj`xlp;^o3o'AIzdFbU+~؝3iG|,u2v}Ԥ }-Bb%[i/qEFY}fo34ғViӌCER+f 6Ji5@""M($z_\"ܬ3{~:AȀM I \;~**; ̞2ytIg%"4(m Zj3P9+3(t 6jb_Nv8MM`|a|R~b(``[C3T 6"lK4 =\!OJ`^qWYfaM{ߊmb-k{iWZ]=:\yjfc8E{e o WG)qkHobT7N=ki!aspvhfrw1El]B@jX@fn>rOt/ DP8n6}UD!)ƻ\0@d. `Pۊ8P=}$ 屛H/ \SVʐhzotL;#@0۳ͨb @^ו NׇQ5tf/LQI]T4PnO*5\h :i8{=bK A? G,Bח6_JLZZ0ØN*N8N skHlG.ϰiвlG% )2\:s- j͊IxTQgd΢C+8RXRZ74[?s\-0k&~ oܷZ(֝ayaz~"duwa!U Tl̀Qr 6i*fC^9B%ZC6S 6N`Q4%,cq5`IBS<9}V(ˡ%="6Sҿ,2.hNtG Xm R)z;tËUmaxI.wѸwV7$uc⳻F=wm>9lxj3fbJ#Tt1I ϰ 2^%0٠{^ٵrz+$ 'NhsÒV=W{*xˑu&T3ϸ1V:.W)Q),Gx.沩*f9=ΏGlaK!a<棋 Z q '=M: o@A+kf-!Ltqth 9]%e26%ǛhK>7dpw&p/,atF[C39|e`O? }13ؔ ` 7KpfK(g1<{eLR?atND>p3L6FQh^z*SQ- '6 h@'~Z2btlnox~(cY3Gq'^ R Aq{c8 0a v xd4Ch_ہMs)@Ⱦ_1/VŁJd{{Oյ'>Wuf45./[r: Jc985/I Vb瓝mMBhFmHND q?C5 '&Z\q9fFۘ/÷|Wv;ut}5>m:5^Zmn͟ڌgp%3y^߄ϝcA\ g_Wce].TOt﹓~K$!ZI( Wlt߇0xLy"zbmMo!SRUG#ѢXpH8o?Ř0x8=/\˵ HC5xM;0u^i}"Xr!kuJ{Kje,=ʓ<,$d 9ht"+1.fIϻ7XҏNa {+.P٘-A, Ćq8"q˶V"{> bX P)qE73$Blx2}[S.&/Ǐҥ`=Ȉt*rh<_asv DGZ{݅ђ*8eQEGؚZI|Mp?>~Q ݰmŜ`ѰuݠBыwƯnߧmՀ5BcE!#E4瘕ȇ+I_~hLцQ;UIشEO[UDnU <3ffnGG`VWm1D_!bܝqt'B^_(o9**#Κޑ) ;,w8s՚Th+azC7m6|L:Rt5O>ɵUXꖫPDuF=YMsAzz>j-c[7"d b"p%z,}Df^ڸzvrgTq<0NABHla:ƺ*gwM9d0 1f13.͜a,cR.BTxB*~Ouֽ8?x%>Ga1М8 . uCcOoԦ&7\ -vxH<]" $?{~2HL.qQdUob' M7R첓>;-5uQPݱW4}|J6u{`}ljO2qCZPVP,"Fl0B~n~7yGaq0g|IOXl9gnD󏞊PȦxEi,t -Nʝ'x!cr~Cc޾B$H]'DND;?|iH21dε4u]uOAo *'\jA2$ w}59Oauwmgl`(ʏ;cAN9J'(0lTpR$^u͡2Ҥto#aVʔ5`W⿕#ue d%w5ǔy'X݀¹pV Lտ x[ &e/+k(!NCG_FJcha 0u%C >̈́2Ȋ<zt879_(wR|NN;T0x !)vhZT Wh߷lIG( bJ},q {aLr+wiǕ~ pw :Ӯ9ٜzeۡ<YzHX=}sGPhJ&y+`N`6BRU ߭,Э;ROe傎+"а 66MUk^a]x?aPMND@)J@q&l~-((E6UI٨8h AVo{:PoU. ]_O%0 V+pqZZxS3祸 ~";f4L6~7\կ`Vc JQ"u<]x'߂M%+@$v$)@ˈ)=TCDb#sd/`[_߻T8}l5;um͜Atּ=DTC7z[V8YEasHFPa.K?R=v߷XISϑsuh6Ey{  mDy\s53l{Ubx+ע8JdWҳev ;wƂv-fPiONT^a0vF} ,%=U5>YRD%4j #b7MS+-9_q{G&EtMu`NLke?dwC"6J/G23bRD-EV2@7L µ.l!iF8@Zl'z~PgLzop]kܭZR/pK>͎PP:w}-4PꆈV$ a=tE|`vQs4" |CB=%;G5u5V78S *dVoCО0u"RF`-!RP,ޫC?3|1x0yy^KBwmomЪ=[*?AV&]_C09엦Tu2u!'.ur#_ C3Mq:t?\|x9@3FuRtG}[፶A~5@ȶ.@} 3'a`HB`c %h,cU?&Zӛ[|ixV~ Sy}m0:|G[©F2[>S5=hqO3){#&/VR#`KgbG׉DHoRQQaYbRa$GbL4XgF톧oe ttm׫\B9 ov~n2kQM p-m&-/;;9(cit(m{OiO6%I_Ȧ>/A6NaHw9}nrIk/gP| 3oVãPM   yN* }~Tts$үS  t-s'Ăf].hf&y F:ƒ6Vp^ P A٨&(\(2zqR8j;piܫ+ck=y4@ńE 0$OsQ2 ~q^@bsD5A5O淿).eI;Z[' `sf0;NAD *Xos8)Ȕʈ/7~ęD5aNWo!PMKOWWCڕRc`ӊL2z̮*G?sϗm&tGR*B.Xr;FڗK\K ez;_$hA=*˲)xDAduTn4 -O @XN_xE.ӶI7خ㸈9&iKk|CD/uAho}1'@puw(ph^J`t)E?},uWL/NsG :KuN,_g ?8x1~f "uj<Hr8{E:8F'p; op`V$#0ys/kYeZ\ckf0PoVQC"Ȩ^z;+j={LmaYk؉u ~K=K[![tDp%9BM%8D9SK&Z2oDV~@/.| E=1zOx$BOOӛn! sk(g |]|j_(zf#D<93NNcP]4zoBZ' 1`\_qy\Q 9eX7[m2͐6ySBRMju=Vp/}"Oa5GV~rrXUkq/T]F3ZPn|(8#dK3ha]iܠ u _[]v߁xm.[.Ah;䑈)[3F0XH@ny76KQqt#yYәDe.;<'[YT{wo7 ;.eǹAD3&0T,dGP*k-*K2UD~m @5Y' &JKf:.3Xwg{dB*jKi,(&!M6)Ho"8HTŭQd\TgEz C,([9D ] O@2+;OiYOіzMtcs4iR~ ɕZN8/`]"m`)lOO8YI)]/*~27gk%ܷJClvK@TfeL?0}L-tE>aOhԑoqO°;?uޏ5ψHCn*{]vTY>j4d03 NC䖧7/s \bή9ZsxyuD=Af4JW&c^"^^f.3cgI M7Ҹ9`U+Av|~ :26DeFY%ArQ 2dzw8FN>+Cgvoz/},Hש2UI4o7][()-pbR+PX)F2۩ܴb+VEP28QCMeo!?q4GvYg]?Aj_9ٽnP´{m~XlG<:8 \m9~uuՂ',gi.(tȍeoL;+|8cZߙJLM}D r~ BNk lFC32pQ:Ԩ_?QUku:Zl`^ J>ixz( "`U+ʣK>s 9tGPϢ:E C[G {4b8!tx^9 ҝ撶WG& M"imu_]J(jP5.N'}8 9kZ2~ȢsccdW˅F! R{O@[ f>f@#>RrgR=/Q ѓRwƐǔ- MsA7ʗ1 Sv~)%]l=/f\$6RY(JD]D3OE_[+| g3Y|.07r1FR[%?_8=rjDEZ;!eR`w7 AA Ft Rdr#6_rXUyǭ/ލJPr$_aEx@hh'p p̑bDu駛GEeP dCH/@Fi]Xxz ף(5uJB{qg>dSB cFV,mAG FftIfu φ8S7l^]*`/-Գ)ܔ6u-bEn {myQkA_8-{{K=3%x1b0"45b`7)ן8j]E3w \8lM^.jˆ*4(~u]X85H)ԿR_Qc@OگȫtJ B%hg0_O_35@4el#=prq(^0,|jcx\'O4Sl)e'\Uc#(8-wuG:}; AJ!-9S5{BIc7٠_SckV.|4C:!;^UCsQG51i '+\\Y^8}.Cd`"BpOwWJN^6/(6-t_*$SBznd)*X,o5F5_|y;cC*6ifRՓBoGzKe=|^pʂgca&qyy@k9.CBKTVh ]XD43!Mo&g";ݵs7E3XMY6e>Ü]Hb\xBFHD59T# te7Ĥ~`ڭ-m}7VB*}ţ'TГQy6]5$:74q z$9r3.ЫPW-J'86}FrsS g,;& Ȋ"{,)TJU7Tr}LQ^fZk7~AwQm-4"J5t԰Bb nT5q5mV>Vi|"㕄?#Wn܌EHfb:b%,k]`zěK3]a\wo^ 7mlh ]xCpQW8`ҥ^yxtH{y=ϖ?/\N^A]Ш^>hpKv|RvnOd~Nk B} & 2?,QVEDȓ ՚#,`]dW8˵sm2gdG(r>NPW%h;ΛP00BW}NW"dΊYرXj.~R!8ڀ .D&_>hYZUhvh1==$C0`Kx"l[G!NLDu3| i @#*iRzQ3F*N Z耏洊P,; =DκrN-j| $K?47" ̨0?p_ܤd"jlqt?YqN{Tg lUѧy0@{_VS~N>|<riDu=qR NEPZdh wd{DN..nMI$iosjxOP/@V}um,cCּ~0=vdB Rtvr5Svos("IpW);ܵbW[1JfDg;?7$y 9*~y(?Bpa0-@2$y/-QP'@$?#Be#bY*+*>U\1UЛ$X/& {Ci / o*ٹk˄V+0#f_q> //,SPZ 6 sdc3t8d 8"z 'Ih (F`H9I}^0[ Q<C"טyd&w C%|%a!kp,ݚp^JsUR*`OY; g)77,}TExY+cLh sw()zKEl )oC8K{SNWd ]*٫J#u@2=DrE* _sb1I aMWS[/Ť+_:XQ pö!ٖxW W;&bGl+5&V8E 7<֛߮1gK2.RܫW@_ЍE-L=h4i֗{!c+3v<\a%R\A1r> ^gxC#,'r+ZD%a l{aUyIBzo;(nUrIrI@0NjP|GUAuas-]cMsZxh!p>GLL2-L+ ;$dК~`/"e_r@!; ~t1 U0FmKOe2$n67s08 TDvV7<2%UYzW#H3$/;|Emxe->4ַ  n|kLEȒO{[Hu*Χ%qiWOJ~; Cb*ɦ#/7)˯"j|0 %w 2&H2_; imQ#b3$|\ۿeUՃN9<'EkOs]v*z[`>Q`цnJ$dpbN9JJ|g@6sbȃkg@u'Eu"eh54a¬wnN|;RzAl+niM)Mt|c!4[~~o<0LOS`VA_POA"I}H׶JfF 1v՟KSƷ)ӫrCL^+٫^fjI76|4 |l7l7ҙQ/o!=3d=[U YUҟ Vr3ve鐰md>-a]>&if %ғ>M U"[, ;fa2iY̸x~eޞ,tM EAnzTnVϐeixR}y|kXtx/V4D~'BdvU4%q(zVl8x7[zƻ;g)#h=M8P>GWqc&3j *ut]wU)?QBJ[mwR'B͢ΑǨX_'ciQY{s&Fr@&ARSiFyb0%b(ʛ{zAX2i19bЊpQqI&= 8NA G%_\BEZ^?~@ Ţ&wCf^譁?7y\ݮu^̨PӇFW3|EPѮgK8@׍-\ntÌ6 + {^ -$ X3_5&~; kZIF&#wU>vZjL[R-Gf$D Ez!KZ[s\CUm-p o?dP@wixa8E=笪R~Pgldu]YbaOaʪfgPkD5t.zT' X0~z.h~K@_ ث,ΣjQД[Fͤ,nVӧ'q(c vWfcv\0\Rߠ+}UCQm~ ;8{?#fni4hDKQ(9S1ÇŪVTi;RjZfqqY*BRlCBtHZ`Q*\$ڊmeG : $I3n|@n#֗<7G`TLKUe_In56{]9( ;DzDKsI5?v2*1%q%d\++q𸘃r*LV@YI6*o":d n=V]}Y W5ݩ|4Yݜ3@o4e j9IO i,Ok~$Cr986CG1IπMc<33gcl)boeE~`T$6գCLh\qQh Es?b> q1׎W09s,J#9dw5u~4ugBf(+&W%ءQ-Xǃʹ˺Y ClB5%*ld4jS|LS9<,) -*͖?)YY!7/u,3kR&im[CXz=՚6RiY4]M@ Fjj]XTq~T5[tC[ R$ѵܕ:3Y/ *A!è?HD %qA|ٖSYPw/X/iXJ{P~2=`%8'TKߒ7vP͇jOWB dm'Ѭe\Jd"DC^-ѣ hMiydD_v Xs#+{A w!k-)&o/Ak] 8FȘpIgsX:P,iVOsCqN\;Lҧ*&rT.wmi2JUfim7dj}D0@exOlXgң,jeg%jQ/I )7~HqOMoyS}ڧjW[`|,z^"̨@XTS1YKaFCu>#V,JCj\D҈ഠRC3Ko &i.Ʊm)^Q@oU :b\꘬dA!>LsslKf {Fp| . E:Bge@kP3=vvlil_5w| б[A*ƷR`JJgC<*4Hh" DJl8f6i[9_w7bNVkeՆ/^5JnsLqJ s ,A5j{U4 òX&f5A cn^ jA̙A_B"UopPY,rYL`oCݵhf 02ĺ-c meV%, Ÿ oAM(cy.>YB-B^c{{I%"lD͆(*ǽ`xɲmJ[D.#{~w= AՀhCSϊXHП+]*1Kpft_yYgLR闥P!a|ߡ~jo#zom)ʹCK0c,y?l,{ ]^;r[[KB+э*7x\ WJxZ@~C:3>P]It`{`l)g~TM-,**sBti")$Sx5,kaB|\kMr%=iJC^30@lXgd~L>*(vJ_#>`NWnا|tBγR `),`$H#G+_"QRT]~B+vD}.~X>Eb.DXQ/r^39CpN[#b޲8ྐ>C} e΂Kz6Eb@? 0+ NvRpw=9knY$6tOmI]Ig2s0ÆJ oUhlm|na&'93xHZFo-ʢI>|jAЂ %6ΊMЭUfFϐ)5HojU>!bCH  $7d7!dUٵ<:'TL,gy۷R(|qRMcdc[4regU~WyPM ~C>Һw/ϖhIJ̍v{ jݴ*V+yW4ܲ/kֆZG!"𥗀"YJ7.0/°'f>Š4 #Sڐ hȊ92?#(#.Q>x+K1 *Mx9uZQU!.<),["Vf6 )ϋ-Wӆ^aPiDbLRvsSV Ye6\9DV߾nҀp%dws!>:pӲ% 󢣤ɇ?^.>e $Xܜ)7Ƣe&$QQ~1N郤u$7<<-Nɵ},]* yNY.Gf1q>U턖q+ W)v0C~fvnH՜<-`oM;e)|ɰT7YqcdnXn@ ]Pi,zAp`!&zd'osב 7W.Ajl}G CpH&4]KEÒ^;ŁVƐ}Lä>r‘,/;fA7ZMlJ \qmm?4־o.w;`Nʘ9+qѳ.hcpahnzу'Ȍ55%iNy/G Q vȾ;һ2NoEF^">XC2H;dS,[c:#l %|%:8>-j V!ɖ؃?BaP4IqJHuf`X 9¦0hAG1&Z&myr )գK*iaB 9(j螊O))q8?qcJqZu=g mʈDR3ch*74RxpuŤ.($g,Z}xŸ|Lvc ?pZvmkSْz'kcjgx{|x枔̺&dnup>ƭd! pT}Ä7xn=g)̨3C8Mπ,JL2yzY~ ٞ jq0g:,ɨ i;ϴ_,&!O 7I(<ǙDzދza˶2_'U88 uN//G}j$\0~'GXY Ԇ>,w@g,gQ,?64)]^<)irczʒD<0B Iq<`03RK:35N#A/Ż(?Q3߶p$bv_cRZŽeA OB)mWp,X27~kN7ޜ(*jFG96 OԍoKWlEM=z[N Rx> ;nw)4zBX%n\*QPQ>)PO bi09h!K͹-Zb3\m[0[19T+NMPW 7ǥm7XQ}|(hV $bpz5!J11_YYspJ @,aºWҺm%4&4ƌu8UΌw3'.^;!Ju9.pQ3f,ȕ{k^b- P=n#$@ (2 C5=0O$;R@L<zB?-6TI* (It'R{*#jW|\ŤCrw^G|Xǽ~%ġ?~Bx4 rPu2Yo05kw%Ph pd}tޓ ˕9,)DJzڅP*av9߾8|Q _7qD% ϹinzbdZHC(@cftb?gi0Q]B8ǸfK'HCW~bUD: K4Pkv !@77AVsϲμq:t4N)cj9[Y)fS`=MmMs#|ppGIAebwE5PCL60[bzy ^浊I?@U$/@vBnqJ2lLp1% ׿v˴1 HDeUjKe |%S9& B[uedJ` 3 {m@.I^/v@cWWW0-Huz[鼢Z md8]؉lylH"|Se {*BjMg/zԡUƭ"WhƏ9]n7i نQF\rrIrbm>*U)Gn/2vSća4V)5{lmۨڐ4tOiM FWGm4.c3;G$\xdؖ ,?̎ u 4maiͥUy cR3/ԁL XNcJ#wZӍaDfFMuR'a(sHb}=tu),ŎNh0hQÀloZşa翷U2N|z3e~Ɉ\<)mUQqtCިF:LwiUxoclu1'`޶ cHpda~lv~2I(zm6.=9ցiUpVW׮QA?>-]2uɾBX S^'gRIj44Ih;Z,cH<*"6+ &. v Bl,x_Utc YK贋E7| ,ۅG Fѹ.]V&jUQP2ck.cZgf$ @'[ c(J _زm'-2P9,қE2}a蝏Ut-5R^ЃT U4>pPH40aE`}Pc| DͿ׫Dpzc+LԤl2Y^?SppskSF9$j_Pz ZQΎhT qF) \n{Tqjb?M@>ܺ,#fͮ^b{̗ջe dZ8fLCQZm'/ܥ.-On[FlHܗr5([([1S؝E:8o3 0~meH1zr5\I7R[A >Zۺ;Ϛ`HGV \@zD)ojHh8(:eocHN],j N $B4&Ag:OI\1rMak_OSC9&/1NBJi%Ӟ& .9%,a1p/^MI UɎ#j%Is-|%b5F 5>ȓV;WlcX1,ay<@gI {bZi%)+WlOChYQhPqlY Qڃ=TѩF[ӷ gSQj\Y#1ʟōԁ*`U(lii𨒦dXw$MP[kh˪u{zd[ |a73%lﳸ>91!B|okZN/_6 o~A cs(W" ܶFѧ>3 A#c5Z:KͺEM-G p8pm4X/YPD zD(rƠΦUa(Q)% H e 74`뤝z!Z4ep%},~l\$HwG)V9LJӭjrbSAߝ*Q&_mi^}&K|A&.{NMRn,-k'ٳۗ0sQll GXl)%M Ҷ 0jwY)X[PY+,c1z[H) dh p#;n (7ef:aWO_O(zޯUqq*̎%tq&G1lhO1 B$cKkp7(o2>G%/A^bqR`nYb5n,nCj]?X[򣱭̆-]m[YfHA2KKV0tx ^BB}jҊf|Y}S 9|7 TgZjuYZ;ܽܛZq}]HT[v,4xؿPT@#hKܦ%=/֐w8#lȼ+Nt޷e)H1 %w\DOў6imӻkzc:pw+/}yUӬCǸo|?ly5b$(g^=s6$q^0yٰ?J=>بOa7E5`̔IjQo=o|Tp*cȤ=0 h§4o3~Y w퀦޿C k/ 9vG:*I֖xR4'/33vBnoU} Ń*6_BHf-l .PK)㓬P.;UYҩݒ"ܹŠEd]_`$a8|=J[aq(Mx]G|8.dIjXIT5Pms7#nHN+:̨+NSog0td^!C3 +_c(bFɻяrU!JlY"a"=F{t'w4sUT4 1 Yd6v)U*xzc/Q܍fКF'@V?yFfڪH hU$3k1l3RQPIWBWhsI'P#LюAO\!M?;8:"E$'Vm1XvR-}q"*}z=YU9(]zc &)B5la+Sak0ݘz{-c+h=B90򄇚ԧpݜqق M`v^+,BoRpnuгҀVlhaI5[O@ftfG5`zkKM%?$?Z[.?gRٟzg=ݪRԅ-F._̝G9dbnֽ9߽ \%]jӚ2n} Nu >aKqAL SGZ2,_h'f75RPf*-䷷!(; `Z: qȲ2]9_UbykDLhf`'{buQ cPD phEU%1#!)h76v~\VP^FLJb2q+ˤ= `xaHC6Ivw6 ~Ndĸ.eayQ/A˵Ĭ]j~Q/ĺj)x pRRRHbnZi3nag k^WCm@Ql,q—<\J֟Lt۵V]fHРc,a»8%t兰̈t"ϣM~꟧ZEO`j9tԱ YV y,IIhkiU3Yc3Hȏ8qgׅJ0t'r :|7(69S ~ߺ_j'2mvyx7*bPIz{Ӏ~@c~P{b15?&*6 +}Bx͙&E]eHM"?lwnN[Nij|?2c$l2 äR:X,Y1E@ cfywRC ~DE%]sEhP,°,dQsUo O1*4 ^>ndAȍ2Zr'2꒹)ZbI ZuhkA?I b?wr9V/5uw$u'=}>aKxJ9^NLtSd@y_Jz*2Y?z$|ɷ$Q[(U|$YI\6?1Dya>b^mwWKdKU'1OzC#5 YO~(R_X`h5H 2/"%ĢS꺬qXY@`s5g Il*)ѽMv!zrX/qu{KRK]JU,bom[$SS߸hV1K~tmWQo6۪46{YL%+B_vUqӡMϜ)=1]&E$@B iNa酨?rfeC;dFS}ǯlݠMC**?%H+4lR'd[̀UZMD`9[ *?軕2xɐV,Bx+ 0V:t>(EAig*mtP`i%_`MZqkA .C%0I++G?3 7a$Gӭ)\`)@nf?ĖCY$@//^kVJ\EkEwy<V=4`E_f\:n}42oiG؍ eWLBǖa0 LYulJXc5%'<}[-""LwPr$&|mW˅D9p>HlsUhPzv΃lQRA>'k}ϷN~՝krad|ra)jaJnD&yL)D!.O$濯k~|__vips_IMX},>!B殩3?k |L{?9 fX(sp::w84J;_@ ٵVp7XRY- f~!u<;F͎Wbڎ}g朦tZקkI@ݵ7r|R6p o6$hC]@76ĘQD᳒GY:nH]%vwCD E@18,*V3$ ;C`=*,<,W|'4v#z]N䄬]: *Y#Qࢺ1afҹc(`0CncJiK& ֱCKmEd8Qf\{yAw"OW=,њ@|_і(.i& 8WD\ꚁp80/'=.F\mKC"(0}s9_XBsÆq窒؇nab=7rFd޶'\=h\Y 6u2 Wi}fpxw"b;^[D9)FpMK:A֟)wxfg)S UDؔf$ol>PE"8s+nߝ"=69b*9߼:+UO[Y^C1B '`ɧoC2@ +cI4iY&] r סqk?fbZWx ԲrJ܄mWhn*I8H4k< boLQ}@Q 4ɕz O3P-h¥ J"ѸG}<c*5qhaLi滑0.ߘ4YIڜƦ~u$eNA>,,9*V%VM;cQs-!:H3s'-oF&m:HSYdS("L$ |/(Rujd[Wkc,!ˏ14h+'`A4RF>eU) oE;i;w.WPp$i5gρ(=2r$#7v]lCOK$Lr"^i$yKϔU '4/` amD,1_SsO`fGkTJ}s.Rx*0g 0(YPhe+I0v1񙏾 v0_D=U{mGpĦ`yI}|- :|J0Ģvo81avL]BőD\L6n3q:AUۀ|Kyo83ۆA UUYڑGpɪg)mZ \؂lw'LKŽ+ ^̐HYƢ 7P(C*6V_fg #X=?/Aqp>hZW6o`2@p8ٞqh2߱A9.0`Ñb4xm/XNris^ȸQ㼈$mݚmy `l`/b bߢC.tvi]> $go!;#jF.kb\K.kywU@z{9 ꛋI3F& n=^o[Hm!,C<1f2h !{XB|GF>-Ө#fvuw |0N (v&qSQR5Ao*ȎqwB}n}Pʟq>!߹x+\3%T[s6Jq驜?K}E] XץDf:Pk/+(8*+BPg-#<iMuQIUbl轝9s&}nnaɚc\x'WZ]!Xtw%i?s,/QXv3rj E'(ylVVbf 9!~6zLoC5h~DM@"4>N1ۻk;,[@w@a`'UחBEX:dMSɜ٪I#Hi#*15;qN܉f.sb? |}<1 /c-+V .a|#RX*>IzL'Kb;@+Pfgڱ9-d-M!3l,+JRdLf"4T ?Ezv;A)\]^v-1DI#}EmRw%rW x _ tkv^R4C{H/;+G(fU pDTi"&ʶ ]gUc8ju5.QP>_0]Ģ<]rWMixtG'C_;OqpF>?gG9/&n1l ߁ Ax|zTc`Z ?ό $c{)40Tc1qEﻆ NAFHX[/X\-%/{}{+W=kO*HaSS>$ݦ6Fq4BZ2Ŭ,ُ>E8uA3]]#D45pi )>ɧPX 5T*:sn_s=;=i]{xTTy(^+<@ϵ./Hx`$c`=MɋMڽ<;)vJtpIBwČZ,:u t1n q )2Huۋ%hz͊k,=m-6fkG4΁ƒy*Z?Q |+Ba)eGGMݗU*i̠3xS}uI_Aҥmo &\/^+{4+|t*̅8[ߛ>7]*pqSg:ݯ7}Vm\ðF A?>Bs=@I9ߚB݆TY m71&1Nɾ  H Kb|VejPgJa#{!yq N74oOY3é +WxOdD<!>m-pfꓒI (J@WH8x=} /9*?<Eb(|BkĂIedFe<4AaU M|k}V?eI5bH'&0rd$mh\D!. ?[Ht_ fm{]vF9^+t\*窶}$r#qkX qr4^tw!OK6$rC)LR;ZJPP)`)ޛ$,E%Edr5a'%(ѝqhOlur5|J< {P>09w.sڛi,_nUM{Gq5HZjaC2x{Tu@Oi\jI+#8ug|r@kڶwjx!;ŲjڲeKf IB<~#5)o̸+0,o,b@1t v'xkxwAiSN&~٧ ۛ۰]E5n˰T9t߼߰ dTxkQ% 4'n4O,%8m!:|[0<(.0+I2{SS^CLa)"OQ "8 ~Ǎ=JZT:wj\3߰)x$mb&n(q%g\r3&o~T₿jn C1,J!چ I !Uö%Sx 4r_QiU-zh[m!Rų2'Ը U]{z- \Xu3o”{, 3<R;%Yad9ǧ$<0(t^:V` e[`>zIaQ=V_>ibp.ynx4*'2baI!ygdBU5ԝcc bpGKGJNF~|Z]I Asت- nx"mčHq-u9'k-^)_a~x,@b3$v!Gsx9`3@b b@ ,f32GdO!?;cu~V "7ʺo) &`6J1+Gך m麏Mu>s\F B+AS\8njr%tWeM2Y`ƦT  @#\ -͑?N2U}؛UТLKOB2C{Yۗ_/4DJ"?N _J1~|Ԥ BܾU>~w Q~1%$AI/Wu*|s)wgA˴wel$9txj˗1 '8bN6Y1d,0k`lhݿ ً /aбk! IܣF:4Wh膉g@k FK:긴YݖU-w*u?pKAK]5XWl>+;loH&A e) Qų |<;=GӘ K 6:ɕ3Ba Uy591lGY!]{b V@\h~^."RZ7Ih*MF4dI ^U%1׵1 Ս1HzF8խii8ED*Sk#QKڜ{  FiѴF7- iL"ǏzkR&R,l"ӈ/̅.]=r MȢMdt'dgP^1GR?+b ś淬[ Fe[Rs>;V#ѩ?c3=D92:m>*q{Mifyz ,rLyK+Ɲufj@YYHm8xʠp֎zt_ʜʢ7V*}Sے' cNi0F@kEl.k7̹h7TZ4 W T7堈o?aA_վ!eA7+)QTTJ+9 1] 3G =xL47W  ?nݴEs_ 8<8Q,wB,Ǻ(eNrxbE Ј_Qe2ќ7KSݍͼ=q%ϒ\']oYUu!bk;%ECBSOz!Q~vn 3k0o_\{M%Q,%+/vc1PK]@&@|6€YU2t)p}bmn4 -+ynW\Qc9W) |/kyHS?NTilbAƹ"\b Yxz7EWcտ 5vC}-G7P'1´2its*`gTWe;1u@Տ'wzQ`C \Jw.KL=zSt((GղABb.aX+O !0?4Е`?7j.P[ׂ@ILy|l{ԡ? hsd#}oлW7{9X';2oIY@Zo"CnIf< 9708d8,I\R8/0ZyqPQv7q S{^ Û;16]Gђ85W4UPUHPp~S^>DZ/@~sЁK~ƧaASa`o!:|7=9Azxc^:j0m#\e\Y2p]4ȧ,!9V؀+b]lXMscXlJ݇Y!A' 7Wf$뻠΁K$_9{}D3{V9X*"D.I4=B G)x8QaDK Oq }8P_P(*i{zL`K-1&l+7*1~2~ gu$taQp?J1ŝW_CaIVτG~e5חv>'b/5/D}(V'bD$oS$6 băwc7P׮>s =* r>7xo~8سQƪ=`6+zDӚk8`|TwR+ܨ}51u2}>ۘ#h5*#eBKQ%_OېׄA6#gŧI.7a15][8ɉYJgn@mp!{1+>۞6P‡)NA S&Or^gKuJ 7@Ę)wC$Ոt\zͽ4IWL;Ŕ56#ץ)Ut0VKr}xLcVwoEzA:!+<[aV=MA-`R<+J O^P#Ng(ޑdZA(]Dz^C~lWH fm!ݤ"vd+բSb]$8Y^ucZ~*e݋~ ($%OOv%7:‚"4ЮAgy卺*Gd&%p=}kTM `i瞨UQn'v#~hp`r >V|X6}A'yj(ܺ,WM)P-& 窅Q~&56-؟6 0nZ]UUw2 LY.vgZ:/>@wM'U#c3bW N6FvȰ4vqXD_YY&Lx>EtPW섦 OhAE?&18.od81t-îEuϘԬ3>z'-[e4SڞT+:-Vl 6%. Lz-HM{U77iY&x*& P>EI!mAn9=lb7o.оCdTE*DʑCG]{~eJfyWeL/p uYGįMxRz.oTJܭ`jqp#WQD#E0f'% P Dnl"h#*݋C9n|(Bb A"z*ȄҢ nۍFNL(8/ucFƥ=&RnjQZožT1>M|8b_ \ѓxw_/kaEȌ<%zM6sr D]cb HeD^#"“ ) #h@_7MMſ_9cYYhAOWE3oHƒVVu\@ ,v:XXNФnZ ˃F7 cID.;bGIY'2'vQ e9㝫vm&lܶ5(ɝ0BCa5ݓ{ 33t p]m)gq,S/aJH`fȧI#drV#?M)8Ta @ ֐%") Q$h7*@Y籹MCHŅ\@dI@D̵k눱"#yyJulŸ{J^O~3P8dzHyϣ[ :UMݰ]Q3v*J;6_,/}TCеS[$T]"'+іlZH@F%هJ#Ix/W5 n(#`YI-'؅jU*6RUk!vaF+9jyR#hp8$35i1͑Q0#pΧ9VCSkE@Ə˭sC v#Ii_<#,F3(_x&)((c?8ЭUe; | +zA.b Ci$>d1br*7Q-`tIzY`2){BT>?,mzB; $ acr[xW\ O ҋ\E/F'=]ࠌhKUj%Z=5e]ֹL?[`GcxU.)cO'm-P2V\@rh(Qj&=WLgCp|7n+6/ E̕~XŭP7Xg5%|n5pVikFw0iչT+4  _=&n,r^Lr:t`'XK1uLPȲӜWHQGzNj#9vquBGlTOFN{7 =f5IX oj LQE><_ڂxeM=*$vO}z~Zkso`~ZH2 tW5RN'yRt>ο :Yvx>t搫NyqtU ⃥՝[ҸXدa!L[{-hGNY.@M!N\>Ջ"p@pc DJ*0`*|wK| [b&MVH `tjK̈́8p0I. 1B4=rQ @p' B2X?HWEE apFo&Ћ3^GJog$??O"8-LaR O,O\u1 UO$#n%?I[Ӑg̍%8A)АPED\z+1F9963 U->D[2 8y9(HP6a-ccC+ Ncr _GRAPruoq0L&ǍB{֝6U6Qۮ. L1WD){\z uk-jf.@?å3N焢wFωdtbj'衄4d;̕ M\,J ?awg>~ۄި}y 4XYY;I |o˚;fD#S3Y&%3F0{[Tv>[gwa`-VIq[HsqT$MK5G2U5mB'ǠPw Lє%/7F*W8 Px~_3Gc~&oD6.T-‹" +*`>+)|`ԓ}?2VV! L0qŇ u|fK>ͪWMF2` MWx'Ofq$T!실pg|zv?eVN 4 %Ѥ&'@T S@> `=ӹ~tG)˝-17t-I1xALEqӶH]0eWz)J?P;E$6cI•\ugFS1H4ȠN)LLzEW@oNYFZWI"g2RT'~B6$rX(t$4Q{3HhxBeLXdi83kuR ,lC*ݻx 며*Ma,<\XڡFѻ|i<Sz|y` `m7.Stm\wg":ſK7Ixԋ#C5ޝR 9 sg/4(yCS~0q FJq#=Fd2BPī=LM滞L@z0_xT,O10l"E^gvck5uׁ (^~/<۞Fl|+`}p&w`@؍*sBUG)vSxeh-*R`Sq1fYjUT:fB$^] b1Ww<@W"ܥE5N,ؕʙq JyY͌`0a¬Bd3x[{5qNkTS$I˔ $ŒX&FQ1@b{ʣ c" 3}@ܒyPÓ"@J~J4]!z KA4[^JW| g^@V=0Fc)˵0pŦA]|`frX Ʊ2q[pprʜH(Qy_b?(lzd#Jyϭ5"﷖AkyϘyh[ yۭ>ȸHE7ƫt7!sCjcZӲ*GA<0Zǝzu2}.= 4sMDlѫ!_dt!;4'qE=Bx1Cv-Uu}ɜ+Qs[#TT.2X--y^.Jv{6ԙt_1=I#}G4ddyz֊E}[k|`M9֘˓XB%>nE׏ :!"߬NRtxIڊ4klrFpW]d*낕I[$ \\?906236?Lkf'j>8kD`0qIO<|ߗaԲU-Y)1MQT>4: UQ1@X?X^MW`rt/k$bP!)h2sGoϝIfn2vk,?0ghJo]~MEg{~'(*=%ZgEw'SX2R*h؁aT$,Lsq-MFYq#GZ1s#@9ɮ.A>lk6*-fxZb8Mg RE.nSd|E,[%}jj=vKIz <z[ƒ_|DUkdH:j\Jpz:n _S8KxG 2~־cz-uH Vl!e|I)X4cqaz̢QTv{ELWTd4xaldI:{asA/u0I SY7Z[R-$˰DxCt@_Exԥs=j6O.qZ({9>^*8>HԹ.!~Sg[-SIq2_ޏ Q*G{_(s`ej $sec ?fݱ+g?*E`&>=ҡ.gRժr_5>?bkxJ;̜,;;o3ݯH@R G 9ge`wڗ@QK_Ul9q/IG !(_ ,λsho17LN%koR͞F^ۀ:OHRԏ #g A&n쟩g#{m.i_;5cA@v`NةB&c{RI;+B\.}=721799cbf2dX=va&&$P~͈t܋}XZr"a<pʌ7_E<'If}BKϘO;ڱfB̈́*Daz>?"Df %=ηdg @uս5gtM0:V躂{E:\--u;rQUО1rDDsD& 吐ɎoeA"VZ2dž0ݚΔI%<3hR/m,\ª U2P u5N&H RNxɮEI+yTk"ߪǶUkI,^s)^Mԡ򬁰0 $'ɸ wt_e %8"EX6|âUǙ%ÛVѹnd\HY*Y~ C1%׬kZ.aaිX!k% YIáHEmNNRЅtyw.¾jfEP8R}6.:mjFM˽H KR*'%8Yz_<}"Ŝ]CM$+/a}Ջvyd Lje= w4&x@M$5|do %:_@ ׹u/7Eyt:N/qNah3{ Wp êT!$Nx>oPgx }#Fr_p}1:B>I9oLYz/Fa?Vc !o\ &,X J ='fnv&{XEl!r'x3+:ݪ%]j\E~٤H ȼ)?gКͲS9VNiVR#BHt*JW C/?o@8;_ĩvznD2}E}y` cuz^XL[+y,z>8+\gֵ{f(M2T/R0~61fQZ5%i6O?*&E!em6Κ2 a5ȸm:LVKmUj8$ $ FS)]TRt׼oJT5gʇrΉmOj a jŠ~=پJԙxsq&z;W[MQK4>/]^\`)?ÀVY%Tp]xp%d}|s1,/ Fԧ~D/޼nq1ODh*ӭ~ß22gy ikm!\oky +]#0'y5-ü:[)$/ :^qQNɖs]R2xHROn-NTpx`E8~Dz3{_WWg>)@L])ʢPYN̏9YB@9AG'KE.pd-cx3vj7dEb ˗CTLZ5]8}/+3ï/PCj-tS|>9v9^'N]LIYc>VYmG  1A<֟kY'ɐb Yi`_ -p "Uٌ7oᓦn_Ȭ^^A^Vm"*SK au+i3eT=\C pU}1ȯBp(ՀT`< lubw\eu̐(>Ҡu+ҝưJABy?ሡΜ&~tQ@0z'W nIulR4xPV? ڃ.m=vVZK1ӎX܏i/*G!kwrȒqţАZ'tړM9} N"Na/J iF_s?h'bZfdN WU~(fvNYҔuzo' E2!yl8D?KX~oWeYfWΨ ; U5\rٷw\>53ը`7"ʳhk&upkdn.)(dߘ(=S׉,߸ UIw1`Ŋ#Eԇ'(#D0&gFv|`;g#1 /Ovn fGQB(t .-3/-S4B$ֹ&NI# $S$Y^n)𫱠O4Ѩ2gR%WnMLwpXao"IW5"aDrfx%8 /a4.0.hkbJoMڝ` 0 QQ(_HwWw%iϳte.sաYzOi ^@Ki8@Kc w"}w>.͔3 Y+n1qqH?7dV8˲A&m&f );FN"=Wu;@ɱNypug>ɥ`wFM۸IAf>$L\jl޼zW R pϐa1̵^SxkQ& 5Zdhx.9DyA(Ɇr>OtC@RۋY#VrP[_7hvcbSb'ycABLay=O/XMxͽW.:h?7`G=m\e0igm*:-ȵjN߽ 1zW`+8IW٪)ȯ\tGF{hGhg_yc0@j>gˌ,p pFs(j2Lm !ƅXH[{7(S R%T):eSJv5b|0oyާtbQL1*("N%btsn+_ZZ)~/xDb`e4;I\07 aT4ˢhI6Lmt,lRHAC|9M5yzrsXQpD l7;[" H$i[9'n} $B';(DԗQxFWɚa|0 y pp]XL/:_+/at#Pv~n+Id[UFlEp':*5 o qNJSnVX-!<%gh+#t`H4'70-pc]W[G|ns.L.Pb .Quӿ 󸔥CǬ G\063fiSaN2ˁfOVB=Ll#O s~*; H/ֿ[8{Ce h P0ݡ-&Q/*_B>^E$ca(OwI;Z~nL(`tE0|#8³\-" 먂lj򙪧׊+n){4g plxHHŹ#gTox: X4 ! Qam-_| 5{@ɰhڝt;_77RCjkjRP{5_D؅ :vy(T, bE"/΅0z*q< )I_b5a8q\a)ĽmYʰ|wMq-dHg |H%EqJB]BQ8+kfWKflKda iGEMTI\/NP-to*4>} +}33Z%+oE~>Yznk٣{V2Iž=]ts9ѥD0{%~CGLdk#2P^ܴCK8TcVsr#J]7{ Pd,qط2+[[wPR]|e gJ٫:f(Β N£ckmIQFj0s(ǦKihsUKP;qiu-Ɏ&6]rEz)'=2a$b A*,KOTT 2]L{>I;BPI2#^1š/)d nfޘDbɨaj֛79dK~k5l<ͪ84]"%:d#QA)HR۩HeyϦ.mv}8cȾZ)L:9q4W=v̄e\P) + QF͉NKG,\ș Mt'yDh=f qog%+OE\ƽ8i¯6Pdȑ0V mm$$y#Ed(|WCwnZ(x߶f+*jf`?nYc&h2UȵK4,щb+ˑòogAKK$ӲR4w l'd@a\5Ũg,}87XVa“CFu'R`%F(n5xeD14e3M&.#},*е*:*]()mDsLp`%(Wf@E$Y)lzm$lS!;Wt}m'  BRCO7=dh^t w[uZHlLˊs_;;TXK5$U[*G}/QBi*SAYL%yFq]&)riYOQ5`B?#{9eUO t>m;ЧZQldot|h5/)}3H.uGGiyΔʞ&I!TC!aO)Vo.*I hp2 b00+5attiaN\3P T1_/No{vIapˤ_ #c>"˴SX0߽Kx~Of#LaMN;4; #)7F.,yAqVYB';^ VHus{C.jFvPzx)qY>x9ƻfJwE{>ud7@APv=E2S4j]MTn# 1½)H~axc #vEd| !玟k֥uhTbU&np%i\KhN$$(gZG^T"W,&7Ie %vM4EoK]ejش 췮MTP&}_/S:Β5_f^1ɩƫ{\Ca8+Wx`c(&jvqӳ3ٴ43\# BsJĘcB9>eLԳmn/#b[Yu1σM'pv;+$;ÌNZ+`}XWKOqGgaZnq:kDMp]+[% V zKMPoD 봒jljXmj)%5g#"hz,NX΍Mٸ6!|MS=HDjeC/1UՊHr2<^s[yLf8 0sLӼ3,=6r#_n1Q`Il\ #W5061X={yzbpMҴEFO p &Gk򻲝!$):vs)j^]e f.l5ЀGgg7l*X}T_T!T=lѓ=8b- $nDpTs{!406%L܇n@̮C:MGK/ĉ%{ګl=ɳd,103 jkf5UEv7Q^|F{L%r A*K~vܷ݋рd~L*HKf7}2 uN̋ npd!HK|EצH" ` ӲCx⨶Pgm ׹18;CJ<۔˱+̬XUcy&#&%[3K2ԤaY&nuYQq a ”}9~ͳ N`e*U(]@ %4lZCr1gQf8#-$`W ?X7ihE&w& Kl/X(S6Q_u=qB]C\}V]ZQz_<"ZQsCIE.ЛÏ)^6gletoVAU6/O ŝKL[g0-r'ćUd6Yn 3S] ^bxeTc~Pa[0;YӤΒR@h=XV;wbX 6zԎ.ŎLA!#/}SUHc(|45Pg*J_3ԝzT"d'arҗLit""ƮE0e_H&]\{^2e$yHd]3HIײqjC1zYR* A/1 [zZKisnA=Ro7}9u*IHx.cB ř69UO{nCsUd3ƩuX %f_PEBh*gwz_$fKRXo =Y}o>6 qKkełxq [^[nPb_pլbb^:R=mm`R67#YUAokE۹42&- zC8ޝmoxK) SurP 6s%6[m ~S;J|\`8Lj45=}q r8AgPz+y\S6U)mAbG T''3[4F"5g9-D|ʷIeȸfG X 19dz3(rw1T\ PCZ~*B֜Ic{B !pX G,_Kcc6h:qJ,c#t?ڣ\%张ϣx#Zs+ C~lb ɇ,Y,$~R~Fd+NW 3+ʇwxF}[;)?ӊG/0+ۦb)Jſ} rnXA_=xjyyk T\3+II/*i􉽎hVUƭ'j>''3_a'+_#6gNIJZwў\qNAc(h1-/M@Bމ0BjyDmD (]P=)Aa:._*VH[ҮX8k )76ey~hI̞kp%u"N`!\ .ﳢaӟ 6C;XQmX Fg iz-nwarFC8h$w #/OZq$XDCF"fxy=|HqJk~,H,?Y!3~5f"V*XD=ZŲNVᔓ}L S@"G"c\{= rx,Y)Vlu 9Gm B5u-ϾNu0&RS'ፙ]"QT;b_7vҒII>Af$ kҭģA W rUdYn⤡sT|{}!>Po2< \Y97_e`buM&c&_) r?9H8zV ۏ`J/ SSmt:| @+7bX7sC!JPQګ=R ۻ@ZCFA8lݹX}cn, Azt'wMWܤ 3.\}A-@J]MKW [զen<"6}iRwWi4nlt zzǒ"" 8tjkkihue"}Pf>wph'NU⭧rqZ}vITMiF T&huqfae|c_@>?u; J#v.{9tMj.anW oZT L+>d4jh/~ xc~08'zcE,yηgtQ%(<KL U~%Ybe9䤇>wa{c_~˳!'Eb〧AJwA#緦 h}3Hw>?Su2.!9zMh^p\lRjm@ӆmDsTF$h93rAuzr"6OĪa‘t%i*g;M"L$ L{^ I/C9ti]<T!]8ƧkDムO14-£.H 0(ԫw+pbص|0'TlqO t3E-;˹`(·L)wGWNXj憶 "Bexv` \4,?fvs*˜VL 35peءm)+Rڔzx8? j{9Ƨ{jTl8/9iV٥d)^Z9}CS͔90ǡ%;'FCG>;so+Gށd3Ln4a }~d_&qun esyS 8I1'=Ϧ!~TբBۓeq+.nm05tpP!V,8ϕzr}D??E+EY=eRTV5<-R?k2>RDg[o|9i-D,,V)_\qK ų-̓ߖF=k~,J!g]a8}"߁r3C,`fo,L8==Y&cl2|c#"3وO[ ;"in↙qIH%~LjNkCwNhlg?c154{{KkX5‘2x2)'!8k0;';*6"ZBU[UuAL\J| B|w?Lize3l'Isxz!Z=f+Q!GuXȷ^=0y `ExdඁgituELVLEfT"$Bҙ˱)1] $֣1{{n#g{)}^^!4oQR '1 Vƙyrf=H<=]6HQ[OBxvX<)Յ3O=tjm+2j;HȉUZ䍣rג"W2{Փ1C TlO!ć-whmMi B\3g #+5IVU{V)ON ͞v_=<|"'Ռy7~ ՚â;d}Q.H0#F HX|#ځKLa}I ikMCo!U -MlGp2yFN62=s*ӡjsDbO 9jIAi@_'.jaN&1^7DLS3\=XF8mrDs`?6Zk<R8Aࠗb# @$ ^O@xK!RJwygwIH!Ӹ͇77zr84$&Ň=f]"KV d0'eQÛ!O;6Y[uBֻ0M'Q^;Y68<⿉;䂎/eߡirk7?HGIB9nӟP '384[9UuR!S'3`y7cB1?K9F_|>sAΌ.(:,DFo"?^Ӱls%=ņPx,(Y0Nt{*3mD+ZHO39!Gw'Fnݳ_5(0 ’"ot8XD'y>q2i֜Xf,@Z{o&1J,"GWSˡg_;R ;"%@xSr7pDfm99wq34(, SY^xxߖa8П^ѳԭ@n(p[(k;s}(Q`Nk/3J]0F]#Q`_SV*OԪγn>l_]2= two8] teehаno2)8'mDI!Oυ:ڄ(_H˰>7 |2 Y0q(l^ID/ytŲp ̔(svO6$1lG<&¾~ZqD3E}Կt5frɌy(ĿߖmU]QTK:-[؃ SinTQ|:OtBuE:vvZ>my]A5X4T+|&>8z2 fXYh/0$Vc\VG2-ݽ1I^~U呅8'WHf+BPHWTN LAC5H"u%/ol; r _4~$ù|in0bB| 1]Jsys"ՏSiCl:Z2W*"C/eT ,XnZ%my:/GF+z&+d 7ݿ4O' pJoΗyS&)_R:/ς5 +JXSӋKv|wIi;%aZ.rή]d!b>/OIGR垵n۟lk/3 ^$\7GLCû.]1֢d?X ppƼNW" {hd}Qa5H|9[8i~QE7HQ:d$&KS3 l;ܚ9:h<1Y:srG"eB 6;MH/Ew_ 4)EleM'yR4q$fM4WSfFc9ܳĔEĨ[#}]oxuc(yu#ZaZGqPl6<=DU'? /N<{ :je2qP9\|3A+hkg7nY =˟{wrgy Z9 r52i:FZ |>W<+tRǧ" %8tP@~;MdCj!YNXIzZimR vWx5lrАUU c*?1s|Xzod"{0C䇻9lV(ǐ X Q*:?Ύ]5,_+iSHkmz׭t-X;-$ ߎdGA+3&T!M>~j.@9+4c1(x (!5l@0SSZ'e.~IeCȨS'Տ]b]E%!Rm$JC2R by?xGOԂ-nևp%`b(w5i4_VqaU+=\c L+9#n1 6gb`ۗ5v =[) / <$oYϱ]$:Z5hu |*ڶJuՐڶ*^r2^8F)rW딬εG%|qNvl~Շ˱j֌<("^) 9nL(+T=lYNlXkQCqߘu}@`V_^)i3?f>*|LV9YL~To4IP"ΩPҰg Yo Iԉ3MkDLIsCq4+NTf_?ss2C6Plp?\o+Zue%T: 鄝:7V[fYXnd g LtCD{آ =;..v'xI%]}hU[ƿgS ~fMux~<cyI(Yk3'qA,7WP 2zWLJ8ƷJG6a2s!i"`E\edeFv8f4ZJ A7;&{ڶD9V@Cthd=^<z<ϕ `vXLc~T1OwƱQD6+[8J6T),4d0e㕍v"JhpTGh(ыѡMbI 3i^a*5<޺*2ԕ]W}/e5#H%mugB:wtF=i`?.؇ҥ-5Q}zg$F7h|8EoC9,w"فWiMSN$P~,ztG{}#>Bԙ03{r3Qp'")**x.߸kv]d'HX{h>U:81~275h9.qV7TQcb$gF`&&޿h螺AK"s6==-c>pJ8Gkwj$&_FSVmsa=5ء;Y-3'O{,̓^mTeǢ5t7w-^C-6RZ(cT u/p E)T-ά+.Z=/Oለ5&c>J!>5j+"pKwA?4jl;ҹ;0\ܥ&g& p=aXBR!K3L<)胈k,n`=o VIكuOr_lgGA99}2DЩ;t H<7{g̗7" .v#GkޘyO3ܓt2Ssmn2#+XPإdYQyS}h@Wzuʮ/t'GJSsp^뚭3% ޝU,y:ay8[RRպǿ&fէq}Q L zgGY6M2`۠XB$'KJib+ \98)صC#ǟٍ)=UZw[J+00u{aނbj%N,л ~>:2Ƨĭկ#{7k~N IYxfe+aa<Vذ|~QH4/odd&z.eLZ\ sZO1V8 J4 b,7Ğ.?G> n+|ACҳ/JlZm}E5Vկ`o@I .fb/y);Bf:Mεk󤨪t(iaO0Oy}6y;qJ tFJʴ{}/U {Xl;T1YԞtAX9Evfް q]-݊ M ]=d[lrb:e;<ca7(e2~ǾOqój,?R Z§}w. nf !m:}3-p5_lMS 7A^S3{ hÀa% ɢC2 qYch&ɶpLA`O6^8 97ޛ>\\Q/\rgy3W$$LDsD;0~*v]}MaVѥ'1=Ǩ.ɼ J+Tgr%$+aV9gsx?+#SvSs{j~oeh6e 5ٞNIP\*L\i/EPQVtU(6/fW_5.Kͭ=2ib r߾vzbU%=k@DP['\V eo=؏7>z>ۆ~G@{+eAl*;QIØ9·nڬh@ډ  ӳ\c^ dGdQ{[v*['[t+X.F ,-fڴ7\PF-ޫ >҄ qNl_mx*.ޝ:‹[Zk5 B0B?? B~':j&Jqz*I%I_)s,DF(BhuF}Du7¯RuIm#8:THqqk_B$LGɧв#%1queiF<(ppEDfDIZ]J}j덁  ɰA޺zʽ1|(=_ywq9[ b45 }!Q_4_p+] ) !x )TAiOjJ\tqAj 飊?܀{ZȂh;wV78Swy|eN_ Ew!jän RN1z GRgɌix-}*Rdv悎4m33_>vE[PJͼhY=ᨃ,WC_ 3 ޻#wEt2%?3QOR:ʆR EB&_J(Q2yɐ3ED  [ӯ؎fĈK۟_s8o,g=}gG`6p:{ z12Y0)x+Pea Jby+T--@,54c+H_HBQ?Ye@GΝPF683BY;##9WY>U?3}:1̏Y 6TB\i:D]tI"?U]`0uLWi+*˅} gL5!vͲxdeOV)p䊳hI\D-Ū˧kZ"T+>EV`}w{/ГdbKR-$ҰPm,p3)oٚrͥAN_ݏnEQM\W?Il%=s ZJLNBe4'S P m=GL^VRaH0Y?Hf"NCCv[1:vGe F0/Uw!`SǕl0LqhJti`œA1fδ= vu~/ ю@ne@$x@_LZ1TJ|1Jxgt荅0]T{$/^ɿ(HF˶@W0KF@(kV]aϳyA+ҕ1qb@.xYMm 2lF=eFoN_Gel4Lc'FfLuiT*g3~Wɍܦ.GZQH(|q4Wg 0NsfApˊAy_"hMH" >9$A|Xf/"V qhp'&d75tsCѿ/:x(]Lֆs{Fff5ohO%5-%XCȡ /WKk:l$ ̳ȰKlk=v#9k4{>wnJ].l'~d8QqPۣؔ9jď,T_4RܠfY%{"2ҙֈH [ڞ>q4LY`d‚2=(ߍ,i锝UmhP7ip %{R& ˓q R+5 顯F$#e"r jb҅ BH?ʆp/K$צ"J0hrBnQ5Cm0oCPBul]Q`9C{QAH-'9's~K>ƕ\JoD[_}`Hn!no'B=.|Z,3Gf w@pg[q*( XAdDI Ղkg.1#j8dO褥c݃Re.՟0*% N]Kx<7vy>ݸ*'[Τ+nm D"_ė?LqPkIF Wp-RބjV||<@`ڛ![qĪk)ݵr06S/jUI RU<6Ti-ku0P} 0r$:I0i=yJE" 5Ws9w1M 68S)fS1o[E@oP5J6+Z߱p]|i48 |X9#21t ag$C*XtMCF6cgЅ+ P8䛑p t~<_ ʰQ"5Fr2pY#VIg+AMa6ޕI9_S4ھǠ[!a%| p *3#рO{Ԍh~z 5brpvÀJ*l\[ҧF }y[Ȅ?r?Im!z),#DGb鐮as3DFﺿxqm^b P/AՑ\nq~V4ܸf?=K5 دK"8|,[>o\۹deWLUG<<`Hp"#뉚 nr@^mWBjY47Ssmbgb>фQTIBmit䦈i2gudAFW[Լhp IM7; fIo_p*x-aD ؐ(+z ɆK"CvA+*Qڌ e6dk$,\lt׻1/T<98bb78T qp س4H5h ڐ.*-XL6zY% Z}qCsŔնA#BY' !җf/ؿⰠZZoAjfuN 1rTx=LcG,L#8*D W%a\J@GLF'%))VIZU|Z_ By4:XLIia1 juWذ`;lDmAM`< #JR2cڍ72AO:u@-CQd"99ٴ&h"9v?(;ҡ5sY!zNgY?h.^o}I/ɻbγa^og.C8(ܴ\#物0 JРYwX0u&la{NVlg2myl.@gȏ; _vuon Y8<0 EK%X$"X=HwV߱p,,NhvZhַNE p콻x/1s+pᚁV'  >(?c@0Χt~D -B?a({ghmeK,cMS)SseNܞ @18ܳ׈)5-])#ZȖu?56[WԒWoU0Q8oW+dN='eƳYy:= Mws_k9ONwk$B}Ct Bt};TxVn\=XFxLoQnoHaS-E}bˀ`Q2D`r ?.~!mRƘ+( MM#0S׭3Sxd?@G0m*mj4rXZRj}` ~4Z\?md//sM8Jk2qe1qiڭ-%T%;>xai10YnƤy=i +W? J446i zO Dյd0̼?o]O?s x]u dm[?֦f:f?Y52؟Ji:{On 81kYS䢺 rc+zD!l}c"gg fn(&~q+$ڋ':3GC }t ;, 4\Nw-tJt-9x׽u̟"p)inބh\^jȲ"{VQ9OjθBRR!,K.lB'JLƤ:đւ%6 ӢvfsqJ02l#"6@5eD|HHcP֒]ny3DQکxYyzKzHaap }׺7ۤn 5y4뚰S{VMYL[nuUP9)1(#WL] {:>(-ie|2kuc38r;4ii0gpS ;?Z\sz4-$S}hO(iiJVK2Aɡ$b$inq<::0+U#'a9 OJmέN0DKk[.=ip0Rfn0{DWZ$@ De1/֮;6^9Jސbu4KgE N'N: rE>]Jٗ(ٳ+&BE.&]6߄ȢS ZDj)Ⱦ)XSPC1CBgş"ӂirG?[bL!U]hi:O4RsBPǁ @Ӓ@ nfEIq]Q0)`î%^emm*6 =ӓEGC~~ 1\XؕbL^76YQedO5y祴\`?UWސC`jxλw=LafAP+WBk͌W?Le˝rg#bsІhc0b;EpiI7DF~.ي~ըvUF|C`+ݸz噪MmxB}ZaJaƮ>X7]"+~jrX|.W4![]\%a&ܸWeXq&C:&.zLh?kU@<'KN>߼=2֎ ϵb~A"[- g,34Ihuٲ(VyDUK̤`dv<eB}:c>$-"8#7ci A |Ij.Db:B'%h,Iϙ$ 3HI":ϋt Ky/ 5ڜY riHs*ap̲ktIM~3ZEъG~8KNvظ*|>.:=CHYH(;mAWPWZSH@X,ܛ`K hu&-;JGc/Uǹ XXƏ1e@wl{p`|c̄?lWzڗ:U}đ)A|;劮9l`UK0m>`czdvHczf/pP7x?*IvRTY K,؝h¸B\dP ST:\FZt>[,ŭ* ((ی뗅5eD D EY*2D^I&`8s3iE?1R|5XN%qau 苴d{mŽ#IkZhW]A+M5ELDn3MO8ШuM1^\#Nj"6AR]HP찿#mm!a0˝Ez8WyfWǕaSX#? JlEVX;5!Cq*}JL7\aڍ#%D~STgh~ ?@gO8TMD}`Bk.Yt Ŏ$MO4J}ߐUN8QHgfZ Y[ZБID0*f[S z2x'-6XO37;=y-6=F  ('7!Tw2 *pF0ihI5cYCcӮ%D.A&)G&m`U9~mA\rX+&Nx.p08l6i5c Q 2i.lSSl>W34&W~h#P.j^3ȟ)YYEJ$aa녥 ¬'/7(KEH|9{s{N=jxU/W}P)1\f7pQU/;jn(vO-iӵ6uVB!w'}BJ,o2Ս}yǿҳ&"e^;PÁ pu ng >"/"1&~T 5miγYS(dfRho [J QN;R22  I-VKA[R/ʷa`jmj|\n)A}U6/_ ط0܊)Rc8hO498RTo(Zrs4/,O4O`˛)/MYy:/{KNa3Xp(q+J>Δ?4"$Mع/AR$+b} 3t H͝>v$YMNtѧ!;M4d۴ۍIhh_R>5x<6aN~,xo}UGt4"ަcUKmN W,dP94U(n5 O¯Z=Z_ DGZ >{t Nl+\Tnkj,v&a^V@Iy?/ZI٘bx1B9i rM7dԱi= }\|m3O҇s($ަ̐"6 CnaBʹ"Gf8\!0L2V: F1rLDLhQO Q 279е)ZoJo1R C+vML#[iv}n&B7_M7 !Bdp"[L@,'QJ\@ާ"sn<}0@bKY)]KY;J~(XM3]2hU԰4CwK:|!h}yyOq~%%N/WdF_X=<CsVr)ʳ)Ǫ8iDxB $!4J.Wo0${\tHϏSC-AgNp |]\r7mޮvWXP,ǂHȠΰ =$iV]C<P w7P_D׮P1s;/+myXwg1HA; 8 Gwã24˜Y #=ָ-Xwđ&vROss #1ӡi)b(*݀c@P$uXQ%A.=#IkKy&o?f7x,V- ZI[3~JrOCKQd2Pa453W$5 DUW Q*4D/oװQ岨bhx+mH:b+s5o^DN0d~Ut{UP<2gj^i\^E#1 XNwh/sp̮y\~%q悡0/5AQNn|ȦX'CU۬S d|.#c6:w.v'Φ1w۸5m,n9~?ZH@@qYBQP$nB؎AGK}-ڧZG ]R\bx`w@C3@{"y+eZѲ7^͠&3 ^]a* 5 jՂz{ʧ r9fg5AO Tce)!cBR;Wv 'Tr:`iyz!*0wنi7y~Iˋ;`4 X4I/n"V<yDdx b[~70:+n }]EM(*mANSJ!} r&դ2yė$A,;}eN|IN WCh $ZU_µί:.H} 2ظ뿻,]#=9?ȗ0,l#kXeݨ~v6Ƚk( H|,22 8 hQSQ 2DpB0ffl3/fӈalfgCţ5yAMRBxVB1~D_0o^Q uR2A¢P{#O v0jV/ٟʃpezBfrDEӱ)L&-Z߳%rv~B]au #,Y-Am#MJžvdT?FI#VhN It H9 L0q^hNt.^{.bvbȔwN%+쭟cq:#=q3,ŷxD担ylDPf1¸3p=_k,7)T=+1RPn B{#9O5~ O[bs{?"SfH(t>?wc.¶G2ӜEߖRh\'LcQuL2Bv_ !3*UhY[%o-\Z (T :1f(Xi/!֠|JkTqO8Uyb8vh3Azz }kZ} ?B۴%!!o r1o%AajV!/)6^@j 3gӨqФm])Suw9i{ƈ9bݾZhTc2f5WdV1CP[sjՑgaSԯzōv}{p+)Qȵl^f|ON4/ov-f ,]`zaa`Ndx-#㬑Etd=^kfo?UJ.Ah2qmMO#$ kBE/w@Y!Ҋ/QsuTW .b ͥF]pȰosMI5x{TakG? c}Y~_R2,o$UNGd%0݃#K˲s^QLo+nprmȔh})2rϙXL(,I3~ 1G$QЪu> TqEu{͖ ѴD&\͎Дz {Nj(H<]SXLB]3gȒ/]R\-cL z}.@Rno2 (9eHF0Д{ے +g4U]ts3w3-7Y޺m23\Qk]oL:3W1I@]E )tdsQ3@4_e oO8z7.^yH7ʲ{PZ#\H(`YාA|bA4j}ƚKsO - ns]ԓ /~ѥG.]ڻtN!T qHvzU&SW=?yHK1 ?GܻcB.O tVtX%DOf8gHkT$!6aIDwh), ]& 1w]*"c6 iP"5tq}QQnr6V Zg&Wi^U[4\}Dz̚d!k.9|&!tvsхh+ŗJKH M>-ҍs.$}L_وIKF=H0=Wצ}B|5zxNJ^1~5@4_G%dq׽>^,AZ+~Y;epNsc]Ao'V1p >m<y f?on'B#h+7/ݷjtiL]){O_%XcUn`tH7c85 V{䎾BSv'p@>臧@F D߮@XCpKu-xEB/̃]F:gC̱>w&v!2,F3F~94A<*x|RzBqƳ6?."H+; oZdo *Ae2k9T 5EnO%7W/0WqDXk/3˒v{5^@ylFA-#ej>ѽL#O麑4Vui\&]K|30Z -o5HI'y<KΙP ڪ;?2=+mr v3; "(<ض.`2sȱK곷R/ ۄ1gh[IufAˌ]-܎Y /8ʀr.afl FTl۾oIDo9m[ 9@U jf|H{ nW$}F$H{\`Ooϑ}rÊ&Yu˵lR#)x\h(,+aK?gI-c57Ė;dTwue1&Mdc9arҳ^O,bdcEVު=9g PHz %JG;ex BmRsf[OyI,)jQ4>rD~NePHg3~UR9gtYC}XaH#nl![ Ma~8L +lcQƅo֪i'oct q!%fvcG|=6''a|C\%-m Gߩ7]B!Wt5qD6<()e$SPK@S瀍Ox0_|ծC*@Y !5_!gLwx\Wݲ@>#;SHXttF0*.d@=o4lZr12٭Q9"w g,1^|/ Q x=ñn"拌G/X2(G6]t}+gAL$i\K?2Jrtv[_IC?'m4t)AG`mM=` TS#d O7F_˜_+]V]zlu-r'{KO(: D9z;5)Y_{lt˺u6恷Q=+UT==oՂL0)vI9sQ{G. p:NJ-vN`9=tF[:$luC U*VoM;7(ns)eC`<2k#o0%qﴴpc|<;঑ʹ{߭[G:"BBC4m]*wQ:-fIGՏI@_AVNy{RSDVc9QHb G2qW(׷YZ#Ԩa3"lCZJk$wMͮC"Xnu9gzDzt @nv{Vϸ\$PE)-1)s(ZV*↤SS=RE (Ͽ/“CY)fgYe`]@-P_IJ;q^-eGF_)).1]$&][hL:J=e"L|\zkdYz[sR:dYm՞j5~hmʣ~s/Z*,CSzIG u)=_ 耖d 7, Vg0Ha=`Oߧr1[9'N}x* Vds/ͫai?(`xx4=U7Y|f0g2^.Bc2åk/"#~dXMhsP'r@-.R_$kX^xRí7i#CzVNJ〃<ׁ.NVh6@GsQl6S0m+{$/bB:%9z04PfKJ]j6~:Լ_{ ÷TnxlFٸsYC _H5~2!$@M'=1-0oSj]&:.^l>[~ ABL4^M+jxr?H~8.NxUx\:]pO$V;_֩6i#RRTC(@qN&D덚IVPSҳ]yV>!A- ͜2<ӌQhH5k,=qHRYKꇀKAHpz)4e h-@_Im;d1I> sT[so▩Qz>_eprj~ t qli󗾃mXOhUI_};$:yEuE~$vg!MSsi4pC!]'_oĂXv^,4F|RaB.<2> u@Qc[mgMNiŞ keXyB,zU:w?&ʂ?- zQD$ejkS _#=EMԯ"pn|{v& 6̤EDz*iQ}wps kȃ){P#]s97|cq5NgܶN'z,&> ~*3jCWKr^4_,\81c@?Rъ, V%:5Hʹ-s@c`,}fP?š*YI'ǹߝ0UVB`^v"˜B?k^䁮zN{22~[Ђ:jNEÊDZ=*nY`ZnA(~9k]6*=Yk%Գ1`Ȍ*f&hu`T yZDZC}Ej{àuK <.3zOP`Q7 nVD<Ó;Zwxw '#}t/1u5-ߌyo.XS`gh2:Y+?avؑ !vm> lsˡ (nۄ,4+xH _Nu3RudEu>j03@E/*V2\59wheEEg%߄ YZypPb^=` Tp2Vw\ir O?+Wy,{yS n AFb\4YG*®pYyja*u弻?ye=l>@GS^IKTO"'B3*/1"T9K)J_ *y3~5=*{{23%nFH@L%ɤaVA/2 7XQ}oJYAbe[ztMIq+n9gZ Cwvn\#FlbzTrC $sgձIUMLz͵N=rKsP_3u1B $D_ًŒ_+&\fn=]\3^큘eQ^R.SuW"TK\T#py9%< cûۍPTې0Qc S9\OMOǁ64ERJ٬ۀC[ h])lK9VC?Re)xW~&jSy)ˆkfTTxZ LX?+Vכ͂ut 0escR.}]KA&-p6AC'ҳti:4=+ a,?(\7< %j@_m;H:F`\境4d ǃ;85 ‡{iH'OdjGD2e mgml46>dXl;ޞIc /mpǝW˘ 3 C2=$bύ=.?y%"a$2lu K#u/!_؆} F'\+O]D/1"a:wXqkMZC)Ӄq'G!|GYixzxrvMEKv$O*fW3F&'( e7 [GL2ߥۼִ<ߦf`СZۤJ -`X>)`ϙפdENu@9@NlԜY@']QAkcqT[Ni3s\(sWz ; z&=Ϝ$|gԺmEՓⲊI<2P\dc5QBu,".?tWWL8F'׹驣E<欂m\qej魻2$mI?| \(rT- h|Ar*]VMG=LI% }$R:>9B0 Wj$dWC}T2D9Ѫfݰ!#AP-ve}~o$p Eu}n. _HI".&B#:V2^$#@_Tplʠo i F0-Sy0Wq)]pawHoE_~o<奢ެAָ&%O505#!,h!oz_!.X,p^SΑ880cC)VN !uYWrLPN 'N@}Eלjsp>홥>sv>%j \#(0KI$4ԌUfaR\hCd85_ i >1㘀}َ fjd7x2Ц n]48yCV S}L]e1(E0Ɇ ;]tu໺vko9( q"5\ӅMiBpVIrx?l19[sIFm)az~䓼ݸ m{Y`!r6\ 6؋ >4>^-9L( Վ^GnlKc Lms^D %m48 .( o>`cޟWdߛp7 9xZm2DIG'3~Jr=1q46B :|dԅFWuĞ'ĕv۝6%K^~G-QX@V efٲx/d'W:/iwGuۚf=ͷkmlfxm^x5'(vp*X'|; Cz>lSg*OYkߴ@o& ˙4OlAnir ~5HEIȊaWXTDNPU\sY@(i} $VgUUl^uO~"9ZX4GF Z! \*ݠʼnQr/)J}^H5EN$;Zr>%42?D^u}]/N_Rθb/Nέ)jtQh,nZ|;\29:Tz=߼DzJcCG14A)"dϵvGnެdU썁pr,˜ B;i8qRn{{jJo})p9n8*OJtп$5msjMX)*L=:HwG.dtXm@G!ױCU gm~ TQ[K3TBsqz1돐 yic?52l\Ŀǃ7QTi #A9e- NnjXZ@H,P=sz hٕCttII6dɏRGaE~;0Zq1Wp&H97ņC6>-Adͩ;-zl}_Jϊ4ţ#pZܕUy=9sz)^sgWp.%P'z3C8(_„ hS/ܱ뷛5"3"_LMOBȑh*(\$ܒlXAJkW;@{p̾)Ęj.LLKSE&UNB[7>o%\k}$ RijqFQnpzޙ1IȰ6cwְ쥈ڟҶs ,˂b ,i5kw92=HAQPX!G=J/&D\x *o6;_RRbzqN^6lB#2(wEVj'r)3!_ViYb?;2Fg3f^ſBi=+ŏiIKFm *V؎kxloؙ'S̵[rPb(4d="]]sJ$^MQ*V4aULD-]Ӵ,FuvcX?W.>CN5YBu9FȘYoᮌ+flOmFwЉNa疢W`VAR"XzOQokkD#_G㽣#tعna] =ᨅZs 'Ⱥ~2rK/`S S%IE`GĘquF?k͆K9".7lv# 8VSz`<.{`l.AXNV…u'5U.r +X-&)w-rI# x$@C|M9mk';*k$BeВ%}FJg1l·o$AN*]EiLE&уE>خd dUۭjwGbe+V@Tx|AKcݳg}pZ[jmqa`μOY\5t-N08>[ɛ$N^UIGEt~Wp[9RQyKXeP0XeӦ('q "ǤY/\Oz7pL H|P_B5Z/O0qxkQv;ӂ3R2?hX*g-龔6|&D+w'Sꡚ&gя1]kf̷|E r&ZEMmҒsd7v KwU`Kz>f9Zזb:od&Q&2d\CǞ=85_˹*KM7u1 ] .5f^|N3W\5= m=6ch~B5K3~&ۣNҳP FJ6/Ŵ2!AvG9M=UApmѵT) X&\Z=KqU@x~IfY`ׅgml^RZm[Jԅ&b&1v]X ej'[y\jRU] S{]儊bf6LK[G>Z)8BR$r 8@7XZTl/%+s,"ߩ6!,^h*'ثKzT 6Sl1(ѩh?_MFqX# ?媉OޚXW$IZWnc!9 d`owa@, [Ј-Q:*2Pii.p |rJUoYSfSpMhle~YAx:73ZG ;PLbx%z 0A)%̡UVY$Mr>n?.0yŒfOsco!$ѭj?@fKc#q٬M‹ QB Va-'D'B+>D~yƊ/6hUɜtNtP5hW[H,56a$Ôp7FD =IOgϐކ[+x?t4pFI)Yȁؒ!K0I?ٍ>Y-yUE-#ڜVqE}'f~f3Dh M>3^j [Q}}FS-xӾ=*vW.&&MH9@ 3Di+n0ohаM@9#ib}fq(CG ;H)6c,_WFg^ D4N (%\ xDGЖ}s0[B{ZRKPnʹMY:2Y%.mϷ_|.(zKĉFPK9Lκ#A`횳KёgGݿ.[Xb`l5-ZEi5u+8H{}KJ +|eVWN&?Jy3KulJ)H4$6TPݲSFݎ dU#TFz>@pTL7PҽPgh]vb4M\1X"[+$ò׺A-o2c.U/~٠3cWF&-f(;cc5k{vFL-jM8 )_ZߦS^@,y$Q*ruTDE|/jx_7!n>DzW2bŀ` D0a+,Ǟ'S}Ӓrq38k*]QH.\?Giq{NnP :r9MxOg[`' K4 \KzzAPd7|N5v7>驳Pw+,٘unt|#"L+9-$U-ڠ+D6_Bx=*X>$ʘT^3;IoaKGq M/F8cm`ay42: L% ُ1 7B,gC=M`]!")ggg*{bavU@3m/B/ҏR]kBsV᥍;Nv y/mMltC祆g\'~JKcm4 ':V1M=(Țp,wMA;4li'ѡ aNak4f~q/9J$-z@'m$"T*Msz[S'}i+w¡T)bͣafxU1ӛ*\ `z pqH!c.M^ iqUm˺ݺ]867R0LqVI.D%g?͔ܰl$%LjxViC|uz}ٺ_13D=2C8gNc#WSdq蠾p4.E04.",L< 5RL2'>9vVzRW$r5L\vy/o\: ;>*Kca1@z])I kVW~ҳ2LMYjjgXu3ҔZm.Z??$$8oSG];S#&/m{kh$pvpeGIښI,`xxX*]K؄仚bKn+VxR菼+Ͻ2c04vpm6߹u1[2^$d&{ T޸Z4Q:S@ +ԇB3wU[U( X&2PzBβ9YR%+"[gUl+bJ6 R4Vkgܣ|˫6fA{p |{ NP D"\SFU. R7*sHBH(qUcmc9Qb"va-a{°W_&hŤI;GTI}ii{T5fQM.,G`Mh |6w$ٹxD^X*zPס ΗiY}zI4ƽ.S-GꆣE?ޡ@1l |^֧E(mek0:tV1b' u29 H*X7.T(\7>!zf0M_F 2!Е8Q bۥOh8d{C"g:@5rv"NijM ZkC``@PN:ӹSncOg,!*tWE sB A%1]+/ܭuf.;l_JS/N}|>,̻H@> P-yGhj;u[rT #\&X*TUo-vRl@Q$CK\7Ae}*qBzB֞ЇL1WiNW۰]!ϐ6ҿ-l1iJ󊢢"Wޤ3{ ­ om…׬Ct f6OO.QH2j줠ƾ/ dp[ÅrTDtѴ:^!_RJz/vqk;ϐU̙fy8m'.qe_s-H7Kyt`|R&:E7/i8_~Ln7l{N\ap"[a^PMv6򱶪mk֊EQYRI@Fsw'tɻeUʛ 'Jld8_]A"u{).H^q-0G[?imdH2ؓqyJJPR6JSP{b ˆjY(&C]O[f2Ha E)O8`LEzʩnsrWϏ>;Z&m$(X-܋A{<);;c˰>8/^)Ս5)~ąvnsh~ߖY f0[k[O5e PJt/Ȫ<׷45BuϢ6fhP}4Tdx@q?hC&k2S/4MQbĊ~ Is{O[n< ϮS/>X?ŗP;Yx,n;/ƻFŵ: Zl^2b}ku5pNMBB~(qڳ(܌@Nw+*]ipXòZ+(~)'B![vn J`+ PTȓUPYpXҏ{BqN(c%ZޯĤ9/Yf$!BfΠ dnwnrb1P~IO-Yzsyx-̮),h=]0sE#xo.Oʷo\qKE>9œ3 `CiqQ]~~I= %@I DZS͓AOJ_-L誛 w~@skciBX+Yl ORMR#D` rk< ^OVJN0()⹸w$Djo;5uw>u޲uGM޽4[ P0O# 7(\ ̈́Ô4op(KNQt 42~flL_^):hK;]M}E7)s:)*ƐzKGYlfH' &Dxf[nIh6V&!zptvaߌSFK7iNb+1 eh\o^,h˄y_Jm'>U8w8͙Ѻr Ad"22$EcDC胭¡0&Wzsb<$eߒx՞Hu;~xL}E DkL(6|PņO rшc oB*rU|k2-8/Gt$"W[4YČ v阓75ݾY}6@|j7;A^ompl0,&ZN_Kҕ}d3|W[xw('= ;41Vm+{bHQJK?7JPHX`zHM}ygvz N*dTM#!#Z~YMt`RC#$CfL@.Wx=.ƿs30juO༃#8^-Vg-(md2\'/'F7 ofhZ:'ÙD-Î>u0tAglX{>@fm*ZuN#!J>a:e%ч6߲4&v^#m β8agD h Z7Is+XRsͥG(I#ˠ&ք+]"s}#*bf_FyQ>>'\{<1u)1#{S[v!G,am7ݍzsUL zT$탌˪.YiTq@=E屝bQ~Mi8YuRN}p=UӰibu~f1 g^Iړ"R5{^}u6]Q0^1 ;CNC;b'JpAgJxsA[2IY;եﮄM#GIH/,FvoqiQf3E>R oSa`:]_mS`O27ɚp"m$>JJu^utz@b>k.j`7L/23YQVa3?:Bۀޭī`)1s~mI{[mn|I)O4'E }HB:䩋ql r=XL=$n{0$%ɺYr-:VNɧxu0mqtq3cMmH&\@)'etFn2Ag\eu~PeMRohXTǹľVBJ3h 7LmOAP'5B\CiN.'?g1,'ߢK:d[%'5DYX&'ro>BģV{Xs詉I,݊UJXm0&'Z1j\L:9 p*va~ ׌9{Zx5XBetrIhRf6T佉XVqyqGţ"`>Ei#t_k[qHT x }஥'IgSDό--V<u91t7GWeOWoĉ?fKelj0{mʧGvJsͫ) \j(.yI__gsleªvP#QCBL:1–(TΊi87H`Q(@}u "DRC*6/ I GT0/lqO]?8GK?]2eG eCT=eQ+\th-w䳜Z ,66q\!#z蚑In+7|۠m{;lDq/Ú;&d@Dw6( NxEL/Fȩ ;Z\YJT+ YYQ a9=:_遛\27it4 2;a)&1Gy .kKfG c,GJ:[Yu}QIC-:Cal,_k#V.ê,}7PI貛lww`=_F5htFu0 AklRpu-PX] B_Ӗ_vRc'#ޝU&8JwNŭ_Os2!:൒C9ߛ%r&$c lX_@fMoFD ^H>Wp$T_+tAF 6XP}.%!͊\lOakjiZ/Cb؛Gġ[BEҥR 7QdƉD΍2SvJz4;ȽaӨf|߹QpLK5)GeBvNGr UK?s]\-8"&Ȃ *PbwB/c]Z$wi )ԫƷ)3oa!j]p#SإH$r[`ݜSn7E|.ҷtwi"ۼh P R#_nX'Ow0ԒƈRo.np81*bynxmّtPumTp Y%?rmnj-. 2lnhDnPzʼ40KѢ05~"w<[!VPtVd\aU,^):KI†2lD4iS @l?>ƌ\Ȼ@HA2tKbY B1fG0hV>rSVb9Sg{>*\^W<`y6X'uT 7=Kbh]`ypBHjL{nK@ro$ֵ:K9bʛP6d & ڊ+~? Nⴞ31?}n@o9xuW g|} Nm@+>OP"Ea`)[lXv L'M=u<*U{""m627N UCd G yO7RY }MuuPmL8V(ENܠuW1BCqEe8֧gx4&CC]E6wʝzЂ+&G)=v\Ѵ6|G{j17 )Gk*$ ӎ8sMxîQ!R=@/,깉I%ع(f4(ij0+C\] fb:­_l`U ÈI50T2b .c#R }F AH?sϦ%y_9^" 视*i 1(ޡ>7,TL@(C jSt(}(+Ŵ@$VJt_s)UiKuDd5%c;K-Z3a_(P z'}I) EI΢뚱xv;& nLnauu.&LfY,oo eAa/Y%)k11PyW@}\2]c_&@<#- Mjyӄ2#H}GBm*=K8v{~T>03T +m?g.\iTQn;EV%MbAFr!obpc=R͊:"$QQQ CK/C7x3…g8:xhQ(_;#uT`.h-s9 èV^ MijrKVtCi7r|Ucd pqL揀䟐wlԄ0R#b/y_f ޡĶ[5 `QƢQ' \-ss`ĩ[d![좭?ۄug:CQ 4{ܶA؍b:-x~<`Te  u6CM|*]i{sMs+J-;E3&,4cy{MX ̇! Ȣe&O4cc0@H=4)imf^pRv\L@$M89lݝ1,&skɈ^[`e7pz413+ijq t)UCQEյ^A?% &ͫ#0uAN)Q~ԓUiR.j8rW91{nj'!3mmԙgk5(Tx{0,FM'ߍIXhDXQ\Z`$ ӓ} iTQM\ҶeHᔋLKdyw X*n_wg SM2\z ,8tXd4/YRCbq:/A,K5I$rы fd=A(|8Ң25eOSۢf$ G%EpϺ49;v v:I!Kj(rS:B[ >)<˷rH)~CF6mXD@aiQNy#ʍQ8ĥOdz_/ksÅ`o~.qj~,n,lC:KgոFBPw*_3O|*kf!Ij}[Vǽvi*o)y kd`frym:EǕ2F6 Sl#G!ắ-VS뷠95sh&.(!â"9^+4Yֹ%U?`,o0mj#Y&MA>p2WcOYf1<LPЫo0GyqLw tb9*L[7 6X^X]MNvҫ Ѿ <%8 jTgQ5mo 5^/̤7ϘV/h^2O 5a82% 1yd8ӥ3Uяٶ 6d0M24+2 }#6 $MK>ľk=Ͻ6O6:+Qqnݝd-}S_ұX/f(6[+ cy&KPN>T/#>YrE%idb\~ҎQOHMNU6] ET{AE߂ -f2>,kEt67?l+mmjT30"x@X$U2ƪoѢSޘǫ+H,0 hsH6XGzMhcAe b,Y]PpH+n"0t큩:zI=K˙쵣Y*UVjK)7?y%o}f+<#} g~oV{5@"z^_tjyeR~ #S_J[JM!v5xeԂ7V ҮX=Wl,D-{q FgOW>V6;bgvY!2q!v 0 "E}%r(z  Ǥb`| =܁ufDA*89_k(׋ˉ@3^z hk?#WorMv$c]$xQhhxRLoqߏn}[=4Gx:?Ö$$N<|}*. +`&hnJ?֋즼ԙKy @@D`M6Ԯ*&pxHv ̪I4c3`S_F8 QuN3<+y< U.kr7< \ʕ x\ S(\>}ocE;Q;\ p蹙7K >Eƾc{fO ܑgU?*h_xHwsJhFA.qBYE|Xy5NW 0(ZI(WGE|rD7/d% 6 $f}FmJ3MoyarvֶC f ,$R= {1gw+P>_9!~F'qqUWir8]qʯ;&Q>hJ~ #Bk(3`Ku!n+GnLִz #Vleud=tqLvBQj)2NF)'@i(k[Fl2P Y? [lܧ>tdf&m_q)e$tW8!P-K,2H p:uaZ*ѶN- EG5i2ME4i{TP}4FiF%j3#* sO~Z&A|wgϖAȨ.W⠯հFůѢ\ + =O!k 5,2g'k~^xY.O/Lz!u ryBA6$*e$Pb`$S¦ e%ޯM6`75/PƷ1vs0bh:k5vEBNH9l; ݯ9drz1ZZ$ LKhYJ7 ۰VHό5 _gR53k=ooqZV86Ww0ӱ+fHZı6 3ːak@y|r`$\A%]S{UhMX7V45L118C)A<&{z*_w_K^!=c&$lb NlGD> Vfd.FXo>U:vp^ GÌgAlAoW+((88,Kpk=s3SqHl;! vɕjhpLjX˂$T=! * 3y/|ƉPԀnew#Yr {Z(j%2y^-ˤ?Jvު~z孎a$ -sHdBq[t%M hxaqo=/"~ӯMfͭui36{|] 綳kN3/Z>N4WTt4a[ѠZgMk| ~dښ+ǞD-)HdXG?1AOm./=`Ɨe<};nn|2٬AҤ~\ý3iV ѽT.t/z?֑DGaNoN,}J+'3:<;وkyÅaFy8ƉGk} r UdO}~LgvA[H˄QL=^ڿc~CLthpj8ؓJF99hCu8~[(˙e֊M "4M;FEB@O=Ci?׌4<\143]s;gS-*= ]OHj6s{@!+HP7HTf_mеsf CѥVg[]Hs,S]^m>H2]`}Vj'HZ+sT#SR10tco}Ir "C\;f6GoA~%T>M<"֗br{;SiU,Pml4N"F5S@U^|qU?xҎpȅvl|dȈ dՉp>xscJ @?,bLGAAhC wO,[83๔[=1>Q(@6S냊yR`u('#fm4lUO/vJKlx Ox͖(]J)ͧ(x +-xQ4/"\m%{D&!{S-y,̴?`Q us ǻ3oR#p;1/+ "rR<l MXg Q o6(K܀n~OS'#.]I#:d=B42(yψA.3UD #o(Ԛ]/Dq+wIm͋Bӱ9-aDU5DYϊY0xg4/5Sٶ9mK:b2KʗE7B/m6mn* ê /"PC1VTX=>㸰 0tb8xy`Ug}Ĩwfo ?p3W@됚Ebr0? ќLU2/J{GPw4 #=%6§dm9:|ǿE@G38˾M⤦o/!p =-p42o8 >#=|d׈i_Rj=%jyy0;g腧D /2ex͵x9>+jm)F]"``+Q0 f'qjUd)rɠ [A(skwv=u@¢׳CNf^-qq{WŠ%@Hėm)&:ǹwٍ eB i@IY֍,C<1OIc`uq{u#V4lqcrۖmc(@ /$٢,_{Zޡ4\.NStZjN.Swњ|;Bђu.̧NJq`aJR)߮OZ"T!4x@redvnȐUyZ"n'UAkljw  V1|E,|zZKhpzZFzNu~Jjl1sJZM(;G'=TyCJA6^(tnyT3U3u8ȐE| XOpsfU-#K̟|߾`@*HHw;u.?GopcgEZe7G`R%!M%_ R`M0ƬùRǝ`YRy 9Jk_w|8~?9Hl"f[[Pϣ"[H9a3&81x$e47s47ilvt`[1e oj /L0ߕ|u1ך# ̉5 R."- rd%iQjӚw?ŅK 2G:x|GX,ns|؜u Q-8y}b/Zv䘿m@@P|5?)0C,,ZF6Mf ]݇:#;(\~xC$^;v^̞֎SDeAzb@!"!%52%Dr WS~J0;ivhIh~En/ wYZ1H "dؼ?G.о"(jwux9ͥ܋wu4 JLJߦhߞ][^? &^HHGB:iA=shT- ԨK4uDE52sIPJzO㳇2U)v7;m&nk{stE"^հ)Bشc0L~+1AmѪDPYӺ.ԋ\~DZW'` ȼT{KqroVn3J\]S.Qjmn?'(*\˙NhC-Դ۱6ꧺ;:.>z~#4E?]u Jukg&< DV4=0'[g1Bf 1Ol}ڀa/;>nB >pG>3+1ŌF6'\djU_঱>t%5a mLIA8P0}<_n^j_g>%D,Q~f`zLzPNB^)7 =Q=ьEiMZm{-әah0-,+Y} }j/D3,/띢|J#o^!d>KȉVW"tG=|+L/$y,xwY$M^.eL)2}h.@˞ eD۴'E? ^XD,BV@s{62[^0H#3-@ }v Y8dN6.-mV[U._2hn(nDe |f.y0aFJ(fV&d)T ͺiN\ߝ ҥ,M.;ULk^ОS'ߪ74Y<-E6IY\h~H<*" ᛟs a?dKi҃ۿ(}j{Z_UmTz)m!S!aP{&zk2rXa#؁%<1s"l{#M#Q#fA\aLxdp{ ;h cZm܇0~F?Zޔ+OD^?6A7%BF>8F 嗓{^Ʀ~L|1!.fJE^BS#;?<8Y) z;%I8Q X*k>ghEBm9@y&~62=E%&uP2!l{6j{{dM/ԯL 䲝*!.E&oeOIfO5θ LЌE,1mRʴD|L;M EQ \OuzZwϧ 崺ܤ=˽-ןtQ"hZ.]Ea[P"F=z폋mB8LRƇuؖA̍="#3-ڎ?ͧUSe7P[Ϭ M$= 6Z_>N-5 {#Z$VrR 2g9*6UwTQ5qEF-%JNtJ"JID]-rN-.{02}"*8yS0˳3|'߿W6ewUH`?HR#{hMۚ2>yA+l-302HQq')pLؤ\#AD&-ny3Dd@piZX8 %Hx~J7 wm4`OU)"Q@-VW`}-)NEyx(HhBDQw=&0E'\S5TD`>pZ>zKpV3 Jߥ5FhWJ[ZF2Gy.6ƤAib2هsT?c-ب>~?Q 5~d?9?[(pr.ݿۚcz-SN8R8Păfg^9 ;Z8mw}/Kk oGv㉡l&Dk 6mH|+ClC 0Bc;R~axt}䨈;fY,T~/H|_ip 5.>{=X-$\`m:oʱIh))i&DPalO8_*Yd-"9$¿zPêȣ!*yzlw_^%SӢs:r֑*udj& BOw[q$YumxS~: 8HNXVnu+aVdz@N,> S>ͱ4߶4 e@ߍE;[-#\.߭>}@U5jqnIA|2,,wR-&gOB~w~2 Yy%ezxJb;Y˻:0~뛠jX.MmvN|vAvPpsqe3oAէ2& 4O 8Uw!tpQ !$0Xu*!վd|̞Y&kӛ<|)ƿۯ jxabPA膡kծY|mu /ȧo(2Yo_`;M'pOleMe&_,ՉNCaJ5qD^^T¸d#E!DU s?1=.\@GO ^…p '1HF[hH=qyQߪHzJv0R+q0QJ2/OGk=Qv]S.dV<&E򳠕:g0> /Mj#5+'S{Pj{e$bSH]$ҥX*~ԓpW ݠ響߁'*FkzH k<)X!}}W{J묕M"K5Sv_j7bN2LdGʁ@>';c QC&UEA8yp`ULX`.\f<ݎ^1" jsb . ;mz@(J;w2xEgpVLL-nf+pB3l}`{ fR ^$J10]Ф[ɥWG}Y8T¦|;lbK!0ꉍDJ}_Mz˼>GuxtG+'.իÂjeCFcln&VN^x92KXHvGVmO"azo'SZ2s݉oPTEOeAX}`:AbU4 k̎_L`M?N b"D%*S}SqNܿɀ;2+M-G4atܭ'i{WKfX~fQ3tuk#̆I 2k6=u h[mr 8K?Q7E~3ZhZ>Sפr 朚婙:4;l*JElw94>}]v[[ݗZ0 &@OG'MBuɦ*,px\D2cqOk Ak@EikӇMdi}3Ɂ3G Z>> jɧp4v8W |ֆ?Է<~kxBLt _%j7" 5PB4a-#gbq "0f.A> ~tf^Ǘg$&)Qq;J'aGVX{by jōy <<>gkT*@*y[X?J*N*ة*7ܰaSYG,bWYY &E7 L`!c rFεXӡ8- ǎ_F>Z,1=ߠ׊/ m*$:6"Q '`J!/FZ+;rẻ{4^`Kq'ncOWo&s3`jp=M&YXp9_L"߼E@c&&l(, =`>}*sh#[mF»&7 wp5, O-؋u­@V0~vEh꿟I3'2%9$n*t~+afG@I }֦n=WFV9?ʼdȊNpޝs+N""?Gl B m NFWH K5aq/mpvE!b}TY)+O}JWTh`%.Jc KTijFl V8Yw&L~g:vwٮ-UpZwٕX oo-'d?":ſW`p i)lگ}kCN+bq1ڧcEh0 !T|{Ǿ&vB`"vB0"sg]_Th@lX~L& If9~JNl''r$d0ZA%ۂcd$is"[/3%U/ݗ=wvנ17 50XN/a~Lwf:3yHA+.<@\.a) {$9\^W [&) JiA܅ka]&$@?-oT.7LDe541U lOl``qaIduRJZ )7$|Qow4OJ^:Ep3 m{]vi曧K}~dQl[`{͞MW\*6ԁݎq89ڬq K >$]cץU!3kB_vm\[АZsѭ!. Z0>y{hjxl"<ޥQtTQ?7t-"q~-0-GlǦ"7$1M~*XqcS4^cGyIow8\YPk ?;@VE:maCVbutJd}WFNZ=6BE5𜁶kn2#*i˥.UjñYH6FqBv頄7wN ɟ\a8h"|(S´hBAcR`ⵕ=o1YM&Dq6Gx#˹Q߶?LL|yz7mu VƻdsWW ,mP4Yq^H%ǜXa[ 3scdT׍St-x+h[k=S2)褶; h' @`@YVѣPpa5r# <-G5ű፶t rS4<;5.XG}$n1VE?/g S~6pURcVOn M)J-́صE*ǰ3$.>aD!C; <@2!u,jՎ *rL#$7ۅXprghV`I_5:/FJCF!{`~\Y߄t&)Hv%^Xjm_0ކŔE&twU dxQQ=8;!77'l~h Ύ2Q>9%8)u \|)N"t]*P}, 3f4+HHgH̎BLq!E˶9'M `i^Y,ѡQa(E1 yWK65 zM?t9 0@eEZVYđKVl6s\,f a\/;Zj) ļ*P1U5.ջx'o@,<ē/6zL&X8SGw$-0!h#4, m$ħtoPǀyR}={+p0ƿ Rhi˸?hk(TCb8hIb׏F)qoGqWi1`{^n«`핒hXhAPQ!*c_G)L(Ƒ85'۝#:OCHyKXhNnrwRh,I=Qc 7!5Gzx'ryJ` 胎 aI*Ռ 8S)8B.vYAehz҄Uq`̠ȨopHqT[w=?^L\5qLp)Vej[X*6rÈ.\x0 "B4ȟ ۫rb\3WENr]8cS}K0\Z|bF}Vˀ lF&!z~.%el˼dMDPG!^8Φ+@ >런)KX$s :_=. +\`"=#Uƿ e&%j$A^lЊ(gc("OfwBWzlj&ЩٷRa+OK4&܈Z`5; JYtL#d(_mXOJzP gPi)#{BfO:1!pGW3VnюR=| BLʷgwcڔ;COӍ7*I 3x ?j7eh'vJD>B^н>Y{FOvQ*:&*Fo,hjX\_"ZtDǐMIx Ӱ&񸉛__Ȓ{%2NPu,nmF jj8jJa>w S,o3`vƟ/Dxgw 6sbS#uZ|^}C))e,CMۙ[NVCuHJ':ˇ]5Zcr%* 3hM Z^0ඓ fpp!+@Xz|:׹<<ǯ8ΥĠZnEc|I3>2F]fF˯+F]dՌ |}EJ+N!҂ j^$ b$`,Ӫ!s ǷVFxuMIr;}{W#Py[:yDY(-SǦ![sTD)QREgC^զ\' v-#2 YaFv$ּ^ic.y.쾐+'Kb.wtX{ dڊܦ|Q[o!xv=<1U̾*yȟQLj*My,uS?ǍTQŚ2ӃHA p/p#5*qtd× (^H#Yfj 4pY|wHh֐mF3 jD 3y&Ǜ=^nJ  %}*i'-[`9qIGǪJV7J 4b$Ackگ(\-]?(/AY 1 Do~%P.Mg\sݟ9w%%A9 :HIGX`}f 1Nt9y\O6X%q\g~+gQuS}A]X_ëaiu[lj_͕ ^ٯ*toN_B5_#V@VsD;j\OYTI 2Hm`44M%Zl<@RffDh?9U!eGrsz73lx[߳ӋK㖩\3".8Bɭ‘~煩Wund e SW/o #l;jy&8Ů#c/~<^7mꘅ"4}2GS?yz-U]H_4X*Z0wt+7-@I{.D(v,P@t< ?ϼ(iscC  <,x}%D)Wɍ7%$k#ǍP>:r:{05c)l [6ԶFۚ}h}c^GFJlIq[ NDt0M0P@}:RĐU%8vX_L)WxOQPTd-%^i{zT+4\(.Ruyę"/KGq͞ן=/uiQ訆ow3!~]W{7ZCmZB<=p])gsw /v iɦHoα?cpA!\M~g—k6")=+h'$&CK8׆:`M[džnmN=ok_დ',l.h <óud߽nk2/jRM]6nr:۸ZԺc F .Zc0g2[*,&%I8 A.5d>XO{qy Ŗ+57|X gjG4OA:sԝu oXCtBa7[(sqim5F}89u]hB * tS ͧ1n llA&+ƫu|2U@mG e'党GzR7 )a;:@#!c$soٙ+&-J#V-g&q!"$I&lW?UenUbBP_~QX !k>AK,Fqo˛ B`%ܺ d>I,FZot5%i }Jɞ(,k3z; yTnJ=Meq6f<稂7O}>pΡJ@!o'0߿YdFՖ %k|y$pT'w&̾xᛦ!#i2hcȆ<+yW6+mXlanۿkCfg.sMH@=>D![[I0J:u}[0K]+y\b3 U @T6;brA2z0$i'_ #8qu?9ܛuiI;T3wB:wWо 9L|K9yMhnB27+cҕTڬIkq00O۔vIkT fW;9f++9A p$;dO)=[EuW̿id2(2~Eݗ@G e t~~Y4;#Z[PاbȔo}`|FH1yTF35<Џ>={*!'\[mCB,;=Pu5FGZ}7z9ùWֶpOj,;_/Kx;C (˵#j#y ^vG"d/{Yu67a:͘5l}3lxɏHEdQK*ueI7+ó &9 C"|iEfQIݟEsb}N1*P.)6DI7UlϩY7t]'3RjI~b|n FLk^[ Mgm ?nCס1 E}'<[-}/M4 EWܝdt7'5׼@}%p Ivh ={zpzdqKy'E4rfVF=2-@Qt[WE)R#w( (}BXʶCn]KP'7*0SCP ▷b@VHR+;Zˮ.GM-Pmkf?l\U*j;Dӳr Td,q=0':\z|ҧwT@L)M=) cRuD4Awn%8$N{m8X x"gDOɧ#W"L*'x.QrVmJn^+m;~:G_;6C$; 3amiV]zpnQ0c̲m(܈茒8 p3cEQCJ{`VFY(.] [9^=%kǻ~ZbUgi')jo*ԣOt7&?9CgnߠԮIyCe<~V(T&uZ]6 j\F(rNpn[IePbZrNS|VV>a:vdGj0[%%I@AEػ)T &Z@zK w9-5ƒBrh-mXmPhlHYj5QV?y|[VwZO! E=ۗ? 2 700QT@Ql ' >h?ez*XȦZ,6]lDԼOmsWӁ]Xox}a$K$~n {>fePI<+G%B"kĥ3_8 J*fV0Va0LUNX,6[g0E\.`n Eǚ(E}l;9_dWHfn+j:5OBʒ1)r7emD6p *+qy]IHE*Ɇ=DNSUeKdv+l\*}A>`:?}[%r[u/׳چMVPKCCc0il؉Q&$E2u&7P 5d]yi٤ P'J /$bys3ybOK6{"W{p9}QdҶc?dQa4ʩʮ96 dRiJ}cn|iUH0 Ifuwx|ыk.QQ0$6/c9&f =#&jIM_A˧x@ڬ5ue]LVn$6iq#xK@O˳)p_pj4Cܢtvq yc qUN!`p5;o"6d3S=ˋC[]g|`zZэ]fA=fo[,_Ha,I*䡞c!<8:qpיo(H8S*@LrqhNdnt>wlman3=DNK0Ń9!d]0U$lC*^WHH~HGZ}uGjo6b+'ک^ؼ?7_Mƃ݇5`mc$zo}'DR=i䋈W^9o;ŽBS#\}K@MVv2®GvBgldԊqmL2¨^,~W |PgY or6_>/1@P|ޯj :7FN^BMv00vLfspLc?O~ށନlsզhv͟uF$:JAK0YPNsYJs7?]I-A|!&㙒@7Q(X ɥ43\Zo^ay+EAbZ:TW<09\ &߿:uuxj<~{eQַqͯ9Щ۟Xp˫'Bj3 g7g  Ӝt>>O歒g5{Ff|TݚgFV5!֚60S}ۏ/99ef]e}m1A%8&\נx+ݸG8i+oĩsEXjvS,g36RB ln6[yi &Q ";Ί-KՊK:Kyo4?ѥy5w%lZ& ?&" *ğN#o <-| *9'䍑[Ze̟qc5)X7+9^*N@D{ B(Ԑ6[QɫsA)Fn cX x=!o籣Hp1D X`P%nߨę5Ez1γ{eE\,n1@ǚb-a`O 㲹诉:9ǸvřM @s 3)D;YzIYHlIsK ;.f X H=:=ӓq|"P˳d֞t\}N. juUi^!G8jmcEڋǹ9@`/)to:hO/mMtּ*K )&\|?B7b/{|U覚$V+7˄Ww;̄A] )%oXu:U3ߏa]I{JM0erdӓ r/tSfW7\$?9f% $]vR=6d~̭ڱG@Ъ) zC]O=ứyr1cQ5enOVzXi߷Śb-O3Ngƽ6uCàA#rV֐46JaRv^2d-k#,ca\*VfK58M*Ɣ iq:No"xE2.?&W8JXr6)Gtɶ 4@4dnՂM^BD 7YpiÌhUw{ #`ԍ>C/:lɻtA^%*-KHNi5fu9o01{:&BN¥Њ4Pi7qk4h꤮5n$wI i8 sn3߽?&f/y;G,&wAj=Iu2Ne׳2阓f}mZJ] y ]n[aݤ'@{3Pg (-I3 EK-Vnä UXȠ/å5J^8>d߹ZOG(:B0  MB[??i5qVf f6=Ҡx2kx 0u+A_/ E72hbm)J;v9!@f:& fJ0K깱D)ǘ?OobSPĀ3^m~^1%0 *gшL|sXvX7 4,9Tmi,콽9'oM9; Hĩ^H };݀K{(yg0agɼB`'P.`Pw̳"_ڸ9;Vlz>:CCLx.Gs0f=k `)崩xR z-|N:&n̿ǰ0hw^3_TPtAb;rO58~ i.U.( =$"[rS1XxnzkO픍bփoF76a(SL[?Q S}1b+t6V=>KةY–g;R%+Tm$z[\c Nro1Nf1R˭ߜuk%+(@i g0AWpKimEsR>ˣunp|gK@ޠ,s%,Sσ<<+ٲk>fh@eoκ7e=й!n`Eprs'>eɯrJML9F]P&NL+( TgԐ$wՉnRYRd T6 CV2n" kl^R#{X i1o"9kֹ9B" 7$v2 8}qGhs9ty;jϵds dYrMylhCw/)w˛p@9ѾuEJ' #mm 9 E$X>M}Bu%U@@Ə vD 3UqFf ~Xs+O \tpp, 11eKY^b%?;"w_ScmBW{0 AjQn7m?ɋ~w-2Z/Ĭ-#T ۏgw0ܮ}ӽ]Qm xC ǂ*JӽęJo-D_0"yg3F~?e݌u9BKenf\R%T* žA'YLmXIQ0E>NnjE|niu+5*M$gķ >c{$n r%W%+T04XS/lok_FyƮNhƕPCib&lSA˃8qR'k@(N*yVןTZَ%G{BP67u3 m7՛'_BL: \*~ hy^.w JhRf@Y!agܢŢBnb qYtYE)S(Y4̿0&KqrQu"CUMFaxfl&^.AB(@mll.yL~9? ] "{Nk.%Jf/*D@q{K@T0@F;Xǒ'&p8=|f [ s]& .;(#I tHCK>/Dյ;=J"Bh#BLb;Z73JHUV@/-|aJh|KMCL8nu騯4vg FCف~xGk*/RKİ%;ucfnPBOͽ~-W菾{ ܵ\?#זJPy2Uuzo {4aU3/}OH%&$I.JɸJWd2{A$%M0qE8jx"7x"KJˆսXJD+z;dz,Mah3(MNzU␰QL$| (ț6P}q 򿾷-5ǥ;|S** dw=124e '<N\n"IsKbY^g`OI9-.ݤ+hb. 4m~Cd{tHݾn.BQɣM:jJQŗ׽ ]=BdVuX ~m;2'X-yv&΅:m؇Ar_:oh@:E;K=f;Z-a4{d{K|IQϽ>",imXMo2q쓬pTXEݣ5 ^/ [ wwvK n0rLO'|) ?D>Y7:_Pҧ- NW'AH$YP u9^!Um(ZiV珩1CwGCyǽ;ۨ9V]L5 bB!DX`WpHiO'{Xʰ?1ڙ F|[sb ] iti?_])Xf-iv+ $ rQ8u9C(sUwR܏']W:9u"\vqeDɊ֏㞒n/KH>C)]@nс`z )YXqS**FG5[87p)N\~/.jHe)x.K,N#\-2a>&'*2Tjڤv߳gwO z_tGj_ntG} > k޸ޑХ˵##(-(H[DFNJya2V`2L㴦(Ak14#+!{kCf_yn $OR5ړcnke{5ްgomZ+Y3^$8kE'xK*z݈ PnNagfۃr ޽oTANKb#`ŔEp1#2Iݭ.n1dy**SeanCNq>0vL rEh2צ< .ZjZ 15qIX}A9.^bo;j* 0ak=!p>uP@)p4/^ ziCݞZRrCCg_ȹ`S+1){18ܐDLw7:Ӂ6iML]hZ\.rXvh*MI$Z*Zǻ|`;9'(?e"`qWq#>,l'r)Ye0WŘgEJύ; prAh?skrq'2)hlq/`z-MO_[t;]D)bX.=!W|: 2nszMNI~=8XH<Kxogͭ@u|Ev-Xb"@/;1x?;%Cu'K"Ǖqh1EQ;n٪lX9H@MWK9άĞ90 CS!;VK6}b4(rS؏*6l0_>B:q׺XKCGS>l Oz1f(d 76LVժI?O+,vXRVPz5qgWf[yKpɰy`q*u^)\MS1I|dhdLwyyeVTo{1TMu:Ķ  Y<\{}PqTf{_N;:L*0y)o>\slT?kM)s|<+{,O diD[t'1 J!+yu]W+hQrHJi#??ulIZ:?^{ !alh  $qy<$q$eE/ur6,W)\*;zgVnaC>¥PHwq r!ᦥR(i 䭜aE~YgO?-tGjOD)ji`j }ze2Ye(.v׼ }2-?58It*P_b07}Zy1Jn~ƾB8Ewu~&O k0ubʱk3aS0ٹmJA*J7O^r7ʁ%GgNqEc0;l!Fsua]!+CwuoP6yrD<\F!P Rҳ~#Hw(ظHT"mtmΠPF}g5'FDrK [Vk/7[* iuhy<<Ҋ`6Vl[qɭcy٥f1 |R{Y:T$ԝTswMAMf'+__6VM%iA6}¹ ^IcvoTX :F9f+ՙ䅴6K7>}Qըe]ɨPk@I1mk/@~,Bj?\UEiGL7`\w}mfaF&$A/q=tS=\lD͖潏"USJ:i< hCY"P\COC_D[ne*7+C5TnSagP(mYK|ɑ^aEZ4 EhћF|y`Ir0-1- ՈJq:aGQZEσQ\;EīG"%\tʬf1,.ze<Җ3*jH1] OD^EQ%BS ޼|Yf"s93 7Y@ y^нV8+^ HfHOcJ\'sKm@f+My,Յ2*K} v 'zɛ^|KP4]JWSbׄw 93UbroJ m*)S~ABTB|I„dj}G\MJZ(6P:Uܮh8BL&R3Uy#.F*dX%B ). w7je]QE`Z쯷@#s,Ϡ"&I"Oyk;ݝ-`9Ib|%)!%jST%'aJrj" mUu]hBN=MSk/Eo?؀ :1 > Sӑ$Rѡ*ɿS%)b4ꆧw׻ؖ1wZ-:0vMC/^ 8_2%SzoQ A^W>Q+`-Omxp%lB|m1=s"U?. ڞ1gB} m)jPxl)jhV_!ǿu{k%ԖB3-`JW (lcd5vۮ`Dюk/Mo".r_k <* s5i? 1nwrhB4㨺0{1Bn(oɒu<ګPQt2<Ռtnb>Q~mJV/w!sjZ GȎB_Xo{- ו/Oϔ xewT[l֪Up0I<#fdȁH6syA1$~))i_PB_ᑐ[~c Tj"H0 |C NW0yU0 B y:hsGZ)Μs(A@odwS}$\l q~tPjAx-Z \esOξz\1m5#n*ܠi+Ej @ p[LWJ#P~v3)MA?mLb.يf~[Ⱥxi-xW@#=1xm9Xڕ̉0Ћh\VszIE%̑.X-p?D-P.;*r#?;a#HBNvZLƑU0'@c^*EKğ)Vekiigh2\M|Djܡ'J 8Zt{Up״S36-},%LUqԃ:Ӆ=PL ʕqadV,Z 4")E #K ?2+  o!R?M~!w":+edk,yoMRþ642^[B^ o?@ l!,~8vWq~-H5U+> Wu2on}vSCۣ"8\'z%\ğ&ﺣ4m|31(Şx:(Rd=:3(̯m&wby )kr}[;>5'H#7x]A0I5[!#pIN*T-93xd|%6xW'fHspLQq[ 4h֍L }ެas@:?K=xE=c=`?fs_Xvn` gqa!~L(<˲Hr;Lv&pN%kYS<-n* ռ!<{Z㹃F.M2BNiL^n{K#lSnp;!=`W9fNL ]Zx4}T$/Q{\]6c[_ (v௅t)'$噓γwF/PֵvNB5yb'ou]6%TJ2Ϭr+F|ذj*m0(; HLUsX՗Yfj\K}~QB$Ί=h>);Io:JM25`)KVk7fa/_ z*9Vªd6aIv9Y8 s>ʴ)mX>ڿOQ.vłrU`݊1Oh>tanzP0d<݄؃k9O}v# #vS%C@dUZY^'a5Rwkm$ kPf3e~8©[~ e&BPaFHz!^ )90Jr@bC73.lLk+ cAzFXQ$[/i&|\@mPK vh*]+DJ쒁3-oKP/( fP}wRO}i02Ms aĺ,<"a&wG^. K[YGTH]K TX4f$.x@}eK"Y9[Io> &:#.r嶿[wrZ^5ik3FBn\ X8Y5 )XG)s͸opx0?͠;G۝ bՒU YȻCŔ^Y JM01uke,gZْ!MSOw.^z*˞wF3~R5X`H7:@ *l¤\ZS`jCC_a tE%oj?{| c58C 1kəd(^p{È( 0tF8P$̅"Hx.#!ݙM삢}YҀg;$l&%b%D+^(X [Tą#HA ?E}/'ۮ-$j.[$ U)xC85R1iF)}uQ+cmGd 1DFi@u4I1*cenVw]20yk}4ѓ):ɷȐ&H~GJ5IoZ H)2utٹ@SBF:Z^ڙ ܹ#V/g8t%ΧK]U`̉Am傶y^ۂ.&Pvt\mO-1J?WS:IUxr~Te y 6 LQ#%'k| T̵boscz2DP;*ckT^3vB"CĊg[Iy%Cyaǚ:`H0A3 ( F3_,O>G(xnc аV$!"Q깱w/,>89a݆m,$s攬9lv\]|L5 T_!%to$&INĪ[a_1­b(/=LuBɆԉcHaEC)K.#T&"=@NT敬jb.@h5 +WP#H*4҉t:b[vFWT|{4$uE7UX5! 5(}?qTD$B%[b %Z#"bU)5@|Y [Lp3WJt`D(=tG,l t.@/:-*k~`5*=1'eE&ǯ"VG@vNi|Zi Z[.hH!/:ȴ=B<|4J8Xi&\#!ƻ T_o׹ؒs`6n5S9Ҥ%|,eQN:KȾ"lR%eɾR𫫋-V*n>fNd&gAԘΟdIg"XCF1EW&Hu_b̛Ƽg!h3$|>L%Վ.vJ OGÅ<|y]?w; ?tNBʪ t PYx(w$N2p [jQh T BI ?hXC+;,fИ7aNKJφ9֛8fz2 idz)8/ʾ]|%hI,iYKBX7Ψω"~KVO \7W#MvQ^D4Ner~'(,$|}yW.hF+PT*my̸xǷpZYJd&x2 +kIW}6@gb+ D^9A X?f:ij'Qu4B8~XK!R6 ':@}h*sj~NRE+׫Jò`W痄t~3^m^q)}٢ 2fO8XZG |o -6ph~v&c9@ѵ zC[U Vg_h5x"q؎ &iQRaE.Tb'xx2]q3ni!`BШ'ؒsJAGҨDH7Z PSd:&!5*N_拚PD݂\sm4m4n%c%R.ZAZA-]ZGЅ6% vwA{χ݄gX h D'w:_F8GnVя~ܷ 珘KdK(MV,[{n㍒G ` x zRUV9އ[٭|FeMbҔ'PK*.-&BT?|x9q00 UNz_;sa%i<Nj:t`xDʘ1EN5# jU7cKYb<$nI&.zGz_9m1:Okʕt&S@Ύėģ.tUM.v]I &Ykd,wiٽz߆17o3 5(-cJ4eT÷5ePɁ5}3ݓge{GOa5ɗE?`c=goLZڝ7]_\=(uu01 Q{X`cC8Wg4Kِ9(i&zΪ[gЍD2-شiB$`VT!P+do7^VZ {Ph]'TU({/ 4-C?$UeVrנb+ǃ7Yf? s ]b.SptOu*)@j3ڋac/I̶\:Dk.۠?u:FоdVa9+_\ sgنXhѝ2-ߖsAZU8#l~KE5^n+N"" q tJS6b. 8LѱhmlUr#gRH[:,c4֘.-qY}367_.2B%rpd?=[mcjtXMhx~ĻbWYGDʔyYq#nF~z/ԃlTj'h/*r iFDA n19j3oW*ITMJA4H7gn&pYQz \Md Rn?$SSéKZC.gW9 ?4cڮk]A6M#sjxv HDuQcP n93X{ )Z=.ogNW|D 2_ MKo ĈEH:}'1w#4N~an G ͯb)Sԥ~=Gy*#t0MV ye =G$`9-P-r킍D$s~B|%*ͬV_Ihpv|%(`!?]uԮ 'aX8x-}]sڦ9bh >Aqg&w&#_y@ Z*D֖y@JqI uH{S?cYcb` d7d6MY/~QlACh3^$D;$]Pc 1!F E: UX.U6-MctswUy`[Nx48a[.3uE̤] A󂱖gӷXe5OKtRfEv٥Zif [=G,IRb@ -'hqw^-f;,jf`\T?$dKTzUbm󤌯=8RI.C.NTإ #Y$}(rỊbCHRT5*VsXcggcrjQ|T:9n$TQ[ڪ;U^dY {u_ZLHm:E͊R_4hv ײwɊX>ȑ(%OfI>H1fhNW`m䅨HSz\bңIl-߿XmPB# Krt׍+(D fKHHFa0i2)tB %CkJ&1{S e%[捞oQ~* EHpJsu$CM.Aqw357>N!jp"J^*"C*ǷvfRw|IyYh d.\Κ)\C!X0wnxKٳ-Jc\U=2.|wk 5 4u(Z KAXo^驪%87Y=akB)ze|0cVyi&ά4͑6Җ3}G&EiaY;!!8"az5z-yV\%q{]Tl.sdv1k" X,A3쫗EsdJ#®-7ZSDDҠer*ZD>٨BBr8Z}HG͏[ӺHBߛ 6h]K ʔ mK/`y˧y濎K|tQK~ra@Tb1#"P\ƾ0r? ]D, 42HAUun~fi&)z>$.5|%dQ&rvײ9Gd̯gGD#11nl$m0OrfukͰ9*OY̏+;g~)Az%i)>"1+j'0}s72}hNA,SJ<,-6sQ3>uVaӍ}d z/ٳtO,RvKp?ۥLteDYGrYrmG~V\9;g؛N0 'Q[8;k .&#ۉ^٦D@ mg1ZG5ux”000?gPy_I 9>ԋKr <>͐fʍwX9sA1^7BAd;94‡Waα~6p c6@k+WuSiw"W-yȠ7#THT NIXݍYuǐQ|ؠ+1e 58G)Uaރ8Գ,h+_F$,AlEy lЗ!Ɖr Q=yܦ5ou79mj@U@ZjV7l*L )N6k|v5Af$Hĵ)0rJx_o']!RII_ӾV_ EmWv%XNiAenXzsގH..ڦs]sZT7%ྒ݈oc %=;OgWػxhp Ham0W:d?agQd]T]eV^UY4SϦ-jN4dD$jqNp w\7mvWW#W y87p[wH>:ʛT'Ɗr#Hʎ8K 5I6p^8JO _93_w kpmJ*ܙ_pb#}q"r`(~e=ZOWt->0mw8N=[62/ZQ7/ATNA{$/C9% xG#fI?( FX<,uha]}./Ceh} "]AsYց~dOb8;Et.ŽVACȰ3Vy{=: $k#2p+bړb!>=?/9_#l򩏕鞴j mC~)6|2 jT#5tDZJ`I^b +6v $|̌IvyX^Y/gT 61م Acp: v,YgkƔ=6-dTϿ"Eӱ$" ? D?XRຫŘaǵGiIur z>NNqqHdyYT Ɨ%Ѹ14$Vw/no9rCY#=n\{:M. >2DO1nq60.!f "#$r*Շ\t N-pL Aa dpfᖑ- #((c_й,+RxLt,oJd՘c~V"9/SKD^%{Q=3*_8 2aCJ)Cȱփ 5kD,uat90oSi\}Ý@ש< zv<}?I2Jzo q.!$u槰̗֟nV话$lnϓ`MI~ڋ+CbSŖx&`|qk}_[7}j bVQLJ, =٨.F+Ad/Nqo<\q˲-n$mh]wĊ5{2&a6Ĭ97ҋᦎe^;ͼGMCвy`=f@>q [zP j(s=FK(y;Il/iƭ̯aPy3(SࢽJVѸ.T hހg&e .JVQv0V+Uy@¯ʴ9pB\"˞Y2c~mG0'<{y3~*'2/͵:A.0ߞ(HعO ׋]ZkZ᪬<' }Q6{,=KCdSq Sj ŒUd DfYTw KO{ Em.p>ɵ+ak7sxʃ˙׺AkPtFp1&_GY[ξ^ *Q7}3U$SzE{aC6Ƨ/ymU&gO,r)Z9Ɨ86)HOUm犺^#.`L'пTUr&ZHj"EY&:t2`A܆@5#I]ћaEezE6B1yƬ33G|8m~NJs9GUz藔@?5Ag`Q&jNDBr$XCj&Jm?-Tr웋"BbhL)MuY[h#&T߂lx2-ٹiXq'l(@B3?!RTeu:)~%]ch'kb9}=r2`6fNI$(Da| ㎋Ad'/>,xː 8:,ܩ JK:ۣȠU'D&+/S4C$5CI9@s (r~ .r8cpcG#WNHWKIƼD =kw{@vXWhS$hBQ߿>[ʛ"ah7LzEfYPcw`C%=ՍƂL6K^Uֻ^)4 (|-NJ3= g@n0[VllF)MܞD%&zQԽ4}*h*14g3,'5T>{;"ú'3"Ƹ4Gʎk%9\+MEa;0OolTP[Ae2iU!i$~^a\rj[g)l}i{:bK³-L?.G paZlS5;[Z0貪x=i/!m>^TeĤQL]OsL,()[t\PraɐElX y࿱(\)%NN*ᾐ%{)ش(6veɌQ))@jtZDRxX}VE?%DArX TFfy`Ԙ;[#DIG[c]gBD$mX,kQ$,>`U`IC51\H-H#sE_[_tƒ{AdW+hTjUW.iJzce3.":;J1b[ߥ+^ރ%NB{-%,R[ͻ )Zw,w tq")/f{x+%'υH<"VM]8>,Tnd.t:aiU@7A6+c1;|b ,6tqOD'*HΟ GOs(2s&y5i'1q8}%`b(fO\5"/ԆØLwÃ/bT-7؟ĊFgU\6zX;Z8[7܂F㑏yTjdo UM׌6s:{[9=Ft6lł Bj^ꇯ7%Y-~ֆgyP(Cy:kTD߿jӉhIKJ44gaVZ=.e@TW?ƗMI?lh;Jayŵpf(Cj)/lf"*+zMU$6OO _NƪuB^hlS wO/p o1\K+}. y`.Wbb=fJ/{fWTj˿u)/D|.hFGCGkpCDIw'`~~S\۫CLUz'P3 "kQYpVRTɥL@:QIs:&p?a3hԐ'f>pYA H;[* E52!h#HTl$2Hֱq榹G߇O𑆒t+g{'?:EuD:CoxbJI* ɘf߼{ 6,po*|#_D&8iR+-FKzGEM.- %tIwͿ6-,B#AnayiS,`Q.愯>vh&Al|TNW6ݜc c?I@;P=,iIHګ2/K VΦ $ _JJ- 02uu"-y(WȖ"Q-Q$zLyOK2rsd\ )-l(*=]1QcikuAhsW?VP9bqwu`%S,xf62wlwz(`Tw8糽0~PSP?@m0 b{[q"AC#E3A]foPg?vbX e0 G-}5/ރ obh[D2n~ԵRGoɫDYyKTunQ_6h0oQV5`Ճc%Cze\lwj\7:}𪆗t ^?]A X D5=Z%kҺ [^I/"uT5)@@."6it' Q%s !k0L ,0wA|Bco],^u@K`|(z}2y~<^1/@@v WN1t(xzW?ą5mkDT( mgvu xRb]{ b ӔǺdTM/<J!*sKVyOc`xZDËJ@r\{-^˅|{ISzӆz.AלI),mXj~;| ]륅PQ93To #Bw.^$ʿ$^

}dyʫ_E|ڞQ.K bB>'8y !&T12cenړUvnRaٰj/oj4h3bsMhgRf>:g>nXFZ Ă5- @H{I<#XwB"3-@k2#J^9xY[SD'CTøeUumM,#U|r~'P쇫0rr$ߟ5ɬUץה*SC>VCjadR*˻z~Թ\r[K<~T ˞;m,,ma_1*oQ9o:V_Dq^h@mw6'Ѯ+m)r'f-@ dդwey$Yj߇p.XC GWXQ[gI^6j#K_47HOar\ ?-"2%|lѲ,]!a{G:uP]˙`5_TP|~7b-d2t T !i]"B AĸwƧ vW;SP@&|vmu89(څ5GK~% /J?nϫ;-~+i(5~D7Pֈ GS"m-%VM;.H`l2brn ߆p&t\L!HdnGo"r.g^ΉVoӂY e&,O;UA&/|~IZqIOwt<ǯP:@pa[Δ`ť,\U!U\L BF,pa:id+o;Sp^;8&L3]85>"K_}D1N^$I2ĶuMdZg&[&_ʡV8YvDKU´XGo*"|+h +asm~oHqO4icI(BO*APiR蝏wQV!8 +u'Hj?Nx*Ƣ>2M͒s+p5&mmt1.[|&bj.0m%LbfkTMDm, 7;*n]Lڄc<6Y D$ZJ!Jں$uzukeĐe&Rw\{+0=|sV >#[Z|NJИv :q{JKI9>jWc+O!JqnF +3Iƹ#s6Luس w]f¢L& DiI8ޭ/hT"B^;-i޾z26Nvp#;x^E2ˬ2.I h1hn{y竺i Ե%Q hђJ e@⡖"20J7u؁ {ݖ0juzaB' *BWt=:ic:5ypjN{\僽^|0} v $|+3 !x.|~X=?ZXԣnK欸}n1j&UPd^ҧ&i(Iz@Sk2 /f%WӼ4 lwԵ"nPBvcЋNk~%a?O[-l?RI8dZM$"ֳ=a"n=KfK82exO_\˺0fgSU#"y 9ė!*2J'C­~Zfk"0˦""sI((M du$ >'cu=7 ӎ<6g^gm :8gP+:白MPAN+(}zN~3X|j6[U]o[3TQA4&ha|wlgjfہpJʕqٚ?+ [<?EH5d2a (b8|MWh ^xW'eph 2=kA0q$4_(zAm1w)E&RPq'SqpeiBwd |x@ѣlMyw{E?i W }M+2x7bBmH@b?QVRq K9q)KI1tD;^-Cpw[K7]TX2~z/8Vqj0ˬbX!ǖ-1X`3b0nq2M!޽(vN˧)DJI5Z5zZE:jq0Fiiz0-z`-,f&8/RfWOHA ~! *y`T*ۺmߟQdrCpO7pYisbPAz!!gpi8J5 Y܊ŕ6}f =7K};=ٹ]?oL8<uac酿|GZ4b#(P#+o#3?A^lOD$J`{Cg7s(AY($0XM7aePу ʻu$Lv&blIC8@WvxV ,ʤX೔~?̎<>za\ #IcD1C]|)ae!\>y(8$((=bm- svSw\q scpvx _kJbUÉ*hc_ysSO6l,/#̘f`\$D'cspcE,.]XQp``jg1iN[U f{jeR@#fN e`O BR8xn8FK5.^ /VӜC"qնU+.r"sQm,L]~ j1qмVoD3{M(R"E'|Ƽ#^ޔpߊ4#fѿ32Fzk?$WtȵZJvrcP_u1u|潗Z詧9DvaK"/ V}U ^ж*ak6F4Mߎ {Q+ w)hր0-(?`Fy > M +! ;Woiy)QP!R̓  ~sXTTA6 iF&r||~ cږR/O>Y m?R$<824 Jc|gO $wb l5gRd5}?۾o %҄_,z=9O-/Q"ǪXϰlEeȠ|=?nD)O%85PxV uʭyZ 25 _)ǁm3|Moy?D]E.ӗX bi Gf8>(dma"sd)$:46Z`i7cR,*o^t>J"v;lh.KIGIIr34xf&>%!A%1a$'s0EiDhDd3WX{\z:&Z[你`< JR5 ;z*(]ʅ M g [ ) U-rl*lЅ0ɲ =rI7< Kdn-a]qqs2!IKibPuÖ[?eUSMFlօXhI^$9Cgя/7KXӒɧ ut#i1%J=4WZhշ+uϼ$%K.hHq]|-$vHOy3_|*֫TTʵيZzF3ނZɜ[c%Vֿ.]uC>r\TK?c=o7懍6 n:$%m&_>eXmXw0AcGxpTӄY_@rL12,'S`fb֖}$8A0VF,uHAaE&7{qcZD@\ tka=?Ǽ$`2yfDKjޗuw)3_Hw rdw4R!+9iug"q.[Gi#;gTPil$띣` OWܡQoԚ5~]LkV'-LT@ΕBE@]7a|ڣoTI.QedkV٬;0UX B|0e,鯈 nӪdSilĦ <&U,{QJ2gZϲJSʰ"LM djfZA<06\”}.8Xeu_nEUqU_+3/\>)@od٪p#*M+(n>atN-5#Q9NJB_>?er~(TTF p\M)uQ:ۥ#k᫚QMf|?J`<_{il]e0-)V E2znK}wD-b:|R%Y5ȈSĝ As*p"(]yQ7vM:0X2[PݻnkF)v(@}W:^GGq?mCFIF3߶oGA:'*;н4bMv'+#;EwjPnx{c5,̄I#EQI멃Ό+GuO:iك߮.Zp[ ^P:H:&+x֊0+LH+znDK9zY:lRu謁'kbp\ٰ%,ޗN%zcbPVL ~Eƴ 'bzMS? I!’!x|k9w`k<@Oo}cddLj{҆”5LӹTAN.b8`teZq(3V"#h_Ne@F}b]=zs H G,޺]!Y*PZ8CCGV:͐vZbͫ\fɺaʘLGk3y06ssp=wn>UOurc8IQeG4i=Rr=F&MӖJ@r<5q3԰{r %y# HPb ߚё% ;DdY0N$g"@) Ӽ#vbEu*?[ş2#9PNCu5΀j#HD]B/4*{b $z<}]nr; LNx_ )<֩I`tL> u@E٩],rnyלmʞ ҭOOi`\P@9̵?`8d6^IS%u0mɴ0U$a5^(e =3kM\n,~d!e@]c/&Nwԍ|WJ/g=mv!B۟:eLUt-3;<UmHE߷I#lQ]P0򌧍'~)OE"Mx%bqC<[]Ľ7rvo~E&1N GNjNӡ%<4gظ{n buNf~h'f~3XcC$]?wS\PE"W\xFW.‡.L»L v*{#fځJN]Kbz[m󱐝}P(ov3Q`$)XLd)űgAȅS_y+iw'}R1P }`O {4#ǂT2慶K:g/U: JWdEB虉IB{JC1eb_g, \`ҟbHAم^yrlXj[&c},/yC,6l݉2VI6HynعEeMkq^ن7vr( iTZv5]O%{'[1Ql#W 7(a,e 'LtiVѽwOګՋlG~V$RhY(zH: ?ǻۮ_c4TO2~].C \=@z}W3Ҭ)xkboyoehޓ)u*q8QU:Kvb>0F-kh}0]Q*O2؅Q8>C5 y>WiZ/}7˔c^kQmVpVۤc2Q x>yÏh8}3ލ(vG0FӊW< |V*3EhhgqJ0TaŲyxc*vF4WÜЀL9AѨ:X!EU$t&ѧ~cOVԷsj!99Ɗ4MϷd-S8G[dGd>'*?ěa@_T2Yl^jbv&"KeΚ%, ?*17+y~;]H|5`lBjػ~Xx)+„SV#e/ Ӳ!c!!_q\Pkԇ:k tlSjfr'U0:tgj0\w3==A{vφst!JgOl*)AتiA(68<(37vGvHݸȂkJuש%"D5_41E9n&L#^ b 拢2:f+-¨G*[ 2z,UF&F ט"almS29ifT9M ǣr{]/#2| -A|mZ97IK.(հLgK&8d1l5goFł]bdW:h wQqXjxcMY{y(oڑUAے^*~# HW.|% 3ī6AWsCuɄ&Lg#M%RaD;٭Eb 4qQb;OQv+fZ?`bSg0t1 }ET`aX6!4 ]nGw+LcruK?aK>Ӊ:dv@,1{`{-;OO>Onފч٣uW S׉=p$@IVL\(d -)i3KKZSszycT<23 zPm ȳG醭O*ʴ In8F -,'q+O1:xtX0"7'6J $[` ibϹyFQ[~K%o -d(pP$$˨gTmjdt>X>ب?zt X<2\v+Vf+gYY6DBř]nZX~rX}9w~J.|d*[ uL=IG>UL,K-A1\xM-!  D qNb]BT3 kI+YRXMA kns oD9hf< 2 M%ju{+f mbvRk] ddB$[nWqBGaHb7/Nj|vqLQ>`FZfj!<9| cw D;uc*;Ye?"DE]YnF|J{q-nZG}&x(sGh)B95\VxTN!Vd1hsF3_` WZQ߸+ r6Vlg%CQRؽ1jiڿu$W2_Dh 7xMzdM0^U}avZg̡^=#F@ŇQyRRh4@\?@ 4ԫ=P=e)$UstV 8dUg}K1B)2M9އ9ff< j`-j$fѺ">Y۽Hjdxc]u4R3ʕ'ND^`( SYxwSqE]<䕱Y~@@l@XcJ֨ߞ0buCy)tb;޷R1PݻQ:0CG¬pB| _ ``H>+ ̾\FT1t{5K K ^ NF.@HL Qk@⩫[ٰE!LP/L"7#gi_! EZfyk< @34&*S~nƒ8(C^(>en[WVH(3R K'G_&J )* 0 y]B5-eDXyYX5$7ߓD92_z![;jͺu8rE ` ]ŧk3y"\&lb\ ЍԁZS3N(,  )Rqi6]Ѱl g,_K-O{`;-˺7u?z mN4ýcFyjԘ 'ON>s'Q9xn$qkVjK ^]ӪA5?ONp+9di'$PS7J-t/(I1^$C%!vUװ'UHkqgkxm>%m8"3!>,d%&ɣWW|e gd/zku{8yeCe- g?K 2o#n8Wws %Hl|J{a)4Jױ7HSP{*X&8E>g2 ֝(r9(7{4_x 乶' gufpnmpOoIu(x5]rv0AJ/QTB4 T P|cB~X4Uy^8\Bfgm"t{w~4L)Ĉ!ԍ?d,+m\7j@f>rхe?g|+^uNv'Tj-%YȎBq@"(˱džm负ĚqZo,2$2"?in4Ҕ-{lV"39 PP"Xni@X^(Q>wD^fӔQ_FC)N#,MH|4j]e]m?c_;[ MV6^YʱaM軇@d筦6D̥bq= [3pfe׌O۷TfTK>ܩY C U|i\'XP'h&H՞@FaKXcA~j9yD%eQd5Xb!3Ǹ[st*?n)|BcCԍ P"J-!3@~27~{Joit9=WPQzyH;zx%(DbJ4:" 5/?Bޛ`Od\ 7&w.~0HjYy_u.kHs&`D1EOa(Ihe79r@ '?)0n$ϿJJXЙЍ8dI/%%F0QؐHo¾Qېf ?)X^7V(AéYEY! T^"ÙNjEUN>Hm'lv6s ƒ=>:2 5/8_i'W#UQ Vbep"d{lZ"JaI?#d-{6o8F2MTH'Mx i6|eNc-Z?5 L-:ÚsNi*.01^5 ˻yg%=Pþ#_C965w!^ ɗ3)ryϣr;Uja tWW 'x6iiKrM mɅ\{bK!:v<PDZ} eቩq`3 <ٻ |V%bA)Ӳo:(^qqthspr˨RukWDMNl3Of;N- cDnzQxm!&e<ؙtIc%B }xȯI,;HIW̉/*L]2AkYe]m7|fk;vk[lb BQ*= l/)|Bs} 3j3D(.5 A2z2odN>_g*S_BsA p)=LFɼ}V E*@E DV0Y6w9 4 W/P-ВQ0kEBi+q|Bݱd|I`w{"kBB'#3)t*3dV i{qDPF.~h;H ?5UAyV_IkNJ{^PdD.H4`LZh)ѼSVt4!1=ZF@1}bx*3 *V㍒銕MBbubk_.N`L.64yK֔q 6 3!F>Yz[z̗}Ԭ,kyϛ]58$z>%l÷Xu\,/ѵԶRH&o0Q/P&à#E ,x >nEs0w{^ ,g,n3|pWȱF/RltI=G4P|pVv.JG<7HoåA_^c:Wp jffj)s<_ =6iQ-ɓߔ =ӱV[6u•r(;~.JͯͧbVu;Ҟ1AuleNE439.' _.{Ȝ@6*) [5|Qřk ctAr֬78er6Ҕ-",W2EN@+巧0*V;E 8Nj1= a;i--~4|,LYS_NDMkfztп_\b}e{ :INˇ%8u'{) URr8t 6>K^/ _l][s$yveY[C &ba38pWE\])G !OSN ^i\]cňe_{ky|d~]G,h)]od>Ԅ:w͊H.j783p |4jOWF_'fc^mǠaD涱X!wt ٛX"7XPYDC|vE'ˈS]Ww*@uaog=}jV71n3p$^z|JyU94݁i?Y^(/c$0*JsywRED|m:j0Y9qжNl*28ƽqnbkkxK~ͼƤ?K:r\|n;8=Vt( eZ*[X o `~2X&<R5k8fp<&Es,>c]IHP s[aDd-9ʳz{2#B@Q%&͈֗`n£ F*=PjvϭU Ĺh,S@yuЃ+|xbrr*5\qL峞VL'VY1 *RmDz2Ojg2@NeI "rv_^{o}Uɵ,]C#wI)h)tk#1$)'m[} z1Vϟ(%\~PmrV {mSt11q^cY"CSJ_AfW韱 oeUlr1Fy7\~cu9x<AfD ; j)U86 \MϓdApVaJ{I]b{(bE)Ð f]i ӾOZ`{F)ý- kpXϯAtz ?RI9ʼnSK![wŤZB0WRblphJA{.n iX(q)]#eZQ,h~aD6HV |!!dQL U" 0@s&)O={H-|*h\2΂xlNtG L5}Bo+ÿQ6 AX `_'&~rZQ<"yD{.p9ȱ\CɷHȍMNltH]%P+{{e%f#de]ٴhH-Lkg^ld^k忄vDJ=zSh[:o 7 b_ iM dž&7N5N?r`Y%V!* 5 >K7kgV( L*gEw 5`(pukn5mݟ8)T]|}Ѕ lGJv#!nk}<˯ApV򼻟驪<4H~mcX-NR 0QFA 1' em.0#[eߝ4sGN9 >&FUQ߷֤ | B"t=k#hQp[*VmoBA1fkO;sol _ yưJm}rxJMeG̶e~j{c6~*+]Pww֚a9T؁{`tA^+:ϸ7AqΘw0Y!D4H]ƖcuB?6W^8i߸h5W}=to|GWkƢiI"GȗYP̺) I sJƊ8)ct/:8,yKвQΘwFzx@gB5o l`|w$4%"8-XaCg+J{#vO)cFg҈MOfP΢g#4d\HvQid""UZx[a9 ++pJT%3 VԢ~`TRJ8ڣ:9ݜ SK(v`dOc`cf[itMÑqU & Jpag7&'=2R#63^7ye+n0l=Vʧ4࿸Y:qbJ1' k|uR5PՊ.ťj!l€uUc31wĐ1h(IL$1}9lHjS&6ճฬ@(ƌBIkebe"(jrO\1BQ*W;;0qnS‰A 6jDGư :ERq\CJB oîf~t|.G3޲j`UxIS";+,z?\sJ(5ټNAyZJٞU%UPi0Vɱ\0% $-& 5ϣFJ^z@`sp%\ׅ zA⌴L \L"Zf]@Oы7ߦA?]1a&gfC!@0+ѝ̋yfS~` ˪!aYt.6gUeJSbEh9UWbl~euxVP`U ֠S!/LQc}@Ɋt /!_]-_k G?eyαC?51WKҺDy:o-m15-K_&^vZ}w-[;;T} PTkX y+@CY%5%BTeG.v-5_+ylWeS82[AGG<nx dL`pRzB:΢^w䳤n]w@ \><2!>E_dm/?O/FtD 2ɐл nd׌b~ eiN*C'0յ-NLA~Q g/1P, +Dh޹~dn! -zE[n'}Yѓ?0y͵Np(;[jɠho*Ƀ(]=dl$A{M.jO=ޅ W13ʘqiE#ыBQQ($ <{* îp 5rFc`jg7%UO㜗Yɬ,#ReYq#t'GC-\yd kgdBC3kea&J4xFp8^CB J' zI8:3/.z*꤀VhQߴvvÃO rIXľ@nVλ>Q&`9 fCX) A"EM !,1zyN5lij)DO>T$U`Nbݦ6Dw~PS$@jdBIb1]mKl#8kK-OWiC46 MƯ}8,ц+_%@9]M='G=0s_^JbSb4(zXSgsQLuI|s4vx7L3#oC;.념H nj/Ta$촮1tF iSip, mI )~riȗ1FrT x7M5oFwok7l~QrsR'vK+;$E h./cX W5۸x3ڱfaڭlhz0E&i{R'݈(V~y^ j xp^bU6ҳ*m<-W$&ż\#]2V1T "u҃^ᒶ/;LpQz?ۀ~?`{ߚ8q/s㴉ffOà~pϼs`j?>gd.ý HQw4)^-%!۱3\hk+~RVøztEBh+ꘒH7ٸxR0q-)[91wnih~wajk3T1|;r\3|J+&E7ݷ".~ыi쉫lQsڏ Ou L@C vz"0H}OދC8!&WF "Ԣ&8>3dd,zql!R!>*,$DӵwTLx;8YP>k; mµsmEdc-+zm "D1yWR]\ :G̛} 69O?)[B#TRf{ELW2|iBHC Փ8iu6_Jj_.Blg=g?>.y 'Q<t3=8H'On3H+\<*t51`[軤bJ~%NbZ#TW܁r~0߰x]o<`Wq4nI c7 ZP?HĿYNu Dcww/j~MOEA}nj"u?{Kj{CP*n @hXP&0Ө v4C\X peN<nSFN=F0O5~hܨCA! lsJ}ľ 8+RҽhFDӋ(%[+.j,KS5bRUMJ6)zXsJO %I/5l5"]9Mݳy10|j蓝іQk;0*>*LF*ysti[L< W/&8;ѓ*]{0f0,]jQf1 r[PW/ ׊첯ƩJA#ą'#qZu9Blj4BH.VKP)׌7oGd\9i.\+N@2Z~똓@yv?=kPd6O)MFS׏R{aU9 N3M#.5}hn"V@rNpڛT4 Pˢ ~ 6( 9Ah%; <Go E6xM{txPN^3l‚83Ȍ# ef黷ԟV| MM#h{"wr"Qc^kO456sL kyGWazڏ(4-#(y<>H,F=T3p'16j4\Z]-םD  V񣁪$!RG:%RЉonO!7l=X('M"UN\G#)ަi 8k(=A'6LETpv!E҇A /HΞ팢e_x(TI Vg͹uIS,:M~ 8K%G_g!%a ?=Hi26%7yai:L1h+ј7"|1. ,۪Atse}.CC#m>EFVW!z"s>"G!mwnc=wmJ?y2V9~M/ cg n`C=U9A gQ{V$(o8HVSDM=GЌΔ6+i7Eʫv5BA5& w{g<V68n,V*?3-3 G.IIN;Rɲ.n[:^~T'zE1l `_HV|}lmr%KJ d3Wbu G+Vr* ށ$ԡv|,TT^j?Ѿnt|%aK`p5![e"?V;Zda']̅YZ;YVc3lk"D ¡ޞ/-!aUPmsb$MJ`n:'.&z`R裝$0ղ81Do5gyQX,mWW} \$I4+dN !{&Uhmtrd>]%6Ɛ?: h8Ϝ뙾 M||`oyAHB?Fx*eM 3e夺4E`ئ dzw?Z{m Z9HtS*6kWӍ ܮ (E;!X_ :6f]ZΙivVXXx e';c>U]=D":i I*fВ\> DCRO($QI*"%W")iRRZxR.zظ15]ӯޡ FPH2&`d: z_<DUWvSl񖗈uTAwk#l "V;&ugY9 w0/ OegsV\ vsF${wnUJZz\JfGgDZNUAnꏱvw~XQ˕Fб㕞;ϫ۸'{+eLTWctT;<\-CPE3ŏBXr<'Y,+AS_=D 2F +lؗ 4n;9cYRfT=.NMc)!?-3ݏ0(DP%H5/lMm6̐5Z"E1TToQ/g -*nU>Up/A#,SKMy:^y<+^g%#'w U|gw7dCRi(x;ohTcQ#ue:$uU;-wm59i ~~57_}:} ?5I ~ :_P"}9 ]xd?MT v}tTF;)ļvd@;O@Ժeet]'Dwpߏy6CD, cKjDevIV|M`g']| ;ІC ,52qHt<Y^53pm)EaeQ%guz0JBH7 e>3?c1Y+:5 Ө{:H𙆓8v>eEqSPZo]a*7‚0ܻ@ɬ<^ [8 f -&PN@HuJyWNJIZO)|VMq)9 S|l[fM47s-2y[+IR\r\.ԮF9~gw #|lc!Fs1wNa{b\%*X ڽw]*PV_. "9MP_5(+aLl0g'6* e'm=cL<u9/vjxOSHR W#jx}: \WrBJK݅Cd>I`%ROڮ@ ʹ⦰<Zwo_]j.&?a!3v%3' n&6@n&~vfʻHg=U]x67./PEňةJU>C/>k0g.r(AMC@Q0[>w҃zl>t?K1qh @Aa^BClғ$-`BdߔhLӧ'aDI0p][hAGq:ayھ ' Sd'l%+.pds'4R!{ H.1cg:$X;A O{Zp" f2&|هF2φZhzOnԢmXG m֝C,{%wԒK\pP2d[@B=~/{ D> u%J2t$VG8-)yABX>X | ]J< 4W'b2FD 0L%\hHVޑo{i섭v ˘ZU ] 6z Ds^E>ӳv8)l+1|^<,A7v~&^j0! f[kЗuȖ4Xɩ>V67UQ섖Vwy#?VuIDE58- ҙAX %¼&Uw- /ZB悅, =7IzmRX+P&Bc -%˒l`w^v b|&x0Lv'",Y)ǒq@޻WXWŚYY"vC WSa#aԲdw o7@bx[έޝL8 `eѨIf\}dx"|4i޲$ҩp̔\.|x k/vU[_-EKb8Z  SLz 3~ljdzn2H`4~}w]`ie"Q SrJ)]/N&Ipr_Y/rY"%5!5Da|J6N`SJ{W:?V*k`w_ ^qe_Iqר忘\o[~b4F`Gm!nI~TFPN:2F' ?>Wf A{o{ VؕpwO*ݍ3CdPp^&NkOፏ."nGˍ2*;Bn#W[/ qu*-W0MM; wJі#qN=B;XYW=m)xv) F*+8Dwyr?oz뚞Ml E'Cjk8Xq)`ْSYV؄OxZ߄xHgY<#^a(>\w;b79(~TQ *j_i(Z=) +ZOZ[AR&_ՋmC^"I5`3`kOR3seM*Q կljԵg@Ւ-dt9drTo;ݴr^ql`5)9_ :ЁH<'dM:Y+IUIxO#Y Rg^s!Ą͵v4W3ij^)ܕ`]c0P1[W+Dc7BTAѫrzh]P3𯸑L*mJYnOUP9 ڇ|UA Mk#4@g0P,"Ѽ*e:+SMr%X/(X]rPʐݸ*9 讐毝X=5tڬK>FWzk˂ꃑ=al̤R}fYo?`wZ"#(v,w,J˧QthxARC,=b"̸U_<,J u/7}}Ē偘>Ī v~ٸ_i\J{No-y~I[c+>ωF>$wr՞x9))T`˼;3~@ !q:,q?s{]b{/oLޘ vBv=5iObvjKb"'\!=< +ǰ#ɬlASuŧ.y_QcY$NtA/ -G6tGUa"\&Vڤl-HXqcjCpu[#rRLl\1EB&/vIYP zĒg6ݼw%\0#, ђDh'nTIor_!V1mSmvL_s.X5^G3}ZZ)o-s!eStn\W$}T{` ;Y1taD%OR*5T8a˯F<3 'T k:ػH) pM[5Ö_.|_=(^4I̞V׹fc>9\2*2j8EYf w鵒yvp.ڐ_3tΫQkHP`RY*ָjF!` l,:{i(\@ /ft8`Cwxgq~aK6)'汯7(EmRz) ϔ#%}APt>RY` &%. y@<5/G^/iYE9&<T3\ ojsKtRWc3>Sb-Z{pngR-=PZ* 4xg 2ߞ&R@߄ȱ 6FPr'8f+FaRBQZ/ qJ@%Ӄ^]$9CpBmǂ7R)b](<-9栕"j.5$=Iez)2K*CX||+ir  &zu'ʍ4ZP4r<'PWGY|IdDil^X-˥#vɒjo_e&|WweQv,{絧/.& VJowhbsz㑅+R_\]>roHamp5NߢQN9 *r#Gma12FLWaLO9?ϟMU2כ^!vfWxIEh|S٣ Ly{bT +u/o2L$ěr8'g5`)M%w4o>/eߣia LIx'`6i`c;!~'Q F+A͈blp7u`4" +ÿLGgQICu71-!4m-&A5DtdZ(5wC!9bjߦ59U& ku"Zg ZDŽs) >塃hѽ]g!QN;{o%%2W'%v!1pF,StieN-eԈJ ".VpkxPՈ,2WX\ɳ?u8J@8r9Fxjˆۅl Y[(A3w9nJvA7T>c8dEiBsR.Oa;}/HG;tEF[go&n/dwwEWNs<-qtڌxyD&Ĵ_[TnLƚ >+pa. }{K/`B x*de f+M}ߢOVb3dҳ0ѣ0` ^ $eT.ڊ_i-VfjFҞ߹n2(, zj6S:qAwp 6̒~m+ Jن+oB6k;0~9su dѪ5k2Q\d#A:G4;Y=bU~:G.Lt(n-sD^Z>2L.|mP|s7z}}1O 鸏") !Ej~d?vaMZNZ]A/Kin{14`D/wWهu)vhj9T>7g}9"hT(MP`ԭ7%]|b)XT7?8i&(0H5f@R)n3  Qo8~ *Ϝ}:6y ,YhQM!̸j(RuDȰTw`D~XʂOaBuy'q^"6}CWsQ  Y̭JR&u*iA`I+ʖ׸#s )ЅGnƇϫ{D,a4)}W3^JVW0 _FTYav؟J'~L#\.$)WBnjJmP].YeS-х\Z#;tqz3A.P@&3rzHBڔ :bsWGزY،zqm4:clQхtT^w[PF`xG0/9u|,\?#=MLt9:+'Ey/~#:CG y+1EX!ӿ"gAxO*a!#v;583G' Bɝлk*j$A)< A 3e#ڻs \s1\ ,Ѡ,Jc#MfI"-$e}*"KvBDvK*-?szl(m÷ c_Ij[2Ci} Mm"D|QX_s+1 Ek!wZBwsΊG#*\" Mi&Ǐ/f>$V'RGHuT R3t㑡ʗuG#]jisZCTn)C5%jdh9ݾ&Y|F={쁘OzR f:v}dEFV.4KC't{)_TbU)^`8pCw&6ZƳ-/KPǜΌ 9b~XbU2PNP9W!Ϡ̸gGհ9)Q,6}S/:˼:c}U۝N ܩy9)]*]|2p,؜5ֺP-L֍&a>[4KD"'!NV :KF`]&!$Q^7WWkjϷ4 0eVC yQSYlBue0A40Ҏg׈oZ&orȭ m2ocޛ~׶7Iw_hX};e`80̥Y#zmؔ/_G~ h<4W|iA: n Ѱ}nkĤ8<`e$י zMT)E3]q1SD= N5mB5n=ml$}>#p`#1 F> ^;H;.IJNV32˰yJ-sG +؃VPڋ\8-L o̙t9 .v ^n_bjr?Os ed[li@ UdņFӏƗ. Ģ*b07:m!afs=^UP`zG1B9 h:#Q]0:]2u˵{]^rEц xb3I#!*"QUn=e@Aan?zA ιCĠC(Aoo:ثW[tvg3 Dqwmi6>[EvT/fr6aFC u@Qs&v2[= ʺ1#Bf@[rzg=Ö5<5hMI'\ )WrS0EeX::A'qh)[[كPZ+d! %,MX.jډaGUU˝3}\BlsO>HByҽQj 3Y'j<^.q] -@&nVӏMdw@bt6V1n HV{_2ZomF i"Rx&K/Wj\ɷS )B9O i-q{u2&J!oWhӾ`/:"e}밞6*E2S|@(wr¦nͽ'c3MW؇PYXd {F^;[| Y{)` VJ=iqgs\5m+ Ujjsi "+jf'~W`%SAI$]ȣbCp\i_+iwѬt02k;VNK%4'$[PCK bC7K$봪-bl3d&yZD+õnd G~L6"F97$G3ĵ2׆P*ب 2ZAXZC3*M.T+VFN0僾( S\#u?I"VpOK 'i[w%,:b_ Av| 3BfIA :6fe/mϱ~Vq3rěA\@hg*[@|­Pp\dTkj=$?va \yh&O٫ -X#as^uyTzہ$0O'HH5g;n2IB pI"2YmF&9~g mk]hX)wa\7]M)I&h3H+/?X E}*@"l5C=[{Ip2aУ=)c\w[^uA#2[{\|u&RTH>L 7.f%ĪXnX???^TVSx6[8/FB龝euH:kmE#Լ6duȩ HH TZ=ot4Po 6O=ٹsYW6A1^WjR:NN[]5)%%o,eV3Fcvӆ {,c,\L9ˏpj#2Dݐewh5ٷŖ-PeXj^T'+ZYN"̾Rpxh/nAdWqIu0:U: q)Lx!Uєq}M:mkXnҜUt?ƣ+c:dE؄7T+s HxNK0YR`,٫Y U욘5O a, @CS !;EsIqeyuv&#a|o0^"6-UECF<ضAy h'$X;/2~ ʅ'i\pݶT!ciFR%KAЌjO@dJWU:jAVӬշau@٥#`I$2꺑w7X7Y;$jm&Ҵ+vGvf ^[c#YUx\a@9o^t 2`aJ%\%<Ϣzy3+ ph*qp> K{:"{Jfñi5r P(O5w'Ky2 C>$jW½Ĉ>[/ Fsv"#vɪ$2a2P|{:U[Âaa1}{\[BQ2[MZ e'8aa{7l}ҍsfj &zЏ(۫N 1 `_U5H[24N$REIdhliEXI{Rh)HV]/ ?@A'VR 4ȑ5Tɮgꀲ&-]5|Bν9Ȃp?E S] u[~.Nwz(ʦ<"ǐF@P|,UpA$qr&}F. TF!="ĸ'HLG _%C*ۛi ł tllMs|L P' b(\<%631ݍM:=O/x{-vfoq;uA&]%߹'s[](=2o)"SX/&Ma"ʿ&qLp:jġ)z&}+J7^ж{ FQ$F}ĥC{ɮGLNVc,S6ӝmi~~9-Xim9/Dő! vu0~>-}oɨK$w E]#JejHDXpݔxU p(-}?`0Q 7ǒK7* ^ YC-01" dA2ENrP6XMQgX0Xj1tǹeFw/2EN6®L`ˤXח|L_`?UWw_v$r:<,gj0nAA8i%abdq9I XpW͐ cRka@%V3C:|G W( rHøw,vwii2QK9*51n4dBAIFb)[ǘ /Z؏گBEyƶbo1mt:T`ġ MޱWhʁJ"DOgys'0OR>CGzdIʅ2V Vz)4c2!@NUt)M$+F;֏#RԪFz}8-g¿l4 [w'K#^_I8ln @hh bnE}5Sɣ>v0|skAX{a7T5IYRlVm윊\J'QdVUQ˵+&0t9,K0ԧd  ں!ўZ'\$a.pqD=”E[ A 1ruYޗ+[wӝ7YUR i_9{]U3;#y&RU~X\ޅjDh?TAiD944}fn‡l 7EJ2?-j<WPʵwfJciؑ!b<]yB^[]N!Ǎ=v};[~vivїٽ6Bc/ktN6O"yCz0Np8v%Њz\?:[#Cbr mSŐ񎕈>#<{1\T:g SuJfV#=2Sa%f{!Ҋ:iv70n`|3l-xja'R<\nYDl[⎶zW*(h,yPOovH@\2ڳ/)+{BUT[N;3jg9I࠷N#@ZtN`{d$.•Rr l^A;t*ɭ_D+Zo_MZۦ܋ nEn QVSDrH*mnL:fv#%TIV=kr`d6?`)Z[R;Z!V3}aWoZ:}*=<(Xu ܬ+u2sY>>72_w*d:c.Q n> 1oNX%QB 2TO5}|yAZ\O647e]: ͏0\ _E,&d#)0mJ3>w~>@y19@ K%'r74w;=۱]ku :+%[ =B{J@4,Q˸I<{ď0ByQ@-ѺF3v8R6o j6}hj`>ܙ/[,yp0OX>ݩ!66['S47rz(9!p6gY q_ά"Ì=ݦ?rKK)Z3[dnb/6Ƹ[:\Լ"|&w6ú0PE.ǝړ4^#.T|cDWA?Ɯi}^XG&}vl͓ԩkf/ @HI#EDjh/U.zx);,Xq̔ 9 ~G!Œ?N_p@׻-$~KѤWw~#1|ֲ{+4`| bXav=$یxdc _)9qxwAWةjHn\*Nwܦdީma s2K"lbnk[mcidfݛ+d[L^ifRq*EOGv\AcKNwCmr[HCXbcU^|WX%smzJiv~T_8V4Vŷk6XSxqж՚501QQ*E%gV?a(M_\*`CՉ?D6 $1n]bF l Iwii,_ef.莠b01T$,>Xf*u Eh y(y5kv$Idp7$fƓ bIĸޟuaGΥ&(bw:0gwHI flYKI#݈XNI:׆ZZX´d)Yk Az,Uf͠qDPz#a#Cv=M π{.ukYMY t$oympv yS:v+4USSN(ڕTRMBaNGc!CNUJpfMH)܎p}좥~Fٔolt~/l`7v8?p 66p*ś-McKKM"G=Y{u yT0L*k TYyQl) O6=߬BCpCM-C*`Tε^b -˔/ZA@YF'$O j%#!JSr'ڄrDwDm3"j q0~bFP#qvQ峜{Sz`9?>,EtW]~̄z91hV\'~O9*X)D#ކTj+8H哋PDf}CڇTwB{Jvh0qW9JuV?pVB2Q4Fp4W*4ǩNLu`Fj=~va%[+/eK q!]\ yo>EYъ5h,OFw[<%w牐ao 򄷵FTjtKU;ցdֆ"NҔC"A$s-L]0NpISklmrݬ, (yE*WrvʨRΓ #9]٩bDD~=b QwaKPMÝ= yٞ#h EsBKLlvEP[ ّ ~N)eᬷLDk]M 5G/-V^핁l:B/K.o"k 8͊TƕyZE"o<9 ".XP_2(Ǎw/t`Vګsu%"As*n\uD'l(Gf[$mߒ+Jͣb7 =='g#W$t >S>BiжK'06GRA ]踣gSo6@y<GZнS!{~C_@.8IMY=msu ZBSo\m=~1V$qdM.8P2Y-¸l6K\K0[I{q|e=cB9p_eL(.uxmNABz`U@S)b7ܶ).JY׍!ְRPfonoMQ>0vV7!n83\a,@mQl(nݷ-\:?cKAAG;/G3n\QާTP-V:dbcRtQݻzӑB1lNx,uenU`Ɣb cȈe{K$06 e)=ArP?7kPPOb0? ]& [C`9|4"FqydZl-iRl'Q4Ed'M :`B"l\I[P"\il:X|t4UC@Q2֙P4*?%2k:P+!ơ/3@Zg47FTGAX]iLO[D> cTx|6gr-dLW[A]{'z<v%l.j[JsXn<"Ƈ/6esl$`JBqmô1.",PxⒽl%ٙhh-|]\ygr`\K\Lnnd\kkf;햶3` ]*66TV Mp '؞^Exf74d}ޞa"m!`Xn w?GnD`P1g-4TcvkLKvsY1@P9jQjXz.N*ӿLZ*dPVmG0^H{=d=ʭR|.{HePf&L氀`՟.$uI%ڈGқe;&:l3rkv&"$Bw=g(jhzv}]U >œ.7yu\轶"FӲ.D"'ͅGm0aΔB ؈Z O;IpVTIa)ζ Wav5r:e>5(qs47+m(em+yI`aF!,ԅt;Q)2Ә[Bȋ:ޮXQ vS #MvTO`;)@1ZV&]OTUL R5lF!b h Xbo9މU_kOˈMLeZ2)- ^)Jw8[!p sέW"Qy/R;(|I)dbHZ)sdE+/ЄL@ꦤNx!18Tİ!D0_ehS{Pe Qrp_नau̷ %?-q&%>__2Fl@F;X$gxfk$vWȧx t;<Pp5e)'o+ShӷNl*m|Qub֖[)$ )h)pCfĮ쮋7b){Ɯ.!M3hI㉸%m> Lwx? qVq^>Ó2&L4VL8:v{]+aXAk~ 0$>x_S3Mr[lF p 'e >*$elދ{Dm@CyfuZ.jIѝ6W6ȮleaȜ8A'q"jJF z捪[a0Eyq[hd>p>D|a,̏ V_HI/TYqU_Kh7}|dǣhhd^ڕWkN"8RR? 5A5eg%A#7i>])To;=Q{pu(A;̢2RU9c*DOAҧ[fj2S|:Ok3lK= w,V!Urx4RzlmڅVTf3)TI9= AfQƋ/SU&*Y'PfKFQ[ d"FʲRuRq D!;.@!_Un$6>is'&Vat!x^H87|yt|2eDE"(\bգ6*.#]ӲW\IkO(8 BmT#`bbe VI'ȹ>OǠO?_y̅DK-W#MwGI\pd>,ȝ|WW&$*@v#.2 =x\Xi\_ 5&/ eˌ8ߕgZEfV}D ^:UTR;4neM~G^._^w Q2oxj ހ{F8;)fhpʿ5jz|eW8#,'3AtXX,Z`Z|D6 QZ+d^ڬO3FS#0I^;ԍc+h68UplK hCV@(kEm ЉM^*Pʄm.z [P/奛P>;K¼ QWd͖Q/' I y^X:cL9:j1z;&"@Cy!H-"64嫂 D&h4\Ey> ᘍApB(2O$ 1p]rzA 0|$JAF~dVā|Zv |,^ Ȥ3om27Z[~vg[<+W?Zj=`OX%+6d !f8O2kYPVx fA*Cpri&,M_?dbb/Qr*0Nt+VA-ulO)Uq`pwy-s2џYGVEAroTKˬ՗xrZδ{bdKP56?3)}ԣMBj?joz: 7d:f˂!lM<2ۦ"ֆo<"sΤ3x۪B7 0+'-0>ĕ OUc_eFk|_aR=;C”I{$< Ȩ115ɛS96 m!짶8jg,/n]$G0"39 a 3J7rG8ba4Mr#z.@Db2_U"9Q]H4ş̕17aWPV}H9,(p &.A40)Bn/αD`rCR3)8f$gEC.@˄?‡ Fv0јGtXvI '9) /ay͔1{`|dx%bΝpPV"y{&ې4h6 Q%=2h n[d`9Bϛ6S<Q[ѵN|&<5F--9Ib;#M}eC8]:ۆ~ hg4A_TO^s߲֮)&acqE rBӤFظF_urE j3]1d+^7Hnlց;al[:`Dj+gJhf*JMD*pbmѾ1 ܢA) ΟN% CB>]J_j~iL|ljQryy[PRXT+`Y\ⳢxI+ݲrgd }0_|B[P/JWvw;N_y- !7y/ij" FqJ5P?xE9Z*`8mCشob:EJ=˦-^L\BmηR^WV J)r;It?M,\T%kv#٘AKA)m M"j)ʱ(4&PҔ"vR]1nX˃sã;3NDrڟCIe}nh l\_֘ aq2lpF\ g[q=۫"::Ka0Q EB/Ҏ[>G+ޓ,E SD'tY{sy./:3uW)v[IcsvI77P72Zձpf֌x<4t>]*L_Pp/;ex,4lE}h_~՚`SJ|Pily :!ls2ed9N5h~"úIYc )@ JYl+4?.߾q)0"<;nL\6[)>$>הPFsRRFODBW!EʇѠ k_0<Eu~N ~$ud՗k8.} 643"鲙stٍҬx$Hw$^.VAvs=F@ &aD$MgS44{ES-B BYXɁ}ƷΜ9h#*:*#Zx8EviDY n3t<$g=]dY7ꓐ읚1ő!|vEY$lp' 0͠D]5_254 Az-sl%|eTMԪ]c7w""qbg\#IelPgPxs' l|am$fu٢vo;34g:A 9ĘE {Bp[Ǟ;;s`vͶX(GP?3YSUi(2#1/ҏѝiխfNӑ&#E8Pϰ_5˧Ld`D:Ai W: oJNmrJpDTZ ծ/eI 8 c_IO@S}FC$VyDGPѸָ{cre+"_(葉w"lږU34RH*$1Sg`6PUٻ̮8H '\)!"∃1Χ8Sd|/GedO#UѯC!eQ@-Hjߣj1Adžah)W&v#(0DȞŹx^eV< -"ZbP8zJLKh Xv>&*(0h|TK}tuSFNP06o!MҪJ4mdA00sZevkS/Wҁ?¤)Tajl[8&obݒpBccQg gaB)b/.#iST o lwg%C{% +Kp_8ݵ! xtbnFr ׺*G#zLGi9Zq*0ncf^F0E#8 h:oFS]RKJwr]%8:RdY{1OpZGY̭KGv&oyl M.+9O Bp@"9C5 9 CeST{d5X%t]g E'!…8'LnGU {dm-V}j f?ޅ3ա]zO'vBmS1zؐ Y!}3U%GN[ d0P2M#| &;s }@離24 '&9`Ync]/qx1 m&Qh}OAV0Gφ;P0e.Rn^#-fbgH{PaDC\jB -2QDi IiP[m[Bb/L ͒/1eq^IJZݤιtiU9+GM+IAq6K!WjK|EIEX:pb:RDUO_ >Whzu7ď)(y_1Ӱa2ݳ 'Iz~S&Fm 4tWsGoDv O!QkcIwc>~Fiptz FPCv ~82}DEY )}HX$.O [',}ml6+mOwj gkea׈zз#Z'Pw=Q?!xՑrq`0g5}ރC3=ku%r}Kn,EA ye$ʘǶJlXB.k S5jWT$"/OP)@rI*%a[[ZakŨ:"0$ޙRX v\XvP`[?(Imߞh0z A5ڐDPSy)9]!ld`@]A ISUa'vM{[mN{1/%Z=\uc*]\KkN^%_IMiE;]sV~ :AGY 1+=}]XQA~PԢ.rl?e-I;ߡEΗY҅?2*?_} 1 J8̵wqZwbSa ͅhpjLKOi+C-ɨ?ey*]%r)nOb8F\ݵ:ͧ5EǃW^ws֯D~ a"*S){;V"5yU YoPA~ p0k>e2pkz>oʃܗHFݿ{~1z΅ j|E7SOQntCjkynXxG+{zP ZHS/828*~t(ۜڒ"|ycQ5ßbs@*d;r1Ԭ `[ M}62r:$p {HM \~$ ( |*%ĴSAJ{ݨz#T 74&=1eG!TzW3 9ΘBjPssl*42wmo@[z: ~a%(KZb?N'PT&ئ+*KDs}4Yh\ ݊mі,I}6|R,+>A{+/&\%Wa2礓(L81c_jFV-D2ral,Q-Tl.fh0z]>7cʆn381G:&k]-FR~c~W8 iWQݭ@$/e\Kmg&L Kk#t2ُ!;S#Pހ=,O2Z໙hf2P NjF$<Vށd]~·tK2xpOSև,Ct Z;Mώ~SpН$P0'm"^%&b~:3+=>r21 U5u7zL.0=^mS/[&b19$ gIKr2KyʆͽJWCD46 i<ۢaݳh{³ ٿkoеev 6`|c_9JU/S Me8P+?T`Ynch;Ӕ ]In7B7O"M J/A(~ ivX4LE <"=lG -=մnpUxΔg}$U%'DZ ƞd;k\{^;KRA# .vmHO 4d@Vvy5W3H3%=Bd T\%K gBXK( * 4)ZJU;j8^&FrF7OHPt y9`5{n p@"w9RbPxoD'Shba-φ-_yGS{P%p0uÁս&]PMEÔjzLKCc0}vx)GDQPN?Ku6X[]wK)X$嫱uVQ6iF)M^Oƶ2i%ɓ轶@Y 3Gzt{by1I`kKWgO|_@YymF|Ƀ5@Y5 /Rlw [.=]?xy/K?C#A\ z0^,f1̇JPB[SfK\FPHkѣMfcNDHO>[z> d=o-_"gL:/)PkZ<-]3 f9@_~Cie*,c<\ɩw_]DcP*Ra#p+t~!=E nd^&]$=)yH>?}&Lj^f~{ BR7u../X?|L(l(vH{ڥB*5r- AV0 oy,>H{$#wDϥ)/cl=ˤ#47;#ll4a63@}CP;r}!Zc]ngQpnQG4yW*2gq{ag&T-xAzBpX:45-ɒZ\m38}~4o/qWct~KS$$~{5/:Jm82f F :J2sZi6 k4t~g3*}T #iFRLV$Vh}E*2t1Z1ejwjRhP~ cUfǩ*6%$?ڐ$L*Kֹy=a8*Pc"2crϯu4W?mMЎ<ȐI?If'[?R.σ29M8ڤytt_ңb8x$]I6CY֓4 '1b٠116S "sT0%eHP&G/ەWʊA<㔏|9+6@8~*̐a&䨣 CY~:g{Zxz6V_b_PF^)֯_Zne,J 4T@QdjCly2OF*v٫V 6BIk69 [.DfPipj?AГ/Oi[4,EG]&f;PWf vq\C= ΂G[}.laHZ.3IONA2PA|ȇOgIhKqs-JC[®u L2)i{e%Nн279`e;v1h5a[Wߘ?d&Jh'w_RY+N*X$ۚrm~#a(D JGa vmHʄ喣 F&0o 1 GfS,7467AC?C>Xp>Ih"I%T[?fv5g3 :4E4<1ԓp}kiǐzqkt5<M#pԸt;\ˆH<=Y)x k,Ť ٝhdEF8R,D4f[Ld2^ğ- 6jPF% T{*e%gbյ b|Z7sђ"Z…3. q X,#t,ْS)qД) g§lv`hL(m  +Sq%{T cajU3|yG qӔɞX%f~m#WVvrv-xWU6j "$2}ӕE\kT\#EIf~A#blqG5*qtdVBhDUIh(Jkɞ\dto߲`t*OroF%|B6g^ p1%| 3% TUB!FN`(lz?&LX DCS&gi\Z-.&}*O/ pҠap(g<*&$-VV$Dl;?WЪ‘66ş+qpiҒT ہAE1,rBi )jdzu5ב (Uj"W4݉\Jpc7ԇvii,u*]4P#V(QdvϺɴ]BHӞS721s!:gaEdMg4 XI`3&j@@ڰ˖i_^r7 ~fx+f z -R2[qVU@T x =VTR}4 % f>Sx[)@_l/<Ĩi>11˲F &L[g N+$6X3ɏuH`QeO gv(7*)} <ă|ۚ#j]`ҬDb̋ !Jl_<6f@ȃWs׈rFp' 7a X$ SC4vX5K\ěGF0dr`@ B:x6c.f1DۮgE118dexxlI`׾'E KU?Ρ?bzG_Le \("Vq@n zSFɘGPj&Rfd"$}&N浬$1WZm R{όQT\i'kE@qfևt ׍P%Y 1CCu dġ&jVqތBU4,O2B){AHHFr9]A4ӆ1Sb`BBM筏3M(Stôਚ)&5Wd|BKwGOTz1;)r׽~k_T+@V#}mEf^0n'O*eIGk@E,:F\uNۚ1`Kfa pRlg1D74@]q8E`^551p-?L(x!ٛ8?YKHS^2 tI8> Bn)Ж?2)+d8:J Ajp 05=<űNޗ}}/;ssYY'TQ2 |SpnD|)Ag Iү)Rq3fmiyo`a)RUlI'4pmY 9Qm>XuV(q&"T R }~]GS< I9^!2%;EƉ+QN)_x@G䗓2Vai.I ؑRk֡9XƬ^!Ezq\ѹFb=4KZ>9d o[Dm:$pbwM양ۧPAH}Mq$9قqf 3l&lV!jCX\$˞Q-LŖHT,m^Ƅ+ut,:dPTn<6bԩ}HsbOppj+P!ȩr8;#PiBH}rܓ0ٝEW}tEJ0^R΀\1Q0ptTeQ%CZdhda7#[Ⱦg$xRQ|Ȧ#eɮ8͹bXPRf3y(="ɛ C~HOsi>J¸uwR./hϘHVf0"CWNl*7&L߆n_?1iT ;,+OAly3 xh@GfnM¼ 1n.I&if5k @9hD8B?sJDZsIiD p ZiXڣSw&D@aٸg#65Hx]V1ZB8vRv֑,cSzI%T914ȋyRIV?Mb4r jMi1(5Rƽs)uwa7zLHt##]yߴ;|}C;Ck-{.FK_jH\зd[lD#`񐄎5P_Rw3|UM/qvd&W1Pq&L(LE"t[AjjKp|j6'O @8<װܟ~mn'L +kT RP%BG%2[Sg$?Ĝٲ(z;sL([u%?gu(>kSI rBׁ)F$̞bJ1,M>%8)[o¿L[XbRBR66\. ݄ؒXKk9$0i%ϦBx[<+y [AܓUeu2@HNb!LF61cqHMOc ,Rt"'띱EX ˾ct$KFiTIl?--\HǸX4Y /&yRu@GSy/u7aJDHʥ[B';\(`rdX~hSBV»@K:;E&ؙ> nux5:Ebߺ}>\pkV<|cZ}CA_Fs[X!|Dʕeަۑ7Gkk> 4V `BÜ@1$ǧ,dްPqy`$b*49} 8beMԀN&z):^u˔Xfy㪠ppMIhl h/"rV2Ͷ6o3>?* a1R2R.B6.w^UZR6KصP%xcEc ]EK" "3 ΡRMx7ne=rG70싉 'Y"AYh8/%RCs t4:NJTnٌ$^UE~Aoׅ(F>L*k낳|r[Q+Yq`殑!w]])f;LdH8:.ODues3A Zx<tsP c>8wBΨGstRetS̬Pcѡ]$P0! ;UG?^%.!L]Pr0PB3ŶN\m BuGY]*@_M8;@Yr*kǵ^m?طqfy86˚>^KU837 a1{4O *[zssk+3zN :]{+}8/$sl,@lr 4D2e*ϓJ_4_3<oa!UJ 9ϟC: T\@ kg5P5Q/'">G]c#e{_WʪYhN1Jan2tOR Q'}Y{OGn xErQN̿H!O 8C>P||x*;ݱ>ZzK9,ȹ3;Q%?}I@KhrËu:K2Qs5+"ތ߃AA(,S(t}To܀^C@}0Թf4xHWH5|ZFސcw29d˻fzrU;GY5˟w)c~'"kCO"E \j𿲭Q98zȾnXW˯6u5O2 sWop% M>(8fɯ䍭?Jdʎh2ih<.e*Y8ĽDb zt-#-8b̊QL+r9:p>>fP*0+Oa(ߠcmHq@;v& KǛ3)O 1d}9Hk/$mqLc 5srgv~{0:# PD`s䗷P5c[b񖃒3>3`gjtQ#IR%/ojTB\nv#xjxuS?bV07px% <\IX )KɍXfMYT/&Ѡr,Ks:؁5Uh[XoBx?-U\ePs>BD[Z_P|c7VO鹉!˪M1:eCX{:%}dh,  EjᇡSCd#5 I5%yD DD]CSQE|_ҫUJ!?P9Fs5Ww4TB;'oG'H\i#@>br &9),1]MIn"e$PO 6m&)v?! +bۉs?\AsH NV2ȟ=ԦDJ!xw8:oŪiP(}Fؿx+x6:]f(7$RLDǹ7! wnTd _ #md]\dO$,wH逺Tul^yPvҷA/S!42"BN*-~L!1 0h>ԣxmԞRBu̮N1^Sl >% g@2'9NVԵ*0WL5`v{cZ_VVm8]G_iə'M%Q-S &k-֎><$!Pr݊<9|"hpuҎÏq@v5ݓ9ZBxj.`gMfg)z&qWM{( 1 rCuߎV:A (RفMѓ Q7H~{`I_A"ŽY@t F$|p\9EmWTR8*wMx4Zq WK夬_A`u4AgOV{SW"4^(mw5.THO!vZp v\^ʒ'cOsSgcNNW[KL]/NYj0U'%xb`,c;n֦Kق1~gŸ , QFSߖ\!  Շtd{\5_:zftSѝ@?.0/J% d]^ `1`Po#:!6,1XEӅkoڡ{5 B CNa5讙g;]Nnii!?āv#R'v߉!\ N,$z?u-/l3N BX#[@[62-CN0|m}&&oo_%X4P1f;FhL|NfQx̡hB(Ռs9Qg%|.v[[02u;;`H~ l M3SP,܈ ٱe+gjW.8 3GIJv%Uuy Pn h!u-v /TfL;&vֵB۔(lPhqlBN-8]>V<+Szt HTB+aH=Uosd $ӔI~`SAʏ{X L6FRk*Z "}P2'S9?yU E V(w p0ft<Yk~#pl;&8bn\f]JOLtf^=Z_Mî"'rz%ҙ̚2@v'd sֽM\XdIH h\bښsi*^焇A/ Yǒ-T—S+ZAP/ZeG3spdH{9|С@N6om G帕6:1fV/5&q?lnJϩ@Z:jLF?e݌WRkJi6ٰ0B'E_#jZ-ⱋHm1C Z~Q3 ;<#`bA7Ss`FiE|ˁk6zI~gXm O"1nc\~BUB:̓%3h~ l?N*PN| [>UC.u?{v=[H_jGu9`lIs#[8z"m(Bj&Ï惴,2ߤw!9Va'&(`Q8.MqꃳͲ $I-1k6ծ [+Sl4|?W$hҔYd#NFT:+OCp)!NK3B<:"aASJ3iʉA,1qT*Vd/(W"J;:i0z~q6;OrݚHkY!7o兓tEr YjŰOGx Դ/2X{+bS&HP6lJO=:zwnl8㭸.E3V3[9¨ث-cjBX}=]w #z A Ps`*.nEbK+cg4aSOVjǠ kvI: I'a2x-^-ۆ</' pUdGphn)|2=͗s4~Լ 5eKm8d{Po䕎zj'#'U;* BNHG.0'K x0QhI_"ukUKwiA%)N[vZX`([r#r5S`SM?Y ޺&f=np HCTk%&y300jNpWU/hcNޏubđ:3ĂfÓICbA&#v5f?&OoT=1%}Oa j5ǻO9>ކː AO*V&k:!46Q=5rSfg׶Jv 8!+DCk4ms^o`q2kYອ#xЇh,橅)Akc;:07ZfH OafщgIt JyXBhc~:W8E&ꄧ M`z~ӧC@*O]I :5>)"/fXԻ/n&2)z̪^}S]07r(3"Jk鮂\"V M8S6>ס;O"HxWvWCtz|+8>?wfh30AYZ@/^]{pu] ;]h|GSvXpyeN@IJ5t)"SNźG[32 (LWWM*w-[)E `DnFQrҨc̼>˲WwПMH *L.8-1T>p>J9QKǥ5R;93pŎ 7I1V̕6>5Hu(T>0p]b(T]LO剩c|g`KH@#H~YHދgCpW(*;k.-Nm4O\z},R"fdzI@JVRsHlW7jy(K_NG6*'>&nO*UeZxW% NEdF2Cd%^\/M3̮FT-q?{zGh[e{('HSi"]:&+5v;*"GbX@j½-`L-5C - 4uo\v= ` PlQ?ciwbA ,$fFI6_cCghٗ!z/|pm8nL 1^yay ^]!l.aUӄ$&BPє(ߓ$–F`TWB{n];;w9jֲp~ {`gh2F{sfkυTmCJB8j_+o q'KਅlJjJƎ# 0XVwgj, bϯ6qnF?WtL1b4%F9TX\3_7fEL>RQaԡ+$(igJ96-7̦A/4Hhk[G͏ZaD>ԷӕP`h~*DHAJw=q^_PxOm)GgbDΣZ dxUyn7l)&VWq[:Õ_P%@5D?L9FnW o~v:ϝ͠nHwmoU 4vZw 6J`,aO.Z]>Nu_ [{z:rn` NOrVN*2* 䨕;(\ռAn3:\x#WZR+Pbf!SCoJh 8[4Gz401AlhhzohY%E1M"C̳z!̂ڨI[-hw?GfN Hݏ FiW4:5a8DPvV3MKg~xI҂r"1IP衮qPqJ?u:3cn䕒[ސxh;09SƄK_[Qeݳi'!^N $XsӉ3˜Qcv XJ6yw>9/)Oϗ+l-?el $ACL:>7v>t ^Ƽ> ߔ"S'uE(AGav=֘{9w$f'Pft;dXOH^'v:eaUH97:ډ8V-,Yñ=76p*主dXlasbڿYp Cs?(ZɂsSzuRNAt,/:CqLK> 淳 2pӮ]pkT-5BAFo,JZ~0g2 UVy k'j9.۴ӭ17RS>Lg :ItB؍-w%жS~.AJǛ'*3 F6.zԷ h-?L%cC/MG M3950;rQ(jlKH6o~u RR"_DMB&^MBCB6\nՂ}^fynIl‚oW.0m<Կ 61Sf^ş̶3 t_VaOFaĩaW~{g;dt>w=7*2Ê8'7`|RiШgE0kÂu,0zdx{W!l[:gm@$˲8?hwt P> #C( %Ӆ;9n[*ejHE>F}/W3x X{=f" dI"&l ;'/_ 5Mڨh""Is5XĐGM}}E0x$M.ܰc: D"-=Sջg%@2 sF+5Cluf 97[b,%*ՎiU",'RG*hzCUP;}f.xZڐ䞂n_0Un/_ QiqBrQ<ͧ[KNuci,J@ۍΑӘCW+e2auY}0|/؍vԌg9n;(1V09{OeLD,8t޼SuEn`a4| JGgm?$e΋晴4OU?FfjtHdyDDڮ)$UϿ20h@qϧΉ}O> BVgqEnVOpi1r>db_ WM&{̍Mm-N؛(u՘MITq-92]0&h}р3`o#1M>>lm:'s` ZD&Jآ2kD^50OT}6KթږR6RR[#@!8er[Kƚk-W7JYWޢ]ցT#Ddv:sQ t4+9UwywFO2S&CZ-& 卶,SsomOd>Y׵,%%KJ. 4N!Sr8H4 ` 6FlGZ}K|Vn7ovvoֵK!H87%^[˭,".x>D1y?J~5tP>'4 򼱹e\վ`Kr;O4͜ʞTDE3P[s\};@Ews2eQn!GLڏ_GGr #k)z:Z? ]n3u4VVYYaiqRĎx d8E?:n >A^AX-fkg/!BZo0/Hд@aof9 qc.Dߠ)?]-7к1!pIDƷZ$,)N,t0{,ÎݫO6'`rE y M!pRWzSP^AstGo*8xJC}ގ>"DԌZЕȳƱk&}ᑁpw@ >r/慱H7hTBut_zLIκ9gU< ,xtt #䑦& ̨ HEWs㮘!k/yǂNȌp*"8"/P $2N>zԸ qSy`b)GppDJ\QWfL4x6v^!P-KNm 8i[OM,_ՐUÁ\ky >nF CrG)]g%W'jB,c^ ~ЮW*u C:n-lz9X^ϏF|akW]TI II9+Kaː}s"cE!dtm/yK^G,5qRtf~"}1Gj(tH)Yty57zi E6s68/#豏{@Lubt/K\M6j}.~j նQo3ᜯP - 8OYϵw[ >ćƄNHbE}V;-gEfrwRZrq` aF Az L7 ̮7^~jȲգ/,tm7+A,)oFد;zp9]3+T@N;|2GNϙ]J.<6fZ 5{,<3u^!wM3\jB-{h&oj$ \ /DYi8Emr!:-S ~B]'?`kKgQ]ƚ^bKaS:[e @.+x_W}LiA$d*&K3?^xz, m!L͇Yh#fvn$#pn,]V:L<+ܳWhF䭮H {VsS [ǻ,ϷLm@r%O6Ck-6dt0\Qb 0Z}tM/'j˔ꗠՂVV1`nbx4_S"bĘDs4LI~FT󞓱_~%*W{X! WQ"x/}z1[+|kdMٰKݾPBʉZnN@_ NrC7m=8ۑ vuL+Kc0_9 ;'(*%|gPZ+Ow&Ya@Z TpYhvJ\u8cרV+Nn'Q8Nw2g cn>{gi.g o5줨U5\ߚ::9py>@J@gE۫)^x3f WrxҡYOph7Ts6IMWOH9?" JRwu,kG?=s89<*[^EوDŽX9G EnssT]`'L=h6?|<璼ef`!LN쭽x'hrC(&>Owg_OTnQ霗:h~YLǙ_o~c{>鷻@j5hh'= "6uќRVc>NZ"bP=Vrts񞿿Pra?w[jEA$ %)W."IW]1t, T݁łë#D6'DyhEƿ0!kV†tШLMbT|ǫJ&gāݸ/32j3d!Jɂ[O4bY @WK Q4s,S` JNP}xƴdC$BN๎,Z07}G+`ؗ`.JzG_rM[ьvrl! ř[JnQ &vsF9^NEa63mIF.2mUT"1&#$i`#q|vnu-!EqX>5h# fPuUALBAHjf"4'yQWhVG$pJKD "_hڇw.p(rSh̝esv{X=Vj@toݽr6ME5mtG5fss[E4" AJ2ZI 8yWeQt &A52 6xCp[c}cGipx>2`(|h\$VծAtx5i"^zqIj']G I@NܾI{ UqEb 2ʹ%Lv(ZgTrUk'xo~>Rk= #zjXs³ =Lz80"5(Ds f-*>FW>S}ObaN|gjXVfzPD,᧜ PY3V] 4[8)a` ԓ y7if6 N^Z?RUO!/ۖJ4|g`4Z=I#'*6.슂&-l?8מ·3k$ߓL!5>{QX)R+~I-wJ6=h(Iukt UARgQ-ʒ}uqa󨡵q[#ߢH#Q|)L!*ؑ%T^ʮ&UZZTS[îR NmݘGӎo 1谪_0 Iz>4a6vgbr[1MϕH_:qM 1'Ne!t(Xir6Őr9\^Lk`WM:ڑ>&x'`" 7bjb;kױpWE+,D@ {t  ;ޓdLפ+V]m( s>NrA-ܐo#wJ/'ǟM$IB ;DAY^NdC\0GprEOpA1?3g/E/D_A퉰 ZkgXk2v,+ebrTkGDŽ|\#,j֟1E"kCa7Z2;Ҍ;_A]:6u0d\FҔgbSeAP۔^1lvbj#C,֟$9ӻwt!f!=l݂G&~lZm*E^7.k?o"DyMT go?P0ԅJ1o/idX4mUba[HTwZ %` 55sB]D&ł>D̵K j២b6 DwUǏG,cɔ l@Qfjc>7ۚ*DpS/`YpUěd:9Bx\/y~8+ީsg7z]LpYJ=Iu~ yP1i؍Ey *}8ÄC//="'HEՉ6^\%4^7nԺl$Ǭ>.:F^ PL?N&c6MҀn}ISڑjTߤqve2N>W 2"ݖI\V+pU:}8WbtK'u;˺ !c0<_U'HjHt7IO/qM҆=mLU;p@Ҷ?]Ly[1Z9̈ec"PAtȊasJM\:VƛLY{II.Pص^Т_"i$(g+he ݒD@d "T̬[2B=1fMmSrU5,xmV+d˙AFo[D1xiv4dQv&yjG[ZO#g=BH0G1h<;O6d+)mҏm4l4|CFV>,=';[B[IΊ x%iR!!hnFD:EƀA\]@ρre$|p]d~e, 6,cS@m)"X懗/HrAm%$)SDlW̓VSlqC瑓 Q[?<gΎPøF8+ Ĩ"e./Tžz3n3ǒft-ͥKHNcԉ9N5r0W9$ 6Fb4r{=]16;`R/aJe.7W ˗]O4Vb=x/<"8𫪘S*.UL 1?rV;&~j$>vc.؀I(k!Xx- ҍV>l0rfP8JDQ.s^פ,݂a U߯i+mXnH.2& e%0^W ALJ M+\)f9UKdH+(tq8T&w-`P632FyF&l?v83ňl}eLu;I%D,줛h~3X};0rN~Hub 0 ̯|n'T+ڱB]Z@AI pEhڙ_UMR-n^>͆@Əsӡۃ&d\{xcYOc%_ O!kڕCq[įکfϫGvW%ZR^/BZi`䳉0~7ޑmZ"m.'Al\Y!lw *ϨG|P**`6*`[LSނ P0q7Lbq02GqWM^g&VBQҍ mqRT#W*,m!)iٱvp E7 ^=KG:;|KTA(q@N-cvcPH韬iy5E~4Y˘aT5ۢ|v~. B?ЗÕq(,;*t"V'we1DJsRu9ܟi(|@s20vaqLeWގmG̓sYrY4J ?pT|'[rߛ bo"&[d nZxjtauD:NxH\/ KI`3!cHlxIA.&+N?>|Voѫ@#y،:-1wDW{? , ܾ}@vXjF{ 8GdeNׅB䁈RqnҰ sUv֣te<r*!=u״8EgYErq|a֝iZDJ\H _\fGsgR6ke!HJFjetˌCnhE&@^cIN=߃@9Bc.5cLO34paltR}|fs%+ݪQ]_ԬU{c7ܓ8 D=s tvcKl?+r(H^s۾Y @sTAHb4uX1Ma da5GPD Y\7! ĶR>'_+1Md4*xgI9۫@[EZFqyz@AWW; d+~ݎ%/ȓ9z;{%4pnb"rW_`݈ с;t1f,BJۅ*ºtI}UB5T1\YIrt&?B-xA5%"{Uq¬9-jm!MDV\>*dz pvqt\«DԘ!H&Fd:tD=P@6e,yiFW;.,ʂ>niR iq̊݇lE5_/$7ހ!|k[2xơ&-p {{ 1siooo kրT\2qWu D -HEy03:,}^HyVYd,5 Ep@)5]ak";c ܼ}+3u O%9:oX?>G@Q KcV_[=QrL`3!&- |HS=3bbOs^V6 (Yȷ f'qtcĄ슬i%UAFj[9UAͬvE2'3Î| ުJ-z{4&yrߩ%T}:%썺2#F2" 7"7mxFz, tM1z;rs7/a(6-J<[YNlln‹t/7||hAtbZQr]HܶwL#sS-?sȫ1LdPp'7곢HFAI1}mDmZ;䭦mNIZ%k=[JfmLPs}n+TW &ЎsDC*҇ґV[U/u%y#ʪkФ=0,,/mh-F#aNL<\ X&>9X= =[jD2 QFhHxf;C6SIJIV74-M65LڮMSH=jo%M፨k4&bR^74-xoe$dd,2~@L1:;] kUDm\\ӶIN(H7aǷ> cihJo P=ᑨicaGWiw?( ֓#|@?aO3W8LO֙Avʀ;KĂ6"yS *rL7)!]{ÈGQaEAԫ9Fn!T >:WQVPYN,w['%Ed^H,9ޘu w:zrӺB ^)TQ e\&zRNiqṠEnD jIs;?% !銙ΕYyaOs65kr1'vP{ȡ%i)YEC9f-ߛPZdVFT;*[! I,z[X>6?Gwf'yPϱhN:o me/:DnInLZc`Yx;i}oI..0[W^uR^}nL(gQ.+Y=a,$ hJCN+,45B5뚺6ϲ(@r _ҝ]s->r5R  PyZx7CV\ܾY~ ODjy-4:Y BDL>+jcp k  QwkJD\h#Aٱ/o6%O>"|.S3@p;5ȈiE_Y%`#(yz ԼUFQL 0 CFV 286{P|;ATX}ې%#䋳lmAWF4+ka\7{10OtPZr.5"]d[;Ejw SLAi  p+Ɔے_/_n>R4$vkJb4m_; ha#EK[JlyԄÍP*g EBI*fn@4ļK@e JISgc/;wcQZq|/Ӹq$4X%dc( O2 >m bl L"ic>"/)XJĻ\Eյ>c'ydK[gQ5%ny̽z%fXCwmը+v> "%oGP$StW*utR7)¥r#14ﲟ.P? -˒I@I iGe] 5 jHZ.L+Ȼj~'Gمͫ{3Q@au SMjh` ?ڣ Ri5ݩ8V%`&M#"NQP\Rnvݗ9$ /gOKvwRYh27Å}/P][C]6%VzHFd<(ٲ@VЂ%gPYJ) !lcTɫR*Qm9 9:\7g˗A[*#Ps%Z 2S2>N]rLneM< )Op9]#Rd,_A>O0ubGR,?m}#Vk87 $=}ь_X)-nO+BdJ\ƉiZ09$ulZo=nQ͟w6;,o * 75lo6z ?@]D&ykOTf')/duP(zЯ$-;Mrpm}H L}PdƠT"}IJr_k70 H2:nfa`K&744TD0K=CM o@v(+i{HH)3A3nSc0xt7C)8Aɺ6ޥ]EA (*_OQX@/}Dcs)!pkswi懝A!fs6n.d;3)أg\P9ܳJp/)%%kA0hG+}vfS'LAh]xhW|VXa{D+w30inڂyIArƸ 3/q3ΐw :joIqDs$"nYnU`2\",o#^_0qkc8Z=;t"L߁s .r73Z'K#a t@k._6a4϶iYުPp".+NZA2@Z{} 49uf^1!giΔv P*S(Mo舘nSQ5tW ~t,x^9+g< 'H&&nrRsmٰ︵kfZ*FѲzjό3 7T%kStQn RrC{?Fn=70FxK|Q)0k!OrVT~4uQ{4lmKy|:PΏ4벴̃%|J<Łl[`{p s!0Վ0rJCbzG(791Qmj%M~қ XݹvCN!CWs95DOeIU=5/\-p~RA?T-;fП80/cPI(_ ՘.u~gd&rX'`_лB0UBg cFFȔsg53&*涭 Vy7be \&o*[Rh$/@kXjL1Ŀ\$'Z"_NZhb:J,6U6,9{6?{Ի7dzÅMV`MX2R/.\wτY\\C}xV3į@2?J>R%Fיi%6/zF X1&|5 or)ǽI4'|>t5w1,';g¼j iOkk,WR=;ߐ^҉edL@J9!%j?ةMV89y ѩEYvBni7WM MYcFrC@!,s=ubßYoot\ +' i(P87+i徆UyݩFI˪S_tz$cK MVRj< (A" 6}"K~"R@[9,J?ؒgS`p?&gX (}$e%A'W'*|B ,Tf]e;uzH$ zc:* yYMhp'H)tmC4a}J/rt ߗ((Qʁ/`]+JUVz F78tg$Q2q3BW!^n&Nxwn*w^J=l$BYӉ&>F>Y]3 >K& E91/ڡq~j Lv/˂lD%䒍DXc:GE&ٿMm3k;˘ (FL5`]a7'kp%^&1 6`jPafX>E\=%ZsJp:r42n f\*ᓖf-VVR?ݫ`(&|졀}x5^`Txmh\*o#wP`S+5EZvr&^€'.OI99 LTq^䩿C., d3P'HCQh%>[11DH#\`QPK>ж,PcTHcʟ<% aYxO򈗝;;oZW\UΩ+C`4Eߔbڎuq %.h%"DYT^Ei$7ThvӊѦDW /xdܶA^}s =kֽKa早(k8ޜo Z+ĕ8HСǀT{i %ive/zt#+X0z ̼%a1;Z 0qͶS4Xf'C\sv%QWApS_Sl'ȮGXU,5ԧ"2 5D M'@ ST&0v~8}C͑?i{놯{:cN?85DyvQأg+8ѝqV%%Z!f5f:`ZحVbଚ =)g(S*lX9'f%yWvT LL)|*cNwo[V\`:axxóqnAro/'[w&sUjJm6XD%0V,U^kidB#9W{QrWNt?Im>n`(z8 Y  `kfF%Ioe!vld5mӤz'drꥉ.nཉ.\&r@q[$z"zQ}1={zOU%}گf'Pd?Ƣ 3_/ƐhURɋd澹l~^4P6N;#ʍ)o+ϕW] gm_K;{2R2И[ 3 Ld l$i zUng \gC= lz&_. $syͅ#0x!yF:^q >( t@"ןaBWCU#rGm߀VGH+ˆ|'ɬЁѺg-R><]Zx%2[^5k&j;qC*_@(ɋ=HY- tEA5CUiGC(g~@)6:ۛӿoɊ'-~Ex=սK~ǘp*7N'i=nCЗ.|2B YaQKȏomOC *ZDZ |Ӫђ& OaKoXNơS] ]H2o%؄!"x6&S,'??tm?h k,S~A *پb0Rt&"sMV6my > 4gI,3ESqSQ\o.U=!KJ"F&n6?pHhOmW0Tq2:ǐU z bd$7ܞ6S e9k/m6BumŕJ,8ү_=#؇ v̀rs_ۑVOx3K v{:bW̼ky3aQB| (ŚZM[?ssUum\`gac `ʆYwq⡆u$W%wxINH^d#*(kȇUN ;:ymd rMӔ 1I>Ҳ*z@у?>>0&ukז_4Ѹ&%S SqPG%Q_ZHHD,TyOed'.{-b6VﯱNT 3]륞:K. i44Q`Q'zm"w@Uӗe-z*".DaI9<7)\}kofY+TPfמ ]$\Um nHh:[KW\es&bҨ_N+@M=WvZ53t^l/c]a+hL칒"#\ @-/Iuk?t5#ڿ)'1vꂨ4/l#cIŬF:+OTe F ~gcH̡qV_@ym 2#`2ދfOvl"*ݽN52P|8P?XU6nu(xzBiq0b;hWQ/9[}(#582?0H9]kYcnTQ,'xy=ʃfonƛ/S0ͻ)Ldf" !KȻoЛ%FAQQ+_k( G3_@ƞ|I k6Lh)UjKMIQdƖ3作j(`PL0͍ӂĮ[l|\n?->S6B4 Xj ۸NHFY"E/ XxTnp^ooz ft)-W7vwO5W/UKΑ hy]9QtG&kt4V6EHgs%syܚKqT;4 `P//U2d*\Lp俪 ¶WPi8yNO7=6Q`Yn@hAtkpLuR+ܹ&^uko˕[1`+-&G\7k"Yg.\(5+@jxV c?cbZ/ -F%i ;9-)hYٍ0zhT\3uCW h^I 0YYs^YIxd=W?'W9/ Մ7/ tF%Ű0 WDTN`.W0;nVGc"O+U':c':TIتƦpmqY`dNHr~΍NN1eN8\`h6v ``ݸ;)_,FoօԌiy(mXpwBwksCyKTy2Z+vq|^ ;uHX 5Q]s˝1 wXwB0n|=ɥ|jmi Ϩ?-bt :Q] dֱ! )d,f!Tqoz&Ha ~߸P(4[ }gNZ Fsx Xq;>y/F91/R Ǻ1̒F|.jte5jS^U9(ĀF3=_psWf"a,0+&σxhg6;epCc@Ä)&g_a=GYWBl{ùAC$wYTq3 wwћYU;p1/&KͿ RJ(t$}c*# 9  cC,F{ ؁4 BE]O-3?N7М0[^|;~䨌=^Z*oL1BbIf5O4\̣ؐclgi-cQBK؆1deVG?R=w^ MvJl!Nͷ? 5B6}b2_LEhN}dR5pkb}l_."B@$o<ٱ֢.Ŧ HZ8ƐI-/τ\L P%"e$-Ÿzʧ }jG{YAEWUoکbQnt Cw# Tu6@Pj pQ62eB1ILD:xSLM81wPM=`@t/w@'wu{?Z3S4Szx;g`-z&O^~NACKgi+[!{yWta)V^hjÉv$*]'XAT%:4K~rmL v3w_Í/L@B],v,j5nb[ 1spT_XқjSɊcO>P]#ģoSD|GQC4P25dNCE8`5ˬ>&+Z| Rxv`W1ji vyvTR:~tqGPI+G^Aր}ޛ (lU^5%f'|n;qKIPK Vy\ -Xw#ﺫx)nt0v4û 8~1UA~f #xɪ14#)+$dI/ZWe  QA3 0+q3H?1^WG .WEP$vb)iu@[d8L@zE4j~$uUs.Aibr]1*5,9g{+=D-Y; Z[of-?$~=36AՉ+r6r+lQi7*B4Ek&zKI6O\4ld`Gˮ#D:{\*ՊfŞGrVN}JcۓvCmcVUlLDAu9GYHؘc<7:dy;wR o'~Y6hp~+!H XȤ6,TÐ:CIG^-Wð^{XBT);Sj>΢qɀu7Zw\ t^kF=~skkHܿ$P2Ո4=֩DlW]DM>_ GMۡ\:܃lR vk,2n?L۸/3O۸L9v*Bq +̻e-z8$sГr*⢥:bqȞ2 Pk<3/&/crPDi$c4j)Sb9T-T$Y2lPu,C =suˈ*Xd.?]ɓ4$X,!kGf891a/sF;:%5@ET8[~2M JO31DfX9PWO)5TRңj89DGz&.:s5߯jto)EfZG?q]4hky@{ UmX rE{aL3BpзT / Vc*u^@ˢTUT;a.25%Fpk6wP(p8CF(JLKgDC1d(K5mP@, 9؜ NIp6Z*k-+㱬IH3ke0xDlaz\GPe*n+m"NR#q/嗳R6j ;CYKkh{/o!s%@ڂAP7 wuY6@.Lf!+*K֩"B+(y{ LnxRsV9Sco BF|I[(X+y&O8ӱKY.AY0Ndwt  4ةO9T]ćA'6ԟKr3JB|쳜)QI@Jā A n PԷYٺvAH@)b}N>qZILrMGuvPw[Oh\;ĺa76q 81ĻCsD7$ĸʠ|+ CY6utOS[%4 =&L@U;J?~`0 ]^SGwy[&mJ`ܲSRYV# \r1cP mϠmJOztU(!? IEj99ߜ^3GYhӐ7fD_Xڃ59ێlnkOZ@im"s. a+!%FfWڄ:)ڏ 8I16R)pB*۳-=+2.Q鮦-ItOsR~ٳQCsy+/Uا,ƞc1!JW&ovcODۅ> HVf![yM#XB9]B̾[W(;Y|IOQdi}K [ txdބ88ċ=u.l]ˉ'Jl&-2yw±qCuݧ ͉lc™0*s~BjNAv׎ˀ3B o7K (? |#2f{F7|{e7nr~+484ﲃ1\9m32`è5b (O[o]-8]O~jlYmԢEvA Bw(JP]>sg"Qir+Hrۅ gJBPWBߪս2&;̖Iv9GVZ%+,,*WU Ԩ ^ΫˬSpeǏ~øRS1 s!EMGtzu7U h:T>-$e<#箃: Qj T/r+dlz(7;)JhW>f#|3ybW\JEQ龅qO=Dc@iQa%cq˻/tWinpdëIJ_GMM`$b)XYe_vcKX$5]5G }+CEOOT݁ݑeqsJ5b[1-.|5B?+)nz\8ܢee@x`&%KWy6# ȘN+0Cak'f6ɶMM[}1-FQRx2)r͎o6ZVߋ3?|HOXX"POPUGZ]:Iy'X/CoK̔SCZl/ڦ/*-9jP}43}>+$Ks>f'R}-A%8'v\9TG5Dg2beOǽY-B=ݾ8b˰"rD't=IFALMI ~,@J*!*fFtezPO+?\tq`9˓YF|EJ 教:ŗ"F86jihy Dl}Yrrmy&3XWmAO] }q"{vHPVU5`aHMlBC{%A*E<[ Wcfh,w\Zz ijB+-a%wFj @5x_:`gW=j_" [ fwl#MVplG@3v*Bt!Qnؕ{׆gi- ۤ!ԶȏFX$LT):k$~9_պ?o4Èaj"g<莴JX]'^m1Dxpw$ˊǶniB:i=%.j;.o%q-شh]ә(65ڱ%4TM?G>aþm͛ Õ7rʫ*|MI.Xo™-!rS"(@L 8kj}} &9᱾cv)IYJ'IRvK*!JIf Y: b"(PQMhQG FwSDbq ^2`4%m9w#w>&_qzG1_Nj$uڻA.]˴7Cgh6}IkCiW+:{4Am9/$7R+upO<B :s(}Y.iIկH#yYScS,ibZvW@m~a+;<|uE&xgx{pʧTw(Ņf#k4JLpCA;\Np&8'KEE`_ ZmQ[/X"g ZU%^զ꿵-r.O,XYmt4v;ϗ#bD{7+zbJBwaDgkrR)ƾC`0\ABj{WPF)(,+ZuL[E!Nˠ8>qnG[CHĩN.^>:vREE&Pb6DU <+\}%' B̬{N/{k rSVՕ+"Z̶t\?s6>c4a$:`Y󪏄{F {B,ǂԫ6OR o.Q\Zw.Y<A:L%N dnR(x8y iJTz2$n"ñٗxmH(#ȤB>>@?=}Xv޳T%M7~cwć +fC7;v`ᧈq|"{+ȴ cLi##.,V=0,:Al6ڗzI(=q;©ux@F CR0h!c/EM7tVD{%?szaYۂ>UcvH8)M3LRG$d` mz,>ss8tPC0z<)fPBbnz_UD(WvBZ_.39a.4w{Yp`Puf l80dLv]|3 h d6tr!gfhZ Q"ۤ J!Fc>;Ρ6<GA* w8N4`aYN1q yj3L,Vwx WTp ṁG{uή#oGpˊTi(_E, 1lC fÄ5'kdx솁j@WM}3cA*5HΨ^ k}/7AVĶ9gu*1ɞO8?k{bJqc(rq N 3tJ6B hWJvP5vs '$Q:s$$"R_.d3=/>&!d <@!M3̨k-уLA8Y{cG;M(^єD]qZ8lI9z/!9+3ḧ́#U2ݥpF۴ 4AF{ v]Xn / xiӛ $XI?Ag>Pa0o)+;#pw9'gxpWC);:ALR_U ^5$fEgڸaYd3&ETDa2G)aǻqncz2r:~߀ue"S͛WraV*ˎ9o4P\@̸m5PqgQ 18sig&%,)|mU>_چҩ,E'0N`[5N AJ |ϜE0Xٽ ƢT,7tk2)-?z#sh^ Lf4BWlݧXMͼ'ڄv[9[x_7@il g1PⲙY6& 2]ju쮽_L|Wcz CE3z V&+˷q +=anwPd$_.Q6IU_č@C 6Nx/ʛ,lDOD联A!ʃKB_BRRkj(՝WoQ7+LH ]Cq/{1qI%~?U[&(V֩4q5ƏO&^x_([zLrq:(O[>dYX9e# ?E\ZxdpXI5D 0 nn%OK<oNZZ f7pBՄH-j5x4ƳϘ$4}$[Hw[ͶZ|%Ӈo>e`r褝Amk8T$j5.[j5 92.]B&率,Vdi ,uPyy$4|0GFcV|1) Ms(j, 3|?^99_Ha*sR`}2 "7^B"D~ZyxG[01b\+r @! rT J$[vYы/]Tn}+[6 7`X7T]bZtNJQ0ZC&EѷO4\G+QrBJ'6zguRLw7`^$Hن>  3:@M,5[_TfoHxl_\3SZ)C'|stT:h'7C`O=[? '$bLຳdVsVڛtaL.m3EQ+q97!8x& GUfu^^~ Me}`0Yc8 2D1o2^<z0\V?__N'mwQ'{ugYiCfϹE65 Kz%I&2@rAZܱ~$!7!e\Lx5pNXJuW7lqO$fp[ʪȢ8<3{_ rF_5us-Ma9=&8eWS]9.p؎ CMsl`x:6'5P'KMPpN0NJ4RwDmv bQy#p.͵FD/|.y.{@Pg1⦵Ix. tBܼf#_ maJ3hK|'Kp,@p@ AИ}&5];q{s@c k1IM=t_ NI.bMԗv|{,AzeB$N@} 6h3"\@:V|ϳJFU!y' }?Mi_@rCib>hSudXoppU7y[@>/c8ӆgTر@7FłB${OűU-mRx3])@1-F^l4X4ET\"-.JDH2FaXАtȜiG9@D:C5f 2FĊ 䑷;DCojSW[Kٰ+\^:9e ehFF9qP,$_V=,qpb/b~#Nl5a.ʡlo걆8R30ua` yhK~ƂYN-i9b̫UATsb -e]_3Bw k8I$.Uմ#]H $/;ˬu a8oVt!bkP{II'f۝Z2sjhRH 79ma7 T p2M ̉V;e_Csqa!G[4>Sld7)^d)rʤRMFI6b(lS$hq+2.@{:ɓ}.H(8((]Ȇ9%p/tp+7(:x滞&RLh8'D 2atL=!b( cC/d`wg3\]Ü3y̓ ojVI,fdW՛Zv FSE1&aeHHu6 &&Ґ.p 0