/* * NET4: Implementation of BSD Unix domain sockets. * * Authors: Alan Cox, * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Fixes: * Linus Torvalds : Assorted bug cures. * Niibe Yutaka : async I/O support. * Carsten Paeth : PF_UNIX check, address fixes. * Alan Cox : Limit size of allocated blocks. * Alan Cox : Fixed the stupid socketpair bug. * Alan Cox : BSD compatibility fine tuning. * Alan Cox : Fixed a bug in connect when interrupted. * Alan Cox : Sorted out a proper draft version of * file descriptor passing hacked up from * Mike Shaver's work. * Marty Leisner : Fixes to fd passing * Nick Nevin : recvmsg bugfix. * Alan Cox : Started proper garbage collector * Heiko EiBfeldt : Missing verify_area check * Alan Cox : Started POSIXisms * Andreas Schwab : Replace inode by dentry for proper * reference counting * Kirk Petersen : Made this a module * Christoph Rohland : Elegant non-blocking accept/connect algorithm. * Lots of bug fixes. * Alexey Kuznetosv : Repaired (I hope) bugs introduces * by above two patches. * Andrea Arcangeli : If possible we block in connect(2) * if the max backlog of the listen socket * is been reached. This won't break * old apps and it will avoid huge amount * of socks hashed (this for unix_gc() * performances reasons). * Security fix that limits the max * number of socks to 2*max_files and * the number of skb queueable in the * dgram receiver. * Artur Skawina : Hash function optimizations * Alexey Kuznetsov : Full scale SMP. Lot of bugs are introduced 8) * Malcolm Beattie : Set peercred for socketpair * Michal Ostrowski : Module initialization cleanup. * Arnaldo C. Melo : Remove MOD_{INC,DEC}_USE_COUNT, * the core infrastructure is doing that * for all net proto families now (2.5.69+) * * * Known differences from reference BSD that was tested: * * [TO FIX] * ECONNREFUSED is not returned from one end of a connected() socket to the * other the moment one end closes. * fstat() doesn't return st_dev=0, and give the blksize as high water mark * and a fake inode identifier (nor the BSD first socket fstat twice bug). * [NOT TO FIX] * accept() returns a path name even if the connecting socket has closed * in the meantime (BSD loses the path and gives up). * accept() returns 0 length path for an unbound connector. BSD returns 16 * and a null first byte in the path (but not for gethost/peername - BSD bug ??) * socketpair(...SOCK_RAW..) doesn't panic the kernel. * BSD af_unix apparently has connect forgetting to block properly. * (need to check this with the POSIX spec in detail) * * Differences from 2.0.0-11-... (ANK) * Bug fixes and improvements. * - client shutdown killed server socket. * - removed all useless cli/sti pairs. * * Semantic changes/extensions. * - generic control message passing. * - SCM_CREDENTIALS control message. * - "Abstract" (not FS based) socket bindings. * Abstract names are sequences of bytes (not zero terminated) * started by 0, so that this name space does not intersect * with BSD names. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static struct hlist_head unix_socket_table[UNIX_HASH_SIZE + 1]; static DEFINE_SPINLOCK(unix_table_lock); static atomic_t unix_nr_socks = ATOMIC_INIT(0); #define unix_sockets_unbound (&unix_socket_table[UNIX_HASH_SIZE]) #define UNIX_ABSTRACT(sk) (unix_sk(sk)->addr->hash != UNIX_HASH_SIZE) #ifdef CONFIG_SECURITY_NETWORK static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { memcpy(UNIXSID(skb), &scm->secid, sizeof(u32)); } static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) { scm->secid = *UNIXSID(skb); } #else static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { } static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) { } #endif /* CONFIG_SECURITY_NETWORK */ /* * SMP locking strategy: * hash table is protected with spinlock unix_table_lock * each socket state is protected by separate rwlock. */ static inline unsigned unix_hash_fold(__wsum n) { unsigned hash = (__force unsigned)n; hash ^= hash>>16; hash ^= hash>>8; return hash&(UNIX_HASH_SIZE-1); } #define unix_peer(sk) (unix_sk(sk)->peer) static inline int unix_our_peer(struct sock *sk, struct sock *osk) { return unix_peer(osk) == sk; } static inline int unix_may_send(struct sock *sk, struct sock *osk) { return unix_peer(osk) == NULL || unix_our_peer(sk, osk); } static inline int unix_recvq_full(struct sock const *sk) { return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog; } static struct sock *unix_peer_get(struct sock *s) { struct sock *peer; unix_state_lock(s); peer = unix_peer(s); if (peer) sock_hold(peer); unix_state_unlock(s); return peer; } static inline void unix_release_addr(struct unix_address *addr) { if (atomic_dec_and_test(&addr->refcnt)) kfree(addr); } /* * Check unix socket name: * - should be not zero length. * - if started by not zero, should be NULL terminated (FS object) * - if started by zero, it is abstract name. */ static int unix_mkname(struct sockaddr_un *sunaddr, int len, unsigned *hashp) { if (len <= sizeof(short) || len > sizeof(*sunaddr)) return -EINVAL; if (!sunaddr || sunaddr->sun_family != AF_UNIX) return -EINVAL; if (sunaddr->sun_path[0]) { /* * This may look like an off by one error but it is a bit more * subtle. 108 is the longest valid AF_UNIX path for a binding. * sun_path[108] doesnt as such exist. However in kernel space * we are guaranteed that it is a valid memory location in our * kernel address buffer. */ ((char *)sunaddr)[len] = 0; len = strlen(sunaddr->sun_path)+1+sizeof(short); return len; } *hashp = unix_hash_fold(csum_partial(sunaddr, len, 0)); return len; } static void __unix_remove_socket(struct sock *sk) { sk_del_node_init(sk); } static void __unix_insert_socket(struct hlist_head *list, struct sock *sk) { WARN_ON(!sk_unhashed(sk)); sk_add_node(sk, list); } static inline void unix_remove_socket(struct sock *sk) { spin_lock(&unix_table_lock); __unix_remove_socket(sk); spin_unlock(&unix_table_lock); } static inline void unix_insert_socket(struct hlist_head *list, struct sock *sk) { spin_lock(&unix_table_lock); __unix_insert_socket(list, sk); spin_unlock(&unix_table_lock); } static struct sock *__unix_find_socket_byname(struct net *net, struct sockaddr_un *sunname, int len, int type, unsigned hash) { struct sock *s; struct hlist_node *node; sk_for_each(s, node, &unix_socket_table[hash ^ type]) { struct unix_sock *u = unix_sk(s); if (!net_eq(sock_net(s), net)) continue; if (u->addr->len == len && !memcmp(u->addr->name, sunname, len)) goto found; } s = NULL; found: return s; } static inline struct sock *unix_find_socket_byname(struct net *net, struct sockaddr_un *sunname, int len, int type, unsigned hash) { struct sock *s; spin_lock(&unix_table_lock); s = __unix_find_socket_byname(net, sunname, len, type, hash); if (s) sock_hold(s); spin_unlock(&unix_table_lock); return s; } static struct sock *unix_find_socket_byinode(struct net *net, struct inode *i) { struct sock *s; struct hlist_node *node; spin_lock(&unix_table_lock); sk_for_each(s, node, &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) { struct dentry *dentry = unix_sk(s)->dentry; if (!net_eq(sock_net(s), net)) continue; if (dentry && dentry->d_inode == i) { sock_hold(s); goto found; } } s = NULL; found: spin_unlock(&unix_table_lock); return s; } static inline int unix_writable(struct sock *sk) { return (atomic_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf; } static void unix_write_space(struct sock *sk) { read_lock(&sk->sk_callback_lock); if (unix_writable(sk)) { if (sk_has_sleeper(sk)) wake_up_interruptible_sync(sk->sk_sleep); sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT); } read_unlock(&sk->sk_callback_lock); } /* When dgram socket disconnects (or changes its peer), we clear its receive * queue of packets arrived from previous peer. First, it allows to do * flow control based only on wmem_alloc; second, sk connected to peer * may receive messages only from that peer. */ static void unix_dgram_disconnected(struct sock *sk, struct sock *other) { if (!skb_queue_empty(&sk->sk_receive_queue)) { skb_queue_purge(&sk->sk_receive_queue); wake_up_interruptible_all(&unix_sk(sk)->peer_wait); /* If one link of bidirectional dgram pipe is disconnected, * we signal error. Messages are lost. Do not make this, * when peer was not connected to us. */ if (!sock_flag(other, SOCK_DEAD) && unix_peer(other) == sk) { other->sk_err = ECONNRESET; other->sk_error_report(other); } } } static void unix_sock_destructor(struct sock *sk) { struct unix_sock *u = unix_sk(sk); skb_queue_purge(&sk->sk_receive_queue); WARN_ON(atomic_read(&sk->sk_wmem_alloc)); WARN_ON(!sk_unhashed(sk)); WARN_ON(sk->sk_socket); if (!sock_flag(sk, SOCK_DEAD)) { printk(KERN_INFO "Attempt to release alive unix socket: %p\n", sk); return; } if (u->addr) unix_release_addr(u->addr); atomic_dec(&unix_nr_socks); local_bh_disable(); sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); local_bh_enable(); #ifdef UNIX_REFCNT_DEBUG printk(KERN_DEBUG "UNIX %p is destroyed, %d are still alive.\n", sk, atomic_read(&unix_nr_socks)); #endif } static int unix_release_sock(struct sock *sk, int embrion) { struct unix_sock *u = unix_sk(sk); struct dentry *dentry; struct vfsmount *mnt; struct sock *skpair; struct sk_buff *skb; int state; unix_remove_socket(sk); /* Clear state */ unix_state_lock(sk); sock_orphan(sk); sk->sk_shutdown = SHUTDOWN_MASK; dentry = u->dentry; u->dentry = NULL; mnt = u->mnt; u->mnt = NULL; state = sk->sk_state; sk->sk_state = TCP_CLOSE; unix_state_unlock(sk); wake_up_interruptible_all(&u->peer_wait); skpair = unix_peer(sk); if (skpair != NULL) { if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { unix_state_lock(skpair); /* No more writes */ skpair->sk_shutdown = SHUTDOWN_MASK; if (!skb_queue_empty(&sk->sk_receive_queue) || embrion) skpair->sk_err = ECONNRESET; unix_state_unlock(skpair); skpair->sk_state_change(skpair); read_lock(&skpair->sk_callback_lock); sk_wake_async(skpair, SOCK_WAKE_WAITD, POLL_HUP); read_unlock(&skpair->sk_callback_lock); } sock_put(skpair); /* It may now die */ unix_peer(sk) = NULL; } /* Try to flush out this socket. Throw out buffers at least */ while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { if (state == TCP_LISTEN) unix_release_sock(skb->sk, 1); /* passed fds are erased in the kfree_skb hook */ kfree_skb(skb); } if (dentry) { dput(dentry); mntput(mnt); } sock_put(sk); /* ---- Socket is dead now and most probably destroyed ---- */ /* * Fixme: BSD difference: In BSD all sockets connected to use get * ECONNRESET and we die on the spot. In Linux we behave * like files and pipes do and wait for the last * dereference. * * Can't we simply set sock->err? * * What the above comment does talk about? --ANK(980817) */ if (unix_tot_inflight) unix_gc(); /* Garbage collect fds */ return 0; } static int unix_listen(struct socket *sock, int backlog) { int err; struct sock *sk = sock->sk; struct unix_sock *u = unix_sk(sk); err = -EOPNOTSUPP; if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET) goto out; /* Only stream/seqpacket sockets accept */ err = -EINVAL; if (!u->addr) goto out; /* No listens on an unbound socket */ unix_state_lock(sk); if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN) goto out_unlock; if (backlog > sk->sk_max_ack_backlog) wake_up_interruptible_all(&u->peer_wait); sk->sk_max_ack_backlog = backlog; sk->sk_state = TCP_LISTEN; /* set credentials so connect can copy them */ sk->sk_peercred.pid = task_tgid_vnr(current); current_euid_egid(&sk->sk_peercred.uid, &sk->sk_peercred.gid); err = 0; out_unlock: unix_state_unlock(sk); out: return err; } static int unix_release(struct socket *); static int unix_bind(struct socket *, struct sockaddr *, int); static int unix_stream_connect(struct socket *, struct sockaddr *, int addr_len, int flags); static int unix_socketpair(struct socket *, struct socket *); static int unix_accept(struct socket *, struct socket *, int); static int unix_getname(struct socket *, struct sockaddr *, int *, int); static unsigned int unix_poll(struct file *, struct socket *, poll_table *); static unsigned int unix_dgram_poll(struct file *, struct socket *, poll_table *); static int unix_ioctl(struct socket *, unsigned int, unsigned long); static int unix_shutdown(struct socket *, int); static int unix_stream_sendmsg(struct kiocb *, struct socket *, struct msghdr *, size_t); static int unix_stream_recvmsg(struct kiocb *, struct socket *, struct msghdr *, size_t, int); static int unix_dgram_sendmsg(struct kiocb *, struct socket *, struct msghdr *, size_t); static int unix_dgram_recvmsg(struct kiocb *, struct socket *, struct msghdr *, size_t, int); static int unix_dgram_connect(struct socket *, struct sockaddr *, int, int); static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, struct msghdr *, size_t); static const struct proto_ops unix_stream_ops = { .family = PF_UNIX, .owner = THIS_MODULE, .release = unix_release, .bind = unix_bind, .connect = unix_stream_connect, .socketpair = unix_socketpair, .accept = unix_accept, .getname = unix_getname, .poll = unix_poll, .ioctl = unix_ioctl, .listen = unix_listen, .shutdown = unix_shutdown, .setsockopt = sock_no_setsockopt, .getsockopt = sock_no_getsockopt, .sendmsg = unix_stream_sendmsg, .recvmsg = unix_stream_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, }; static const struct proto_ops unix_dgram_ops = { .family = PF_UNIX, .owner = THIS_MODULE, .release = unix_release, .bind = unix_bind, .connect = unix_dgram_connect, .socketpair = unix_socketpair, .accept = sock_no_accept, .getname = unix_getname, .poll = unix_dgram_poll, .ioctl = unix_ioctl, .listen = sock_no_listen, .shutdown = unix_shutdown, .setsockopt = sock_no_setsockopt, .getsockopt = sock_no_getsockopt, .sendmsg = unix_dgram_sendmsg, .recvmsg = unix_dgram_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, }; static const struct proto_ops unix_seqpacket_ops = { .family = PF_UNIX, .owner = THIS_MODULE, .release = unix_release, .bind = unix_bind, .connect = unix_stream_connect, .socketpair = unix_socketpair, .accept = unix_accept, .getname = unix_getname, .poll = unix_dgram_poll, .ioctl = unix_ioctl, .listen = unix_listen, .shutdown = unix_shutdown, .setsockopt = sock_no_setsockopt, .getsockopt = sock_no_getsockopt, .sendmsg = unix_seqpacket_sendmsg, .recvmsg = unix_dgram_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, }; static struct proto unix_proto = { .name = "UNIX", .owner = THIS_MODULE, .obj_size = sizeof(struct unix_sock), }; /* * AF_UNIX sockets do not interact with hardware, hence they * dont trigger interrupts - so it's safe for them to have * bh-unsafe locking for their sk_receive_queue.lock. Split off * this special lock-class by reinitializing the spinlock key: */ static struct lock_class_key af_unix_sk_receive_queue_lock_key; static struct sock *unix_create1(struct net *net, struct socket *sock) { struct sock *sk = NULL; struct unix_sock *u; atomic_inc(&unix_nr_socks); if (atomic_read(&unix_nr_socks) > 2 * get_max_files()) goto out; sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_proto); if (!sk) goto out; sock_init_data(sock, sk); lockdep_set_class(&sk->sk_receive_queue.lock, &af_unix_sk_receive_queue_lock_key); sk->sk_write_space = unix_write_space; sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; sk->sk_destruct = unix_sock_destructor; u = unix_sk(sk); u->dentry = NULL; u->mnt = NULL; spin_lock_init(&u->lock); atomic_long_set(&u->inflight, 0); INIT_LIST_HEAD(&u->link); mutex_init(&u->readlock); /* single task reading lock */ init_waitqueue_head(&u->peer_wait); unix_insert_socket(unix_sockets_unbound, sk); out: if (sk == NULL) atomic_dec(&unix_nr_socks); else { local_bh_disable(); sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); local_bh_enable(); } return sk; } static int unix_create(struct net *net, struct socket *sock, int protocol) { if (protocol && protocol != PF_UNIX) return -EPROTONOSUPPORT; sock->state = SS_UNCONNECTED; switch (sock->type) { case SOCK_STREAM: sock->ops = &unix_stream_ops; break; /* * Believe it or not BSD has AF_UNIX, SOCK_RAW though * nothing uses it. */ case SOCK_RAW: sock->type = SOCK_DGRAM; case SOCK_DGRAM: sock->ops = &unix_dgram_ops; break; case SOCK_SEQPACKET: sock->ops = &unix_seqpacket_ops; break; default: return -ESOCKTNOSUPPORT; } return unix_create1(net, sock) ? 0 : -ENOMEM; } static int unix_release(struct socket *sock) { struct sock *sk = sock->sk; if (!sk) return 0; sock->sk = NULL; return unix_release_sock(sk, 0); } static int unix_autobind(struct socket *sock) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk); static u32 ordernum = 1; struct unix_address *addr; int err; mutex_lock(&u->readlock); err = 0; if (u->addr) goto out; err = -ENOMEM; addr = kzalloc(sizeof(*addr) + sizeof(short) + 16, GFP_KERNEL); if (!addr) goto out; addr->name->sun_family = AF_UNIX; atomic_set(&addr->refcnt, 1); retry: addr->len = sprintf(addr->name->sun_path+1, "%05x", ordernum) + 1 + sizeof(short); addr->hash = unix_hash_fold(csum_partial(addr->name, addr->len, 0)); spin_lock(&unix_table_lock); ordernum = (ordernum+1)&0xFFFFF; if (__unix_find_socket_byname(net, addr->name, addr->len, sock->type, addr->hash)) { spin_unlock(&unix_table_lock); /* Sanity yield. It is unusual case, but yet... */ if (!(ordernum&0xFF)) yield(); goto retry; } addr->hash ^= sk->sk_type; __unix_remove_socket(sk); u->addr = addr; __unix_insert_socket(&unix_socket_table[addr->hash], sk); spin_unlock(&unix_table_lock); err = 0; out: mutex_unlock(&u->readlock); return err; } static struct sock *unix_find_other(struct net *net, struct sockaddr_un *sunname, int len, int type, unsigned hash, int *error) { struct sock *u; struct path path; int err = 0; if (sunname->sun_path[0]) { struct inode *inode; err = kern_path(sunname->sun_path, LOOKUP_FOLLOW, &path); if (err) goto fail; inode = path.dentry->d_inode; err = inode_permission(inode, MAY_WRITE); if (err) goto put_fail; err = -ECONNREFUSED; if (!S_ISSOCK(inode->i_mode)) goto put_fail; u = unix_find_socket_byinode(net, inode); if (!u) goto put_fail; if (u->sk_type == type) touch_atime(path.mnt, path.dentry); path_put(&path); err = -EPROTOTYPE; if (u->sk_type != type) { sock_put(u); goto fail; } } else { err = -ECONNREFUSED; u = unix_find_socket_byname(net, sunname, len, type, hash); if (u) { struct dentry *dentry; dentry = unix_sk(u)->dentry; if (dentry) touch_atime(unix_sk(u)->mnt, dentry); } else goto fail; } return u; put_fail: path_put(&path); fail: *error = err; return NULL; } static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk); struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr; struct dentry *dentry = NULL; struct nameidata nd; int err; unsigned hash; struct unix_address *addr; struct hlist_head *list; err = -EINVAL; if (sunaddr->sun_family != AF_UNIX) goto out; if (addr_len == sizeof(short)) { err = unix_autobind(sock); goto out; } err = unix_mkname(sunaddr, addr_len, &hash); if (err < 0) goto out; addr_len = err; mutex_lock(&u->readlock); err = -EINVAL; if (u->addr) goto out_up; err = -ENOMEM; addr = kmalloc(sizeof(*addr)+addr_len, GFP_KERNEL); if (!addr) goto out_up; memcpy(addr->name, sunaddr, addr_len); addr->len = addr_len; addr->hash = hash ^ sk->sk_type; atomic_set(&addr->refcnt, 1); if (sunaddr->sun_path[0]) { unsigned int mode; err = 0; /* * Get the parent directory, calculate the hash for last * component. */ err = path_lookup(sunaddr->sun_path, LOOKUP_PARENT, &nd); if (err) goto out_mknod_parent; dentry = lookup_create(&nd, 0); err = PTR_ERR(dentry); if (IS_ERR(dentry)) goto out_mknod_unlock; /* * All right, let's create it. */ mode = S_IFSOCK | (SOCK_INODE(sock)->i_mode & ~current_umask()); err = mnt_want_write(nd.path.mnt); if (err) goto out_mknod_dput; err = security_path_mknod(&nd.path, dentry, mode, 0); if (err) goto out_mknod_drop_write; err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, 0); out_mknod_drop_write: mnt_drop_write(nd.path.mnt); if (err) goto out_mknod_dput; mutex_unlock(&nd.path.dentry->d_inode->i_mutex); dput(nd.path.dentry); nd.path.dentry = dentry; addr->hash = UNIX_HASH_SIZE; } spin_lock(&unix_table_lock); if (!sunaddr->sun_path[0]) { err = -EADDRINUSE; if (__unix_find_socket_byname(net, sunaddr, addr_len, sk->sk_type, hash)) { unix_release_addr(addr); goto out_unlock; } list = &unix_socket_table[addr->hash]; } else { list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; u->dentry = nd.path.dentry; u->mnt = nd.path.mnt; } err = 0; __unix_remove_socket(sk); u->addr = addr; __unix_insert_socket(list, sk); out_unlock: spin_unlock(&unix_table_lock); out_up: mutex_unlock(&u->readlock); out: return err; out_mknod_dput: dput(dentry); out_mknod_unlock: mutex_unlock(&nd.path.dentry->d_inode->i_mutex); path_put(&nd.path); out_mknod_parent: if (err == -EEXIST) err = -EADDRINUSE; unix_release_addr(addr); goto out_up; } static void unix_state_double_lock(struct sock *sk1, struct sock *sk2) { if (unlikely(sk1 == sk2) || !sk2) { unix_state_lock(sk1); return; } if (sk1 < sk2) { unix_state_lock(sk1); unix_state_lock_nested(sk2); } else { unix_state_lock(sk2); unix_state_lock_nested(sk1); } } static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2) { if (unlikely(sk1 == sk2) || !sk2) { unix_state_unlock(sk1); return; } unix_state_unlock(sk1); unix_state_unlock(sk2); } static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr; struct sock *other; unsigned hash; int err; if (addr->sa_family != AF_UNSPEC) { err = unix_mkname(sunaddr, alen, &hash); if (err < 0) goto out; alen = err; if (test_bit(SOCK_PASSCRED, &sock->flags) && !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0) goto out; restart: other = unix_find_other(net, sunaddr, alen, sock->type, hash, &err); if (!other) goto out; unix_state_double_lock(sk, other); /* Apparently VFS overslept socket death. Retry. */ if (sock_flag(other, SOCK_DEAD)) { unix_state_double_unlock(sk, other); sock_put(other); goto restart; } err = -EPERM; if (!unix_may_send(sk, other)) goto out_unlock; err = security_unix_may_send(sk->sk_socket, other->sk_socket); if (err) goto out_unlock; } else { /* * 1003.1g breaking connected state with AF_UNSPEC */ other = NULL; unix_state_double_lock(sk, other); } /* * If it was connected, reconnect. */ if (unix_peer(sk)) { struct sock *old_peer = unix_peer(sk); unix_peer(sk) = other; unix_state_double_unlock(sk, other); if (other != old_peer) unix_dgram_disconnected(sk, old_peer); sock_put(old_peer); } else { unix_peer(sk) = other; unix_state_double_unlock(sk, other); } return 0; out_unlock: unix_state_double_unlock(sk, other); sock_put(other); out: return err; } static long unix_wait_for_peer(struct sock *other, long timeo) { struct unix_sock *u = unix_sk(other); int sched; DEFINE_WAIT(wait); prepare_to_wait_exclusive(&u->peer_wait, &wait, TASK_INTERRUPTIBLE); sched = !sock_flag(other, SOCK_DEAD) && !(other->sk_shutdown & RCV_SHUTDOWN) && unix_recvq_full(other); unix_state_unlock(other); if (sched) timeo = schedule_timeout(timeo); finish_wait(&u->peer_wait, &wait); return timeo; } static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags) { struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr; struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk), *newu, *otheru; struct sock *newsk = NULL; struct sock *other = NULL; struct sk_buff *skb = NULL; unsigned hash; int st; int err; long timeo; err = unix_mkname(sunaddr, addr_len, &hash); if (err < 0) goto out; addr_len = err; if (test_bit(SOCK_PASSCRED, &sock->flags) && !u->addr && (err = unix_autobind(sock)) != 0) goto out; timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); /* First of all allocate resources. If we will make it after state is locked, we will have to recheck all again in any case. */ err = -ENOMEM; /* create new sock for complete connection */ newsk = unix_create1(sock_net(sk), NULL); if (newsk == NULL) goto out; /* Allocate skb for sending to listening sock */ skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL); if (skb == NULL) goto out; restart: /* Find listening sock. */ other = unix_find_other(net, sunaddr, addr_len, sk->sk_type, hash, &err); if (!other) goto out; /* Latch state of peer */ unix_state_lock(other); /* Apparently VFS overslept socket death. Retry. */ if (sock_flag(other, SOCK_DEAD)) { unix_state_unlock(other); sock_put(other); goto restart; } err = -ECONNREFUSED; if (other->sk_state != TCP_LISTEN) goto out_unlock; if (other->sk_shutdown & RCV_SHUTDOWN) goto out_unlock; if (unix_recvq_full(other)) { err = -EAGAIN; if (!timeo) goto out_unlock; timeo = unix_wait_for_peer(other, timeo); err = sock_intr_errno(timeo); if (signal_pending(current)) goto out; sock_put(other); goto restart; } /* Latch our state. It is tricky place. We need to grab write lock and cannot drop lock on peer. It is dangerous because deadlock is possible. Connect to self case and simultaneous attempt to connect are eliminated by checking socket state. other is TCP_LISTEN, if sk is TCP_LISTEN we check this before attempt to grab lock. Well, and we have to recheck the state after socket locked. */ st = sk->sk_state; switch (st) { case TCP_CLOSE: /* This is ok... continue with connect */ break; case TCP_ESTABLISHED: /* Socket is already connected */ err = -EISCONN; goto out_unlock; default: err = -EINVAL; goto out_unlock; } unix_state_lock_nested(sk); if (sk->sk_state != st) { unix_state_unlock(sk); unix_state_unlock(other); sock_put(other); goto restart; } err = security_unix_stream_connect(sock, other->sk_socket, newsk); if (err) { unix_state_unlock(sk); goto out_unlock; } /* The way is open! Fastly set all the necessary fields... */ sock_hold(sk); unix_peer(newsk) = sk; newsk->sk_state = TCP_ESTABLISHED; newsk->sk_type = sk->sk_type; newsk->sk_peercred.pid = task_tgid_vnr(current); current_euid_egid(&newsk->sk_peercred.uid, &newsk->sk_peercred.gid); newu = unix_sk(newsk); newsk->sk_sleep = &newu->peer_wait; otheru = unix_sk(other); /* copy address information from listening to new sock*/ if (otheru->addr) { atomic_inc(&otheru->addr->refcnt); newu->addr = otheru->addr; } if (otheru->dentry) { newu->dentry = dget(otheru->dentry); newu->mnt = mntget(otheru->mnt); } /* Set credentials */ sk->sk_peercred = other->sk_peercred; sock->state = SS_CONNECTED; sk->sk_state = TCP_ESTABLISHED; sock_hold(newsk); smp_mb__after_atomic_inc(); /* sock_hold() does an atomic_inc() */ unix_peer(sk) = newsk; unix_state_unlock(sk); /* take ten and and send info to listening sock */ spin_lock(&other->sk_receive_queue.lock); __skb_queue_tail(&other->sk_receive_queue, skb); spin_unlock(&other->sk_receive_queue.lock); unix_state_unlock(other); other->sk_data_ready(other, 0); sock_put(other); return 0; out_unlock: if (other) unix_state_unlock(other); out: kfree_skb(skb); if (newsk) unix_release_sock(newsk, 0); if (other) sock_put(other); return err; } static int unix_socketpair(struct socket *socka, struct socket *sockb) { struct sock *ska = socka->sk, *skb = sockb->sk; /* Join our sockets back to back */ sock_hold(ska); sock_hold(skb); unix_peer(ska) = skb; unix_peer(skb) = ska; ska->sk_peercred.pid = skb->sk_peercred.pid = task_tgid_vnr(current); current_euid_egid(&skb->sk_peercred.uid, &skb->sk_peercred.gid); ska->sk_peercred.uid = skb->sk_peercred.uid; ska->sk_peercred.gid = skb->sk_peercred.gid; if (ska->sk_type != SOCK_DGRAM) { ska->sk_state = TCP_ESTABLISHED; skb->sk_state = TCP_ESTABLISHED; socka->state = SS_CONNECTED; sockb->state = SS_CONNECTED; } return 0; } static int unix_accept(struct socket *sock, struct socket *newsock, int flags) { struct sock *sk = sock->sk; struct sock *tsk; struct sk_buff *skb; int err; err = -EOPNOTSUPP; if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET) goto out; err = -EINVAL; if (sk->sk_state != TCP_LISTEN) goto out; /* If socket state is TCP_LISTEN it cannot change (for now...), * so that no locks are necessary. */ skb = skb_recv_datagram(sk, 0, flags&O_NONBLOCK, &err); if (!skb) { /* This means receive shutdown. */ if (err == 0) err = -EINVAL; goto out; } tsk = skb->sk; skb_free_datagram(sk, skb); wake_up_interruptible(&unix_sk(sk)->peer_wait); /* attach accepted sock to socket */ unix_state_lock(tsk); newsock->state = SS_CONNECTED; sock_graft(tsk, newsock); unix_state_unlock(tsk); return 0; out: return err; } static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_len, int peer) { struct sock *sk = sock->sk; struct unix_sock *u; struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr; int err = 0; if (peer) { sk = unix_peer_get(sk); err = -ENOTCONN; if (!sk) goto out; err = 0; } else { sock_hold(sk); } u = unix_sk(sk); unix_state_lock(sk); if (!u->addr) { sunaddr->sun_family = AF_UNIX; sunaddr->sun_path[0] = 0; *uaddr_len = sizeof(short); } else { struct unix_address *addr = u->addr; *uaddr_len = addr->len; memcpy(sunaddr, addr->name, *uaddr_len); } unix_state_unlock(sk); sock_put(sk); out: return err; } static void unix_detach_fds(struct scm_cookie *scm, struct sk_buff *skb) { int i; scm->fp = UNIXCB(skb).fp; skb->destructor = sock_wfree; UNIXCB(skb).fp = NULL; for (i = scm->fp->count-1; i >= 0; i--) unix_notinflight(scm->fp->fp[i]); } static void unix_destruct_fds(struct sk_buff *skb) { struct scm_cookie scm; memset(&scm, 0, sizeof(scm)); unix_detach_fds(&scm, skb); /* Alas, it calls VFS */ /* So fscking what? fput() had been SMP-safe since the last Summer */ scm_destroy(&scm); sock_wfree(skb); } static int unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb) { int i; /* * Need to duplicate file references for the sake of garbage * collection. Otherwise a socket in the fps might become a * candidate for GC while the skb is not yet queued. */ UNIXCB(skb).fp = scm_fp_dup(scm->fp); if (!UNIXCB(skb).fp) return -ENOMEM; for (i = scm->fp->count-1; i >= 0; i--) unix_inflight(scm->fp->fp[i]); skb->destructor = unix_destruct_fds; return 0; } /* * Send AF_UNIX data. */ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; struct net *net = sock_net(sk); struct unix_sock *u = unix_sk(sk); struct sockaddr_un *sunaddr = msg->msg_name; struct sock *other = NULL; int namelen = 0; /* fake GCC */ int err; unsigned hash; struct sk_buff *skb; long timeo; struct scm_cookie tmp_scm; if (NULL == siocb->scm) siocb->scm = &tmp_scm; wait_for_unix_gc(); err = scm_send(sock, msg, siocb->scm); if (err < 0) return err; err = -EOPNOTSUPP; if (msg->msg_flags&MSG_OOB) goto out; if (msg->msg_namelen) { err = unix_mkname(sunaddr, msg->msg_namelen, &hash); if (err < 0) goto out; namelen = err; } else { sunaddr = NULL; err = -ENOTCONN; other = unix_peer_get(sk); if (!other) goto out; } if (test_bit(SOCK_PASSCRED, &sock->flags) && !u->addr && (err = unix_autobind(sock)) != 0) goto out; err = -EMSGSIZE; if (len > sk->sk_sndbuf - 32) goto out; skb = sock_alloc_send_skb(sk, len, msg->msg_flags&MSG_DONTWAIT, &err); if (skb == NULL) goto out; memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); if (siocb->scm->fp) { err = unix_attach_fds(siocb->scm, skb); if (err) goto out_free; } unix_get_secdata(siocb->scm, skb); skb_reset_transport_header(skb); err = memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len); if (err) goto out_free; timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); restart: if (!other) { err = -ECONNRESET; if (sunaddr == NULL) goto out_free; other = unix_find_other(net, sunaddr, namelen, sk->sk_type, hash, &err); if (other == NULL) goto out_free; } unix_state_lock(other); err = -EPERM; if (!unix_may_send(sk, other)) goto out_unlock; if (sock_flag(other, SOCK_DEAD)) { /* * Check with 1003.1g - what should * datagram error */ unix_state_unlock(other); sock_put(other); err = 0; unix_state_lock(sk); if (unix_peer(sk) == other) { unix_peer(sk) = NULL; unix_state_unlock(sk); unix_dgram_disconnected(sk, other); sock_put(other); err = -ECONNREFUSED; } else { unix_state_unlock(sk); } other = NULL; if (err) goto out_free; goto restart; } err = -EPIPE; if (other->sk_shutdown & RCV_SHUTDOWN) goto out_unlock; if (sk->sk_type != SOCK_SEQPACKET) { err = security_unix_may_send(sk->sk_socket, other->sk_socket); if (err) goto out_unlock; } if (unix_peer(other) != sk && unix_recvq_full(other)) { if (!timeo) { err = -EAGAIN; goto out_unlock; } timeo = unix_wait_for_peer(other, timeo); err = sock_intr_errno(timeo); if (signal_pending(current)) goto out_free; goto restart; } skb_queue_tail(&other->sk_receive_queue, skb); unix_state_unlock(other); other->sk_data_ready(other, len); sock_put(other); scm_destroy(siocb->scm); return len; out_unlock: unix_state_unlock(other); out_free: kfree_skb(skb); out: if (other) sock_put(other); scm_destroy(siocb->scm); return err; } static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, struct msghdr *msg, size_t len) { struct sock_iocb *siocb = kiocb_to_siocb(kiocb); struct sock *sk = sock->sk; struct sock *other = NULL; struct sockaddr_un *sunaddr = msg->msg_name; int err, size; struct sk_buff *skb; int sent = 0; struct scm_cookie tmp_scm; bool fds_sent = false; if (NULL == siocb->scm) siocb->scm = &tmp_scm; wait_for_unix_gc(); err = scm_send(sock, msg, siocb->scm); if (err < 0) return err; err = -EOPNOTSUPP; if (msg->msg_flags&MSG_OOB) goto out_err; if (msg->msg_namelen) { err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP; goto out_err; } else { sunaddr = NULL; err = -ENOTCONN; other = unix_peer(sk); if (!other) goto out_err; } if (sk->sk_shutdown & SEND_SHUTDOWN) goto pipe_err; while (sent < len) { /* * Optimisation for the fact that under 0.01% of X * messages typically need breaking up. */ size = len-sent; /* Keep two messages in the pipe so it schedules better */ if (size > ((sk->sk_sndbuf >> 1) - 64)) size = (sk->sk_sndbuf >> 1) - 64; if (size > SKB_MAX_ALLOC) size = SKB_MAX_ALLOC; /* * Grab a buffer */ skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err); if (skb == NULL) goto out_err; /* * If you pass two values to the sock_alloc_send_skb * it tries to grab the large buffer with GFP_NOFS * (which can fail easily), and if it fails grab the * fallback size buffer which is under a page and will * succeed. [Alan] */ size = min_t(int, size, skb_tailroom(skb)); memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); /* Only send the fds in the first buffer */ if (siocb->scm->fp && !fds_sent) { err = unix_attach_fds(siocb->scm, skb); if (err) { kfree_skb(skb); goto out_err; } fds_sent = true; } err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); if (err) { kfree_skb(skb); goto out_err; } unix_state_lock(other); if (sock_flag(other, SOCK_DEAD) || (other->sk_shutdown & RCV_SHUTDOWN)) goto pipe_err_free; skb_queue_tail(&other->sk_receive_queue, skb); unix_state_unlock(other); other->sk_data_ready(other, size); sent += size; } scm_destroy(siocb->scm); siocb->scm = NULL; return sent; pipe_err_free: unix_state_unlock(other); kfree_skb(skb); pipe_err: if (sent == 0 && !(msg->msg_flags&MSG_NOSIGNAL)) send_sig(SIGPIPE, current, 0); err = -EPIPE; out_err: scm_destroy(siocb->scm); siocb->scm = NULL; return sent ? : err; } static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock, struct msghdr *msg, size_t len) { int err; struct sock *sk = sock->sk; err = sock_error(sk); if (err) return err; if (sk->sk_state != TCP_ESTABLISHED) return -ENOTCONN; if (msg->msg_namelen) msg->msg_namelen = 0; return unix_dgram_sendmsg(kiocb, sock, msg, len); } static void unix_copy_addr(struct msghdr *msg, struct sock *sk) { struct unix_sock *u = unix_sk(sk); msg->msg_namelen = 0; if (u->addr) { msg->msg_namelen = u->addr->len; memcpy(msg->msg_name, u->addr->name, u->addr->len); } } static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t size, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(iocb); struct scm_cookie tmp_scm; struct sock *sk = sock->sk; struct unix_sock *u = unix_sk(sk); int noblock = flags & MSG_DONTWAIT; struct sk_buff *skb; int err; err = -EOPNOTSUPP; if (flags&MSG_OOB) goto out; msg->msg_namelen = 0; mutex_lock(&u->readlock); skb = skb_recv_datagram(sk, flags, noblock, &err); if (!skb) { unix_state_lock(sk); /* Signal EOF on disconnected non-blocking SEQPACKET socket. */ if (sk->sk_type == SOCK_SEQPACKET && err == -EAGAIN && (sk->sk_shutdown & RCV_SHUTDOWN)) err = 0; unix_state_unlock(sk); goto out_unlock; } wake_up_interruptible_sync(&u->peer_wait); if (msg->msg_name) unix_copy_addr(msg, skb->sk); if (size > skb->len) size = skb->len; else if (size < skb->len) msg->msg_flags |= MSG_TRUNC; err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, size); if (err) goto out_free; if (!siocb->scm) { siocb->scm = &tmp_scm; memset(&tmp_scm, 0, sizeof(tmp_scm)); } siocb->scm->creds = *UNIXCREDS(skb); unix_set_secdata(siocb->scm, skb); if (!(flags & MSG_PEEK)) { if (UNIXCB(skb).fp) unix_detach_fds(siocb->scm, skb); } else { /* It is questionable: on PEEK we could: - do not return fds - good, but too simple 8) - return fds, and do not return them on read (old strategy, apparently wrong) - clone fds (I chose it for now, it is the most universal solution) POSIX 1003.1g does not actually define this clearly at all. POSIX 1003.1g doesn't define a lot of things clearly however! */ if (UNIXCB(skb).fp) siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp); } err = size; scm_recv(sock, msg, siocb->scm, flags); out_free: skb_free_datagram(sk, skb); out_unlock: mutex_unlock(&u->readlock); out: return err; } /* * Sleep until data has arrive. But check for races.. */ static long unix_stream_data_wait(struct sock *sk, long timeo) { DEFINE_WAIT(wait); unix_state_lock(sk); for (;;) { prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); if (!skb_queue_empty(&sk->sk_receive_queue) || sk->sk_err || (sk->sk_shutdown & RCV_SHUTDOWN) || signal_pending(current) || !timeo) break; set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); unix_state_unlock(sk); timeo = schedule_timeout(timeo); unix_state_lock(sk); clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); } finish_wait(sk->sk_sleep, &wait); unix_state_unlock(sk); return timeo; } static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t size, int flags) { struct sock_iocb *siocb = kiocb_to_siocb(iocb); struct scm_cookie tmp_scm; struct sock *sk = sock->sk; struct unix_sock *u = unix_sk(sk); struct sockaddr_un *sunaddr = msg->msg_name; int copied = 0; int check_creds = 0; int target; int err = 0; long timeo; err = -EINVAL; if (sk->sk_state != TCP_ESTABLISHED) goto out; err = -EOPNOTSUPP; if (flags&MSG_OOB) goto out; target = sock_rcvlowat(sk, flags&MSG_WAITALL, size); timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT); msg->msg_namelen = 0; /* Lock the socket to prevent queue disordering * while sleeps in memcpy_tomsg */ if (!siocb->scm) { siocb->scm = &tmp_scm; memset(&tmp_scm, 0, sizeof(tmp_scm)); } mutex_lock(&u->readlock); do { int chunk; struct sk_buff *skb; unix_state_lock(sk); skb = skb_dequeue(&sk->sk_receive_queue); if (skb == NULL) { if (copied >= target) goto unlock; /* * POSIX 1003.1g mandates this order. */ err = sock_error(sk); if (err) goto unlock; if (sk->sk_shutdown & RCV_SHUTDOWN) goto unlock; unix_state_unlock(sk); err = -EAGAIN; if (!timeo) break; mutex_unlock(&u->readlock); timeo = unix_stream_data_wait(sk, timeo); if (signal_pending(current)) { err = sock_intr_errno(timeo); goto out; } mutex_lock(&u->readlock); continue; unlock: unix_state_unlock(sk); break; } unix_state_unlock(sk); if (check_creds) { /* Never glue messages from different writers */ if (memcmp(UNIXCREDS(skb), &siocb->scm->creds, sizeof(siocb->scm->creds)) != 0) { skb_queue_head(&sk->sk_receive_queue, skb); break; } } else { /* Copy credentials */ siocb->scm->creds = *UNIXCREDS(skb); check_creds = 1; } /* Copy address just once */ if (sunaddr) { unix_copy_addr(msg, skb->sk); sunaddr = NULL; } chunk = min_t(unsigned int, skb->len, size); if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) { skb_queue_head(&sk->sk_receive_queue, skb); if (copied == 0) copied = -EFAULT; break; } copied += chunk; size -= chunk; /* Mark read part of skb as used */ if (!(flags & MSG_PEEK)) { skb_pull(skb, chunk); if (UNIXCB(skb).fp) unix_detach_fds(siocb->scm, skb); /* put the skb back if we didn't use it up.. */ if (skb->len) { skb_queue_head(&sk->sk_receive_queue, skb); break; } kfree_skb(skb); if (siocb->scm->fp) break; } else { /* It is questionable, see note in unix_dgram_recvmsg. */ if (UNIXCB(skb).fp) siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp); /* put message back and return */ skb_queue_head(&sk->sk_receive_queue, skb); break; } } while (size); mutex_unlock(&u->readlock); scm_recv(sock, msg, siocb->scm, flags); out: return copied ? : err; } static int unix_shutdown(struct socket *sock, int mode) { struct sock *sk = sock->sk; struct sock *other; mode = (mode+1)&(RCV_SHUTDOWN|SEND_SHUTDOWN); if (mode) { unix_state_lock(sk); sk->sk_shutdown |= mode; other = unix_peer(sk); if (other) sock_hold(other); unix_state_unlock(sk); sk->sk_state_change(sk); if (other && (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET)) { int peer_mode = 0; if (mode&RCV_SHUTDOWN) peer_mode |= SEND_SHUTDOWN; if (mode&SEND_SHUTDOWN) peer_mode |= RCV_SHUTDOWN; unix_state_lock(other); other->sk_shutdown |= peer_mode; unix_state_unlock(other); other->sk_state_change(other); read_lock(&other->sk_callback_lock); if (peer_mode == SHUTDOWN_MASK) sk_wake_async(other, SOCK_WAKE_WAITD, POLL_HUP); else if (peer_mode & RCV_SHUTDOWN) sk_wake_async(other, SOCK_WAKE_WAITD, POLL_IN); read_unlock(&other->sk_callback_lock); } if (other) sock_put(other); } return 0; } static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { struct sock *sk = sock->sk; long amount = 0; int err; switch (cmd) { case SIOCOUTQ: amount = sk_wmem_alloc_get(sk); err = put_user(amount, (int __user *)arg); break; case SIOCINQ: { struct sk_buff *skb; if (sk->sk_state == TCP_LISTEN) { err = -EINVAL; break; } spin_lock(&sk->sk_receive_queue.lock); if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { skb_queue_walk(&sk->sk_receive_queue, skb) amount += skb->len; } else { skb = skb_peek(&sk->sk_receive_queue); if (skb) amount = skb->len; } spin_unlock(&sk->sk_receive_queue.lock); err = put_user(amount, (int __user *)arg); break; } default: err = -ENOIOCTLCMD; break; } return err; } static unsigned int unix_poll(struct file *file, struct socket *sock, poll_table *wait) { struct sock *sk = sock->sk; unsigned int mask; sock_poll_wait(file, sk->sk_sleep, wait); mask = 0; /* exceptional events? */ if (sk->sk_err) mask |= POLLERR; if (sk->sk_shutdown == SHUTDOWN_MASK) mask |= POLLHUP; if (sk->sk_shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP; /* readable? */ if (!skb_queue_empty(&sk->sk_receive_queue) || (sk->sk_shutdown & RCV_SHUTDOWN)) mask |= POLLIN | POLLRDNORM; /* Connection-based need to check for termination and startup */ if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) && sk->sk_state == TCP_CLOSE) mask |= POLLHUP; /* * we set writable also when the other side has shut down the * connection. This prevents stuck sockets. */ if (unix_writable(sk)) mask |= POLLOUT | POLLWRNORM | POLLWRBAND; return mask; } static unsigned int unix_dgram_poll(struct file *file, struct socket *sock, poll_table *wait) { struct sock *sk = sock->sk, *other; unsigned int mask, writable; sock_poll_wait(file, sk->sk_sleep, wait); mask = 0; /* exceptional events? */ if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) mask |= POLLERR; if (sk->sk_shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP; if (sk->sk_shutdown == SHUTDOWN_MASK) mask |= POLLHUP; /* readable? */ if (!skb_queue_empty(&sk->sk_receive_queue) || (sk->sk_shutdown & RCV_SHUTDOWN)) mask |= POLLIN | POLLRDNORM; /* Connection-based need to check for termination and startup */ if (sk->sk_type == SOCK_SEQPACKET) { if (sk->sk_state == TCP_CLOSE) mask |= POLLHUP; /* connection hasn't started yet? */ if (sk->sk_state == TCP_SYN_SENT) return mask; } /* writable? */ writable = unix_writable(sk); if (writable) { other = unix_peer_get(sk); if (other) { if (unix_peer(other) != sk) { sock_poll_wait(file, &unix_sk(other)->peer_wait, wait); if (unix_recvq_full(other)) writable = 0; } sock_put(other); } } if (writable) mask |= POLLOUT | POLLWRNORM | POLLWRBAND; else set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); return mask; } #ifdef CONFIG_PROC_FS static struct sock *first_unix_socket(int *i) { for (*i = 0; *i <= UNIX_HASH_SIZE; (*i)++) { if (!hlist_empty(&unix_socket_table[*i])) return __sk_head(&unix_socket_table[*i]); } return NULL; } static struct sock *next_unix_socket(int *i, struct sock *s) { struct sock *next = sk_next(s); /* More in this chain? */ if (next) return next; /* Look for next non-empty chain. */ for ((*i)++; *i <= UNIX_HASH_SIZE; (*i)++) { if (!hlist_empty(&unix_socket_table[*i])) return __sk_head(&unix_socket_table[*i]); } return NULL; } struct unix_iter_state { struct seq_net_private p; int i; }; static struct sock *unix_seq_idx(struct seq_file *seq, loff_t pos) { struct unix_iter_state *iter = seq->private; loff_t off = 0; struct sock *s; for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) { if (sock_net(s) != seq_file_net(seq)) continue; if (off == pos) return s; ++off; } return NULL; } static void *unix_seq_start(struct seq_file *seq, loff_t *pos) __acquires(unix_table_lock) { spin_lock(&unix_table_lock); return *pos ? unix_seq_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct unix_iter_state *iter = seq->private; struct sock *sk = v; ++*pos; if (v == SEQ_START_TOKEN) sk = first_unix_socket(&iter->i); else sk = next_unix_socket(&iter->i, sk); while (sk && (sock_net(sk) != seq_file_net(seq))) sk = next_unix_socket(&iter->i, sk); return sk; } static void unix_seq_stop(struct seq_file *seq, void *v) __releases(unix_table_lock) { spin_unlock(&unix_table_lock); } static int unix_seq_show(struct seq_file *seq, void *v) { if (v == SEQ_START_TOKEN) seq_puts(seq, "Num RefCount Protocol Flags Type St " "Inode Path\n"); else { struct sock *s = v; struct unix_sock *u = unix_sk(s); unix_state_lock(s); seq_printf(seq, "%p: %08X %08X %08X %04X %02X %5lu", s, atomic_read(&s->sk_refcnt), 0, s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0, s->sk_type, s->sk_socket ? (s->sk_state == TCP_ESTABLISHED ? SS_CONNECTED : SS_UNCONNECTED) : (s->sk_state == TCP_ESTABLISHED ? SS_CONNECTING : SS_DISCONNECTING), sock_i_ino(s)); if (u->addr) { int i, len; seq_putc(seq, ' '); i = 0; len = u->addr->len - sizeof(short); if (!UNIX_ABSTRACT(s)) len--; else { seq_putc(seq, '@'); i++; } for ( ; i < len; i++) seq_putc(seq, u->addr->name->sun_path[i]); } unix_state_unlock(s); seq_putc(seq, '\n'); } return 0; } static const struct seq_operations unix_seq_ops = { .start = unix_seq_start, .next = unix_seq_next, .stop = unix_seq_stop, .show = unix_seq_show, }; static int unix_seq_open(struct inode *inode, struct file *file) { return seq_open_net(inode, file, &unix_seq_ops, sizeof(struct unix_iter_state)); } static const struct file_operations unix_seq_fops = { .owner = THIS_MODULE, .open = unix_seq_open, .read = seq_read, .llseek = seq_lseek, .release = seq_release_net, }; #endif static struct net_proto_family unix_family_ops = { .family = PF_UNIX, .create = unix_create, .owner = THIS_MODULE, }; static int unix_net_init(struct net *net) { int error = -ENOMEM; net->unx.sysctl_max_dgram_qlen = 10; if (unix_sysctl_register(net)) goto out; #ifdef CONFIG_PROC_FS if (!proc_net_fops_create(net, "unix", 0, &unix_seq_fops)) { unix_sysctl_unregister(net); goto out; } #endif error = 0; out: return error; } static void unix_net_exit(struct net *net) { unix_sysctl_unregister(net); proc_net_remove(net, "unix"); } static struct pernet_operations unix_net_ops = { .init = unix_net_init, .exit = unix_net_exit, }; static int __init af_unix_init(void) { int rc = -1; struct sk_buff *dummy_skb; BUILD_BUG_ON(sizeof(struct unix_skb_parms) > sizeof(dummy_skb->cb)); rc = proto_register(&unix_proto, 1); if (rc != 0) { printk(KERN_CRIT "%s: Cannot create unix_sock SLAB cache!\n", __func__); goto out; } sock_register(&unix_family_ops); register_pernet_subsys(&unix_net_ops); out: return rc; } static void __exit af_unix_exit(void) { sock_unregister(PF_UNIX); proto_unregister(&unix_proto); unregister_pernet_subsys(&unix_net_ops); } /* Earlier than device_initcall() so that other drivers invoking request_module() don't end up in a loop when modprobe tries to use a UNIX socket. But later than subsys_initcall() because we depend on stuff initialised there */ fs_initcall(af_unix_init); module_exit(af_unix_exit); MODULE_LICENSE("GPL"); MODULE_ALIAS_NETPROTO(PF_UNIX); eut!H'nfkƢKN鼢hO[xdVdAYP`"]slED ԝt`8>BF1y{K3L84C=q}.c7ؖXaޣ rW^6%mJm"1hy Y=h3l>6 Kn|"BY()I`FP0k $%Pn;ro,wq0=TdlŽ^]drfLq"X/a6h2IU_L@=_F;;$Fו"U-/}sƗ\V[:F&Y/:̛./FR d_`tN/l3jKwd2<^ oOCcih0ﶊɤ\=[!*ƹ[GY{r4U)$} e[U\qEg8\S"KW~,ְ[jbjns!9tӊ[6RZH|p%#+y1"\(F*hc}wK7{@ڳև`)oBU,mz7 WP0x(f͜BWA"d \̚7U@βz`mMPz|h FFl;K.)Ԍ&#Z4dksmXKFQ" 3j >ߙ«@9JE}Z?̪\_E:|L\[Emx z(~W!6jlŢ _Fޓ쇵ܣ YIY (p`L!KfIWY @Ju3 *DH=Zj!rTmNZW n_Mr~DHiGsgăcP>Q0NXʙ}RBY~AEw[B 1UkY QzzB%MrqC"o2 ~RhI_]RnG(Hgƞ#؍:uxSdV.s jQ*uzdft#| \ٞzVu+rt-$Z>CҘ*>ۆӴ%ĵ$(vY"}}\V3E< +@C(,ke}e#50F<6㑆ʭ0= %w^MWiZ"[~Qrr_j1?Yfy4Mk1R2jQ+m!|&raz+ˇ)adRmEp8 Fiwvqxu!;+nB-]{8- zG6'ӛ,uCEϟ( [C2j@llK-4Z' 2_mLJ“ 3㿯7bp^GimtWWޢ|HMb )]!RO RɉT g}Huè#1`T9a6plbDŹO ͠U0-|eƌZݶ;O[qP^CtCjH<;ϤQ3tf)la{Έ3iQD0Ί}F )鬹hMw;Z4kHq7hj\Z_R81՜jrappAy=%*&&*/*ϸtOCPnF|K 'ҐDB#C }Ɋ%sc9>Ȫ:_4BbU^f!e?x21qYE`|u>5r3SuAL 5kb*W_E+݂ )kTÅدa>mB(7%) Oֲ{t 3$;ۿP&lV-`'vq0lh?9|I{Y2 ´]w%f:W=ZSbz!ΌO@ADO TeC oT+aIv\j$L',$>z/ji[.L++ L191Ӭ!@ͨXoBIb#-;b[wl+#,rexdɵ2jtM  *пDDɞhIBo `h$g1m Е(PK%;Y`UDy@eT!-_h[>S9~6:}:79| gj(cQOd#EHnvc[N؍BeŪ?!']n,gBNGtB55f߭Rf0hǥLoB*'Vm4;~1[ zb$jVAJ ֍plӃJ+ ׍PiMuݑ$n"Өk1vGπi@;IG8U_sT,QE~gY̩Rk_i'%J l8$aEz*L?X[ %[cJ́#?6?`$#)'T>MG&Nu9m&!5J|߳6"cQE ,K凩0]`>C[OT~&NY[-tAW kZTʥ0V뷌`V\l(uvK+uT}8B~H8n vV'}s}т>}xG*4ECz(R'F$j{ '2@|Vr\-AF֊I}yF{g8w` ^2QB?8ج^|' 1"Fh'H3]y(/-qҝ &D7#EIEx~qQ&k!m|YRzNQ??$cSeL`2Xea68z٤,,H2Hd*uRa8X.*"xbY' Q84K[F2RI 0X,1#~R?*B^-"}Z܊[6wد#5 3@CU~e9C DOkarGL"CZvn^R;Bȋe!y:<*#A ^ixͭ UࢥKY:O=E3fxH m~E(.7D k6Ѓn`4u] M<6O0@pO P7nGǑXO>.a2ˉW{OA{~QeM=I jAD0T[m5q 0u{6KL%o%Vۉ#_ fM)0ਮ6t`D$y5^H؜kHZh=1zYB"r>sxS_ 9*I{̭OWml,!t-E~{~3 ~v߇0Tn?W`܋I)).&LlG99^f7tA16!5k`|ANN~bj!kv},5"z黏2t+ ɄseU}I9S) YM,СIweN.u)1h6n[i0(itG2_;݆falPrlہY*rx8 : tsf(9l؂Ȯ2vmE @X*r>bKgQ)Ch]ch%,Sio4z¬RP3,{%fԘ 7P0zΪjUObx# %4>_ RVyΒZK h`1pɟcJx"ZQlћMeobO5 T˸ƽ5kUhGx~I;hPս"*X@6\DeVLflunye (ް*~oOz=N(Tg+ ҼqRJ~M㵈;"q_|5.GImlةrg pԿuEX9NqDevF%Glߣtמ5no8Cprz{~ 6D ,H3սdExܚpAJ0n7j+vY?3'1!abUFA"glx(h1keBҸ)L i&rNGw,7Cв5U;3F,1AlBlX B 0Y'>P5쉴Usݺx&惁v b^uhKPݙ冷KaVxd[봕:C(0&t}%aM+SwdB*aR@kK ӸBMxdJ젖4؍7SNcn,æbvNLC71%ng׍erGE#H/~@pΥ5)"R&0Ae翕pB\~FSكq9Z0㶊1R'a5^^v:ǻĀbG:i 3p7M .Qz'(Q^Jkr){ÈTɞqRr$6*회WVdwc*?Burr\*Rxb)(I/TsYۚPQpǐrI,~ qbpS~c\ VQJ2Fɀ*?M0W,w:kqqѬp''T y;yK3s¿!GY'-yKaM v(?c%~Ԉ v,*uN!(87/꼈0dm}Ȩhȉo^Ij^Kf V$Χa'ʑ9B{Zo0asGɩ++B5jd̓p.]R:V]bpޱD2זh>lu\,Jp7˒cw_hJ\7VBE4\p{v)k@{ M4xŤٹa5xÈu$yl^DZ3IxjWw6g+jjFm 47C-;4[D|Py;qM)J6q#Ol-Ԭ-GZe79|'Z7r[ա{$Ю!Mը!4ew*IP߸8[$wxI;1`?_4%㜑0@*GoM+p+`m yFg9U_@͸=Zc/E-BOmTi~3 '|Q/3$ -$Q,[6Z KLv^#^)aE>{Mr4@5AGE,&m#}m;U4 ;]^. 9ў`?$e5!}FNo}w_4 ?]sR>kTVItlg vt^6ī;KN EnV-@gJ( frGg襫^r$aY91fAt Pio;=Z\xŽDTƔ^W6K BmMfmG@ArsҊ AgzrdD"}l9.%K (.9daBݱt^S>G}BI+T#z̎0t'f!~55.a] -u^4XbϪh + `N~S"w a-U1C%?Yq_^_?@\L6mfBY`{UJlTlGgb|O,qSBr( /Ha9A,5@~ E!wh))]h10 61rttna_#WkŘ^M)#@\$-!~b>߄ 74}xV;o50FCSR(.VR]"-naep+|_Pw],6KnNaCd e9,cOj"!<"n' r8\D+r| X"){y8&Y;zwMKת d=eHnK;f?p1JЫ'jU!J1d8y=: =.#"Ok}f+yAP8|@N;/ va 4bnœl!)0x2<%'pS8gT[9D;vB 6JeF6#a_`%`?zM#jpljק2~i< wj1w_Hݿ3q!zS0Pb܏̀)h,4G0]%%+Qތ~;q6[wԽ] i1q1{TB?KH?Y4?0U]Sv732:zOtg,{$?bAu9A .ݍޣ4 my2αȵ)!4 UP(BjIc^!Lt'f"ש丿3Wΰ?&IBSxAКMymڬѡ3Kk@273ݪZ| 4mTeʤ=Sp]T9+] )bٻ$ L8TouYZ -CY'`4v/۫yߪ2F4& )&[̝r/_WX_zo_ ohҮo^ 9KCvZF2YQ [_3UNiLk,.~* {e{\nx^~ UK"̑/v6ueDү>6hC0dQ+򇽃Mij G4Jx׌ h`dT) ~Z#='BQu-lC J*@n?2m7OrTІ 05r0 (lDGݟ^RL7ESt.Pkz\O`k"q59 Yq/67 5|FJ R2b^]KN/h(>&=d\G丂)[ N /r#)ǜ[kSbsϿ]`QK? L0m9ݫȼZC~eLo sρ2͗2 ]N}5Zm z!hG;'@Ahs@~yɡ -Au:&N$Wʡt>qnV2v g7LH\Z<8!KqZ `3X̗»< cXVcVh%ql.{<~? )fqׄR]%ķ@QƟI`3E>*o =&>Q}*U ZPI+]bg_*2CkK jKscoi ,򲕾=ґn'֞Z>b̀Uӧ嗆<,SZh]28Z+ V98*}j)bm g!gKyԀaZWNOG>wAː,5tFkCZk-dj@k͌jUlMA&YΙ~@ť1 u4v}9خ+r.vFhK.b,omQrJ@ 9J1~WyF[` [Ζcɕw44LR>Y`:AbHWr~Ѱ"%MD.rL. d s(w,‹Gd|ϊh!Le~#b fhH 2{ m0Ҏ@[KoZc7= |0Wzhl+l0ͅ7'lKP t뜞*GovUHeK;Bv0F*vmITgiQĬdh*oXe8m4C!a@dTmd 9f[#O*.UN`TᬢM'@zf ,RCZsqx`Q쀼yZ`P01Jl%!W {' Y00Z5#d5s܆‘rN)0mT:Yc}N Vi=Y'pX$ E`谙 K1N$J QZ&t#Ty9!;ݠ A;CX%k$}$aЉJ=֚3Ŏa/23wn݁3xRB2ܙ&,Q0e2XI&>b#c Äg8@/` LD.T>qNYOY=y|u=E:|.qYX+T-2s+xJX0,eb`ķm4!>xU|4dB?kJ_YlHa#*^8tejKJx_#/blךeÞOhrGri vFuGoV9gב_XYqt(J,ek]soM|#6-;$p mV `a8e( il.\鲛%tlYtgkAllSτQ2Ɠ8GPiK lX( uטrj~ zOUZb;׬[uJ.9͋hkwO{QWΣЌXC_-B'ڀ aǫTBIRgM_g*Yv0cY$I_8kT 53?Cj %c|c0pHX8 PK ꔡ'F_];|<}Թޣ-J#Ǔ" BѣsZx8Xv.2PW8'u9$FoƪQ:t">kvEm[A.bCY2z9fT=ۆv_i0P|zZ*#ٗ-֖#?" N1< OjI~Ѣu#f}Q~"tN܈K윶:!ME2߉U0W#< E18F͉٨6FP&NyhKޞ]$yϡER<:DŽ~SͩPKʳ դ„)ݑ(><g r-HֆBG0) ׽XI(țt 5WI'.eG r$ 7A\ 7,JZ jc-2&f崖xTí}sڢH)XoA x 5̙ h \յn[ҡ͗#b@E:S= ޓ8'2u՗/&%w5#ϸ"E/:.і7׿^ Jj:ce'i֎we( J >NVAGy"hLD̤NE'5ii&"EGFZ4}as`l-!t]211ŷ[-;;i;ifG,P{L3¢P,95BוS71@i4B¦~WߎÝ@7a/-ۂ9"xg N9$W{KRUtFyf.[1\k8ǮM^12l.ѪhU9@0qE$~x41jd(t_,"SA&SxRzw-SlV8 j?s(AˏHu`9C ջ{MejrH~Ngw_zz-߾U_͋>.7qM I柶*!!梚k8 qChMNDiQ3TFm|MxF@U:=y\#DсHỴ̂J} Q+dxLN˼ Hmqw75}YӘBxN \h@{3fڽdGu$}b!F=k$Q@/Ni+x*KKьE E2 J%y/9-Mgg]zxZ2 2Ko̖cea?ϩ;vVU]964u Qr9I&:36[E.pHA^YCp@U-rxܑ"B_:[$( fMd9ڒD^>wJhDPVzlq؀<3q;pԺ2=Q_x@Ѻn&d OoӰe hڗN~J< Gr^F,G"a_Unfgz?t mIMF.ޑ4,u*P r77er>g0% OFH3-l6ᯞQa%4T[)⏖d;lijG1@7IA8I, P9-i>hRNl8O.fn{Y(o$#}Jl&%Y3r+P J/ zv.ƒ$] {Q@P%]|2 8@!Kɑ1!ze]]HK5(Y):b1,V" 56cmce!J; [ !^QXЊG44G$v}c8ɃHvyS9rr;($:,_|.??F_8J!dv}3E {!!hCc$janIE@@tnQ0q{kk_.+PhRUCr_!=#.԰ǯ 3 L?D|R 4U-[SB:M=A`2UOitE uqUr ZbP'yuY&%AlvI%0UhG vpL9m,;xڟ}`$Ϭ Y fAw X j&y=<HAk>e% d_pe[/:+y!$nVaX VܹZlAx rUVsxq@CϘ0.Riw8%^n[>ɽ 9m؂iͿiwn#'22pSV: M` v8I z}ID@ ۛj4'ߘjq.QϠXR_}5Pqu.RvgH`Z 7A#0I(_.c9Zw '1^qgaB?oi@S4{Ntp|GnKɕJ/s k;s)?dQ[^6O5W }N ̅9%Jw~1XOsBPݫY^ok(3qO'*^oq@*e.kdSB^yNbwPr0Oδ,֔Ge'e,Yϡ -|Lus6CeDy|\$:C9mBz).8&ڱR8t;3 8=90)w2K2A]>F̮ʌ^S,@QtOų3ۦ8ܜ|?-'KZt(+ PYZ|˒?=Moja׾w*duO]{hЧ1[r)6NU5qBU1$0{ mL[vN S@Ḙ&Kս*?'1w$U4j_Y]f7*$^>^"k({wu#0kX&e׆| 4s[a)^9iHҸN)NౖwT&b"u< N!`Pz>[gxt*:q>L>o[-:[=j@݉B-hm-}GY :CAf[^\WV0A-mZ󍯜z<-2bnH.SaH D^B?{ KzEV5VJyd/DŽ A.BsP5QN!`b4VXu,=@Pϝ3Gf~".yAрy,ًj &Cr$?1VKw#tP; =k? I?+e8>sh}l㶯fN~z4_}^L[*JIx86^~S*cq2 ˆZΟòVA:@44`ѫE$].<9Z[pjggcxQniDϓWʩi4 v;\AmZ{DY} S3\R6 kz'= #qGDb 4iXB.K1Љn/`n ! !\43Q^>Uݼ?dzG;R("vukC(=r,]x86T& lftxv2+.'&:EU B:›'h9FB띋ZB.p 4qC+d8F!> %E]4i0.0FtQMG! qkhDiMv!Lzi<XGbrH_31t6BREl},R'5Tk@rcQAR]>;nm"&$ej$+ZDSajmfHnƆ"5^dAGRMA-thM Dlp%`eb,lx|oLۃ'iNMyxp5IJϴ6ca ~9U4wQ.9Ej"WLí iO}̺ bU|4ڙES୅I[{7 ?=e҆5VE5ԑO/\IjCP#P(wtNSn:$v!{E+kMzrQ2\:teܒɡsǬ;:%XRL`]B |Cʧr.ݐ=`8@*-gh V-^̒.pUV/c-8,Rx쥅m' a-ah-=襉R=+OeJiY:K66)ӄL5 )5?;ZңpƭIOI hb;կu'#Xyˮ v}u ®G*[xR h W۪2ԅ0%_$ܳDwEaah~nvє5ɚu{VɆwk&>*i/YM>Eʹ\, M3Y++=Q/įudj$ډ_ ڸ댆|Ȟ& r&4ȴ #M$t,cGy&dqLՏV EK[.hY*k4{ ij6.پ+e #2NL3d[̋~3 C:KySg3Y\㓑_DC(7|Umπ5WQE^kؼCbgSۿ'jdeЌfF3SЗu%H(iwE~RzoLx%6*j*Rʯr[.sjZU$<2 U^'9DN23Q0IL)^y Lyi>On3 F~˂ 0F hhyݭFsT<؈TFxZƬv7I%k;lU?8 (ɦVG>$oFl#@:CŽUU0UeL鋨B%C)E%,kxɛcgN'\7/#QÜ}CNuP~7bF@rX[$/ĢJyjJgM"ᗩfݞ4BLTtU:b#1TCl f|LydC}|xqޘcqӑ9Z1,24)^U7_fP'|RB)Zk7@D%. I"+$*LjF`$) ?`ujc&Й+[#uOwe,ѩl8zJM=12TN-gZ<<-QG`:P\ҿAH1-tRŰU^wY6yiacaJөj9J&лqW6m'OҜsd/W|]{fau{ɄU岩;EaȈh$":e]?A0?'#Y vM:qGJcR J]#7 U],JW|>}ۧG9 ;b|3烐Jxk!<P;Ze=gJz!KrVFw"?5%&:)D+ 'M(6q\H>1RyYz~SVlQ8^@^P-}_;Lmtl@ 1Z~]Hڭ7ƅJJRWŦ Y)tYMVZWoEVt%`h 3/c<ŲhLְ86sE#uPBvOUE!<& =^'f1A.V[bXw2PX[P@N&Ty8wGJ43A@"f@j8Vx(W^1jNѸ-;HKgV0@Dgp%h ݸf翍4ivH,?9z8/CHFdx7o'?0w|}ٟ][Z|ph>QIg%ʂNGE_~T`PQacJ`lsC1b%wOw~H!S phKR{  >9.zpyrzV/SQ!;[&H1CDd1ɨ Z)ƌ` R:.UFBOcHe6:(6" L}L>VƦIP4\:Av6^j_ru= v;dfzAF%tG7>xkV BBmK`. xMDk;UE85Ao+~Aa2C1k46MK&^csfe.C , ۑkk c4}W$ ("[hIndHwOСxW<ϸ/i붚E_GE>vc' 9GuEI߲:PogjXɗ.3TPI [#dn45v~AZgrpa P͆U^)%֒%3woT'Gc)y?ORl0 \gD!4a ˞l,̣;J\V*O}Mא>ٹ~`W}uexcӠ35oõdr5v_[sܲ?) H#Nb]s #_YQf ;&vo) T_;'&a 9[W9Y9`^OJ[eaf:Uy"pw2Ke"vd*&Pw:`2?L`p;p6< Iqi t`b; 6}kZPj\G}v8]㇘BNa&1 N6רPù0¼=R_iN͝^s:6}ŪdY?T#Ѭ*SR.A[ZTZx!:x91%vߝ>,F70Dt1Oi: 3ewGɄ!% `/# uzM yX,2Lԟkg>@fyGJ^Үi_Z$,I$, 7_, iᓴ(EMS/<~QrKbKakk\ᄽ4i)Fo51 ~f3!wC1FtvHCkdhM-$7fVNj>4t@e7ʷOggOǷR |{]nwm<˚F;oh7 .%3R= 3D=¬@.b@o d+8yx6s3aq146Hiz9_ģ}C'Zy@\mcyNB_˲~ ޟVI-}ٝ=|8UuYU9+;~*u],BA)ᵂ$إn$@d|婵mryW@)22X e]iI>!OAQ{6/6TDU y%1T-'jT1N^rI\x_p@g9Y<ܧCway׎`TU]w^‘a:fd}hUJDsCN6G @L[/[Jkh) 5_9ˬ3mqQqv{Xߕr{g2ntMvb並6d/ }ذ`\]hH}.WRԜIXDPC҂n[)f\Rw?O!0:F떽g <;~Euض4%+c(bS$Ws>=oP!$ F9L E^~o0"qqhYk!`/YZÑ9d/F \X]m:D,MZ[h53I<+FVP e+PB܉r (:FeҧGO.AfdLE|-QnEhi 'uTk[ҐdYVf `{#4oRc6ǗTߍf")NC:J3df񻝓f8bdi~sOV.t=wB<ބSN+ۊ0U^~- aXt4h ژ{=Ŷ9@ldjs+9QM{[^=zR&K0ĠUhݻgwPĶ?Yψވz\^>5!p J^ mi(iGrЯl, NAZz ꃋ`p3K|d'h3'^Rt1jםqhcsUUqnRuD;rEƩy[3S@p;;½}>k)ui2sju65& %kNc1׆ʾakmR!=FP Ǹ6y;e!5RߣACFXoe Sg[?w8wd11α5P8¸A@zpdwv0#Mo#DCĶiST/i;kPk<*2lTܗY2M{&5ң9x~!v93AZ}XBH6[0 L2 F ץzmɳ ر̊K`ǧs^{n2 ԙB#PWm;[#i]_qi:ҩ -Š Ctl+j8/ceS1 )]4r}6X_hdb?htܝҘ]}o7D-uB]Uu&?,s U *A m3w_p92ksб?N*d!#ZT@82?/5sI1蠖r7 !lY5VaSi@T#[U) FG1}@r&tC>v,! 揫!%;~{ dl5)垾ZW=h7#'_õ4qO&٭F̣P=*Dʜ?:Qپgra}ոL?bJSA6} pRS@ T<[\Mw`FSʷ i(6N 82}-!AUi BҨ{ .OLE eg"U(L7qp@NpבmAM1>yPDjZ=B>yÓ~^Oď6PE%6 ==Ԓ*%<{;ǭ9ҍ^d)#$Wl՚J/*L{@HrZ> `dY+w-CQ\H V4JQz _r5 e!Dc>U1Lj'ij\h= 'ft夋{&o{ĺRrٟ`!a60)$jЖKv47l hws ȵXEʽ&HQ~^DiHIAՃihbUTԈ>>T)F{V0aExf6u68&jRrh.y';@7^O JzStwQG ?iy.6̎.숚 d3U8iLV>ʐ[WtWŶzfX7Ճa'O |_%HC(#,iOG ]c&u4>)Sz9<5ɦ/ "_tH\"U\(p^Vb6+t8JH=@$m\ª6u|H5F;.UtV7%*҈VHDbJ|;VcF䛮 u-bMjIr"3 <\CJC+7TM5_nUǻMLhpGSly^a7 "We$[!@*miH=lc]B]r1}M%{kێϜXg/W: `-vX>BKQP)` y Ҹi-}w ,Վ;ʵ];^ǎwqI9DAao=~*!(k# 5\ЩO/"„(Ҳ-[oR(\y n|bJt靻|.pm #wSExZ/oа)N - LX?e+8w/_A XkƒF0&BwECwcBӨ[$uK ~D7<2 t2fϯF6%UT@fQJ1,VtNv[7صz2/"~4 8 h}_0`?0lu ?Mj:l⠇D4.EȚnJ( vtLO#)[:SY-g+Y3jBL:Nt7PWs֚=!”_B.F(F®ɝD3&i@;(+20~;\V&E內@ݯ$HP֒kFā]2h}s1p̷ .y>ǪەgyIoVMtV&*E2s#&k98lnĬm`:Q}\K$7<'@al^ Ԏ~@Vw0f{z}'= 1[jMi MŠ+9ЬG80#!gwjoΕ!XpO@A6>ԟb..f@KF?{Ħs^ۈ <j.-:M6z_HH}>jBTW-G_,o3 yᵑnshDT5\eF7Ȟhp"Bs5UdN>9lA<'"ċClbpLg',]15!)͖'黎NIo /v$>\a&bS,q[CH:mbZՌz*UH{MD?o*͞`h0F՜ !K;4"4m{,M?xU=K!#K1ӬջK*wj`48i"i&' W?pWϫ. +lH1V';3 h+i@GZ} -wz =[;o>~ ^I_gh0RbVRk-&:ĉ8©.9h0\йM[Ś;i479̼+?hד'*qwHbHTFk'Y/ޏwujz/euX-+/C+}Dy?I1J$Q̠:z~+1^3M,?e̯-^#{P1E.tչR^*RrpC\TR$nʦab2;HyR٧A$Φf>+=Np!Dr2Ptӳ)fӱ?8/2H\F2K h7F܃(qk&vAMyͧjDА%?toEԛ-Ūmpo(\r)WovZacboǧ C\VGT{_\T$pz~ߴh!^mWőyF&2yp\0 4yEh59p~6-[ Xvʜ b8]P #mTG7m?bڙ:#F+Om~?@T*k [*zLdYN^Bwϊ]zi]ݎ5ΘQT^/4,TyTy=,b"qI|b07$&"_Bisr{ )9P+mas7{a4-쓗I@ stdvျlfaͅPY rc(m'<"!\=x)11$ 4P"iss/>Jɯ*(a-*Fp,4~N>o5Һ7H6(]*RjOD}]1I`T<|⅓k?Oے~thdzhφe4G?iՍ4x:eĢ{uym\,/ׇ\1(kyПq>]IӧRMXF\s;!LSJ'lihu*ګI,XG(AY23^_N]  UŵBw0IQN?7߈dǤ_kxuwF1JQx(gl7͆ (I11kZ&_Iˇ=ȇS7\3 2gQɷ&dc^_ 31p11;@Ϯ܇ODG[jaWgmf&x< `*|L93j˟v,Hc}!t'YxuG _vt붫SIHcu WpO/wkY'xQ sNI0se* T}JJ}7hIf.q)M YWl1vN]2岥Gpt;xvwq<m}P}۾Ndnanho ZD-XW:T(frAzƞ jG-1}6h-:|G&`f*ڹ|DA:pYU&Ccwsl&Y¸s:jT KhQq)I_Ewt_6wqB ?LNdҳuk;&j)A_I"d_ R)~/Ntlc0^}-fk1])'|Fo[CKsS Q7ЊA, șKޖ:H qaWAFXm3[#YbV]: =$C1ӈ}lM%gn..Ρ_%dWeO$CS~D6ǫ]ϰڜNϷg06F lgH7`XOF DCлNs0zF dC z [6.wT&QpzB 5lKƉIDB{fu [RVZ<.ެݷ=LÃ,Z@bP.i&P)E졤ȃ"sy7R ʿ̘'di%!m4̫;bTɂ 0XM"̮7)Ij|~c,k~ަI#;&:7{! 5S実γbpAzpՂHo2yL4_~ ٿKE Rs?/\X:̸}/Ƿeé~Rj\~L9ƈa0q}+=x9&cE_J)wTܩHgrpG[?svuKeOPDE$б$[[:+a?Xl zw$qi3.kal6ir6xEfĹHS<V \yRz34d FC|N4b^xpl\[5m U?FP. H`j!g4Ql0ccSdgL,)hXQT\3сfr##X{j'X|yYP_CU#psC]--,$'/J쀠EB]1?K^!+אU$r7ҫ )OL0ͺ֘ Q+fȈaF)?b(g1Qdc5g΂r3c>a_IA'1Awéyz5) b;^G?e5ҳv11 0 &X>']&h8lTgIçF=e)}Qˠ%nctqۤS-zL,ki[7E0lrhw yR'#F]FЃvTY#["iA$˃]+\0))[JhW6{@b A;d7m550+ m9x[虜pv*Ղ2|{l_yT:)Kb4>&vik3sCӀ`<{?<_qZ鰂;iѯ?$ ٯYHfm0-E6ODz!PYQ -> ĬRm߉c e3^~|, CoP'džc Op`BP7rx:+e)HP7xM\;Usf8x*gR<1pxMT*}dJ_UC Y7=H#+ !2pɈ5Ý &{7@]|Qb0VW.QUH($He?pl^a7)9p<YwSk2q#BjQja +qeD'0ԚxNޕR dz&N㚔NWt$l#;-{ 6푤&vahWzl }!ex H 1~{*77qA5C+:> )p?ModK_EnbK ,Q祆2/>ub?_] 9 KbuiALˆxgꛯv ?%9B2uRwWcFS׎{WWQ+#jҖ gد]cXdl8~5: 6AUKsFIMV{NǣI d 0HZρSciqOV C-ˠwljA*,"$N7(Vm@5fܙ6{[wsO , 'Ni(9&>K=K ׹~(|{1 ; EBb:m J)RFKjᐹiTچ,TF uG "+<˞n9ٛ3A,hFuT鮧050z'ΚχeW$jӔݓڠ5Agإ96'9*̓TCr6?ģ+rݪ7x^($ehIqprP $ wBC΃rvJt#,+QӶKD>Aqv9$@m_$rR%ʭGR.>f%=бx.5 \; 9G%J{.ZuJd3^a=| npnw)8Jk$Gga,EiƄ]Ӝqf1[9h1d~q)FU7t ئ(Pwn$o!N%`4KvJ<If1,]S9kqI XH&:[`)YU9Mp8A;a?#gT]QKيp=ߋ[@^n@%. _9S7 訌 &0!$ ?' 8: kfI) :]u-9Kk8ROv I&)Ղh!eF%y0~BH|b +ΟuB|!L~Sd~On;*6q8CKyCX(А"ƑsHrwrxo8E顖iLcO:CB9XG22k5n*㬉~%1 m%U:K/yHD"}#ԉ-%AͿv3 m9XEOD0ą5`6ìh`݉O L/c;U"Mv`H߅LٙCi2+Q0V94qLhxXA) i݌y-VI lj]5$]}tx%K%̧EA?ʔ?>8 S$=nKndE)6KX@)Qh4/>bBBMSM+{Cuhb2ؐ^3rZ64۶0:x/ʬSMP,+CѴa`#.Cqi ťLJRWGD N,5o+gXyoǬηyюpBƈ? qY'[:lRV]d;:Vߖ={)JXߏC]Fz@Iٳn U:_6.q2'e)7I5-װ#k"[YF1oIq Ĩ#-ڃ[xZ4w*Hߢn2(lK 1>hvwT;P/:c<7^qn8@1 W!Axdm|CDm 55 <̃O09KF#?dsG2D$$z o)[ش }#e(GԸHp1o'XAj{{>%\%5#F+{ # zQߞ* vܶ̍F> Q;~QO~_S}]\4{\W=m~9xẼ&x0Y`\ό/m4`W!4G^;Gֽ9̀hQ&> /ݑ0+BF2F^/W[ޫϥ@ C bCլ+0o;8> r x.C`܃%BI%v &1Տv1z!d^tLRmqj1WC!x3I;70ʜ*bf.,#&lm4x ]OZI2zտub/g[1D4C+KvWש)QZkvV Ĺ w v P] y3R?HX)DOG.R][^8@ù(x \t57¸}" x]mxWΤ,TKsFC{"|YG|E֦7hXjvAn}v C&/͵{㝪09Uĩ:u?sn~^IN.tgHGAszy' D %]Ilӊ$j!oo=X{aUxt=-Ɲ׍6bՒ}X7h /J'* k?^P-ԚpD!N&L6\ ȏ$R{yrw8 E ߽&–$3$g.UA*eơ?1:FWla|DR"ϴ?N$8.o<_CA`';\&8rŸ=5 %or_oKn\뻭` mh#6 iOa"k6ѫ}Y͈QK фVVG")j +ʬbP~); D}&x3>PϧH @W .>HGWfl8t{nZ߂x# {+ōP%4/xک/{ 7qRyC4 2)\pk1 ǵ$!*ء hjQMQ4M\ Qq|2Dr ѽ,X kZBF}S1EWYL[c`>#J~RpO;Fa_BY><.\lk/FjJmY zesy{\ e{C=HN Jo:;K؀nmb$u+ צScGN:(V 8܌ peh~0W"5t8>hzDQ?~ ^*1;bF_d#rR싧X{F5|!jf ^pᖽ˟ĵrol7D9hNx+]ZLnkaDkrHUųvkݘ!ĔLX%E vRsim?PJe+MAP,.埂e0 :UA8{z9b㘛b櫚+?mTX@-I&20l8 uZs`)N蓀<$GMD`AɁ]E3+1gn>y?ks[IIYw kd5KP?<#n袴CTڵ'ͼsF2n} ~ޘm]: mD_/.G!ԺՙFwzV[.[Ó;=?n/(Ѻi6-3ۨIz 0 .萏ҬщT2 ׽,@Z\J8+ :BۊfW(pTHpufPOvKXN. 檉-4nLXK_HhEFygdͱ5!ҳ#Ɩ|g6\!MI`W3?t "F҂wnHdȬ̻!ނ1.S=6a[pIsݺrmB QrB;7~rt%y٦Jr+-:ӑ;odAńǐ#?\޹Qc{[Ӆdӛ/+8YT$g6A'STEq>7hiDU&Q! =c,=·b@>,ف2x"c~j_/r L K!\sG*rx;YX"GWn r`}2q8 u&|;N|HTH_y>arut<${ߓ \U5SGhr)$RX)zW½ȫ곇._G JCj9T(K8P\[Dt/R]3:q!\8aK` 'm;q!wdH*Č5g: b,8rYܿ9M[q3G$OJa;R  XNye^aaT;UV$VtdmV'|\Lؠ擉?f*mMBq;N]oYTAZB-zS)OԐ{`p8tZ7pϨWN>4SKsN,"iiZX8`:Q)fD2zv3$ ̯NUd3#GƒYB`ր%V?› o:vd],̼7+wi%֖9[g T6B:nU)R}ӡSx I^NQꢵi!U}>1?V>!R:%]?Ʃ'+ָ'-74S#=P oCh)K~WrR"wMHVC68*m1Rr~ x?%U3NGf9^J?r,7fKƜ }s 䊶%7)̽cqm0~IV ]9~2-륎p+ K[~9*r뒌x%vUb(މ<ГoR""3Ai :o6 ~_ 5٭o[J2l[tKL`!M$'zȒfj߷!=]4Me#C=~=7O> .$IT8Pܰrk}#u4[AcdDh҂.`/')Sy[Ykڸw&:q"oVe2ye+=yts?0@[xfM}]>LPph +V Vǜ uP9&Ͳ}f8Pp_.òXk\0:vӓʱL`AzIf?G769{jG4*27&Wr΢+5p&o6}t Ԁ~aD\!WܛA\t+_/ -G#$m7hMv)\vB6Ǐj A!;h"E2ZsD4:ʎZoq9VXdXM ~aN[+҈Qjh-9o*]/'nvj}{dT>I:5w47e$49z٘PZpڃ }03/>:CĄd{P"w6Hpc7/ Z;*ݎiv5M!} \a/zNb1_w~*eaȑ c5`sHvXn݅K@Te~z4=xFL%diKw?89A SƈG3 -vFЁ?v) a;"!ۣɰ+0dG;FA2Y=7 HUJwZFRw bF*] QNs<;)vd|E#:,L$bAvWS

+T"T? B($[̚\ A!Rԥ|˷:iZb:s"7wƜ/D!ǸCֆAvCBLjmteI8?\HK~.9>V6od: ei!n?B/GJè7{E ~VAXnV:VCSe Jq__Iӿ}X ?}v&!;|C@zlzݡ)G-bP4hʷ/{'M)nx=$<x_n|rՒpP݈E4"ѳbSyR[J5/tC7UfߎSdT?w+a,>dIElk<ƪ|? @ oOvu.ZyciLPwdzSkPxqS߰ H=ea18A?>Ŷh#S^/enoHf-"+iѶi 1d"v"Y=pu{b;OG%(K2ӹ%2?%xl Gv-トhbA{ꗓU y4`a>LbƑ5Aj3yցv#B kj~#FL~9!0&?~̲ɤ3g1!9J2r}%q8zdmԀ:^ɏАw|9U3_N} җ.+SZ:<YGE{(߂W,,4c=1V4&xUʳ ש% Vv*|8 ҪG3 [KZ|Dx `](O*Pk< :N VDVwG=D9}*Y1PI-)*aa~0e 6dnк2(4ø 29mA1)TmS(Ǒ́zU܊kjhus '28<Ќ2N[dˠ6ju%&t$V&{Iq'\<|B> :#2.i-I%2X8%0H%\c9 >5 Ͳ[ !_ M]d)AqŦ/k[4,:nV/)`H ^c [&>Ey ;5Mɢ.x|o\Ħ */0񟧩T!<ÌZn1qHMahӬ"5Qv5UNݸY6ļHoy=65I;6`2R(T I'AS<;mH>wTY@\(o}4~1~bW&({0mLd{+ٯIiZ1m 7K_&d0C&6:_wq F^a{bk85˲ qʝ[gEj.߉g4,V Ci,XgNxh5Z?( sGC g跰)-^4Ntw܌CՋfrL_-v\)fuӾO>0!C M2/F$Q}]U1݀Ŭܵgu#e, lo A3QδBʨg?w sEk(tnogap"WՠKug8Ľ{$/Xi{B!c砺)We#i I5-ҍ`%mj̯n&S%/w2Vlbmu;WOÃy ~cS?C.}B1Ml<"=yFKG6o閥aZ} oXS1{vPB4M9;V;6GSGΕ9 uloq|ıu"m]|95ax]CTT@m#rҕUJ _dK#[u>,cWhȃg7*Y2u &U MӰt5d xQ7'SЛ'Edn=;FKEoY[jn {xeP&ɹF΢,p6jXZP/\M XN5YoSf35[Օ#ʤ)0?%n3,dxv0(=úyÐڭ"џP pnl($ip5-Dg{۩E hd} ce)tTx2]q舶ZjRu a}F)5@;Bp_EQcV#u(lc=K/2yncsi Q,8d<0b{d=OTƹ%L4w4lk} В'q6.cl 𩝊# Pf:r#'5n6CD߻;vr!$s21 > ]֗?T>Ubըƒ`!n;]wwc޲WQr81&.8 }e ;glu64}>Hz#߬H;N/˄5@,t~_fC9e\Px0QLBp-Dq(h+UI25JVbR6\O 1[ =\-TOf$]^NM]Y\:W:wMWN㬰Rv x.NkϜ : ^RWܢ; .OO*]uwC#>YJma蘘 LE?ԪY;I2SIb<@~e,/D2f*g iiIu矜oMXD]%1)L6+g:7O8೩ڏ(lЙ'O*k"JaݑL7![M , csVUp"!iSmA!bb\繁>sw6QҸn,qL :һ촥;k|c^C>0%Jnu_?Ò}=Ζ U\iAR~>2vXt;Oh‚[CwV-']\м[n7ك89݉.ˋMkSWtq,I~#; @{+HSZiF{?&Phel0g!,J̑wJ:s:WgnDX;8sP4%f"sL"TClS{F oq(9t(Aȶ#ŪI|y0|uS^5lO{_3~ TΗ=&G`~ƌ:gTAwWp5|%6d/2QY@co'sLȑ/]Oxҳ@ ?X? aŅ!1V{M#c5?5,$$}@"Gf)P$vb?B@ED0$Td#OVY(րZXAV؆$#RSVZcðUFxj,M~d^ȖN"7KBpNE1O ^ H!OϢg]Z2ĝJ' @eŅʯEr|@`<-CAO҈Q֗Kͦ ڿH9Bp<?]=Ѻ,X蓊o-Jߍ`%D79F6y}c9DdXMlL2<;{ ~>}BA j>qAlP'=yq-.!:,Zʣl2F+1˷/hH^z&!a\;,祃]S0جx@!z2JFj)&<['#p. Sp>^Ew SDR:;lv֏ 0(O|bx8f'pS|+RR :Ns0S"G"d-kcl#zP!?|G>\٪54IVVADϤNNW̥0rR;)R/M mv߽nCmG!7w:rېS\bZc8`,Ga^Z@R&MI4}Y)Gef˦l:MR٫ݨ?ag?^k+50G9D7I%ߚe7% 7t擯Ɏ{*#Hk3O킠a[ +UL0@`;PI45a׀|/m8N@k,EP=f%uYr#G)5'q,{4+X1_}'#R 4t(00C( ^~4y+qjAvG%ޢK1=#H2E1"|BoD1̈́%c쇘>?eM>|C98 yAx3ޏQ vV/sG8UlwW"v,,)3ʰ y\LN%V -{dtaG4o4FCA7< sG`kZ9ec!WoYQ&/>`06C 8B*A>b/:߰HJz|A?BrhiB`vT*lIʘ <[}do^F+nl5~bmK/ֿX~[DK^JM! H!۔`% [tKq}=RBWDcS8A1Ŋ"?ޮ57Jmb4gĦ@;CPx!?1:e M.ÇO zWzQS -!.f } Z,J~i7{qDKȄ楒S'刓Շ0DhN$z4iخςTU2vSG\m;E"K4eQwo?".lz`QkHQMA#c|UHrDD:^(ڳU6FS_Ydc^?jT}O6.͎+QЧPN1c>۳_g(bmB|H䃑K kHf\ ([*=t?u愨fM:#J3$Md{u{DulمD\%khOobgǟ{/9 +^p0/7ݯ_6S$؁;ërp/{ђ%w=]6.*1ӥFDUy|gFwtt~-3Dda n"8}TA*xbT(+2ڙ\bNYpqNǀI+UL/}p1E-eE.f85iZ,sD="E2v+w{kUi|Wm8 ۑH"+* 8tcyZ_Q,+ΔcBц\aѨY`c]qJV$ @T+G8OaB2e{NE*0^q]Iz#+䃥9@ԓ=V̏,\8\1wXh3EI=CHIK0R[ Ym" 3u|pF@/hq&'}:78Z(@{~DBxii)=-Be*I5l(>pTMz[ {#jbL)y4diHy!^3 3v,re8clvMWw9]@zC%Rəc D@,:C|2 vg5^\"i0oDM1vha/}$3:ӕ a)͘H Ptѿ`dXA+t7C7:_mC(ZVOk?~?|ծBpISKpo 0N>vL݌Lql;> y|%K\PI֝s& "uSBns7gmxjϤX|VkxZ˔VL-@ өPόaO XȔv+flz]tٶ╵fyۀ`+V@M(aMNP l޼Kgm pMϪ;U޳6A[͒TUa#hظ'&_nyEwb ?K.&*頇r`%{!\Vw̎)Zw IXA0$Z;(ơ~~*`b~ IO7|Yނ4X(+QQivuX]S6& oMϓdu#9,~ͩ6eFƟo02o3-Xshgzpiх0~-@ɲxeVJLk&w=fxfeiLv)aanCa8Es1a? ')N*2G針ㅼ0 #JѸqk]g%4^qJ'qE|2Pc+ NFf ً{^P+L iV"/װͭD~ W.ZezV0R [v2|l0h 'lET;R8\}f8Ʊh9 &'uaDD^T!rˡ,G9m\G >Qp݋f&7 H7^[PESF`=Pj̓M%VFi?ͼd_@Tf؉5GQcs!VMWtYe M%N-;bL@K!Bχ̸ok|Y/Ɩbi3*Vyu: _Jb keA,4C?Jycz+^,Gf| j4fyM&?{¹@HvH~1zC@R]l]Tj[aJРjA?*/}|,=B8GNa:(&h s=,>{Rqb25좑{yctJ[**?|tZhsrS$J&<8Ԁ%A0."N@V A0* @ρ׺Wˋ4QhbX\(&K6qz4v@+^6(7GkL[ꋠ;*RLƧ8Q?zГpKP%!qx=X,ϭr 6P9XlAj-M7ر氋mڏȌT^1`1DKSp-Tr İisUU^4LD~{++_4Đc$,vyNz;׊ޕDs⋲-uB4-%*Rq' 5JC2[v> P!7.3W.~LCy 2pi{R8A-4 >@Gdgs N#$s[E 3Қ?4] 6/:iLI"&u]hұ50pVX =1V>cjךJv0Zѝ|kϑh+ 2gc%$'11?Gd6p\YјJ -mқ*D1M2,z[v~mvN7)&J:hm1RVab=_xUK[ DbsyT\SOkdzğ70‡#_}# 靠IdBM+㈕]63N󎉞m Tjό6]vW8`F!8V{[KT9 ևNnJ,η)[NO㡶1OU_tv<70 #Q3 {c6-VX_8{A 2j⚄T@в%g> wA8 %x6iէh/];A8ǡӴHfpVZS,IpϮ nLFGF?uVte FiiVBaT77l8rI>(;;XI#7X )},?w!kjY{VIj{!.6wo7q/'`ڮ3 S_;#0OJTY3\f)$C=@=f2pb/ e =r!) `"mpmB9=. ' 6jS1uS/>dwAY `1g ]:@PLT4a-nFY^ f^ ߳8r|xgu*'LRDaERa<3; O,vLj"v6ʆ TCg͈hnWBdX跱%MS$m -+aɡ06V㧇dne`Az(\vÝ۫P4xr,$II/T2>ΏIaĈ,}1~Fabn]r&]1LupWϛz.I7DTɱ%;Fr?磦.SZ)/yY9IqTyi|]ǻ>İYW]m2[׫ucd?;桨9R ^]&vSjrҮav̀v0~3n[ Ta3 컳_3^x ;D.  }9k>k(xIa>lӷ'Nw!xGh! 0?pȭ3BЊ'FmbvN[eנ.'  ֞f0]IDlFwqO}c^>/p\Uo}PWu\^f2uUfxvr4*,eQwz¡-1`GlQ1V)uxO@_guAic'pBغz$zfq~HʾLjm}V%.-JXHJ{Yz ‡$TQhͶ_#TeҪCbFQKI'R1Pu*9Sˀm2^Zk~}Ns[5a0zYQJVbd::r@8l%I2޿WQ!5 )lXDVkb,wneoS|jRѪ߆{K3#0ݙ&XԀO:& Da-#1+݌Aк@ooNQv,¥gUߩy:e @‘ɂϓ( p.fbLkn/"}RFq1ڌ ΤD9B I&K|6 EQ \-y؋/rLO n1MQ%SϺǾ2\xKtD{ ۑY FG*\L >CU)ɍ@[ן.Sߐ%EG}c+|+i~AQ߇|meԼpjdlM /Eϣ_Y^fgNag"\$۱`.ڏR/!NfrV+$ )DUgabB>Y%D8h𑽘\?uUK6g_C\qMRwp&EYl:gG5=?kX.$LipPF }s6 )Dd!XH68j:x;oԀ;'9糴,Jv@I8!B= >41{EO{YF:~6[i&צ茇c݆9[4s`F2_2QiB&~h|hl2Zțgƙ'fj:ٙ$X%pixNje˓a߻C,@5V^*Zd{g:6J;fQ E8`e eĢ?Ҹ0@a+` 2I8c*tT+?{Rtµ77H`܂&{RՈ%-wP!@9 +tWL`g7[p&Đksyu2&xsM(~Fue+ x;oZ6ʈpe;ȏ3"8p;P,@&*܌/Ѷ){LVa132 jf8z(sM`-1=f4,ՑXs17U1.KI ]%/W|X{X ~YDlw7VrtqnxLF}<S< *&!dkMV ~XH$@pyr"hOqIO)g%Վ]`tk $t?O8!B"&_^4=ϸArf>_M Ų ?X4%9.dn؆}f0o38ۦ?L#޻@)4kP9r uX(٣7D"D 媭=nsa"]y1 cFm kFqbN 81x|5{GI5z¢YD/8 L&^r dX̿6=|ϫZe&)68oouO ؏ȚhŴV4s¬̀l81{*nsfzs~Bi,tjV%yDjWM~z9 _FjȧdzKs#kܿNғasfGl["$'ZX Bt_]9繫4~<BST_6<$)8_?o/_>5)8Zxm)GML܅>ԧέTH*X讽quLu.i(d"‘qeସ3㷻^XxR%2dz"+!(|j"7:Ѽ\Ʉ5N1Tljs}ј$a&7ۼY඼8CoSVe)nbT1U8 ?)t<"ȞvKwzPolv9 5Ӂ,\Pc7vn+&J[yxATS_ 9xYudQW0׽>KS9٧W>68 LDW*R nT wg~aՋ*SLxIAxP#h>AV!xEQ< > `ː *D6 sd )?;NM)A,^'P'[+xo-y "-=ô&4ᄍK%6vºH .u+H '$2<TP F(ct K3|_i9@W6Ny>K\)۟m "j~=Rh$EQ3bsSn Վ{C%lCGKcc+&$憃+֧\ Vi͈U0ӊ֦uEYo Ġ"NwXPO]+N30ݷOл` |̧]WJd'||.kjeSXmJfeSor9)3y͐n%aX.t1z(/T5X޺5ü J}z3*赐CKE82 x( v|20ᰅ8~ um9跩:;q5UJN wq+B2˘BU#Z(7:WBٯ˜b}b3L?[P4aˠpDSzJz z /JY>lDD s {>C@1F.r)tZ6T7T8GPׅV:oE%\ˉoYgSLqxYFa,dІڦ5o r=}چ|n*`{ Y\{vk|8Ybu{>ղР-|G_APPtdAz^gg=>VTGA%PY71c:͔ {Uh4<̼<519uބvg@Ψ+RZ_*VZ1~;HϬZ5,wj 'Р_\ʟ]9]=& gSq(2SnWt@ٝS[ˣ>Epd۝OXu)ǒ \6ӝ@9 _ NZwF; >OtvCe ĎZEЅjyy7.ľyg4~yjS_8ntZ?zvܯ;JR(BY% 0Oy 03 ^^{&&&$1UQ5o|?½'! m |xFuGZG>)f,h讚 pR'C߅D1*Q=9NV3Ed'D@$Ć.zX~zz4}Gj W9_Fa2Tr5=Q(q7x" ?G^A0X] I4AU3G#( Wɭ80rbKx%wEΒmZV<3nN醣q D)T{3c漌3_;'W}YFԃrz0ڗ+;tQ5ZռK/aa##v`9V$c@Փw+xQ |se U堋7M+ qljf%fc2UM}^~ݛuR6sQ}v]jwOٯ{b߾h *Y}2VW2%=E87PO;B} N,"Ш(< ]ߤKlJ 0IT-N5ZN΋Ҁ坋 ]Ua1yxeΖ|mV ܦԼp5h&j'q_Z"R ;+> )B?Ӳ\8zγ}W5Ϯpn鮎&thL8Y-'VfG[pVɐͤV 6NpV*ydi˅*k<8 ?)Y炞5(;g}#G^tgFmV[MCXJ]YD%.?p)C틭+es RԦU )w 6VSz,_ڀ~t2 ϸ5|2!/VeV=^ױZ3@4EQ4ҨecAt/kq!h BB:5@Qƅr;BxsXylr.$6.Y^tn[_:dՂm@ErU =(*6v ۧr&ꭈ.hZȫZHWe!$$JMA,ņEl{1LRG =0xl_Nx-(A5KVFD¼d9{ڬ@?*}S˸~3{*Gl5f&_/} S59TmRו/+pq5wFA 4OUNqTo`vzN/ 1,S!p ɋ2 ^`N.'WZ+4- 7^e@u[Av DRṔHDB2P`Zeaq{2.qTDLmP&fBL3tjm/O0)pte߭5NۜIJg#:-; ھ墘N;C"a硃߹ |_x E T^cǬ |\/~&nC$1Jʪ/;X58rnLu i*i|fBH*$l!zox[_/;>a5 _Cq 6O 0COrܫ[kO|O8?e7؄^9­}.fcnĠ>L\,03|HWϚW+]aoY]]E7N-hX$:GAqO':3нw!i! uYS.VY@a`~:) CY"[,x_[fre=*qY2,imOɌP; *zIn1 |q>^}LG%S^ i&O'cyyt e"wk/AwV$1<$ܠD>O=l}r^= B+eg/V FUz5ܜv6= NgsXXaQGћh);Qw% h7Z*i)rQzCQ$$hv%+%<|}W0CC$_=Hu2ǘa.J׆*Q6hE+([' 5階{"⨊qonZA0];bL"n˗t+/:rEQ]R^MZ:r\߾~Dse8ifץ$޸1 ?]DŽI@%S%l6YcXOY`C6g&C4N)>T!L[xn|)?aeY@Np7Zr%^lj(l+}p"UO(]4U;. e3"h5 >ǃlˠpSP=[N~|!;/x!48MO~?KQ t+>y&̺ZB0E&%SayrCkQwIag#*p8.=yej:u<:px ,@S#%.cTurrEmQ#(lNR$jZ8iF"?U܃9[,SI/`nBzG끣*)X-zht(eyѭb|:j׬KBa1˕,Y1"1O%:_hu@-"3%%:iZyY(Nh,RŹ6O"^\2ga3Yy[hӖJ+Rj5$d/Ã"+[މR"såHSֆPCK)1󉙔WQIJ*ee7ߵfC(|.\$tѤ, ǥPГ2Xb_aCbqzޠ);*j`>z ,1Kܘ$\R◚C:N߲ i}HnW*cVk$;%{AyѤ؏pQRaU^OLbD/{֏1-)eCt~TEaĄ5+$b]R# kټ3qU 8wlb~RA yDB)f_>} F(~֤>vb̰:,UBaV YT׿lM\7[}yt}8 pM4g`m"b:s;M^DDR?Sk­?&p*z78u98*8Y,mP]|*)ėW8εn:3yޓ0zXPgH],mTR$kړ^`X-wXѤhN HAiُi$cK,WWFfhBVQ]{187ڵXf9#%q+dտ0Uot $b&ߴjS˜rNdH, PxtQ,-F7lwLBPL[=avLsmL'lsv.ej|+Qwn`j/ˆժ+)s@SE!rhIb8v؝vfZZM7үE%} )pF͟Y)+x3~ݭܶ!=[US )'qOYfe;7r*W#,22+[]6%(X^vqG-aF=WkXD}^;߫b  <)3~x[=wdA-m>@RU+=^ KQsHHm7?@ʶ[Hx]Z;!J?*PY8aR)6`b;Kݬ;)DXsSq|:ZYo?Y0sxD /aZoz;}JH ڔ!zڼID"͹ 7k^ -x:7z[q{V5 -BaC3#T|g [pGVLl8PomK }MۼQ;@IOΊX cVO#dQhhheP@84_KYOE5s dFkzaMF[ROCϯu.뽽ʆ8J  1Hm̚.jO05b#qf*֙-C$`ԏ<(c3x=f$ɖkv>UGR6U8k"GDk0ǐ[%IL|'Y3K鏻 Z_.N^ԆU: jR1v` xIY܅bJ=cFNk>s7 k˞?}LWɒ<&>ɳ82:Q>,N/X*J0X2bB+f827#۲ALM]W 5ѭnGBo=FBC:>-[ā[q gX|H8A=s dқYjLPkI}ɖ:J Tq+^]({L8vʅMWfBr+ʋe:]S,;-94rv^EJUeT&HX"u?<bXlX?iScx:OKC,!T8aW~>Ƃ>HΝ#i׷j;u(6es=SZDd9Osլ*%u^Qy7adrD =T!v2{ \Z]h0{MžTԻA)E 3Kuu@,[MLـmKA:q1 ^ʲF%~6ˑ6-LHxwjܯ:g,\d'̪>Jzۜ^҇(G{h4[hH 8' ǻG\aD ASp0C & _1M$΅H,+.Wizh6稠KsX`%T42mbwz Wiyˆ \Uq6$+2f {~ۊ7I2֚fX2J/J6؄ͫp*l9kJ_"UkoSUh.Za#)$vn#ћK9:է/)|O UBUH ܻGDk 4 Yx]>,}i'p9vq~8rBMy3g/D*HUPc%)ːե<|r*n%Zc7_Tx7uŖ,oP܆8~9TPMAٗ vnv4&J `B6byEuVKZ/LhlHg@{[<새?k}(  wt\86TbG*8 eL4YUtu}> K0q0rkClaƳ2n@dUouEa5e6$O ,/C!ͥeןegcs=? 򋠺c}!;aCzJH1nyf1BaU'̶v0D.#CA"G+SȑdJ/ O,/AN(A УY""5nZDBi:'$f"5.3K|O:취; HGor69WG'ꞣ鮇\z iok\{}.ȹC^7w~Y4Kp?g]N ;#sQ܇W'^]u@$ PG\Ǣ| )',Q_~^!R5jC+c?=nJķHO5ۦ _d3nCKc0N|O!i" @ˡuŗ%PMlLJ=kGQeZTLfMןu;NG-Axnw0!@X38Mv5ʊt'kp b|f-)zjw;gKbQ']OɰupdF8Ѹ;.CM-D;`%YSOE9;&'n}xig[cDDq!<{4}23IOr-Edj''/%Uu7+%z |':Fڞ{0->ǗKSML KYt/ kMB; zxJ=y)o^ m0  V10 AiORwPOzM"Rw*> q]˜P@Wg9r:~EtwT%9Z w%72zP)s+|FsS2Bu(9FյEKNB&U=D6&Ⱥ4J-emzDe|^9-)ܸEo_ienC>ZĹ~/`Ҏ[6(DeyPe(DԲ3VpuT3=3b,mpN ZOJm2 ]_]X?qC `ǯN}JζɓќPt<5m>o)׋1_qU er^Qp@B@?vS+ زPSR 6b1 ڗ ԥ6.Z&:<6} ~=P-_ -iV?QP)MKڴ2d*QlBy%KiCR~0o?j^rjH5AZ{Mdⷂ년p$rlTGbe82@j12%4DǏ8A{ qVFBzB:0+Eͬ΄ :ͣ'Ę#e_j.F6 M_}E>PU#یW +lhXUC2cbbut|0TvMXb ADZ b+Z7}Oq\)ٳċ%eJp0ۧgl.C(w(̠Q  9-9ؿYn@f/l[%*E̺0*}vO$ 5 ɰAdf WR;+taPImhnSnGHSnw#@/pl=L`43V%c< 20unFu>;۶pT"*rI)lٖ>?u6Wd;l <_{<8*%n]읟Q'ÎwG%F-4X&F`ˡBUͮm3%*A,&Be?[9U$`40Y)2U+45\J)6 ^ח_su#<۪,KF#yo W ˠ E5 [@(c:ߴw!kE٬JF-)/:7VEGvXAR鐘XlEvjZodYM6)Bs٠5)ms bЇ;|S@3 %J|a6js ?\uM)X8iIOFdOI,kʬ)=J$t¯ɍ=YEys,nj/\ $YWѫ|'Y_(<'jG޻vl2 5AS P^ P~B2ȹcv, * k&(NYhR y5p#e׸={w6'@7yW٩ `0^̮֮I3Q-3\У?ʁBϨK:wR?Xp H(/*IDp_>xD<t)/2a*_FV鄿GOM<'ԁ9Rv,˛aON4,+_9ϗ= oܵ|='5s4\Qɴnݹm`@a*uẺNĉbGIKG+•a{,@mSƛ}fJw{7kp/:_Xͨ"mw] GLO= G A^[Gi$}Pշ6KZQ'a@<';9`rSLR!qOIa\y WxpLR%+UAcƍ&JzE)Y0`6(ۯP3O ]Tǫɵ Ue-g 2_\-UB232#s&ktT;5>:4n yӺ\Uq A|I۴~;YȍNWn]LGN:ZXYV)Aƛ_#Bt<ǸZW?': .=Dޏr4ׁ* sd݌"/yr?Ƌ>#Cj X?~r@[ž|1#y.gLTdDAC7H:=/+M%)ōd.vUʋB/Z ۽" R4dg0-U`,x2h?p]lT+>ݶrͱ:w tIIVe}-VDWmoKY;Zmkhm?2t Itnqˇ1^9&w4^Pw /J,N1EiGY-wJ e8Ӳ('2!Fz.nW,l~>70D 8`o$!vl%Jj-9oOJiC GfT;gB@RhdrQ7!+'SʹG|I.krDkVO5y3OX(@(EP=!ںZbъQ f |,2<1Gˁ ?\fwlY[\cB]wZvy-fDRqsV%ɮ#bQD <cxz>մɪnɂ6旟+z]jA= ec=$D['P& fi(~w]. l!ke9аrp*z$Sbo9\.W۞Jd~Z`D}:k1LbhU^1$ $rGb`%;|3eZjȃJݏrdeQw>jb 0 j_~lB=ݵLjTËk#)M*S|P*~CmS 1!:Cf>% Pܞv+xQ w ,ĉ m/%s8\ tOJ8ԁ;zP7 UwjΟS$?6OA=W19ܻr u{ʷxLsui8s% ֔'"A#G/;66˙N/A'nH)Rʾ:>z4~PN]R]wT-Sy$CN2@ZlwQ{d--oJ*)g;fLkLL˔[[Z/a& =MH SRpgJev\](a)WxP6ݠL6FNiPff#6HXT:eWt-M |p,.~-YEӨ,+ ,g})/:/#%/Xѹ00wR#7+'Z5b㝩z^d _7)1g)F6+kwƚ2w&ms~7TdPFuLԺNҝ]/Q i']"L~PPCh.$>j/XAo9HIV90 ߽++Ɓ>E&!&@ׇM>UzcU+9!hV[]Z' BkEIE}^{6qWVs'Te18S$S"+~zu#,wAbJ)L? rmST=$IM[XeURX[y0cbYM5Krg mD=#j|ՁrH^ bZ&{K-x׭Ϧ~;#,!NAddl,å@dOwQJn=G/<6rv k'LhPc% 1ci|=DvUQ(v75J,h ipPuhn}*$6rd17^kihd޾H`x^IrO^".[.FiN "~t~kjC[򊸯އfni. 'HF~YR =7׎_i.0(x_b}z^yvW_ϔ/QO{.G>"̄IL%ݫѵ̩کٸT"U @r8ٓ^=PJֶ4E?r%z6v۞pɗ=R%x3Ѐ-_ѰxjԜq[RCTcs"7Kfh8 츔NLX FٷoY%@rFr~\QλdOT\<%UZoJ']-d~JOXeK+>?d1կhRUՐ:O]ԱĿ52d5=r6cmoP~~u7ܧ1BCH^d^JONc/<&":paxBH_D,JB1mG6٦ gL_QV0Fq {뀯 GZ.Xޱ@}CfKBE/kPIӮ{ &5)GHU B'^TYJW!yIߔ`C– h51YuY6?N$'U4@Bv C?x#qҝsFR0z$G'NP#p0ä| 4DzD5xlE b:r$1zNQmD#]iPcu?,{F-ެK|'0 n1ƣY)\nnopOK8O*d!4$~?]1Ov"Owre\#%͓ںLtgW*5+[?TPz6n߼M~ZAV4MzpH)ㇸrqÝp,0Nj _W["tNO`IFڧ .y+P5=:/DkmSKݛބ(-Ls&k+%J]cR_{h8TtnGYΨU]L1RT~}EaBŞp}Gu;=k?~U5maIwbMV5PI呾XQ Hܨ̜؎[dIР ۲" w!RNޱrCڔZ*2Xx;f6 khP+Qs>6`| TIߵ`;jJeKr<Y~ aԜ {2mK@hP#W}5T˱ĨN)Jq>c۟^,d>;-gs#6wWjD*#3k9dO=`O1my,`0dVjjѓ%{%+ux.:z.N'Fƅ8JZm#xѺZ-LLl5Kg+iAyl>Έ#OJ bIGE zOH=vI8 Є`YL@aPDHac`ꋂZxg,8&OqgASu՝TR}FXWV^?|W.>HBtmZqI_b f Y#/ixm/rpklɱJڥ.``H`T(qVZ,9%[t.ԯyn vSAҍ{nr?+ai 0iig?~OHBBI0 q xEY r{ϣixK(~b+>40JݪgW3_6T餍:fq-:Gp'Y[ň!&/@RJI*VDVH F} +4yF3xk܎n]ٶ(4Hؐy+w@L <V+"C{˙#bD >i>6"%gVq=-S^ QiN4`9#%6%sS|+?#.q"V$c wap|$sJy68N@PCFswmె}vWSʦ$529R (1 wlJJ4UL6½uw?&d=1fSY!9-ى-N{J X ""d8\FdВ C?mF`\C4ENWf D^RBNؼq(Weu|Z$/4 7wT*AYi>OS&in ^q+69/uT)yg7V̚?ʣˑ%>EY$15 :N15[&L?nb!Xė*ЯmkYZs: =b/7Cڗc9SJUK?ouX!@q]ofe;h:{9R.hziu01@C‹)*ؤ Lx,Beʞ0O4Ч?Z:L'JJ$&Qz#8f_,;()ԜlDH(=,tʴeS1d/ڀs2_|1ȷ:/g dPit'~;;׳a+sޢz#r.pFs]i}ORB`U/4?Yi`tsl2LZj,"-ryj }0"كIUQ/x(nSwP5P(.y/44)ۙ96?QC%D}C$2o:S⹡-0䌭 ;qMM\O1t`˝$+~̷sWbN|Xsyѽgkhyhu?)`6'YLכj—^v,LPzBaSyݵUJE q#=PHv],X_&z ig22bMS45J~Wa߆b|W/vKB'M!(];a^n ]Ü +aKTg&݅l&sm>l_|JT4$0aáY(DjbӨL2"_#@O&Yobr^_-]Gzh_[ >r̐n]RUn)dTB ',48CEh,j/*M 7dXrO91MhP/x.1'9ܮ-@}&N~xP'Q2MZ{ TcwSsC/`9FGE.t-Sl'4]@UWsվnF ޤ<`4%ICm23꺬NU|vq\TI0=ڪu&2h`*PRGs/gd`O$ b]lq{"8vRY AJ޹diHXUG^#JWV"E@=Wɺlש7Sd;'Omp/l2*x߼se_rDr*7"U@]M#KGF# ]9 ֳ[-b~JY@`㠲R(t[uH DfR\޸S{Pз>"\~,Ŷ؃2רGEW7 ̯\D7`"Xo.${ JAf?ve9HIs2i!nv`G^6 JpYPRXeiY5qabR}rld< nW'֊LJ=g8e(FZ~#繈/Ȩ*ms,ﴯ|@SܭlMu109ɋ򈌤+D6<R͎3DS5yK6Lu\Y廰ƨ|ɋ-~6l|>+rg13yk&aO{u(e5%l%?!lFJ7mlҟCI QX~:VMyYOD^?.,Du0h׭g 0T},t{'QQΗqZnBX`&j%]wyվ%Ou$ gחV΃,N;ޝڕQXDig}>+xߙ$]F 4}G?beVAN\cn m I߸)C@\([^)U_4T"+|MX I~0ʶJ+O2$<|ɥ|^CvUp*~͙3phud 4YhUa6eT? (Z@Kh$'Scz#mm3\QO`|幰o=:;Ep!ʀs<# pATaJ>E7ぅP51Njկ͙|^y-6ިiAT5<)YhQ%s.B&^RДHiVX4j4:M7:9hOmbŌ@K>+*zb2Vrl(5\ro5Ceq}9h[eN:P )Q\R4#۳[ީ'!g*NNZ`K1WO@7V "s1J,?ݛY W ")+56K`apR `QgQ~P\6;KTZl,Ve2rD-t | R47/c 3&LWW)ao%'zegVla'pÍY 'Rg;$+j>!~C%OSo?~`ηOv31~s8dJIxjl XU!K.ut@}ۄZ5+TN`5l>8C aUE8FBSHƂBWJ}Qb#Wn,eޑo,QnC׍+^;L8]!`[O[Te}gmcKg b,.z F Jw$V]jUHVhRم|2frYj]2柠A%c]Ņе'D86h uVv؇ H\J+DJ߭Ğ(xL=~o3݉glw~ >DT9.'?VM۪rD&§wSy OF]Gy'ӀUZkQ KskMcXTɡdȈoṵ%iC:]K@!Xx(tjR*X`i1 SNp,όgRJCH>Bh ՇIݣM@R4M o7o S|*;*T 7F/Șa. @)f5wT(Fy1|Z>m$3_ Pf3eKSim)u _ԗΠ. O&҈i^7ay<ȃ7Scdg#4I<"(Qgbg6A(x '! I*C9KݡuRSfltxSCNyQª@lÈٕ!>EFA3PiZ`%EYw~w.r{ P#I^QQ:U1\hS1BK&Ez`4{i'&eL[Ldx! |A.pGKbB5 hzu>Yiє#0KW!ŃN,ھ^ ߂ q(eSOUȵ+[ιX-w\ m@ \0 >*$.㋻xF#Vh Ԛ a~k-g߇Ϸ-TOdex Z,!}D E]&JbG4TG C/[|Tj}o@R 㓕 oëOVvmE2mv3(<} և0=^2kZ'S,Ŀ̽#TDZ$BbBa`O;ǗUGD-|(OV󭡇Rb1bӊdp6F_KYx"^aخ>y̬neDE$od~1o{!`́ۄ7ZܓC(݊wlSֽaf&G `ll)ؽ5[eh:5 `ʺ"CpX3&KgM\>i1Fxl tYӿ( 21 ۹2Ӡa">lIj3[B^W)p-"rcOz; uM1|+*w&M\k/MNNhm|*e0QJ2ǽ&o|Tq>L^n袓r  va)a8 Нĥ3d9|жIad͑hi]JF"NƵbDc,O _;(u[մ A4|k]HVMaſgF^64a5:-\!.q(?)S`+vn[୴~.-`/Ím\y&1&#;,I X-vr <d~GGZN) rwaqw#LP-fkr &)z-C k&fvs˓Ļĺ>/*{l!)\G@ NؗFurK㳘ϐ6.qd0FBeRhGEjgtѷl!h'5?6j,tb-NE2BI^6.3>}٫V"8YpCdWҫlk&lN᫇ j%EBM=3.Dn-;ɘM_Հ`>ƞCdTJӒg,t=.Kx~-֞ؖ&5~04jjv:d=27,ט4k 1J]_RIF8oM\'-X!d! %L:V8B ?g e@2L ܘ3_@31x5|6[>z}Hq!Bcü<=qYk jww"&{y{,ŞgV,6L 䎙 & T!EmҶ+ER%\jޯuw21EnY:Q8Jt,yzr\iZ 1== DB Id1D ???pu?b`,؉X-jHN*Z|8>Uu~XN/EKŔFŤBۄ`vp$ycmYJk󡏸W.._ڿO.5HbJR ,hr+fV(̲io~X,3ۑ4bPn?,%kxU(kf5d? `xƠx nmj4Y66T,1Ǎ\H.i#DEO A-l7!y>vYa/PzV~³u^015ϛ;DJ5$M6NQ(NVg!)ϾggIq4Y@}9wv(/N`ޫ, ͏.qЯ}h3[8R.v>Lj$f 8%P]!igc:.Im܉Q:;nSmCA{3vV 8=CK";";Z;_4 +>u8to 1ɳ ņ^ Ԫ.)}nV+0"uVo?sڱ/pNww 8:ا{>z# N +cGmһ,[u2:>vѬgѭؚ"e=P Q Gb8B7Zreˬ™$C-WG`zKmR{UD9& tA3PW3 JK7۬ @׮͔Xd4D2E۪.x ƥ i_092Lm *ڳ{8 قƶzBua>Izc!g `Q]. ] =_Mt)*CZS׮GdЍ}*-ޡV3~ FڔEA6{ʩw}>``!+e5|͑G"6o3*(-S( &m$hXί鏐ǎlI*~:m۝f/l?V)埏*5<okqͬxRYs{jabpYxUϪnfXոpRpmzȤ'5D+C{y6%%N2#T)gW7t~%Be,<0@zgx7]DAXP&]d:2 ;VLz#HLk{3@br8sRߖֵ&DY"]/I!o躅ˇ A+5|Q'ja("!;7j< nRlW}Ѧ=?>hEnm=hc@?cMǚgXP WP*DY3d.? ֶj KViNHA2! d/N<^9 l )\σ'B.'/E<櫟*)8K՞hq@h\O2\B+VzŊ98O[oŧ74rc^OR.x JuhfVMMS0?r㐨?n$!Rw|1,;kػU'3FvV~퟿Ֆkd69Cpkb:|?q<},Ů<͕]㮍Z<8RzsH'$X)bxY 3 rgtv6m?U}Fy73>\[StŠ|0m jG@go΄P$,X_Jx4q+0×ⅼxc)-  VkV6]NrAM^H.c,B.91~>a<66:Қt-ceE<%c0r 5q{O5XbIy!v3݉uGGTܸ|Mpmz F YIvd'uZBu{{{LY&1G 8H!䲫 hQFM^!8OFa-cϬ.%ګː*2`ܳw2^'ȘTƚd2do{ Ύ[gߢ^^Hh!Ӛ9dAi܈3 yY+X Q k:n\I~Ei3Ue<6PyB7O,aCul9O"x"I.iX y̔ж MkM,x~2"$0PCM5L&t*ڤyB۫25S^[_tLyeG*k(LPβV"9 1zٲcT8/xNDur%ZA{h{^;*|3uDPE> T ^,1_^gIrUg>Ͼy78|6(K }_W!<1fjH,#b45D`0F%( ňX76x׷1/, ~=|L @d佤qNge+U=U2G-~9~ɹi-ԳK r@qvX dyurfl~&ԎrFrCs7}d8Yb"f~LAA]Cx!K꘶M#%t]V:@dk5oV^o#-[7(bcSTRĤd4n,^g<ݡ.L_6’%;ajI9x=cwd#wbz5g۽շYjϵ= S3QCR/ tBK4Qkg M]Z.Qkfb}˰zf {B,gu +6̂PP/Es@P"tSi=V}9"5bX]_ePR4PhJOw@)%t[EV_s(HO?@K$9Î}#B^y3A6s!8໋Rƍ WmTiIx$o3[:t:tё<ͩzE̮-EAyF$) ) mx&\DZL,R?*-k%w+ȸ: $"*PgPΡO|-g}Yݬ9I3TXۼN8ߋ8ow@ϩOY `{#.$[w|AsЧ ̯4/Do~ XfXv(5`D]V=)t;'t ؟q`̍/dVKn4&$9"bajQzi)̔fDح֫$q>/G^J=& TlU ٿ`]ʋ/I͂p:6rH(# 5{IiIx>s2FlF&gx?q_&>fkkᩯp&Tz#z rZa*S.yν#޴+~{';~ ) KQ[{;<!zw ;GnKT2*EtX2#R!rEj;0*~%u+KYin>??ti?`\'rf6(.x3քgf OO1oqv>$x:,>zkN zZˤk8;Oo[pTPS*>ք81Rn(^ < # {ORVo96UPkHaY2]pxEkbU^LexoD7|\V5IS7HD] <"bޤP>9g$ab#{Oǹd> [Td.߸GgtܽtNw) E467G|~E3^9hLvk \B-vD"Jݠm:t_@aJ;5͌9:]Lصa bݙqA(+uS'eXS7l"+x 'ұt]U nM8ɦs0SЈȲ+TïSwY&b#noR4 0'启 HH`fw i݉NR5^fz.`@tFR'jݫan7ziXs0J//Cm,eVbXSs`S+c5~G0 l Vm}` 5WYUY3"<%'ҡ`񾞱"arh͛~tsFim?˸4.7V-?h`P&;n3?ӎw#z>M1[-G\o@LFUzi82ms!I-H>dBun_fzA]iwE5**Eq+leh_GKBD_'s )ic ?b..gHz[BAS_dgkw "Fhh6Ya,Hy[Q45BwCfdwR cKD}kl4o! K~h4,| 16\AǾ:>yW3諪X9uyZ)cŎf)ۺ$1M_n}nh+Z=!S O揩jqnr{hEHGy4nҸe1 YZ:~qndlP~[Cz^9=7=BZ ūea@\O:u۴].2u8s/`~kM"[wz0o,M:HCtzTڗ{e4 p6 l}hQ\D^~k 'b>qSqw:k͔Nr^Y]vgIV6s\t-UTZR-νFG(=d7ۚ?]C*t~_ "S >赑KMkN8?3Snޅ%Q0tFMqe{F,/Y| gUe ڹ5Ab"mqO7Fruܭ<#6^{Y8<$fQcs{p=zqPWz\J"QjGiiϨ ~t$$'bAbؤ%Ĺg-Xql]?/6S"þ4 l{;BXz9B?gدGێ w'X)Nͪ=ȝ䣖#^;mJF^3(3؎GaWJ}a罬r|ҪIk9^zv4; 9B# 䯞>EylN^lWyzֻe-ɘ[_Z=-73g٦Q' O\HZDX{&ɷ U,}ˁ 6 S踹BHm9ZPNd ݦ%ܞ؆ݍ4lQKx 9&{q-DaU:#ƙT]FH;CkqTS㺠c2M' ,b_ 7>@ø r>kGB=TFY:ӷ̩…I_/ABInz2GM9@h$/sqpJyEYZC1@Lp톼0Õ !a7U;Fa9rBS܉GkAm4R [~o~eehL-i6U~'!-Cפ֦ S-=4Rbl ڴh fONY>mXie.%0&зRyޔdo|i&n)|z? A̢[9㾮:/Bp%΄vb= y<>?C~_*ce9 LM|~ 4-ڪr0 Еy >HnBu鷏 Z׉nF@yџXI+VA>6-6ۤ֕P@ Ȳ6x68Y}ϻZar v1DR2[RzD{) Y$C SG6#lvFϝC1sJldž BwHc~'25՝1><,8MR YǾk$Q8߄x t0PϒUج/j-YV e̖kM5N=v&!h@=G"7]omGB/l0gYhpq']:*Y₻h`7JLwC*_SG>;C}Lip@C8@@Ʋj ݪr)JB WX…swjg0+۞1=EaI.+P:Dh606rTCU^ sj޴+3oN[f/kLqBiuh~(8$(ՄKjkC%6k:?z.{Rasڅ)?,#I^44fTQ*)-nGVbȗjǦ?;z֟f.E 1C 8ɂ`&(Z8wzm)DbğwU f{ye/yy <0ͫmɝd ]IJsډ tN:~r=1.z{eAyeq0O>L7ʻ'rzHN+U?(bO b0ŜaRf),AKu-{P^>;nv_b$D1 >$q8!*F酰͡6#'=3ҚS;q< [?IɌ^7f2"{kzDO#,3{}՛x]uTX}P6vx/ĸEl.o6?NS0 NKc{wU֦{cYDȂ%LQkFDmWB=JaK(e6m+Ab?~bq)e H}$r%.)SM/gBP ʛb\d17GW8M>l-NiD8tCEc=flSuisKw1^ʢ0 Dz Hkvm>+֧Dž]χ5,%0+uEd:;OU2 0lmltszHxT72DVXPDӅ)2c>N2sckRf Cؾ L:ARsZs,sla3U'Ƭgtl^DfOęدRѳeA=Ts_f"Z|H㢆kY[N[ iĺ@" O3F~ׅ8mL6P؁JSLq 8ώF s CN`A$;A^r5({7KwQK0ZjC b^( ?2"6M&m3Ϩ@4Vdo}'=8 `T\B>,\^S O a8☪9.ʍtQ]Aֈ\LFKDՐhBwPppDtRGF3a,|j_Oes6 ﹹKm3sHA(&V.h*a^>A0qk^#҃-7mX3oC'n U7h6y){}El笥̇0b&^bU_I _j^⃑HT)FsA#W$sed'X$2lƘډ| [^HG C)MbW\fQ2"S;#| Ȯă hkF%?>k2 FّMX\yּn ~xk N]B|Gj\ \~*H#op[I AV]9D"bx obg+6nn G'.ʵD$jE"qLsl]Ts{ {P baFZ*ɺ qZjqZ.<:2^;NgkSO=ڡHZ:L;izF<7LU֯"fyt<,}~S k2FroP,oQd_1Vi!Hc]imkJ^w%BPjMMmUwєyUjG~ ST^[g3}_)ߨ$W*A|{d&aI3/\=yRW]a\%XnvKj*]uףּ7xhku k,BɃy)je2Vte򧑞-!bUn8SnlTV}'9K+AEAMsC"+_KݿCaeZj ~B3Sgқy7}o.o^`76-8kP\{oM["՗&aM.* /Kҝ-8 yNi9 gfR fE<3zŁ6z J%6l?;Xbe-< "]XN46lctP#| M&W!c*w,Nl">[mG{dكr# nl#y}ZKRc*DX<OOaF61e7J3`^RM0LMAgn/Q) aaT蠓͡W ~ǟ~_{;~TSڮgS}|$65kKPX3\sRmHKt]R p ;?dS잎:w]Y͚apa{ -^m?="uF qZW A̢1s["F`zȥ.$㰋B s_< f8&}$IMC0WrQ bTI_d3.Ձh]Y_|')dGA֒5Ԃu)[K= XjdI|q+ԏGÚLbD od@J.詊pZff$ gڂH%[Q4IRi5&@+zx: V¹䴋5^G~3 ɛI.{P+Hi,Gbl$mȭ+dz!A@u;>'`<Ի+œ%%]dg|k90/cLN=ܖKFg~jRlָG9{5]^ZmH$#v`'ń W5Րe&)_P0;1RfNnF}4j)ܝR J aB/b P8ZrX[ X*>'ራ5x&F]\hB8Y ) y# }cmo@Ҝ)xq ?Y aktzt4c%{y(0׏~Vm?_xG?ݤфƚa3"?~`k^d_(:rKK=j-Wm7)+n `֦yZ;YFU Þ /x$fmeRC $@K2jE{'SZqwqC&K3p(/ AsN)'STrbasB$0X*AذY~> nyP#v;;$}ƅc/]-p|(No[V-}/B`\[V'|i8x' ug5B2h@PvF~3^洧ƁH1CA91t 2otEE^bKA"s%zM]v 2y"?_yʏ,VPrtѬfv;9ED͚ # fgU) /@b2;UbS dc04a4D\xL \оc[:+62bcY=Ps @cP$ .+!;vR&&)|d6!̇CΙjph>:%$zGs?Ba?IX 3OUZ5J/5x=B@3:(д#ZYsv90r|“Y[F;XX+YB| ͎34-*a?t6cer;q`[`@꒼:hbFN v_2`z,Buur+%O7*8R21nqX4+  Jo: oBǟR9P..B `f8[!b9@Bέ6! ߼Cz!v uK7rc~)&`c}Fs k*A'ևsŦ~3HL tlȄו$mz;"q }A׏!+<̌1D.0.۪V;攴BW%Ȳ\ ;'RNC{a[c#xwB2\pa9NĘN*A3cQt p0#фvLXc ^G4V7œJ=%8nʃet2>?H*)vy 0B2'bR!3֒Nd5qx9%H5Q Cr s×AM=-jk0 0ގ< oY:u=fۘ-hVdCquw&ͅޱ8Pwh<1f_q`VyK,`KA 7RzsakXe-mCu$W)!-QT>h9\|[MNz-.go mtS:b*}"\U644z^.}‚[S/ 06[T4RQ5&0N.=S, #{`vsf&OoDkD4Z4"& 1hՌԺ^~ZIq*uխZ]6p?Hޮ9;阚KK#l,Ts|'j @nB jZGG]4f=#T]zFr,nQWM޶"3 ڇc4,ls(׽H_7#WVW|Dr}oQ/E_#s^ޗDΩn0<8 Bxْb,5T 54S|B%f*kxBc:n`xBR6; vџiޭZ.;mfշ*ڡ)irCW_mh%&Dө3t[`5-u#܇ SN-Қ6z,|%($'gFִEDZ6oBf_¾8N ֔|B;vМC64Үqb +m*X6y*Oχ-nHH@/ne33WktXv3ZH[p7j Or|[勮l:VM.B MPp<^*k"$or5 \+\J ,Dn.f iʄl9~7C5^MV" {g-:gg)sQb;=nS"`_zNt)R9Ӽ3 ZM,͛vKor+7qu6%,xuך`Fu/ 4?(l좪t]3XTkxJ e[lg$4u}n9#} xp}iZ&}Z_~ = f -{N(da28Cb|t,52LEct"*x2"\#]Lg"46ZH-îfCj8bPj1ejr'(PeQ¡{y &2n(w>6Uz5 %Ud`o Hӕ)e۩n6$J,x35Q_# ͢8TUmdĺ-=ğcBCOB#M[cTc1MU|9sL,Z:\Gfu](ǯ亘W\XѫT-i%O^ZIaLI#wdvhPAW](uoht6uFt?УQ EǙ5{5et)ns 5z) ryC:,Jhej,Aeٟ~Cx\IKhM7ֹW5+ު; ^r4.po7gz ZE#Y$RG8b "WÑ7,8k0pz[­1Bcmh.z}A!Գzܵ"kGET|k# «qI[϶i厁md|?_â䢜Ykx@0S_$p|P"c*_7}e(2nM CΧ a [,b`v9(<ѲY7mtRB55#g<·Z9n@6Buw8f¼=[jX*I"+&>9CH9Pjfkz&1h1 1_G~ E!Q'VL`Fr~)3g9>t¤%D9|Xi7P;DQ9.t~*,,hl(1edf@0埲Cd&R7~^:2<D5]H'X8Ў7E=4#7$ g,Fߏ4zAÒ? X;)|2};?%7s҂yyz #9'}eTָ5l } ,hPK6IûJ ow'*AEu]NT҇4ҙ^\goS{-n@J;Y0(`)myT]ZJDE읢gc1]*JWgTaб`Bw+N9 vM .#??K# p9Y/8T@؉y-wt>!/s}@K@?5u>x5#i\wh|s0f!Hw@J*{QAA' w[ ӥY2 pٗyHd¹E*,nw*(c #ûv: s9閵ɢ'jp׃Ith Qw[9#C:XaJ rx릌:a 26k@N}`Q䦡D\<7zjA^u|'5"4SC+=Zjf;ɍzTAgy瞦\M֯6xc}bPus}|$?ֿﳯVw쪃Լ'rˏi|M]$­]KwDfNH78єi<`+;DbD(;Rbo<wcwa̕' 2[}[.PC?iA|*x,ԭ qCR`ԠݻJ͋M~YJQڣy7: \y: .uIx 7*,CL:e/&*L|ӳf~)&^mǥ;|>~SH:WgAiyIE@25Qc"̖7j%K 4HC3Hj>R;o9>gҺIu )&# LSID; vCso;bf]Wdڹ, =Rk,Ȁ*dz² ?G0ֈ²;!Z_!θ~cX 0po(e>ֶl[7RBU+k*rN.L>dv\0!4 oBUZT8*Êw97wt0B`ys8!اѡA/ / $,&ͻs-{{9rE$RO删 4&`Mjj'ԯzn.!c`:I c*o@/؍FP& HpjA ϙkcnN]] zN^ηkz1m  =|+GTaSEB6Bqd`:j_kW%G=3g}WD.4pjU7mj[k-\Pgؕ˶܅os<(wq_Qh=W8/mvw%X^n7nH*<ˢK*Z"5f.k,sk:"kZa;%ą=@݉ YNHW>SwOXן/Q̡Q"ZmI.J}[4"8)q p9M^ʰ|LtFvo3C?Mp .e֩"P]:9]1u{n&(g.~?O)jVRE5>RCڱu9L2׬ a0Rjcm.V폗Twz#Ǎ$ "`ݢnnjUѳl1:\Qj!q yY QsX_tb6J;hC<9l.GMtN[4u0LUk*>]z[$u8E =ʬ ,d?YqY,}?x]EМ&K"o"pdYi}?iuF.<8fFZ=J?o#7<4 »5EVd9 PS?#y327)WVz"iXĂ,'ݡ[ƤZ?U(ԏB{e\OBGG2ӗXMD;wt7yTmyϮdG$vxҵ̺;ʗlhqUoƲI|5(~e۵8ѨA{oׁ8/+p6@ X=F].eXRcXFd RL AOg3e;śãNOg#T|aq?_(+tg=ܡzt@:i ]PU؋u_9 O{Y Xlߐԙu2rYCwj.1ҤEvig<&ӥ)p$I#? ~C~Eԋl6 輶S퟼&a쾂K7 *Toș:kq4h;6s[$p=Z3"WNtPu5bDw).Ӡe|4{C~u]+5aw˷-JͲ2&g#\gw۳>`vle)v9xU8bݐqf㟥a=8у&.,岊]Eh 6DgNW*i#h`z |]^azád؈%T@\'YXF#ٽ,(>LZtu&jFꜛi>KLOE떋n]\$mSlYOOdm1\P-PX_R.ƓUT2]'o޺tX}V,fWQ>.YR-Q\NvAÉ₥ח2)JouP>5j^uDR*t'|m77\u:fureE~1uP٧EpTDhg>rNEM?hinv(? l2۴!%?M 7Kd#xoZ>v9-eyF 2t*"2#(vrxטb@"H"C@d:{m}wYX L@y?E/qwsaGϺβ2dsg޿[D[ԳjY݈Whϼ!'].wdYRxz<2/h1T?Lb)U lOsF:647h0,Չo695#+^@kd]2XꖓzS /UĽk6)BtpDRiZOfv)ցrR+Oɠ`7x,.%;;@pNL(tSQwhxYD|1/,Ӵ'|͞nGP,xvo릨c9Sm9xưaCy>$0N3nMFԆ+C19$K) ]>A!OG=)nV1(E7XkMZnvr;} zVCNO0wN:$ 2L+XL_G8䚍O3*UUnC-d.uInEț Ru1݋!¤/J'~ P;g5 4tFS5AZ~ѹ7AD@dc仚Iw˼hivN}m87fW!\Wfp.^71yz%VaOğsK #2Ȳ$9?u (' QmR? P.`LR ձ1Zj!:!.< k,PiyMQS%{ uP-̉^*zPi-9D@ SlT$ 94fQY/jAaWmKp3\Rh(Y Vb;sْFe `֎~Ek-!1Rb+ Ot6;wiiϏM{ ,V=c=u guEH#׬4P]Gl!^G)I '0x☩4jC1>T:LHI6珁~ӈ9WKcX}R-? ̀pl &:’$"7b.ڿȝ'2"Uu33~#:PDS)>**I?X|' t.p)Ȼz}PϪ;c޼R"ILr6Tqt ZY-q:4d.`|77y+DmxבQPʝ>CDwɶ_jsgH[=:JΰI<d㍫D ütI s.& i?y`Hꉸ9 OX ɥ%j̀!aR#ET|/Xw%}?p:"6g } ]S)(e<P= uA$$jkr*lG>S"EÜ}* Sd49<$vo%R'68F}?oh*F%D *cRfF,p!$TLVCq@{^i[Q~5ilާvϚN8|Ke`Ԫͅ>%}W%Uf;Cg|#Xݏ}UT܏R W{?c522e;gmaJ9m_5 `gj^mi[ $1kYY[@КndJ4-f[F<][ 5JH1x+;-a0F w;3VW4E݁r.\X%>>D:ٸZŕ7 &]S\z80o] ^rWwJ1(XvdOs+33zةJIw}5kn㹫*ρ D23gDh4P  vx<ϝ~K%S*}E!xbG&if+-eV=y(3ScX֒9P+n);ƷQ4ItE< P.x7η*+Vo#4h S;IwxsxXf_$;3I:{ =љ\;ca<~mugb|[8rldX3 F) j!) 1Df/F p+Vh6JOì8p4{:4eʏN EF 5BZTAWCru:7oY'd \9gTWy>2ܵ4>q]$SؚB} +TrZ#[Da?]ΣQ{%t^zۭ#iqV>Ch9vKܛdƖg((r{fM .Jy/̫'(gM2I\F 4W(f Oo&݂"?6d{RRzKB!˩YM`ҟgu-yKKj-Nga8E"1Nayi/\:'3z T!WOyasʻir3"ZҺһf:dx'QePOz[1 I"\V%C}vnw{F*ܞHS= T`֑1zhr Mp'/=ww.,llVvr37 >xdI 18Q _.tlJ+!2Կ;Pj1`z79Wm,4|SrBYA V^ա23L_f`V .kd0`D~rbώ]¥֎G_!} _4c aIR U&.[ [NYBؘP|nI8 5wgSC` r% xg8>U7CF䥣A~*='jzӁGm5>. V(8vkJ/ * ܚWR{g֊VVt?C~Yk%)D?_)We/J(kfﴰ Z¼NmЙ_úq%QqQ&Mh =g9d.14k/"1n' l ȿ MWbiM7P#wDoMfߔ?PC]2\z~[c~mvY`0S OB~M<g5 ^yeR;28^uoEcH~Tygh XW%)%x\OFXu}yp` t i jSdw{yF%ݪ&,>##hޱB1XEV^⻔ׁ D2FT~eh^L ;ԅu [XVA湍(fdKwS@H>1.<ۛ=_V5Dntӌ|%蘡rL5׾9#ס>BA$TpF]K;wMNвCB7잸4lGiE\ܼ^:#H`;:Ad7J\\2܋qp_O(DKU+)V̆lM>97m)8"}y5Sx{q%7 s9w"n2ȌLvetNT=]罴7%IpN`ޢ .{2*ت(',: :O{GsTI?i2%5Ug!\/O܏v7t%0y7W0V˓PZ!_}3n cTMO6I9myi .3m2SxaDrc=+^ ՉLrsmIìT'b0# ؇D I ?T-vb1Nhi}z$c^)[ZUѓ%uL߾p|ȘeutJⓙIM:GU^&gGa1&ewz>ò@]j o;vD7 ?4?ze#vv `eSJS=z0Ԯ됢<~Z{7و;!&൏o.@$\C`;%|7d!#@^Uד _Q?xYz+:fTeqKזA갸z\1E3I8n(7\Džl}Z&W3VP/ `0z <@sLkc-pugb\ /;0[TC>ȍ6aaC0 5tBVn[H}!7IH@?SI+>ZTWR\Fru$`_)['q&#FiED^>#婙?@SJ* RgP2WS=q[GՅcJfz &F¡{_t;AP6cqGN.Sc3G"DQy4 ͔=W\m7b -j }&.Ajgk}D M-Ő(f_>حZ r;\:kLMM NIͲ|l,.EwrW~6 $ːAo-r+L,->ؾYZG>.uȬgK@>HjwJbA}w'ѺH1pQhThɃz`ޛnޓD ҵ9ArҨL@xB^7جR*[<gk@:+7]Px,H*"e)Ȕ8tXԤ\?vMήuPŤ:=7Ĭg>^9.TDiwJN ؒ@X vmK 3rs-`ngyLɸ.C|+O؍mh%{zq\ɨq~PuhW1v0#CsF`G`GFibNj&`fg9fu]q^9VF\  e%w*m=G`{];\P7\MoXWEm/Z_,ryw/ݝn߉&%g| vp F{I,T54@zPʽ<K}tRbCo.ѫg81ث# k; F}wdkp5ȀòWo1΁ϲe@-U8'<﵁ bDܜ'~ro[qlsDs,$5M^cħ l)4d7'bS}J{ ]M%z77/&1sh/-pFOy&"'o-Etn [Rtždwf .rt6 ܳS4[#<݉QqTS2*&<#R$CI 6>x=;S@QQfAPna; I(Ѕ+|zn [cIVڇ|-]z?5mGU<0>}((%`>}8 tFa+0-Ku(vrGx䜱s1!==jϲ4l5k8"EL*gFl4%*TMeJCrؔO u8TAx>߈'6~\.,UQ | f9K))Q_NCzl^糧YʭYLNܣh~yNv[OKT_gB#Wm[w9).^ȺM&`aʕծڪ8a}NRqC1.W-Ae֋ʐŔ.%lM9PB4FEs[98g{ێ<]8!@Q˲\S@`8ͅrv76r<֝IF".k6 bF4A,]qVH22ɗ=%;Պ[i~( C0wwnq^*oz; f :2Иeeҗx`.RRb*YC)=0m%kkvbֆ3Ht,1/ѣ: \WNu2߳cwf7gQe* w R4w<>$2!zxЎ68 Q|h)uFb{ƄYFƵUU*=%$ڽi(& 'b Q݀ڗR]s{Abьe!a(-ޕI>mح{ u$A// zd\nԽ)#vU#:4/h]A Ê2HۡiM6kU9DLI9Ee2Y(= X?IH)ɯ8"  _LL\l}G&ązR uf다֧T<cpFZIpu`P W`[-tv[hnhObp'_G_^VOV1壔YjTC2|uWo>+YG P)_yIy[*p%+k 6)OKBÐMlrX~d/킿0vC6J aJ xݲ|31.g^wX(vcUAe{wap SˎjeG'rx~F4<]L 37E&rmzB^v|gq}G5g y2bmk`lBX$2D 0ex ɏ[݈(LHn95OqЁS=GֽW9EQ :jt|/斎 "z3xZ&#V6ʿ Q!SΠ;7|SI|]@YF~DpFZHN )OGPᴸdO0ԍ Hּ+au)ouOs!?8suj8]zjkctI'iĺ0+|Qp]?]ԥecQ=% ,Ĵ[BoQEWd]Ln|pXS<2j٧bƣ0kqt"}0+2+@H7;F7T&}ymFaa+_3 &%jM`>' 8e!n`ֺBZT Ă5ski}bǼUT$i``7U!zr߀e'q=fJEphqDy! IP@^^rKW '])Ԏ;!Cu4w"@JЅ4>gt_v5Ox_g'I`0\"sۛ9kEFP䊦Hk>J-L;K' مg,LP,>[;F6lZ'xt̜f[e؟EXi zŅys%y.@#>lRϧ8Ǜ Aу[,+plR[RH4% fНtCG1 ]!%=̾~fS^jA7mHMYIq˔|IRRO^&)6JGpc^f| I~;QmB^4.:CUt6^9̑xLbH"2r`U3:ʰ&YnŏД6%>K!ch aGC4;6u%B1PO{gᕉdHt{ ڽq1Muzlzh5f&|Jf$Ӂ WۗO>y.pxύ͝Zx*=?1Kh6`Kɂd +VO2i1j4x1.ZjdM//%g66U^ <O4(.@!YoJSҁ6'!;#b甁vb)Tc6uzSMިu|R/*__  2Lc?*7qQK xZF0*?̯#&*[ 0d!x`L7vR_?Zt< .c˒txڪUB0>cHo8xO;ol nƱW %uX*_1_qJ*"dM;؝C=sxX|D<ۛk2eg͏Vp#EHzϾAD>RCK͘v?dN(en\<ΫJ^BPs{o8(`f+/@oi7v扷<=z v=#i\0`>P/2G(e/9#Toss@dIjXF*kOiﱍ>? `ʝO ;;Cc1,ɯfMWDv{C8<3a"p.ZTW<"hbeEJ'5?_F3 c[n*?цw_1AaKr8V14RQmx ;Ƨ]d!Rg%j,iu2)ЂӚk]