From 23a1b4ad2a28f091e6e1a700358923bc51e7173d Mon Sep 17 00:00:00 2001 From: eKisNonos Date: Sat, 19 Sep 2026 00:16:27 +0200 Subject: [PATCH 1/4] linux: record a signal disposition, and never claim to deliver one A runtime installs handlers before main and checks the return. Answering ENOSYS made programs abort at startup that would otherwise have run to completion, because most of them never raise anything. rt_sigaction, rt_sigprocmask and sigaltstack now succeed and record what was asked. Nothing is ever raised. Delivery means pushing a frame onto a guest thread's stack and redirecting it, and the trap mechanism hands out a register frame without any way to rewrite one, so it cannot be done from here yet. That limit is written in the file rather than hidden behind the success: a program that depends on SIGALRM will hang rather than misbehave quietly, which is the failure that can be diagnosed. SIGKILL and SIGSTOP are refused as uncatchable, as Linux refuses them. --- userland/capsule_linux/src/linux/call/mod.rs | 2 + .../capsule_linux/src/linux/call/signal.rs | 69 +++++++++++++++++++ .../capsule_linux/src/linux/guest/handle.rs | 4 ++ .../capsule_linux/src/linux/serve/table.rs | 3 + 4 files changed, 78 insertions(+) create mode 100644 userland/capsule_linux/src/linux/call/signal.rs diff --git a/userland/capsule_linux/src/linux/call/mod.rs b/userland/capsule_linux/src/linux/call/mod.rs index 385a49baa..c7e305b1b 100644 --- a/userland/capsule_linux/src/linux/call/mod.rs +++ b/userland/capsule_linux/src/linux/call/mod.rs @@ -28,6 +28,7 @@ mod map_req; mod memory; mod futex; mod prot; +mod signal; mod thread; mod uname; mod vector; @@ -41,6 +42,7 @@ pub use map::mmap; pub use map_req::MapReq; pub use memory::{brk, munmap}; pub use prot::mprotect; +pub use signal::{rt_sigaction, rt_sigprocmask, sigaltstack}; pub use thread::{arch_prctl, clock_gettime, getrandom}; pub use uname::uname; pub use vector::writev; diff --git a/userland/capsule_linux/src/linux/call/signal.rs b/userland/capsule_linux/src/linux/call/signal.rs new file mode 100644 index 000000000..9ad517d36 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/signal.rs @@ -0,0 +1,69 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Signal dispositions, recorded and never delivered. +//! +//! Delivery means pushing a frame onto a guest thread's stack and +//! redirecting it, which needs the guest's register state, and the trap +//! mechanism hands out a frame but no way to rewrite one. So the +//! handlers a program installs are remembered and nothing is ever +//! raised. That is a real limit and it is recorded here rather than +//! hidden behind a success: a program whose correctness depends on +//! SIGALRM firing will hang, not misbehave quietly. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// Linux refuses to let these two be caught, and so does this. +const SIGKILL: u64 = 9; +const SIGSTOP: u64 = 19; + +/// The largest signal number Linux defines. +const NSIG: u64 = 64; + +pub fn rt_sigaction(guest: &mut Guest, signum: u64, act: u64, old: u64) -> u64 { + if signum == 0 || signum > NSIG || signum == SIGKILL || signum == SIGSTOP { + return errno::fail(errno::EINVAL); + } + if old != 0 && guest.write(old, &[0u8; SIGACTION_LEN]) < SIGACTION_LEN as i64 { + return errno::fail(errno::EFAULT); + } + if act != 0 { + guest.handlers[signum as usize - 1] = true; + } + errno::ok(0) +} + +/// `struct sigaction` on x86_64: handler, flags, restorer, mask. +const SIGACTION_LEN: usize = 32; + +/// The mask is recorded nowhere because nothing is ever raised against +/// it. Reporting an empty old mask is true: no signal is pending. +pub fn rt_sigprocmask(guest: &Guest, old: u64) -> u64 { + if old != 0 && guest.write(old, &[0u8; 8]) < 8 { + return errno::fail(errno::EFAULT); + } + errno::ok(0) +} + +/// An alternate stack for a handler that will never run. +pub fn sigaltstack(guest: &Guest, old: u64) -> u64 { + if old != 0 && guest.write(old, &[0u8; 24]) < 24 { + return errno::fail(errno::EFAULT); + } + errno::ok(0) +} diff --git a/userland/capsule_linux/src/linux/guest/handle.rs b/userland/capsule_linux/src/linux/guest/handle.rs index 41264da24..9999dbd63 100644 --- a/userland/capsule_linux/src/linux/guest/handle.rs +++ b/userland/capsule_linux/src/linux/guest/handle.rs @@ -37,6 +37,9 @@ pub struct Guest { pub threads: Vec, /// Threads parked in a futex wait, with the word they wait on. pub waits: Vec<(u32, u64)>, + /// Which signals the guest installed a handler for. Nothing is ever + /// raised against them; see `call::signal`. + pub handlers: [bool; 64], /// What a relative path is relative to. pub cwd: Vec, /// Where the guest last asked its thread pointer to be set. @@ -54,6 +57,7 @@ impl Guest { fds: Fd::standard(), threads: Vec::new(), waits: Vec::new(), + handlers: [false; 64], cwd: alloc::vec![b'/'], fs_base: 0, exited: None, diff --git a/userland/capsule_linux/src/linux/serve/table.rs b/userland/capsule_linux/src/linux/serve/table.rs index 2c805d109..8fae932cc 100644 --- a/userland/capsule_linux/src/linux/serve/table.rs +++ b/userland/capsule_linux/src/linux/serve/table.rs @@ -47,6 +47,9 @@ pub fn plain(guest: &mut Guest, nr: u64, a: [u64; 6]) -> u64 { nr::MMAP => call::mmap(guest, call::MapReq::from_args(a)), nr::MUNMAP => call::munmap(guest, a[0], a[1]), nr::MPROTECT => call::mprotect(guest, a[0], a[1], a[2]), + nr::RT_SIGACTION => call::rt_sigaction(guest, a[0], a[1], a[2]), + nr::RT_SIGPROCMASK => call::rt_sigprocmask(guest, a[2]), + nr::SIGALTSTACK => call::sigaltstack(guest, a[1]), nr::MADVISE | nr::RSEQ | nr::SET_ROBUST_LIST => errno::ok(0), nr::ARCH_PRCTL => call::arch_prctl(guest, a[0], a[1]), nr::SET_TID_ADDRESS | nr::GETTID | nr::GETPID => errno::ok(guest.pid as u64), From 6b2551903cc84829eda90a0e0b7c574f338ad68e Mon Sep 17 00:00:00 2001 From: eKisNonos Date: Sat, 19 Sep 2026 00:21:29 +0200 Subject: [PATCH 2/4] linux: sockets and poll, over the service that already has them net.sockets offers socket, connect, send, recv, close and a readiness poll, keyed by the caller's pid, which maps onto the Linux calls almost one to one. A guest's descriptor now holds a handle that service issued to this capsule, so a guest reaches only the sockets opened for it. read and write route by descriptor kind, so a program that treats a socket as a file, which most do, works without knowing the difference. Closing one closes the handle behind it. poll answers for every descriptor. A file or a console is always ready, which is what Linux reports too. A socket is asked one handle at a time, because that is the shape of the readiness call the service serves, and inventing a batched form here would mean a second protocol with nobody on the other end. The opcodes are transcribed rather than imported: the server is a binary and its protocol module is not a library. The file they came from is named beside them, since a number that changes there and not here is a wrong operation rather than a failed one. --- userland/capsule_linux/src/linux/abi/errno.rs | 2 + userland/capsule_linux/src/linux/abi/name.rs | 3 + userland/capsule_linux/src/linux/abi/nr.rs | 5 ++ userland/capsule_linux/src/linux/call/io.rs | 8 +++ .../capsule_linux/src/linux/call/io_socket.rs | 37 +++++++++++ userland/capsule_linux/src/linux/call/mod.rs | 1 + userland/capsule_linux/src/linux/guest/fd.rs | 4 ++ .../capsule_linux/src/linux/guest/fd_make.rs | 7 ++ .../capsule_linux/src/linux/guest/threads.rs | 9 +++ userland/capsule_linux/src/linux/mod.rs | 1 + userland/capsule_linux/src/linux/net/addr.rs | 38 +++++++++++ userland/capsule_linux/src/linux/net/call.rs | 52 +++++++++++++++ .../capsule_linux/src/linux/net/connect.rs | 45 +++++++++++++ userland/capsule_linux/src/linux/net/mod.rs | 34 ++++++++++ userland/capsule_linux/src/linux/net/ops.rs | 34 ++++++++++ userland/capsule_linux/src/linux/net/poll.rs | 62 +++++++++++++++++ .../capsule_linux/src/linux/net/poll_set.rs | 47 +++++++++++++ .../capsule_linux/src/linux/net/socket.rs | 58 ++++++++++++++++ .../capsule_linux/src/linux/net/stream.rs | 66 +++++++++++++++++++ .../capsule_linux/src/linux/serve/table.rs | 7 ++ 20 files changed, 520 insertions(+) create mode 100644 userland/capsule_linux/src/linux/call/io_socket.rs create mode 100644 userland/capsule_linux/src/linux/net/addr.rs create mode 100644 userland/capsule_linux/src/linux/net/call.rs create mode 100644 userland/capsule_linux/src/linux/net/connect.rs create mode 100644 userland/capsule_linux/src/linux/net/mod.rs create mode 100644 userland/capsule_linux/src/linux/net/ops.rs create mode 100644 userland/capsule_linux/src/linux/net/poll.rs create mode 100644 userland/capsule_linux/src/linux/net/poll_set.rs create mode 100644 userland/capsule_linux/src/linux/net/socket.rs create mode 100644 userland/capsule_linux/src/linux/net/stream.rs diff --git a/userland/capsule_linux/src/linux/abi/errno.rs b/userland/capsule_linux/src/linux/abi/errno.rs index 0c53b7f80..04cb8def2 100644 --- a/userland/capsule_linux/src/linux/abi/errno.rs +++ b/userland/capsule_linux/src/linux/abi/errno.rs @@ -43,6 +43,8 @@ pub const ESPIPE: i64 = 29; pub const EPIPE: i64 = 32; pub const ERANGE: i64 = 34; pub const ENOSYS: i64 = 38; +pub const ECONNRESET: i64 = 104; +pub const ENOTSOCK: i64 = 88; pub const ENOTSUP: i64 = 95; pub const EAFNOSUPPORT: i64 = 97; pub const ECONNREFUSED: i64 = 111; diff --git a/userland/capsule_linux/src/linux/abi/name.rs b/userland/capsule_linux/src/linux/abi/name.rs index edcc49a64..aa8471a22 100644 --- a/userland/capsule_linux/src/linux/abi/name.rs +++ b/userland/capsule_linux/src/linux/abi/name.rs @@ -57,6 +57,9 @@ pub fn of(number: u64) -> &'static [u8] { nr::CLOCK_GETTIME => b"clock_gettime", nr::EXIT_GROUP => b"exit_group", nr::CLONE => b"clone", + nr::SOCKET => b"socket", + nr::CONNECT => b"connect", + nr::POLL => b"poll", nr::GETDENTS64 => b"getdents64", nr::OPENAT => b"openat", nr::NEWFSTATAT => b"newfstatat", diff --git a/userland/capsule_linux/src/linux/abi/nr.rs b/userland/capsule_linux/src/linux/abi/nr.rs index 61b68eb7a..2f05e40d2 100644 --- a/userland/capsule_linux/src/linux/abi/nr.rs +++ b/userland/capsule_linux/src/linux/abi/nr.rs @@ -40,6 +40,11 @@ pub const READV: u64 = 19; pub const WRITEV: u64 = 20; pub const ACCESS: u64 = 21; pub const MADVISE: u64 = 28; +pub const SOCKET: u64 = 41; +pub const CONNECT: u64 = 42; +pub const SENDTO: u64 = 44; +pub const RECVFROM: u64 = 45; +pub const SHUTDOWN: u64 = 48; pub const NANOSLEEP: u64 = 35; pub const GETPID: u64 = 39; pub const CLONE: u64 = 56; diff --git a/userland/capsule_linux/src/linux/call/io.rs b/userland/capsule_linux/src/linux/call/io.rs index c046eb9fa..82dcdbcde 100644 --- a/userland/capsule_linux/src/linux/call/io.rs +++ b/userland/capsule_linux/src/linux/call/io.rs @@ -21,6 +21,9 @@ use crate::linux::abi::errno; use crate::linux::file; +use crate::linux::net; + +use super::io_socket::{socket_read, socket_write}; use crate::linux::guest::{Guest, Kind}; /// Cap on one transfer, matching the kernel's own peer-copy ceiling. @@ -30,6 +33,7 @@ pub fn write(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { match guest.fds.get(fd as usize).map(|f| &f.kind) { Some(Kind::Stdout) | Some(Kind::Stderr) => console(guest, buf, len), Some(Kind::File) => file::write(guest, fd, buf, len), + Some(Kind::Socket) => socket_write(guest, fd, buf, len), Some(Kind::Dir) => errno::fail(errno::EISDIR), _ => errno::fail(errno::EBADF), } @@ -54,11 +58,15 @@ pub fn read(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { // Nothing is typed at a guest yet, and end of file is the truth. Some(Kind::Stdin) => errno::ok(0), Some(Kind::File) => file::read(guest, fd, buf, len), + Some(Kind::Socket) => socket_read(guest, fd, buf, len), Some(Kind::Dir) => errno::fail(errno::EISDIR), _ => errno::fail(errno::EBADF), } } pub fn close(guest: &mut Guest, fd: u64) -> u64 { + if let Some(h) = guest.socket_handle(fd) { + net::close(h); + } file::close(guest, fd) } diff --git a/userland/capsule_linux/src/linux/call/io_socket.rs b/userland/capsule_linux/src/linux/call/io_socket.rs new file mode 100644 index 000000000..e55b9ebf7 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/io_socket.rs @@ -0,0 +1,37 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Reads and writes that land on a socket rather than a file. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::net; + +pub(super) fn socket_write(guest: &Guest, fd: u64, buf: u64, len: u64) -> u64 { + match guest.socket_handle(fd) { + Some(h) => net::send(guest, h, buf, len), + None => errno::fail(errno::EBADF), + } +} + +pub(super) fn socket_read(guest: &Guest, fd: u64, buf: u64, len: u64) -> u64 { + match guest.socket_handle(fd) { + Some(h) => net::recv(guest, h, buf, len), + None => errno::fail(errno::EBADF), + } +} + diff --git a/userland/capsule_linux/src/linux/call/mod.rs b/userland/capsule_linux/src/linux/call/mod.rs index c7e305b1b..007af4f1a 100644 --- a/userland/capsule_linux/src/linux/call/mod.rs +++ b/userland/capsule_linux/src/linux/call/mod.rs @@ -22,6 +22,7 @@ mod io; mod life; mod clone; mod ctl; +mod io_socket; mod map; mod map_file; mod map_req; diff --git a/userland/capsule_linux/src/linux/guest/fd.rs b/userland/capsule_linux/src/linux/guest/fd.rs index 7fb371037..d81cc2cd3 100644 --- a/userland/capsule_linux/src/linux/guest/fd.rs +++ b/userland/capsule_linux/src/linux/guest/fd.rs @@ -37,6 +37,8 @@ pub enum Kind { File, /// A directory, listed once when it was opened. Dir, + /// A socket net.sockets issued to this capsule. + Socket, } pub struct Fd { @@ -55,6 +57,8 @@ pub struct Fd { pub names: Vec, /// Set when the guest asked to write, so close knows to flush. pub writable: bool, + /// The net.sockets handle behind a socket descriptor. + pub handle: u32, } impl Fd { diff --git a/userland/capsule_linux/src/linux/guest/fd_make.rs b/userland/capsule_linux/src/linux/guest/fd_make.rs index 8d8c6835d..d3a2984be 100644 --- a/userland/capsule_linux/src/linux/guest/fd_make.rs +++ b/userland/capsule_linux/src/linux/guest/fd_make.rs @@ -40,6 +40,12 @@ impl Fd { fd } + pub fn socket(handle: u32) -> Fd { + let mut fd = Fd::empty(Kind::Socket); + fd.handle = handle; + fd + } + pub fn dir(path: Vec, names: Vec) -> Fd { let mut fd = Fd::empty(Kind::Dir); fd.path = path; @@ -59,6 +65,7 @@ impl Fd { pending: Vec::new(), names: Vec::new(), writable: false, + handle: 0, } } } diff --git a/userland/capsule_linux/src/linux/guest/threads.rs b/userland/capsule_linux/src/linux/guest/threads.rs index 6109f8bb4..4bef8fd9b 100644 --- a/userland/capsule_linux/src/linux/guest/threads.rs +++ b/userland/capsule_linux/src/linux/guest/threads.rs @@ -19,9 +19,18 @@ use nonos_libc::mk_foreign_reply; +use super::fd::Kind; use super::handle::Guest; impl Guest { + /// The net.sockets handle behind `fd`, if it is a socket. + pub fn socket_handle(&self, fd: u64) -> Option { + match self.fds.get(fd as usize) { + Some(f) if f.kind == Kind::Socket => Some(f.handle), + _ => None, + } + } + /// True for the guest and for every thread of it, which is what the /// serve loop needs: a trap arrives under the thread's own tid. pub fn owns(&self, pid: u32) -> bool { diff --git a/userland/capsule_linux/src/linux/mod.rs b/userland/capsule_linux/src/linux/mod.rs index a86816ef4..bea995c5e 100644 --- a/userland/capsule_linux/src/linux/mod.rs +++ b/userland/capsule_linux/src/linux/mod.rs @@ -21,6 +21,7 @@ mod abi; mod call; mod file; mod guest; +mod net; mod image; pub mod serve; mod source; diff --git a/userland/capsule_linux/src/linux/net/addr.rs b/userland/capsule_linux/src/linux/net/addr.rs new file mode 100644 index 000000000..330c461cf --- /dev/null +++ b/userland/capsule_linux/src/linux/net/addr.rs @@ -0,0 +1,38 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `struct sockaddr_in` out of a guest. + +use crate::linux::guest::Guest; + +/// family(2) port(2) addr(4), and the rest of the sixteen bytes unused. +const SOCKADDR_IN: usize = 16; +const AF_INET: u16 = 2; + +/// Port in network order and address in network order, which is the +/// order net.sockets wants as well, so neither is byte swapped here. +pub fn inet(guest: &Guest, at: u64, len: u64) -> Option<(u16, [u8; 4])> { + if len < SOCKADDR_IN as u64 { + return None; + } + let raw = guest.read(at, SOCKADDR_IN)?; + if u16::from_le_bytes([raw[0], raw[1]]) != AF_INET { + return None; + } + let port = u16::from_be_bytes([raw[2], raw[3]]); + Some((port, [raw[4], raw[5], raw[6], raw[7]])) +} diff --git a/userland/capsule_linux/src/linux/net/call.rs b/userland/capsule_linux/src/linux/net/call.rs new file mode 100644 index 000000000..2383aeae1 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/call.rs @@ -0,0 +1,52 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! One round trip to net.sockets. +//! +//! Sockets there are keyed by the caller's pid, so every handle belongs +//! to this capsule and a guest can only reach one through a descriptor +//! this capsule gave it. + +use alloc::{vec, vec::Vec}; + +use nonos_app_skeleton::discover::lookup_service; +use nonos_app_skeleton::wire::{build_request, HDR_LEN}; +use nonos_libc::mk_ipc_call; + +/// Keep in sync with CAPSULE_SERVICE_ENDPOINT in +/// userland/capsule_net_sockets/Capsule.mk. +const FIXED_PORT: u32 = 4460; +const NAME: &[u8] = b"net.sockets"; +const MAGIC: u32 = 0x4E53_4B54; + +/// Status is a u16 at offset 8 of the reply header, payload at 20. +const STATUS_AT: usize = 8; + +pub fn call(op: u16, body: &[u8], want: usize) -> Option<(u16, Vec)> { + let port = match lookup_service(NAME) { + Some(peer) if peer.port != 0 => peer.port, + _ => FIXED_PORT, + }; + let tx = build_request(MAGIC, op, 1, body); + let mut rx = vec![0u8; HDR_LEN + want]; + let n = mk_ipc_call(port as u64, tx.as_ptr(), tx.len(), rx.as_mut_ptr(), rx.len()); + if n < HDR_LEN as i64 { + return None; + } + let status = u16::from_le_bytes([rx[STATUS_AT], rx[STATUS_AT + 1]]); + Some((status, rx[HDR_LEN..n as usize].to_vec())) +} diff --git a/userland/capsule_linux/src/linux/net/connect.rs b/userland/capsule_linux/src/linux/net/connect.rs new file mode 100644 index 000000000..1601ae2eb --- /dev/null +++ b/userland/capsule_linux/src/linux/net/connect.rs @@ -0,0 +1,45 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `connect`, for a socket the guest opened here. + +use alloc::vec::Vec; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::addr::inet; +use super::call::call; +use super::ops::OP_CONNECT; + +pub fn connect(guest: &mut Guest, fd: u64, at: u64, len: u64) -> u64 { + let Some(handle) = guest.socket_handle(fd) else { + return errno::fail(errno::ENOTSOCK); + }; + let Some((port, ip)) = inet(guest, at, len) else { + return errno::fail(errno::EAFNOSUPPORT); + }; + let mut body = Vec::with_capacity(10); + body.extend_from_slice(&handle.to_le_bytes()); + body.extend_from_slice(&ip); + body.extend_from_slice(&port.to_le_bytes()); + match call(OP_CONNECT, &body, 0) { + Some((0, _)) => errno::ok(0), + Some(_) => errno::fail(errno::ECONNREFUSED), + None => errno::fail(errno::EIO), + } +} diff --git a/userland/capsule_linux/src/linux/net/mod.rs b/userland/capsule_linux/src/linux/net/mod.rs new file mode 100644 index 000000000..3287df563 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/mod.rs @@ -0,0 +1,34 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Sockets, over the net.sockets service. A guest's descriptor holds a +//! handle that service issued to this capsule, so a guest reaches only +//! the sockets this capsule opened for it. + +mod addr; +mod call; +mod connect; +mod ops; +mod poll; +mod poll_set; +mod socket; +mod stream; + +pub use connect::connect; +pub use poll_set::poll; +pub use socket::socket; +pub use stream::{close, recv, send}; diff --git a/userland/capsule_linux/src/linux/net/ops.rs b/userland/capsule_linux/src/linux/net/ops.rs new file mode 100644 index 000000000..f91f099ef --- /dev/null +++ b/userland/capsule_linux/src/linux/net/ops.rs @@ -0,0 +1,34 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The net.sockets opcodes this capsule uses. +//! +//! Transcribed from userland/capsule_net_sockets/src/protocol/ops.rs. The +//! server is a separate binary and its protocol module is not a library, +//! so these cannot be imported; a number changed there and not here is a +//! wrong operation, which is why the source is named. + +pub const OP_SOCKET: u16 = 2; +pub const OP_CONNECT: u16 = 6; +pub const OP_SEND: u16 = 7; +pub const OP_RECV: u16 = 8; +pub const OP_CLOSE: u16 = 9; +pub const OP_POLL: u16 = 13; + +/// What OP_POLL reports: a recv would return data, a send would take it. +pub const POLL_READABLE: u8 = 1; +pub const POLL_WRITABLE: u8 = 2; diff --git a/userland/capsule_linux/src/linux/net/poll.rs b/userland/capsule_linux/src/linux/net/poll.rs new file mode 100644 index 000000000..79c524bad --- /dev/null +++ b/userland/capsule_linux/src/linux/net/poll.rs @@ -0,0 +1,62 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `poll` over the guest's descriptors. +//! +//! A console or a file is always ready, which is what Linux reports for +//! them too. A socket is asked, one call per descriptor: net.sockets +//! reports readiness for one handle at a time and inventing a batched +//! form here would mean a second protocol nobody serves. + +use crate::linux::abi::errno; +use crate::linux::guest::{Guest, Kind}; + +use super::call::call; +use super::ops::{OP_POLL, POLL_READABLE, POLL_WRITABLE}; + +const POLLIN: u16 = 0x001; +const POLLOUT: u16 = 0x004; +const POLLNVAL: u16 = 0x020; + +/// What `fd` can do right now, in poll's bits. +pub fn ready(guest: &Guest, fd: u64) -> u16 { + match guest.fds.get(fd as usize).map(|f| &f.kind) { + Some(Kind::Free) | None => POLLNVAL, + Some(Kind::Socket) => match guest.socket_handle(fd) { + Some(handle) => socket_bits(handle), + None => POLLNVAL, + }, + Some(_) => POLLIN | POLLOUT, + } +} + +fn socket_bits(handle: u32) -> u16 { + let Some((0, out)) = call(OP_POLL, &handle.to_le_bytes(), 1) else { + return 0; + }; + let Some(bits) = out.first() else { + return 0; + }; + let mut set = 0; + if bits & POLL_READABLE != 0 { + set |= POLLIN; + } + if bits & POLL_WRITABLE != 0 { + set |= POLLOUT; + } + set +} diff --git a/userland/capsule_linux/src/linux/net/poll_set.rs b/userland/capsule_linux/src/linux/net/poll_set.rs new file mode 100644 index 000000000..dc7bc808d --- /dev/null +++ b/userland/capsule_linux/src/linux/net/poll_set.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Walking a guest's `struct pollfd` array. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::poll::ready; + +/// fd, events, revents. +const POLLFD_LEN: usize = 8; +const POLLNVAL: u16 = 0x020; + +pub fn poll(guest: &mut Guest, at: u64, count: u64) -> u64 { + let mut hits = 0; + for i in 0..count { + let entry = at + i * POLLFD_LEN as u64; + let Some(raw) = guest.read(entry, POLLFD_LEN) else { + return errno::fail(errno::EFAULT); + }; + let fd = u32::from_le_bytes([raw[0], raw[1], raw[2], raw[3]]) as u64; + let events = u16::from_le_bytes([raw[4], raw[5]]); + let revents = ready(guest, fd) & (events | POLLNVAL); + if revents != 0 { + hits += 1; + } + if guest.write(entry + 6, &revents.to_le_bytes()) < 2 { + return errno::fail(errno::EFAULT); + } + } + errno::ok(hits) +} diff --git a/userland/capsule_linux/src/linux/net/socket.rs b/userland/capsule_linux/src/linux/net/socket.rs new file mode 100644 index 000000000..be98b7f71 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/socket.rs @@ -0,0 +1,58 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `socket` and `connect`, over net.sockets. + +use alloc::vec::Vec; + +use super::ops::OP_SOCKET; + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest}; + +use super::call::call; + +const AF_INET: u64 = 2; +const SOCK_STREAM: u64 = 1; +const SOCK_DGRAM: u64 = 2; +/// Linux ORs these into the type; neither changes what is opened here. +const TYPE_MASK: u64 = 0xFF; + +pub fn socket(guest: &mut Guest, family: u64, kind: u64) -> u64 { + if family != AF_INET { + return errno::fail(errno::EAFNOSUPPORT); + } + let want = match kind & TYPE_MASK { + SOCK_STREAM => 1u16, + SOCK_DGRAM => 2u16, + _ => return errno::fail(errno::ENOSYS), + }; + let mut body = Vec::with_capacity(4); + body.extend_from_slice(&4u16.to_le_bytes()); + body.extend_from_slice(&want.to_le_bytes()); + let Some((status, out)) = call(OP_SOCKET, &body, 8) else { + return errno::fail(errno::EIO); + }; + if status != 0 || out.len() < 4 { + return errno::fail(errno::ENOMEM); + } + let handle = u32::from_le_bytes([out[0], out[1], out[2], out[3]]); + match crate::linux::file::install(guest, Fd::socket(handle)) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} diff --git a/userland/capsule_linux/src/linux/net/stream.rs b/userland/capsule_linux/src/linux/net/stream.rs new file mode 100644 index 000000000..94c6effd5 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/stream.rs @@ -0,0 +1,66 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Bytes on and off a connected socket. + +use alloc::vec::Vec; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::call::call; +use super::ops::{OP_CLOSE, OP_RECV, OP_SEND}; + +/// One transfer. The server's reply buffer is the ceiling, not this. +const MAX_IO: u64 = 32 << 10; + +pub fn send(guest: &Guest, handle: u32, buf: u64, len: u64) -> u64 { + let take = len.min(MAX_IO); + let Some(bytes) = guest.read(buf, take as usize) else { + return errno::fail(errno::EFAULT); + }; + let mut body = Vec::with_capacity(4 + bytes.len()); + body.extend_from_slice(&handle.to_le_bytes()); + body.extend_from_slice(&bytes); + match call(OP_SEND, &body, 0) { + Some((0, _)) => errno::ok(take), + Some(_) => errno::fail(errno::EPIPE), + None => errno::fail(errno::EIO), + } +} + +pub fn recv(guest: &Guest, handle: u32, buf: u64, len: u64) -> u64 { + let want = len.min(MAX_IO) as usize; + let Some((status, bytes)) = call(OP_RECV, &handle.to_le_bytes(), want) else { + return errno::fail(errno::EIO); + }; + if status != 0 { + return errno::fail(errno::ECONNRESET); + } + if bytes.is_empty() { + return errno::ok(0); + } + let n = bytes.len().min(want); + if guest.write(buf, &bytes[..n]) < n as i64 { + return errno::fail(errno::EFAULT); + } + errno::ok(n as u64) +} + +pub fn close(handle: u32) { + let _ = call(OP_CLOSE, &handle.to_le_bytes(), 0); +} diff --git a/userland/capsule_linux/src/linux/serve/table.rs b/userland/capsule_linux/src/linux/serve/table.rs index 8fae932cc..7c1f99a86 100644 --- a/userland/capsule_linux/src/linux/serve/table.rs +++ b/userland/capsule_linux/src/linux/serve/table.rs @@ -22,6 +22,7 @@ use crate::linux::call; use crate::linux::file; use crate::linux::file::flags; use crate::linux::guest::Guest; +use crate::linux::net; pub fn plain(guest: &mut Guest, nr: u64, a: [u64; 6]) -> u64 { match nr { @@ -29,6 +30,12 @@ pub fn plain(guest: &mut Guest, nr: u64, a: [u64; 6]) -> u64 { nr::WRITEV => call::writev(guest, a[0], a[1], a[2]), nr::READ => call::read(guest, a[0], a[1], a[2]), nr::CLOSE => call::close(guest, a[0]), + nr::SOCKET => net::socket(guest, a[0], a[1]), + nr::CONNECT => net::connect(guest, a[0], a[1], a[2]), + nr::SENDTO => call::write(guest, a[0], a[1], a[2]), + nr::RECVFROM => call::read(guest, a[0], a[1], a[2]), + nr::POLL => net::poll(guest, a[0], a[1]), + nr::SHUTDOWN => call::close(guest, a[0]), nr::OPENAT => file::openat(guest, a[0], a[1], a[2]), nr::OPEN => file::openat(guest, flags::AT_FDCWD, a[0], a[1]), nr::LSEEK => file::lseek(guest, a[0], a[1], a[2]), From de5a310effd935cf86e7a602adecbf20a8216d28 Mon Sep 17 00:00:00 2001 From: eKisNonos Date: Sun, 20 Sep 2026 12:00:00 +0200 Subject: [PATCH 3/4] process: hold the supervised asid for the length of the call supervised_asid returned an asid and dropped the lock that made it true, so peer map, unmap, copy and protect all ran against an asid the supervisor no longer held. It returns the guard with it now. The entry stub saves the callee-saved five plus a pad so a forked child resumes on the parent's register state. Nothing else on the path writes them to memory and a handler's prologue may already be using them, so it happens in the stub or not at all. Six slots keeps the frame 16-byte aligned and leaves existing offsets alone. libc gains wrappers for foreign exec, fork and resume, peer TLS and unmap, and the local signing and consent calls. --- abi/syscalls.toml | 155 ++++++++++++------- src/arch/x86_64/asm/syscall.S | 42 ++++- src/arch/x86_64/syscall/manager/entry.rs | 24 +-- src/process/foreign/exec.rs | 67 ++++++++ src/process/foreign/exec_context.rs | 50 ++++++ src/process/foreign/exec_enter.rs | 57 +++++++ src/process/foreign/fork.rs | 52 +++++++ src/process/foreign/frame_cpu.rs | 38 +++++ src/process/foreign/frame_snapshot.rs | 73 +++++++++ src/process/foreign/mod.rs | 31 ++-- src/process/foreign/peer_copy.rs | 12 +- src/process/foreign/peer_guard.rs | 32 ++-- src/process/foreign/peer_lock.rs | 32 ++++ src/process/foreign/peer_map.rs | 14 +- src/process/foreign/peer_protect.rs | 22 +-- src/process/foreign/peer_tls.rs | 43 +++++ src/process/foreign/peer_unmap.rs | 54 +++++++ src/process/foreign/registry.rs | 15 +- src/process/foreign/resume.rs | 39 +++++ src/process/foreign/spawn.rs | 46 +++--- src/process/foreign/spawn_start.rs | 41 ++--- src/process/foreign/start_context.rs | 44 ++++++ src/process/foreign/thread.rs | 27 ++-- src/process/foreign/trap.rs | 47 ++---- src/process/foreign/trap_claim.rs | 44 ++++++ src/process/foreign/trap_reply.rs | 20 ++- src/process/foreign/trap_table.rs | 29 ++-- src/process/foreign/trap_wait.rs | 41 +++++ src/process/foreign/wait.rs | 32 ++-- userland/libc/src/consent.rs | 30 ++++ userland/libc/src/foreign.rs | 30 +++- userland/libc/src/lib.rs | 17 +- userland/libc/src/local_sign.rs | 52 +++++++ userland/libc/src/peer.rs | 26 +++- userland/libc/src/syscall/mod.rs | 23 +-- userland/libc/src/syscall/numbers/foreign.rs | 9 ++ 36 files changed, 1123 insertions(+), 287 deletions(-) create mode 100644 src/process/foreign/exec.rs create mode 100644 src/process/foreign/exec_context.rs create mode 100644 src/process/foreign/exec_enter.rs create mode 100644 src/process/foreign/fork.rs create mode 100644 src/process/foreign/frame_cpu.rs create mode 100644 src/process/foreign/frame_snapshot.rs create mode 100644 src/process/foreign/peer_lock.rs create mode 100644 src/process/foreign/peer_tls.rs create mode 100644 src/process/foreign/peer_unmap.rs create mode 100644 src/process/foreign/resume.rs create mode 100644 src/process/foreign/start_context.rs create mode 100644 src/process/foreign/trap_claim.rs create mode 100644 src/process/foreign/trap_wait.rs create mode 100644 userland/libc/src/consent.rs create mode 100644 userland/libc/src/local_sign.rs diff --git a/abi/syscalls.toml b/abi/syscalls.toml index 868127f00..41f46c9a9 100644 --- a/abi/syscalls.toml +++ b/abi/syscalls.toml @@ -53,10 +53,13 @@ MDRQ = 0x5152444D APPS = 0x53505041 CDAD = 0x44414443 CEAD = 0x44414543 +CEDP = 0x50444543 +CEDS = 0x53444543 CHKF = 0x464B4843 -CMKY = 0x594B4D43 CHMC = 0x434D4843 CKEC = 0x43454B43 +CSKS = 0x534B5343 +CSPB = 0x42505343 CXPK = 0x4B505843 CXSH = 0x48535843 MAST = 0x5453414D @@ -75,6 +78,9 @@ MPMP = 0x504D504D MPCP = 0x5043504D MPPT = 0x5450504D MFTH = 0x4854464D +MPTL = 0x4C54504D +MFFK = 0x4B46464D +MPUN = 0x4E55504D MIRW = 0x5752494D MIRY = 0x5952494D MKAR = 0x52414B4D @@ -101,6 +107,7 @@ CRND = 0x444E5243 CHSH = 0x48534843 CENC = 0x434E4543 CDEC = 0x43454443 +CEDV = 0x56444543 ARBT = 0x54425241 ASDN = 0x4E445341 @@ -147,21 +154,15 @@ MDVW = 0x5756444D MIEP = 0x5045494D MIED = 0x4445494D -[desc.CMKY] -nr = 0x594B4D43 -caps = ["Crypto"] -args = [{name="label_ptr",type="u64",dir="in"},{name="label_len",type="u64",dir="in"},{name="out_ptr",type="u64",dir="out"}] -ret = {type="i64"} - [desc.CRND] nr = 0x444E5243 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="buf",type="u8*",dir="out"},{name="len",type="usize",dir="in"}] ret = {type="i64"} [desc.CHSH] nr = 0x48534843 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="alg",type="u32",dir="in"},{name="data",type="u8*",dir="in"},{name="len",type="usize",dir="in"},{name="out",type="u8*",dir="out"},{name="out_len",type="usize",dir="in"}] ret = {type="i64"} @@ -177,6 +178,12 @@ caps = ["Crypto"] args = [{name="key_id",type="u64",dir="in"},{name="ct",type="u8*",dir="in"},{name="ct_len",type="usize",dir="in"},{name="pt_out",type="u8*",dir="out"},{name="pt_cap",type="usize",dir="in"}] ret = {type="i64"} +[desc.CEDV] +nr = 0x56444543 +caps = ["Crypto"] +args = [{name="pubkey",type="[u8;32]",dir="in"},{name="msg",type="u8*",dir="in"},{name="msg_len",type="usize",dir="in"},{name="sig",type="[u8;64]",dir="in"}] +ret = {type="i64"} + [desc.ARBT] nr = 0x54425241 caps = ["Admin"] @@ -233,13 +240,13 @@ ret = {type="i64"} [desc.MMAP] nr = 0x50414D4D -caps = ["Memory"] +caps = ["valid_token"] args = [{name="hint",type="u64",dir="in"},{name="len",type="usize",dir="in",max="@limits.max_mmap_bytes"},{name="flags",type="u32",dir="in"},{name="addr_out",type="u64*",dir="out"}] ret = {type="i64"} [desc.MUMP] nr = 0x504D554D -caps = ["Memory"] +caps = ["valid_token"] args = [{name="addr",type="u64",dir="in"},{name="len",type="usize",dir="in"}] ret = {type="i64"} @@ -263,13 +270,13 @@ ret = {type="i64"} [desc.MCGT] nr = 0x5447434D -caps = ["Admin"] +caps = ["IPC"] args = [{name="target_pid",type="u32",dir="in"},{name="cap_mask",type="u64",dir="in"}] ret = {type="i64"} [desc.MCRV] nr = 0x5652434D -caps = ["Admin"] +caps = ["IPC"] args = [{name="target_pid",type="u32",dir="in"},{name="cap_mask",type="u64",dir="in"}] ret = {type="i64"} @@ -281,91 +288,91 @@ ret = {type="i64"} [desc.MDLS] nr = 0x534C444D -caps = ["valid_token"] +caps = ["DeviceEnum"] args = [{name="class",type="u32",dir="in"},{name="buf",type="u8*",dir="out"},{name="count",type="usize",dir="in",max="@limits.max_devices"}] ret = {type="i64"} [desc.MDCL] nr = 0x4C43444D -caps = ["valid_token"] +caps = ["Driver"] args = [{name="device_id",type="u64",dir="in"}] ret = {type="i64"} [desc.MDRL] nr = 0x4C52444D -caps = ["valid_token"] +caps = ["Driver"] args = [{name="device_id",type="u64",dir="in"}] ret = {type="i64"} [desc.MMMP] nr = 0x504D4D4D -caps = ["valid_token"] +caps = ["Mmio"] args = [{name="device_id",type="u64",dir="in"},{name="bar_index",type="u32",dir="in"},{name="length",type="usize",dir="in"},{name="flags",type="u32",dir="in"},{name="vaddr_out",type="u64*",dir="out"}] ret = {type="i64"} [desc.MMUM] nr = 0x4D554D4D -caps = ["valid_token"] +caps = ["Mmio"] args = [{name="device_id",type="u64",dir="in"},{name="vaddr",type="u64",dir="in"}] ret = {type="i64"} [desc.MIRB] nr = 0x4252494D -caps = ["valid_token"] +caps = ["Irq"] args = [{name="device_id",type="u64",dir="in"},{name="claim_epoch",type="u64",dir="in"},{name="vector_count",type="u32",dir="in"},{name="flags",type="u32",dir="in"},{name="slot_base_out",type="u32*",dir="out"}] ret = {type="i64"} [desc.MIRU] nr = 0x5552494D -caps = ["valid_token"] +caps = ["Irq"] args = [{name="device_id",type="u64",dir="in"},{name="slot_base",type="u32",dir="in"},{name="vector_count",type="u32",dir="in"}] ret = {type="i64"} [desc.MIRA] nr = 0x4152494D -caps = ["valid_token"] +caps = ["Irq"] args = [{name="slot",type="u32",dir="in"}] ret = {type="i64"} [desc.MIRP] nr = 0x5052494D -caps = ["valid_token"] +caps = ["Irq"] args = [{name="slot",type="u32",dir="in"},{name="seq_out",type="u64*",dir="out"}] ret = {type="i64"} [desc.MDMM] nr = 0x4D4D444D -caps = ["valid_token"] +caps = ["Dma"] args = [{name="device_id",type="u64",dir="in"},{name="claim_epoch",type="u64",dir="in"},{name="length",type="usize",dir="in"},{name="flags",type="u32",dir="in"},{name="grant_out",type="u8*",dir="out"}] ret = {type="i64"} [desc.MDMU] nr = 0x554D444D -caps = ["valid_token"] +caps = ["Dma"] args = [{name="device_id",type="u64",dir="in"},{name="grant_id",type="u64",dir="in"}] ret = {type="i64"} [desc.MPGT] nr = 0x5447504D -caps = ["valid_token"] +caps = ["Pio"] args = [{name="device_id",type="u64",dir="in"},{name="claim_epoch",type="u64",dir="in"},{name="port_base",type="u16",dir="in"},{name="port_count",type="u16",dir="in"},{name="grant_out",type="u32*",dir="out"}] ret = {type="i64"} [desc.MPRD] nr = 0x4452504D -caps = ["valid_token"] +caps = ["Pio"] args = [{name="grant_id",type="u32",dir="in"},{name="offset",type="u16",dir="in"},{name="width",type="u8",dir="in"},{name="value_out",type="u32*",dir="out"}] ret = {type="i64"} [desc.MPWR] nr = 0x5257504D -caps = ["valid_token"] +caps = ["Pio"] args = [{name="grant_id",type="u32",dir="in"},{name="offset",type="u16",dir="in"},{name="width",type="u8",dir="in"},{name="value",type="u32",dir="in"}] ret = {type="i64"} [desc.MPRL] nr = 0x4C52504D -caps = ["valid_token"] +caps = ["Pio"] args = [{name="grant_id",type="u32",dir="in"}] ret = {type="i64"} @@ -413,61 +420,85 @@ ret = {type="i64"} [desc.MIEP] nr = 0x5045494D -caps = ["valid_token"] +caps = ["Irq"] args = [{name="event_kind",type="u32",dir="in"},{name="payload",type="u8*",dir="in"},{name="len",type="usize",dir="in"}] ret = {type="i64"} [desc.MIED] nr = 0x4445494D -caps = ["valid_token"] +caps = ["IPC"] args = [{name="buf",type="u8*",dir="out"},{name="cap",type="usize",dir="in"},{name="count_out",type="u32*",dir="out"}] ret = {type="i64"} [desc.APPS] nr = 0x53505041 -caps = ["Admin"] +caps = ["valid_token"] args = [{name="field_id",type="u64",dir="in"},{name="kind",type="u64",dir="in"},{name="value_ptr",type="u64",dir="in"},{name="value_len",type="u64",dir="in"}] ret = {type="i64"} [desc.CDAD] nr = 0x44414443 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="algo",type="u64",dir="in"},{name="key_ptr",type="u64",dir="in"},{name="nonce_ptr",type="u64",dir="in"},{name="frame_ptr",type="u64",dir="in"},{name="frame_len",type="u64",dir="in"},{name="plaintext_ptr",type="u64",dir="out"}] ret = {type="i64"} [desc.CEAD] nr = 0x44414543 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="algo",type="u64",dir="in"},{name="key_ptr",type="u64",dir="in"},{name="nonce_ptr",type="u64",dir="in"},{name="frame_ptr",type="u64",dir="in"},{name="frame_len",type="u64",dir="in"},{name="ciphertext_ptr",type="u64",dir="out"}] ret = {type="i64"} +[desc.CEDP] +nr = 0x50444543 +caps = ["valid_token"] +args = [{name="seed_ptr",type="u64",dir="in"},{name="out",type="u64",dir="out"}] +ret = {type="i64"} + +[desc.CEDS] +nr = 0x53444543 +caps = ["valid_token"] +args = [{name="seed_ptr",type="u64",dir="in"},{name="msg_ptr",type="u64",dir="in"},{name="msg_len",type="u64",dir="in"},{name="out",type="u64",dir="out"}] +ret = {type="i64"} + [desc.CHKF] nr = 0x464B4843 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="frame_ptr",type="u64",dir="in"},{name="frame_len",type="u64",dir="in"},{name="out_ptr",type="u64",dir="out"},{name="out_len",type="u64",dir="in"}] ret = {type="i64"} [desc.CHMC] nr = 0x434D4843 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="key_ptr",type="u64",dir="in"},{name="key_len",type="u64",dir="in"},{name="data_ptr",type="u64",dir="in"},{name="data_len",type="u64",dir="in"},{name="out_ptr",type="u64",dir="out"}] ret = {type="i64"} [desc.CKEC] nr = 0x43454B43 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="data",type="u64",dir="in"},{name="len",type="u64",dir="in"},{name="out",type="u64",dir="out"},{name="out_len",type="u64",dir="in"}] ret = {type="i64"} +[desc.CSKS] +nr = 0x534B5343 +caps = ["valid_token"] +args = [{name="sk_ptr",type="u64",dir="in"},{name="digest_ptr",type="u64",dir="in"},{name="out",type="u64",dir="out"}] +ret = {type="i64"} + +[desc.CSPB] +nr = 0x42505343 +caps = ["valid_token"] +args = [{name="sk_ptr",type="u64",dir="in"},{name="out",type="u64",dir="out"}] +ret = {type="i64"} + [desc.CXPK] nr = 0x4B505843 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="private_ptr",type="u64",dir="in"},{name="out_ptr",type="u64",dir="out"}] ret = {type="i64"} [desc.CXSH] nr = 0x48535843 -caps = ["Crypto"] +caps = ["valid_token"] args = [{name="private_ptr",type="u64",dir="in"},{name="public_ptr",type="u64",dir="in"},{name="out_ptr",type="u64",dir="out"}] ret = {type="i64"} [desc.MAST] @@ -484,13 +515,13 @@ ret = {type="i64"} [desc.MCLD] nr = 0x444C434D -caps = ["CoreExec", "IPC", "Memory"] +caps = ["valid_token"] args = [{name="req_ptr",type="u64",dir="in"}] ret = {type="i64"} [desc.MCVF] nr = 0x4656434D -caps = ["CoreExec", "IPC", "Memory"] +caps = ["valid_token"] args = [{name="req_ptr",type="u64",dir="in"},{name="out_ptr",type="u64",dir="out"}] ret = {type="i64"} [desc.MFTK] @@ -507,7 +538,7 @@ ret = {type="i64"} [desc.MGPD] nr = 0x4450474D -caps = ["CoreExec"] +caps = ["valid_token"] args = [] ret = {type="i64"} @@ -525,19 +556,19 @@ ret = {type="i64"} [desc.MIRY] nr = 0x5952494D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="dest_pid",type="u64",dir="in"},{name="buf",type="u64",dir="out"},{name="len",type="usize",dir="in"}] ret = {type="i64"} [desc.MKAR] nr = 0x52414B4D -caps = ["CoreExec"] +caps = ["valid_token"] args = [{name="buf",type="u64",dir="out"},{name="len",type="usize",dir="in"}] ret = {type="i64"} [desc.MKIL] nr = 0x4C494B4D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="pid",type="u64",dir="in"},{name="sig",type="u64",dir="in"}] ret = {type="i64"} @@ -549,7 +580,7 @@ ret = {type="i64"} [desc.MOUT] nr = 0x54554F4D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="pid",type="u64",dir="in"},{name="buf_ptr",type="u64",dir="out"},{name="buf_len",type="usize",dir="in"}] ret = {type="i64"} @@ -567,7 +598,7 @@ ret = {type="i64"} [desc.MPIN] nr = 0x4E49504D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="pid",type="u64",dir="in"},{name="buf_ptr",type="u64",dir="out"},{name="buf_len",type="usize",dir="in"}] ret = {type="i64"} @@ -579,7 +610,7 @@ ret = {type="i64"} [desc.MSOW] nr = 0x574F534D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="user_ptr",type="u64",dir="in"},{name="len",type="u64",dir="in"}] ret = {type="i64"} @@ -625,6 +656,24 @@ caps = ["ForeignExec"] args = [{name="pid",type="u32",dir="in"},{name="entry",type="u64",dir="in"},{name="rsp",type="u64",dir="in"},{name="tls",type="u64",dir="in"}] ret = {type="i64"} +[desc.MPUN] +nr = 0x4E55504D +caps = ["ForeignExec"] +args = [{name="pid",type="u32",dir="in"},{name="addr",type="u64",dir="in"},{name="len",type="u64",dir="in"}] +ret = {type="i64"} + +[desc.MFFK] +nr = 0x4B46464D +caps = ["ForeignExec"] +args = [{name="pid",type="u32",dir="in"}] +ret = {type="i64"} + +[desc.MPTL] +nr = 0x4C54504D +caps = ["ForeignExec"] +args = [{name="pid",type="u32",dir="in"},{name="base",type="u64",dir="in"}] +ret = {type="i64"} + [desc.MPPT] nr = 0x5450504D caps = ["ForeignExec"] @@ -639,7 +688,7 @@ ret = {type="i64"} [desc.MSRD] nr = 0x4452534D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="buf_ptr",type="u64",dir="out"},{name="buf_len",type="usize",dir="in"}] ret = {type="i64"} @@ -651,13 +700,13 @@ ret = {type="i64"} [desc.MSVR] nr = 0x5256534D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="name_ptr",type="u64",dir="in"},{name="name_len",type="usize",dir="in"},{name="port",type="u32",dir="in"}] ret = {type="i64"} [desc.MSWR] nr = 0x5257534D -caps = ["StoreWrite"] +caps = ["valid_token"] args = [{name="lba",type="u64",dir="in"},{name="user_ptr",type="u64",dir="in"},{name="len",type="u64",dir="in"}] ret = {type="i64"} @@ -675,7 +724,7 @@ ret = {type="i64"} [desc.MTRN] nr = 0x4E52544D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="name_ptr",type="u64",dir="in"},{name="name_len",type="u64",dir="in"},{name="argv_ptr",type="u64",dir="in"},{name="argv_len",type="u64",dir="in"}] ret = {type="i64"} @@ -687,13 +736,13 @@ ret = {type="i64"} [desc.MTSP] nr = 0x5053544D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="entry",type="u64",dir="in"},{name="stack",type="u64",dir="in"}] ret = {type="i64"} [desc.MWAT] nr = 0x5441574D -caps = ["IPC"] +caps = ["valid_token"] args = [{name="pid",type="u64",dir="in"},{name="timeout_ms",type="u64",dir="in"}] ret = {type="i64"} diff --git a/src/arch/x86_64/asm/syscall.S b/src/arch/x86_64/asm/syscall.S index a2a180bd8..b9623994d 100644 --- a/src/arch/x86_64/asm/syscall.S +++ b/src/arch/x86_64/asm/syscall.S @@ -27,6 +27,20 @@ syscall_entry_asm: below destroys them, so stash the user copies under the saved frame and restore them on exit. One pad slot keeps 16-alignment since three arg-saves are odd. Eleven slots -> rsp = 8 (mod 16). */ + /* The callee-saved five, plus a pad to keep the parity the comment + above depends on. Nothing else on this path writes them to memory, + and Rust cannot read them either: by the time a handler runs, its + own prologue may already be using them. A forked child has to + resume with the parent's whole register state, so the capture has + to happen here or not at all. Six slots is 0 (mod 16), so every + offset below stays exactly where it was. */ + push r15 + push r14 + push r13 + push r12 + push rbx + sub rsp, 8 + sub rsp, 8 push rdx push rsi @@ -50,10 +64,23 @@ syscall_entry_asm: mov r9, [rsp + 0x08] mov r11, [rsp + 0x10] - /* Spill a6 as 7th arg, realigns to 16. */ + /* a6 goes on the stack as the seventh argument; the eighth is a + pointer to the frame just saved. A pointer rather than a single + register because a forked child resumes with the parent's whole + state, and the frame holds all of it: the return address is the + saved rcx at offset 0x20 and the rest follows it. Taken before + the two pushes, so it points at the saved rax. + + One push left rsp 16-aligned for the call. Two do not, so a pad goes + underneath them: the arguments themselves must sit at [rsp] and + [rsp+8] when the call executes. Cleanup grows from 0x10 to 0x20 for + the pad and the extra argument. */ + mov rax, rsp + sub rsp, 8 + push rax push r11 call syscall_handler - add rsp, 0x10 + add rsp, 0x20 /* SyscallSavedFrame{rax, r8, r9, r10, rcx, r11, rbp} at rsp. */ push rax @@ -80,6 +107,17 @@ syscall_entry_asm: pop rdx add rsp, 8 + /* The callee-saved five come back with their pad, in reverse. They + still hold the user's values, so this restores rather than + changes them; the point of saving was to give a supervisor a + complete frame to fork from. */ + add rsp, 8 + pop rbx + pop r12 + pop r13 + pop r14 + pop r15 + push rax movabs rax, 0xffffffffffe08aff and r11, rax diff --git a/src/arch/x86_64/syscall/manager/entry.rs b/src/arch/x86_64/syscall/manager/entry.rs index f53d12a6c..4566f3ded 100644 --- a/src/arch/x86_64/syscall/manager/entry.rs +++ b/src/arch/x86_64/syscall/manager/entry.rs @@ -17,6 +17,7 @@ use crate::security::hardening::speculation::kernel_entry; use crate::syscall::contract::{dispatch as contract_dispatch, SyscallArgs}; use crate::syscall::numbers::SyscallNumber; +use crate::process::foreign::FRAME_WORDS; use crate::syscall::types::errnos; #[no_mangle] @@ -28,28 +29,27 @@ pub(super) extern "C" fn syscall_handler( arg4: u64, arg5: u64, arg6: u64, + frame: *const u64, ) -> u64 { // A capsule reaching this point last controlled the branch predictors and - // the return stack. Refilling the RSB and re-asserting IBRS before any - // kernel branch runs is the whole point of the entry side, and it was the - // side with no caller: `kernel_exit` was wired on the return path, so - // mitigations were being applied leaving the kernel but not entering it. + // the return stack. kernel_entry(); let Some(sc) = SyscallNumber::from_u64(number) else { - /* - * A number this kernel does not know. NONOS numbers are four - * character tags, so nothing legitimate lands here; a foreign - * binary's own numbering does. When the caller is a guest, its - * supervisor answers and the kernel stays ignorant of what was - * asked. Everyone else still gets ENOSYS. - */ + // A number this kernel does not know. let args = [arg1, arg2, arg3, arg4, arg5, arg6]; - return match crate::process::foreign::redirect(number, args, 0) { + // SAFETY: eK@nonos.systems - `frame` is the pointer the entry + // stub in syscall.S passed, naming the sixteen words it pushed + // on this kernel stack, which outlive this call. This is the + // one place that pointer is turned into a reference; everything + // downstream of it is safe code. + let saved = unsafe { &*(frame as *const [u64; FRAME_WORDS]) }; + return match crate::process::foreign::redirect(number, args, saved) { Some(value) => value, None => (-(errnos::ENOSYS as i64)) as u64, }; }; + let _ = frame; let result = contract_dispatch(sc, SyscallArgs::new([arg1, arg2, arg3, arg4, arg5, arg6])); result.value as u64 } diff --git a/src/process/foreign/exec.rs b/src/process/foreign/exec.rs new file mode 100644 index 000000000..2d2e9bb0b --- /dev/null +++ b/src/process/foreign/exec.rs @@ -0,0 +1,67 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `MkForeignExec`: the same guest, a different program. + +use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_PERM}; + +use super::exec_context::fresh; +use super::peer_guard::in_user_half; + +type Saved = Option; + +/// What a parked guest receives when its supervisor has replaced the program +/// under it. +pub(super) const EXECED: u64 = u64::MAX; + +pub fn sys_foreign_exec(pid: u64, entry: u64, rsp: u64) -> i64 { + let Some(caller) = crate::process::current_pid() else { + return ERRNO_INVAL; + }; + let pid = pid as u32; + if super::registry::supervisor_of(pid) != Some(caller) { + return ERRNO_PERM; + } + if rsp == 0 || !in_user_half(entry, 1) || !in_user_half(rsp, 1) { + return ERRNO_INVAL; + } + let Some(previous) = swap(pid, Some(fresh(entry, rsp))) else { + return ERRNO_INVAL; + }; + drop_tls(pid); + // Answering is what releases the guest. + match super::trap_reply::answer_raw(pid, EXECED) { + 0 => 0, + err => { + swap(pid, previous); + err + } + } +} + +/// Put a context in place and hand back the one it displaced. +fn swap(pid: u32, ctx: Saved) -> Option { + crate::process::with_process(pid, |p| { + core::mem::replace(&mut *p.saved_user_context.lock(), ctx) + }) +} + +/// Forget the thread pointer the replaced runtime set: the scheduler writes +/// the control block's base on every switch, so leaving it would put the new +/// image back on the old TLS the first time it is preempted. +fn drop_tls(pid: u32) { + crate::process::with_process(pid, |pcb| pcb.set_tls_base(0)); +} diff --git a/src/process/foreign/exec_context.rs b/src/process/foreign/exec_context.rs new file mode 100644 index 000000000..77e85afb1 --- /dev/null +++ b/src/process/foreign/exec_context.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The registers a program starts on. + +use crate::arch::context::SavedUser; +use crate::process::userspace::{USER_CS, USER_DS, USER_RFLAGS}; + +/// Everything zero but the entry point, the stack and the constants the ABI +/// fixes. +pub(super) fn fresh(entry: u64, rsp: u64) -> SavedUser { + SavedUser { + rax: 0, + rbx: 0, + rcx: 0, + rdx: 0, + rsi: 0, + rdi: 0, + rbp: 0, + r8: 0, + r9: 0, + r10: 0, + r11: 0, + r12: 0, + r13: 0, + r14: 0, + r15: 0, + rip: entry, + rsp, + rflags: USER_RFLAGS, + cs: USER_CS as u64, + ss: USER_DS as u64, + // The thread pointer belongs to the runtime that is being replaced. + fs_base: 0, + gs_base: 0, + } +} diff --git a/src/process/foreign/exec_enter.rs b/src/process/foreign/exec_enter.rs new file mode 100644 index 000000000..0b7aed287 --- /dev/null +++ b/src/process/foreign/exec_enter.rs @@ -0,0 +1,57 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Leaving the kernel on a program the thread was not running when it entered. + +use crate::arch::context::SavedUser; +use crate::process::signal::SIGSEGV; +use crate::process::userspace::{restore_user_context_iretq, USER_CS, USER_DS}; + +const USER_VA_MAX: u64 = 0x0000_7FFF_FFFF_FFFF; + +pub(super) fn enter(pid: u32) -> ! { + let ctx = crate::process::with_process(pid, |pcb| pcb.saved_user_context.lock().take()); + match ctx.flatten() { + Some(c) if sane(&c) => resume(c), + // Nothing to run. + _ => crate::process::terminate_current_with_signal(SIGSEGV), + } +} + +fn resume(ctx: SavedUser) -> ! { + /* + * The scheduler installs the control block's base on every switch, and + * this path deliberately does not go through the scheduler, so the + * register is written here as well. + */ + crate::arch::context::set_user_tls(ctx.fs_base); + /* + * SAFETY: eK@nonos.systems - `ctx` is a local, so it outlives the + * five pushes the restore makes below rsp. Its selectors are the + * user pair and rip/rsp are in the low half, checked above; the + * address space is this pid's own, which is already on cr3 because + * this thread is the one running. + */ + unsafe { restore_user_context_iretq(&ctx) } +} + +fn sane(c: &SavedUser) -> bool { + c.cs == USER_CS as u64 + && c.ss == USER_DS as u64 + && c.rip <= USER_VA_MAX + && c.rsp <= USER_VA_MAX + && c.rsp != 0 +} diff --git a/src/process/foreign/fork.rs b/src/process/foreign/fork.rs new file mode 100644 index 000000000..9590ba9b9 --- /dev/null +++ b/src/process/foreign/fork.rs @@ -0,0 +1,52 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Duplicating a guest. + +use crate::process::core::ProcessState; +use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_NOENT, ERRNO_PERM}; + +/// `MkForeignFork`: a second process holding the first one's register state, +/// with zero in its return register so the two can tell each other apart, +/// which is the whole of fork's contract to the program. +pub fn sys_foreign_fork(pid: u64) -> i64 { + let Some(caller) = crate::process::current_pid() else { + return ERRNO_INVAL; + }; + let parent = pid as u32; + if super::registry::supervisor_of(parent) != Some(caller) { + return ERRNO_PERM; + } + let Some(state) = saved_state(parent) else { + // A guest that is not parked inside a syscall has no frame to copy. + return ERRNO_NOENT; + }; + let child = match super::spawn::empty_guest(caller, b"fork") { + Ok(pid) => pid, + Err(e) => return e, + }; + let mut frame = state; + frame.rax = 0; + crate::process::with_process(child, |pcb| { + *pcb.saved_user_context.lock() = Some(frame); + *pcb.state.lock() = ProcessState::New; + }); + child as i64 +} + +fn saved_state(pid: u32) -> Option { + crate::process::with_process(pid, |pcb| *pcb.saved_user_context.lock()).flatten() +} diff --git a/src/process/foreign/frame_cpu.rs b/src/process/foreign/frame_cpu.rs new file mode 100644 index 000000000..762297f51 --- /dev/null +++ b/src/process/foreign/frame_cpu.rs @@ -0,0 +1,38 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The one word of a guest's state that is not in the saved frame. + +/// The user stack pointer. +#[inline] +pub fn user_rsp() -> u64 { + let rsp: u64; + /* + * SAFETY: eK@nonos.systems - reads `user_stack_saved` in PerCpuData + * at a compile-time offset. Kernel GS is still active on this path: + * neither sysret nor iretq has run, which is the same condition the + * sigreturn path relies on for the same read. + */ + unsafe { + core::arch::asm!( + "mov {0}, gs:[{off}]", + out(reg) rsp, + off = const crate::smp::percpu::layout::USER_STACK_SAVED, + options(nomem, nostack, preserves_flags), + ); + } + rsp +} diff --git a/src/process/foreign/frame_snapshot.rs b/src/process/foreign/frame_snapshot.rs new file mode 100644 index 000000000..f93e6fd69 --- /dev/null +++ b/src/process/foreign/frame_snapshot.rs @@ -0,0 +1,73 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The register state a parked guest is holding, kept where a fork can reach +//! it. + +use crate::arch::context::SavedUser; +use crate::process::userspace::{USER_CS, USER_DS}; + +/// Words the entry stub pushes before it calls the handler. +pub const FRAME_WORDS: usize = 16; + +/// Offsets into that frame. rax is pushed last so it sits at zero and +/// the rest count upward from it. +const RAX: usize = 0; +const R8: usize = 1; +const R9: usize = 2; +const R10: usize = 3; +const RCX: usize = 4; +const R11: usize = 5; +const RBP: usize = 6; +const RDI: usize = 7; +const RSI: usize = 8; +const RDX: usize = 9; +const RBX: usize = 11; +const R12: usize = 12; +const R13: usize = 13; +const R14: usize = 14; +const R15: usize = 15; + +pub fn capture(frame: &[u64; FRAME_WORDS], user_rsp: u64) -> SavedUser { + SavedUser { + rax: frame[RAX], + rbx: frame[RBX], + rcx: frame[RCX], + rdx: frame[RDX], + rsi: frame[RSI], + rdi: frame[RDI], + rbp: frame[RBP], + r8: frame[R8], + r9: frame[R9], + r10: frame[R10], + r11: frame[R11], + r12: frame[R12], + r13: frame[R13], + r14: frame[R14], + r15: frame[R15], + rsp: user_rsp, + /* + * SYSCALL leaves the resume point in rcx and the flags in r11, so the + * frame carries both under those names. + */ + rip: frame[RCX], + rflags: frame[R11], + cs: USER_CS as u64, + ss: USER_DS as u64, + fs_base: 0, + gs_base: 0, + } +} diff --git a/src/process/foreign/mod.rs b/src/process/foreign/mod.rs index 7a965e401..93713448e 100644 --- a/src/process/foreign/mod.rs +++ b/src/process/foreign/mod.rs @@ -15,39 +15,44 @@ // along with this program. If not, see . //! Hosting code the kernel does not trust and does not understand. -//! -//! A foreign process holds no capabilities, so every NONOS syscall it makes -//! is refused at the contract gate. What it can do is issue a syscall -//! number this kernel has never heard of, which is exactly what a binary -//! built for another system does. Rather than answering `ENOSYS`, the -//! kernel hands that register frame to the userspace supervisor that -//! created the process and parks the caller until an answer comes back. -//! -//! The kernel copies six registers out and one value in. It does not read -//! them, does not know what they mean, and holds no table that could tell -//! it. Every syscall number, struct, path and errno belongs to the -//! supervisor, an ordinary attested capsule that can be replaced or -//! revoked without touching ring 0. +mod exec; +mod exec_context; +mod exec_enter; +mod fork; mod frame; +mod frame_cpu; +mod frame_snapshot; mod peer_chunk; mod peer_copy; mod peer_guard; +mod peer_lock; mod peer_map; mod peer_protect; +mod peer_tls; +mod peer_unmap; mod registry; +mod resume; mod spawn; mod spawn_start; +mod start_context; mod thread; mod trap; +mod trap_claim; mod trap_reply; mod trap_table; +mod trap_wait; mod wait; +pub use exec::sys_foreign_exec; +pub use fork::sys_foreign_fork; pub use frame::ForeignFrame; +pub use frame_snapshot::FRAME_WORDS; pub use peer_copy::sys_peer_copy; pub use peer_map::sys_peer_map; pub use peer_protect::sys_peer_protect; +pub use peer_tls::sys_peer_tls; +pub use peer_unmap::sys_peer_unmap; pub use registry::{clear, is_foreign, supervisor_of}; pub use spawn::sys_foreign_spawn; pub use spawn_start::sys_foreign_start; diff --git a/src/process/foreign/peer_copy.rs b/src/process/foreign/peer_copy.rs index 078645e7f..a4bdadcc2 100644 --- a/src/process/foreign/peer_copy.rs +++ b/src/process/foreign/peer_copy.rs @@ -15,28 +15,24 @@ // along with this program. If not, see . //! Moving bytes between a supervisor and a guest it created. -//! -//! The guest address is translated page by page through the guest's own -//! tables, so an unmapped byte is a refusal and never a read of somebody -//! else's memory. This is the shape of ptrace and none of its semantics. use crate::memory::addr::VirtAddr; use crate::memory::paging::manager::translate_in_asid; use crate::syscall::microkernel::errnos::{ERRNO_FAULT, ERRNO_INVAL}; use super::peer_chunk::{chunk_copy, validate}; -use super::peer_guard::{supervised_asid, MAX_SPAN, PAGE}; +use super::peer_guard::{in_user_half, supervised_asid, MAX_SPAN, PAGE}; /// `MkPeerCopy`: `to_guest` chooses the direction; returns bytes moved. pub fn sys_peer_copy(pid: u64, guest_addr: u64, buf: u64, len: u64, to_guest: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; }; - let asid = match supervised_asid(caller, pid as u32) { - Ok(a) => a, + let (asid, _held) = match supervised_asid(caller, pid as u32) { + Ok(pair) => pair, Err(e) => return e, }; - if len == 0 || len > MAX_SPAN || guest_addr.checked_add(len).is_none() { + if len == 0 || len > MAX_SPAN || !in_user_half(guest_addr, len) { return ERRNO_INVAL; } let writing = to_guest != 0; diff --git a/src/process/foreign/peer_guard.rs b/src/process/foreign/peer_guard.rs index 2295233d0..4a4f12d84 100644 --- a/src/process/foreign/peer_guard.rs +++ b/src/process/foreign/peer_guard.rs @@ -15,28 +15,38 @@ // along with this program. If not, see . //! The one check every peer call makes before it touches a guest. -//! -//! Knowing a pid buys nothing: the target must be foreign and must name -//! the caller as its supervisor. Both conditions are set once at creation -//! and never move. +use super::peer_lock::Held; use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_PERM}; pub(super) const PAGE: u64 = 4096; -/* - * One call maps or copies at most this much, so a guest image crosses in - * bounded pieces and no single call holds the processor. - */ +// One call maps or copies at most this much, so a guest image crosses in +// bounded pieces and no single call holds the processor. pub(super) const MAX_SPAN: u64 = 1 << 20; +// The first address of the kernel half. +pub(super) const USER_VA_END: u64 = 0x0000_8000_0000_0000; + +/// True when `[addr, addr + len)` lies wholly in the guest's own half. +pub(super) fn in_user_half(addr: u64, len: u64) -> bool { + match addr.checked_add(len) { + Some(end) => end <= USER_VA_END, + None => false, + } +} + pub const PROT_WRITE: u64 = 1 << 0; pub const PROT_EXEC: u64 = 1 << 1; -/// The guest's address space, or the errno the caller gets instead. -pub(super) fn supervised_asid(caller: u32, pid: u32) -> Result { + +/// The guest's address space and the lock over it, or the errno the +/// caller gets instead. +pub(super) fn supervised_asid(caller: u32, pid: u32) -> Result<(u32, Held), i64> { if super::registry::supervisor_of(pid) != Some(caller) { return Err(ERRNO_PERM); } - crate::memory::paging::manager::lookup_asid_for_process(pid).ok_or(ERRNO_INVAL) + let held = super::peer_lock::take(); + let asid = crate::memory::paging::manager::lookup_asid_for_process(pid).ok_or(ERRNO_INVAL)?; + Ok((asid, held)) } diff --git a/src/process/foreign/peer_lock.rs b/src/process/foreign/peer_lock.rs new file mode 100644 index 000000000..b287496a8 --- /dev/null +++ b/src/process/foreign/peer_lock.rs @@ -0,0 +1,32 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Exclusion over a guest's address space. + +use spin::{Mutex, MutexGuard}; + +// Every peer call that reads or reshapes a guest's address space runs under +// this. +static ADDRESS_SPACE: Mutex<()> = Mutex::new(()); + +/// Proof that the caller holds the peer lock. +pub(super) type Held = MutexGuard<'static, ()>; + +/// Take it. Only `peer_guard::supervised_asid` calls this, and it hands +/// the result back beside the asid so the two cannot be separated. +pub(super) fn take() -> Held { + ADDRESS_SPACE.lock() +} diff --git a/src/process/foreign/peer_map.rs b/src/process/foreign/peer_map.rs index eab0b2a6c..699aeac97 100644 --- a/src/process/foreign/peer_map.rs +++ b/src/process/foreign/peer_map.rs @@ -15,20 +15,16 @@ // along with this program. If not, see . //! Backing a span of a guest's address space with fresh frames. -//! -//! The supervisor builds the guest's image itself, page by page, because -//! the kernel parses no foreign format. Pages are private to the guest: -//! the supervisor reaches them only through `MkPeerCopy`. use crate::memory::addr::VirtAddr; use crate::memory::paging::manager::{map_page_in_asid, translate_in_asid}; use crate::memory::paging::types::PagePermissions; use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_NOMEM}; -use super::peer_guard::{supervised_asid, MAX_SPAN, PAGE, PROT_EXEC, PROT_WRITE}; +use super::peer_guard::{in_user_half, supervised_asid, MAX_SPAN, PAGE, PROT_EXEC, PROT_WRITE}; fn span_ok(addr: u64, len: u64) -> bool { - len != 0 && len <= MAX_SPAN && addr % PAGE == 0 && addr.checked_add(len).is_some() + len != 0 && len <= MAX_SPAN && addr % PAGE == 0 && in_user_half(addr, len) } pub(super) fn perms_of(prot: u64) -> PagePermissions { @@ -43,14 +39,12 @@ pub(super) fn perms_of(prot: u64) -> PagePermissions { } /// `MkPeerMap`: map `[addr, addr + len)` in a guest the caller supervises. -/// A page that is already mapped is left alone, so a supervisor may lay -/// down overlapping segments the way an ELF does. pub fn sys_peer_map(pid: u64, addr: u64, len: u64, prot: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; }; - let asid = match supervised_asid(caller, pid as u32) { - Ok(a) => a, + let (asid, _held) = match supervised_asid(caller, pid as u32) { + Ok(pair) => pair, Err(e) => return e, }; if !span_ok(addr, len) { diff --git a/src/process/foreign/peer_protect.rs b/src/process/foreign/peer_protect.rs index 30511e07c..0f5e63648 100644 --- a/src/process/foreign/peer_protect.rs +++ b/src/process/foreign/peer_protect.rs @@ -16,36 +16,26 @@ //! Changing the protection of pages a guest already has. -//! -//! A supervisor that loads code cannot know the final protection when it -//! lays the pages down. A dynamic linker maps a library writable, applies -//! relocations to it, and only then asks for it to be executable. Without -//! this the pages would stay writable and the program would fault on its -//! first call into the library, or the supervisor would have to map the -//! code writable and executable at once, which the mapping layer refuses -//! and should go on refusing. use crate::memory::addr::VirtAddr; use crate::memory::paging::manager::{map_page_in_asid, translate_in_asid}; use crate::syscall::microkernel::errnos::{ERRNO_FAULT, ERRNO_INVAL}; -use super::peer_guard::{supervised_asid, MAX_SPAN, PAGE}; +use super::peer_guard::{in_user_half, supervised_asid, MAX_SPAN, PAGE}; use super::peer_map::perms_of; fn span_ok(addr: u64, len: u64) -> bool { - len != 0 && len <= MAX_SPAN && addr % PAGE == 0 && addr.checked_add(len).is_some() + len != 0 && len <= MAX_SPAN && addr % PAGE == 0 && in_user_half(addr, len) } -/// `MkPeerProtect`: set the protection of `[addr, addr + len)` in a guest -/// the caller supervises. Every page must already be mapped; a hole is an -/// error rather than a silent gap, because a caller asking for execute on -/// a range it has not filled is not asking for what it thinks. +/// `MkPeerProtect`: set the protection of `[addr, addr + len)` in a guest the +/// caller supervises. pub fn sys_peer_protect(pid: u64, addr: u64, len: u64, prot: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; }; - let asid = match supervised_asid(caller, pid as u32) { - Ok(a) => a, + let (asid, _held) = match supervised_asid(caller, pid as u32) { + Ok(pair) => pair, Err(e) => return e, }; if !span_ok(addr, len) { diff --git a/src/process/foreign/peer_tls.rs b/src/process/foreign/peer_tls.rs new file mode 100644 index 000000000..ec6f208af --- /dev/null +++ b/src/process/foreign/peer_tls.rs @@ -0,0 +1,43 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Setting a guest thread's thread pointer. + +use super::peer_guard::in_user_half; +use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_NOENT, ERRNO_PERM}; + +/// `MkPeerTls`: the FS base `pid` wakes with from now on. +pub fn sys_peer_tls(pid: u64, base: u64) -> i64 { + let Some(caller) = crate::process::current_pid() else { + return ERRNO_INVAL; + }; + let pid = pid as u32; + if super::registry::supervisor_of(pid) != Some(caller) { + return ERRNO_PERM; + } + /* + * The context switch writes this straight to MSR_FS_BASE, and that + * instruction faults in ring zero for a non-canonical value. + */ + if !in_user_half(base, 1) { + return ERRNO_INVAL; + } + match crate::process::with_process(pid, |pcb| pcb.set_tls_base(base)) { + Some(()) => 0, + None => ERRNO_NOENT, + } +} diff --git a/src/process/foreign/peer_unmap.rs b/src/process/foreign/peer_unmap.rs new file mode 100644 index 000000000..38906f894 --- /dev/null +++ b/src/process/foreign/peer_unmap.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Taking pages away from a guest. + +use crate::memory::addr::VirtAddr; +use crate::memory::paging::manager::{translate_in_asid, unmap_page_in_asid}; +use crate::memory::paging::types::PagePermissions; +use crate::syscall::microkernel::errnos::ERRNO_INVAL; + +use super::peer_guard::{in_user_half, supervised_asid, MAX_SPAN, PAGE}; + +fn span_ok(addr: u64, len: u64) -> bool { + len != 0 && len <= MAX_SPAN && addr % PAGE == 0 && in_user_half(addr, len) +} + +/// `MkPeerUnmap`: drop `[addr, addr + len)` from a guest the caller +/// supervises. +pub fn sys_peer_unmap(pid: u64, addr: u64, len: u64) -> i64 { + let Some(caller) = crate::process::current_pid() else { + return ERRNO_INVAL; + }; + let (asid, _held) = match supervised_asid(caller, pid as u32) { + Ok(pair) => pair, + Err(e) => return e, + }; + if !span_ok(addr, len) { + return ERRNO_INVAL; + } + let perms = PagePermissions::READ | PagePermissions::USER; + for i in 0..len.div_ceil(PAGE) { + let va = VirtAddr::new(addr + i * PAGE); + if translate_in_asid(asid, va).is_none() { + continue; + } + if let Ok(frame) = unmap_page_in_asid(asid, va, perms) { + let _ = crate::memory::frame_alloc::deallocate_frame(frame); + } + } + 0 +} diff --git a/src/process/foreign/registry.rs b/src/process/foreign/registry.rs index 1bd2219b1..1248b7f74 100644 --- a/src/process/foreign/registry.rs +++ b/src/process/foreign/registry.rs @@ -15,12 +15,6 @@ // along with this program. If not, see . //! Which processes are foreign, and who supervises each one. -//! -//! The pairing is set once at creation and never changes: a supervisor -//! cannot be handed a guest it did not create, and a guest cannot be moved -//! between supervisors. Both directions of every peer operation check this -//! table, so an ordinary capsule that learns a foreign pid can still do -//! nothing with it. use alloc::vec::Vec; @@ -60,8 +54,15 @@ pub(super) fn guests_of(supervisor: u32) -> Vec { /// Called from process teardown; a supervisor leaving takes its guests. pub fn clear(pid: u32) { let orphans = guests_of(pid); - FOREIGN.write().retain(|e| e.pid != pid); + // Both directions go, not just this process's own row. + FOREIGN.write().retain(|e| e.pid != pid && e.supervisor != pid); for guest in orphans { super::trap_reply::abandon(guest); } + /* + * A guest that died while parked leaves its frame behind, and + * `take_answer` finds a frame by pid alone, so a reused pid would collect + * an answer meant for a process that no longer exists. + */ + super::trap_reply::forget(pid); } diff --git a/src/process/foreign/resume.rs b/src/process/foreign/resume.rs new file mode 100644 index 000000000..b03c8b1f1 --- /dev/null +++ b/src/process/foreign/resume.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Waking a guest on state it already holds. + +use crate::process::core::claim_new; +use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_PERM}; + +/// Make a guest runnable on the state it already carries. Used by a +/// fork, whose child was born holding its parent's registers. +pub(super) fn resume(pid: u32) -> i64 { + let has_state = + crate::process::with_process(pid, |pcb| pcb.saved_user_context.lock().is_some()); + if has_state != Some(true) { + return ERRNO_INVAL; + } + /* + * The claim is the check. A fork started twice would otherwise put + * the child on a run queue twice. + */ + if !claim_new(pid) { + return ERRNO_PERM; + } + crate::sched::add_to_run_queue(pid); + 0 +} diff --git a/src/process/foreign/spawn.rs b/src/process/foreign/spawn.rs index cffb85ec8..aa9295006 100644 --- a/src/process/foreign/spawn.rs +++ b/src/process/foreign/spawn.rs @@ -15,25 +15,21 @@ // along with this program. If not, see . //! Creating a guest: a process, a kernel stack, and nothing else. -//! -//! The kernel parses no image here. It hands back an empty process with no -//! capabilities, and the supervisor fills the address space itself through -//! the peer calls. Two steps rather than one, so a half-built guest never -//! becomes runnable: this file makes it, `spawn_start` runs it. use alloc::format; use crate::kernel_core::process_spawn::allocate_kernel_stack; use crate::process::core::types::Priority; use crate::process::core::{create_process_with_parent, ProcessState}; -use crate::syscall::microkernel::errnos::{ERRNO_EXIST, ERRNO_FAULT, ERRNO_INVAL, ERRNO_NOMEM}; +use crate::syscall::microkernel::errnos::{ + ERRNO_EXIST, ERRNO_FAULT, ERRNO_INVAL, ERRNO_NOMEM, ERRNO_PERM, +}; use crate::usercopy::read_user_bytes; const MAX_NAME: usize = 24; /// `MkForeignSpawn`: an empty, capability-free process supervised by the -/// caller. Returns its pid. The name is for the process table and the logs -/// only; it grants nothing and is not a service name. +/// caller. pub fn sys_foreign_spawn(name_ptr: u64, name_len: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; @@ -47,22 +43,30 @@ pub fn sys_foreign_spawn(name_ptr: u64, name_len: u64) -> i64 { let Ok(name) = core::str::from_utf8(&bytes) else { return ERRNO_INVAL; }; - let tag = format!("foreign:{name}"); - let Ok(pid) = create_process_with_parent(&tag, ProcessState::New, Priority::Normal, 0, None) - else { - return ERRNO_NOMEM; - }; + match empty_guest(caller, name.as_bytes()) { + Ok(pid) => pid as i64, + Err(e) => e, + } +} + +/// The one place a guest comes into being. +pub(super) fn empty_guest(supervisor: u32, name: &[u8]) -> Result { + let tag = format!("foreign:{}", core::str::from_utf8(name).unwrap_or("guest")); + let pid = create_process_with_parent(&tag, ProcessState::New, Priority::Normal, 0, None) + .map_err(|_| ERRNO_NOMEM)?; if allocate_kernel_stack(pid).is_err() { - return ERRNO_NOMEM; + return Err(ERRNO_NOMEM); } /* - * No capabilities are installed. The contract gate then refuses every - * NONOS syscall this process can name, which is the confinement - * itself: the supervisor's own policy is a second layer, not the - * only one. + * Every process is born with its parent's capabilities bounded by the + * ambient set, which for a guest of this capsule means core exec, IPC and + * memory. */ - if !super::registry::insert(pid, caller) { - return ERRNO_EXIST; + if crate::process::caps::install_spawn(pid, 0).is_none() { + return Err(ERRNO_PERM); + } + if !super::registry::insert(pid, supervisor) { + return Err(ERRNO_EXIST); } - pid as i64 + Ok(pid) } diff --git a/src/process/foreign/spawn_start.rs b/src/process/foreign/spawn_start.rs index 7dd806813..60506409c 100644 --- a/src/process/foreign/spawn_start.rs +++ b/src/process/foreign/spawn_start.rs @@ -16,17 +16,10 @@ //! Making a built guest runnable. -use crate::kernel_core::process_spawn::{allocate_user_stack, setup_initial_user_context}; -use crate::process::core::ProcessState; -use crate::syscall::microkernel::errnos::{ERRNO_FAULT, ERRNO_INVAL, ERRNO_NOMEM, ERRNO_PERM}; +use super::peer_guard::in_user_half; +use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_PERM}; -/* - * `rsp` of zero asks for the kernel's own user stack. Any other value is - * a stack the supervisor built inside the guest, which is what a program - * that reads its arguments needs: the kernel knows nothing about argument - * vectors, and the supervisor that does cannot install a stack pointer - * without this call. - */ +// `rsp` of zero asks for the kernel's own user stack. pub fn sys_foreign_start(pid: u64, entry: u64, rsp: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; @@ -35,19 +28,19 @@ pub fn sys_foreign_start(pid: u64, entry: u64, rsp: u64) -> i64 { if super::registry::supervisor_of(pid) != Some(caller) { return ERRNO_PERM; } - let stack = match rsp { - 0 => match allocate_user_stack(pid) { - Ok(top) => top, - Err(_) => return ERRNO_NOMEM, - }, - given => given, - }; - if setup_initial_user_context(pid, entry, stack).is_err() { - return ERRNO_FAULT; + /* + * An entry of zero means the guest already holds the state it should wake + * in, which is what a fork leaves behind. + */ + if entry == 0 && rsp == 0 { + return super::resume::resume(pid); + } + /* + * A guest runs in ring three, so a kernel entry or stack would fault on + * its first instruction rather than escalate. + */ + if !in_user_half(entry, 1) || (rsp != 0 && !in_user_half(rsp, 0)) { + return ERRNO_INVAL; } - crate::process::with_process(pid, |pcb| { - *pcb.state.lock() = ProcessState::Ready; - }); - crate::sched::add_to_run_queue(pid); - 0 + super::start_context::install(pid, entry, rsp) } diff --git a/src/process/foreign/start_context.rs b/src/process/foreign/start_context.rs new file mode 100644 index 000000000..d21a17e11 --- /dev/null +++ b/src/process/foreign/start_context.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Giving a fresh guest its first user context. + +use crate::kernel_core::process_spawn::{allocate_user_stack, setup_initial_user_context}; +use crate::process::core::{claim_new, release_new}; +use crate::syscall::microkernel::errnos::{ERRNO_FAULT, ERRNO_NOMEM, ERRNO_PERM}; + +pub(super) fn install(pid: u32, entry: u64, rsp: u64) -> i64 { + // Claimed before the context is built, not after. + if !claim_new(pid) { + return ERRNO_PERM; + } + let stack = match rsp { + 0 => match allocate_user_stack(pid) { + Ok(top) => top, + Err(_) => { + release_new(pid); + return ERRNO_NOMEM; + } + }, + given => given, + }; + if setup_initial_user_context(pid, entry, stack).is_err() { + release_new(pid); + return ERRNO_FAULT; + } + crate::sched::add_to_run_queue(pid); + 0 +} diff --git a/src/process/foreign/thread.rs b/src/process/foreign/thread.rs index fa300d5d5..d86fb3885 100644 --- a/src/process/foreign/thread.rs +++ b/src/process/foreign/thread.rs @@ -14,18 +14,14 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! A second thread inside a guest. -use crate::process::core::spawn_thread_in; +use super::peer_guard::in_user_half; +use crate::process::core::{admit_thread, spawn_thread_parked}; use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_NOMEM, ERRNO_PERM}; /// `MkForeignThread`: a thread in `pid`, sharing its address space and -/// supervised by the same caller. `tls` is stored rather than applied: -/// the context switch loads FS base from the control block, so a thread -/// that has never run still wakes with it set, which it must, because a -/// C runtime touches thread-local storage before its first instruction -/// of program code. +/// supervised by the same caller. pub fn sys_foreign_thread(pid: u64, entry: u64, rsp: u64, tls: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; @@ -34,19 +30,28 @@ pub fn sys_foreign_thread(pid: u64, entry: u64, rsp: u64, tls: u64) -> i64 { if super::registry::supervisor_of(pid) != Some(caller) { return ERRNO_PERM; } - if entry == 0 || rsp == 0 { + /* + * Ring three addresses only, and the thread pointer among them: the switch + * writes that one to an MSR that faults in ring zero on a non-canonical + * value. + */ + if !in_user_half(entry, 1) || !in_user_half(rsp, 0) { + return ERRNO_INVAL; + } + if tls != 0 && !in_user_half(tls, 1) { return ERRNO_INVAL; } - let Ok(tid) = spawn_thread_in(pid, entry, rsp) else { + let Ok(tid) = spawn_thread_parked(pid, entry, rsp) else { return ERRNO_NOMEM; }; if tls != 0 { crate::process::with_process(tid, |pcb| pcb.set_tls_base(tls)); } - // Its unknown syscalls have to reach the same supervisor, or the - // thread traps into ENOSYS while its siblings are being served. + // Everything true before anything can run it. if !super::registry::insert(tid, caller) { + crate::process::exit::teardown(tid, 0, false); return ERRNO_NOMEM; } + admit_thread(tid); tid as i64 } diff --git a/src/process/foreign/trap.rs b/src/process/foreign/trap.rs index 4ea31c5a7..11e59836e 100644 --- a/src/process/foreign/trap.rs +++ b/src/process/foreign/trap.rs @@ -15,44 +15,29 @@ // along with this program. If not, see . //! A refused syscall, parked until its supervisor answers. -//! -//! The guest's thread sleeps inside the syscall it made, so from the -//! guest's side nothing happened except that its `syscall` took a while. -//! The supervisor is a separate process with its own capabilities; the -//! only thing crossing between them is a register frame out and one value -//! back. use super::frame::ForeignFrame; +use super::frame_snapshot::{capture, FRAME_WORDS}; use super::registry; -use super::trap_table::{park, take_answer}; +use super::trap_table::park; +use super::trap_wait::wait_for_answer; /// The kernel's answer to a syscall number it does not know, made by the -/// supervisor rather than by the kernel. `None` when the caller has no -/// supervisor, which leaves the refusal the entry shim would have given. -pub fn redirect(nr: u64, args: [u64; 6], rip: u64) -> Option { +/// supervisor rather than by the kernel. +pub fn redirect(nr: u64, args: [u64; 6], frame: &[u64; FRAME_WORDS]) -> Option { let pid = crate::process::current_pid()?; let supervisor = registry::supervisor_of(pid)?; - park(ForeignFrame::new(pid, nr, args, rip)); + /* + * The frame is reachable only while this call is on the stack, and a fork + * asks for it long afterwards, so it is copied into the control block now. + */ + let saved = capture(frame, super::frame_cpu::user_rsp()); + crate::process::with_process(pid, |pcb| { + *pcb.saved_user_context.lock() = Some(saved); + }); + if !park(ForeignFrame::new(pid, nr, args, saved.rip)) { + return Some(super::trap_reply::ABANDONED); + } crate::sched::wake_process(supervisor); Some(wait_for_answer(pid)) } - -/* - * The guest holds no locks here and owns nothing the supervisor needs, so - * a supervisor that never answers costs exactly one parked thread. The - * answer is re-checked after taking the wake token and again after the - * sleep, so a reply landing in either window is not slept through. - */ -fn wait_for_answer(pid: u32) -> u64 { - loop { - if let Some(value) = take_answer(pid) { - return value; - } - let token = crate::sched::wake_token(pid); - if let Some(value) = take_answer(pid) { - return value; - } - crate::sched::sleep_until_unless_woken(pid, u64::MAX, token); - crate::sched::yield_now(); - } -} diff --git a/src/process/foreign/trap_claim.rs b/src/process/foreign/trap_claim.rs new file mode 100644 index 000000000..2d299a479 --- /dev/null +++ b/src/process/foreign/trap_claim.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Handing a waiting supervisor its next piece of work. + +use super::frame::ForeignFrame; +use super::registry; +use super::trap_table::PARKED; + +/// The next unclaimed frame for `supervisor`, if one is waiting. +pub(super) fn claim_next(supervisor: u32) -> Option { + let mut parked = PARKED.lock(); + for entry in parked.iter_mut() { + if entry.claimed || entry.answer.is_some() { + continue; + } + if registry::supervisor_of(entry.frame.pid) == Some(supervisor) { + entry.claimed = true; + return Some(entry.frame); + } + } + None +} + +/// Give a frame back after a delivery that did not happen. +pub(super) fn unclaim(pid: u32) { + let mut parked = PARKED.lock(); + if let Some(entry) = parked.iter_mut().find(|p| p.frame.pid == pid) { + entry.claimed = false; + } +} diff --git a/src/process/foreign/trap_reply.rs b/src/process/foreign/trap_reply.rs index 6cb4e772d..c5968cb8a 100644 --- a/src/process/foreign/trap_reply.rs +++ b/src/process/foreign/trap_reply.rs @@ -20,11 +20,9 @@ use super::registry; use super::trap_table::PARKED; use crate::syscall::microkernel::errnos::{ERRNO_INVAL, ERRNO_NOENT, ERRNO_PERM}; -/* - * A guest whose supervisor died is not left asleep forever and is not - * told its call succeeded. It gets a refusal it can act on. - */ -const ABANDONED: u64 = ERRNO_NOENT as u64; +// A guest whose supervisor died is not left asleep forever and is not told its +// call succeeded. +pub(super) const ABANDONED: u64 = ERRNO_NOENT as u64; /// `MkForeignReply`: answer one parked guest. Refused unless the caller is /// that guest's recorded supervisor, so a pid alone buys nothing. @@ -36,6 +34,12 @@ pub fn sys_foreign_reply(pid: u64, value: u64) -> i64 { if registry::supervisor_of(pid) != Some(caller) { return ERRNO_PERM; } + answer_raw(pid, value) +} + +/// Hand a parked guest its value and wake it. The permission check is +/// the caller's: `exec` has made it already, on the same terms. +pub(super) fn answer_raw(pid: u32, value: u64) -> i64 { let mut parked = PARKED.lock(); let Some(entry) = parked.iter_mut().find(|p| p.frame.pid == pid && p.answer.is_none()) else { return ERRNO_NOENT; @@ -46,6 +50,12 @@ pub fn sys_foreign_reply(pid: u64, value: u64) -> i64 { 0 } +/// Drop every frame belonging to a process that is gone, so a reused +/// pid cannot collect an answer left behind by its predecessor. +pub(super) fn forget(pid: u32) { + PARKED.lock().retain(|p| p.frame.pid != pid); +} + /// Release every frame belonging to a guest whose supervisor has gone. pub(super) fn abandon(pid: u32) { let mut parked = PARKED.lock(); diff --git a/src/process/foreign/trap_table.rs b/src/process/foreign/trap_table.rs index df6dd809c..887ad6c2e 100644 --- a/src/process/foreign/trap_table.rs +++ b/src/process/foreign/trap_table.rs @@ -34,8 +34,18 @@ pub(super) struct Parked { pub(super) static PARKED: Mutex> = Mutex::new(Vec::new()); -pub(super) fn park(frame: ForeignFrame) { - PARKED.lock().push(Parked { frame, answer: None, claimed: false }); +/// Park `frame`, unless its supervisor has gone in the meantime. False +/// says nothing was parked and the guest must be refused instead. +pub(super) fn park(frame: ForeignFrame) -> bool { + let pid = frame.pid; + let mut parked = PARKED.lock(); + parked.push(Parked { frame, answer: None, claimed: false }); + // Checked with the table held, and after the push rather than before. + if registry::supervisor_of(pid).is_some() { + return true; + } + parked.pop(); + false } /// The answer for `pid`, removing the entry once it is taken. @@ -46,18 +56,3 @@ pub(super) fn take_answer(pid: u32) -> Option { parked.remove(at); Some(value) } - -/// The next unclaimed frame for `supervisor`, if one is waiting. -pub(super) fn claim_next(supervisor: u32) -> Option { - let mut parked = PARKED.lock(); - for entry in parked.iter_mut() { - if entry.claimed || entry.answer.is_some() { - continue; - } - if registry::supervisor_of(entry.frame.pid) == Some(supervisor) { - entry.claimed = true; - return Some(entry.frame); - } - } - None -} diff --git a/src/process/foreign/trap_wait.rs b/src/process/foreign/trap_wait.rs new file mode 100644 index 000000000..8beb8726a --- /dev/null +++ b/src/process/foreign/trap_wait.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A guest asleep inside the syscall it made. + +use super::trap_table::take_answer; + +pub(super) fn wait_for_answer(pid: u32) -> u64 { + loop { + if let Some(value) = take_answer(pid) { + return settle(pid, value); + } + let token = crate::sched::wake_token(pid); + if let Some(value) = take_answer(pid) { + return settle(pid, value); + } + crate::sched::sleep_until_unless_woken(pid, u64::MAX, token); + crate::sched::yield_now(); + } +} + +/// Every answer but one is a return value. +fn settle(pid: u32, value: u64) -> u64 { + if value == super::exec::EXECED { + super::exec_enter::enter(pid) + } + value +} diff --git a/src/process/foreign/wait.rs b/src/process/foreign/wait.rs index d8785e7a6..8b6861823 100644 --- a/src/process/foreign/wait.rs +++ b/src/process/foreign/wait.rs @@ -20,14 +20,12 @@ use core::mem::size_of; use super::frame::ForeignFrame; -use super::trap_table; +use super::trap_claim; use crate::syscall::microkernel::errnos::{ERRNO_FAULT, ERRNO_INVAL, ERRNO_TIMEDOUT}; use crate::usercopy::{validate_user_write, write_user_value}; -/// `MkForeignWait`: wait for a guest of the calling process to issue a -/// syscall this kernel refuses, and copy its frame out. Returns the size -/// written, or `ERRNO_TIMEDOUT` when the deadline passes with nothing -/// waiting. A caller that supervises nothing waits like any other. +/// `MkForeignWait`: wait for a guest of the calling process to issue a syscall +/// this kernel refuses, and copy its frame out. pub fn sys_foreign_wait(out_ptr: u64, out_len: u64, timeout_ms: u64) -> i64 { let Some(caller) = crate::process::current_pid() else { return ERRNO_INVAL; @@ -41,11 +39,8 @@ pub fn sys_foreign_wait(out_ptr: u64, out_len: u64, timeout_ms: u64) -> i64 { } let start = crate::time::timestamp_millis(); loop { - if let Some(frame) = trap_table::claim_next(caller) { - if write_user_value(out_ptr, &frame).is_err() { - return ERRNO_FAULT; - } - return size as i64; + if let Some(frame) = trap_claim::claim_next(caller) { + return deliver(out_ptr, frame, size); } let waited = crate::time::timestamp_millis().saturating_sub(start); if timeout_ms > 0 && waited >= timeout_ms { @@ -53,13 +48,20 @@ pub fn sys_foreign_wait(out_ptr: u64, out_len: u64, timeout_ms: u64) -> i64 { } let deadline = if timeout_ms == 0 { u64::MAX } else { start.saturating_add(timeout_ms) }; let token = crate::sched::wake_token(caller); - if let Some(frame) = trap_table::claim_next(caller) { - if write_user_value(out_ptr, &frame).is_err() { - return ERRNO_FAULT; - } - return size as i64; + if let Some(frame) = trap_claim::claim_next(caller) { + return deliver(out_ptr, frame, size); } crate::sched::sleep_until_unless_woken(caller, deadline, token); crate::sched::yield_now(); } } + +/// Hand one claimed frame over, or give it back when the supervisor's buffer +/// will not take it. +fn deliver(out_ptr: u64, frame: ForeignFrame, size: usize) -> i64 { + if write_user_value(out_ptr, &frame).is_err() { + trap_claim::unclaim(frame.pid); + return ERRNO_FAULT; + } + size as i64 +} diff --git a/userland/libc/src/consent.rs b/userland/libc/src/consent.rs new file mode 100644 index 000000000..49801df34 --- /dev/null +++ b/userland/libc/src/consent.rs @@ -0,0 +1,30 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Consent to run what this machine builds and fetches. + +use crate::syscall::{call_raw, N_MK_DEV_ROOT_CONFIRM, N_MK_DEV_ROOT_LOCAL}; + +/// Ask to enrol this machine's own build root, so what it installs can be +/// proved. +pub fn mk_dev_root_local() -> i64 { + call_raw(N_MK_DEV_ROOT_LOCAL, [0, 0, 0, 0, 0, 0]) +} + +/// Complete the pending enrolment with the code the user read and typed. +pub fn mk_dev_root_confirm(code: u32) -> i64 { + call_raw(N_MK_DEV_ROOT_CONFIRM, [code as u64, 0, 0, 0, 0, 0]) +} diff --git a/userland/libc/src/foreign.rs b/userland/libc/src/foreign.rs index f4e65e36d..f3217b39e 100644 --- a/userland/libc/src/foreign.rs +++ b/userland/libc/src/foreign.rs @@ -14,13 +14,13 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! Hosting a guest: create it, build its address space, answer the calls -//! the kernel refuses on its behalf. The guest holds no capabilities, so -//! everything it can do passes through the supervisor that made it. +//! Hosting a guest: create it, build its address space, answer the calls the +//! kernel refuses on its behalf. use crate::syscall::{ - call_raw, N_MK_FOREIGN_REPLY, N_MK_FOREIGN_SPAWN, N_MK_FOREIGN_START, N_MK_FOREIGN_THREAD, - N_MK_FOREIGN_WAIT, + call_raw, N_MK_FOREIGN_EXEC, N_MK_FOREIGN_FORK, N_MK_FOREIGN_REPLY, N_MK_FOREIGN_SPAWN, + N_MK_FOREIGN_START, + N_MK_FOREIGN_THREAD, N_MK_FOREIGN_WAIT, }; pub use crate::foreign_frame::ForeignFrame; @@ -32,13 +32,27 @@ pub fn mk_foreign_spawn(name: &[u8]) -> i64 { } /// Give a built guest its entry point and make it runnable. -/// `rsp` of zero lets the kernel allocate an ordinary user stack; any -/// other value is the stack the supervisor built, which is what a program -/// expecting argv and an auxiliary vector needs. pub fn mk_foreign_start(pid: u32, entry: u64, rsp: u64) -> i64 { call_raw(N_MK_FOREIGN_START, [pid as u64, entry, rsp, 0, 0, 0]) } +/// Make a guest runnable on the state it already carries, which is +/// what a forked child was born holding. +pub fn mk_foreign_resume(pid: u32) -> i64 { + call_raw(N_MK_FOREIGN_START, [pid as u64, 0, 0, 0, 0, 0]) +} + +/// A second process holding a guest's register state, with zero in its return +/// register. +pub fn mk_foreign_fork(pid: u32) -> i64 { + call_raw(N_MK_FOREIGN_FORK, [pid as u64, 0, 0, 0, 0, 0]) +} + +/// Replace the program a parked guest is running. +pub fn mk_foreign_exec(pid: u32, entry: u64, rsp: u64) -> i64 { + call_raw(N_MK_FOREIGN_EXEC, [pid as u64, entry, rsp, 0, 0, 0]) +} + /// A thread in a guest, sharing its address space. `tls` is the FS base /// it wakes with, which a C runtime reads before anything else. pub fn mk_foreign_thread(pid: u32, entry: u64, rsp: u64, tls: u64) -> i64 { diff --git a/userland/libc/src/lib.rs b/userland/libc/src/lib.rs index 2fe9aa1c0..227bb6cb8 100644 --- a/userland/libc/src/lib.rs +++ b/userland/libc/src/lib.rs @@ -66,19 +66,26 @@ pub use caps::{mk_cap_check, mk_cap_grant, mk_cap_revoke}; pub use capsule_load::{mk_capsule_load, CapsuleLoadRequest}; pub use capsule_verify::{mk_capsule_verify, CapsuleVerifyRequest, CapsuleVerifySummary}; pub use crypto::{ - crypto_decrypt, crypto_decrypt_aad, crypto_encrypt, crypto_encrypt_aad, crypto_hash, - crypto_hkdf_sha256, crypto_hmac_sha256, crypto_keccak256, crypto_machine_key, crypto_random, - crypto_x25519_public, crypto_x25519_shared, machine_key, MACHINE_KEY_LABEL_MAX, - MACHINE_KEY_NO_TPM, MACHINE_KEY_WRONG_STATE, + crypto_decrypt, crypto_decrypt_aad, crypto_ed25519_pubkey, crypto_ed25519_sign, + crypto_ed25519_verify, crypto_encrypt, crypto_encrypt_aad, crypto_hash, crypto_hkdf_sha256, + crypto_hmac_sha256, crypto_keccak256, crypto_random, crypto_secp256k1_pubkey, + crypto_secp256k1_sign, crypto_x25519_public, crypto_x25519_shared, }; +mod consent; +mod local_sign; + pub use debug::mk_debug; pub use foreign::{ - mk_foreign_reply, mk_foreign_spawn, mk_foreign_start, mk_foreign_thread, mk_foreign_wait, + mk_foreign_exec, mk_foreign_fork, mk_foreign_reply, mk_foreign_resume, mk_foreign_spawn, + mk_foreign_start, + mk_foreign_thread, mk_foreign_wait, }; pub use foreign_frame::ForeignFrame; pub use graphics::nonos_display_dimensions; #[cfg(feature = "heap")] pub use heap::{init as heap_init, init_sized as heap_init_sized, HeapError}; +pub use consent::{mk_dev_root_confirm, mk_dev_root_local}; +pub use local_sign::{mk_app_install, mk_local_sign, mk_local_sign_len, mk_local_verify}; pub use ipc::{ mk_ipc_call, mk_ipc_call_timeout, mk_ipc_recv, mk_ipc_recv_from, mk_ipc_reply, mk_ipc_send, mk_ipc_send_to_pid, mk_service_lookup, mk_service_register, diff --git a/userland/libc/src/local_sign.rs b/userland/libc/src/local_sign.rs new file mode 100644 index 000000000..ad420f119 --- /dev/null +++ b/userland/libc/src/local_sign.rs @@ -0,0 +1,52 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A trailer for something this machine is installing. + +use crate::syscall::{call_raw, N_MK_APP_INSTALL, N_MK_LOCAL_SIGN, N_MK_LOCAL_VERIFY}; + +/// How many bytes a trailer for `elf` takes, or a negative errno. +pub fn mk_local_sign_len(elf: &[u8], caps: u64) -> i64 { + call_raw(N_MK_LOCAL_SIGN, [elf.as_ptr() as u64, elf.len() as u64, caps, 0, 0, 0]) +} + +/// Mint a trailer proving this machine may run `elf` holding `caps`, into +/// `out`. +pub fn mk_local_sign(elf: &[u8], caps: u64, out: &mut [u8]) -> i64 { + let args = + [elf.as_ptr() as u64, elf.len() as u64, caps, out.as_mut_ptr() as u64, out.len() as u64, 0]; + call_raw(N_MK_LOCAL_SIGN, args) +} + +/// True when `elf` is proved under a root this machine trusts for exactly +/// `caps`. +pub fn mk_local_verify(elf: &[u8], caps: u64, trailer: &[u8]) -> bool { + let args = [ + elf.as_ptr() as u64, + elf.len() as u64, + caps, + trailer.as_ptr() as u64, + trailer.len() as u64, + 0, + ]; + call_raw(N_MK_LOCAL_VERIFY, args) == 0 +} + +/// Ask for a distribution package to be installed. +pub fn mk_app_install(package: &[u8]) -> i64 { + call_raw(N_MK_APP_INSTALL, [package.as_ptr() as u64, package.len() as u64, 0, 0, 0, 0]) +} + diff --git a/userland/libc/src/peer.rs b/userland/libc/src/peer.rs index a99d9b728..988f4cff9 100644 --- a/userland/libc/src/peer.rs +++ b/userland/libc/src/peer.rs @@ -15,11 +15,12 @@ // along with this program. If not, see . -//! Reaching into a guest this process supervises: its pages, their -//! protection, and the bytes in them. Every one of these is refused by -//! the kernel unless the caller created the process it names. +//! Reaching into a guest this process supervises: its pages, their protection, +//! and the bytes in them. -use crate::syscall::{call_raw, N_MK_PEER_COPY, N_MK_PEER_MAP, N_MK_PEER_PROTECT}; +use crate::syscall::{ + call_raw, N_MK_PEER_COPY, N_MK_PEER_MAP, N_MK_PEER_PROTECT, N_MK_PEER_TLS, N_MK_PEER_UNMAP, +}; /// Pages of a guest may be written, and may be executed. pub const PEER_PROT_WRITE: u64 = 1 << 0; @@ -30,14 +31,23 @@ pub fn mk_peer_map(pid: u32, addr: u64, len: u64, prot: u64) -> i64 { call_raw(N_MK_PEER_MAP, [pid as u64, addr, len, prot, 0, 0]) } -/// Set the protection of pages a guest already has. Every page in the -/// span must be mapped: the kernel refuses a hole rather than filling it, -/// because a caller asking for execute on a range it has not written is -/// not asking for what it thinks. +/// Set the protection of pages a guest already has. pub fn mk_peer_protect(pid: u32, addr: u64, len: u64, prot: u64) -> i64 { call_raw(N_MK_PEER_PROTECT, [pid as u64, addr, len, prot, 0, 0]) } +/// Take a span back from a guest. What exec needs, so a replacing +/// image cannot see the pages of the one it replaced. +pub fn mk_peer_unmap(pid: u32, addr: u64, len: u64) -> i64 { + call_raw(N_MK_PEER_UNMAP, [pid as u64, addr, len, 0, 0, 0]) +} + +/// The thread pointer a guest thread wakes with. A C runtime sets this +/// during startup and dereferences it immediately afterwards. +pub fn mk_peer_tls(pid: u32, base: u64) -> i64 { + call_raw(N_MK_PEER_TLS, [pid as u64, base, 0, 0, 0, 0]) +} + /// Copy into a guest this process supervises. pub fn mk_peer_write(pid: u32, guest_addr: u64, src: &[u8]) -> i64 { let args = [pid as u64, guest_addr, src.as_ptr() as u64, src.len() as u64, 1, 0]; diff --git a/userland/libc/src/syscall/mod.rs b/userland/libc/src/syscall/mod.rs index a9308b755..1567851b0 100644 --- a/userland/libc/src/syscall/mod.rs +++ b/userland/libc/src/syscall/mod.rs @@ -22,22 +22,25 @@ pub(crate) use bridge::call_diverging; pub use bridge::call_raw; pub(crate) use numbers::{ N_ADMIN_POLICY_PUSH, N_ADMIN_REBOOT, N_ADMIN_SHUTDOWN, N_CRYPTO_DECRYPT, N_CRYPTO_DECRYPT_AAD, - N_CRYPTO_ENCRYPT, N_CRYPTO_ENCRYPT_AAD, N_CRYPTO_HASH, N_CRYPTO_HKDF_SHA256, - N_CRYPTO_HMAC_SHA256, N_CRYPTO_KECCAK256, N_CRYPTO_MACHINE_KEY, N_CRYPTO_RANDOM, + N_CRYPTO_ED25519_PUBKEY, N_CRYPTO_ED25519_SIGN, N_CRYPTO_ED25519_VERIFY, N_CRYPTO_ENCRYPT, + N_CRYPTO_ENCRYPT_AAD, N_CRYPTO_HASH, N_CRYPTO_HKDF_SHA256, N_CRYPTO_HMAC_SHA256, + N_CRYPTO_KECCAK256, N_CRYPTO_RANDOM, N_CRYPTO_SECP256K1_PUBKEY, N_CRYPTO_SECP256K1_SIGN, N_CRYPTO_X25519_PUBLIC, N_CRYPTO_X25519_SHARED, N_GFX_DISPLAY_DIMENSIONS, N_MK_ARGS, N_MK_ATTEST_DOC, N_MK_ATTEST_ENTRIES, N_MK_ATTEST_STATUS, N_MK_BATTERY_STATUS, N_MK_CAPSULE_LOAD, N_MK_CAPSULE_VERIFY, N_MK_CAP_CHECK, N_MK_CAP_GRANT, N_MK_CAP_REVOKE, N_MK_DEBUG, N_MK_DEVICE_CLAIM, N_MK_DEVICE_LIST, N_MK_DEVICE_RELEASE, N_MK_DISPLAY_VSYNC_WAIT, N_MK_DMA_MAP, N_MK_DMA_UNMAP, N_MK_EXIT, N_MK_FOREIGN_REPLY, N_MK_FOREIGN_SPAWN, - N_MK_FOREIGN_START, N_MK_FOREIGN_THREAD, N_MK_FOREIGN_WAIT, N_MK_FUTEX_WAIT, N_MK_GETPID, - N_MK_INPUT_EVENT_DRAIN, N_MK_INPUT_EVENT_POST, N_MK_INPUT_EVENT_WAIT, N_MK_IPC_CALL, + N_MK_APP_INSTALL, N_MK_DEV_ROOT_CONFIRM, N_MK_DEV_ROOT_LOCAL, N_MK_FOREIGN_EXEC, N_MK_FOREIGN_FORK, N_MK_LOCAL_SIGN, N_MK_LOCAL_VERIFY, N_MK_FOREIGN_START, N_MK_FOREIGN_THREAD, + N_MK_FOREIGN_WAIT, N_MK_FUTEX_WAIT, N_MK_GETPID, N_MK_INPUT_EVENT_DRAIN, + N_MK_INPUT_EVENT_POST, N_MK_INPUT_EVENT_WAIT, N_MK_IPC_CALL, N_MK_IPC_RECV, N_MK_IPC_RECV_FROM, N_MK_IPC_REPLY, N_MK_IPC_SEND, N_MK_IPC_SEND_TO_PID, N_MK_IRQ_ACK, N_MK_IRQ_BIND, N_MK_IRQ_POLL, N_MK_IRQ_UNBIND, N_MK_IRQ_WAIT, N_MK_KILL, N_MK_MMAP, N_MK_MMIO_MAP, N_MK_MMIO_UNMAP, N_MK_PCI_CONFIG_READ, N_MK_PCI_CONFIG_WRITE, - N_MK_PEER_COPY, N_MK_PEER_MAP, N_MK_PEER_PROTECT, N_MK_PID_ALIVE, N_MK_PIO_GRANT, - N_MK_PIO_READ, N_MK_PIO_RELEASE, N_MK_PIO_WRITE, N_MK_PROC_INPUT, N_MK_PROC_OUTPUT, - N_MK_PROC_STAT, N_MK_SERVICE_LOOKUP, N_MK_SERVICE_REGISTER, N_MK_SPAWN_INSTANCE, - N_MK_STDIN_READ, N_MK_STORE_WRITE, N_MK_SURFACE_ATTACH, N_MK_SURFACE_PRESENT, - N_MK_SURFACE_REGISTER, N_MK_SURFACE_RELEASE, N_MK_SURFACE_SHARE, N_MK_TIME_ADJUST, - N_MK_TIME_MILLIS, N_MK_TIME_MONOTONIC, N_MK_TIME_RTC, N_MK_TOOL_RUN, N_MK_WAIT, N_MK_YIELD, + N_MK_PEER_COPY, N_MK_PEER_MAP, N_MK_PEER_PROTECT, N_MK_PEER_TLS, N_MK_PEER_UNMAP, N_MK_PID_ALIVE, N_MK_PIO_GRANT, N_MK_PIO_READ, + N_MK_PIO_RELEASE, N_MK_PIO_WRITE, + N_MK_PROC_INPUT, N_MK_PROC_OUTPUT, N_MK_PROC_STAT, N_MK_SERVICE_LOOKUP, N_MK_SERVICE_REGISTER, + N_MK_SPAWN_INSTANCE, N_MK_STDIN_READ, N_MK_STORE_WRITE, N_MK_SURFACE_ATTACH, + N_MK_SURFACE_PRESENT, N_MK_SURFACE_REGISTER, N_MK_SURFACE_RELEASE, N_MK_SURFACE_SHARE, + N_MK_TIME_ADJUST, N_MK_TIME_MILLIS, N_MK_TIME_MONOTONIC, N_MK_TIME_RTC, N_MK_TOOL_RUN, + N_MK_WAIT, N_MK_YIELD, }; diff --git a/userland/libc/src/syscall/numbers/foreign.rs b/userland/libc/src/syscall/numbers/foreign.rs index fadd48edb..530eaf2f6 100644 --- a/userland/libc/src/syscall/numbers/foreign.rs +++ b/userland/libc/src/syscall/numbers/foreign.rs @@ -27,3 +27,12 @@ pub(crate) const N_MK_PEER_MAP: i64 = tag4(b"MPMP"); pub(crate) const N_MK_PEER_COPY: i64 = tag4(b"MPCP"); pub(crate) const N_MK_PEER_PROTECT: i64 = tag4(b"MPPT"); pub(crate) const N_MK_FOREIGN_THREAD: i64 = tag4(b"MFTH"); +pub(crate) const N_MK_PEER_TLS: i64 = tag4(b"MPTL"); +pub(crate) const N_MK_FOREIGN_FORK: i64 = tag4(b"MFFK"); +pub(crate) const N_MK_PEER_UNMAP: i64 = tag4(b"MPUN"); +pub(crate) const N_MK_FOREIGN_EXEC: i64 = tag4(b"MFEX"); +pub(crate) const N_MK_LOCAL_SIGN: i64 = tag4(b"MLSG"); +pub(crate) const N_MK_LOCAL_VERIFY: i64 = tag4(b"MLVF"); +pub(crate) const N_MK_APP_INSTALL: i64 = tag4(b"MAIN"); +pub(crate) const N_MK_DEV_ROOT_LOCAL: i64 = tag4(b"MDRO"); +pub(crate) const N_MK_DEV_ROOT_CONFIRM: i64 = tag4(b"MDRC"); From 747edf55c34b52d64ba0888ceea50ef3fb1eddc8 Mon Sep 17 00:00:00 2001 From: eKisNonos Date: Sun, 20 Sep 2026 12:00:00 +0200 Subject: [PATCH 4/4] linux: confine the guest and prove what it is asked to run Zero capabilities was being treated as containment. brk, munmap and the wayland shm path took a guest number and acted on it, so a guest could unmap the personality or ask for a buffer no machine has. Limits come from one address plan in guest/layout.rs now. They had already drifted: only map.rs knew the mapping cursor's neighbour is EXEC_BASE and not the stack. Paths resolve to a Key only file::resolve can mint and the store wrappers take nothing else, so /linux is the root by construction. PT_INTERP and library mappings were loaded unproven, which left the attestation gate on the main image doing nothing useful. Both proven, ELF arithmetic checked. argv was read under MAX_PATH, so long arguments failed execve with nothing saying why. The resolver hands out 100.64/10 addresses and maps them back at connect, and the installer runs over the mixnet. resolve_host in net_sockets still does a clearnet lookup and is not fixed here. Package bytes are still unauthenticated, so place_entry refuses to vouch for them and the exec gate refuses what lands. tar::entries stopped at the first end-of-archive block, which in an apk is the end of the signature stream, so unpack had never written a file. Mirrored in python: one stream, sig+ctl+data, unterminated middle, garbage tail. --- .keys/install-cli_publisher_ed25519.pub | Bin 0 -> 43 bytes .keys/install-cli_publisher_mldsa65.pub | Bin 0 -> 1963 bytes .keys/install_publisher_ed25519.pub | Bin 0 -> 43 bytes .keys/install_publisher_mldsa65.pub | Bin 0 -> 1963 bytes src/userspace/capsule_linux/install.rs | 59 +++++ src/userspace/capsule_linux/mod.rs | 2 + src/userspace/capsule_linux/spawn.rs | 11 +- tools/nonos-linux-coverage | 173 +++++++++++++ tools/nonos-linux-fetch | 183 ++++++++++++++ tools/nonos-linux-pack | 237 ++++++++++++++++++ userland/capsule_linux/Capsule.mk | 12 +- userland/capsule_linux/Cargo.lock | 85 +++++++ userland/capsule_linux/Cargo.toml | 1 + userland/capsule_linux/guests/busybox.elf | Bin 0 -> 1025960 bytes userland/capsule_linux/guests/hello.elf | Bin 201 -> 0 bytes userland/capsule_linux/src/linux/abi/errno.rs | 21 +- userland/capsule_linux/src/linux/abi/mod.rs | 10 +- userland/capsule_linux/src/linux/abi/name.rs | 9 +- userland/capsule_linux/src/linux/abi/nr.rs | 38 ++- .../capsule_linux/src/linux/abi/nr_high.rs | 47 ++++ .../capsule_linux/src/linux/abi/nr_path.rs | 62 +++++ userland/capsule_linux/src/linux/attest.rs | 47 ++++ .../capsule_linux/src/linux/attest_local.rs | 30 +++ .../capsule_linux/src/linux/attest_paths.rs | 27 ++ .../src/linux/attest_publisher.rs | 44 ++++ .../capsule_linux/src/linux/call/console.rs | 39 +++ userland/capsule_linux/src/linux/call/ctl.rs | 40 +-- userland/capsule_linux/src/linux/call/cwd.rs | 59 +++++ .../capsule_linux/src/linux/call/ident.rs | 37 +++ userland/capsule_linux/src/linux/call/io.rs | 36 ++- .../capsule_linux/src/linux/call/limits.rs | 45 ++++ .../src/linux/call/limits_table.rs | 50 ++++ .../src/linux/call/{ => mem}/map.rs | 35 ++- .../src/linux/call/mem/map_anon.rs | 56 +++++ .../src/linux/call/mem/map_exec.rs | 39 +++ .../src/linux/call/{ => mem}/map_file.rs | 37 ++- .../src/linux/call/{ => mem}/map_req.rs | 4 - .../src/linux/call/{ => mem}/memory.rs | 26 +- .../capsule_linux/src/linux/call/mem/mod.rs | 32 +++ .../src/linux/call/{ => mem}/prot.rs | 38 +-- .../src/linux/call/mem/prot_span.rs | 44 ++++ userland/capsule_linux/src/linux/call/mod.rs | 56 +++-- userland/capsule_linux/src/linux/call/pipe.rs | 51 ++++ .../capsule_linux/src/linux/call/pipe_dup.rs | 49 ++++ .../capsule_linux/src/linux/call/pipe_end.rs | 31 +++ .../capsule_linux/src/linux/call/pipe_io.rs | 46 ++++ .../capsule_linux/src/linux/call/pipe_read.rs | 43 ++++ .../capsule_linux/src/linux/call/session.rs | 54 ++++ .../src/linux/call/signal_send.rs | 54 ++++ .../capsule_linux/src/linux/call/sleep.rs | 43 ++++ .../src/linux/call/spawn/clone.rs | 57 +++++ .../src/linux/call/spawn/exec.rs | 53 ++++ .../src/linux/call/spawn/exec_args.rs | 59 +++++ .../src/linux/call/spawn/exec_clear.rs | 46 ++++ .../src/linux/call/spawn/exec_load.rs | 64 +++++ .../src/linux/call/spawn/exec_resolve.rs | 65 +++++ .../src/linux/call/spawn/exec_shebang.rs | 54 ++++ .../src/linux/call/spawn/exec_threads.rs | 41 +++ .../src/linux/call/spawn/fork.rs | 41 +++ .../src/linux/call/spawn/fork_copy.rs | 53 ++++ .../capsule_linux/src/linux/call/spawn/mod.rs | 34 +++ .../src/linux/call/spawn/wait.rs | 48 ++++ .../capsule_linux/src/linux/call/thread.rs | 15 +- .../capsule_linux/src/linux/call/timeops.rs | 54 ++++ .../capsule_linux/src/linux/call/umask.rs | 32 +++ .../src/linux/call/vector_read.rs | 64 +++++ userland/capsule_linux/src/linux/env.rs | 31 +++ userland/capsule_linux/src/linux/file/at.rs | 47 ++++ .../capsule_linux/src/linux/file/close.rs | 14 +- userland/capsule_linux/src/linux/file/cstr.rs | 44 ++++ userland/capsule_linux/src/linux/file/dir.rs | 17 +- .../capsule_linux/src/linux/file/dirops.rs | 68 +++++ .../capsule_linux/src/linux/file/epoll.rs | 64 +++++ .../src/linux/file/epoll_wait.rs | 54 ++++ .../capsule_linux/src/linux/file/flags.rs | 5 +- .../capsule_linux/src/linux/file/fsync.rs | 29 +++ .../capsule_linux/src/linux/file/memfd.rs | 46 ++++ .../capsule_linux/src/linux/file/memfd_map.rs | 48 ++++ .../capsule_linux/src/linux/file/meta/mod.rs | 30 +++ .../src/linux/file/meta/perms.rs | 65 +++++ .../src/linux/file/{ => meta}/query.rs | 33 +-- .../src/linux/file/{ => meta}/stat.rs | 19 +- .../src/linux/file/{ => meta}/statbuf.rs | 7 - .../src/linux/file/meta/statfs.rs | 57 +++++ .../src/linux/file/meta/statx.rs | 59 +++++ userland/capsule_linux/src/linux/file/mod.rs | 46 +++- userland/capsule_linux/src/linux/file/open.rs | 34 ++- userland/capsule_linux/src/linux/file/path.rs | 27 +- .../capsule_linux/src/linux/file/regular.rs | 53 ++++ .../capsule_linux/src/linux/file/rename.rs | 37 +++ .../capsule_linux/src/linux/file/resolve.rs | 16 +- userland/capsule_linux/src/linux/file/root.rs | 49 ++++ .../capsule_linux/src/linux/file/store.rs | 51 ++++ .../src/linux/file/store_name.rs | 44 ++++ .../capsule_linux/src/linux/file/timerfd.rs | 50 ++++ .../src/linux/file/timerfd_read.rs | 39 +++ userland/capsule_linux/src/linux/guest/fd.rs | 32 +-- .../capsule_linux/src/linux/guest/fd_dup.rs | 41 +++ .../capsule_linux/src/linux/guest/fd_empty.rs | 44 ++++ .../capsule_linux/src/linux/guest/fd_kind.rs | 45 ++++ .../capsule_linux/src/linux/guest/fd_make.rs | 33 +-- .../capsule_linux/src/linux/guest/handle.rs | 46 ++-- .../src/linux/guest/handle_new.rs | 55 ++++ .../capsule_linux/src/linux/guest/layout.rs | 42 ++++ userland/capsule_linux/src/linux/guest/mem.rs | 59 ++--- .../capsule_linux/src/linux/guest/mem_copy.rs | 55 ++++ .../capsule_linux/src/linux/guest/mem_map.rs | 56 +++++ .../src/linux/guest/mem_unmap.rs | 44 ++++ userland/capsule_linux/src/linux/guest/mod.rs | 23 +- .../capsule_linux/src/linux/guest/region.rs | 25 ++ .../src/linux/guest/region_cut.rs | 41 +++ .../src/linux/guest/region_find.rs | 39 +++ .../capsule_linux/src/linux/image/elf_phdr.rs | 19 +- .../capsule_linux/src/linux/image/interp.rs | 43 +--- .../src/linux/image/interp_ld.rs | 40 +++ .../capsule_linux/src/linux/image/load.rs | 21 +- .../capsule_linux/src/linux/image/loaded.rs | 22 +- userland/capsule_linux/src/linux/image/mod.rs | 8 +- .../capsule_linux/src/linux/image/phdr.rs | 20 +- .../capsule_linux/src/linux/image/segment.rs | 22 +- .../capsule_linux/src/linux/image/stack.rs | 53 ++-- .../src/linux/image/stack_guard.rs | 31 +++ .../src/linux/image/stack_strings.rs | 46 ++++ .../src/linux/image/stack_words.rs | 31 +++ .../src/linux/install/download.rs | 34 +++ .../capsule_linux/src/linux/install/enrol.rs | 45 ++++ .../capsule_linux/src/linux/install/http.rs | 61 +++++ .../capsule_linux/src/linux/install/index.rs | 69 +++++ .../src/linux/install/index_load.rs | 40 +++ .../capsule_linux/src/linux/install/mod.rs | 31 +++ .../capsule_linux/src/linux/install/place.rs | 36 +++ .../src/linux/install/place_entry.rs | 71 ++++++ .../src/linux/install/provenance.rs | 26 ++ .../capsule_linux/src/linux/install/run.rs | 75 ++++++ .../capsule_linux/src/linux/install/tar.rs | 63 +++++ .../src/linux/install/tar_field.rs | 40 +++ userland/capsule_linux/src/linux/mod.rs | 13 +- .../capsule_linux/src/linux/net/connect.rs | 33 ++- userland/capsule_linux/src/linux/net/dgram.rs | 52 ++++ .../capsule_linux/src/linux/net/dgram_addr.rs | 43 ++++ .../src/linux/net/dns/automap.rs | 50 ++++ .../capsule_linux/src/linux/net/dns/decide.rs | 40 +++ .../capsule_linux/src/linux/net/dns/mod.rs | 28 +++ .../capsule_linux/src/linux/net/dns/name.rs | 47 ++++ .../capsule_linux/src/linux/net/dns/open.rs | 29 +++ .../capsule_linux/src/linux/net/dns/reply.rs | 50 ++++ .../capsule_linux/src/linux/net/dns/serve.rs | 52 ++++ userland/capsule_linux/src/linux/net/mod.rs | 15 +- userland/capsule_linux/src/linux/net/ops.rs | 14 +- userland/capsule_linux/src/linux/net/poll.rs | 39 ++- .../src/linux/net/poll_socket.rs | 40 +++ userland/capsule_linux/src/linux/net/raw.rs | 47 ++++ .../capsule_linux/src/linux/net/raw_io.rs | 57 +++++ .../capsule_linux/src/linux/net/select.rs | 67 +++++ .../capsule_linux/src/linux/net/socket.rs | 14 +- userland/capsule_linux/src/linux/origin.rs | 29 +++ userland/capsule_linux/src/linux/request.rs | 41 +++ .../capsule_linux/src/linux/serve/dispatch.rs | 5 +- userland/capsule_linux/src/linux/serve/mod.rs | 4 + .../capsule_linux/src/linux/serve/table.rs | 68 +++-- .../src/linux/serve/table_file.rs | 74 ++++++ .../src/linux/serve/table_mem.rs | 33 +++ .../src/linux/serve/table_net.rs | 42 ++++ .../src/linux/serve/table_proc.rs | 45 ++++ userland/capsule_linux/src/linux/source.rs | 44 ++-- userland/capsule_linux/src/linux/start.rs | 44 ++-- .../capsule_linux/src/linux/start_guest.rs | 56 +++++ userland/capsule_linux/src/linux/unix/conn.rs | 49 ++++ userland/capsule_linux/src/linux/unix/give.rs | 68 +++++ userland/capsule_linux/src/linux/unix/mod.rs | 36 +++ userland/capsule_linux/src/linux/unix/msg.rs | 51 ++++ .../capsule_linux/src/linux/unix/msg_parts.rs | 39 +++ .../src/linux/unix/msg_rights.rs | 62 +++++ userland/capsule_linux/src/linux/unix/path.rs | 49 ++++ .../capsule_linux/src/linux/unix/recvmsg.rs | 59 +++++ .../capsule_linux/src/linux/unix/sendmsg.rs | 39 +++ userland/capsule_linux/src/linux/unix/sock.rs | 65 +++++ .../capsule_linux/src/linux/unix/sock_io.rs | 54 ++++ .../capsule_linux/src/linux/wayland/args.rs | 47 ++++ .../capsule_linux/src/linux/wayland/buffer.rs | 59 +++++ .../capsule_linux/src/linux/wayland/commit.rs | 50 ++++ .../src/linux/wayland/handlers.rs | 75 ++++++ .../capsule_linux/src/linux/wayland/input.rs | 59 +++++ .../src/linux/wayland/input_enter.rs | 65 +++++ .../src/linux/wayland/input_key.rs | 43 ++++ .../src/linux/wayland/input_send.rs | 62 +++++ .../capsule_linux/src/linux/wayland/keymap.rs | 51 ++++ .../src/linux/wayland/keymap_file.rs | 41 +++ .../capsule_linux/src/linux/wayland/mod.rs | 50 ++++ .../capsule_linux/src/linux/wayland/object.rs | 70 ++++++ .../capsule_linux/src/linux/wayland/ops.rs | 61 +++++ .../capsule_linux/src/linux/wayland/out.rs | 59 +++++ .../src/linux/wayland/present.rs | 57 +++++ .../src/linux/wayland/present_surface.rs | 61 +++++ .../src/linux/wayland/registry.rs | 38 +++ .../capsule_linux/src/linux/wayland/route.rs | 62 +++++ .../capsule_linux/src/linux/wayland/scene.rs | 67 +++++ .../capsule_linux/src/linux/wayland/seat.rs | 36 +++ .../capsule_linux/src/linux/wayland/serve.rs | 56 +++++ .../capsule_linux/src/linux/wayland/shm.rs | 71 ++++++ .../capsule_linux/src/linux/wayland/state.rs | 48 ++++ .../src/linux/wayland/surface.rs | 54 ++++ .../src/linux/wayland/unserved.rs | 56 +++++ .../capsule_linux/src/linux/wayland/wire.rs | 40 +++ .../capsule_linux/src/linux/wayland/xdg.rs | 60 +++++ userland/capsule_linux_proofs/Cargo.lock | 7 + userland/capsule_linux_proofs/Cargo.toml | 19 ++ .../capsule_linux_proofs/src/image/mod.rs | 34 +++ .../capsule_linux_proofs/src/install/mod.rs | 27 ++ userland/capsule_linux_proofs/src/lib.rs | 46 ++++ userland/capsule_linux_proofs/src/tests.rs | 27 ++ .../src/tests/dirent_tests.rs | 68 +++++ .../src/tests/elf_tests.rs | 71 ++++++ .../src/tests/exec_shebang_tests.rs | 68 +++++ .../src/tests/resolve_tests.rs | 57 +++++ .../src/tests/stack_words_tests.rs | 55 ++++ .../src/tests/stat_tests.rs | 63 +++++ .../src/tests/tar_tests.rs | 61 +++++ .../src/tests/wire_tests.rs | 65 +++++ .../capsule_linux_proofs/vectors/apkindex.tar | Bin 0 -> 2000000 bytes .../capsule_linux_proofs/vectors/dynamic.elf | Bin 0 -> 352 bytes .../capsule_linux_proofs/vectors/libffi.tar | Bin 0 -> 54784 bytes 222 files changed, 9027 insertions(+), 657 deletions(-) create mode 100644 .keys/install-cli_publisher_ed25519.pub create mode 100644 .keys/install-cli_publisher_mldsa65.pub create mode 100644 .keys/install_publisher_ed25519.pub create mode 100644 .keys/install_publisher_mldsa65.pub create mode 100644 src/userspace/capsule_linux/install.rs create mode 100755 tools/nonos-linux-coverage create mode 100755 tools/nonos-linux-fetch create mode 100755 tools/nonos-linux-pack create mode 100755 userland/capsule_linux/guests/busybox.elf delete mode 100644 userland/capsule_linux/guests/hello.elf create mode 100644 userland/capsule_linux/src/linux/abi/nr_high.rs create mode 100644 userland/capsule_linux/src/linux/abi/nr_path.rs create mode 100644 userland/capsule_linux/src/linux/attest.rs create mode 100644 userland/capsule_linux/src/linux/attest_local.rs create mode 100644 userland/capsule_linux/src/linux/attest_paths.rs create mode 100644 userland/capsule_linux/src/linux/attest_publisher.rs create mode 100644 userland/capsule_linux/src/linux/call/console.rs create mode 100644 userland/capsule_linux/src/linux/call/cwd.rs create mode 100644 userland/capsule_linux/src/linux/call/ident.rs create mode 100644 userland/capsule_linux/src/linux/call/limits.rs create mode 100644 userland/capsule_linux/src/linux/call/limits_table.rs rename userland/capsule_linux/src/linux/call/{ => mem}/map.rs (68%) create mode 100644 userland/capsule_linux/src/linux/call/mem/map_anon.rs create mode 100644 userland/capsule_linux/src/linux/call/mem/map_exec.rs rename userland/capsule_linux/src/linux/call/{ => mem}/map_file.rs (56%) rename userland/capsule_linux/src/linux/call/{ => mem}/map_req.rs (87%) rename userland/capsule_linux/src/linux/call/{ => mem}/memory.rs (67%) create mode 100644 userland/capsule_linux/src/linux/call/mem/mod.rs rename userland/capsule_linux/src/linux/call/{ => mem}/prot.rs (53%) create mode 100644 userland/capsule_linux/src/linux/call/mem/prot_span.rs create mode 100644 userland/capsule_linux/src/linux/call/pipe.rs create mode 100644 userland/capsule_linux/src/linux/call/pipe_dup.rs create mode 100644 userland/capsule_linux/src/linux/call/pipe_end.rs create mode 100644 userland/capsule_linux/src/linux/call/pipe_io.rs create mode 100644 userland/capsule_linux/src/linux/call/pipe_read.rs create mode 100644 userland/capsule_linux/src/linux/call/session.rs create mode 100644 userland/capsule_linux/src/linux/call/signal_send.rs create mode 100644 userland/capsule_linux/src/linux/call/sleep.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/clone.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec_args.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec_clear.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec_load.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec_resolve.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec_shebang.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/exec_threads.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/fork.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/fork_copy.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/mod.rs create mode 100644 userland/capsule_linux/src/linux/call/spawn/wait.rs create mode 100644 userland/capsule_linux/src/linux/call/timeops.rs create mode 100644 userland/capsule_linux/src/linux/call/umask.rs create mode 100644 userland/capsule_linux/src/linux/call/vector_read.rs create mode 100644 userland/capsule_linux/src/linux/env.rs create mode 100644 userland/capsule_linux/src/linux/file/at.rs create mode 100644 userland/capsule_linux/src/linux/file/cstr.rs create mode 100644 userland/capsule_linux/src/linux/file/dirops.rs create mode 100644 userland/capsule_linux/src/linux/file/epoll.rs create mode 100644 userland/capsule_linux/src/linux/file/epoll_wait.rs create mode 100644 userland/capsule_linux/src/linux/file/fsync.rs create mode 100644 userland/capsule_linux/src/linux/file/memfd.rs create mode 100644 userland/capsule_linux/src/linux/file/memfd_map.rs create mode 100644 userland/capsule_linux/src/linux/file/meta/mod.rs create mode 100644 userland/capsule_linux/src/linux/file/meta/perms.rs rename userland/capsule_linux/src/linux/file/{ => meta}/query.rs (64%) rename userland/capsule_linux/src/linux/file/{ => meta}/stat.rs (86%) rename userland/capsule_linux/src/linux/file/{ => meta}/statbuf.rs (83%) create mode 100644 userland/capsule_linux/src/linux/file/meta/statfs.rs create mode 100644 userland/capsule_linux/src/linux/file/meta/statx.rs create mode 100644 userland/capsule_linux/src/linux/file/regular.rs create mode 100644 userland/capsule_linux/src/linux/file/rename.rs create mode 100644 userland/capsule_linux/src/linux/file/root.rs create mode 100644 userland/capsule_linux/src/linux/file/store.rs create mode 100644 userland/capsule_linux/src/linux/file/store_name.rs create mode 100644 userland/capsule_linux/src/linux/file/timerfd.rs create mode 100644 userland/capsule_linux/src/linux/file/timerfd_read.rs create mode 100644 userland/capsule_linux/src/linux/guest/fd_dup.rs create mode 100644 userland/capsule_linux/src/linux/guest/fd_empty.rs create mode 100644 userland/capsule_linux/src/linux/guest/fd_kind.rs create mode 100644 userland/capsule_linux/src/linux/guest/handle_new.rs create mode 100644 userland/capsule_linux/src/linux/guest/layout.rs create mode 100644 userland/capsule_linux/src/linux/guest/mem_copy.rs create mode 100644 userland/capsule_linux/src/linux/guest/mem_map.rs create mode 100644 userland/capsule_linux/src/linux/guest/mem_unmap.rs create mode 100644 userland/capsule_linux/src/linux/guest/region.rs create mode 100644 userland/capsule_linux/src/linux/guest/region_cut.rs create mode 100644 userland/capsule_linux/src/linux/guest/region_find.rs create mode 100644 userland/capsule_linux/src/linux/image/interp_ld.rs create mode 100644 userland/capsule_linux/src/linux/image/stack_guard.rs create mode 100644 userland/capsule_linux/src/linux/image/stack_strings.rs create mode 100644 userland/capsule_linux/src/linux/image/stack_words.rs create mode 100644 userland/capsule_linux/src/linux/install/download.rs create mode 100644 userland/capsule_linux/src/linux/install/enrol.rs create mode 100644 userland/capsule_linux/src/linux/install/http.rs create mode 100644 userland/capsule_linux/src/linux/install/index.rs create mode 100644 userland/capsule_linux/src/linux/install/index_load.rs create mode 100644 userland/capsule_linux/src/linux/install/mod.rs create mode 100644 userland/capsule_linux/src/linux/install/place.rs create mode 100644 userland/capsule_linux/src/linux/install/place_entry.rs create mode 100644 userland/capsule_linux/src/linux/install/provenance.rs create mode 100644 userland/capsule_linux/src/linux/install/run.rs create mode 100644 userland/capsule_linux/src/linux/install/tar.rs create mode 100644 userland/capsule_linux/src/linux/install/tar_field.rs create mode 100644 userland/capsule_linux/src/linux/net/dgram.rs create mode 100644 userland/capsule_linux/src/linux/net/dgram_addr.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/automap.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/decide.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/mod.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/name.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/open.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/reply.rs create mode 100644 userland/capsule_linux/src/linux/net/dns/serve.rs create mode 100644 userland/capsule_linux/src/linux/net/poll_socket.rs create mode 100644 userland/capsule_linux/src/linux/net/raw.rs create mode 100644 userland/capsule_linux/src/linux/net/raw_io.rs create mode 100644 userland/capsule_linux/src/linux/net/select.rs create mode 100644 userland/capsule_linux/src/linux/origin.rs create mode 100644 userland/capsule_linux/src/linux/request.rs create mode 100644 userland/capsule_linux/src/linux/serve/table_file.rs create mode 100644 userland/capsule_linux/src/linux/serve/table_mem.rs create mode 100644 userland/capsule_linux/src/linux/serve/table_net.rs create mode 100644 userland/capsule_linux/src/linux/serve/table_proc.rs create mode 100644 userland/capsule_linux/src/linux/start_guest.rs create mode 100644 userland/capsule_linux/src/linux/unix/conn.rs create mode 100644 userland/capsule_linux/src/linux/unix/give.rs create mode 100644 userland/capsule_linux/src/linux/unix/mod.rs create mode 100644 userland/capsule_linux/src/linux/unix/msg.rs create mode 100644 userland/capsule_linux/src/linux/unix/msg_parts.rs create mode 100644 userland/capsule_linux/src/linux/unix/msg_rights.rs create mode 100644 userland/capsule_linux/src/linux/unix/path.rs create mode 100644 userland/capsule_linux/src/linux/unix/recvmsg.rs create mode 100644 userland/capsule_linux/src/linux/unix/sendmsg.rs create mode 100644 userland/capsule_linux/src/linux/unix/sock.rs create mode 100644 userland/capsule_linux/src/linux/unix/sock_io.rs create mode 100644 userland/capsule_linux/src/linux/wayland/args.rs create mode 100644 userland/capsule_linux/src/linux/wayland/buffer.rs create mode 100644 userland/capsule_linux/src/linux/wayland/commit.rs create mode 100644 userland/capsule_linux/src/linux/wayland/handlers.rs create mode 100644 userland/capsule_linux/src/linux/wayland/input.rs create mode 100644 userland/capsule_linux/src/linux/wayland/input_enter.rs create mode 100644 userland/capsule_linux/src/linux/wayland/input_key.rs create mode 100644 userland/capsule_linux/src/linux/wayland/input_send.rs create mode 100644 userland/capsule_linux/src/linux/wayland/keymap.rs create mode 100644 userland/capsule_linux/src/linux/wayland/keymap_file.rs create mode 100644 userland/capsule_linux/src/linux/wayland/mod.rs create mode 100644 userland/capsule_linux/src/linux/wayland/object.rs create mode 100644 userland/capsule_linux/src/linux/wayland/ops.rs create mode 100644 userland/capsule_linux/src/linux/wayland/out.rs create mode 100644 userland/capsule_linux/src/linux/wayland/present.rs create mode 100644 userland/capsule_linux/src/linux/wayland/present_surface.rs create mode 100644 userland/capsule_linux/src/linux/wayland/registry.rs create mode 100644 userland/capsule_linux/src/linux/wayland/route.rs create mode 100644 userland/capsule_linux/src/linux/wayland/scene.rs create mode 100644 userland/capsule_linux/src/linux/wayland/seat.rs create mode 100644 userland/capsule_linux/src/linux/wayland/serve.rs create mode 100644 userland/capsule_linux/src/linux/wayland/shm.rs create mode 100644 userland/capsule_linux/src/linux/wayland/state.rs create mode 100644 userland/capsule_linux/src/linux/wayland/surface.rs create mode 100644 userland/capsule_linux/src/linux/wayland/unserved.rs create mode 100644 userland/capsule_linux/src/linux/wayland/wire.rs create mode 100644 userland/capsule_linux/src/linux/wayland/xdg.rs create mode 100644 userland/capsule_linux_proofs/Cargo.lock create mode 100644 userland/capsule_linux_proofs/Cargo.toml create mode 100644 userland/capsule_linux_proofs/src/image/mod.rs create mode 100644 userland/capsule_linux_proofs/src/install/mod.rs create mode 100644 userland/capsule_linux_proofs/src/lib.rs create mode 100644 userland/capsule_linux_proofs/src/tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/dirent_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/elf_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/exec_shebang_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/resolve_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/stack_words_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/stat_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/tar_tests.rs create mode 100644 userland/capsule_linux_proofs/src/tests/wire_tests.rs create mode 100644 userland/capsule_linux_proofs/vectors/apkindex.tar create mode 100644 userland/capsule_linux_proofs/vectors/dynamic.elf create mode 100644 userland/capsule_linux_proofs/vectors/libffi.tar diff --git a/.keys/install-cli_publisher_ed25519.pub b/.keys/install-cli_publisher_ed25519.pub new file mode 100644 index 0000000000000000000000000000000000000000..795753524e1dbfafdce4b254e8ed183da7ac49dc GIT binary patch literal 43 zcmebC_wx@9@HS**P?&Mpx6eV>eS5f>ZQBB=T=nw`Gq6DRt6~_Ly~)7hE|Zr*N@YhjzihLZzoas(L|wR7##migk`c`%z}29fR*w-(xeGM} z5zCjS&74iuU)j+lks7s!g$uaMlN?obfgctl41*e?zr?HD*cTn?&G!WHm%_~x(%gj; zK~m4(t%mUDvm#lQFyt&3EKWAwyG1sXRSFAmR!e|Yqi3KCJEzM37UuvheB?H^ju0FRFU zF%9hcC`YIRSw-*UkDe9fQ|Y( z*&kU60%${eqk5sWNsI+jhT7r9lbl#kz?_X3tfcxQ(z?}d4z0SLLu~a>7Ufr5 z2g0@_n!modMnP6W80D;vC;Xt;2(6}~BnsL|$CyYMWMehHe z0{U&wu4@8i@?CdZBsP!UbZ$_cc6y)WQGu_y2vH<+{JmD(!JY~%3Yr4Hw90@BoFYk5 zO_3Khj_vk9?jZq4;Dea&W!t8@$m_GT@jDq>zo4u89I6|#6;UhyFRz-=TnF@z*frrR%gTQS4wUf zjIg*byLG~6FDqxqBYRjz5X6mJh{ee)8$y#_MQ-mEUZ17^^{>_`!s1{O?W?1`fS^9X zdYd}R&PARhJ*J;Q>_6g|ht3FJeM%Q{iEVuP@!_lTSxV9QO`*^Ca!I8CPDvdVsRXAN z(Cb!uH~s@|AWRT3xSbb!Vh!yA^Cu+0=`gGfS#j`}u>``?@6;Dl={#jMJqFV%cx}t| zUyX|S%lvM%a*|)_)`A3gc~IDDjZ6ojHbN=REhMnIlN4Q9PocWl#$C1HsI*IQp898a&0@ z9`n%lxmF0QMotYptY;Ek?2hCeK}3K1KDQWG>o~{tqU*#3@sxv*N!y(jJ-n8a85heAnEOFOK^* zwiP|2iG$_&)?Z=~r(p`2mSE*M&NoPzmwx)yDtq{x5!X3>zI{Aua<26SA3(1<3FQ4@ z{=;5P1#IWY9A!OW{hlT)Lsz@Z*#ym`0Upk@VW#wPQ87PJbAKiAKYCjTx@L2{PX&X|c39%3L zd9iS=mFc5ZI{d{Ao?sewh_#nma+78p))j|wALn@vS{{E+KY!l4( z^AGPc^n1Vj=^IV3h!IR&`CD0*kBT<)bmFls+DHWOtzJ00=WFC_-Nt&)@_X)#h*AHp zJ6mpEqEj9yLMEbalNg;E!068RL%}x2GAeCrq+K3KWd*;0k}~)XF(-S889+=Oc&}~g zMeR1~D>`HRp!i`LcJny+(cIovz}VZ~IRj#wDws&l%z7dd8;|&TBx#&`_MvxvQ&p{T xknBY-2{d4l;&@z^kj@(bj`};eP8SACC-F^M$tw&q@|(RgFTZv|apeCBSJL^&(Xjvk literal 0 HcmV?d00001 diff --git a/.keys/install_publisher_ed25519.pub b/.keys/install_publisher_ed25519.pub new file mode 100644 index 0000000000000000000000000000000000000000..dff768db3e7b67a9e5652f960432ed25dfa97cbb GIT binary patch literal 43 zcmebC_wx@9@HS**P+*(dpSb;#LQC=?w&u6did_pAK6}6BsIOA{emA~c!M{@hX;%`J literal 0 HcmV?d00001 diff --git a/.keys/install_publisher_mldsa65.pub b/.keys/install_publisher_mldsa65.pub new file mode 100644 index 0000000000000000000000000000000000000000..b7a2c3398d90fc5bcc0fd73a1d092f9ce85ebc64 GIT binary patch literal 1963 zcmV;c2UPe@Pfkx$P)jib2cWbK2+u-@4Q0HbwAcDAn-ft8QXTB9Ev3Vqza|i2BxICQ zRAt-5@EV!oYDL;IFPCRL2-l-zT3DvEjNzTSv>es7H<aH`omSMxp`foDM{*Fq-n>@t_=&oOfdRe&b|GOaeURo-q zmyyOsxW!;);%9Ig0qMBXZTfEeX0XWov3|UfFdJxBtv24)ukauw-S*EHur}bB0zLhO zvg4S`#tljl&4u*3CuA%;U&o$6_$?S|{!lr4)dVWHl?&?Fm49oDi_zaNxAY@dUCu?) zzt1XsM#lN|?&#(NrlCurVmI|fp+=4M(dr|H_gy#W<)+~9l40%1gVF}zCY>_(N|m)| zEpC<2E!?SS>+3ER!1f#`vOA~?OyZS=hv3;20)5*(PcAAH>FhkJgFk~w$PtBgypJ6A zEo_hGpT>AVY5Lb0o>p;%QnkNJf0Ut5%Ex1dv?YncTot0*dBBF7hmjE$MOTqb^qo{p z!D_aEG;XTUva)`^3GYFOxZUO|(FmT+>)5l-p+@O3KR)#HVi6l(J~5a8y!vsxRu4!R zPvw($A^~#rx#Pxi({u}6M>bz1E+X8jW2V6@^_w9&hbOqY)F5ZB0`@K+; zZc;(L6{eaX5aZ`8bjQ6CE;*0QBgj+tY@0tmOWE`%NLLnWWPAl-U?Zy&-Qt}8c*|mCuW3%hHub_ ziYKT=aL}KRSDR~^KZmdpGOR{8i?h!KV|+q`J!+cmgVTIPA`D?t631PKr+8Zc_yWg2FK?+uYb&T11I^+tcDx zYYd7A)e%yUUs@b~E@>Uqn6)XeMfHAC)%A4rl;jQ~q;mGE-!kL42sEm)(u9YGNj{+l zxgI<|G*ki@UwL4`uMql)^I)>yop=Y|KYvqw1R#gXH)~TC9@WlEe{Nj$ z9YXB+Dl_hHvb7Wu4SfkXqVaYfM#wKL$<6DOhZ9R%&X4)Gz~5xynIx|LY>Wj_u6|3M ze@MO(xEo+J?OMJ;d!K!EFAb2$z!q355<>vla2J|IXpSVRBsnEOteRWVR>9$uoRH9#aVAF510x-mZC@<4f3{Nls22t|lt9@p zYc6C#L7<$QIW{M1^h3(BRH&rb67+-ZMtBT>HJa<3mz!=v7-LqlK6J-!#~+2kpG8D0XN1%?CpRX!x-_VQ^f8(YhYLY6JLy{#@YNd#Uz$&hCOHpLBEccop=}O&zMGi^z=M5yvX3dJX4e^nmr^Up++_hL}d2sN&vJ6#WSvw&Q=rRu45v zd?zaf#~IT7f;cE@dP{4y(dAx%ml0=>RqpRfq5)bxQ#cg#8}R@86oS0ql}~*GuRM;UzsE! z{-XrM+LYR8Rukb8m#Ld)S0hu%>0PHt+-S!-atWox>)|3I##OZJuqWSUBs0BgRMUu>o>r1JnMz7+IYS~vG0kMz@lSYf^l z?mBiaIC{(9daZyw9>#Xf&y{U_P#KzcX=JejE61t$-fXw$1*1odCn_KrGu^I z=Z9cKnzYB&y*I=~RtAB<#d)=zVIuI@lv+_@VYTx*;gV2Bvz5(LqCH50_X)?7IY*dO x2!h&Z^Bsi2h2D{Yt#MSH*{A%rlg0{=^q*Z~{)g-0V&;^mwSUx8Hv}T9Q5Tad-p>F4 literal 0 HcmV?d00001 diff --git a/src/userspace/capsule_linux/install.rs b/src/userspace/capsule_linux/install.rs new file mode 100644 index 000000000..829f803dc --- /dev/null +++ b/src/userspace/capsule_linux/install.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The personality, spawned to install a package rather than host one. + +use alloc::string::String; +use alloc::vec; + +use super::embed::{ + LINUX_ATTESTATION_BYTES, LINUX_ELF, LINUX_MANIFEST_BYTES, LINUX_NONOS_ID_CERT_BYTES, +}; +use super::spawn::LINUX_CAPS; +use crate::kernel_core::process_spawn::capsule_spawn::{self, CapsuleSpecVerified, SpawnError}; +use crate::security::nonos_id_cert::IdCertVerifyError; +use crate::security::nonos_trust_anchor::{ + decode as decode_trust_anchor, BAKED_TRUST_ANCHOR_POLICY, +}; + +// A second service name, because the installer is a second live process and +// two of them announcing one endpoint is a race over which answers. +const SERVICE_NAME: &str = "app.linux.install"; +const SERVICE_PORT: u32 = 4938; +const REPLY_INBOX: &str = "endpoint.app.linux.install.reply"; +const REPLY_PORT: u32 = 4939; + +pub fn spawn_install(package: &str) -> Result { + let trust_anchor = decode_trust_anchor(BAKED_TRUST_ANCHOR_POLICY) + .map_err(|_| SpawnError::NonosIdCertRejected(IdCertVerifyError::TrustAnchorPolicy))?; + let spec = CapsuleSpecVerified { + name: SERVICE_NAME, + service_port: SERVICE_PORT, + reply_inbox: REPLY_INBOX, + reply_port: REPLY_PORT, + elf: LINUX_ELF, + nonos_id_cert_bytes: LINUX_NONOS_ID_CERT_BYTES, + manifest_bytes: LINUX_MANIFEST_BYTES, + attestation_trailer: LINUX_ATTESTATION_BYTES, + target_triple: env!("NONOS_USER_TARGET"), + requested_caps: LINUX_CAPS, + debug_tag: b"[LINUX-INSTALL] elf error:", + }; + let pid = capsule_spawn::spawn_verified(&spec, &trust_anchor, None)?; + let argv = vec![String::from("install"), String::from(package)]; + crate::process::with_process(pid, |pcb| *pcb.argv.lock() = argv); + Ok(pid) +} diff --git a/src/userspace/capsule_linux/mod.rs b/src/userspace/capsule_linux/mod.rs index fe7590c8e..a4f0158a5 100644 --- a/src/userspace/capsule_linux/mod.rs +++ b/src/userspace/capsule_linux/mod.rs @@ -18,8 +18,10 @@ //! kernel, and the spawn that admits them. mod embed; +mod install; mod spawn; mod state; +pub use install::spawn_install; pub use spawn::{spawn_linux_capsule, LINUX_CAPS}; pub use state::shared_state; diff --git a/src/userspace/capsule_linux/spawn.rs b/src/userspace/capsule_linux/spawn.rs index f0a6bbd70..06493bee2 100644 --- a/src/userspace/capsule_linux/spawn.rs +++ b/src/userspace/capsule_linux/spawn.rs @@ -15,9 +15,7 @@ // along with this program. If not, see . //! Admitting the Linux personality through the same verified path every -//! capsule takes. ForeignExec is the only capability here that no other -//! capsule holds, and it is what lets this one host code the kernel has -//! not verified. Its guests hold nothing at all. +//! capsule takes. use super::embed::{ LINUX_ATTESTATION_BYTES, LINUX_ELF, LINUX_MANIFEST_BYTES, LINUX_NONOS_ID_CERT_BYTES, @@ -36,14 +34,15 @@ const REPLY_INBOX: &str = "endpoint.app.linux.reply"; const REPLY_PORT: u32 = 4937; const TARGET_TRIPLE: &str = env!("NONOS_USER_TARGET"); -/// Declared once here and mirrored by the capsule's manifest, which is -/// what the gate actually enforces. +/// Declared once here and mirrored by the capsule's manifest, which is what +/// the gate actually enforces. pub const LINUX_CAPS: u64 = Capability::CoreExec.bit() | Capability::IPC.bit() | Capability::Memory.bit() | Capability::Crypto.bit() | Capability::Debug.bit() - | Capability::ForeignExec.bit(); + | Capability::ForeignExec.bit() + | Capability::LocalSign.bit(); pub fn spawn_linux_capsule() -> Result<(), SpawnError> { let trust_anchor = decode_trust_anchor(BAKED_TRUST_ANCHOR_POLICY) diff --git a/tools/nonos-linux-coverage b/tools/nonos-linux-coverage new file mode 100755 index 000000000..7781badba --- /dev/null +++ b/tools/nonos-linux-coverage @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 +# NONOS Operating System +# Copyright (C) 2026 NONOS Contributors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +"""Which packages the personality can actually run, and what stops the rest. + +A listing that installs and then dies on its first unimplemented syscall +is worse than one that was never offered, so this answers the question +before anyone clicks: disassemble every executable in every fetched +package, find the immediate loaded into eax ahead of each `syscall`, and +compare that set against what the personality's dispatch tables answer. + +The analysis is deliberately static and deliberately pessimistic. A +number reached only on a path the program never takes still counts as +required here, because nothing in the binary says which paths run. So a +package this reports as covered is covered; one it reports as blocked +may still work, and the named syscall is where to look first. +""" + +import argparse +import io +import re +import subprocess +import sys +import tarfile +import zlib +from collections import Counter +from pathlib import Path + +# `mov $N, %eax` close enough before a syscall to be its number. objdump +# writes the immediate in hex with a $ prefix. +MOV_EAX = re.compile(r"mov\s+\$0x([0-9a-f]+),%eax") +SYSCALL = re.compile(r"\bsyscall\b") + +# How far back to look. A compiler may schedule a few instructions +# between loading the number and making the call. +WINDOW = 12 + + +def payload(apk: Path) -> bytes: + """The tar stream inside an apk. + + An apk is several gzip members end to end: a signature, a control + segment, then the data. `tarfile.open(r:gz)` stops after the first, + which holds no files at all, so reading one that way finds nothing + and looks exactly like a package with no binaries in it. Every + member is inflated and concatenated instead. + """ + raw = apk.read_bytes() + out, at = bytearray(), 0 + while at < len(raw): + d = zlib.decompressobj(47) + try: + out += d.decompress(raw[at:]) + except zlib.error: + break + if d.unused_data == raw[at:]: + break + at = len(raw) - len(d.unused_data) + return bytes(out) + + +def executables(apk: Path, into: Path) -> list: + """Every ELF in the package, unpacked to a scratch directory.""" + out = [] + try: + with tarfile.open(fileobj=io.BytesIO(payload(apk))) as t: + for member in t.getmembers(): + if not member.isfile() or member.size < 128: + continue + f = t.extractfile(member) + if f is None: + continue + head = f.read(4) + if head != b"\x7fELF": + continue + f.seek(0) + at = into / member.name.replace("/", "_") + at.write_bytes(f.read()) + out.append(at) + except (tarfile.TarError, OSError, EOFError): + # Alpine's apk is a concatenated stream; a truncated tail after + # the payload is normal and not a reason to discard what parsed. + pass + return out + + +def numbers_used(elf: Path) -> set: + try: + text = subprocess.run( + ["objdump", "-d", "--no-show-raw-insn", str(elf)], + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, timeout=120, + ).stdout.decode(errors="replace") + except (OSError, subprocess.SubprocessError): + return set() + lines = text.splitlines() + used, recent = set(), [] + for line in lines: + m = MOV_EAX.search(line) + if m: + recent.append(int(m.group(1), 16)) + recent = recent[-WINDOW:] + continue + if SYSCALL.search(line) and recent: + used.add(recent[-1]) + return used + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("--cache", type=Path, default=Path("target/market-cache")) + ap.add_argument("--served", type=Path, required=True, + help="file of syscall numbers the personality answers") + ap.add_argument("--scratch", type=Path, default=Path("target/coverage-scratch")) + ap.add_argument("--names", type=Path, + help="capsule_linux abi/nr.rs, to name the gaps") + args = ap.parse_args() + + served = {int(x) for x in args.served.read_text().split()} + naming = {} + if args.names and args.names.exists(): + for name, num in re.findall(r"pub const ([A-Z0-9_]+): u64 = (\d+);", + args.names.read_text()): + naming[int(num)] = name.lower() + + args.scratch.mkdir(parents=True, exist_ok=True) + covered, blocked, missing = [], [], Counter() + for apk in sorted(args.cache.glob("*.apk")): + used = set() + for elf in executables(apk, args.scratch): + used |= numbers_used(elf) + elf.unlink(missing_ok=True) + if not used: + continue + gap = used - served + name = apk.name.rsplit("-", 2)[0] + if gap: + blocked.append((name, sorted(gap))) + missing.update(gap) + else: + covered.append(name) + + total = len(covered) + len(blocked) + if total == 0: + # Finding no syscalls in 76 packages means the reader is broken, + # not that the packages are empty. Saying "0 of 0 covered" here + # reads as a clean pass, which is the worst possible answer. + print("no binaries were read; the extractor or objdump is not working", + file=sys.stderr) + return 2 + print(f"{len(covered)} of {total} packages need nothing the personality lacks\n") + if covered: + print("runs today:", ", ".join(sorted(covered))) + print(f"\nmost common gaps across {len(blocked)} blocked packages:") + for num, count in missing.most_common(20): + print(f" {count:3} packages need {num:4} {naming.get(num, '(unnamed)')}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/nonos-linux-fetch b/tools/nonos-linux-fetch new file mode 100755 index 000000000..3954f5030 --- /dev/null +++ b/tools/nonos-linux-fetch @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +# NONOS Operating System +# Copyright (C) 2026 NONOS Contributors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +"""Install a Linux program and everything it needs, from a distribution. + +`nonos-linux-pack` says which shared libraries a program needs and refuses to +pack one whose closure is incomplete. This closes that loop: it reads the +distribution's package index, finds the package providing each missing +library, unpacks it into the sysroot, and repeats until the closure is whole +or nothing can supply the rest. + +The index is the distribution's own, fetched over TLS and used as data: a +package is only ever unpacked into the sysroot directory, never executed, and +nothing here runs a package's scripts. +""" + +import argparse +import subprocess +import sys +import tarfile +import urllib.request +from pathlib import Path + +MIRROR = "https://dl-cdn.alpinelinux.org/alpine" +BRANCHES = ("main", "community") + + +def fetch(url: str, into: Path) -> Path: + if into.exists(): + return into + into.parent.mkdir(parents=True, exist_ok=True) + with urllib.request.urlopen(url, timeout=120) as r: + into.write_bytes(r.read()) + return into + + +def index(cache: Path, release: str, arch: str, branch: str): + """(soname -> package, name -> package), from the branch's APKINDEX.""" + base = f"{MIRROR}/{release}/{branch}/{arch}" + tgz = fetch(f"{base}/APKINDEX.tar.gz", cache / f"{branch}-APKINDEX.tar.gz") + with tarfile.open(tgz) as t: + raw = t.extractfile("APKINDEX").read().decode(errors="replace") + libs, pkgs = {}, {} + name = version = None + for line in raw.split("\n"): + if line.startswith("P:"): + name = line[2:] + elif line.startswith("V:"): + version = line[2:] + if name: + pkgs.setdefault(name, (name, version, base)) + elif line.startswith("p:") and name and version: + for token in line[2:].split(): + if token.startswith("so:"): + libs.setdefault(token[3:].split("=")[0], (name, version, base)) + return libs, pkgs + + +def missing(pack: Path, sysroot: Path, programs) -> list: + """What the closure tool says it cannot resolve.""" + cmd = [sys.executable, str(pack), "--sysroot", str(sysroot)] + for p in programs: + cmd += ["--program", p] + done = subprocess.run(cmd, capture_output=True, text=True) + if done.returncode == 0: + return [] + out = [] + for line in done.stderr.split("\n"): + line = line.strip() + if line and not line.startswith("linux-pack:"): + out.append(line) + return out + + +def safe(member, dest: str): + """Reject anything that would write outside the sysroot, and rewrite a + link whose target is absolute so it points inside it instead. + + A distribution is full of absolute symlinks: every coreutils applet + points at /bin/busybox. Following one during extraction would write to + the real root, so the target is made relative to the sysroot rather + than the archive being trusted or the link being dropped.""" + name = member.name.lstrip("./") + if name.startswith("/") or ".." in Path(name).parts: + return None + member = member.replace(name=name, deep=False) + if member.issym() or member.islnk(): + target = member.linkname + if target.startswith("/"): + up = "../" * (len(Path(name).parts) - 1) + member = member.replace(linkname=up + target.lstrip("/"), deep=False) + return member + + +def install(sysroot: Path, cache: Path, package: str, version: str, base: str) -> bool: + apk = fetch(f"{base}/{package}-{version}.apk", cache / f"{package}-{version}.apk") + with tarfile.open(apk) as t: + members = [m for m in t.getmembers() if not m.name.startswith(".")] + for m in members: + # A package may replace a file an earlier one installed, and + # the earlier one is often read-only. Clear the way rather + # than stopping halfway through a package. + at = sysroot / m.name.lstrip("./") + if at.is_symlink() or at.is_file(): + at.unlink() + t.extractall(sysroot, members=members, filter=safe) + return True + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--sysroot", type=Path, required=True) + ap.add_argument("--program", action="append", default=[], + help="path inside the sysroot; repeatable") + ap.add_argument("--package", action="append", default=[], + help="a package to install by name before resolving; " + "repeatable. Use it to bring in the programs " + "themselves, not only the libraries under them.") + ap.add_argument("--release", default="v3.20") + ap.add_argument("--arch", default="x86_64") + ap.add_argument("--cache", type=Path, default=Path(".apk-cache")) + ap.add_argument("--pack", type=Path, default=Path("tools/nonos-linux-pack")) + ap.add_argument("--rounds", type=int, default=16, + help="give up after this many, rather than looping on a " + "library no package provides") + args = ap.parse_args() + + provides, names = {}, {} + for branch in BRANCHES: + libs, pkgs = index(args.cache, args.release, args.arch, branch) + provides.update(libs) + names.update(pkgs) + print(f"linux-fetch: {len(provides)} libraries, {len(names)} packages in the index") + + for want in args.package: + found = names.get(want) + if not found: + print(f"linux-fetch: no package named {want}", file=sys.stderr) + return 1 + package, version, base = found + print(f" package {package} {version}") + install(args.sysroot, args.cache, package, version, base) + if not args.program: + return 0 + + for round_no in range(args.rounds): + gaps = missing(args.pack, args.sysroot, args.program) + if not gaps: + print(f"linux-fetch: closure complete after {round_no} rounds") + return 0 + added = 0 + for soname in gaps: + found = provides.get(soname) + if not found: + continue + package, version, base = found + print(f" {soname} -> {package} {version}") + install(args.sysroot, args.cache, package, version, base) + added += 1 + if added == 0: + print("linux-fetch: nothing in the index provides:", file=sys.stderr) + for soname in gaps: + print(f" {soname}", file=sys.stderr) + return 1 + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/nonos-linux-pack b/tools/nonos-linux-pack new file mode 100755 index 000000000..da88dfe0f --- /dev/null +++ b/tools/nonos-linux-pack @@ -0,0 +1,237 @@ +#!/usr/bin/env python3 +# NONOS Operating System +# Copyright (C) 2026 NONOS Contributors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +"""Resolve a Linux program's shared library closure and place it in the store. + +The Linux personality reads a program and its libraries out of the NONOS store +at the paths the program itself names: the interpreter from PT_INTERP, then +whatever that interpreter opens. So installing an application is placing the +real files at the real paths, and the only hard part is knowing which files. + +This walks the ELF dynamic section for DT_NEEDED, resolves each name against a +sysroot using DT_RUNPATH and then the default library directories, and repeats +until nothing new appears. It emits the entry list that tools/nonos-store-pack +takes, or writes them into an image directly. + +Nothing here guesses. A name that cannot be resolved inside the sysroot is +reported and the run fails, because a missing library at boot is a dynamic +linker abort with no message worth reading. +""" + +import argparse +import struct +import subprocess +import sys +from pathlib import Path + +PT_INTERP = 3 +PT_DYNAMIC = 2 +DT_NEEDED = 1 +DT_RUNPATH = 29 +DT_RPATH = 15 +DT_STRTAB = 5 +DT_STRSZ = 10 + +DEFAULT_LIBDIRS = ("/lib", "/usr/lib", "/lib64", "/usr/lib64") + + +class NotElf(Exception): + pass + + +def phdrs(data: bytes): + """(type, offset, vaddr, filesz) for each program header.""" + if len(data) < 64 or data[:4] != b"\x7fELF": + raise NotElf("not an ELF") + if data[4] != 2 or data[5] != 1: + raise NotElf("not 64-bit little-endian") + e_phoff, = struct.unpack_from(" str: + for p_type, p_offset, _, p_filesz in headers: + if p_type == PT_INTERP: + raw = data[p_offset:p_offset + p_filesz] + return raw.split(b"\0", 1)[0].decode() + return "" + + +def dynamic(data: bytes, headers): + """(needed names, runpath entries) from the dynamic section.""" + seg = next((p for p in headers if p[0] == PT_DYNAMIC), None) + if seg is None: + return [], [] + _, off, _, size = seg + tags = [] + at = off + while at + 16 <= off + size: + tag, val = struct.unpack_from(" str: + end = table.find(b"\0", index) + return table[index:end if end >= 0 else None].decode(errors="replace") + + needed = [name(v) for t, v in tags if t == DT_NEEDED] + paths = [] + for t, v in tags: + if t in (DT_RUNPATH, DT_RPATH): + paths.extend(p for p in name(v).split(":") if p) + return needed, paths + + +def find(sysroot: Path, name: str, extra: list) -> Path: + """A library by soname, inside the sysroot and nowhere else.""" + if name.startswith("/"): + candidate = sysroot / name.lstrip("/") + return candidate if candidate.is_file() else None + for directory in list(extra) + list(DEFAULT_LIBDIRS): + candidate = sysroot / directory.lstrip("/") / name + if candidate.is_file(): + return candidate + return None + + +def closure(sysroot: Path, program: Path): + """Every file the program needs, as store path -> file on disk.""" + out = {} + missing = [] + queue = [("/" + str(program.relative_to(sysroot)), program)] + seen = set() + while queue: + store_path, disk = queue.pop() + if store_path in seen: + continue + seen.add(store_path) + data = disk.read_bytes() + out[store_path] = disk + headers = phdrs(data) + ld = interp(data, headers) + if ld: + target = sysroot / ld.lstrip("/") + if target.is_file(): + queue.append((ld, target)) + else: + missing.append(ld) + needed, runpath = dynamic(data, headers) + for name in needed: + found = find(sysroot, name, runpath) + if found is None: + missing.append(name) + continue + queue.append(("/" + str(found.relative_to(sysroot)), found)) + return out, missing + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--sysroot", type=Path, required=True, + help="root of the Linux distribution the program came from") + ap.add_argument("--program", type=Path, action="append", required=True, + help="program to install, inside the sysroot; repeatable") + ap.add_argument("--data", action="append", default=[], + help="a data file as STOREPATH=DISKPATH, or a path inside " + "the sysroot to install where it already sits; " + "repeatable. The keymap goes in this way.") + ap.add_argument("--sign", type=Path, + help="capsule-sign binary. With it, each program is given " + "a certificate, manifest and trailer beside it, over " + "the closure computed here, and the personality " + "refuses anything unproven.") + ap.add_argument("--publisher", type=Path, + help="publisher seed prefix for --sign") + ap.add_argument("--image", type=Path, + help="store image to write into; without it the entries are printed") + ap.add_argument("--lba", type=int, default=256, help="store LBA in the image") + ap.add_argument("--pack", type=Path, default=Path("tools/nonos-store-pack"), + help="the packer to hand the entries to") + args = ap.parse_args() + + if not args.sysroot.is_dir(): + print(f"linux-pack: no sysroot at {args.sysroot}", file=sys.stderr) + return 2 + + entries, missing = {}, [] + for program in args.program: + path = program if program.is_absolute() else args.sysroot / program + if not path.is_file(): + print(f"linux-pack: no program at {path}", file=sys.stderr) + return 2 + found, gone = closure(args.sysroot, path.resolve()) + entries.update(found) + missing.extend(gone) + + for item in args.data: + store, _, disk = item.partition("=") + path = Path(disk) if disk else (args.sysroot / store.lstrip("/")) + if not path.is_file(): + print(f"linux-pack: no data file at {path}", file=sys.stderr) + return 2 + entries["/" + store.lstrip("/")] = path + + if missing: + print("linux-pack: unresolved inside the sysroot, refusing to pack a " + "program that cannot start:", file=sys.stderr) + for name in sorted(set(missing)): + print(f" {name}", file=sys.stderr) + return 1 + + pairs = [f"{store}={disk}" for store, disk in sorted(entries.items())] + total = sum(disk.stat().st_size for disk in entries.values()) + print(f"linux-pack: {len(pairs)} files, {total // 1024} KiB") + if args.image is None: + for pair in pairs: + print(f" --entry {pair}") + return 0 + + cmd = [sys.executable, str(args.pack), "--image", str(args.image), + "--lba", str(args.lba)] + for pair in pairs: + cmd += ["--entry", pair] + return subprocess.call(cmd) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/userland/capsule_linux/Capsule.mk b/userland/capsule_linux/Capsule.mk index ccdfeca26..f5fe14738 100644 --- a/userland/capsule_linux/Capsule.mk +++ b/userland/capsule_linux/Capsule.mk @@ -8,8 +8,16 @@ # until the file layer carries it, and the rest is the ordinary capsule # floor. # +# LocalSign is what lets this capsule vouch for a package it installed. +# Without it MkLocalSign is refused, every package goes into the store +# with no trailer, and the exec gate then refuses all of them: the +# marketplace installs software that can never run. It is a narrow +# right. The trailer is made against the machine's own root, and that +# root verifies nothing until a human confirms a code on the console, +# which lapses at the next boot. +# # = CoreExec 0x1 | IPC 0x8 | Memory 0x10 | Crypto 0x20 | Debug 0x100 -# | ForeignExec 0x100000000 = 0x100000139 +# | ForeignExec 0x100000000 | LocalSign 0x200000000 = 0x300000139 CAPSULE_SLUG := linux CAPSULE_HANDLE := app.linux @@ -20,7 +28,7 @@ CAPSULE_FEATURE := nonos-capsule-linux CAPSULE_NAMESPACE := systems.nonos.app.linux CAPSULE_SERVICE_ENDPOINT := service:4936:app.linux CAPSULE_REPLY_ENDPOINT := reply:4937:endpoint.app.linux.reply -CAPSULE_REQUIRED_CAPS := 0x100000139 +CAPSULE_REQUIRED_CAPS := 0x300000139 CAPSULE_KERNEL_MIRROR := src/userspace/capsule_linux include nonos-mk/capsule.mk diff --git a/userland/capsule_linux/Cargo.lock b/userland/capsule_linux/Cargo.lock index e2c8f62a4..5d8a4577d 100644 --- a/userland/capsule_linux/Cargo.lock +++ b/userland/capsule_linux/Cargo.lock @@ -2,6 +2,41 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "ab_glyph" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" +dependencies = [ + "ab_glyph_rasterizer", + "libm", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" +dependencies = [ + "libm", +] + +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "linked_list_allocator" version = "0.10.6" @@ -20,13 +55,36 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "nonos_app_skeleton" +version = "0.3.0" +dependencies = [ + "nonos_toolkit", + "nonos_userland_libc", +] + [[package]] name = "nonos_capsule_linux" version = "0.1.0" dependencies = [ + "nonos_app_skeleton", + "nonos_inflate", "nonos_userland_libc", ] +[[package]] +name = "nonos_inflate" +version = "0.3.0" + +[[package]] +name = "nonos_toolkit" +version = "0.3.0" +dependencies = [ + "ab_glyph", + "nonos_userland_libc", + "spin", +] + [[package]] name = "nonos_userland_libc" version = "0.3.0" @@ -34,12 +92,30 @@ dependencies = [ "linked_list_allocator", ] +[[package]] +name = "owned_ttf_parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" +dependencies = [ + "ttf-parser", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "spin" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" +dependencies = [ + "lock_api", +] + [[package]] name = "spinning_top" version = "0.2.5" @@ -48,3 +124,12 @@ checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" dependencies = [ "lock_api", ] + +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] diff --git a/userland/capsule_linux/Cargo.toml b/userland/capsule_linux/Cargo.toml index 3298e255b..1a57cc5ab 100644 --- a/userland/capsule_linux/Cargo.toml +++ b/userland/capsule_linux/Cargo.toml @@ -23,6 +23,7 @@ path = "src/main.rs" [dependencies] nonos_libc = { package = "nonos_userland_libc", path = "../libc" } nonos_app_skeleton = { path = "../app_skeleton", default-features = false } +nonos_inflate = { path = "../inflate" } [profile.release] panic = "abort" diff --git a/userland/capsule_linux/guests/busybox.elf b/userland/capsule_linux/guests/busybox.elf new file mode 100755 index 0000000000000000000000000000000000000000..6e660eb31961ab1537097c560441ee99ff2ed3d8 GIT binary patch literal 1025960 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
    =yYhIc`Phv| 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
      yXlU+Q~*I2So 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

      IL9w=P$&>$8zp7N&E!wdZ12vfF=kRhDN!;**{H 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

      +;7_xG#szs0q-Ak0!RiUm?{1RvSv`9srqZ1p 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�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 RASM0sYdzuSb-niY{{S_MtZV=P literal 0 HcmV?d00001 diff --git a/userland/capsule_linux/guests/hello.elf b/userland/capsule_linux/guests/hello.elf deleted file mode 100644 index a4c732d15aa896fe9f623c4f3ad7c9203984d990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmb<-^>JfjWMqH=CI&kO5U+y40W1U|!Av;ez+eGZ0}=qKWrfRt7!FV#ggy!7!Dt2n zh=9lO10by)$B%=lUQ$v diff --git a/userland/capsule_linux/src/linux/abi/errno.rs b/userland/capsule_linux/src/linux/abi/errno.rs index 04cb8def2..7cbcaebde 100644 --- a/userland/capsule_linux/src/linux/abi/errno.rs +++ b/userland/capsule_linux/src/linux/abi/errno.rs @@ -15,22 +15,21 @@ // along with this program. If not, see . //! Linux errno values, and the convention for returning them. -//! -//! A Linux syscall reports failure as a small negative number in `rax`, -//! not as an errno variable. These are the values a guest expects to see, -//! which are Linux's and not this system's. pub const EPERM: i64 = 1; pub const ENOENT: i64 = 2; +pub const EINTR: i64 = 4; pub const EIO: i64 = 5; pub const EBADF: i64 = 9; pub const ECHILD: i64 = 10; pub const EAGAIN: i64 = 11; pub const ENOMEM: i64 = 12; +pub const ESRCH: i64 = 3; pub const EACCES: i64 = 13; pub const EFAULT: i64 = 14; pub const EBUSY: i64 = 16; pub const EEXIST: i64 = 17; +pub const ENOTEMPTY: i64 = 39; pub const ENODEV: i64 = 19; pub const ENOTDIR: i64 = 20; pub const ENOSPC: i64 = 28; @@ -42,21 +41,29 @@ pub const ENOTTY: i64 = 25; pub const ESPIPE: i64 = 29; pub const EPIPE: i64 = 32; pub const ERANGE: i64 = 34; +pub const ELOOP: i64 = 40; +pub const ENOEXEC: i64 = 8; pub const ENOSYS: i64 = 38; pub const ECONNRESET: i64 = 104; +pub const ENOTCONN: i64 = 107; pub const ENOTSOCK: i64 = 88; pub const ENOTSUP: i64 = 95; pub const EAFNOSUPPORT: i64 = 97; pub const ECONNREFUSED: i64 = 111; pub const EINPROGRESS: i64 = 115; -/// The value a guest's `rax` receives for a failure. pub fn fail(errno: i64) -> u64 { (-errno) as u64 } -/// The value a guest's `rax` receives for a success carrying a count or a -/// descriptor. pub fn ok(value: u64) -> u64 { value } + +/// A returned descriptor, or `None` if the call failed. +pub fn slot(value: u64) -> Option { + match value { + v if v > u64::MAX - 4096 => None, + v => Some(v as usize), + } +} diff --git a/userland/capsule_linux/src/linux/abi/mod.rs b/userland/capsule_linux/src/linux/abi/mod.rs index a528c3f6c..fe250836a 100644 --- a/userland/capsule_linux/src/linux/abi/mod.rs +++ b/userland/capsule_linux/src/linux/abi/mod.rs @@ -14,14 +14,12 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! The Linux contract a compiled binary was built against: its numbers, -//! its errnos, and the names it knows them by. -//! -//! The tables are the whole contract and not only the part served today, -//! so a call that arrives before its handler is named rather than guessed -//! at, and coverage is a list anyone can read. +//! The Linux contract a compiled binary was built against: its numbers, its +//! errnos, and the names it knows them by. #![allow(dead_code)] pub mod errno; pub mod name; pub mod nr; +pub mod nr_path; +pub mod nr_high; diff --git a/userland/capsule_linux/src/linux/abi/name.rs b/userland/capsule_linux/src/linux/abi/name.rs index aa8471a22..875b825ac 100644 --- a/userland/capsule_linux/src/linux/abi/name.rs +++ b/userland/capsule_linux/src/linux/abi/name.rs @@ -14,9 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! Names for the numbers, so a guest that asks for something not yet -//! served is reported by name rather than by integer. Coverage is then a -//! measured list and never a claim. +//! Names for the numbers, so a guest that asks for something not yet served is +//! reported by name rather than by integer. use super::nr; @@ -58,8 +57,10 @@ pub fn of(number: u64) -> &'static [u8] { nr::EXIT_GROUP => b"exit_group", nr::CLONE => b"clone", nr::SOCKET => b"socket", + nr::SENDMSG => b"sendmsg", + nr::RECVMSG => b"recvmsg", + nr::MEMFD_CREATE => b"memfd_create", nr::CONNECT => b"connect", - nr::POLL => b"poll", nr::GETDENTS64 => b"getdents64", nr::OPENAT => b"openat", nr::NEWFSTATAT => b"newfstatat", diff --git a/userland/capsule_linux/src/linux/abi/nr.rs b/userland/capsule_linux/src/linux/abi/nr.rs index 2f05e40d2..ee370fdb3 100644 --- a/userland/capsule_linux/src/linux/abi/nr.rs +++ b/userland/capsule_linux/src/linux/abi/nr.rs @@ -14,9 +14,10 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! Linux x86_64 syscall numbers, by family. These are Linux's numbers and -//! never this system's: they are the contract a compiled binary was built -//! against, so they are transcribed rather than chosen. + +//! Linux x86_64 syscall numbers, by family. + +pub use super::nr_high::*; pub const READ: u64 = 0; pub const WRITE: u64 = 1; @@ -40,34 +41,25 @@ pub const READV: u64 = 19; pub const WRITEV: u64 = 20; pub const ACCESS: u64 = 21; pub const MADVISE: u64 = 28; +pub const DUP: u64 = 32; +pub const DUP2: u64 = 33; +pub const PIPE: u64 = 22; +pub const NANOSLEEP: u64 = 35; +pub const GETPID: u64 = 39; pub const SOCKET: u64 = 41; pub const CONNECT: u64 = 42; pub const SENDTO: u64 = 44; pub const RECVFROM: u64 = 45; +pub const SENDMSG: u64 = 46; +pub const RECVMSG: u64 = 47; pub const SHUTDOWN: u64 = 48; -pub const NANOSLEEP: u64 = 35; -pub const GETPID: u64 = 39; pub const CLONE: u64 = 56; +pub const FORK: u64 = 57; +pub const VFORK: u64 = 58; +pub const EXECVE: u64 = 59; pub const EXIT: u64 = 60; pub const UNAME: u64 = 63; pub const FCNTL: u64 = 72; +pub const FTRUNCATE: u64 = 77; pub const GETCWD: u64 = 79; pub const READLINK: u64 = 89; -pub const GETUID: u64 = 102; -pub const GETGID: u64 = 104; -pub const GETEUID: u64 = 107; -pub const GETEGID: u64 = 108; -pub const SIGALTSTACK: u64 = 131; -pub const ARCH_PRCTL: u64 = 158; -pub const GETTID: u64 = 186; -pub const FUTEX: u64 = 202; -pub const GETDENTS64: u64 = 217; -pub const SET_TID_ADDRESS: u64 = 218; -pub const CLOCK_GETTIME: u64 = 228; -pub const EXIT_GROUP: u64 = 231; -pub const OPENAT: u64 = 257; -pub const NEWFSTATAT: u64 = 262; -pub const SET_ROBUST_LIST: u64 = 273; -pub const PRLIMIT64: u64 = 302; -pub const GETRANDOM: u64 = 318; -pub const RSEQ: u64 = 334; diff --git a/userland/capsule_linux/src/linux/abi/nr_high.rs b/userland/capsule_linux/src/linux/abi/nr_high.rs new file mode 100644 index 000000000..4652e125c --- /dev/null +++ b/userland/capsule_linux/src/linux/abi/nr_high.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Linux x86_64 syscall numbers from one hundred up. Same contract +//! as `nr`, split only because a file here stays under seventy-five lines. + +pub const GETUID: u64 = 102; +pub const GETGID: u64 = 104; +pub const GETEUID: u64 = 107; +pub const GETEGID: u64 = 108; +pub const SIGALTSTACK: u64 = 131; +pub const ARCH_PRCTL: u64 = 158; +pub const GETTID: u64 = 186; +pub const FUTEX: u64 = 202; +pub const GETDENTS64: u64 = 217; +pub const WAIT4: u64 = 61; +pub const EPOLL_CTL: u64 = 233; +pub const DUP3: u64 = 292; +pub const PIPE2: u64 = 293; +pub const TIMERFD_CREATE: u64 = 283; +pub const TIMERFD_SETTIME: u64 = 286; +pub const EPOLL_CREATE1: u64 = 291; +pub const EPOLL_PWAIT: u64 = 281; +pub const SET_TID_ADDRESS: u64 = 218; +pub const CLOCK_GETTIME: u64 = 228; +pub const EXIT_GROUP: u64 = 231; +pub const OPENAT: u64 = 257; +pub const NEWFSTATAT: u64 = 262; +pub const SET_ROBUST_LIST: u64 = 273; +pub const PRLIMIT64: u64 = 302; +pub const GETRANDOM: u64 = 318; +pub const MEMFD_CREATE: u64 = 319; +pub const RSEQ: u64 = 334; diff --git a/userland/capsule_linux/src/linux/abi/nr_path.rs b/userland/capsule_linux/src/linux/abi/nr_path.rs new file mode 100644 index 000000000..733c624bb --- /dev/null +++ b/userland/capsule_linux/src/linux/abi/nr_path.rs @@ -0,0 +1,62 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Syscall numbers for the path, time and process calls, transcribed from the +//! x86_64 table. + +pub const CHDIR: u64 = 80; +pub const FCHDIR: u64 = 81; +pub const RENAME: u64 = 82; +pub const MKDIR: u64 = 83; +pub const RMDIR: u64 = 84; +pub const UNLINK: u64 = 87; +pub const MKDIRAT: u64 = 258; +pub const UNLINKAT: u64 = 263; +pub const TIME: u64 = 201; +pub const GETTIMEOFDAY: u64 = 96; +pub const NANOSLEEP: u64 = 35; +pub const CLOCK_NANOSLEEP: u64 = 230; +pub const GETPPID: u64 = 110; +pub const SCHED_YIELD: u64 = 24; +pub const FSYNC: u64 = 74; +pub const UMASK: u64 = 95; +pub const SETPGID: u64 = 109; +pub const GETPGRP: u64 = 111; +pub const SETSID: u64 = 112; +pub const GETPGID: u64 = 121; +pub const GETSID: u64 = 124; +pub const SETUID: u64 = 105; +pub const SETGID: u64 = 106; +pub const READV: u64 = 19; +pub const GETRLIMIT: u64 = 97; +pub const SETRLIMIT: u64 = 160; +pub const PRLIMIT64: u64 = 302; +pub const SELECT: u64 = 23; +pub const PSELECT6: u64 = 270; +pub const CHMOD: u64 = 90; +pub const FCHMOD: u64 = 91; +pub const FCHMODAT: u64 = 268; +pub const FACCESSAT: u64 = 269; +pub const FACCESSAT2: u64 = 439; +pub const STATFS: u64 = 137; +pub const FSTATFS: u64 = 138; +pub const STATX: u64 = 332; +pub const KILL: u64 = 62; +pub const TKILL: u64 = 200; +pub const GETRESUID: u64 = 118; +pub const GETRESGID: u64 = 120; +pub const PPOLL: u64 = 271; +pub const EPOLL_WAIT: u64 = 232; diff --git a/userland/capsule_linux/src/linux/attest.rs b/userland/capsule_linux/src/linux/attest.rs new file mode 100644 index 000000000..f25addabc --- /dev/null +++ b/userland/capsule_linux/src/linux/attest.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Proving a program before running it. + +use alloc::vec::Vec; + +use nonos_libc::CapsuleVerifySummary; + +use crate::linux::file::{key, store_read}; + +use super::attest_local; +use super::attest_paths::beside; +use super::attest_publisher; + +/// A certificate, manifest and trailer are small; a refusal to read one +/// of this size is a malformed artifact rather than a large one. +const MAX_ARTIFACT: u32 = 1 << 22; + +pub fn verify(path: &[u8], image: &[u8]) -> Result { + let trailer = fetch(path, b".zk_trailer.bin")?; + let Ok(cert) = fetch(path, b".nonos_id_cert.bin") else { + return attest_local::verify(image, &trailer); + }; + let manifest = fetch(path, b".manifest.bin")?; + attest_publisher::verify(image, &cert, &manifest, &trailer) +} + +/// The proof sits beside the program, inside the same root, so the suffix is +/// appended to the guest-visible path and the whole thing is confined once. +fn fetch(path: &[u8], suffix: &[u8]) -> Result, &'static str> { + let at = beside(path, suffix); + store_read(&key(&at), MAX_ARTIFACT).map_err(|_| "no proof beside the program") +} diff --git a/userland/capsule_linux/src/linux/attest_local.rs b/userland/capsule_linux/src/linux/attest_local.rs new file mode 100644 index 000000000..b6349829e --- /dev/null +++ b/userland/capsule_linux/src/linux/attest_local.rs @@ -0,0 +1,30 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A program the machine installed for itself. + +use nonos_libc::{mk_local_verify, CapsuleVerifySummary}; + +/// A guest is spawned holding nothing, so the proof that admits it is a proof +/// for nothing. +const GUEST_CAPS: u64 = 0; + +pub fn verify(image: &[u8], trailer: &[u8]) -> Result { + if !mk_local_verify(image, GUEST_CAPS, trailer) { + return Err("no publisher, and the machine did not vouch for it"); + } + Ok(CapsuleVerifySummary::zeroed()) +} diff --git a/userland/capsule_linux/src/linux/attest_paths.rs b/userland/capsule_linux/src/linux/attest_paths.rs new file mode 100644 index 000000000..453826238 --- /dev/null +++ b/userland/capsule_linux/src/linux/attest_paths.rs @@ -0,0 +1,27 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Where a program's proof lives: beside it, under its own name. + +use alloc::vec::Vec; + +pub fn beside(path: &[u8], suffix: &[u8]) -> Vec { + let mut out = Vec::with_capacity(path.len() + suffix.len()); + out.extend_from_slice(path); + out.extend_from_slice(suffix); + out +} diff --git a/userland/capsule_linux/src/linux/attest_publisher.rs b/userland/capsule_linux/src/linux/attest_publisher.rs new file mode 100644 index 000000000..a94bf24b0 --- /dev/null +++ b/userland/capsule_linux/src/linux/attest_publisher.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A program with a publisher behind it, checked exactly as a capsule is. + +use nonos_libc::{mk_capsule_verify, CapsuleVerifyRequest, CapsuleVerifySummary}; + +pub fn verify( + image: &[u8], + cert: &[u8], + manifest: &[u8], + trailer: &[u8], +) -> Result { + let req = CapsuleVerifyRequest { + elf_ptr: image.as_ptr() as u64, + cert_ptr: cert.as_ptr() as u64, + manifest_ptr: manifest.as_ptr() as u64, + trailer_ptr: trailer.as_ptr() as u64, + elf_len: image.len() as u32, + cert_len: cert.len() as u32, + manifest_len: manifest.len() as u32, + trailer_len: trailer.len() as u32, + }; + let mut out = CapsuleVerifySummary::zeroed(); + match mk_capsule_verify(&req, &mut out) { + 0 => Ok(out), + -13 => Err("rejected by verification"), + -22 => Err("malformed artifact or manifest"), + _ => Err("verification could not run"), + } +} diff --git a/userland/capsule_linux/src/linux/call/console.rs b/userland/capsule_linux/src/linux/call/console.rs new file mode 100644 index 000000000..f70884604 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/console.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! A guest's console output, carried to the host's log. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// Cap on one transfer, matching the kernel's own peer-copy ceiling. +const MAX_IO: u64 = 1 << 20; + +/// A guest's console output, carried to the host's log. The bytes are the +/// guest's and are never interpreted, only forwarded. +pub(super) fn console(guest: &Guest, buf: u64, len: u64) -> u64 { + if len == 0 { + return errno::ok(0); + } + let take = len.min(MAX_IO); + let Some(bytes) = guest.read(buf, take as usize) else { + return errno::fail(errno::EFAULT); + }; + let _ = nonos_libc::mk_debug(bytes.as_ptr(), bytes.len()); + errno::ok(take) +} + diff --git a/userland/capsule_linux/src/linux/call/ctl.rs b/userland/capsule_linux/src/linux/call/ctl.rs index e5ef9b2ba..fc5fbc668 100644 --- a/userland/capsule_linux/src/linux/call/ctl.rs +++ b/userland/capsule_linux/src/linux/call/ctl.rs @@ -14,14 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `ioctl` and `fcntl`. -//! -//! There is no terminal behind any descriptor here, so every ioctl is -//! refused with ENOTTY. That is not a gap: a libc asks TCGETS to find out -//! whether stdout is a terminal, and ENOTTY is the true answer. Claiming -//! otherwise would put the program into line buffering on something that -//! is not a line. use crate::linux::abi::errno; use crate::linux::guest::Guest; @@ -39,24 +32,33 @@ pub fn ioctl(guest: &Guest, fd: u64, _request: u64) -> u64 { } } -pub fn fcntl(guest: &Guest, fd: u64, cmd: u64) -> u64 { - let open = matches!(guest.fds.get(fd as usize), Some(e) if e.is_open()); - if !open { +/// The only descriptor flag there is. +const FD_CLOEXEC: u64 = 1; + +pub fn fcntl(guest: &mut Guest, fd: u64, cmd: u64, arg: u64) -> u64 { + let Some(entry) = guest.fds.get_mut(fd as usize).filter(|e| e.is_open()) else { return errno::fail(errno::EBADF); - } + }; match cmd { /* - * Nothing here is ever handed to an exec, so the close-on-exec - * flag is genuinely clear and setting it changes nothing. The - * status flags are reported as the read-write the descriptor - * already has, and a request to change them is accepted because - * none of the flags a program sets here has an effect. + * A shell sets close-on-exec on the descriptors it keeps for itself, + * then execs, and expects the command not to see them. + */ + F_GETFD => errno::ok(u64::from(entry.cloexec)), + F_SETFD => { + entry.cloexec = arg & FD_CLOEXEC != 0; + errno::ok(0) + } + /* + * Reported as the read-write the descriptor already has; a request to + * change them is accepted because none of the flags a program sets + * here has an effect. */ - F_GETFD | F_SETFD | F_SETFL => errno::ok(0), + F_SETFL => errno::ok(0), F_GETFL => errno::ok(2), /* - * Duplication needs a second handle on the server, which the - * store does not offer yet. Refused rather than aliased. + * Duplication needs a second handle on the server, which the store + * does not offer yet. */ F_DUPFD => errno::fail(errno::ENOSYS), _ => errno::fail(errno::EINVAL), diff --git a/userland/capsule_linux/src/linux/call/cwd.rs b/userland/capsule_linux/src/linux/call/cwd.rs new file mode 100644 index 000000000..90a55a008 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/cwd.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Moving the working directory. + +use crate::linux::abi::errno; +use crate::linux::file::{look, read_path, visible}; +use crate::linux::guest::{Guest, Kind}; + +pub fn chdir(guest: &mut Guest, path: u64) -> u64 { + let Some(name) = read_path(guest, path) else { + return errno::fail(errno::EFAULT); + }; + let at = visible(&guest.cwd, &name); + // Checked before it is taken. + match look(&at) { + Some(_) => { + guest.cwd = at; + errno::ok(0) + } + None => errno::fail(errno::ENOENT), + } +} + +/// `fchdir`: the same, named by a directory the guest already opened. +pub fn fchdir(guest: &mut Guest, fd: u64) -> u64 { + let Some(entry) = guest.fds.get(fd as usize).filter(|f| f.kind == Kind::Dir) else { + return errno::fail(errno::EBADF); + }; + guest.cwd = entry.path.clone(); + errno::ok(0) +} + +/// `getcwd` writes the path and returns its length including the terminator, +/// which is what a libc uses to tell success from a buffer that was too small. +pub fn getcwd(guest: &Guest, buf: u64, len: u64) -> u64 { + let mut out = guest.cwd.clone(); + out.push(0); + if (len as usize) < out.len() { + return errno::fail(errno::ERANGE); + } + match guest.write(buf, &out) { + n if n < 0 => errno::fail(errno::EFAULT), + _ => errno::ok(out.len() as u64), + } +} diff --git a/userland/capsule_linux/src/linux/call/ident.rs b/userland/capsule_linux/src/linux/call/ident.rs new file mode 100644 index 000000000..eca7a107b --- /dev/null +++ b/userland/capsule_linux/src/linux/call/ident.rs @@ -0,0 +1,37 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! Who the guest is, and which process group it belongs to. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// The identity every guest runs as. +const GUEST_UID: u64 = 0; + +pub fn getppid(guest: &Guest) -> u64 { + // The personality is the parent of every guest it hosts. + errno::ok(u64::from(guest.parent)) +} + + +/// Setting the identity to the one already held is the only change +/// that can be honoured, so it is the only one accepted. +pub fn setuid(want: u64) -> u64 { + match want { + GUEST_UID => errno::ok(0), + _ => errno::fail(errno::EPERM), + } +} diff --git a/userland/capsule_linux/src/linux/call/io.rs b/userland/capsule_linux/src/linux/call/io.rs index 82dcdbcde..c49c170d6 100644 --- a/userland/capsule_linux/src/linux/call/io.rs +++ b/userland/capsule_linux/src/linux/call/io.rs @@ -14,51 +14,43 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! `read`, `write` and `close`, routed by what the descriptor is. A -//! guest's descriptor is an index into a table this capsule owns, so the -//! number it passes can only ever reach something this capsule gave it. +//! `read`, `write` and `close`, routed by what the descriptor is. use crate::linux::abi::errno; use crate::linux::file; use crate::linux::net; +use super::console::console; + +/// Port 53 on the loopback address, in network order. What a program +/// that wrote to its nameserver without naming one was talking to. +const LOOPBACK_53: [u8; 6] = [0, 53, 127, 0, 0, 1]; + use super::io_socket::{socket_read, socket_write}; use crate::linux::guest::{Guest, Kind}; -/// Cap on one transfer, matching the kernel's own peer-copy ceiling. -const MAX_IO: u64 = 1 << 20; - pub fn write(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { match guest.fds.get(fd as usize).map(|f| &f.kind) { Some(Kind::Stdout) | Some(Kind::Stderr) => console(guest, buf, len), Some(Kind::File) => file::write(guest, fd, buf, len), Some(Kind::Socket) => socket_write(guest, fd, buf, len), + Some(Kind::Unix) => crate::linux::unix::send(guest, fd, buf, len), + Some(Kind::Pipe) => super::pipe_write(guest, fd, buf, len), + Some(Kind::Resolver) => net::dns::query(guest, fd, buf, len, LOOPBACK_53), Some(Kind::Dir) => errno::fail(errno::EISDIR), _ => errno::fail(errno::EBADF), } } - -/// A guest's console output, carried to the host's log. The bytes are the -/// guest's and are never interpreted, only forwarded. -fn console(guest: &Guest, buf: u64, len: u64) -> u64 { - if len == 0 { - return errno::ok(0); - } - let take = len.min(MAX_IO); - let Some(bytes) = guest.read(buf, take as usize) else { - return errno::fail(errno::EFAULT); - }; - let _ = nonos_libc::mk_debug(bytes.as_ptr(), bytes.len()); - errno::ok(take) -} - pub fn read(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { match guest.fds.get(fd as usize).map(|f| &f.kind) { // Nothing is typed at a guest yet, and end of file is the truth. Some(Kind::Stdin) => errno::ok(0), Some(Kind::File) => file::read(guest, fd, buf, len), + Some(Kind::Timer) => file::timerfd_read(guest, fd, buf), Some(Kind::Socket) => socket_read(guest, fd, buf, len), + Some(Kind::Unix) => crate::linux::unix::recv(guest, fd, buf, len), + Some(Kind::Pipe) => super::pipe_read(guest, fd, buf, len), + Some(Kind::Resolver) => net::dns::answer_out(guest, fd, buf, len).0, Some(Kind::Dir) => errno::fail(errno::EISDIR), _ => errno::fail(errno::EBADF), } diff --git a/userland/capsule_linux/src/linux/call/limits.rs b/userland/capsule_linux/src/linux/call/limits.rs new file mode 100644 index 000000000..e0525a8e9 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/limits.rs @@ -0,0 +1,45 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! The limits this personality actually enforces. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::limits_table::{limit_for, RLIMIT}; + +pub fn getrlimit(guest: &Guest, resource: u64, out: u64) -> u64 { + let Some((soft, hard)) = limit_for(resource) else { + return errno::fail(errno::EINVAL); + }; + let mut buf = [0u8; RLIMIT]; + buf[..8].copy_from_slice(&soft.to_le_bytes()); + buf[8..].copy_from_slice(&hard.to_le_bytes()); + match guest.write(out, &buf) { + n if n < 0 => errno::fail(errno::EFAULT), + _ => errno::ok(0), + } +} + +/// `prlimit64` reads and writes in one call. +pub fn prlimit64(guest: &Guest, resource: u64, new: u64, old: u64) -> u64 { + if new != 0 { + return errno::fail(errno::EPERM); + } + if old == 0 { + return errno::ok(0); + } + getrlimit(guest, resource, old) +} diff --git a/userland/capsule_linux/src/linux/call/limits_table.rs b/userland/capsule_linux/src/linux/call/limits_table.rs new file mode 100644 index 000000000..cc1785184 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/limits_table.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Which limit each resource number reports. + +use crate::linux::file::MAX_FDS; + +/// `struct rlimit` is a soft limit then a hard one, both 64-bit. +pub(super) const RLIMIT: usize = 16; + +const RLIMIT_STACK: u64 = 3; +const RLIMIT_NOFILE: u64 = 7; +const RLIMIT_AS: u64 = 9; + +/// What a guest's stack is given, from the loader that maps it. +const STACK_BYTES: u64 = 1 << 20; + +/// The top of the guest's own half, which is the most address space one +/// can hold however it asks. +const ADDRESS_SPACE: u64 = 0x0000_7FFF_F000; + +/// Unlimited, as Linux spells it. +const INFINITY: u64 = u64::MAX; + +pub(super) fn limit_for(resource: u64) -> Option<(u64, u64)> { + match resource { + RLIMIT_STACK => Some((STACK_BYTES, STACK_BYTES)), + RLIMIT_NOFILE => Some((MAX_FDS as u64, MAX_FDS as u64)), + RLIMIT_AS => Some((ADDRESS_SPACE, ADDRESS_SPACE)), + /* + * Everything else this personality does not bound at all, and saying + * so is truthful: there is no ceiling to report. + */ + _ => Some((INFINITY, INFINITY)), + } +} + diff --git a/userland/capsule_linux/src/linux/call/map.rs b/userland/capsule_linux/src/linux/call/mem/map.rs similarity index 68% rename from userland/capsule_linux/src/linux/call/map.rs rename to userland/capsule_linux/src/linux/call/mem/map.rs index f0b800f88..68c0fb11e 100644 --- a/userland/capsule_linux/src/linux/call/map.rs +++ b/userland/capsule_linux/src/linux/call/mem/map.rs @@ -14,15 +14,15 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `mmap`: anonymous pages, or a private mapping of a file. use crate::linux::abi::errno; -use crate::linux::guest::{page_up, Guest}; +use crate::linux::guest::{span_within, Guest, MMAP_LIMIT, STACK_TOP}; +use super::map_anon::{anonymous, memfd}; use super::map_file::file; use super::map_req::MapReq; -use super::prot::{wx_refused, PROT_EXEC, PROT_WRITE}; +use super::prot::wx_refused; const MAP_SHARED: u64 = 0x01; const MAP_ANONYMOUS: u64 = 0x20; @@ -34,31 +34,26 @@ pub fn mmap(guest: &mut Guest, req: MapReq) -> u64 { if wx_refused(req.prot) { return errno::fail(errno::EPERM); } - let span = page_up(req.len); - let at = req.fixed().unwrap_or(guest.mmap_next); + // The ceiling differs by who chose the address. + let (at, limit) = match req.fixed() { + Some(addr) => (addr, STACK_TOP), + None => (guest.mmap_next, MMAP_LIMIT), + }; + let Some((at, span)) = span_within(at, req.len, limit) else { + return errno::fail(errno::ENOMEM); + }; if req.flags & MAP_ANONYMOUS != 0 { return anonymous(guest, &req, at, span); } + if crate::linux::file::is_memfd(guest, req.fd) { + return memfd(guest, &req, at, span); + } if req.flags & MAP_SHARED != 0 { /* * Sharing a file between processes needs frames that two address - * spaces both point at, which no peer call offers. Refused rather - * than quietly downgraded to a private copy, which would lose a - * writer's changes with nothing to show that it had. + * spaces both point at, which no peer call offers. */ return errno::fail(errno::ENOSYS); } file(guest, &req, at, span) } - -fn anonymous(guest: &mut Guest, req: &MapReq, at: u64, span: u64) -> u64 { - let write = req.prot & PROT_WRITE != 0; - let exec = req.prot & PROT_EXEC != 0; - if guest.map(at, span, write, exec) < 0 { - return errno::fail(errno::ENOMEM); - } - if req.fixed().is_none() { - guest.mmap_next += span; - } - errno::ok(at) -} diff --git a/userland/capsule_linux/src/linux/call/mem/map_anon.rs b/userland/capsule_linux/src/linux/call/mem/map_anon.rs new file mode 100644 index 000000000..00410f806 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/mem/map_anon.rs @@ -0,0 +1,56 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Mappings with no file behind them. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::map_req::MapReq; +use super::prot::{PROT_EXEC, PROT_WRITE}; + +/// A memfd has nothing to read in: it is pages, and the client is about to +/// draw into them. +pub fn memfd(guest: &mut Guest, req: &MapReq, at: u64, span: u64) -> u64 { + let out = anonymous(guest, req, at, span); + if (out as i64) < 0 { + return out; + } + crate::linux::file::set_mapped(guest, req.fd, at); + /* + * A descriptor this capsule staged content on, the keymap being the one + * that matters, has to arrive with those bytes already in it: the client + * maps it and reads it without ever issuing a read. + */ + if let Some(bytes) = crate::linux::file::staged(guest, req.fd) { + if guest.write(at, &bytes) < bytes.len() as i64 { + return errno::fail(errno::EFAULT); + } + } + out +} + +pub fn anonymous(guest: &mut Guest, req: &MapReq, at: u64, span: u64) -> u64 { + let write = req.prot & PROT_WRITE != 0; + let exec = req.prot & PROT_EXEC != 0; + if guest.map(at, span, write, exec) < 0 { + return errno::fail(errno::ENOMEM); + } + if req.fixed().is_none() { + guest.mmap_next += span; + } + errno::ok(at) +} diff --git a/userland/capsule_linux/src/linux/call/mem/map_exec.rs b/userland/capsule_linux/src/linux/call/mem/map_exec.rs new file mode 100644 index 000000000..fe62d05d6 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/mem/map_exec.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Proving a file before any of its pages become executable. + +use crate::linux::file::{key, store_read}; +use crate::linux::guest::{Guest, Kind}; + +/// The same ceiling the exec path reads an image under. +const MAX_IMAGE: u32 = 64 << 20; + +/// Whether `fd` names a file this machine has agreed to execute. +pub fn proven(guest: &Guest, fd: u64) -> bool { + let Some(entry) = guest.fds.get(fd as usize).filter(|f| f.kind == Kind::File) else { + return false; + }; + /* + * A descriptor's path was normalised when it was opened, so it + * needs no resolving here, only confining. + */ + let at = &entry.path; + let Ok(bytes) = store_read(&key(at), MAX_IMAGE) else { + return false; + }; + crate::linux::attest::verify(at, &bytes).is_ok() +} diff --git a/userland/capsule_linux/src/linux/call/map_file.rs b/userland/capsule_linux/src/linux/call/mem/map_file.rs similarity index 56% rename from userland/capsule_linux/src/linux/call/map_file.rs rename to userland/capsule_linux/src/linux/call/mem/map_file.rs index 0d16549dd..1bfd0302d 100644 --- a/userland/capsule_linux/src/linux/call/map_file.rs +++ b/userland/capsule_linux/src/linux/call/mem/map_file.rs @@ -14,28 +14,45 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! A private file mapping. -//! -//! The pages are filled here rather than paged in on first touch: they -//! are mapped writable, the bytes are read into them, and the protection -//! the caller asked for is set afterwards. A dynamic linker needs exactly -//! that order, and the cost is honest, which is that the whole span is -//! read at once rather than on demand. use crate::linux::abi::errno; use crate::linux::file::pread64; use crate::linux::guest::Guest; +use super::map_exec::proven; use super::map_req::MapReq; -use super::prot::protect_span; +use super::prot::PROT_EXEC; +use super::prot_span::protect_span; pub fn file(guest: &mut Guest, req: &MapReq, at: u64, span: u64) -> u64 { + /* + * Asked before a page is allocated, not after the bytes are in place: a + * mapping that would be refused should cost the guest nothing, and a + * half-filled span left behind by a late refusal is memory the guest still + * holds and did not ask to keep. + */ + if req.prot & PROT_EXEC != 0 && !proven(guest, req.fd) { + return errno::fail(errno::EPERM); + } if guest.map(at, span, true, false) < 0 { return errno::fail(errno::ENOMEM); } - if (pread64(guest, req.fd, at, req.len, req.off) as i64) < 0 { - return errno::fail(errno::EACCES); + let mut done = 0u64; + while done < req.len { + let n = pread64(guest, req.fd, at + done, req.len - done, req.off + done) as i64; + if n < 0 { + return errno::fail(errno::EACCES); + } + if n == 0 { + /* + * Short of the requested span: the rest of the mapping is the + * zeroes the fresh frames already hold, which is what a segment's + * bss is. + */ + break; + } + done += n as u64; } if protect_span(guest, at, span, req.prot) < 0 { return errno::fail(errno::EACCES); diff --git a/userland/capsule_linux/src/linux/call/map_req.rs b/userland/capsule_linux/src/linux/call/mem/map_req.rs similarity index 87% rename from userland/capsule_linux/src/linux/call/map_req.rs rename to userland/capsule_linux/src/linux/call/mem/map_req.rs index 25f2cbe2a..c426dcb11 100644 --- a/userland/capsule_linux/src/linux/call/map_req.rs +++ b/userland/capsule_linux/src/linux/call/mem/map_req.rs @@ -16,10 +16,6 @@ //! What a guest asked `mmap` for, in one value. -//! -//! The Linux call takes six arguments and passing them onward one at a -//! time makes every function that touches them wider than it should be. -//! They travel together because they are one request. pub struct MapReq { pub addr: u64, diff --git a/userland/capsule_linux/src/linux/call/memory.rs b/userland/capsule_linux/src/linux/call/mem/memory.rs similarity index 67% rename from userland/capsule_linux/src/linux/call/memory.rs rename to userland/capsule_linux/src/linux/call/mem/memory.rs index cfb424583..28a2cfb6a 100644 --- a/userland/capsule_linux/src/linux/call/memory.rs +++ b/userland/capsule_linux/src/linux/call/mem/memory.rs @@ -14,17 +14,19 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! `brk` and `munmap`. The addresses are chosen here because a -//! Linux program expects a Linux address space, and the kernel only ever -//! maps the pages it is told to. +//! `brk` and `munmap`. use crate::linux::abi::errno; -use crate::linux::guest::{page_up, Guest}; +use crate::linux::guest::{page_up, Guest, BRK_BASE, BRK_LIMIT}; /// `brk(0)` reports the break; any other value moves it and reports where /// it landed, which is Linux's contract and not an error channel. pub fn brk(guest: &mut Guest, want: u64) -> u64 { - if want == 0 || want < crate::linux::guest::BRK_BASE { + /* + * A break outside the heap area is reported as no move, which is what a + * Linux program reads as the request being refused. + */ + if want == 0 || want < BRK_BASE || want > BRK_LIMIT { return errno::ok(guest.brk); } let top = page_up(want); @@ -38,9 +40,13 @@ pub fn brk(guest: &mut Guest, want: u64) -> u64 { errno::ok(guest.brk) } -/// Accepted and remembered as unmapped only in the sense that the guest -/// may map over it again. Returning the pages needs an unmap peer call, -/// which is the next primitive; until then the memory stays the guest's. -pub fn munmap(_guest: &mut Guest, _addr: u64, _len: u64) -> u64 { - errno::ok(0) +/// The pages go back to the kernel and leave the guest's region list. +pub fn munmap(guest: &mut Guest, addr: u64, len: u64) -> u64 { + if len == 0 { + return errno::fail(errno::EINVAL); + } + match guest.unmap(addr, len) { + rc if rc < 0 => errno::fail(errno::EINVAL), + _ => errno::ok(0), + } } diff --git a/userland/capsule_linux/src/linux/call/mem/mod.rs b/userland/capsule_linux/src/linux/call/mem/mod.rs new file mode 100644 index 000000000..9aae9430c --- /dev/null +++ b/userland/capsule_linux/src/linux/call/mem/mod.rs @@ -0,0 +1,32 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The calls that shape a guest's address space: `mmap`, `munmap`, `brk` and +//! `mprotect`. + +mod map; +mod map_anon; +mod map_exec; +mod map_file; +mod map_req; +mod memory; +mod prot; +mod prot_span; + +pub use map::mmap; +pub use map_req::MapReq; +pub use memory::{brk, munmap}; +pub use prot::mprotect; diff --git a/userland/capsule_linux/src/linux/call/prot.rs b/userland/capsule_linux/src/linux/call/mem/prot.rs similarity index 53% rename from userland/capsule_linux/src/linux/call/prot.rs rename to userland/capsule_linux/src/linux/call/mem/prot.rs index 1fbca70f0..5136faba6 100644 --- a/userland/capsule_linux/src/linux/call/prot.rs +++ b/userland/capsule_linux/src/linux/call/mem/prot.rs @@ -14,42 +14,21 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `mprotect`, and the rule that makes it necessary. -//! -//! NONOS refuses to map a page writable and executable at once, so a -//! loader cannot ask for the end state up front: it writes the pages, -//! then asks for them to be executable. This is the call that makes the -//! second half possible, and it is the reason the kernel gained a -//! protection primitive rather than the loader gaining an exception. - -use nonos_libc::peer::{mk_peer_protect, PEER_PROT_EXEC, PEER_PROT_WRITE}; use crate::linux::abi::errno; -use crate::linux::guest::{page_down, page_up, Guest}; +use crate::linux::guest::{span_within, Guest, STACK_TOP}; + +use super::prot_span::protect_span; pub const PROT_WRITE: u64 = 2; pub const PROT_EXEC: u64 = 4; -/// A request for both at once. Linux allows it and this system does not, -/// so it is refused here with the errno Linux uses for a protection the -/// policy forbids, rather than silently granted as one or the other. +/// A request for both at once. pub fn wx_refused(prot: u64) -> bool { prot & PROT_WRITE != 0 && prot & PROT_EXEC != 0 } -/// Set the protection of a span already mapped in the guest. -pub fn protect_span(guest: &Guest, addr: u64, span: u64, prot: u64) -> i64 { - let mut bits = 0; - if prot & PROT_WRITE != 0 { - bits |= PEER_PROT_WRITE; - } - if prot & PROT_EXEC != 0 { - bits |= PEER_PROT_EXEC; - } - mk_peer_protect(guest.pid, addr, span, bits) -} - pub fn mprotect(guest: &mut Guest, addr: u64, len: u64, prot: u64) -> u64 { if len == 0 { return errno::ok(0); @@ -57,8 +36,13 @@ pub fn mprotect(guest: &mut Guest, addr: u64, len: u64, prot: u64) -> u64 { if wx_refused(prot) { return errno::fail(errno::EPERM); } - let start = page_down(addr); - let span = page_up(addr + len) - start; + /* + * Checked, because `len` is the guest's: `addr + len` wraps and the + * span computed from the wrapped value comes out enormous. + */ + let Some((start, span)) = span_within(addr, len, STACK_TOP) else { + return errno::fail(errno::EINVAL); + }; if protect_span(guest, start, span, prot) < 0 { return errno::fail(errno::EACCES); } diff --git a/userland/capsule_linux/src/linux/call/mem/prot_span.rs b/userland/capsule_linux/src/linux/call/mem/prot_span.rs new file mode 100644 index 000000000..aac1b7043 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/mem/prot_span.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Reprotecting a span, a peer call at a time. + +use nonos_libc::peer::{mk_peer_protect, PEER_PROT_EXEC, PEER_PROT_WRITE}; + +use crate::linux::guest::{Guest, MAX_SPAN}; + +use super::prot::{PROT_EXEC, PROT_WRITE}; + +/// Set the protection of a span already mapped in the guest. +pub fn protect_span(guest: &Guest, addr: u64, span: u64, prot: u64) -> i64 { + let mut bits = 0; + if prot & PROT_WRITE != 0 { + bits |= PEER_PROT_WRITE; + } + if prot & PROT_EXEC != 0 { + bits |= PEER_PROT_EXEC; + } + let mut done = 0; + while done < span { + let take = (span - done).min(MAX_SPAN); + let rc = mk_peer_protect(guest.pid, addr + done, take, bits); + if rc < 0 { + return rc; + } + done += take; + } + 0 +} diff --git a/userland/capsule_linux/src/linux/call/mod.rs b/userland/capsule_linux/src/linux/call/mod.rs index 007af4f1a..23894c0e0 100644 --- a/userland/capsule_linux/src/linux/call/mod.rs +++ b/userland/capsule_linux/src/linux/call/mod.rs @@ -14,36 +14,56 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! One file per family of Linux calls. A family gets its own file the -//! moment it has more than a handful, so the table stays readable as the -//! surface grows toward the whole of it. +//! One file per family of Linux calls; declarations and re-exports only. -mod io; -mod life; -mod clone; +mod console; mod ctl; -mod io_socket; -mod map; -mod map_file; -mod map_req; -mod memory; +mod cwd; mod futex; -mod prot; +mod ident; +mod io; +mod io_socket; +mod life; +mod limits; +mod limits_table; +mod mem; +mod pipe; +mod pipe_dup; +mod pipe_end; +mod pipe_io; +mod pipe_read; +mod session; mod signal; +mod signal_send; +mod sleep; +mod spawn; mod thread; +mod timeops; +mod umask; mod uname; mod vector; +mod vector_read; -pub use io::{close, read, write}; -pub use clone::clone; pub use ctl::{fcntl, ioctl}; +pub use cwd::{chdir, fchdir, getcwd}; pub use futex::futex; +pub use ident::{getppid, setuid}; +pub use io::{close, read, write}; pub use life::{exit, exit_thread}; -pub use map::mmap; -pub use map_req::MapReq; -pub use memory::{brk, munmap}; -pub use prot::mprotect; +pub use limits::{getrlimit, prlimit64}; +pub use mem::{brk, mmap, mprotect, munmap, MapReq}; +pub use pipe::pipe2; +pub use pipe_dup::{dup, dup2}; +pub use pipe_io::write as pipe_write; +pub use pipe_read::read as pipe_read; +pub use session::{getpgid, getsid, setpgid, setsid}; pub use signal::{rt_sigaction, rt_sigprocmask, sigaltstack}; +pub use signal_send::kill; +pub use sleep::nanosleep; +pub use spawn::{clone, execve, fork, wait4}; pub use thread::{arch_prctl, clock_gettime, getrandom}; +pub use timeops::{gettimeofday, time}; +pub use umask::{umask, DEFAULT_UMASK}; pub use uname::uname; pub use vector::writev; +pub use vector_read::readv; diff --git a/userland/capsule_linux/src/linux/call/pipe.rs b/userland/capsule_linux/src/linux/call/pipe.rs new file mode 100644 index 000000000..61a1debe7 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/pipe.rs @@ -0,0 +1,51 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `pipe2`. + +use alloc::vec::Vec; + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest}; + +use crate::linux::file::flags::O_CLOEXEC; +use crate::linux::file::install; + +pub fn pipe2(guest: &mut Guest, out: u64, flags: u64) -> u64 { + let buffer = guest.pipes.len() as u32; + guest.pipes.push(Vec::new()); + let Some(read_end) = install(guest, Fd::pipe(buffer, false)) else { + return errno::fail(errno::EMFILE); + }; + let Some(write_end) = install(guest, Fd::pipe(buffer, true)) else { + return errno::fail(errno::EMFILE); + }; + if flags & O_CLOEXEC != 0 { + for end in [read_end, write_end] { + if let Some(fd) = guest.fds.get_mut(end as usize) { + fd.cloexec = true; + } + } + } + let mut pair = [0u8; 8]; + pair[..4].copy_from_slice(&(read_end as u32).to_le_bytes()); + pair[4..].copy_from_slice(&(write_end as u32).to_le_bytes()); + if guest.write(out, &pair) < 8 { + return errno::fail(errno::EFAULT); + } + errno::ok(0) +} + diff --git a/userland/capsule_linux/src/linux/call/pipe_dup.rs b/userland/capsule_linux/src/linux/call/pipe_dup.rs new file mode 100644 index 000000000..ca2273a1d --- /dev/null +++ b/userland/capsule_linux/src/linux/call/pipe_dup.rs @@ -0,0 +1,49 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `dup` and `dup2`: a second descriptor onto the same thing. + +use crate::linux::abi::errno; +use crate::linux::file::install; +use crate::linux::guest::{Fd, Guest, Kind}; + +/// `dup2` puts the copy at a number the caller chose, which is how a +/// shell wires a pipe onto stdout before it runs a command. +pub fn dup2(guest: &mut Guest, from: u64, to: u64) -> u64 { + let Some(source) = guest.fds.get(from as usize).filter(|f| f.is_open()).map(Fd::clone_of) + else { + return errno::fail(errno::EBADF); + }; + if from == to { + return errno::ok(to); + } + while guest.fds.len() <= to as usize { + guest.fds.push(Fd::empty(Kind::Free)); + } + guest.fds[to as usize] = source; + errno::ok(to) +} + +pub fn dup(guest: &mut Guest, from: u64) -> u64 { + let Some(source) = guest.fds.get(from as usize).filter(|f| f.is_open()).map(Fd::clone_of) + else { + return errno::fail(errno::EBADF); + }; + match install(guest, source) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} diff --git a/userland/capsule_linux/src/linux/call/pipe_end.rs b/userland/capsule_linux/src/linux/call/pipe_end.rs new file mode 100644 index 000000000..f1980ded6 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/pipe_end.rs @@ -0,0 +1,31 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Which buffer a pipe descriptor names, and which end of it it is. + +use crate::linux::guest::{Guest, Kind}; + +pub fn end_of(guest: &Guest, fd: u64) -> Option<(usize, bool)> { + let entry = guest.fds.get(fd as usize)?; + if entry.kind != Kind::Pipe { + return None; + } + let slot = entry.handle as usize; + match slot < guest.pipes.len() { + true => Some((slot, entry.writable)), + false => None, + } +} diff --git a/userland/capsule_linux/src/linux/call/pipe_io.rs b/userland/capsule_linux/src/linux/call/pipe_io.rs new file mode 100644 index 000000000..896ff0d4e --- /dev/null +++ b/userland/capsule_linux/src/linux/call/pipe_io.rs @@ -0,0 +1,46 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Bytes through a pipe. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::pipe_end::end_of; + +/// What one pipe will hold before a writer is told to wait. Linux uses +/// sixty-four kilobytes and programs are written around that number. +const CAPACITY: usize = 64 << 10; + +pub fn write(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { + let Some((slot, writable)) = end_of(guest, fd) else { + return errno::fail(errno::EBADF); + }; + if !writable { + return errno::fail(errno::EBADF); + } + let room = CAPACITY.saturating_sub(guest.pipes[slot].len()); + if room == 0 { + // A full pipe blocks on Linux until a reader drains it. + return errno::fail(errno::EAGAIN); + } + let take = (len as usize).min(room); + let Some(bytes) = guest.read(buf, take) else { + return errno::fail(errno::EFAULT); + }; + guest.pipes[slot].extend_from_slice(&bytes); + errno::ok(take as u64) +} diff --git a/userland/capsule_linux/src/linux/call/pipe_read.rs b/userland/capsule_linux/src/linux/call/pipe_read.rs new file mode 100644 index 000000000..fc588e415 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/pipe_read.rs @@ -0,0 +1,43 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Draining a pipe. + + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::pipe_end::end_of; + +pub fn read(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { + let Some((slot, writable)) = end_of(guest, fd) else { + return errno::fail(errno::EBADF); + }; + if writable { + return errno::fail(errno::EBADF); + } + let have = guest.pipes[slot].len(); + if have == 0 { + return errno::fail(errno::EAGAIN); + } + let take = (len as usize).min(have); + let bytes: alloc::vec::Vec = guest.pipes[slot].drain(..take).collect(); + if guest.write(buf, &bytes) < take as i64 { + return errno::fail(errno::EFAULT); + } + errno::ok(take as u64) +} diff --git a/userland/capsule_linux/src/linux/call/session.rs b/userland/capsule_linux/src/linux/call/session.rs new file mode 100644 index 000000000..89b99af50 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/session.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Process groups and sessions. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +pub fn setpgid(guest: &mut Guest, pid: u64, pgid: u64) -> u64 { + let target = match pid { + 0 => guest.pid, + n => n as u32, + }; + if !guest.owns(target) { + return errno::fail(errno::ESRCH); + } + guest.pgid = match pgid { + 0 => target, + n => n as u32, + }; + errno::ok(0) +} + +pub fn getpgid(guest: &Guest) -> u64 { + errno::ok(u64::from(guest.pgid)) +} + +/// `setsid` makes the caller a session leader, which means a new group with +/// its own id. +pub fn setsid(guest: &mut Guest) -> u64 { + if guest.sid == guest.pid { + return errno::fail(errno::EPERM); + } + guest.sid = guest.pid; + guest.pgid = guest.pid; + errno::ok(u64::from(guest.sid)) +} + +pub fn getsid(guest: &Guest) -> u64 { + errno::ok(u64::from(guest.sid)) +} diff --git a/userland/capsule_linux/src/linux/call/signal_send.rs b/userland/capsule_linux/src/linux/call/signal_send.rs new file mode 100644 index 000000000..e023636db --- /dev/null +++ b/userland/capsule_linux/src/linux/call/signal_send.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `kill` and `tkill`, for the guest's own threads and children. + +use nonos_libc::mk_kill; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// The only signals the kernel can carry. Anything else is accepted as +/// a request it cannot honour rather than silently dropped. +const SIGKILL: u64 = 9; +const SIGTERM: u64 = 15; + +pub fn kill(guest: &mut Guest, pid: u64, signo: u64) -> u64 { + let target = pid as u32; + /* + * A guest may signal itself, its threads and its children, and nothing + * else. + */ + if !guest.owns(target) && !guest.children.contains(&target) { + return errno::fail(errno::ESRCH); + } + if signo == 0 { + return errno::ok(0); + } + if signo != SIGKILL && signo != SIGTERM { + return errno::fail(errno::EINVAL); + } + /* + * A thread that was parked in a futex has to be let out before it + * can be collected; the reply is the wake. + */ + guest.waits.retain(|(w, _)| *w != target); + guest.threads.retain(|t| *t != target); + match mk_kill(target as u64, signo) { + n if n < 0 => errno::fail(errno::EPERM), + _ => errno::ok(0), + } +} diff --git a/userland/capsule_linux/src/linux/call/sleep.rs b/userland/capsule_linux/src/linux/call/sleep.rs new file mode 100644 index 000000000..1d29ecab3 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/sleep.rs @@ -0,0 +1,43 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Waiting. + +use nonos_libc::{mk_uptime_ms, mk_yield}; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// `timespec` is two 64-bit words: seconds then nanoseconds. +const PAIR: usize = 16; + +/// `nanosleep`: yield until the deadline passes. +pub fn nanosleep(guest: &Guest, req: u64) -> u64 { + let Some(spec) = guest.read(req, PAIR) else { + return errno::fail(errno::EFAULT); + }; + let secs = u64::from_le_bytes(spec[..8].try_into().unwrap_or([0; 8])); + let nanos = u64::from_le_bytes(spec[8..16].try_into().unwrap_or([0; 8])); + let until = uptime().saturating_add(secs * 1000 + nanos / 1_000_000); + while uptime() < until { + mk_yield(); + } + errno::ok(0) +} + +fn uptime() -> u64 { + u64::try_from(mk_uptime_ms()).unwrap_or(0) +} diff --git a/userland/capsule_linux/src/linux/call/spawn/clone.rs b/userland/capsule_linux/src/linux/call/spawn/clone.rs new file mode 100644 index 000000000..3ecdb0cae --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/clone.rs @@ -0,0 +1,57 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `clone`, for threads only. + +use nonos_libc::{mk_foreign_thread, ForeignFrame}; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::serve::Answer; + +const CLONE_VM: u64 = 0x100; +const CLONE_THREAD: u64 = 0x10000; + +/// musl's `__clone` resumes the child at the instruction after its own +/// `syscall`, with rax zero and rsp pointing at the function and argument it +/// pushed. +pub fn clone(guest: &mut Guest, frame: &ForeignFrame) -> Answer { + let a = frame.args(); + let (flags, stack, tls) = (a[0], a[1], a[4]); + if flags & (CLONE_VM | CLONE_THREAD) != CLONE_VM | CLONE_THREAD { + /* + * A new process, not a thread. That is fork, and fork needs an + * address space copy no peer call offers. + */ + return Answer::value(errno::fail(errno::ENOSYS)); + } + if frame.rip == 0 { + /* + * The kernel is not yet passing the guest's return address, so there + * is nowhere correct to start the child. + */ + return Answer::value(errno::fail(errno::ENOSYS)); + } + if stack == 0 { + return Answer::value(errno::fail(errno::EINVAL)); + } + let tid = mk_foreign_thread(guest.pid, frame.rip, stack, tls); + if tid < 0 { + return Answer::value(errno::fail(errno::ENOMEM)); + } + guest.threads.push(tid as u32); + Answer::value(errno::ok(tid as u64)) +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec.rs b/userland/capsule_linux/src/linux/call/spawn/exec.rs new file mode 100644 index 000000000..e45cb5311 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec.rs @@ -0,0 +1,53 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `execve`: the same process, a different program. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::serve::Answer; + +use super::exec_args::vector; +use super::exec_clear::clear; +use super::exec_load::load_over; +use super::exec_resolve::resolve; + +pub fn execve(guest: &mut Guest, pid: u32, path: u64, argv: u64, envp: u64) -> Answer { + let Some(name) = crate::linux::file::read_path(guest, path) else { + return Answer::value(errno::fail(errno::EFAULT)); + }; + /* + * argv and envp live in the memory that is about to be unmapped, so they + * are copied out here and not one step later. + */ + let (Some(args), Some(env)) = (vector(guest, argv), vector(guest, envp)) else { + return Answer::value(errno::fail(errno::EFAULT)); + }; + /* + * Found, followed through any `#!` line, and proved at every step, all + * while the caller still has an address space to be told no in. + */ + let program = match resolve(&guest.cwd, &name, &args) { + Ok(p) => p, + Err(e) => return Answer::value(e), + }; + super::exec_threads::reap(guest, pid); + clear(guest); + match load_over(guest, pid, &program, &env) { + Some(()) => Answer::Park, + None => Answer::value(errno::fail(errno::ENOEXEC)), + } +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec_args.rs b/userland/capsule_linux/src/linux/call/spawn/exec_args.rs new file mode 100644 index 000000000..46237997b --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec_args.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Reading a guest's argv or envp. + +use alloc::vec::Vec; + +use crate::linux::file::read_cstr; +use crate::linux::guest::{Guest, STACK_SIZE}; + +/// Enough for any real command line. A caller handing over more than +/// this is not going to be helped by us trying. +const MAX_ENTRIES: usize = 4096; + +/// Linux's own ceiling on one argument, thirty-two pages. +const MAX_ARG: usize = 32 * 4096; + +/// The whole vector, a quarter of the stack the guest wakes on. +const MAX_TOTAL: usize = STACK_SIZE as usize / 4; + +pub fn vector(guest: &Guest, mut array: u64) -> Option>> { + let mut out = Vec::new(); + if array == 0 { + return Some(out); + } + let mut total = 0usize; + while out.len() < MAX_ENTRIES { + let slot = guest.read(array, 8)?; + let ptr = u64::from_le_bytes(slot.as_slice().try_into().ok()?); + if ptr == 0 { + return Some(out); + } + let arg = read_cstr(guest, ptr, MAX_ARG)?; + /* + * Each string costs its bytes and the terminator the stack + * block will need for it. + */ + total = total.checked_add(arg.len() + 1)?; + if total > MAX_TOTAL { + return None; + } + out.push(arg); + array = array.checked_add(8)?; + } + Some(out) +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec_clear.rs b/userland/capsule_linux/src/linux/call/spawn/exec_clear.rs new file mode 100644 index 000000000..f8565bb32 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec_clear.rs @@ -0,0 +1,46 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Emptying a guest's address space. + +use nonos_libc::peer::mk_peer_unmap; + +use crate::linux::guest::{Guest, MAX_SPAN}; + +/// Every span this capsule gave the guest, taken back. +pub fn clear(guest: &mut Guest) { + for span in core::mem::take(&mut guest.regions) { + let mut done = 0; + /* + * One peer call per megabyte: the kernel refuses a longer span rather + * than sitting in a loop with the page tables locked. + */ + while done < span.len { + let take = (span.len - done).min(MAX_SPAN); + let _ = mk_peer_unmap(guest.pid, span.at + done, take); + done += take; + } + } +} + +/// Every descriptor the guest marked close-on-exec. +pub fn shed(guest: &mut Guest) { + for fd in 0..guest.fds.len() as u64 { + if guest.fds.get(fd as usize).is_some_and(|f| f.cloexec && f.is_open()) { + let _ = crate::linux::file::close(guest, fd); + } + } +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec_load.rs b/userland/capsule_linux/src/linux/call/spawn/exec_load.rs new file mode 100644 index 000000000..11df1e292 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec_load.rs @@ -0,0 +1,64 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Putting the replacing image into a guest that has just been emptied. + +use alloc::vec::Vec; + +use nonos_libc::mk_foreign_exec; + +use super::exec_resolve::Program; +use crate::linux::guest::{Guest, STACK_SIZE, STACK_TOP}; +use crate::linux::image; + +/// The stack top a guest wakes on. The same one a fresh guest gets, +/// because after exec it is a fresh guest in every way but its pid. + +pub fn load_over(guest: &mut Guest, pid: u32, program: &Program, envp: &[Vec]) -> Option<()> { + let (loaded, entry, interp_base) = image::program(guest, &program.bytes).ok()?; + guest.map(STACK_TOP - STACK_SIZE, STACK_SIZE, true, false); + /* + * A program invoked with no argv still gets one entry: argv[0] is what a C + * runtime prints in its own error messages, and a shell that execs without + * it reports failures against an empty name. + */ + let args = match program.argv.is_empty() { + true => alloc::vec![program.path.clone()], + false => program.argv.clone(), + }; + let rsp = image::build(guest, STACK_TOP, &loaded, interp_base, &args, envp)?; + /* + * The descriptor table survives, which is what makes a shell's redirection + * work: it wires the pipe, then executes. + */ + super::exec_clear::shed(guest); + reset(guest); + /* + * Not a start: the caller is parked inside the `execve` it made and is + * already runnable. + */ + match mk_foreign_exec(pid, entry, rsp) { + n if n < 0 => None, + _ => Some(()), + } +} + +/// State that belongs to the program rather than the process. +fn reset(guest: &mut Guest) { + guest.brk = crate::linux::guest::BRK_BASE; + guest.mmap_next = crate::linux::guest::MMAP_BASE; + guest.fs_base = 0; +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec_resolve.rs b/userland/capsule_linux/src/linux/call/spawn/exec_resolve.rs new file mode 100644 index 000000000..3c782a18e --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec_resolve.rs @@ -0,0 +1,65 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Which image actually runs, once `#!` has had its say. + +use alloc::vec::Vec; + +use crate::linux::abi::errno; +use crate::linux::file::{key, store_read, visible}; + +use super::exec_shebang::parse; + +/// The same ceiling the first image is read under. +pub const MAX_IMAGE: u32 = 64 << 20; + +/// Linux's own limit on how deep `#!` may point at another script. +const MAX_DEPTH: usize = 4; + +pub struct Program { + pub path: Vec, + pub bytes: Vec, + pub argv: Vec>, +} + +pub fn resolve(cwd: &[u8], name: &[u8], argv: &[Vec]) -> Result { + let mut path = visible(cwd, name); + let mut args = argv.to_vec(); + for _ in 0..MAX_DEPTH { + let Ok(bytes) = store_read(&key(&path), MAX_IMAGE) else { + return Err(errno::fail(errno::ENOENT)); + }; + if crate::linux::attest::verify(&path, &bytes).is_err() { + return Err(errno::fail(errno::EPERM)); + } + let Some(interp) = parse(&bytes) else { + return Ok(Program { path, bytes, argv: args }); + }; + args = rewrite(&interp, &path, &args); + path = visible(cwd, &interp.path); + } + Err(errno::fail(errno::ELOOP)) +} + +/// The interpreter, its one optional argument, the script, then whatever the +/// caller passed after argv[0]. +fn rewrite(interp: &super::exec_shebang::Interp, script: &[u8], args: &[Vec]) -> Vec> { + let mut out = alloc::vec![interp.path.clone()]; + out.extend(interp.arg.clone()); + out.push(script.to_vec()); + out.extend(args.iter().skip(1).cloned()); + out +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec_shebang.rs b/userland/capsule_linux/src/linux/call/spawn/exec_shebang.rs new file mode 100644 index 000000000..7263ac2f7 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec_shebang.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The `#!` line. + +use alloc::vec::Vec; + +/// Linux's BINPRM_BUF_SIZE. A line longer than this is truncated at the +/// limit rather than refused, which is also what Linux does. +const MAX_LINE: usize = 127; + +pub struct Interp { + pub path: Vec, + pub arg: Option>, +} + +pub fn parse(image: &[u8]) -> Option { + let head = image.get(..MAX_LINE.min(image.len()))?; + let body = head.strip_prefix(b"#!")?; + let line = &body[..body.iter().position(|b| *b == b'\n').unwrap_or(body.len())]; + let line = trim(line); + let cut = line.iter().position(|b| *b == b' ' || *b == b'\t').unwrap_or(line.len()); + let path = &line[..cut]; + if path.is_empty() { + return None; + } + let rest = trim(&line[cut..]); + Some(Interp { + path: path.to_vec(), + arg: (!rest.is_empty()).then(|| rest.to_vec()), + }) +} + +fn trim(s: &[u8]) -> &[u8] { + let start = s.iter().position(|b| *b != b' ' && *b != b'\t').unwrap_or(s.len()); + let end = s.iter().rposition(|b| *b != b' ' && *b != b'\t' && *b != b'\r'); + match end { + Some(e) => &s[start..=e.max(start)], + None => &s[..0], + } +} diff --git a/userland/capsule_linux/src/linux/call/spawn/exec_threads.rs b/userland/capsule_linux/src/linux/call/spawn/exec_threads.rs new file mode 100644 index 000000000..c2a423772 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/exec_threads.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! What happens to the other threads when one of them calls `execve`. + +use nonos_libc::{mk_foreign_reply, mk_kill}; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +const SIGKILL: u64 = 9; + +pub fn reap(guest: &mut Guest, caller: u32) { + for tid in core::mem::take(&mut guest.threads) { + if tid == caller { + guest.threads.push(tid); + continue; + } + /* + * A thread parked in a futex has to be let out of the kernel before it + * can be ended: the kill marks it, but nothing collects a thread that + * is still waiting for an answer. + */ + guest.waits.retain(|(w, _)| *w != tid); + let _ = mk_foreign_reply(tid, errno::fail(errno::EINTR)); + let _ = mk_kill(tid as u64, SIGKILL); + } +} diff --git a/userland/capsule_linux/src/linux/call/spawn/fork.rs b/userland/capsule_linux/src/linux/call/spawn/fork.rs new file mode 100644 index 000000000..e2b8efeaa --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/fork.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `fork`. + +use nonos_libc::{mk_foreign_fork, mk_foreign_resume}; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::serve::Answer; + +use super::fork_copy::copy_spans; + +pub fn fork(guest: &mut Guest) -> Answer { + let child = mk_foreign_fork(guest.pid); + if child < 0 { + return Answer::value(errno::fail(errno::ENOMEM)); + } + let child = child as u32; + if !copy_spans(guest, child) { + return Answer::value(errno::fail(errno::ENOMEM)); + } + if mk_foreign_resume(child) < 0 { + return Answer::value(errno::fail(errno::ENOMEM)); + } + guest.children.push(child); + Answer::value(errno::ok(child as u64)) +} diff --git a/userland/capsule_linux/src/linux/call/spawn/fork_copy.rs b/userland/capsule_linux/src/linux/call/spawn/fork_copy.rs new file mode 100644 index 000000000..5a165b451 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/fork_copy.rs @@ -0,0 +1,53 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Copying a parent's spans into the child it just made. + +use crate::linux::guest::{Guest, Region}; +use nonos_libc::peer::{mk_peer_map, mk_peer_write, PEER_PROT_EXEC, PEER_PROT_WRITE}; + +/// Every span, mapped into the child and then filled from the parent. +pub(super) fn copy_spans(guest: &mut Guest, child: u32) -> bool { + let spans = guest.regions.clone(); + for span in spans { + if mk_peer_map(child, span.at, span.len, prot_of(&span)) < 0 { + return false; + } + if !copy_one(guest, child, span.at, span.len) { + return false; + } + } + true +} + +fn prot_of(span: &Region) -> u64 { + let mut prot = 0; + if span.write { + prot |= PEER_PROT_WRITE; + } + if span.exec { + prot |= PEER_PROT_EXEC; + } + prot +} + +fn copy_one(guest: &Guest, child: u32, at: u64, len: u64) -> bool { + let Some(bytes) = guest.read(at, len as usize) else { + return false; + }; + mk_peer_write(child, at, &bytes) >= 0 +} diff --git a/userland/capsule_linux/src/linux/call/spawn/mod.rs b/userland/capsule_linux/src/linux/call/spawn/mod.rs new file mode 100644 index 000000000..7946a83e8 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/mod.rs @@ -0,0 +1,34 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Making and replacing processes: clone, fork, exec, wait. + +mod clone; +mod exec; +mod exec_args; +mod exec_clear; +mod exec_load; +mod exec_resolve; +mod exec_shebang; +mod exec_threads; +mod fork; +mod fork_copy; +mod wait; + +pub use clone::clone; +pub use exec::execve; +pub use fork::fork; +pub use wait::wait4; diff --git a/userland/capsule_linux/src/linux/call/spawn/wait.rs b/userland/capsule_linux/src/linux/call/spawn/wait.rs new file mode 100644 index 000000000..7b87d4480 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/spawn/wait.rs @@ -0,0 +1,48 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `wait4`: which of this guest's children has ended. + +use nonos_libc::mk_pid_alive; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::serve::Answer; + +/// Set by a caller that will not wait. +const WNOHANG: u64 = 1; + +pub fn wait4(guest: &mut Guest, want: u64, status: u64, flags: u64) -> Answer { + if guest.children.is_empty() { + return Answer::value(errno::fail(errno::ECHILD)); + } + let gone = guest.children.iter().copied().find(|pid| { + (want as i64) <= 0 || want as u32 == *pid + }).filter(|pid| !mk_pid_alive(*pid)); + let Some(pid) = gone else { + let _ = flags & WNOHANG; + return Answer::value(errno::fail(errno::EAGAIN)); + }; + guest.children.retain(|p| *p != pid); + /* + * The exit code a guest passed to exit is not readable from here: the + * kernel records it and nothing hands it back. + */ + if status != 0 && guest.write(status, &0u32.to_le_bytes()) < 4 { + return Answer::value(errno::fail(errno::EFAULT)); + } + Answer::value(errno::ok(pid as u64)) +} diff --git a/userland/capsule_linux/src/linux/call/thread.rs b/userland/capsule_linux/src/linux/call/thread.rs index 150c40404..dd74708a3 100644 --- a/userland/capsule_linux/src/linux/call/thread.rs +++ b/userland/capsule_linux/src/linux/call/thread.rs @@ -23,12 +23,14 @@ use crate::linux::guest::Guest; const ARCH_SET_FS: u64 = 0x1002; const ARCH_GET_FS: u64 = 0x1003; -/// A guest setting `fs` is setting its thread pointer. It is recorded here -/// and applied when the guest next runs; a guest cannot set a segment base -/// itself because it holds no capability that would let it. -pub fn arch_prctl(guest: &mut Guest, code: u64, addr: u64) -> u64 { +/// The thread pointer belongs to the calling thread, not the process, so the +/// tid is the one that traps and not the guest's own pid. +pub fn arch_prctl(guest: &mut Guest, tid: u32, code: u64, addr: u64) -> u64 { match code { ARCH_SET_FS => { + if nonos_libc::peer::mk_peer_tls(tid, addr) < 0 { + return errno::fail(errno::EPERM); + } guest.fs_base = addr; errno::ok(0) } @@ -40,10 +42,7 @@ pub fn arch_prctl(guest: &mut Guest, code: u64, addr: u64) -> u64 { } } -/// Seconds and nanoseconds, from the host's own monotonic millisecond -/// clock. Every clock a guest can name reads from the one clock this -/// system has, which is honest and is not the same as pretending to have -/// several. +/// Seconds and nanoseconds, from the host's own monotonic millisecond clock. pub fn clock_gettime(guest: &mut Guest, _clock: u64, out: u64) -> u64 { let ms = nonos_libc::mk_uptime_ms().max(0) as u64; let mut buf = [0u8; 16]; diff --git a/userland/capsule_linux/src/linux/call/timeops.rs b/userland/capsule_linux/src/linux/call/timeops.rs new file mode 100644 index 000000000..d35c4f46c --- /dev/null +++ b/userland/capsule_linux/src/linux/call/timeops.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The clock, as a Linux program asks for it. + +use nonos_libc::mk_time_millis; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// `timespec` and `timeval` are both two 64-bit words; they differ only +/// in whether the second is nanoseconds or microseconds. +const PAIR: usize = 16; + +fn now_ms() -> u64 { + u64::try_from(mk_time_millis()).unwrap_or(0) +} + +/// `time`: whole seconds since the epoch, returned and optionally stored. +pub fn time(guest: &Guest, out: u64) -> u64 { + let secs = now_ms() / 1000; + if out != 0 && guest.write(out, &secs.to_le_bytes()) < 0 { + return errno::fail(errno::EFAULT); + } + errno::ok(secs) +} + +pub fn gettimeofday(guest: &Guest, tv: u64) -> u64 { + if tv == 0 { + return errno::ok(0); + } + let ms = now_ms(); + let mut buf = [0u8; PAIR]; + buf[..8].copy_from_slice(&(ms / 1000).to_le_bytes()); + buf[8..].copy_from_slice(&((ms % 1000) * 1000).to_le_bytes()); + match guest.write(tv, &buf) { + n if n < 0 => errno::fail(errno::EFAULT), + _ => errno::ok(0), + } +} + diff --git a/userland/capsule_linux/src/linux/call/umask.rs b/userland/capsule_linux/src/linux/call/umask.rs new file mode 100644 index 000000000..5494a1247 --- /dev/null +++ b/userland/capsule_linux/src/linux/call/umask.rs @@ -0,0 +1,32 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! The file-creation mask. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// What a shell starts with, and what Linux gives a fresh process. +pub const DEFAULT_UMASK: u16 = 0o022; + +pub fn umask(guest: &mut Guest, want: u64) -> u64 { + let previous = guest.umask; + /* + * Only the nine permission bits are a mask; the rest are not the + * caller's to set and Linux discards them too. + */ + guest.umask = (want as u16) & 0o777; + errno::ok(u64::from(previous)) +} diff --git a/userland/capsule_linux/src/linux/call/vector_read.rs b/userland/capsule_linux/src/linux/call/vector_read.rs new file mode 100644 index 000000000..8b97f907d --- /dev/null +++ b/userland/capsule_linux/src/linux/call/vector_read.rs @@ -0,0 +1,64 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! `readv`, the reading half of the scatter-gather pair. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// One `struct iovec`: a pointer and a length, both eight bytes. +const IOVEC: usize = 16; +/// Linux refuses a longer vector, so a guest cannot ask this capsule to +/// walk an unbounded list. +const IOV_MAX: u64 = 1024; + +pub fn readv(guest: &mut Guest, fd: u64, iov: u64, count: u64) -> u64 { + if count > IOV_MAX { + return errno::fail(errno::EINVAL); + } + let Some(table) = guest.read(iov, count as usize * IOVEC) else { + return errno::fail(errno::EFAULT); + }; + let mut got = 0u64; + for i in 0..count as usize { + let at = i * IOVEC; + let (base, len) = (word(&table, at), word(&table, at + 8)); + if len == 0 { + continue; + } + let result = super::io::read(guest, fd, base, len); + if (result as i64) < 0 { + /* + * A failure after a partial read is that partial count: the bytes + * already in the guest's buffers are real and a caller told + * otherwise would read them twice. + */ + return if got == 0 { result } else { errno::ok(got) }; + } + got += result; + // A short read ends the vector. + if result < len { + break; + } + } + errno::ok(got) +} + +fn word(bytes: &[u8], at: usize) -> u64 { + match bytes.get(at..at + 8).and_then(|s| s.try_into().ok()) { + Some(eight) => u64::from_le_bytes(eight), + None => 0, + } +} diff --git a/userland/capsule_linux/src/linux/env.rs b/userland/capsule_linux/src/linux/env.rs new file mode 100644 index 000000000..1face4d2e --- /dev/null +++ b/userland/capsule_linux/src/linux/env.rs @@ -0,0 +1,31 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The environment the first program of a guest starts with. + +use alloc::vec::Vec; + +/// Deliberately short. +pub fn default() -> Vec> { + alloc::vec![ + b"PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin".to_vec(), + b"HOME=/root".to_vec(), + b"TERM=linux".to_vec(), + b"PWD=/".to_vec(), + b"SHELL=/bin/sh".to_vec(), + b"LANG=C.UTF-8".to_vec(), + ] +} diff --git a/userland/capsule_linux/src/linux/file/at.rs b/userland/capsule_linux/src/linux/file/at.rs new file mode 100644 index 000000000..81cc736c2 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/at.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A `dirfd` and a path, resolved to one absolute name. + +use alloc::vec::Vec; + +use crate::linux::guest::{Guest, Kind}; + +use super::flags::AT_FDCWD; +use super::path::read_path; +use super::resolve::visible; + +/// The guest-visible absolute path `dirfd` and `path` name together, or `None` +/// when the path cannot be read or the descriptor is not a directory this +/// guest opened. +pub fn resolve_at(guest: &Guest, dirfd: u64, path: u64) -> Option> { + let name = read_path(guest, path)?; + if name.first() == Some(&b'/') { + return Some(visible(b"/", &name)); + } + let base = base_of(guest, dirfd)?; + Some(visible(&base, &name)) +} + +fn base_of(guest: &Guest, dirfd: u64) -> Option> { + if dirfd == AT_FDCWD { + return Some(guest.cwd.clone()); + } + match guest.fds.get(dirfd as usize) { + Some(fd) if fd.kind == Kind::Dir => Some(fd.path.clone()), + _ => None, + } +} diff --git a/userland/capsule_linux/src/linux/file/close.rs b/userland/capsule_linux/src/linux/file/close.rs index 28968be97..50fb92284 100644 --- a/userland/capsule_linux/src/linux/file/close.rs +++ b/userland/capsule_linux/src/linux/file/close.rs @@ -14,12 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Closing a descriptor, and writing out anything it was holding. -use nonos_app_skeleton::clients::vfs::write_file; -use nonos_libc::mk_getpid; - use crate::linux::abi::errno; use crate::linux::guest::{Fd, Guest, Kind}; @@ -31,9 +27,8 @@ pub fn close(guest: &mut Guest, fd: u64) -> u64 { return errno::fail(errno::EBADF); } /* - * The store handle is dropped with the descriptor, which closes it on - * the server. A failed flush is reported here because close is the - * last chance a program has to learn that its output never landed. + * The store handle is dropped with the descriptor, which closes it on the + * server. */ let flushed = flush(entry); *entry = Fd::empty(Kind::Free); @@ -43,9 +38,10 @@ pub fn close(guest: &mut Guest, fd: u64) -> u64 { } } -fn flush(entry: &Fd) -> bool { +/// Write a descriptor's buffered bytes out. +pub(super) fn flush(entry: &Fd) -> bool { if entry.kind != Kind::File || !entry.writable { return true; } - write_file(mk_getpid() as u32, &entry.path, &entry.pending).is_ok() + super::store::write(&super::resolve::key(&entry.path), &entry.pending).is_ok() } diff --git a/userland/capsule_linux/src/linux/file/cstr.rs b/userland/capsule_linux/src/linux/file/cstr.rs new file mode 100644 index 000000000..61dc6e6d0 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/cstr.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A NUL-terminated string out of a guest, a page at a time. + +use alloc::vec::Vec; + +use crate::linux::guest::{page_down, Guest, PAGE}; + +/// Bytes up to the terminator, or nothing when the string is not +/// terminated inside `max` or reaches memory the guest does not hold. +pub fn read_cstr(guest: &Guest, addr: u64, max: usize) -> Option> { + if addr == 0 { + return None; + } + let mut out: Vec = Vec::new(); + let mut at = addr; + while out.len() <= max { + let page_end = page_down(at).checked_add(PAGE)?; + let room = (max + 1 - out.len()) as u64; + let take = (page_end.saturating_sub(at)).min(room); + let chunk = guest.read(at, take as usize)?; + if let Some(i) = chunk.iter().position(|b| *b == 0) { + out.extend_from_slice(&chunk[..i]); + return Some(out); + } + out.extend_from_slice(&chunk); + at = page_end; + } + None +} diff --git a/userland/capsule_linux/src/linux/file/dir.rs b/userland/capsule_linux/src/linux/file/dir.rs index 335e954c2..9dfe5053c 100644 --- a/userland/capsule_linux/src/linux/file/dir.rs +++ b/userland/capsule_linux/src/linux/file/dir.rs @@ -14,25 +14,24 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Directory open. The listing is snapshotted here, which is all POSIX //! promises a directory stream. use alloc::string::String; use alloc::vec::Vec; -use nonos_app_skeleton::clients::vfs::list_paths; - use crate::linux::abi::errno; use crate::linux::guest::{Fd, Guest}; -use super::slot; +use super::{resolve, slot, store}; -pub fn open(guest: &mut Guest, owner: u32, path: Vec) -> u64 { - let Ok(keys) = list_paths(owner, &path) else { +pub fn open(guest: &mut Guest, path: Vec) -> u64 { + let at = resolve::key(&path); + let Ok(keys) = store::list(&at) else { return errno::fail(errno::EACCES); }; - let names = children(&path, keys); + // Cut against the store key, not against the path the guest named. + let names = children(at.as_bytes(), keys); match slot::install(guest, Fd::dir(path, names)) { Some(n) => errno::ok(n), None => errno::fail(errno::EMFILE), @@ -41,8 +40,8 @@ pub fn open(guest: &mut Guest, owner: u32, path: Vec) -> u64 { // OP_LIST returns whole keys at any depth. Cut at the first separator // past the prefix and dedupe, or every file below shows up as a sibling. -fn children(path: &[u8], keys: Vec) -> Vec { - let cut = if path == b"/" { 1 } else { path.len() + 1 }; +fn children(at: &[u8], keys: Vec) -> Vec { + let cut = at.len() + 1; let mut out: Vec = Vec::new(); for key in keys { let bytes = key.as_bytes(); diff --git a/userland/capsule_linux/src/linux/file/dirops.rs b/userland/capsule_linux/src/linux/file/dirops.rs new file mode 100644 index 000000000..26eeb6cab --- /dev/null +++ b/userland/capsule_linux/src/linux/file/dirops.rs @@ -0,0 +1,68 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Making, removing and moving names in the store. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::at::resolve_at; +use super::resolve::key; +use super::store_name; + +pub fn mkdirat(guest: &Guest, dirfd: u64, path: u64) -> u64 { + let Some(at) = resolve_at(guest, dirfd, path) else { + return errno::fail(errno::EFAULT); + }; + match store_name::mkdir(&key(&at)) { + Ok(()) => errno::ok(0), + Err(_) => errno::fail(errno::EEXIST), + } +} + +pub fn rmdir(guest: &Guest, path: u64) -> u64 { + let Some(at) = resolve_at(guest, super::flags::AT_FDCWD, path) else { + return errno::fail(errno::EFAULT); + }; + /* + * Not recursive: POSIX rmdir refuses a populated directory, and a + * recursive delete behind that name is data loss. + */ + match store_name::rmdir(&key(&at)) { + Ok(()) => errno::ok(0), + Err(_) => errno::fail(errno::ENOTEMPTY), + } +} + +pub fn unlinkat(guest: &Guest, dirfd: u64, path: u64, flags: u64) -> u64 { + let Some(at) = resolve_at(guest, dirfd, path) else { + return errno::fail(errno::EFAULT); + }; + /* + * AT_REMOVEDIR turns unlinkat into rmdir, which is how a libc implements + * rmdir on top of one syscall. + */ + const AT_REMOVEDIR: u64 = 0x200; + let at = key(&at); + let done = match flags & AT_REMOVEDIR { + 0 => store_name::unlink(&at), + _ => store_name::rmdir(&at), + }; + match done { + Ok(()) => errno::ok(0), + Err(_) => errno::fail(errno::ENOENT), + } +} diff --git a/userland/capsule_linux/src/linux/file/epoll.rs b/userland/capsule_linux/src/linux/file/epoll.rs new file mode 100644 index 000000000..9e30e4b80 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/epoll.rs @@ -0,0 +1,64 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `epoll_create1` and `epoll_ctl`: the interest list a program keeps. + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest, Kind}; + +use super::slot::install; + +const EPOLL_CTL_ADD: u64 = 1; +const EPOLL_CTL_DEL: u64 = 2; +const EPOLL_CTL_MOD: u64 = 3; + +/// `struct epoll_event` is packed on x86_64: a u32 of events then a u64 +/// of caller data, twelve bytes and not sixteen. +pub const EVENT_LEN: usize = 12; + +pub fn epoll_create(guest: &mut Guest) -> u64 { + match install(guest, Fd::empty(Kind::Epoll)) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} + +pub fn epoll_ctl(guest: &mut Guest, ep: u64, op: u64, fd: u64, event: u64) -> u64 { + let entry = match op { + EPOLL_CTL_DEL => None, + EPOLL_CTL_ADD | EPOLL_CTL_MOD => match read_event(guest, event) { + Some(pair) => Some(pair), + None => return errno::fail(errno::EFAULT), + }, + _ => return errno::fail(errno::EINVAL), + }; + let Some(list) = guest.fds.get_mut(ep as usize).filter(|f| f.kind == Kind::Epoll) else { + return errno::fail(errno::EBADF); + }; + list.watch.retain(|(f, _, _)| *f != fd); + if let Some((events, data)) = entry { + list.watch.push((fd, events, data)); + } + errno::ok(0) +} + +fn read_event(guest: &Guest, at: u64) -> Option<(u32, u64)> { + let raw = guest.read(at, EVENT_LEN)?; + let events = u32::from_le_bytes([raw[0], raw[1], raw[2], raw[3]]); + let mut data = [0u8; 8]; + data.copy_from_slice(&raw[4..12]); + Some((events, u64::from_le_bytes(data))) +} diff --git a/userland/capsule_linux/src/linux/file/epoll_wait.rs b/userland/capsule_linux/src/linux/file/epoll_wait.rs new file mode 100644 index 000000000..0b30b275d --- /dev/null +++ b/userland/capsule_linux/src/linux/file/epoll_wait.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `epoll_wait`: which of the watched descriptors are ready now. + +use alloc::vec::Vec; + +use crate::linux::abi::errno; +use crate::linux::guest::{Guest, Kind}; +use crate::linux::net::ready; + +use super::epoll::EVENT_LEN; + +pub fn epoll_wait(guest: &mut Guest, ep: u64, out: u64, max: u64) -> u64 { + let Some(list) = guest.fds.get(ep as usize).filter(|f| f.kind == Kind::Epoll) else { + return errno::fail(errno::EBADF); + }; + let watch = list.watch.clone(); + let mut blob: Vec = Vec::new(); + let mut hits = 0u64; + for (fd, wanted, data) in watch { + if hits >= max { + break; + } + let live = u32::from(ready(guest, fd)) & wanted; + if live == 0 { + continue; + } + blob.extend_from_slice(&live.to_le_bytes()); + blob.extend_from_slice(&data.to_le_bytes()); + hits += 1; + } + if blob.is_empty() { + return errno::ok(0); + } + if guest.write(out, &blob) < blob.len() as i64 { + return errno::fail(errno::EFAULT); + } + let _ = EVENT_LEN; + errno::ok(hits) +} diff --git a/userland/capsule_linux/src/linux/file/flags.rs b/userland/capsule_linux/src/linux/file/flags.rs index 1ee5b7e7d..33326c570 100644 --- a/userland/capsule_linux/src/linux/file/flags.rs +++ b/userland/capsule_linux/src/linux/file/flags.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! The open flags and the special directory descriptor, as Linux defines //! them on x86_64. Transcribed, never chosen. @@ -24,14 +23,12 @@ pub const O_CREAT: u64 = 0o100; pub const O_TRUNC: u64 = 0o1000; pub const O_APPEND: u64 = 0o2000; pub const O_DIRECTORY: u64 = 0o200000; +pub const O_CLOEXEC: u64 = 0o2000000; /// `openat` with this as the directory means "relative to the working /// directory", which is the only relative form a static binary uses. pub const AT_FDCWD: u64 = (-100i64) as u64; -/// Set by `newfstatat` when the caller means the link and not its target. -pub const AT_EMPTY_PATH: u64 = 0x1000; - /// A guest asked to write if it asked for anything but read. pub fn wants_write(flags: u64) -> bool { flags & (O_WRONLY | O_RDWR | O_CREAT | O_TRUNC | O_APPEND) != 0 diff --git a/userland/capsule_linux/src/linux/file/fsync.rs b/userland/capsule_linux/src/linux/file/fsync.rs new file mode 100644 index 000000000..f5c66c497 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/fsync.rs @@ -0,0 +1,29 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! Getting a descriptor's buffered bytes onto the store. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +pub fn fsync(guest: &Guest, fd: u64) -> u64 { + let Some(entry) = guest.fds.get(fd as usize).filter(|f| f.is_open()) else { + return errno::fail(errno::EBADF); + }; + match super::close::flush(entry) { + true => errno::ok(0), + false => errno::fail(errno::EIO), + } +} diff --git a/userland/capsule_linux/src/linux/file/memfd.rs b/userland/capsule_linux/src/linux/file/memfd.rs new file mode 100644 index 000000000..36bc7afa0 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/memfd.rs @@ -0,0 +1,46 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `memfd_create` and `ftruncate`. + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest, Kind}; + +use super::slot::install; + +pub fn is_memfd(guest: &Guest, fd: u64) -> bool { + matches!(guest.fds.get(fd as usize), Some(e) if e.kind == Kind::Memfd) +} + +pub fn memfd_create(guest: &mut Guest) -> u64 { + match install(guest, Fd::memfd()) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} + +/// Sizing one records the size and nothing else. The pages appear when +/// the client maps it, because that is when their address is decided. +pub fn ftruncate(guest: &mut Guest, fd: u64, len: u64) -> u64 { + match guest.fds.get_mut(fd as usize) { + Some(entry) if entry.kind == Kind::Memfd => { + entry.size = len; + errno::ok(0) + } + Some(_) => errno::fail(errno::EINVAL), + None => errno::fail(errno::EBADF), + } +} diff --git a/userland/capsule_linux/src/linux/file/memfd_map.rs b/userland/capsule_linux/src/linux/file/memfd_map.rs new file mode 100644 index 000000000..82e9c64bb --- /dev/null +++ b/userland/capsule_linux/src/linux/file/memfd_map.rs @@ -0,0 +1,48 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Where a memfd landed, and what was staged on it. + +use alloc::vec::Vec; + +use crate::linux::guest::{Guest, Kind}; + +/// Content this capsule put on a descriptor before the guest mapped it. +pub fn staged(guest: &Guest, fd: u64) -> Option> { + match guest.fds.get(fd as usize) { + Some(e) if e.kind == Kind::Memfd && !e.pending.is_empty() => Some(e.pending.clone()), + _ => None, + } +} + +/// Where a mapped memfd lives in the guest, which is what a shm pool +/// needs to find its pixels. +pub fn mapped_at(guest: &Guest, fd: u64) -> Option<(u64, u64)> { + match guest.fds.get(fd as usize) { + Some(e) if e.kind == Kind::Memfd && e.offset != 0 => Some((e.offset, e.size)), + _ => None, + } +} + +/// Record the address a mapping landed on. The offset field carries it, +/// because a memfd has no read position for it to mean anything else. +pub fn set_mapped(guest: &mut Guest, fd: u64, at: u64) { + if let Some(entry) = guest.fds.get_mut(fd as usize) { + if entry.kind == Kind::Memfd { + entry.offset = at; + } + } +} diff --git a/userland/capsule_linux/src/linux/file/meta/mod.rs b/userland/capsule_linux/src/linux/file/meta/mod.rs new file mode 100644 index 000000000..84fa77894 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/meta/mod.rs @@ -0,0 +1,30 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! What the store knows about a name, and what a program may do with it. + +mod perms; +mod query; +pub(super) mod stat; +mod statbuf; +mod statfs; +mod statx; + +pub use perms::{chmod, faccessat, fchmod, fchmodat}; +pub use query::{access, readlink}; +pub use stat::{fstat, look, newfstatat}; +pub use statfs::statfs; +pub use statx::statx; diff --git a/userland/capsule_linux/src/linux/file/meta/perms.rs b/userland/capsule_linux/src/linux/file/meta/perms.rs new file mode 100644 index 000000000..affea08c3 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/meta/perms.rs @@ -0,0 +1,65 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Mode bits, and whether a path can be reached. + +use crate::linux::abi::errno; +use crate::linux::guest::{Guest, Kind}; + +use super::super::at::resolve_at; +use super::super::flags::AT_FDCWD; +use super::super::resolve::key; +use super::super::{store, store_name}; + +pub fn fchmodat(guest: &Guest, dirfd: u64, path: u64, mode: u64) -> u64 { + let Some(at) = resolve_at(guest, dirfd, path) else { + return errno::fail(errno::EFAULT); + }; + match store_name::chmod(&key(&at), mode as u16) { + Ok(()) => errno::ok(0), + Err(_) => errno::fail(errno::ENOENT), + } +} + +/// `fchmod` names the file by a descriptor the guest already holds, so +/// the path comes from the descriptor rather than from the caller. +pub fn fchmod(guest: &Guest, fd: u64, mode: u64) -> u64 { + let Some(entry) = guest.fds.get(fd as usize).filter(|f| f.is_open()) else { + return errno::fail(errno::EBADF); + }; + if entry.kind != Kind::File && entry.kind != Kind::Dir { + return errno::fail(errno::EINVAL); + } + match store_name::chmod(&key(&entry.path), mode as u16) { + Ok(()) => errno::ok(0), + Err(_) => errno::fail(errno::ENOENT), + } +} + +/// `faccessat`: does the path exist and is it reachable. +pub fn faccessat(guest: &Guest, dirfd: u64, path: u64) -> u64 { + let Some(at) = resolve_at(guest, dirfd, path) else { + return errno::fail(errno::EFAULT); + }; + match store::stat(&key(&at)) { + Ok(_) => errno::ok(0), + Err(_) => errno::fail(errno::ENOENT), + } +} + +pub fn chmod(guest: &Guest, path: u64, mode: u64) -> u64 { + fchmodat(guest, AT_FDCWD, path, mode) +} diff --git a/userland/capsule_linux/src/linux/file/query.rs b/userland/capsule_linux/src/linux/file/meta/query.rs similarity index 64% rename from userland/capsule_linux/src/linux/file/query.rs rename to userland/capsule_linux/src/linux/file/meta/query.rs index f74eb2b7e..a88df7275 100644 --- a/userland/capsule_linux/src/linux/file/query.rs +++ b/userland/capsule_linux/src/linux/file/meta/query.rs @@ -14,51 +14,34 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `getcwd`, `access` and `readlink`: the three questions a program asks //! about a path without opening it. -use nonos_libc::mk_getpid; - use crate::linux::abi::errno; use crate::linux::guest::Guest; -use super::{path, resolve, stat}; - -pub fn getcwd(guest: &Guest, out: u64, size: u64) -> u64 { - let need = guest.cwd.len() + 1; - if size < need as u64 { - return errno::fail(errno::ERANGE); - } - let mut buf = guest.cwd.clone(); - buf.push(0); - if guest.write(out, &buf) < need as i64 { - return errno::fail(errno::EFAULT); - } - // Linux returns the length including the terminator, not a pointer. - errno::ok(need as u64) -} +use super::super::{path, resolve}; +use super::stat; pub fn access(guest: &Guest, path_ptr: u64) -> u64 { let Some(name) = path::read_path(guest, path_ptr) else { return errno::fail(errno::EFAULT); }; - let full = resolve::absolute(&guest.cwd, &name); - match stat::look(mk_getpid() as u32, &full) { + let full = resolve::visible(&guest.cwd, &name); + match stat::look(&full) { Some(_) => errno::ok(0), None => errno::fail(errno::ENOENT), } } -/// The store holds no symbolic links, so a path that exists is not one -/// and a path that does not exist is absent. Both are real answers, and -/// neither is the invented target a caller would act on. +/// The store holds no symbolic links, so a path that exists is not one and a +/// path that does not exist is absent. pub fn readlink(guest: &Guest, path_ptr: u64) -> u64 { let Some(name) = path::read_path(guest, path_ptr) else { return errno::fail(errno::EFAULT); }; - let full = resolve::absolute(&guest.cwd, &name); - match stat::look(mk_getpid() as u32, &full) { + let full = resolve::visible(&guest.cwd, &name); + match stat::look(&full) { Some(_) => errno::fail(errno::EINVAL), None => errno::fail(errno::ENOENT), } diff --git a/userland/capsule_linux/src/linux/file/stat.rs b/userland/capsule_linux/src/linux/file/meta/stat.rs similarity index 86% rename from userland/capsule_linux/src/linux/file/stat.rs rename to userland/capsule_linux/src/linux/file/meta/stat.rs index 0ee7e87c4..bc902a52d 100644 --- a/userland/capsule_linux/src/linux/file/stat.rs +++ b/userland/capsule_linux/src/linux/file/meta/stat.rs @@ -14,22 +14,19 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! What the store knows about a path, and the two calls that ask. -use nonos_app_skeleton::clients::vfs::stat_full; -use nonos_libc::mk_getpid; - use crate::linux::abi::errno; use crate::linux::guest::{Guest, Kind}; -use super::flags::AT_FDCWD; +use super::super::flags::AT_FDCWD; +use super::super::{path, resolve, store}; use super::statbuf::{build, STAT_LEN}; -use super::{path, resolve}; -/// Size and whether it is a directory, or nothing when the path is absent. -pub fn look(owner: u32, full: &[u8]) -> Option<(u64, bool)> { - match stat_full(owner, full) { +/// Size and whether it is a directory, or nothing when the path is +/// absent. `full` is guest-visible and is confined here. +pub fn look(full: &[u8]) -> Option<(u64, bool)> { + match store::stat_full(&resolve::key(full)) { Ok((size, is_dir, _, _)) => Some((size, is_dir)), Err(_) => None, } @@ -55,8 +52,8 @@ pub fn newfstatat(guest: &mut Guest, dirfd: u64, path_ptr: u64, out: u64) -> u64 if dirfd != AT_FDCWD { return errno::fail(errno::ENOSYS); } - let full = resolve::absolute(&guest.cwd, &name); - match look(mk_getpid() as u32, &full) { + let full = resolve::visible(&guest.cwd, &name); + match look(&full) { Some((size, is_dir)) => write_out(guest, out, size, is_dir), None => errno::fail(errno::ENOENT), } diff --git a/userland/capsule_linux/src/linux/file/statbuf.rs b/userland/capsule_linux/src/linux/file/meta/statbuf.rs similarity index 83% rename from userland/capsule_linux/src/linux/file/statbuf.rs rename to userland/capsule_linux/src/linux/file/meta/statbuf.rs index b74f843fc..844180c60 100644 --- a/userland/capsule_linux/src/linux/file/statbuf.rs +++ b/userland/capsule_linux/src/linux/file/meta/statbuf.rs @@ -14,14 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! The `struct stat` an x86_64 Linux program expects, filled by hand. -//! -//! The layout is Linux's and the field offsets are load-bearing: a libc -//! reads st_mode and st_size straight out of these bytes. Everything the -//! store does not know is left at zero rather than invented, except the -//! link count and the block size, where zero would be read as a broken -//! file rather than as an unknown one. /// Bytes of a `struct stat` on this architecture. pub const STAT_LEN: usize = 144; diff --git a/userland/capsule_linux/src/linux/file/meta/statfs.rs b/userland/capsule_linux/src/linux/file/meta/statfs.rs new file mode 100644 index 000000000..e638ee21a --- /dev/null +++ b/userland/capsule_linux/src/linux/file/meta/statfs.rs @@ -0,0 +1,57 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! How much room the store has, in the shape `statfs` expects. + +use nonos_app_skeleton::clients::vfs; +use nonos_libc::mk_getpid; + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +/// `struct statfs` on x86_64 is 120 bytes. +const STATFS: usize = 120; + +/// The store addresses bytes, not blocks, so a block size is a fiction either +/// way. +const BSIZE: u64 = 1024; + +pub fn statfs(guest: &Guest, out: u64) -> u64 { + let Ok((_, bytes, max)) = vfs::usage(mk_getpid()) else { + return errno::fail(errno::EIO); + }; + // The vfs reports its ceiling as 32 bits and its usage as 64. + let (used, max) = (bytes, u64::from(max)); + let total = max / BSIZE; + let free = max.saturating_sub(used) / BSIZE; + + let mut buf = [0u8; STATFS]; + put(&mut buf, 0, 0x6E6F6E6F); // f_type, "nono" + put(&mut buf, 8, BSIZE); // f_bsize + put(&mut buf, 16, total); // f_blocks + put(&mut buf, 24, free); // f_bfree + put(&mut buf, 32, free); // f_bavail + put(&mut buf, 56, 255); // f_namelen, the vfs path limit + put(&mut buf, 64, BSIZE); // f_frsize + match guest.write(out, &buf) { + n if n < 0 => errno::fail(errno::EFAULT), + _ => errno::ok(0), + } +} + +fn put(buf: &mut [u8; STATFS], at: usize, v: u64) { + buf[at..at + 8].copy_from_slice(&v.to_le_bytes()); +} diff --git a/userland/capsule_linux/src/linux/file/meta/statx.rs b/userland/capsule_linux/src/linux/file/meta/statx.rs new file mode 100644 index 000000000..e20db264e --- /dev/null +++ b/userland/capsule_linux/src/linux/file/meta/statx.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `statx`, which a current libc reaches for before it tries `stat`. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::super::at::resolve_at; +use super::super::resolve::key; +use super::super::store; + +/// `struct statx` is 256 bytes. +const STATX: usize = 256; + +/// The bits for the fields the store can answer: type, mode, size and +/// mtime. Nothing else is claimed. +const STATX_TYPE: u32 = 0x0001; +const STATX_MODE: u32 = 0x0002; +const STATX_SIZE: u32 = 0x0200; +const STATX_MTIME: u32 = 0x0020; + +const S_IFDIR: u16 = 0o040_000; +const S_IFREG: u16 = 0o100_000; + +pub fn statx(guest: &Guest, dirfd: u64, path: u64, out: u64) -> u64 { + let Some(at) = resolve_at(guest, dirfd, path) else { + return errno::fail(errno::EFAULT); + }; + let Ok((size, is_dir, mtime, readonly)) = store::stat_full(&key(&at)) else { + return errno::fail(errno::ENOENT); + }; + let mode = if is_dir { S_IFDIR } else { S_IFREG } | if readonly { 0o555 } else { 0o755 }; + + let mut buf = [0u8; STATX]; + buf[0..4].copy_from_slice(&(STATX_TYPE | STATX_MODE | STATX_SIZE | STATX_MTIME).to_le_bytes()); + buf[4..8].copy_from_slice(&4096u32.to_le_bytes()); // stx_blksize + buf[28..30].copy_from_slice(&mode.to_le_bytes()); // stx_mode + buf[40..48].copy_from_slice(&size.to_le_bytes()); // stx_size + buf[48..56].copy_from_slice(&size.div_ceil(512).to_le_bytes()); // stx_blocks + buf[96..104].copy_from_slice(&(mtime / 1000).to_le_bytes()); // stx_mtime.sec + match guest.write(out, &buf) { + n if n < 0 => errno::fail(errno::EFAULT), + _ => errno::ok(0), + } +} diff --git a/userland/capsule_linux/src/linux/file/mod.rs b/userland/capsule_linux/src/linux/file/mod.rs index 1e1d33c95..33c21506e 100644 --- a/userland/capsule_linux/src/linux/file/mod.rs +++ b/userland/capsule_linux/src/linux/file/mod.rs @@ -14,37 +14,59 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! The filesystem a guest sees. -//! -//! Every path a guest names is resolved here and reached through the store -//! under this capsule's own identity. The kernel is not involved and holds -//! no filesystem view for a hosted process to inherit. -mod close; +mod at; +pub(super) mod close; +mod cstr; mod dir; mod dirent; mod dirents; -mod file; +mod dirops; +mod epoll; +mod epoll_wait; pub mod flags; +mod fsync; +mod memfd; +mod memfd_map; +mod meta; mod open; mod path; mod pread; -mod query; mod read; +mod regular; +mod rename; mod resolve; +mod root; mod seek; mod slot; -mod stat; -mod statbuf; +mod store; +mod store_name; +mod timerfd; +mod timerfd_read; mod write; pub use close::close; +pub use cstr::read_cstr; pub use dirents::getdents64; +pub use dirops::{mkdirat, rmdir, unlinkat}; +pub use epoll::{epoll_create, epoll_ctl}; +pub use epoll_wait::epoll_wait; +pub use fsync::fsync; +pub use memfd::{ftruncate, is_memfd, memfd_create}; +pub use memfd_map::{mapped_at, set_mapped, staged}; +pub use meta::{ + access, chmod, faccessat, fchmod, fchmodat, fstat, look, newfstatat, readlink, statfs, statx, +}; pub use open::openat; +pub use path::read_path; pub use pread::pread64; -pub use query::{access, getcwd, readlink}; pub use read::read; +pub use rename::rename; +pub use resolve::{key, visible}; pub use seek::lseek; -pub use stat::{fstat, newfstatat}; +pub use slot::{install, MAX_FDS}; +pub use store::{read as store_read, write as store_write}; +pub use timerfd::{timerfd_create, timerfd_settime}; +pub use timerfd_read::read as timerfd_read; pub use write::write; diff --git a/userland/capsule_linux/src/linux/file/open.rs b/userland/capsule_linux/src/linux/file/open.rs index e6c3ded4b..20026d90a 100644 --- a/userland/capsule_linux/src/linux/file/open.rs +++ b/userland/capsule_linux/src/linux/file/open.rs @@ -14,19 +14,15 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! `openat`. Opens run under this capsule's pid, not the guest's: a guest -//! holds no capabilities and the store would refuse it. +//! `openat`. use alloc::vec::Vec; -use nonos_libc::mk_getpid; - use crate::linux::abi::errno; use crate::linux::guest::{Guest, Kind}; -use super::flags::{wants_write, AT_FDCWD, O_CREAT, O_DIRECTORY}; -use super::{dir, file, path, resolve, stat}; +use super::flags::{wants_write, AT_FDCWD, O_CLOEXEC, O_CREAT, O_DIRECTORY}; +use super::{dir, path, regular, resolve, store}; pub fn openat(guest: &mut Guest, dirfd: u64, path_ptr: u64, flags: u64) -> u64 { let Some(name) = path::read_path(guest, path_ptr) else { @@ -36,14 +32,26 @@ pub fn openat(guest: &mut Guest, dirfd: u64, path_ptr: u64, flags: u64) -> u64 { Ok(base) => base, Err(e) => return e, }; - let full = resolve::absolute(&base, &name); - let owner = mk_getpid() as u32; - match stat::look(owner, &full) { - Some((_, true)) => dir::open(guest, owner, full), + let full = resolve::visible(&base, &name); + let got = match store::stat(&resolve::key(&full)).ok() { + Some((_, true)) => dir::open(guest, full), Some((_, false)) if flags & O_DIRECTORY != 0 => errno::fail(errno::ENOTDIR), - Some((size, false)) => file::open(guest, owner, full, size, flags), - None if flags & O_CREAT != 0 && wants_write(flags) => file::create(guest, full), + Some((size, false)) => regular::open(guest, full, size, flags), + None if flags & O_CREAT != 0 && wants_write(flags) => regular::create(guest, full), None => errno::fail(errno::ENOENT), + }; + mark(guest, got, flags & O_CLOEXEC != 0); + got +} + +/// O_CLOEXEC is a property of the descriptor, not of the open, so it is set +/// once the number is known rather than threaded through every one of the +/// paths above. +fn mark(guest: &mut Guest, got: u64, on: bool) { + if let Some(slot) = errno::slot(got).filter(|_| on) { + if let Some(fd) = guest.fds.get_mut(slot) { + fd.cloexec = true; + } } } diff --git a/userland/capsule_linux/src/linux/file/path.rs b/userland/capsule_linux/src/linux/file/path.rs index 716501fea..4fec7a718 100644 --- a/userland/capsule_linux/src/linux/file/path.rs +++ b/userland/capsule_linux/src/linux/file/path.rs @@ -14,34 +14,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! NUL-terminated path out of a guest, a page at a time: a peer copy that -//! crosses into an unmapped page fails whole and loses the mapped part. +//! A path out of a guest, which is a string under the store's ceiling. use alloc::vec::Vec; -use crate::linux::guest::{page_down, Guest, PAGE}; +use crate::linux::guest::Guest; + +use super::cstr::read_cstr; /// The vfs length prefix is one byte. pub const MAX_PATH: usize = 255; pub fn read_path(guest: &Guest, addr: u64) -> Option> { - if addr == 0 { - return None; - } - let mut out: Vec = Vec::new(); - let mut at = addr; - while out.len() <= MAX_PATH { - let page_end = page_down(at) + PAGE; - let room = (MAX_PATH + 1 - out.len()) as u64; - let take = (page_end - at).min(room); - let chunk = guest.read(at, take as usize)?; - if let Some(i) = chunk.iter().position(|b| *b == 0) { - out.extend_from_slice(&chunk[..i]); - return Some(out); - } - out.extend_from_slice(&chunk); - at = page_end; - } - None + read_cstr(guest, addr, MAX_PATH) } diff --git a/userland/capsule_linux/src/linux/file/regular.rs b/userland/capsule_linux/src/linux/file/regular.rs new file mode 100644 index 000000000..3e0f091af --- /dev/null +++ b/userland/capsule_linux/src/linux/file/regular.rs @@ -0,0 +1,53 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Opening a regular file, and creating one that is not there yet. + +use alloc::vec::Vec; + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest}; + +use super::flags::{wants_read, wants_write, O_TRUNC}; +use super::{resolve, slot, store}; + +pub fn open(guest: &mut Guest, path: Vec, size: u64, flags: u64) -> u64 { + // No server handle for write-only or O_TRUNC: nothing will read it. + let truncating = flags & O_TRUNC != 0; + let stream = if wants_read(flags) && !truncating { + match store::open(&resolve::key(&path)) { + Ok(s) => Some(s), + Err(_) => return errno::fail(errno::EACCES), + } + } else { + None + }; + let size = if truncating { 0 } else { size }; + let fd = Fd::file(path, size, stream, wants_write(flags)); + match slot::install(guest, fd) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} + +/// Nothing hits the store until close, so a create-then-die leaves no file. +pub fn create(guest: &mut Guest, path: Vec) -> u64 { + let fd = Fd::file(path, 0, None, true); + match slot::install(guest, fd) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} diff --git a/userland/capsule_linux/src/linux/file/rename.rs b/userland/capsule_linux/src/linux/file/rename.rs new file mode 100644 index 000000000..489c04301 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/rename.rs @@ -0,0 +1,37 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Moving a name. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::at::resolve_at; +use super::resolve::key; +use super::store_name; + +pub fn rename(guest: &Guest, old: u64, new: u64) -> u64 { + let (Some(from), Some(to)) = ( + resolve_at(guest, super::flags::AT_FDCWD, old), + resolve_at(guest, super::flags::AT_FDCWD, new), + ) else { + return errno::fail(errno::EFAULT); + }; + match store_name::rename(&key(&from), &key(&to)) { + Ok(()) => errno::ok(0), + Err(_) => errno::fail(errno::ENOENT), + } +} diff --git a/userland/capsule_linux/src/linux/file/resolve.rs b/userland/capsule_linux/src/linux/file/resolve.rs index 1d9cd249d..f8d2a71c5 100644 --- a/userland/capsule_linux/src/linux/file/resolve.rs +++ b/userland/capsule_linux/src/linux/file/resolve.rs @@ -14,14 +14,20 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! Guest path to store key. The store has no cwd and no dot-dot, so both -//! are resolved here. +//! Guest path to store key. use alloc::vec::Vec; -/// Dot-dot past the root stops at the root, as Linux does. -pub fn absolute(cwd: &[u8], path: &[u8]) -> Vec { +use super::root::Key; + +/// The store key for a path the guest named. +pub fn key(visible: &[u8]) -> Key { + Key::under_root(visible) +} + +/// The absolute path as the guest sees it, which is what `getcwd` reports and +/// what a descriptor remembers. +pub fn visible(cwd: &[u8], path: &[u8]) -> Vec { let mut joined: Vec = Vec::new(); if path.first() != Some(&b'/') { joined.extend_from_slice(cwd); diff --git a/userland/capsule_linux/src/linux/file/root.rs b/userland/capsule_linux/src/linux/file/root.rs new file mode 100644 index 000000000..4155b82e7 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/root.rs @@ -0,0 +1,49 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The subtree the Linux world lives in, and the only name for it. + +use alloc::vec::Vec; + +/// Where the Linux world is kept. Every path a guest sees is relative +/// to this, and it never appears in anything handed back to a guest. +pub const ROOT: &[u8] = b"/linux"; + +/// A path in the store, already confined. Built only from a normalised +/// guest-visible path, by `resolve::key`. +pub struct Key(Vec); + +impl Key { + /// `visible` must be absolute and free of `.` and `..`, which is what + /// `resolve::visible` guarantees and the only thing that calls this. + pub(super) fn under_root(visible: &[u8]) -> Key { + let mut out = Vec::with_capacity(ROOT.len() + visible.len()); + out.extend_from_slice(ROOT); + /* + * The guest's root is the store's `/linux`, not `/linux/`: a trailing + * separator makes every listing prefix wrong by one byte and every + * child look like a sibling of itself. + */ + if visible != b"/" { + out.extend_from_slice(visible); + } + Key(out) + } + + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } +} diff --git a/userland/capsule_linux/src/linux/file/store.rs b/userland/capsule_linux/src/linux/file/store.rs new file mode 100644 index 000000000..9b215fc3c --- /dev/null +++ b/userland/capsule_linux/src/linux/file/store.rs @@ -0,0 +1,51 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Every store operation this personality makes for a guest. + +use alloc::string::String; +use alloc::vec::Vec; + +use nonos_app_skeleton::clients::vfs::{self, VfsStream}; +use nonos_libc::mk_getpid; + +use super::root::Key; + +type Fail = &'static str; + +pub fn read(at: &Key, max: u32) -> Result, Fail> { + vfs::read_file(mk_getpid(), at.as_bytes(), max) +} + +pub fn write(at: &Key, data: &[u8]) -> Result<(), Fail> { + vfs::write_file(mk_getpid(), at.as_bytes(), data) +} + +pub fn stat(at: &Key) -> Result<(u64, bool), Fail> { + vfs::stat(mk_getpid(), at.as_bytes()) +} + +pub fn stat_full(at: &Key) -> Result<(u64, bool, u64, bool), Fail> { + vfs::stat_full(mk_getpid(), at.as_bytes()) +} + +pub fn list(at: &Key) -> Result, Fail> { + vfs::list_paths(mk_getpid(), at.as_bytes()) +} + +pub fn open(at: &Key) -> Result { + VfsStream::open(mk_getpid(), at.as_bytes()) +} diff --git a/userland/capsule_linux/src/linux/file/store_name.rs b/userland/capsule_linux/src/linux/file/store_name.rs new file mode 100644 index 000000000..d2dbf874d --- /dev/null +++ b/userland/capsule_linux/src/linux/file/store_name.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Store operations that change the namespace rather than content. + +use nonos_app_skeleton::clients::vfs; +use nonos_libc::mk_getpid; + +use super::root::Key; + +type Fail = &'static str; + +pub fn mkdir(at: &Key) -> Result<(), Fail> { + vfs::mkdir(mk_getpid(), at.as_bytes()) +} + +pub fn rmdir(at: &Key) -> Result<(), Fail> { + vfs::rmdir(mk_getpid(), at.as_bytes(), false) +} + +pub fn unlink(at: &Key) -> Result<(), Fail> { + vfs::unlink(mk_getpid(), at.as_bytes()) +} + +pub fn rename(from: &Key, to: &Key) -> Result<(), Fail> { + vfs::rename(mk_getpid(), from.as_bytes(), to.as_bytes()) +} + +pub fn chmod(at: &Key, mode: u16) -> Result<(), Fail> { + vfs::chmod(mk_getpid(), at.as_bytes(), mode) +} diff --git a/userland/capsule_linux/src/linux/file/timerfd.rs b/userland/capsule_linux/src/linux/file/timerfd.rs new file mode 100644 index 000000000..d123a9dc7 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/timerfd.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `timerfd_create`, `timerfd_settime`, and reading one. + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest, Kind}; + +use super::slot::install; + +/// `struct itimerspec`: interval seconds and nanoseconds, then the +/// value's seconds and nanoseconds. Four eight byte fields. +const ITIMERSPEC_LEN: usize = 32; + +pub fn timerfd_create(guest: &mut Guest) -> u64 { + match install(guest, Fd::empty(Kind::Timer)) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} + +pub fn timerfd_settime(guest: &mut Guest, fd: u64, spec: u64) -> u64 { + let Some(raw) = guest.read(spec, ITIMERSPEC_LEN) else { + return errno::fail(errno::EFAULT); + }; + let secs = u64::from_le_bytes(raw[16..24].try_into().unwrap_or([0; 8])); + let nanos = u64::from_le_bytes(raw[24..32].try_into().unwrap_or([0; 8])); + let delay = secs * 1000 + nanos / 1_000_000; + let now = nonos_libc::mk_uptime_ms().max(0) as u64; + match guest.fds.get_mut(fd as usize).filter(|f| f.kind == Kind::Timer) { + Some(entry) => { + entry.expiry = if delay == 0 { 0 } else { now + delay }; + errno::ok(0) + } + None => errno::fail(errno::EBADF), + } +} diff --git a/userland/capsule_linux/src/linux/file/timerfd_read.rs b/userland/capsule_linux/src/linux/file/timerfd_read.rs new file mode 100644 index 000000000..e267ec1b6 --- /dev/null +++ b/userland/capsule_linux/src/linux/file/timerfd_read.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Reading a timer, and whether it has fired. + +use crate::linux::abi::errno; +use crate::linux::guest::{Guest, Kind}; + +/// A read reports how many times it has fired, which is one or none. +pub fn read(guest: &mut Guest, fd: u64, buf: u64) -> u64 { + let now = nonos_libc::mk_uptime_ms().max(0) as u64; + let fired = match guest.fds.get(fd as usize) { + Some(e) if e.kind == Kind::Timer => e.expiry != 0 && now >= e.expiry, + _ => return errno::fail(errno::EBADF), + }; + if !fired { + return errno::fail(errno::EAGAIN); + } + if let Some(entry) = guest.fds.get_mut(fd as usize) { + entry.expiry = 0; + } + if guest.write(buf, &1u64.to_le_bytes()) < 8 { + return errno::fail(errno::EFAULT); + } + errno::ok(8) +} diff --git a/userland/capsule_linux/src/linux/guest/fd.rs b/userland/capsule_linux/src/linux/guest/fd.rs index d81cc2cd3..913bd2f71 100644 --- a/userland/capsule_linux/src/linux/guest/fd.rs +++ b/userland/capsule_linux/src/linux/guest/fd.rs @@ -14,10 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! A guest's file descriptors. A descriptor is a number the guest chose to -//! believe in; what it points at is this personality's business, and is -//! never a NONOS handle the guest could name on its own. +//! A guest's file descriptors. use alloc::string::String; use alloc::vec; @@ -25,21 +22,7 @@ use alloc::vec::Vec; use nonos_app_skeleton::clients::vfs::VfsStream; -#[derive(PartialEq, Eq)] -pub enum Kind { - /// Closed, and reusable. - Free, - /// The guest's own console, carried to the host's output. - Stdin, - Stdout, - Stderr, - /// A file in the store, held open on the server. - File, - /// A directory, listed once when it was opened. - Dir, - /// A socket net.sockets issued to this capsule. - Socket, -} +pub use super::fd_kind::Kind; pub struct Fd { pub kind: Kind, @@ -59,6 +42,17 @@ pub struct Fd { pub writable: bool, /// The net.sockets handle behind a socket descriptor. pub handle: u32, + /// An epoll interest list: descriptor, events, and the token the + /// program gets back, which is its own and never interpreted. + pub watch: Vec<(u64, u32, u64)>, + /// When a timer next fires, in milliseconds of uptime. + pub expiry: u64, + /// Datagrams waiting to be read, oldest first, each with the address it + /// should appear to come from. + pub replies: Vec<(Vec, [u8; 6])>, + /// Closed by exec rather than carried into the new program. A shell + /// leaves its own descriptors set this way before it runs a command. + pub cloexec: bool, } impl Fd { diff --git a/userland/capsule_linux/src/linux/guest/fd_dup.rs b/userland/capsule_linux/src/linux/guest/fd_dup.rs new file mode 100644 index 000000000..c55a42d80 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/fd_dup.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! A pipe end, and a second descriptor onto the same thing. + +use super::fd::Fd; +use super::fd_kind::Kind; + +impl Fd { + pub fn pipe(buffer: u32, writable: bool) -> Fd { + let mut fd = Fd::empty(Kind::Pipe); + fd.handle = buffer; + fd.writable = writable; + fd + } + + /// A second descriptor onto the same thing, which is what dup is. + pub fn clone_of(from: &Fd) -> Fd { + let mut fd = Fd::empty(from.kind); + fd.handle = from.handle; + fd.writable = from.writable; + fd.size = from.size; + fd.offset = from.offset; + fd.path = from.path.clone(); + fd + } +} diff --git a/userland/capsule_linux/src/linux/guest/fd_empty.rs b/userland/capsule_linux/src/linux/guest/fd_empty.rs new file mode 100644 index 000000000..4ecd26927 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/fd_empty.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A descriptor with every field off, which every maker starts from. + +use alloc::vec::Vec; + +use super::fd::Fd; +use super::fd_kind::Kind; + +impl Fd { + /// Everything off. A descriptor always leaves here before a maker + /// sets the fields its kind actually uses. + pub fn empty(kind: Kind) -> Fd { + Fd { + kind, + offset: 0, + size: 0, + path: Vec::new(), + stream: None, + pending: Vec::new(), + names: Vec::new(), + writable: false, + handle: 0, + watch: Vec::new(), + expiry: 0, + replies: Vec::new(), + cloexec: false, + } + } +} diff --git a/userland/capsule_linux/src/linux/guest/fd_kind.rs b/userland/capsule_linux/src/linux/guest/fd_kind.rs new file mode 100644 index 000000000..3ca6048af --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/fd_kind.rs @@ -0,0 +1,45 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! What a descriptor points at. + +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum Kind { + /// Closed, and reusable. + Free, + /// The guest's own console, carried to the host's output. + Stdin, + Stdout, + Stderr, + /// A file in the store, held open on the server. + File, + /// A directory, listed once when it was opened. + Dir, + /// A socket net.sockets issued to this capsule. + Socket, + /// A Unix socket, both ends inside this capsule. + Unix, + /// Anonymous memory with a descriptor, for passing over a socket. + Memfd, + /// An interest list a program waits on. + Epoll, + /// A timer a program reads or waits on. + Timer, + /// One end of a pipe this capsule holds. + Pipe, + /// A datagram socket a program opened to talk to a nameserver. + Resolver, +} diff --git a/userland/capsule_linux/src/linux/guest/fd_make.rs b/userland/capsule_linux/src/linux/guest/fd_make.rs index d3a2984be..db6fd6c16 100644 --- a/userland/capsule_linux/src/linux/guest/fd_make.rs +++ b/userland/capsule_linux/src/linux/guest/fd_make.rs @@ -14,10 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! The three ways a descriptor comes into being. Kept apart from the type -//! so the fields a caller must fill are a short list in one place, and a -//! field added later cannot be forgotten at one of the call sites. +//! The three ways a descriptor comes into being. use alloc::string::String; use alloc::vec::Vec; @@ -40,6 +37,18 @@ impl Fd { fd } + pub fn memfd() -> Fd { + Fd::empty(Kind::Memfd) + } + + pub fn unix() -> Fd { + Fd::empty(Kind::Unix) + } + + pub fn resolver() -> Fd { + Fd::empty(Kind::Resolver) + } + pub fn socket(handle: u32) -> Fd { let mut fd = Fd::empty(Kind::Socket); fd.handle = handle; @@ -52,20 +61,4 @@ impl Fd { fd.names = names; fd } - - /// Everything off. A descriptor always leaves here before a maker - /// sets the fields its kind actually uses. - pub fn empty(kind: Kind) -> Fd { - Fd { - kind, - offset: 0, - size: 0, - path: Vec::new(), - stream: None, - pending: Vec::new(), - names: Vec::new(), - writable: false, - handle: 0, - } - } } diff --git a/userland/capsule_linux/src/linux/guest/handle.rs b/userland/capsule_linux/src/linux/guest/handle.rs index 9999dbd63..62bc60b46 100644 --- a/userland/capsule_linux/src/linux/guest/handle.rs +++ b/userland/capsule_linux/src/linux/guest/handle.rs @@ -20,12 +20,6 @@ use alloc::vec::Vec; use super::fd::Fd; -/// Where a guest's heap and its anonymous mappings start. Both are chosen -/// here rather than by the kernel, because a Linux program expects a Linux -/// address space and this is the only place that knows what that means. -pub const BRK_BASE: u64 = 0x0000_1000_0000; -pub const MMAP_BASE: u64 = 0x0000_2000_0000; - pub struct Guest { pub pid: u32, /// The program break, as `brk` moves it. @@ -33,34 +27,40 @@ pub struct Guest { /// The next address an anonymous mapping gets, growing upward. pub mmap_next: u64, pub fds: Vec, + /// Every span this capsule has backed for the guest, in the order + /// it did so. Fork copies exactly this list. + pub regions: Vec, + /// Pipe buffers, named by index from the descriptors at each end. + pub pipes: Vec>, + /// Children this guest has forked, for wait to report on. + pub children: Vec, /// Tids of this guest's threads, not counting itself. pub threads: Vec, /// Threads parked in a futex wait, with the word they wait on. pub waits: Vec<(u32, u64)>, + /// The display connection, when the guest has opened one. + pub display: crate::linux::unix::Conn, + /// The Wayland objects that connection has created. + pub objects: crate::linux::wayland::Objects, + /// What those objects describe, and the surface it reaches. + pub scene: crate::linux::wayland::Scene, /// Which signals the guest installed a handler for. Nothing is ever /// raised against them; see `call::signal`. pub handlers: [bool; 64], /// What a relative path is relative to. pub cwd: Vec, + /// Names this guest has resolved, each with the address it was given. + pub automap: Vec<(Vec, [u8; 4])>, /// Where the guest last asked its thread pointer to be set. pub fs_base: u64, /// Set once the guest asks to end, so the loop can drop it. pub exited: Option, -} - -impl Guest { - pub fn new(pid: u32) -> Self { - Guest { - pid, - brk: BRK_BASE, - mmap_next: MMAP_BASE, - fds: Fd::standard(), - threads: Vec::new(), - waits: Vec::new(), - handlers: [false; 64], - cwd: alloc::vec![b'/'], - fs_base: 0, - exited: None, - } - } + /// The personality, which hosts every guest it spawns. + pub parent: u32, + /// Process group and session. + pub pgid: u32, + pub sid: u32, + /// Remembered, not enforced: the store does not apply it when it creates a + /// file. + pub umask: u16, } diff --git a/userland/capsule_linux/src/linux/guest/handle_new.rs b/userland/capsule_linux/src/linux/guest/handle_new.rs new file mode 100644 index 000000000..91602fc32 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/handle_new.rs @@ -0,0 +1,55 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A fresh guest, before anything has been put in it. + +use alloc::vec::Vec; + +use super::fd::Fd; +use super::handle::Guest; +use super::layout::{BRK_BASE, MMAP_BASE}; + +impl Guest { + pub fn new(pid: u32) -> Self { + Guest { + pid, + brk: BRK_BASE, + mmap_next: MMAP_BASE, + fds: Fd::standard(), + regions: Vec::new(), + pipes: Vec::new(), + children: Vec::new(), + threads: Vec::new(), + waits: Vec::new(), + handlers: [false; 64], + display: Default::default(), + objects: Default::default(), + scene: Default::default(), + cwd: alloc::vec![b'/'], + automap: Vec::new(), + fs_base: 0, + exited: None, + /* + * The personality hosts it, and a fresh guest leads its own group + * and session until something says otherwise. + */ + parent: nonos_libc::mk_getpid(), + pgid: pid, + sid: pid, + umask: crate::linux::call::DEFAULT_UMASK, + } + } +} diff --git a/userland/capsule_linux/src/linux/guest/layout.rs b/userland/capsule_linux/src/linux/guest/layout.rs new file mode 100644 index 000000000..20a536f5e --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/layout.rs @@ -0,0 +1,42 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Where things sit in a guest's address space. + +/// The heap, growing up from here as `brk` moves. +pub const BRK_BASE: u64 = 0x0000_1000_0000; + +/// Anonymous and file mappings, growing up from here. +pub const MMAP_BASE: u64 = 0x0000_2000_0000; + +/// Where the loader biases a position-independent executable. +pub const EXEC_BASE: u64 = 0x0000_4000_0000; + +/// Where its interpreter goes, far enough above the executable that +/// neither can grow into the other. +pub const INTERP_BASE: u64 = 0x0000_5000_0000; + +/// The stack top a guest wakes on, above everything it maps for itself. +pub const STACK_TOP: u64 = 0x0000_7FFF_F000; + +/// The stack a guest gets. +pub const STACK_SIZE: u64 = 1 << 20; + +/// The break may not reach the mapping area. +pub const BRK_LIMIT: u64 = MMAP_BASE; + +/// A mapping may not reach the images above it. +pub const MMAP_LIMIT: u64 = EXEC_BASE; diff --git a/userland/capsule_linux/src/linux/guest/mem.rs b/userland/capsule_linux/src/linux/guest/mem.rs index 9b9d48ee8..d7cf6a66c 100644 --- a/userland/capsule_linux/src/linux/guest/mem.rs +++ b/userland/capsule_linux/src/linux/guest/mem.rs @@ -14,59 +14,30 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! Reading and writing a guest's memory, and giving it more. -//! -//! Every one of these is a peer call the kernel refuses unless this -//! process created the guest, so a personality bug cannot reach a process -//! it does not own. - -use alloc::vec; -use alloc::vec::Vec; - -use nonos_libc::peer::{mk_peer_map, mk_peer_read, mk_peer_write, PEER_PROT_EXEC, PEER_PROT_WRITE}; - -use super::handle::Guest; +//! A guest's pages: giving it more, and reaching into the ones it has. pub const PAGE: u64 = 4096; +/// The kernel's ceiling on one peer call. Keep in sync with MAX_SPAN in +/// src/process/foreign/peer_guard.rs. +pub const MAX_SPAN: u64 = 1 << 20; + pub fn page_down(addr: u64) -> u64 { addr & !(PAGE - 1) } +/// Rounded up, saturating. pub fn page_up(addr: u64) -> u64 { - (addr + PAGE - 1) & !(PAGE - 1) + addr.saturating_add(PAGE - 1) & !(PAGE - 1) } -impl Guest { - /* - * Pages covering `[addr, addr + len)`. Write and execute are separate - * because the kernel refuses a page that is both, and a loader that - * asked for both would be refused on the first code segment. Bytes - * still reach a read-only page: a peer copy goes through the guest's - * frames and not through its mapping. - */ - pub fn map(&self, addr: u64, len: u64, write: bool, exec: bool) -> i64 { - let start = page_down(addr); - let span = page_up(addr + len) - start; - let mut prot = 0; - if write { - prot |= PEER_PROT_WRITE; - } - if exec { - prot |= PEER_PROT_EXEC; - } - mk_peer_map(self.pid, start, span, prot) - } - - pub fn write(&self, addr: u64, bytes: &[u8]) -> i64 { - mk_peer_write(self.pid, addr, bytes) - } - - pub fn read(&self, addr: u64, len: usize) -> Option> { - let mut out = vec![0u8; len]; - if mk_peer_read(self.pid, addr, &mut out) < 0 { - return None; - } - Some(out) +/// The page-aligned span covering `[addr, addr + len)`, or `None` when that +/// runs past `limit`. +pub fn span_within(addr: u64, len: u64, limit: u64) -> Option<(u64, u64)> { + let start = page_down(addr); + let end = page_up(addr.checked_add(len)?); + if end <= start || end > limit { + return None; } + Some((start, end - start)) } diff --git a/userland/capsule_linux/src/linux/guest/mem_copy.rs b/userland/capsule_linux/src/linux/guest/mem_copy.rs new file mode 100644 index 000000000..8ebe35ebb --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/mem_copy.rs @@ -0,0 +1,55 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Bytes in and out of a guest, a megabyte at a time. + +use alloc::vec; +use alloc::vec::Vec; + +use nonos_libc::peer::{mk_peer_read, mk_peer_write}; + +use super::handle::Guest; +use super::mem::MAX_SPAN; + +impl Guest { + /// Bytes written, or the first failure. + pub fn write(&self, addr: u64, bytes: &[u8]) -> i64 { + let mut done = 0usize; + while done < bytes.len() { + let take = (bytes.len() - done).min(MAX_SPAN as usize); + let rc = mk_peer_write(self.pid, addr + done as u64, &bytes[done..done + take]); + if rc < 0 { + return rc; + } + done += take; + } + bytes.len() as i64 + } + + pub fn read(&self, addr: u64, len: usize) -> Option> { + let mut out = vec![0u8; len]; + let mut done = 0usize; + while done < len { + let take = (len - done).min(MAX_SPAN as usize); + if mk_peer_read(self.pid, addr + done as u64, &mut out[done..done + take]) < 0 { + return None; + } + done += take; + } + Some(out) + } +} diff --git a/userland/capsule_linux/src/linux/guest/mem_map.rs b/userland/capsule_linux/src/linux/guest/mem_map.rs new file mode 100644 index 000000000..a615617e0 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/mem_map.rs @@ -0,0 +1,56 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Backing a span of a guest with pages. + +use nonos_libc::peer::{mk_peer_map, PEER_PROT_EXEC, PEER_PROT_WRITE}; + +use super::handle::Guest; +use super::layout::STACK_TOP; +use super::mem::{span_within, MAX_SPAN}; +use super::region::Region; + +impl Guest { + /// Pages covering `[addr, addr + len)`. + pub fn map(&mut self, addr: u64, len: u64, write: bool, exec: bool) -> i64 { + // Bounded by the top of the guest's area, which is the stack. + let Some((start, span)) = span_within(addr, len, STACK_TOP) else { + return -1; + }; + let mut prot = 0; + if write { + prot |= PEER_PROT_WRITE; + } + if exec { + prot |= PEER_PROT_EXEC; + } + let mut done = 0; + while done < span { + let take = (span - done).min(MAX_SPAN); + let rc = mk_peer_map(self.pid, start + done, take, prot); + if rc < 0 { + return rc; + } + done += take; + } + /* + * Remembered because fork copies a guest by walking what its + * supervisor gave it. + */ + self.regions.push(Region { at: start, len: span, write, exec }); + 0 + } +} diff --git a/userland/capsule_linux/src/linux/guest/mem_unmap.rs b/userland/capsule_linux/src/linux/guest/mem_unmap.rs new file mode 100644 index 000000000..320220351 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/mem_unmap.rs @@ -0,0 +1,44 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Giving a guest's pages back. + +use nonos_libc::peer::mk_peer_unmap; + +use super::handle::Guest; +use super::layout::STACK_TOP; +use super::mem::{span_within, MAX_SPAN}; +use super::region_cut::cut; + +impl Guest { + /// Return `[addr, addr + len)` to the kernel. + pub fn unmap(&mut self, addr: u64, len: u64) -> i64 { + let Some((start, span)) = span_within(addr, len, STACK_TOP) else { + return -1; + }; + let mut done = 0; + while done < span { + let take = (span - done).min(MAX_SPAN); + let rc = mk_peer_unmap(self.pid, start + done, take); + if rc < 0 { + return rc; + } + done += take; + } + self.regions = cut(&self.regions, start, span); + 0 + } +} diff --git a/userland/capsule_linux/src/linux/guest/mod.rs b/userland/capsule_linux/src/linux/guest/mod.rs index 70985fbb5..19f20d91c 100644 --- a/userland/capsule_linux/src/linux/guest/mod.rs +++ b/userland/capsule_linux/src/linux/guest/mod.rs @@ -18,11 +18,28 @@ //! reaches into it. mod fd; +mod fd_dup; +mod fd_empty; +mod fd_kind; mod fd_make; mod handle; +mod handle_new; +mod layout; mod mem; +mod mem_copy; +mod mem_map; +mod mem_unmap; +mod region; +mod region_cut; +mod region_find; mod threads; -pub use fd::{Fd, Kind}; -pub use handle::{Guest, BRK_BASE}; -pub use mem::{page_down, page_up, PAGE}; +pub use fd::Fd; +pub use fd_kind::Kind; +pub use handle::Guest; +pub use layout::{ + BRK_BASE, BRK_LIMIT, EXEC_BASE, INTERP_BASE, MMAP_BASE, MMAP_LIMIT, STACK_SIZE, + STACK_TOP, +}; +pub use mem::{page_down, page_up, span_within, MAX_SPAN, PAGE}; +pub use region::Region; diff --git a/userland/capsule_linux/src/linux/guest/region.rs b/userland/capsule_linux/src/linux/guest/region.rs new file mode 100644 index 000000000..67ff889c3 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/region.rs @@ -0,0 +1,25 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! One span of a guest's address space, as this capsule laid it down. + +#[derive(Clone, Copy)] +pub struct Region { + pub at: u64, + pub len: u64, + pub write: bool, + pub exec: bool, +} diff --git a/userland/capsule_linux/src/linux/guest/region_cut.rs b/userland/capsule_linux/src/linux/guest/region_cut.rs new file mode 100644 index 000000000..81e0a37b6 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/region_cut.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Taking a span out of the list of what a guest holds. + +use alloc::vec::Vec; + +use super::region::Region; + +/// `regions` with `[at, at + len)` removed from every region it meets. +pub fn cut(regions: &[Region], at: u64, len: u64) -> Vec { + let end = at.saturating_add(len); + let mut out: Vec = Vec::with_capacity(regions.len()); + for r in regions { + let r_end = r.at.saturating_add(r.len); + if end <= r.at || at >= r_end { + out.push(*r); + continue; + } + if at > r.at { + out.push(Region { at: r.at, len: at - r.at, ..*r }); + } + if end < r_end { + out.push(Region { at: end, len: r_end - end, ..*r }); + } + } + out +} diff --git a/userland/capsule_linux/src/linux/guest/region_find.rs b/userland/capsule_linux/src/linux/guest/region_find.rs new file mode 100644 index 000000000..aabfe4cd0 --- /dev/null +++ b/userland/capsule_linux/src/linux/guest/region_find.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! How much a guest actually holds at an address. + +use super::handle::Guest; + +impl Guest { + /// Bytes mapped contiguously from `addr`, zero when nothing is. + pub fn mapped_from(&self, addr: u64) -> u64 { + let mut reach = addr; + loop { + let Some(r) = self.regions.iter().find(|r| r.at <= reach && reach < r.at + r.len) + else { + break; + }; + /* + * Walked rather than answered from the one region, because a guest + * that maps twice at adjoining addresses holds one run of pages + * and the list remembers two. + */ + reach = r.at + r.len; + } + reach - addr + } +} diff --git a/userland/capsule_linux/src/linux/image/elf_phdr.rs b/userland/capsule_linux/src/linux/image/elf_phdr.rs index 2118b542c..9a84263e6 100644 --- a/userland/capsule_linux/src/linux/image/elf_phdr.rs +++ b/userland/capsule_linux/src/linux/image/elf_phdr.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Walking the program header table of a parsed image. use super::elf::Elf; @@ -22,8 +21,11 @@ use super::phdr::Phdr; use super::read::{u32v, u64v}; impl Elf<'_> { + /// The header at `index`, or nothing when the table it is in does not fit + /// an address. pub fn phdr(&self, index: u16) -> Option { - let at = (self.phoff + index as u64 * self.phentsize as u64) as usize; + let step = (index as u64).checked_mul(self.phentsize as u64)?; + let at = usize::try_from(self.phoff.checked_add(step)?).ok()?; Some(Phdr { kind: u32v(self.bytes, at)?, flags: u32v(self.bytes, at + 4)?, @@ -38,20 +40,19 @@ impl Elf<'_> { self.phnum } - /// The address the program headers land on once the image is in - /// place, which a dynamic linker needs and finds nowhere else. It is - /// the load segment that happens to contain them; an image whose - /// headers are in no segment reports nothing rather than an address - /// the guest cannot read. + /// The address the program headers land on once the image is in place, + /// which a dynamic linker needs and finds nowhere else. pub fn phdr_addr(&self, bias: u64) -> Option { for i in 0..self.phnum { let ph = self.phdr(i)?; if ph.kind != super::elf::PT_LOAD { continue; } - if self.phoff >= ph.offset && self.phoff < ph.offset + ph.filesz { - return Some(bias + ph.vaddr + (self.phoff - ph.offset)); + let end = ph.offset.checked_add(ph.filesz)?; + if self.phoff < ph.offset || self.phoff >= end { + continue; } + return ph.at(bias)?.checked_add(self.phoff - ph.offset); } None } diff --git a/userland/capsule_linux/src/linux/image/interp.rs b/userland/capsule_linux/src/linux/image/interp.rs index 5b1e8f970..56567ae9b 100644 --- a/userland/capsule_linux/src/linux/image/interp.rs +++ b/userland/capsule_linux/src/linux/image/interp.rs @@ -14,57 +14,30 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Bringing up a program and, when it asks for one, its interpreter. -//! -//! A dynamically linked executable does not start at its own entry: the -//! kernel of a real Linux system loads the interpreter named in -//! `PT_INTERP` beside it and starts there instead, and the interpreter -//! then maps the libraries and jumps to the program. This does the same, -//! with the store standing in for the filesystem. - -use alloc::vec::Vec; - -use nonos_app_skeleton::clients::vfs::read_file; -use nonos_libc::mk_getpid; use super::elf::{Elf, ET_DYN}; use super::load::load_at; use super::loaded::{LoadError, Loaded}; -/// Where a position independent executable goes, and where its -/// interpreter goes. Far apart so neither can grow into the other, and -/// both clear of the heap and the mapping area the guest gets. -const EXEC_BASE: u64 = 0x0000_4000_0000; -const INTERP_BASE: u64 = 0x0000_5000_0000; - -/// The largest image that will be read out of the store. -const MAX_IMAGE: u32 = 64 << 20; +pub use crate::linux::guest::{EXEC_BASE, INTERP_BASE}; /// Load `bytes` as the program, and its interpreter if it names one. -/// Returns the program's own record and the address to start at, which is -/// the interpreter's entry whenever there is an interpreter. pub fn program( - guest: &crate::linux::guest::Guest, + guest: &mut crate::linux::guest::Guest, bytes: &[u8], ) -> Result<(Loaded, u64, u64), LoadError> { /* - * A shared object is position independent and has to be told where - * it went; an executable carries absolute addresses and must not be - * moved. The file says which it is, so nothing upstream has to know - * or can get it wrong. + * A shared object is position independent and has to be told where it + * went; an executable carries absolute addresses and must not be moved. */ let kind = Elf::parse(bytes).ok_or(LoadError::NotElf)?.kind; let bias = if kind == ET_DYN { EXEC_BASE } else { 0 }; let image = load_at(guest, bytes, bias)?; + let entry = image.entry; let Some(path) = image.interp.clone() else { - return Ok((image, image.entry, 0)); + return Ok((image, entry, 0)); }; - let raw = fetch(&path).ok_or(LoadError::Interp)?; - let ld = load_at(guest, &raw, INTERP_BASE).map_err(|_| LoadError::Interp)?; - Ok((image, ld.entry, INTERP_BASE)) -} - -fn fetch(path: &[u8]) -> Option> { - read_file(mk_getpid() as u32, path, MAX_IMAGE).ok() + let entry = super::interp_ld::place(guest, &path)?; + Ok((image, entry, INTERP_BASE)) } diff --git a/userland/capsule_linux/src/linux/image/interp_ld.rs b/userland/capsule_linux/src/linux/image/interp_ld.rs new file mode 100644 index 000000000..2c30e7fc3 --- /dev/null +++ b/userland/capsule_linux/src/linux/image/interp_ld.rs @@ -0,0 +1,40 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Reading, proving and placing a program's interpreter. + +use alloc::vec::Vec; + +use crate::linux::file::{key, store_read, visible}; +use crate::linux::guest::{Guest, INTERP_BASE}; + +use super::load::load_at; +use super::loaded::LoadError; + +/// The largest image that will be read out of the store. +const MAX_IMAGE: u32 = 64 << 20; + +/// Where the interpreter's entry point ended up. +pub(super) fn place(guest: &mut Guest, path: &[u8]) -> Result { + // Already confined: the path came out of the guest's own image. + let at = visible(b"/", path); + let raw: Vec = store_read(&key(&at), MAX_IMAGE).map_err(|_| LoadError::Interp)?; + if crate::linux::attest::verify(&at, &raw).is_err() { + return Err(LoadError::Unproven); + } + let ld = load_at(guest, &raw, INTERP_BASE).map_err(|_| LoadError::Interp)?; + Ok(ld.entry) +} diff --git a/userland/capsule_linux/src/linux/image/load.rs b/userland/capsule_linux/src/linux/image/load.rs index 1b9430bf3..86c8a00e0 100644 --- a/userland/capsule_linux/src/linux/image/load.rs +++ b/userland/capsule_linux/src/linux/image/load.rs @@ -14,23 +14,15 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Laying an image's segments into a guest's address space. -//! -//! The kernel maps pages on request and copies bytes on request; which -//! pages and which bytes is the personality's business, because the -//! format is the personality's knowledge. -use super::elf::{Elf, ET_DYN, PF_W, PF_X, PT_INTERP, PT_LOAD}; +use super::elf::{Elf, ET_DYN, PT_INTERP, PT_LOAD}; use super::loaded::{LoadError, Loaded}; use super::segment::{name, segment}; use crate::linux::guest::Guest; -/// Map every `PT_LOAD` at `bias` and report what was learned. A shared -/// object is expected to be biased and an executable is not, so a caller -/// passing a bias for an `ET_EXEC` image is refused rather than moving an -/// image that carries absolute addresses. -pub fn load_at(guest: &Guest, bytes: &[u8], bias: u64) -> Result { +/// Map every `PT_LOAD` at `bias` and report what was learned. +pub fn load_at(guest: &mut Guest, bytes: &[u8], bias: u64) -> Result { let elf = Elf::parse(bytes).ok_or(LoadError::NotElf)?; if bias != 0 && elf.kind != ET_DYN { return Err(LoadError::NotElf); @@ -45,11 +37,14 @@ pub fn load_at(guest: &Guest, bytes: &[u8], bias: u64) -> Result. - //! What the loader learned about an image, which is everything the //! auxiliary vector has to carry and the interpreter has to be told. @@ -30,16 +29,27 @@ pub struct Loaded { pub phnum: u64, /// The interpreter this image asked for, if it asked for one. pub interp: Option>, - /// The bias every address in the image was shifted by. - pub bias: u64, } pub enum LoadError { NotElf, Map, Copy, - /// An interpreter was named and could not be read or parsed. The - /// program cannot start without it, and starting it anyway would - /// fault on the first unresolved call. + /// An interpreter was named and could not be read or parsed. Interp, + /// An interpreter was read and nothing vouches for it. + Unproven, +} + +impl LoadError { + /// What to tell the console. + pub fn why(&self) -> &'static [u8] { + match self { + LoadError::NotElf => b"[LINUX] not an elf\n", + LoadError::Map => b"[LINUX] image would not map\n", + LoadError::Copy => b"[LINUX] image would not copy\n", + LoadError::Interp => b"[LINUX] interpreter missing or broken\n", + LoadError::Unproven => b"[LINUX] refused: nothing vouches for the interpreter\n", + } + } } diff --git a/userland/capsule_linux/src/linux/image/mod.rs b/userland/capsule_linux/src/linux/image/mod.rs index 8359f06a9..8a09fbf87 100644 --- a/userland/capsule_linux/src/linux/image/mod.rs +++ b/userland/capsule_linux/src/linux/image/mod.rs @@ -21,14 +21,16 @@ mod auxv; mod elf; mod elf_phdr; mod interp; +mod interp_ld; mod load; mod loaded; mod phdr; mod read; mod segment; mod stack; +mod stack_guard; +mod stack_strings; +mod stack_words; -pub use interp::program; -pub use load::load_at; -pub use loaded::{LoadError, Loaded}; +pub use interp::{program, EXEC_BASE}; pub use stack::build; diff --git a/userland/capsule_linux/src/linux/image/phdr.rs b/userland/capsule_linux/src/linux/image/phdr.rs index 901153a28..be786881b 100644 --- a/userland/capsule_linux/src/linux/image/phdr.rs +++ b/userland/capsule_linux/src/linux/image/phdr.rs @@ -14,8 +14,10 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -//! One program header: what to map, from where, and how much of it is in -//! the file rather than in the zeroes after it. +//! One program header: what to map, from where, and how much of it is in the +//! file rather than in the zeroes after it. + +use core::ops::Range; pub struct Phdr { pub kind: u32, @@ -25,3 +27,17 @@ pub struct Phdr { pub filesz: u64, pub memsz: u64, } + +impl Phdr { + /// The bytes of the image this header names. + pub(super) fn file_range(&self) -> Option> { + let from = usize::try_from(self.offset).ok()?; + let len = usize::try_from(self.filesz).ok()?; + Some(from..from.checked_add(len)?) + } + + /// Where this segment lands once the image is biased. + pub(super) fn at(&self, bias: u64) -> Option { + self.vaddr.checked_add(bias) + } +} diff --git a/userland/capsule_linux/src/linux/image/segment.rs b/userland/capsule_linux/src/linux/image/segment.rs index 78e2cdf67..76825b60f 100644 --- a/userland/capsule_linux/src/linux/image/segment.rs +++ b/userland/capsule_linux/src/linux/image/segment.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! One load segment into a guest, and the interpreter a header names. use alloc::vec::Vec; @@ -27,27 +26,26 @@ use crate::linux::guest::Guest; /// The interpreter path, without its terminator. A `PT_INTERP` that runs /// off the end of the file names nothing. pub(super) fn name(bytes: &[u8], ph: &Phdr) -> Option> { - let from = ph.offset as usize; - let to = from + ph.filesz as usize; - let raw = bytes.get(from..to)?; + let raw = bytes.get(ph.file_range()?)?; let end = raw.iter().position(|b| *b == 0).unwrap_or(raw.len()); Some(raw[..end].to_vec()) } -/// One segment: pages first, then the file bytes into them. The gap -/// between `filesz` and `memsz` is left as the zeroes the fresh frames -/// already hold, which is what a `.bss` is. -pub(super) fn segment(guest: &Guest, bytes: &[u8], ph: &Phdr, bias: u64) -> Result<(), LoadError> { - let at = ph.vaddr + bias; +/// One segment: pages first, then the file bytes into them. +pub(super) fn segment( + guest: &mut Guest, + bytes: &[u8], + ph: &Phdr, + bias: u64, +) -> Result<(), LoadError> { + let at = ph.at(bias).ok_or(LoadError::NotElf)?; if guest.map(at, ph.memsz, ph.flags & PF_W != 0, ph.flags & PF_X != 0) < 0 { return Err(LoadError::Map); } if ph.filesz == 0 { return Ok(()); } - let from = ph.offset as usize; - let to = from + ph.filesz as usize; - let body = bytes.get(from..to).ok_or(LoadError::NotElf)?; + let body = bytes.get(ph.file_range().ok_or(LoadError::NotElf)?).ok_or(LoadError::NotElf)?; if guest.write(at, body) < 0 { return Err(LoadError::Copy); } diff --git a/userland/capsule_linux/src/linux/image/stack.rs b/userland/capsule_linux/src/linux/image/stack.rs index 63631b1b2..ddeac8e20 100644 --- a/userland/capsule_linux/src/linux/image/stack.rs +++ b/userland/capsule_linux/src/linux/image/stack.rs @@ -17,57 +17,46 @@ //! The stack a Linux program wakes up on: argc, then argv, then the //! environment, then the auxiliary vector, each list ended by a null. -//! A C runtime reads all four before `main` and crashes without them. -//! The layout is fixed by the System V supplement, not by us. use alloc::vec::Vec; use super::auxv::pairs; use super::loaded::Loaded; +use super::stack_guard::{random, RANDOM_LEN}; +use super::stack_strings::place; +use super::stack_words::words; use crate::linux::guest::Guest; -/// Sixteen bytes a C runtime turns into its stack guard. -const RANDOM_LEN: u64 = 16; - pub fn build( guest: &Guest, top: u64, image: &Loaded, interp_base: u64, - argv0: &[u8], + argv: &[Vec], + envp: &[Vec], ) -> Option { - let name_at = top - (argv0.len() as u64 + 1); - let random_at = (name_at - RANDOM_LEN) & !0x0F; - let mut words: Vec = alloc::vec![1, name_at, 0, 0]; - words.extend(pairs(image, interp_base, random_at, name_at)); - let bytes = words.len() as u64 * 8; - let rsp = (random_at - bytes) & !0x0F; - - let mut name = argv0.to_vec(); - name.push(0); - if guest.write(name_at, &name) < 0 { - return None; - } + let mut all = argv.to_vec(); + all.extend_from_slice(envp); + let placed = place(guest, top, &all)?; + let random_at = (placed.floor - RANDOM_LEN) & !0x0F; + + let aux = pairs(image, interp_base, random_at, *placed.at.first()?); + let words = words(argv.len(), &placed.at, aux)?; + + /* + * System V wants rsp itself sixteen-byte aligned at the entry point, so + * the block is placed from an aligned base. + */ + let rsp = (random_at - words.len() as u64 * 8) & !0x0F; if guest.write(random_at, &random()?) < 0 { return None; } - let mut blob: Vec = Vec::with_capacity(bytes as usize); + let mut blob: Vec = Vec::with_capacity(words.len() * 8); for word in &words { blob.extend_from_slice(&word.to_le_bytes()); } - if guest.write(rsp, &blob) < 0 { - return None; - } - Some(rsp) -} - -/// Entropy for the guard comes from the system, never from a constant: a -/// fixed value here would make every guest's stack guard the same and -/// the protection worth nothing. -fn random() -> Option<[u8; RANDOM_LEN as usize]> { - let mut out = [0u8; RANDOM_LEN as usize]; - match nonos_libc::crypto_random(out.as_mut_ptr(), out.len()) { + match guest.write(rsp, &blob) { n if n < 0 => None, - _ => Some(out), + _ => Some(rsp), } } diff --git a/userland/capsule_linux/src/linux/image/stack_guard.rs b/userland/capsule_linux/src/linux/image/stack_guard.rs new file mode 100644 index 000000000..595fd1814 --- /dev/null +++ b/userland/capsule_linux/src/linux/image/stack_guard.rs @@ -0,0 +1,31 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The sixteen bytes behind AT_RANDOM. + +/// Sixteen bytes a C runtime turns into its stack guard. +pub const RANDOM_LEN: u64 = 16; + +/// Entropy comes from the system, never from a constant: a fixed value here +/// would make every guest's stack guard the same, and a guard an attacker can +/// predict is not a guard. +pub fn random() -> Option<[u8; RANDOM_LEN as usize]> { + let mut out = [0u8; RANDOM_LEN as usize]; + match nonos_libc::crypto_random(out.as_mut_ptr(), out.len()) { + n if n < 0 => None, + _ => Some(out), + } +} diff --git a/userland/capsule_linux/src/linux/image/stack_strings.rs b/userland/capsule_linux/src/linux/image/stack_strings.rs new file mode 100644 index 000000000..1c44054bc --- /dev/null +++ b/userland/capsule_linux/src/linux/image/stack_strings.rs @@ -0,0 +1,46 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The string block at the very top of a new stack. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +/// Where each string ended up, in the order it was given, and the lowest +/// address the block reached. +pub struct Placed { + pub at: Vec, + pub floor: u64, +} + +pub fn place(guest: &Guest, top: u64, strings: &[Vec]) -> Option { + let mut at = Vec::with_capacity(strings.len()); + let mut cursor = top; + // Downward, so the first string ends up highest. + for s in strings.iter().rev() { + let len = s.len() as u64 + 1; + cursor = cursor.checked_sub(len)?; + let mut bytes = s.clone(); + bytes.push(0); + if guest.write(cursor, &bytes) < 0 { + return None; + } + at.push(cursor); + } + at.reverse(); + Some(Placed { at, floor: cursor }) +} diff --git a/userland/capsule_linux/src/linux/image/stack_words.rs b/userland/capsule_linux/src/linux/image/stack_words.rs new file mode 100644 index 000000000..94d409439 --- /dev/null +++ b/userland/capsule_linux/src/linux/image/stack_words.rs @@ -0,0 +1,31 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The word list a program finds at rsp. + +use alloc::vec::Vec; + +/// `at` is every string address, argv first then envp, and `argc` says where +/// the boundary falls. +pub fn words(argc: usize, at: &[u64], aux: Vec) -> Option> { + let mut out: Vec = alloc::vec![argc as u64]; + out.extend_from_slice(at.get(..argc)?); + out.push(0); + out.extend_from_slice(at.get(argc..)?); + out.push(0); + out.extend(aux); + Some(out) +} diff --git a/userland/capsule_linux/src/linux/install/download.rs b/userland/capsule_linux/src/linux/install/download.rs new file mode 100644 index 000000000..96eaf5654 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/download.rs @@ -0,0 +1,34 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Fetching one package, from whichever branch holds it. + +use alloc::format; +use alloc::vec::Vec; + +use super::http::get; +use super::run::{ARCH, BRANCHES, HOST, PORT, RELEASE}; + +/// Either branch may hold it, and the index does not say which. +pub(super) fn download(name: &str, version: &str) -> Vec { + for branch in BRANCHES { + let path = format!("/alpine/{RELEASE}/{branch}/{ARCH}/{name}-{version}.apk"); + if let Some(bytes) = get(HOST, PORT, &path) { + return bytes; + } + } + Vec::new() +} diff --git a/userland/capsule_linux/src/linux/install/enrol.rs b/userland/capsule_linux/src/linux/install/enrol.rs new file mode 100644 index 000000000..d2dbc46c7 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/enrol.rs @@ -0,0 +1,45 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Vouching for a program the machine just installed. + +use alloc::vec::Vec; + +use nonos_libc::{mk_local_sign, mk_local_sign_len}; + +use crate::linux::file::{key, store_write}; + +use crate::linux::attest_paths::beside; + +/// The capabilities a guest is spawned with, which is none. +const GUEST_CAPS: u64 = 0; + +/// Mint a trailer for `image` and write it beside `path`. +pub fn vouch(path: &[u8], image: &[u8]) -> bool { + let needed = mk_local_sign_len(image, GUEST_CAPS); + let Ok(len) = usize::try_from(needed) else { + // Negative: no enrolled identity, or this capsule may not mint. + return false; + }; + let mut trailer: Vec = alloc::vec![0u8; len]; + let wrote = mk_local_sign(image, GUEST_CAPS, &mut trailer); + let Ok(got) = usize::try_from(wrote) else { + return false; + }; + trailer.truncate(got); + let at = beside(path, b".zk_trailer.bin"); + store_write(&key(&at), &trailer).is_ok() +} diff --git a/userland/capsule_linux/src/linux/install/http.rs b/userland/capsule_linux/src/linux/install/http.rs new file mode 100644 index 000000000..795fccfe5 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/http.rs @@ -0,0 +1,61 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A GET, over the socket service this capsule already uses. + +use alloc::vec::Vec; +use alloc::{format, string::String}; + +use crate::linux::net::raw::{connect_host, open_stream}; +use crate::linux::net::raw_io::{close, recv_all, send_all}; + +/// Enough for the largest package index; a reply beyond it is refused +/// rather than truncated into a half-parsed index. +const MAX_BODY: usize = 64 << 20; + +pub fn get(host: &str, port: u16, path: &str) -> Option> { + let handle = open_stream()?; + if connect_host(handle, host, port).is_none() { + close(handle); + return None; + } + let req = format!( + "GET {path} HTTP/1.1\r\nHost: {host}\r\nUser-Agent: nonos\r\nConnection: close\r\n\r\n" + ); + if send_all(handle, req.as_bytes()).is_none() { + close(handle); + return None; + } + let raw = recv_all(handle, MAX_BODY); + close(handle); + body(&raw?) +} + +/// The bytes after the header block. A reply whose status is not 200 is +/// nothing: an error page parsed as a package is the worst outcome here. +fn body(raw: &[u8]) -> Option> { + let head_end = find(raw, b"\r\n\r\n")? + 4; + let head = String::from_utf8_lossy(&raw[..head_end]); + let first = head.lines().next()?; + if !first.contains(" 200 ") { + return None; + } + Some(raw[head_end..].to_vec()) +} + +fn find(hay: &[u8], needle: &[u8]) -> Option { + hay.windows(needle.len()).position(|w| w == needle) +} diff --git a/userland/capsule_linux/src/linux/install/index.rs b/userland/capsule_linux/src/linux/install/index.rs new file mode 100644 index 000000000..37118db32 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/index.rs @@ -0,0 +1,69 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The distribution's package index, as this capsule needs it. + +use alloc::string::String; +use alloc::vec::Vec; + +pub struct Pkg { + pub name: String, + pub version: String, +} + +pub struct Index { + /// soname -> package + pub libs: Vec<(String, Pkg)>, + /// package name -> package + pub names: Vec<(String, Pkg)>, +} + +impl Index { + pub fn parse(raw: &[u8]) -> Index { + let text = String::from_utf8_lossy(raw); + let (mut libs, mut names) = (Vec::new(), Vec::new()); + let (mut name, mut version) = (String::new(), String::new()); + for line in text.lines() { + match line.as_bytes().first() { + Some(b'P') => name = String::from(&line[2..]), + Some(b'V') => { + version = String::from(&line[2..]); + names + .push((name.clone(), Pkg { name: name.clone(), version: version.clone() })); + } + Some(b'p') => { + for token in line[2..].split_whitespace() { + if let Some(so) = token.strip_prefix("so:") { + let so = so.split('=').next().unwrap_or(so); + let pkg = Pkg { name: name.clone(), version: version.clone() }; + libs.push((String::from(so), pkg)); + } + } + } + _ => {} + } + } + Index { libs, names } + } + + pub fn by_lib(&self, soname: &str) -> Option<&Pkg> { + self.libs.iter().find(|(k, _)| k == soname).map(|(_, v)| v) + } + + pub fn by_name(&self, name: &str) -> Option<&Pkg> { + self.names.iter().find(|(k, _)| k == name).map(|(_, v)| v) + } +} diff --git a/userland/capsule_linux/src/linux/install/index_load.rs b/userland/capsule_linux/src/linux/install/index_load.rs new file mode 100644 index 000000000..46bc16dd5 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/index_load.rs @@ -0,0 +1,40 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Fetching and joining the branch indexes. + +use alloc::format; +use alloc::vec::Vec; + +use super::http::get; +use super::index::Index; +use super::run::{ARCH, BRANCHES, HOST, PORT, RELEASE}; +use super::tar::entries; + +pub(super) fn load_index() -> Option { + let mut all: Vec = Vec::new(); + for branch in BRANCHES { + let path = format!("/alpine/{RELEASE}/{branch}/{ARCH}/APKINDEX.tar.gz"); + let raw = get(HOST, PORT, &path)?; + let plain = nonos_inflate::gunzip(&raw)?; + for entry in entries(&plain) { + if entry.name.ends_with(b"APKINDEX") { + all.extend_from_slice(&entry.body); + } + } + } + Some(Index::parse(&all)) +} diff --git a/userland/capsule_linux/src/linux/install/mod.rs b/userland/capsule_linux/src/linux/install/mod.rs new file mode 100644 index 000000000..c92a6de47 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/mod.rs @@ -0,0 +1,31 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Installing a Linux program from within the system. + +mod download; +mod enrol; +mod http; +mod index; +mod index_load; +mod place; +mod place_entry; +mod provenance; +mod run; +mod tar; +mod tar_field; + +pub use run::install; diff --git a/userland/capsule_linux/src/linux/install/place.rs b/userland/capsule_linux/src/linux/install/place.rs new file mode 100644 index 000000000..28012a229 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/place.rs @@ -0,0 +1,36 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! Putting a package's files into the store, under the Linux root. + +use nonos_inflate::gunzip; +use nonos_libc::mk_debug; + +use super::place_entry::one; +use super::provenance::Provenance; +use super::tar::entries; + +/// Unpack `apk` into the store and report how many files landed. +pub fn unpack(apk: &[u8], from: Provenance) -> usize { + let Some(raw) = gunzip(apk) else { + say(b"[LINUX] package is not readable\n"); + return 0; + }; + entries(&raw).iter().filter(|entry| one(entry, from)).count() +} + +fn say(line: &[u8]) { + let _ = mk_debug(line.as_ptr(), line.len()); +} diff --git a/userland/capsule_linux/src/linux/install/place_entry.rs b/userland/capsule_linux/src/linux/install/place_entry.rs new file mode 100644 index 000000000..75aa0e08e --- /dev/null +++ b/userland/capsule_linux/src/linux/install/place_entry.rs @@ -0,0 +1,71 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! One file out of a package: where it lands, and whether the machine +//! says anything about it. + +use nonos_libc::mk_debug; + +use crate::linux::file::{key, store_write, visible}; + +use super::enrol::vouch; +use super::provenance::Provenance; +use super::tar::Entry; + +/// Paths a package may not write: a package dropping one of these +/// would be installing its own proof. +const REFUSED: &[&[u8]] = &[b".nonos_id_cert.bin", b".manifest.bin", b".zk_trailer.bin"]; + +/// True when the file landed in the store. +pub(super) fn one(entry: &Entry, from: Provenance) -> bool { + if entry.name.starts_with(b".") { + return false; + } + if REFUSED.iter().any(|s| entry.name.ends_with(s)) { + say(b"[LINUX] refused a package writing its own proof\n"); + return false; + } + let at = visible(b"/", &entry.name); + if store_write(&key(&at), &entry.body).is_err() { + return false; + } + if is_elf(&entry.body) { + vouch_for(&at, &entry.body, from); + } + true +} + +/// Minting says this machine agreed to run these bytes, so it is only said +/// about bytes something authenticated. +fn vouch_for(at: &[u8], body: &[u8], from: Provenance) { + if from == Provenance::Unauthenticated { + say(b"[LINUX] installed unvouched: package bytes are not authenticated\n"); + return; + } + if !vouch(at, body) { + say(b"[LINUX] installed but unvouched: no enrolled root, or may not mint\n"); + } +} + +/// A shared object counts: an interpreter loads it, and the gate +/// measures whatever it loads. +fn is_elf(body: &[u8]) -> bool { + body.starts_with(b"\x7fELF") +} + +fn say(line: &[u8]) { + let _ = mk_debug(line.as_ptr(), line.len()); +} diff --git a/userland/capsule_linux/src/linux/install/provenance.rs b/userland/capsule_linux/src/linux/install/provenance.rs new file mode 100644 index 000000000..3750b5ccd --- /dev/null +++ b/userland/capsule_linux/src/linux/install/provenance.rs @@ -0,0 +1,26 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Where a package's bytes came from, and whether anything vouches for them +//! arriving intact. + +#[derive(Clone, Copy, PartialEq, Eq)] +pub(super) enum Provenance { + /// The bytes match a checksum from a signed index. + Verified, + /// Nothing says these are the bytes the distribution published. + Unauthenticated, +} diff --git a/userland/capsule_linux/src/linux/install/run.rs b/userland/capsule_linux/src/linux/install/run.rs new file mode 100644 index 000000000..05b733a57 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/run.rs @@ -0,0 +1,75 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `install `: fetch a package and everything under it. + +use alloc::string::String; +use alloc::vec; +use alloc::vec::Vec; + +use nonos_libc::mk_debug; + +use super::download::download; +use super::index_load::load_index; +use super::place::unpack; +use super::provenance::Provenance; + +pub(super) const HOST: &str = "dl-cdn.alpinelinux.org"; +pub(super) const PORT: u16 = 80; +pub(super) const RELEASE: &str = "v3.20"; +pub(super) const ARCH: &str = "x86_64"; +pub(super) const BRANCHES: [&str; 2] = ["main", "community"]; + +/// Rounds of resolution. A closure that has not settled by now is a +/// dependency cycle the index cannot satisfy, and looping would hide it. +const ROUNDS: usize = 12; + +pub fn install(name: &str) -> bool { + let Some(index) = load_index() else { + say(b"[LINUX] no package index\n"); + return false; + }; + let mut wanted: Vec = vec![String::from(name)]; + let mut done: Vec = Vec::new(); + for _ in 0..ROUNDS { + let Some(next) = wanted.pop() else { + return true; + }; + if done.contains(&next) { + continue; + } + let Some(pkg) = index.by_name(&next).or_else(|| index.by_lib(&next)) else { + say(b"[LINUX] nothing provides it\n"); + return false; + }; + let apk = download(&pkg.name, &pkg.version); + if apk.is_empty() { + say(b"[LINUX] package would not download\n"); + return false; + } + /* + * Nothing says these are the bytes the distribution + * published: see `provenance`. + */ + unpack(&apk, Provenance::Unauthenticated); + done.push(next); + } + true +} + +fn say(line: &[u8]) { + let _ = mk_debug(line.as_ptr(), line.len()); +} diff --git a/userland/capsule_linux/src/linux/install/tar.rs b/userland/capsule_linux/src/linux/install/tar.rs new file mode 100644 index 000000000..2cecb045f --- /dev/null +++ b/userland/capsule_linux/src/linux/install/tar.rs @@ -0,0 +1,63 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Walking a tar, which is what a package is once it is decompressed. + +use alloc::vec::Vec; + +use super::tar_field::{name_of, octal}; + +const BLOCK: usize = 512; +const SIZE_AT: usize = 124; +const SIZE_LEN: usize = 12; +const TYPE_AT: usize = 156; + +pub struct Entry { + pub name: Vec, + pub body: Vec, +} + +/// Regular files only. A package's directories are implied by its paths +/// and its links are followed at install time, not recreated. +pub fn entries(data: &[u8]) -> Vec { + let mut out = Vec::new(); + let mut at = 0usize; + while at + BLOCK <= data.len() { + let head = &data[at..at + BLOCK]; + /* + * A zero block ends an archive, and an apk is several archives end to + * end: a signature, a control stream, then the data. + */ + if head.iter().all(|b| *b == 0) { + at += BLOCK; + continue; + } + let Some(size) = octal(&head[SIZE_AT..SIZE_AT + SIZE_LEN]) else { + break; + }; + let body_at = at + BLOCK; + let end = body_at + size; + if end > data.len() { + break; + } + if head[TYPE_AT] == b'0' || head[TYPE_AT] == 0 { + let name = name_of(head); + out.push(Entry { name, body: data[body_at..end].to_vec() }); + } + at = body_at + size.div_ceil(BLOCK) * BLOCK; + } + out +} diff --git a/userland/capsule_linux/src/linux/install/tar_field.rs b/userland/capsule_linux/src/linux/install/tar_field.rs new file mode 100644 index 000000000..588d901f2 --- /dev/null +++ b/userland/capsule_linux/src/linux/install/tar_field.rs @@ -0,0 +1,40 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The two header fields this reader needs. + +use alloc::vec::Vec; + +const NAME: usize = 100; + +/// The size field is octal text, space or NUL padded. +pub(super) fn octal(field: &[u8]) -> Option { + let mut value = 0usize; + for b in field { + match b { + b'0'..=b'7' => value = value.checked_mul(8)?.checked_add((b - b'0') as usize)?, + b' ' | 0 => break, + _ => return None, + } + } + Some(value) +} + +pub(super) fn name_of(head: &[u8]) -> Vec { + let raw = &head[..NAME]; + let end = raw.iter().position(|b| *b == 0).unwrap_or(NAME); + raw[..end].to_vec() +} diff --git a/userland/capsule_linux/src/linux/mod.rs b/userland/capsule_linux/src/linux/mod.rs index bea995c5e..cde2e2126 100644 --- a/userland/capsule_linux/src/linux/mod.rs +++ b/userland/capsule_linux/src/linux/mod.rs @@ -18,13 +18,24 @@ //! one capsule that holds the capabilities its guests do not. mod abi; +mod attest; +mod attest_local; +mod attest_paths; +mod attest_publisher; mod call; +mod env; mod file; mod guest; -mod net; mod image; +mod install; +mod net; +mod origin; +mod request; pub mod serve; mod source; mod start; +mod start_guest; +mod unix; +mod wayland; pub use start::run; diff --git a/userland/capsule_linux/src/linux/net/connect.rs b/userland/capsule_linux/src/linux/net/connect.rs index 1601ae2eb..ce5deac6d 100644 --- a/userland/capsule_linux/src/linux/net/connect.rs +++ b/userland/capsule_linux/src/linux/net/connect.rs @@ -14,25 +14,36 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `connect`, for a socket the guest opened here. use alloc::vec::Vec; use crate::linux::abi::errno; -use crate::linux::guest::Guest; +use crate::linux::guest::{Guest, Kind}; use super::addr::inet; use super::call::call; -use super::ops::OP_CONNECT; +use super::dns::host_for; +use super::ops::{OP_CONNECT, OP_CONNECT_HOST}; pub fn connect(guest: &mut Guest, fd: u64, at: u64, len: u64) -> u64 { + /* + * A program may connect its nameserver socket before writing to + * it. There is nothing to reach: this capsule is the nameserver. + */ + if guest.fds.get(fd as usize).is_some_and(|f| f.kind == Kind::Resolver) { + return errno::ok(0); + } let Some(handle) = guest.socket_handle(fd) else { return errno::fail(errno::ENOTSOCK); }; let Some((port, ip)) = inet(guest, at, len) else { return errno::fail(errno::EAFNOSUPPORT); }; + // An address this capsule invented for a name goes back to being the name. + if let Some(host) = host_for(guest, ip) { + return by_host(handle, &host, port); + } let mut body = Vec::with_capacity(10); body.extend_from_slice(&handle.to_le_bytes()); body.extend_from_slice(&ip); @@ -43,3 +54,19 @@ pub fn connect(guest: &mut Guest, fd: u64, at: u64, len: u64) -> u64 { None => errno::fail(errno::EIO), } } + +fn by_host(handle: u32, host: &[u8], port: u16) -> u64 { + if host.len() > u8::MAX as usize { + return errno::fail(errno::EINVAL); + } + let mut body = Vec::with_capacity(7 + host.len()); + body.extend_from_slice(&handle.to_le_bytes()); + body.extend_from_slice(&port.to_le_bytes()); + body.push(host.len() as u8); + body.extend_from_slice(host); + match call(OP_CONNECT_HOST, &body, 0) { + Some((0, _)) => errno::ok(0), + Some(_) => errno::fail(errno::ECONNREFUSED), + None => errno::fail(errno::EIO), + } +} diff --git a/userland/capsule_linux/src/linux/net/dgram.rs b/userland/capsule_linux/src/linux/net/dgram.rs new file mode 100644 index 000000000..dd3b31bd5 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dgram.rs @@ -0,0 +1,52 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `sendto` and `recvfrom`, which differ from write and read only in carrying +//! an address. + +use crate::linux::call; +use crate::linux::guest::{Guest, Kind}; + +use super::addr::inet; +use super::dgram_addr::{encode, fill}; +use super::dns; + +pub fn sendto(guest: &mut Guest, fd: u64, buf: u64, len: u64, at: u64, alen: u64) -> u64 { + if !is_resolver(guest, fd) { + return call::write(guest, fd, buf, len); + } + /* + * A program with no `resolv.conf` asks the loopback address, and one with + * a configured nameserver asks that. + */ + let peer = inet(guest, at, alen).unwrap_or((53, [127, 0, 0, 1])); + dns::query(guest, fd, buf, len, encode(peer)) +} + +pub fn recvfrom(guest: &mut Guest, fd: u64, buf: u64, len: u64, at: u64, alen: u64) -> u64 { + if !is_resolver(guest, fd) { + return call::read(guest, fd, buf, len); + } + let (got, from) = dns::answer_out(guest, fd, buf, len); + match from { + Some(peer) if at != 0 => fill(guest, at, alen, peer, got), + _ => got, + } +} + +fn is_resolver(guest: &Guest, fd: u64) -> bool { + guest.fds.get(fd as usize).is_some_and(|f| f.kind == Kind::Resolver) +} diff --git a/userland/capsule_linux/src/linux/net/dgram_addr.rs b/userland/capsule_linux/src/linux/net/dgram_addr.rs new file mode 100644 index 000000000..95b00b07e --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dgram_addr.rs @@ -0,0 +1,43 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The address halves of `sendto` and `recvfrom`. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +const AF_INET: u16 = 2; +const SOCKADDR_IN: usize = 16; + +/// port then address, both already in network order. +pub(super) fn encode((port, ip): (u16, [u8; 4])) -> [u8; 6] { + let p = port.to_be_bytes(); + [p[0], p[1], ip[0], ip[1], ip[2], ip[3]] +} + +/// Write the source back as a `sockaddr_in` and say how long it is. +pub(super) fn fill(guest: &mut Guest, at: u64, alen: u64, peer: [u8; 6], got: u64) -> u64 { + let mut sa = [0u8; SOCKADDR_IN]; + sa[0..2].copy_from_slice(&AF_INET.to_le_bytes()); + sa[2..8].copy_from_slice(&peer); + if guest.write(at, &sa) < sa.len() as i64 { + return errno::fail(errno::EFAULT); + } + if alen != 0 && guest.write(alen, &(sa.len() as u32).to_le_bytes()) < 4 { + return errno::fail(errno::EFAULT); + } + got +} diff --git a/userland/capsule_linux/src/linux/net/dns/automap.rs b/userland/capsule_linux/src/linux/net/dns/automap.rs new file mode 100644 index 000000000..543721e4f --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/automap.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Names the guest asked for, and the addresses it was told. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +/// RFC 6598 shared address space: routable nowhere, and reserved against +/// exactly this kind of use. +const BASE: [u8; 2] = [100, 64]; + +/// A ceiling, because the table is memory a guest grows by asking. +const MAX_NAMES: usize = 4096; + +/// The address for `host`, the same one every time it is asked for. +pub fn address_for(guest: &mut Guest, host: &[u8]) -> Option<[u8; 4]> { + if let Some((_, addr)) = guest.automap.iter().find(|(h, _)| h == host) { + return Some(*addr); + } + if guest.automap.len() >= MAX_NAMES { + return None; + } + let n = guest.automap.len() as u32 + 1; + let addr = [BASE[0], BASE[1] + (n >> 16) as u8, (n >> 8) as u8, n as u8]; + guest.automap.push((host.to_vec(), addr)); + Some(addr) +} + +/// The name an address stands for, when it is one of ours. +pub fn host_for(guest: &Guest, addr: [u8; 4]) -> Option> { + if addr[0] != BASE[0] || addr[1] & 0xC0 != BASE[1] { + return None; + } + guest.automap.iter().find(|(_, a)| *a == addr).map(|(h, _)| h.clone()) +} diff --git a/userland/capsule_linux/src/linux/net/dns/decide.rs b/userland/capsule_linux/src/linux/net/dns/decide.rs new file mode 100644 index 000000000..d2cec491d --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/decide.rs @@ -0,0 +1,40 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! What to answer a query with. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +use super::{automap, name, reply}; + +/// A record type this capsule can answer with an address. +const TYPE_A: u16 = 1; + +pub(super) fn answer(guest: &mut Guest, msg: &[u8]) -> Option> { + let (host, end) = name::read(msg)?; + let qtype = u16::from_be_bytes([*msg.get(end)?, *msg.get(end + 1)?]); + let question = msg.get(..end + 4)?; + if qtype != TYPE_A { + /* + * Every other type, AAAA above all, is answered empty rather than + * ignored. + */ + return Some(reply::build(question, None)); + } + Some(reply::build(question, automap::address_for(guest, &host))) +} diff --git a/userland/capsule_linux/src/linux/net/dns/mod.rs b/userland/capsule_linux/src/linux/net/dns/mod.rs new file mode 100644 index 000000000..23b9adad3 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/mod.rs @@ -0,0 +1,28 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Answering a guest's name lookups without asking anyone. + +mod automap; +mod decide; +mod name; +mod open; +mod reply; +mod serve; + +pub use automap::host_for; +pub use open::open; +pub use serve::{answer_out, query}; diff --git a/userland/capsule_linux/src/linux/net/dns/name.rs b/userland/capsule_linux/src/linux/net/dns/name.rs new file mode 100644 index 000000000..4da75209c --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/name.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The name out of a DNS question. + +use alloc::vec::Vec; + +/// Where the question starts: past the twelve byte header. +pub const QUESTION: usize = 12; + +/// The longest name that can be asked for, as the format allows. +const MAX_NAME: usize = 255; + +/// The name, and the offset of the byte after it. +pub fn read(msg: &[u8]) -> Option<(Vec, usize)> { + let mut out: Vec = Vec::new(); + let mut at = QUESTION; + loop { + let len = *msg.get(at)? as usize; + if len == 0 { + return Some((out, at + 1)); + } + if len > 63 || out.len() + len + 1 > MAX_NAME { + return None; + } + let from = at + 1; + let label = msg.get(from..from + len)?; + if !out.is_empty() { + out.push(b'.'); + } + out.extend_from_slice(label); + at = from + len; + } +} diff --git a/userland/capsule_linux/src/linux/net/dns/open.rs b/userland/capsule_linux/src/linux/net/dns/open.rs new file mode 100644 index 000000000..fb3bd77be --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/open.rs @@ -0,0 +1,29 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The descriptor a program opens to reach its nameserver. + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest}; + +/// It looks like a datagram socket and holds no handle: there is +/// nothing on the other side of it, which is the point. +pub fn open(guest: &mut Guest) -> u64 { + match crate::linux::file::install(guest, Fd::resolver()) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} diff --git a/userland/capsule_linux/src/linux/net/dns/reply.rs b/userland/capsule_linux/src/linux/net/dns/reply.rs new file mode 100644 index 000000000..389a61be7 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/reply.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The answer this capsule writes back. + +use alloc::vec::Vec; + +/// Response, recursion desired carried back, recursion available. +const FLAGS: u16 = 0x8180; + +/// A short life. +const TTL: u32 = 60; + +const TYPE_A: u16 = 1; +const CLASS_IN: u16 = 1; + +/// `question` is the query's bytes from the header through the qclass. +pub fn build(question: &[u8], addr: Option<[u8; 4]>) -> Vec { + let mut out: Vec = Vec::with_capacity(question.len() + 16); + out.extend_from_slice(&question[..2]); + out.extend_from_slice(&FLAGS.to_be_bytes()); + out.extend_from_slice(&1u16.to_be_bytes()); + out.extend_from_slice(&u16::from(addr.is_some()).to_be_bytes()); + out.extend_from_slice(&[0, 0, 0, 0]); + out.extend_from_slice(&question[12..]); + let Some(addr) = addr else { + return out; + }; + // The name is not written again. + out.extend_from_slice(&0xC00Cu16.to_be_bytes()); + out.extend_from_slice(&TYPE_A.to_be_bytes()); + out.extend_from_slice(&CLASS_IN.to_be_bytes()); + out.extend_from_slice(&TTL.to_be_bytes()); + out.extend_from_slice(&4u16.to_be_bytes()); + out.extend_from_slice(&addr); + out +} diff --git a/userland/capsule_linux/src/linux/net/dns/serve.rs b/userland/capsule_linux/src/linux/net/dns/serve.rs new file mode 100644 index 000000000..8fb35cdf4 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/dns/serve.rs @@ -0,0 +1,52 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! A query in, an answer out, and nothing on the wire. + +use crate::linux::abi::errno; +use crate::linux::guest::{Guest, Kind}; + +use super::decide::answer; + +/// Take a query and queue its answer, to appear to come back from `peer`, +/// which is whatever the program believes its nameserver is. +pub fn query(guest: &mut Guest, fd: u64, buf: u64, len: u64, peer: [u8; 6]) -> u64 { + let Some(msg) = guest.read(buf, len as usize) else { + return errno::fail(errno::EFAULT); + }; + if let Some(answer) = answer(guest, &msg) { + if let Some(entry) = guest.fds.get_mut(fd as usize).filter(|f| f.kind == Kind::Resolver) { + entry.replies.push((answer, peer)); + } + } + errno::ok(len) +} + +/// The oldest answer waiting, with the address it came from, or nothing. +pub fn answer_out(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> (u64, Option<[u8; 6]>) { + let Some(entry) = guest.fds.get_mut(fd as usize).filter(|f| f.kind == Kind::Resolver) else { + return (errno::fail(errno::EBADF), None); + }; + if entry.replies.is_empty() { + return (errno::fail(errno::EAGAIN), None); + } + let (msg, peer) = entry.replies.remove(0); + let take = msg.len().min(len as usize); + match guest.write(buf, &msg[..take]) { + n if n < take as i64 => (errno::fail(errno::EFAULT), None), + _ => (errno::ok(take as u64), Some(peer)), + } +} diff --git a/userland/capsule_linux/src/linux/net/mod.rs b/userland/capsule_linux/src/linux/net/mod.rs index 3287df563..0e91f4ee8 100644 --- a/userland/capsule_linux/src/linux/net/mod.rs +++ b/userland/capsule_linux/src/linux/net/mod.rs @@ -14,21 +14,28 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - -//! Sockets, over the net.sockets service. A guest's descriptor holds a -//! handle that service issued to this capsule, so a guest reaches only -//! the sockets this capsule opened for it. +//! Sockets, over the net.sockets service. mod addr; mod call; mod connect; +mod dgram; +mod dgram_addr; +pub mod dns; mod ops; mod poll; mod poll_set; +mod poll_socket; +pub mod raw; +pub mod raw_io; +mod select; mod socket; mod stream; pub use connect::connect; +pub use dgram::{recvfrom, sendto}; +pub use poll::ready; pub use poll_set::poll; +pub use select::select; pub use socket::socket; pub use stream::{close, recv, send}; diff --git a/userland/capsule_linux/src/linux/net/ops.rs b/userland/capsule_linux/src/linux/net/ops.rs index f91f099ef..b5392771c 100644 --- a/userland/capsule_linux/src/linux/net/ops.rs +++ b/userland/capsule_linux/src/linux/net/ops.rs @@ -14,21 +14,23 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! The net.sockets opcodes this capsule uses. -//! -//! Transcribed from userland/capsule_net_sockets/src/protocol/ops.rs. The -//! server is a separate binary and its protocol module is not a library, -//! so these cannot be imported; a number changed there and not here is a -//! wrong operation, which is why the source is named. pub const OP_SOCKET: u16 = 2; +pub const OP_CONNECT_HOST: u16 = 12; pub const OP_CONNECT: u16 = 6; pub const OP_SEND: u16 = 7; pub const OP_RECV: u16 = 8; pub const OP_CLOSE: u16 = 9; pub const OP_POLL: u16 = 13; +/// The socket kinds the server offers: 1 stream, 2 datagram, 3 mixnet. +pub const KIND_MIXNET: u16 = 3; + +/// The address family the server takes. It is not AF_INET: the number +/// is the server's own and the two only look alike. +pub const DOMAIN: u16 = 4; + /// What OP_POLL reports: a recv would return data, a send would take it. pub const POLL_READABLE: u8 = 1; pub const POLL_WRITABLE: u8 = 2; diff --git a/userland/capsule_linux/src/linux/net/poll.rs b/userland/capsule_linux/src/linux/net/poll.rs index 79c524bad..8d6e1130a 100644 --- a/userland/capsule_linux/src/linux/net/poll.rs +++ b/userland/capsule_linux/src/linux/net/poll.rs @@ -14,19 +14,11 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `poll` over the guest's descriptors. -//! -//! A console or a file is always ready, which is what Linux reports for -//! them too. A socket is asked, one call per descriptor: net.sockets -//! reports readiness for one handle at a time and inventing a batched -//! form here would mean a second protocol nobody serves. -use crate::linux::abi::errno; use crate::linux::guest::{Guest, Kind}; -use super::call::call; -use super::ops::{OP_POLL, POLL_READABLE, POLL_WRITABLE}; +use super::poll_socket::socket_bits; const POLLIN: u16 = 0x001; const POLLOUT: u16 = 0x004; @@ -40,23 +32,26 @@ pub fn ready(guest: &Guest, fd: u64) -> u16 { Some(handle) => socket_bits(handle), None => POLLNVAL, }, + Some(Kind::Timer) => timer_bits(guest, fd), + Some(Kind::Resolver) => resolver_bits(guest, fd), Some(_) => POLLIN | POLLOUT, } } -fn socket_bits(handle: u32) -> u16 { - let Some((0, out)) = call(OP_POLL, &handle.to_le_bytes(), 1) else { - return 0; - }; - let Some(bits) = out.first() else { - return 0; - }; - let mut set = 0; - if bits & POLL_READABLE != 0 { - set |= POLLIN; +/// A timer is readable once it has fired and never writable. +fn timer_bits(guest: &Guest, fd: u64) -> u16 { + let now = nonos_libc::mk_uptime_ms().max(0) as u64; + match guest.fds.get(fd as usize) { + Some(e) if e.expiry != 0 && now >= e.expiry => POLLIN, + _ => 0, } - if bits & POLL_WRITABLE != 0 { - set |= POLLOUT; +} + +/// Readable once an answer is waiting, and always writable: a query is taken +/// whenever it is offered. +fn resolver_bits(guest: &Guest, fd: u64) -> u16 { + match guest.fds.get(fd as usize) { + Some(e) if !e.replies.is_empty() => POLLIN | POLLOUT, + _ => POLLOUT, } - set } diff --git a/userland/capsule_linux/src/linux/net/poll_socket.rs b/userland/capsule_linux/src/linux/net/poll_socket.rs new file mode 100644 index 000000000..7d5fe6ef8 --- /dev/null +++ b/userland/capsule_linux/src/linux/net/poll_socket.rs @@ -0,0 +1,40 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Asking net.sockets whether one handle is ready. + +use super::call::call; +use super::ops::{OP_POLL, POLL_READABLE, POLL_WRITABLE}; + +const POLLIN: u16 = 0x001; +const POLLOUT: u16 = 0x004; + +pub(super) fn socket_bits(handle: u32) -> u16 { + let Some((0, out)) = call(OP_POLL, &handle.to_le_bytes(), 1) else { + return 0; + }; + let Some(bits) = out.first() else { + return 0; + }; + let mut set = 0; + if bits & POLL_READABLE != 0 { + set |= POLLIN; + } + if bits & POLL_WRITABLE != 0 { + set |= POLLOUT; + } + set +} diff --git a/userland/capsule_linux/src/linux/net/raw.rs b/userland/capsule_linux/src/linux/net/raw.rs new file mode 100644 index 000000000..211bf78ba --- /dev/null +++ b/userland/capsule_linux/src/linux/net/raw.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Sockets for this capsule's own use, rather than a guest's. + +use alloc::vec::Vec; + +use super::call::call; +use super::ops::{DOMAIN, KIND_MIXNET, OP_CONNECT_HOST, OP_SOCKET}; + +/// Over the mixnet, like everything else. +pub fn open_stream() -> Option { + let mut body = Vec::with_capacity(4); + body.extend_from_slice(&DOMAIN.to_le_bytes()); + body.extend_from_slice(&KIND_MIXNET.to_le_bytes()); + match call(OP_SOCKET, &body, 8) { + Some((0, out)) if out.len() >= 4 => { + Some(u32::from_le_bytes([out[0], out[1], out[2], out[3]])) + } + _ => None, + } +} + +pub fn connect_host(handle: u32, host: &str, port: u16) -> Option<()> { + let mut body = Vec::with_capacity(7 + host.len()); + body.extend_from_slice(&handle.to_le_bytes()); + body.extend_from_slice(&port.to_le_bytes()); + body.push(host.len() as u8); + body.extend_from_slice(host.as_bytes()); + match call(OP_CONNECT_HOST, &body, 0) { + Some((0, _)) => Some(()), + _ => None, + } +} diff --git a/userland/capsule_linux/src/linux/net/raw_io.rs b/userland/capsule_linux/src/linux/net/raw_io.rs new file mode 100644 index 000000000..268dc3a1f --- /dev/null +++ b/userland/capsule_linux/src/linux/net/raw_io.rs @@ -0,0 +1,57 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Bytes on a socket this capsule opened for itself. + +use alloc::vec::Vec; + +use super::call::call; +use super::ops::{OP_CLOSE, OP_RECV, OP_SEND}; + +/// One transfer. The service caps a reply, so a body arrives in pieces. +const CHUNK: usize = 32 << 10; + +pub fn send_all(handle: u32, bytes: &[u8]) -> Option<()> { + for part in bytes.chunks(CHUNK) { + let mut body = Vec::with_capacity(4 + part.len()); + body.extend_from_slice(&handle.to_le_bytes()); + body.extend_from_slice(part); + match call(OP_SEND, &body, 0) { + Some((0, _)) => {} + _ => return None, + } + } + Some(()) +} + +/// Read until the peer closes, which is what Connection: close gives. +pub fn recv_all(handle: u32, limit: usize) -> Option> { + let mut out: Vec = Vec::new(); + loop { + match call(OP_RECV, &handle.to_le_bytes(), CHUNK) { + Some((0, part)) if part.is_empty() => return Some(out), + Some((0, part)) => out.extend_from_slice(&part), + _ => return Some(out), + } + if out.len() > limit { + return None; + } + } +} + +pub fn close(handle: u32) { + let _ = call(OP_CLOSE, &handle.to_le_bytes(), 0); +} diff --git a/userland/capsule_linux/src/linux/net/select.rs b/userland/capsule_linux/src/linux/net/select.rs new file mode 100644 index 000000000..41e5139ed --- /dev/null +++ b/userland/capsule_linux/src/linux/net/select.rs @@ -0,0 +1,67 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +//! `select`, answered from the same readiness the poll path reports. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::ready; + +const POLLIN: u16 = 0x001; +const POLLOUT: u16 = 0x004; + +/// Linux caps a descriptor set at 1024 bits and so does every libc that +/// builds one, so a larger nfds is a caller error rather than a bigger set. +const FD_SETSIZE: u64 = 1024; +const SET_BYTES: usize = (FD_SETSIZE / 8) as usize; + +pub fn select(guest: &mut Guest, nfds: u64, readfds: u64, writefds: u64) -> u64 { + if nfds > FD_SETSIZE { + return errno::fail(errno::EINVAL); + } + let mut hits = 0u64; + for (at, want) in [(readfds, POLLIN), (writefds, POLLOUT)] { + if at == 0 { + continue; + } + let Some(mut set) = guest.read(at, SET_BYTES) else { + return errno::fail(errno::EFAULT); + }; + hits += narrow(guest, &mut set, nfds, want); + if guest.write(at, &set) < 0 { + return errno::fail(errno::EFAULT); + } + } + errno::ok(hits) +} + +/// Clear every bit whose descriptor is not ready for `want`, and report +/// how many were left set. +fn narrow(guest: &Guest, set: &mut [u8], nfds: u64, want: u16) -> u64 { + let mut kept = 0; + for fd in 0..nfds { + let (byte, bit) = ((fd / 8) as usize, (fd % 8) as u32); + if set[byte] & (1 << bit) == 0 { + continue; + } + if ready(guest, fd) & want != 0 { + kept += 1; + } else { + set[byte] &= !(1 << bit); + } + } + kept +} diff --git a/userland/capsule_linux/src/linux/net/socket.rs b/userland/capsule_linux/src/linux/net/socket.rs index be98b7f71..cdcbd5cbe 100644 --- a/userland/capsule_linux/src/linux/net/socket.rs +++ b/userland/capsule_linux/src/linux/net/socket.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! `socket` and `connect`, over net.sockets. use alloc::vec::Vec; -use super::ops::OP_SOCKET; +use super::ops::{DOMAIN, KIND_MIXNET, OP_SOCKET}; use crate::linux::abi::errno; use crate::linux::guest::{Fd, Guest}; @@ -36,13 +35,18 @@ pub fn socket(guest: &mut Guest, family: u64, kind: u64) -> u64 { if family != AF_INET { return errno::fail(errno::EAFNOSUPPORT); } + /* + * A guest's stream goes over the mixnet, never the open network, and it + * holds no capability that could name a socket: there is no second route + * to disable and no firewall rule to remove. + */ let want = match kind & TYPE_MASK { - SOCK_STREAM => 1u16, - SOCK_DGRAM => 2u16, + SOCK_STREAM => KIND_MIXNET, + SOCK_DGRAM => return super::dns::open(guest), _ => return errno::fail(errno::ENOSYS), }; let mut body = Vec::with_capacity(4); - body.extend_from_slice(&4u16.to_le_bytes()); + body.extend_from_slice(&DOMAIN.to_le_bytes()); body.extend_from_slice(&want.to_le_bytes()); let Some((status, out)) = call(OP_SOCKET, &body, 8) else { return errno::fail(errno::EIO); diff --git a/userland/capsule_linux/src/linux/origin.rs b/userland/capsule_linux/src/linux/origin.rs new file mode 100644 index 000000000..0caa15d13 --- /dev/null +++ b/userland/capsule_linux/src/linux/origin.rs @@ -0,0 +1,29 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Where a program came from, which decides what has to prove it. + +/// Where a program came from, which decides what has to prove it. +pub enum Origin { + /// Read out of the store, and therefore unproven until it proves + /// itself against the enrolled set. + Store, + /// Part of this capsule's own ELF, and so already measured by the manifest + /// that admitted this capsule. + BuiltIn, +} + diff --git a/userland/capsule_linux/src/linux/request.rs b/userland/capsule_linux/src/linux/request.rs new file mode 100644 index 000000000..afaa2e9e8 --- /dev/null +++ b/userland/capsule_linux/src/linux/request.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Reading what this capsule was asked to do. + +use alloc::string::String; + +use nonos_libc::mk_args; + +/// Matches the buffer the program path is read into. +const MAX_ARGS: usize = 256; + +/// Arguments `install` then `` ask this capsule to fetch a package +/// rather than run a program. +pub fn install_request() -> Option { + let mut buf = [0u8; MAX_ARGS]; + let n = mk_args(buf.as_mut_ptr(), buf.len()); + if n <= 0 { + return None; + } + let mut parts = buf[..n as usize].split(|b| *b == 0); + if parts.next()? != b"install" { + return None; + } + let name = parts.next().filter(|s| !s.is_empty())?; + Some(String::from(core::str::from_utf8(name).ok()?)) +} diff --git a/userland/capsule_linux/src/linux/serve/dispatch.rs b/userland/capsule_linux/src/linux/serve/dispatch.rs index 8c2098357..67226625e 100644 --- a/userland/capsule_linux/src/linux/serve/dispatch.rs +++ b/userland/capsule_linux/src/linux/serve/dispatch.rs @@ -30,9 +30,12 @@ pub fn answer(guest: &mut Guest, frame: &ForeignFrame) -> Answer { let a = frame.args(); match frame.nr { nr::CLONE => clone(guest, frame), + nr::FORK | nr::VFORK => crate::linux::call::fork(guest), + nr::EXECVE => crate::linux::call::execve(guest, frame.pid, a[0], a[1], a[2]), + nr::WAIT4 => crate::linux::call::wait4(guest, a[0], a[1], a[2]), // A thread exiting is not the process exiting. nr::EXIT if frame.pid != guest.pid => Answer::Reply(exit_thread(guest, frame.pid)), nr::FUTEX => futex(guest, frame.pid, a[0], a[1], a[2]), - other => Answer::Reply(plain(guest, other, a)), + other => Answer::Reply(plain(guest, frame.pid, other, a)), } } diff --git a/userland/capsule_linux/src/linux/serve/mod.rs b/userland/capsule_linux/src/linux/serve/mod.rs index d8de8ecd3..a10fe22da 100644 --- a/userland/capsule_linux/src/linux/serve/mod.rs +++ b/userland/capsule_linux/src/linux/serve/mod.rs @@ -20,6 +20,10 @@ mod answer; mod dispatch; mod loop_impl; mod table; +mod table_file; +mod table_mem; +mod table_net; +mod table_proc; mod unserved; pub use answer::Answer; diff --git a/userland/capsule_linux/src/linux/serve/table.rs b/userland/capsule_linux/src/linux/serve/table.rs index 7c1f99a86..0f64f8f2c 100644 --- a/userland/capsule_linux/src/linux/serve/table.rs +++ b/userland/capsule_linux/src/linux/serve/table.rs @@ -14,54 +14,46 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +//! Every number a guest can ask for. -//! Every number a guest can ask for, and where it goes. - -use crate::linux::abi::{errno, nr}; +use crate::linux::abi::{errno, nr, nr_path as np}; use crate::linux::call; -use crate::linux::file; -use crate::linux::file::flags; use crate::linux::guest::Guest; -use crate::linux::net; -pub fn plain(guest: &mut Guest, nr: u64, a: [u64; 6]) -> u64 { +use super::table_file::file_ops; +use super::table_mem::mem_ops; +use super::table_net::net_ops; +use super::table_proc::proc_ops; + +pub fn plain(guest: &mut Guest, tid: u32, nr: u64, a: [u64; 6]) -> u64 { + if let Some(v) = file_ops(guest, tid, nr, a) { + return v; + } + if let Some(v) = net_ops(guest, tid, nr, a) { + return v; + } + if let Some(v) = mem_ops(guest, nr, a) { + return v; + } + if let Some(v) = proc_ops(guest, nr, a) { + return v; + } + rest(guest, tid, nr, a) +} + +fn rest(guest: &mut Guest, tid: u32, nr: u64, a: [u64; 6]) -> u64 { match nr { - nr::WRITE => call::write(guest, a[0], a[1], a[2]), - nr::WRITEV => call::writev(guest, a[0], a[1], a[2]), - nr::READ => call::read(guest, a[0], a[1], a[2]), - nr::CLOSE => call::close(guest, a[0]), - nr::SOCKET => net::socket(guest, a[0], a[1]), - nr::CONNECT => net::connect(guest, a[0], a[1], a[2]), - nr::SENDTO => call::write(guest, a[0], a[1], a[2]), - nr::RECVFROM => call::read(guest, a[0], a[1], a[2]), - nr::POLL => net::poll(guest, a[0], a[1]), - nr::SHUTDOWN => call::close(guest, a[0]), - nr::OPENAT => file::openat(guest, a[0], a[1], a[2]), - nr::OPEN => file::openat(guest, flags::AT_FDCWD, a[0], a[1]), - nr::LSEEK => file::lseek(guest, a[0], a[1], a[2]), - nr::FSTAT => file::fstat(guest, a[0], a[1]), - nr::STAT | nr::LSTAT => file::newfstatat(guest, flags::AT_FDCWD, a[0], a[1]), - nr::NEWFSTATAT => file::newfstatat(guest, a[0], a[1], a[2]), - nr::GETDENTS64 => file::getdents64(guest, a[0], a[1], a[2]), - nr::PREAD64 => file::pread64(guest, a[0], a[1], a[2], a[3]), - nr::GETCWD => file::getcwd(guest, a[0], a[1]), - nr::ACCESS => file::access(guest, a[0]), - nr::READLINK => file::readlink(guest, a[0]), nr::IOCTL => call::ioctl(guest, a[0], a[1]), - nr::FCNTL => call::fcntl(guest, a[0], a[1]), + nr::FCNTL => call::fcntl(guest, a[0], a[1], a[2]), nr::UNAME => call::uname(guest, a[0]), - nr::BRK => call::brk(guest, a[0]), - nr::MMAP => call::mmap(guest, call::MapReq::from_args(a)), - nr::MUNMAP => call::munmap(guest, a[0], a[1]), - nr::MPROTECT => call::mprotect(guest, a[0], a[1], a[2]), + np::GETRLIMIT => call::getrlimit(guest, a[0], a[1]), + np::UMASK => call::umask(guest, a[0]), + np::PRLIMIT64 => call::prlimit64(guest, a[1], a[2], a[3]), nr::RT_SIGACTION => call::rt_sigaction(guest, a[0], a[1], a[2]), nr::RT_SIGPROCMASK => call::rt_sigprocmask(guest, a[2]), nr::SIGALTSTACK => call::sigaltstack(guest, a[1]), - nr::MADVISE | nr::RSEQ | nr::SET_ROBUST_LIST => errno::ok(0), - nr::ARCH_PRCTL => call::arch_prctl(guest, a[0], a[1]), - nr::SET_TID_ADDRESS | nr::GETTID | nr::GETPID => errno::ok(guest.pid as u64), - nr::GETUID | nr::GETEUID | nr::GETGID | nr::GETEGID => errno::ok(0), - nr::CLOCK_GETTIME => call::clock_gettime(guest, a[0], a[1]), + nr::RSEQ | nr::SET_ROBUST_LIST => errno::ok(0), + nr::ARCH_PRCTL => call::arch_prctl(guest, tid, a[0], a[1]), nr::GETRANDOM => call::getrandom(guest, a[0], a[1], a[2]), nr::EXIT | nr::EXIT_GROUP => call::exit(guest, a[0]), other => super::unserved::unserved(other), diff --git a/userland/capsule_linux/src/linux/serve/table_file.rs b/userland/capsule_linux/src/linux/serve/table_file.rs new file mode 100644 index 000000000..96fd7f03a --- /dev/null +++ b/userland/capsule_linux/src/linux/serve/table_file.rs @@ -0,0 +1,74 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Calls that name a file or a descriptor. + +use crate::linux::abi::{nr, nr_path as np}; +use crate::linux::call; +use crate::linux::file; +use crate::linux::file::flags; +use crate::linux::guest::Guest; + +pub fn file_ops(guest: &mut Guest, tid: u32, nr: u64, a: [u64; 6]) -> Option { + let _ = tid; + Some(match nr { + nr::WRITE => call::write(guest, a[0], a[1], a[2]), + nr::WRITEV => call::writev(guest, a[0], a[1], a[2]), + nr::READ => call::read(guest, a[0], a[1], a[2]), + nr::CLOSE => call::close(guest, a[0]), + nr::MEMFD_CREATE => file::memfd_create(guest), + nr::FTRUNCATE => file::ftruncate(guest, a[0], a[1]), + nr::OPENAT => file::openat(guest, a[0], a[1], a[2]), + nr::OPEN => file::openat(guest, flags::AT_FDCWD, a[0], a[1]), + nr::LSEEK => file::lseek(guest, a[0], a[1], a[2]), + nr::FSTAT => file::fstat(guest, a[0], a[1]), + nr::STAT | nr::LSTAT => file::newfstatat(guest, flags::AT_FDCWD, a[0], a[1]), + nr::NEWFSTATAT => file::newfstatat(guest, a[0], a[1], a[2]), + nr::GETDENTS64 => file::getdents64(guest, a[0], a[1], a[2]), + nr::EPOLL_CREATE1 => file::epoll_create(guest), + nr::PIPE => call::pipe2(guest, a[0], 0), + nr::PIPE2 => call::pipe2(guest, a[0], a[1]), + nr::DUP => call::dup(guest, a[0]), + nr::DUP2 | nr::DUP3 => call::dup2(guest, a[0], a[1]), + nr::EPOLL_CTL => file::epoll_ctl(guest, a[0], a[1], a[2], a[3]), + nr::EPOLL_PWAIT => file::epoll_wait(guest, a[0], a[1], a[2]), + nr::TIMERFD_CREATE => file::timerfd_create(guest), + nr::TIMERFD_SETTIME => file::timerfd_settime(guest, a[0], a[2]), + nr::PREAD64 => file::pread64(guest, a[0], a[1], a[2], a[3]), + nr::GETCWD => call::getcwd(guest, a[0], a[1]), + np::CHDIR => call::chdir(guest, a[0]), + np::FCHDIR => call::fchdir(guest, a[0]), + np::MKDIR => file::mkdirat(guest, flags::AT_FDCWD, a[0]), + np::MKDIRAT => file::mkdirat(guest, a[0], a[1]), + np::RMDIR => file::rmdir(guest, a[0]), + np::UNLINK => file::unlinkat(guest, flags::AT_FDCWD, a[0], 0), + np::UNLINKAT => file::unlinkat(guest, a[0], a[1], a[2]), + np::RENAME => file::rename(guest, a[0], a[1]), + np::FSYNC => file::fsync(guest, a[0]), + np::READV => call::readv(guest, a[0], a[1], a[2]), + np::CHMOD => file::chmod(guest, a[0], a[1]), + np::FCHMOD => file::fchmod(guest, a[0], a[1]), + np::FCHMODAT => file::fchmodat(guest, a[0], a[1], a[2]), + np::FACCESSAT | np::FACCESSAT2 => file::faccessat(guest, a[0], a[1]), + np::STATFS | np::FSTATFS => file::statfs(guest, a[1]), + np::STATX => file::statx(guest, a[0], a[1], a[4]), + np::EPOLL_WAIT => file::epoll_wait(guest, a[0], a[1], a[2]), + nr::ACCESS => file::access(guest, a[0]), + nr::READLINK => file::readlink(guest, a[0]), + _ => return None, + }) +} diff --git a/userland/capsule_linux/src/linux/serve/table_mem.rs b/userland/capsule_linux/src/linux/serve/table_mem.rs new file mode 100644 index 000000000..f2e562f75 --- /dev/null +++ b/userland/capsule_linux/src/linux/serve/table_mem.rs @@ -0,0 +1,33 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Calls that shape the guest's address space. + +use crate::linux::abi::{errno, nr}; +use crate::linux::call; +use crate::linux::guest::Guest; + +pub fn mem_ops(guest: &mut Guest, nr: u64, a: [u64; 6]) -> Option { + Some(match nr { + nr::BRK => call::brk(guest, a[0]), + nr::MMAP => call::mmap(guest, call::MapReq::from_args(a)), + nr::MUNMAP => call::munmap(guest, a[0], a[1]), + nr::MPROTECT => call::mprotect(guest, a[0], a[1], a[2]), + // Advice, and this capsule takes none of it. + nr::MADVISE => errno::ok(0), + _ => return None, + }) +} diff --git a/userland/capsule_linux/src/linux/serve/table_net.rs b/userland/capsule_linux/src/linux/serve/table_net.rs new file mode 100644 index 000000000..1d65692f7 --- /dev/null +++ b/userland/capsule_linux/src/linux/serve/table_net.rs @@ -0,0 +1,42 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Calls that name a socket. + +use crate::linux::abi::{nr, nr_path as np}; +use crate::linux::call; +use crate::linux::guest::Guest; +use crate::linux::net; +use crate::linux::unix::{self, is_unix}; + +pub fn net_ops(guest: &mut Guest, tid: u32, nr: u64, a: [u64; 6]) -> Option { + let _ = tid; + Some(match nr { + nr::SOCKET if a[0] == 1 => unix::socket(guest, a[1]), + nr::SOCKET => net::socket(guest, a[0], a[1]), + nr::CONNECT if is_unix(guest, a[0]) => unix::connect(guest, a[0], a[1], a[2]), + nr::CONNECT => net::connect(guest, a[0], a[1], a[2]), + nr::SENDTO => net::sendto(guest, a[0], a[1], a[2], a[4], a[5]), + nr::RECVFROM => net::recvfrom(guest, a[0], a[1], a[2], a[4], a[5]), + nr::POLL => net::poll(guest, a[0], a[1]), + np::SELECT | np::PSELECT6 => net::select(guest, a[0], a[1], a[2]), + np::PPOLL => net::poll(guest, a[0], a[1]), + nr::SHUTDOWN => call::close(guest, a[0]), + nr::SENDMSG => unix::sendmsg(guest, a[0], a[1]), + nr::RECVMSG => unix::recvmsg(guest, a[0], a[1]), + _ => return None, + }) +} diff --git a/userland/capsule_linux/src/linux/serve/table_proc.rs b/userland/capsule_linux/src/linux/serve/table_proc.rs new file mode 100644 index 000000000..2b0adad92 --- /dev/null +++ b/userland/capsule_linux/src/linux/serve/table_proc.rs @@ -0,0 +1,45 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Who the guest is, what group it is in, and what time it thinks it is. + +use crate::linux::abi::{errno, nr, nr_path as np}; +use crate::linux::call; +use crate::linux::guest::Guest; + +pub fn proc_ops(guest: &mut Guest, nr: u64, a: [u64; 6]) -> Option { + Some(match nr { + np::KILL | np::TKILL => call::kill(guest, a[0], a[1]), + np::GETPPID => call::getppid(guest), + np::SETPGID => call::setpgid(guest, a[0], a[1]), + np::GETPGRP | np::GETPGID => call::getpgid(guest), + np::SETSID => call::setsid(guest), + np::GETSID => call::getsid(guest), + np::SETUID | np::SETGID => call::setuid(a[0]), + np::TIME => call::time(guest, a[0]), + np::GETTIMEOFDAY => call::gettimeofday(guest, a[0]), + np::NANOSLEEP | np::CLOCK_NANOSLEEP => call::nanosleep(guest, a[0]), + // A guest yielding is the personality yielding: one slot. + np::SCHED_YIELD => { + nonos_libc::mk_yield(); + errno::ok(0) + } + nr::SET_TID_ADDRESS | nr::GETTID | nr::GETPID => errno::ok(guest.pid as u64), + nr::GETUID | nr::GETEUID | nr::GETGID | nr::GETEGID => errno::ok(0), + nr::CLOCK_GETTIME => call::clock_gettime(guest, a[0], a[1]), + _ => return None, + }) +} diff --git a/userland/capsule_linux/src/linux/source.rs b/userland/capsule_linux/src/linux/source.rs index 735dddfe1..1ee2ffb30 100644 --- a/userland/capsule_linux/src/linux/source.rs +++ b/userland/capsule_linux/src/linux/source.rs @@ -14,32 +14,28 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Which program to run. -//! -//! The path comes from this capsule's own arguments, so the personality -//! runs whatever it was asked to run and is not a wrapper around one -//! binary. With no argument it falls back to the image built into it, -//! which exists so the mechanism can be proved on a machine with nothing -//! in the store yet. use alloc::vec::Vec; -use nonos_app_skeleton::clients::vfs::read_file; -use nonos_libc::{mk_args, mk_getpid}; +use nonos_libc::mk_args; + +use crate::linux::file::{key, store_read, visible}; -/// The proof image: a static Linux executable, embedded so the first run -/// needs no disk. -static BUILT_IN: &[u8] = include_bytes!("../../guests/hello.elf"); +use super::origin::Origin; + +/// The built-in program: Alpine's static busybox, embedded so a machine with +/// nothing in the store still runs a real Linux binary. +static BUILT_IN: &[u8] = include_bytes!("../../guests/busybox.elf"); const MAX_IMAGE: u32 = 64 << 20; const MAX_ARGS: usize = 256; -/// The program's path and its bytes. -pub fn source() -> (Vec, Vec) { +/// The program's path, its bytes, and where they came from. +pub fn source() -> (Vec, Vec, Origin) { match named() { - Some(pair) => pair, - None => (b"/guest/hello".to_vec(), BUILT_IN.to_vec()), + Some((path, bytes)) => (path, bytes, Origin::Store), + None => (b"/bin/busybox".to_vec(), BUILT_IN.to_vec(), Origin::BuiltIn), } } @@ -49,18 +45,18 @@ fn named() -> Option<(Vec, Vec)> { if n <= 0 { return None; } - /* - * The first argument is the path. Anything after it is the guest's - * own business and is not passed on yet: a program's argument vector - * has to be built into its stack before it starts, and only the path - * is needed to get it there. - */ + // The first argument is the path. let args = &buf[..n as usize]; let end = args.iter().position(|b| *b == 0 || *b == b' ').unwrap_or(args.len()); let path = args.get(..end)?; if path.is_empty() { return None; } - let bytes = read_file(mk_getpid() as u32, path, MAX_IMAGE).ok()?; - Some((path.to_vec(), bytes)) + /* + * The argument is not a guest's, but the program it names is a + * Linux one and lives where Linux programs live. + */ + let at = visible(b"/", path); + let bytes = store_read(&key(&at), MAX_IMAGE).ok()?; + Some((at, bytes)) } diff --git a/userland/capsule_linux/src/linux/start.rs b/userland/capsule_linux/src/linux/start.rs index 8b50a88e5..971da847d 100644 --- a/userland/capsule_linux/src/linux/start.rs +++ b/userland/capsule_linux/src/linux/start.rs @@ -14,37 +14,35 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - //! Bring one Linux program up and stay with it until it ends. -use nonos_libc::{heap_init, mk_debug, mk_exit, mk_foreign_spawn, mk_foreign_start}; +use nonos_libc::{heap_init, mk_debug, mk_exit, mk_foreign_spawn}; use super::guest::Guest; -use super::image; use super::serve::serve; use super::source::source; - -/// The stack top a guest wakes on, below the personality's own mappings -/// and above everything it maps for itself. -const STACK_TOP: u64 = 0x0000_7FFF_F000; - -/// The stack a guest gets, which is also the largest span one peer call -/// will map. Sixty-four kilobytes served a static binary and would have -/// overflowed under an interpreter recursing through a dependency graph, -/// as a fault inside the linker with nothing to read. -const STACK_SIZE: u64 = 1 << 20; +use super::start_guest::start; pub fn run() -> ! { let _ = heap_init(); say(b"[LINUX] personality up\n"); - let (path, bytes) = source(); + if let Some(name) = super::request::install_request() { + say(b"[LINUX] installing\n"); + let ok = super::install::install(&name); + say(if ok { b"[LINUX] installed\n" } else { b"[LINUX] install failed\n" }); + mk_exit(if ok { 0 } else { 1 }) + } + let (path, bytes, origin) = source(); let pid = mk_foreign_spawn(b"linux"); if pid < 0 { - say(b"[LINUX] no guest: refused\n"); + say(b"[LINUX] no guest, errno "); + let e = (-pid) as u32; + let digits = [b'0' + (e / 10 % 10) as u8, b'0' + (e % 10) as u8, b'\n']; + say(&digits); mk_exit(1) } let mut guest = Guest::new(pid as u32); - let code = match start(&mut guest, &path, &bytes) { + let code = match start(&mut guest, &path, &bytes, origin) { Ok(()) => { say(b"[LINUX] guest running\n"); serve(&mut guest) @@ -58,18 +56,6 @@ pub fn run() -> ! { mk_exit(code) } -fn start(guest: &mut Guest, path: &[u8], bytes: &[u8]) -> Result<(), &'static [u8]> { - let (image, entry, interp_base) = - image::program(guest, bytes).map_err(|_| &b"[LINUX] image refused\n"[..])?; - guest.map(STACK_TOP - STACK_SIZE, STACK_SIZE, true, false); - let rsp = image::build(guest, STACK_TOP, &image, interp_base, path) - .ok_or(&b"[LINUX] stack refused\n"[..])?; - match mk_foreign_start(guest.pid, entry, rsp) { - n if n < 0 => Err(&b"[LINUX] start refused\n"[..]), - _ => Ok(()), - } -} - -fn say(line: &[u8]) { +pub(super) fn say(line: &[u8]) { let _ = mk_debug(line.as_ptr(), line.len()); } diff --git a/userland/capsule_linux/src/linux/start_guest.rs b/userland/capsule_linux/src/linux/start_guest.rs new file mode 100644 index 000000000..fcf34697d --- /dev/null +++ b/userland/capsule_linux/src/linux/start_guest.rs @@ -0,0 +1,56 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Proving a program, laying it out, and making it runnable. + +use nonos_libc::mk_foreign_start; + +use super::guest::Guest; +use super::guest::{STACK_SIZE, STACK_TOP}; +use super::image; +use super::origin::Origin; +use super::start::say; + +pub(super) fn start( + guest: &mut Guest, + path: &[u8], + bytes: &[u8], + origin: Origin, +) -> Result<(), &'static [u8]> { + if let Err(why) = prove(path, bytes, origin) { + say(b"[LINUX] refused: "); + say(why.as_bytes()); + say(b"\n"); + return Err(&b"[LINUX] unproven program\n"[..]); + } + let (image, entry, interp_base) = image::program(guest, bytes).map_err(|e| e.why())?; + guest.map(STACK_TOP - STACK_SIZE, STACK_SIZE, true, false); + let argv = alloc::vec![path.to_vec()]; + let rsp = image::build(guest, STACK_TOP, &image, interp_base, &argv, &super::env::default()) + .ok_or(&b"[LINUX] stack refused\n"[..])?; + match mk_foreign_start(guest.pid, entry, rsp) { + n if n < 0 => Err(&b"[LINUX] start refused\n"[..]), + _ => Ok(()), + } +} + +/// A program out of the store proves itself against the enrolled set. +fn prove(path: &[u8], bytes: &[u8], origin: Origin) -> Result<(), &'static str> { + match origin { + Origin::BuiltIn => Ok(()), + Origin::Store => super::attest::verify(path, bytes).map(|_| ()), + } +} diff --git a/userland/capsule_linux/src/linux/unix/conn.rs b/userland/capsule_linux/src/linux/unix/conn.rs new file mode 100644 index 000000000..3c5da9370 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/conn.rs @@ -0,0 +1,49 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! One connection: what the client has said, and what it has not read. + +use alloc::vec::Vec; + +pub struct Conn { + /// Bytes the guest wrote and the server has not consumed. + pub to_server: Vec, + /// Bytes the server produced and the guest has not read. + pub to_client: Vec, + /// Descriptors the client passed in control data, in order. + pub fds: Vec, + /// Descriptors owed to the client, for the next control block. + pub give: Vec, +} + +impl Conn { + pub fn new() -> Conn { + Conn { to_server: Vec::new(), to_client: Vec::new(), fds: Vec::new(), give: Vec::new() } + } + + /// Take everything the server has produced, up to `want`. + pub fn drain(&mut self, want: usize) -> Vec { + let n = want.min(self.to_client.len()); + self.to_client.drain(..n).collect() + } +} + +impl Default for Conn { + fn default() -> Conn { + Conn::new() + } +} diff --git a/userland/capsule_linux/src/linux/unix/give.rs b/userland/capsule_linux/src/linux/unix/give.rs new file mode 100644 index 000000000..4b6b0577d --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/give.rs @@ -0,0 +1,68 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Handing a descriptor back to the client in control data. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +/// struct cmsghdr: len, level, type, then the descriptors. +const CMSG_DATA: usize = 16; +const SOL_SOCKET: u32 = 1; +const SCM_RIGHTS: u32 = 1; + +/// The control block for whatever is owed, or nothing when nothing is. +pub fn control(guest: &mut Guest) -> Option> { + if guest.display.give.is_empty() { + return None; + } + let fds = core::mem::take(&mut guest.display.give); + let len = CMSG_DATA + fds.len() * 4; + let mut out = Vec::with_capacity((len + 7) & !7); + out.extend_from_slice(&(len as u64).to_le_bytes()); + out.extend_from_slice(&SOL_SOCKET.to_le_bytes()); + out.extend_from_slice(&SCM_RIGHTS.to_le_bytes()); + for fd in fds { + out.extend_from_slice(&fd.to_le_bytes()); + } + while out.len() % 8 != 0 { + out.push(0); + } + Some(out) +} + +/// Write it into the guest's msghdr and say how long it was, since a +/// client reads msg_controllen and not the block's own length. +pub fn place(guest: &Guest, hdr: u64, block: &[u8]) -> bool { + let Some(raw) = guest.read(hdr, 56) else { + return false; + }; + let at = u64::from_le_bytes([ + raw[32], raw[33], raw[34], raw[35], raw[36], raw[37], raw[38], raw[39], + ]); + let room = u64::from_le_bytes([ + raw[40], raw[41], raw[42], raw[43], raw[44], raw[45], raw[46], raw[47], + ]); + if at == 0 || room < block.len() as u64 { + return false; + } + if guest.write(at, block) < block.len() as i64 { + return false; + } + guest.write(hdr + 40, &(block.len() as u64).to_le_bytes()) >= 8 +} diff --git a/userland/capsule_linux/src/linux/unix/mod.rs b/userland/capsule_linux/src/linux/unix/mod.rs new file mode 100644 index 000000000..b03ee7949 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/mod.rs @@ -0,0 +1,36 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Unix domain sockets, both ends inside this capsule. + +mod conn; +mod give; +mod msg; +mod msg_parts; +mod msg_rights; +mod path; +mod recvmsg; +mod sendmsg; +mod sock; +mod sock_io; + +pub use conn::Conn; +pub use sock::is_unix; +pub use recvmsg::recvmsg; +pub use sendmsg::sendmsg; +pub use sock::{connect, socket}; +pub use sock_io::{recv, send}; diff --git a/userland/capsule_linux/src/linux/unix/msg.rs b/userland/capsule_linux/src/linux/unix/msg.rs new file mode 100644 index 000000000..7d6bcbe73 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/msg.rs @@ -0,0 +1,51 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `sendmsg` and `recvmsg` on the display socket. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +/// struct msghdr on x86_64. +const IOV_AT: usize = 16; +const IOVLEN_AT: usize = 24; +const CONTROL_AT: usize = 32; +const CONTROLLEN_AT: usize = 40; +pub const MSGHDR_LEN: usize = 56; + +pub struct Msg { + pub bytes: Vec, + pub fds: Vec, +} + +pub fn read_msghdr(guest: &Guest, at: u64) -> Option { + let raw = guest.read(at, MSGHDR_LEN)?; + let iov = u64le(&raw, IOV_AT); + let iovlen = u64le(&raw, IOVLEN_AT); + let control = u64le(&raw, CONTROL_AT); + let controllen = u64le(&raw, CONTROLLEN_AT); + let bytes = super::msg_parts::gather(guest, iov, iovlen)?; + let fds = super::msg_rights::rights(guest, control, controllen); + Some(Msg { bytes, fds }) +} + +pub(super) fn u64le(b: &[u8], at: usize) -> u64 { + let mut w = [0u8; 8]; + w.copy_from_slice(&b[at..at + 8]); + u64::from_le_bytes(w) +} diff --git a/userland/capsule_linux/src/linux/unix/msg_parts.rs b/userland/capsule_linux/src/linux/unix/msg_parts.rs new file mode 100644 index 000000000..aa8bf62d6 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/msg_parts.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The data half of a msghdr: the iovecs, joined. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +use super::msg::u64le; + +/// The iovecs, joined. Each is a pointer and a length, sixteen bytes. +pub(super) fn gather(guest: &Guest, iov: u64, count: u64) -> Option> { + let mut out = Vec::new(); + for i in 0..count.min(64) { + let entry = guest.read(iov + i * 16, 16)?; + let base = u64le(&entry, 0); + let len = u64le(&entry, 8); + if len == 0 { + continue; + } + out.extend_from_slice(&guest.read(base, len.min(1 << 20) as usize)?); + } + Some(out) +} diff --git a/userland/capsule_linux/src/linux/unix/msg_rights.rs b/userland/capsule_linux/src/linux/unix/msg_rights.rs new file mode 100644 index 000000000..d8c280114 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/msg_rights.rs @@ -0,0 +1,62 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The descriptors in a control block. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +use super::msg::u64le; + +/// struct cmsghdr: len, level, type, then the data. +const CMSG_DATA: usize = 16; +const SOL_SOCKET: u32 = 1; +const SCM_RIGHTS: u32 = 1; + +/// Every descriptor in an SCM_RIGHTS block. Anything else in the control +/// data is skipped rather than guessed at. +pub(super) fn rights(guest: &Guest, at: u64, len: u64) -> Vec { + let mut out = Vec::new(); + let Some(raw) = guest.read(at, len.min(1024) as usize) else { + return out; + }; + let mut off = 0usize; + while off + CMSG_DATA <= raw.len() { + let size = u64le(&raw, off) as usize; + let level = u32le(&raw, off + 8); + let kind = u32le(&raw, off + 12); + if size < CMSG_DATA || off + size > raw.len() { + break; + } + if level == SOL_SOCKET && kind == SCM_RIGHTS { + let mut at = off + CMSG_DATA; + while at + 4 <= off + size { + out.push(u32le(&raw, at)); + at += 4; + } + } + off += (size + 7) & !7; + } + out +} + +fn u32le(b: &[u8], at: usize) -> u32 { + let mut w = [0u8; 4]; + w.copy_from_slice(&b[at..at + 4]); + u32::from_le_bytes(w) +} diff --git a/userland/capsule_linux/src/linux/unix/path.rs b/userland/capsule_linux/src/linux/unix/path.rs new file mode 100644 index 000000000..834a5d096 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/path.rs @@ -0,0 +1,49 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `struct sockaddr_un` out of a guest, and which server it names. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +const AF_UNIX: u16 = 1; +/// family(2) then a 108 byte path. +const SUN_LEN: usize = 110; + +/// The display socket a Wayland client looks for. +const DISPLAY: &[u8] = b"wayland-0"; + +pub fn sun_path(guest: &Guest, at: u64, len: u64) -> Option> { + let take = (len as usize).min(SUN_LEN); + if take < 3 { + return None; + } + let raw = guest.read(at, take)?; + if u16::from_le_bytes([raw[0], raw[1]]) != AF_UNIX { + return None; + } + let body = &raw[2..]; + let end = body.iter().position(|b| *b == 0).unwrap_or(body.len()); + Some(body[..end].to_vec()) +} + +/// True when the path ends in the display socket's name, whatever +/// directory the client was told to look in. +pub fn is_display(path: &[u8]) -> bool { + path.ends_with(DISPLAY) +} diff --git a/userland/capsule_linux/src/linux/unix/recvmsg.rs b/userland/capsule_linux/src/linux/unix/recvmsg.rs new file mode 100644 index 000000000..a4448704b --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/recvmsg.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `recvmsg` on the display socket. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; + +use super::msg::{u64le, MSGHDR_LEN}; +use super::sock::connected; + +/// The reply goes into the first iovec only. +pub fn recvmsg(guest: &mut Guest, fd: u64, at: u64) -> u64 { + if !connected(guest, fd) { + return errno::fail(errno::ENOTCONN); + } + let Some(raw) = guest.read(at, MSGHDR_LEN) else { + return errno::fail(errno::EFAULT); + }; + let Some((base, len)) = first_iov(guest, &raw) else { + return errno::fail(errno::EFAULT); + }; + crate::linux::wayland::pump(guest); + if let Some(block) = super::give::control(guest) { + super::give::place(guest, at, &block); + } + let bytes = guest.display.drain(len as usize); + if bytes.is_empty() { + return errno::fail(errno::EAGAIN); + } + if guest.write(base, &bytes) < bytes.len() as i64 { + return errno::fail(errno::EFAULT); + } + errno::ok(bytes.len() as u64) +} + +fn first_iov(guest: &Guest, hdr: &[u8]) -> Option<(u64, u64)> { + let iov = u64le(hdr, 16); + let count = u64le(hdr, 24); + if count == 0 { + return None; + } + let entry = guest.read(iov, 16)?; + Some((u64le(&entry, 0), u64le(&entry, 8))) +} diff --git a/userland/capsule_linux/src/linux/unix/sendmsg.rs b/userland/capsule_linux/src/linux/unix/sendmsg.rs new file mode 100644 index 000000000..a1f9ed4f2 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/sendmsg.rs @@ -0,0 +1,39 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `sendmsg` and `recvmsg`, which is how libwayland actually talks. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::wayland; + +use super::msg::read_msghdr; +use super::sock::connected; + +pub fn sendmsg(guest: &mut Guest, fd: u64, at: u64) -> u64 { + if !connected(guest, fd) { + return errno::fail(errno::ENOTCONN); + } + let Some(msg) = read_msghdr(guest, at) else { + return errno::fail(errno::EFAULT); + }; + let sent = msg.bytes.len() as u64; + guest.display.fds.extend_from_slice(&msg.fds); + guest.display.to_server.extend_from_slice(&msg.bytes); + wayland::serve(guest); + errno::ok(sent) +} diff --git a/userland/capsule_linux/src/linux/unix/sock.rs b/userland/capsule_linux/src/linux/unix/sock.rs new file mode 100644 index 000000000..2e290cd5e --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/sock.rs @@ -0,0 +1,65 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The four calls a client makes on a display socket. + +use crate::linux::abi::errno; +use crate::linux::guest::{Fd, Guest, Kind}; + +use super::path::{is_display, sun_path}; + +const SOCK_STREAM: u64 = 1; +const TYPE_MASK: u64 = 0xFF; + +pub fn socket(guest: &mut Guest, kind: u64) -> u64 { + if kind & TYPE_MASK != SOCK_STREAM { + return errno::fail(errno::ENOSYS); + } + match crate::linux::file::install(guest, Fd::unix()) { + Some(n) => errno::ok(n), + None => errno::fail(errno::EMFILE), + } +} + +pub fn connect(guest: &mut Guest, fd: u64, at: u64, len: u64) -> u64 { + let Some(path) = sun_path(guest, at, len) else { + return errno::fail(errno::EINVAL); + }; + if !is_display(&path) { + /* + * Nothing else listens in here, and a client that reaches a socket + * which silently accepts would block forever on a reply. + */ + return errno::fail(errno::ECONNREFUSED); + } + match guest.fds.get_mut(fd as usize) { + Some(entry) if entry.kind == Kind::Unix => { + entry.writable = true; + errno::ok(0) + } + _ => errno::fail(errno::ENOTSOCK), + } +} + +/// True when this descriptor is one of ours rather than a network one. +pub fn is_unix(guest: &Guest, fd: u64) -> bool { + matches!(guest.fds.get(fd as usize), Some(f) if f.kind == Kind::Unix) +} + +pub(super) fn connected(guest: &Guest, fd: u64) -> bool { + matches!(guest.fds.get(fd as usize), Some(f) if f.kind == Kind::Unix && f.writable) +} diff --git a/userland/capsule_linux/src/linux/unix/sock_io.rs b/userland/capsule_linux/src/linux/unix/sock_io.rs new file mode 100644 index 000000000..a4ec74032 --- /dev/null +++ b/userland/capsule_linux/src/linux/unix/sock_io.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Bytes to and from the display socket. + +use crate::linux::abi::errno; +use crate::linux::guest::Guest; +use crate::linux::wayland; + +use super::sock::connected; + +/// A write is a batch of requests. +pub fn send(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { + let take = len.min(1 << 20); + let Some(bytes) = guest.read(buf, take as usize) else { + return errno::fail(errno::EFAULT); + }; + if !connected(guest, fd) { + return errno::fail(errno::ENOTCONN); + } + guest.display.to_server.extend_from_slice(&bytes); + wayland::serve(guest); + errno::ok(take) +} + +pub fn recv(guest: &mut Guest, fd: u64, buf: u64, len: u64) -> u64 { + if !connected(guest, fd) { + return errno::fail(errno::ENOTCONN); + } + wayland::pump(guest); + let bytes = guest.display.drain(len as usize); + if bytes.is_empty() { + // Non-blocking is what a toolkit asks for; it polls. + return errno::fail(errno::EAGAIN); + } + if guest.write(buf, &bytes) < bytes.len() as i64 { + return errno::fail(errno::EFAULT); + } + errno::ok(bytes.len() as u64) +} diff --git a/userland/capsule_linux/src/linux/wayland/args.rs b/userland/capsule_linux/src/linux/wayland/args.rs new file mode 100644 index 000000000..14b8453fb --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/args.rs @@ -0,0 +1,47 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The argument cursor. + +pub struct Args<'a> { + at: usize, + body: &'a [u8], +} + +impl<'a> Args<'a> { + pub fn new(body: &'a [u8]) -> Args<'a> { + Args { at: 0, body } + } + + pub fn u32(&mut self) -> Option { + let w = self.body.get(self.at..self.at + 4)?; + self.at += 4; + Some(u32::from_le_bytes([w[0], w[1], w[2], w[3]])) + } + + /// The bytes without the terminator. The field on the wire is padded + /// to a word and the cursor skips the padding, never the caller. + pub fn string(&mut self) -> Option<&'a [u8]> { + let len = self.u32()? as usize; + if len == 0 { + return Some(&[]); + } + let text = self.body.get(self.at..self.at + len - 1)?; + self.at += (len + 3) & !3; + Some(text) + } +} diff --git a/userland/capsule_linux/src/linux/wayland/buffer.rs b/userland/capsule_linux/src/linux/wayland/buffer.rs new file mode 100644 index 000000000..fd3caff95 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/buffer.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `wl_shm_pool.create_buffer`: a rectangle inside a pool. + +use crate::linux::guest::Guest; + +use super::args::Args; +use super::object::Object; +use super::state::Buffer; + +/// Bytes per pixel in both formats this capsule advertises. +const BPP: u64 = 4; + +pub fn create_buffer(guest: &mut Guest, pool: u32, args: &mut Args<'_>) { + let (Some(id), Some(offset), Some(width), Some(height), Some(stride), Some(_fmt)) = + (args.u32(), args.u32(), args.u32(), args.u32(), args.u32(), args.u32()) + else { + return; + }; + let Some(size) = guest.scene.pools.iter().find(|p| p.id == pool).map(|p| p.size) else { + return; + }; + if !fits(offset as u64, width as u64, height as u64, stride as u64, size) { + return; + } + guest.objects.put(id, Object::Buffer); + guest.scene.buffers.push(Buffer { id, pool, offset: offset as u64, width, height, stride }); +} + +/// Whether the rectangle lies wholly inside a pool of `size` bytes. +fn fits(offset: u64, width: u64, height: u64, stride: u64, size: u64) -> bool { + if width == 0 || height == 0 { + return false; + } + let Some(row) = width.checked_mul(BPP) else { + return false; + }; + if stride < row { + return false; + } + let Some(span) = stride.checked_mul(height) else { + return false; + }; + matches!(offset.checked_add(span), Some(end) if end <= size) +} diff --git a/userland/capsule_linux/src/linux/wayland/commit.rs b/userland/capsule_linux/src/linux/wayland/commit.rs new file mode 100644 index 000000000..9a715d24b --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/commit.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `wl_surface.commit`: the only request that reaches the screen. + +use alloc::vec::Vec; + +use crate::linux::guest::Guest; + +use super::ops::ev; +use super::out::Event; +use super::present::present; + +/// A commit with a buffer is the only thing that reaches the screen. +pub fn commit(guest: &mut Guest, id: u32) { + let Some(buffer) = surface_buffer(guest, id) else { + return; + }; + present(guest, buffer); + Event::new(buffer, ev::BUFFER_RELEASE).send(&mut guest.display.to_client); + let owed = take_frames(guest, id); + for callback in owed { + Event::new(callback, ev::CALLBACK_DONE).u32(0).send(&mut guest.display.to_client); + } +} + +fn surface_buffer(guest: &Guest, id: u32) -> Option { + guest.scene.surfaces.iter().find(|s| s.id == id)?.pending +} + +fn take_frames(guest: &mut Guest, id: u32) -> Vec { + match guest.scene.surfaces.iter_mut().find(|s| s.id == id) { + Some(s) => core::mem::take(&mut s.frames), + None => Vec::new(), + } +} diff --git a/userland/capsule_linux/src/linux/wayland/handlers.rs b/userland/capsule_linux/src/linux/wayland/handlers.rs new file mode 100644 index 000000000..f3bc0a341 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/handlers.rs @@ -0,0 +1,75 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The three requests a client makes before it asks for anything real. + +use crate::linux::guest::Guest; + +use super::object::Object; +use super::out::Event; +use super::registry::{by_name, GLOBALS}; +use super::args::Args; + +const CALLBACK_DONE: u16 = 0; +const REGISTRY_GLOBAL: u16 = 0; +const SEAT_CAPABILITIES: u16 = 0; +/// A pointer and a keyboard, which is what the input events carry. +const SEAT_POINTER_AND_KEYBOARD: u32 = 3; + +/// Nothing here is asynchronous, so a sync is done the moment it is +/// asked for and the callback fires in the same batch. +pub fn sync(guest: &mut Guest, args: &mut Args<'_>) { + let Some(id) = args.u32() else { return }; + Event::new(id, CALLBACK_DONE).u32(0).send(&mut guest.display.to_client); +} + +pub fn registry(guest: &mut Guest, args: &mut Args<'_>) { + let Some(id) = args.u32() else { return }; + guest.objects.put(id, Object::Registry); + for global in GLOBALS { + Event::new(id, REGISTRY_GLOBAL) + .u32(global.name) + .string(global.interface) + .u32(global.version) + .send(&mut guest.display.to_client); + } +} + +fn seat_caps(guest: &mut Guest, id: u32) { + Event::new(id, SEAT_CAPABILITIES) + .u32(SEAT_POINTER_AND_KEYBOARD) + .send(&mut guest.display.to_client); +} + +pub fn bind(guest: &mut Guest, args: &mut Args<'_>) { + let (Some(name), Some(_iface), Some(_ver), Some(id)) = + (args.u32(), args.string(), args.u32(), args.u32()) + else { + return; + }; + let Some(global) = by_name(name) else { return }; + guest.objects.put(id, global.object); + match global.object { + /* + * A client reads the format list before it asks for a pool, and + * a seat's capabilities before it asks for a keyboard. Both are + */ + Object::Shm => crate::linux::wayland::shm::formats(guest, id), + Object::Seat => seat_caps(guest, id), + _ => {} + } +} diff --git a/userland/capsule_linux/src/linux/wayland/input.rs b/userland/capsule_linux/src/linux/wayland/input.rs new file mode 100644 index 000000000..83ae31ab0 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/input.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! NONOS input events, as Wayland sees them. + +use nonos_libc::{mk_input_event_drain, InputEvent}; + +use crate::linux::guest::Guest; + +use super::input_key::key; +use super::input_send::{button, motion}; + +/// Events taken in one pass. A deeper backlog is drained on the next. +const BATCH: usize = 32; + +const KEY_DOWN: u16 = 0; +const KEY_UP: u16 = 1; +const POINTER_ABS: u16 = 3; +const BUTTON_DOWN: u16 = 5; +const BUTTON_UP: u16 = 6; + +pub fn pump(guest: &mut Guest) { + if guest.scene.pointer.is_none() && guest.scene.keyboard.is_none() { + return; + } + let mut events = [InputEvent::default(); BATCH]; + let n = mk_input_event_drain(events.as_mut_ptr(), BATCH as u64); + if n <= 0 { + return; + } + for event in events.iter().take(n as usize) { + deliver(guest, event); + } +} + +fn deliver(guest: &mut Guest, event: &InputEvent) { + match event.kind { + KEY_DOWN => key(guest, event.code, 1), + KEY_UP => key(guest, event.code, 0), + POINTER_ABS => motion(guest, event.x, event.y), + BUTTON_DOWN => button(guest, event.code, 1), + BUTTON_UP => button(guest, event.code, 0), + _ => {} + } +} diff --git a/userland/capsule_linux/src/linux/wayland/input_enter.rs b/userland/capsule_linux/src/linux/wayland/input_enter.rs new file mode 100644 index 000000000..5fcbd1047 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/input_enter.rs @@ -0,0 +1,65 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The enter events a client needs before it will act on input. + +use crate::linux::guest::Guest; + +use super::out::Event; + +const POINTER_ENTER: u16 = 0; +const KEYBOARD_ENTER: u16 = 1; + +fn fixed(value: i32) -> u32 { + (value << 8) as u32 +} + +pub fn enter_once(guest: &mut Guest, pointer: u32, x: i32, y: i32) { + if guest.scene.pointer_entered { + return; + } + let Some(surface) = guest.scene.surfaces.first().map(|s| s.id) else { + return; + }; + let serial = guest.scene.next_serial(); + Event::new(pointer, POINTER_ENTER) + .u32(serial) + .u32(surface) + .u32(fixed(x)) + .u32(fixed(y)) + .send(&mut guest.display.to_client); + guest.scene.pointer_entered = true; +} + +/// The keys array is empty: nothing is held down at the moment a client is +/// told it has focus, and claiming otherwise would leave it with a key stuck +/// until the matching release it never saw. +pub fn keyboard_enter_once(guest: &mut Guest, keyboard: u32) { + if guest.scene.keyboard_entered { + return; + } + let Some(surface) = guest.scene.surfaces.first().map(|s| s.id) else { + return; + }; + let serial = guest.scene.next_serial(); + Event::new(keyboard, KEYBOARD_ENTER) + .u32(serial) + .u32(surface) + .u32(0) + .send(&mut guest.display.to_client); + guest.scene.keyboard_entered = true; +} diff --git a/userland/capsule_linux/src/linux/wayland/input_key.rs b/userland/capsule_linux/src/linux/wayland/input_key.rs new file mode 100644 index 000000000..8b86347d6 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/input_key.rs @@ -0,0 +1,43 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! A key event, written to the client. + +use crate::linux::guest::Guest; + +use super::input_enter::keyboard_enter_once; +use super::out::Event; + +/// wl_keyboard: key is 3. +const KEYBOARD_KEY: u16 = 3; + +pub fn key(guest: &mut Guest, code: u32, state: u32) { + let Some(id) = guest.scene.keyboard else { return }; + keyboard_enter_once(guest, id); + let serial = guest.scene.next_serial(); + let time = time_ms(); + Event::new(id, KEYBOARD_KEY) + .u32(serial) + .u32(time) + .u32(code) + .u32(state) + .send(&mut guest.display.to_client); +} + +fn time_ms() -> u32 { + nonos_libc::mk_uptime_ms().max(0) as u32 +} diff --git a/userland/capsule_linux/src/linux/wayland/input_send.rs b/userland/capsule_linux/src/linux/wayland/input_send.rs new file mode 100644 index 000000000..fddb4ef8d --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/input_send.rs @@ -0,0 +1,62 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! One input event, written to the client. + +use crate::linux::guest::Guest; + +use super::input_enter::enter_once; +use super::out::Event; + +/// wl_pointer: motion 2, button 3, frame 5. +const POINTER_MOTION: u16 = 2; +const POINTER_BUTTON: u16 = 3; +const POINTER_FRAME: u16 = 5; + +/// Wayland carries a surface coordinate as 24.8 fixed point. +fn fixed(value: i32) -> u32 { + (value << 8) as u32 +} + +pub fn motion(guest: &mut Guest, x: i32, y: i32) { + let Some(id) = guest.scene.pointer else { return }; + enter_once(guest, id, x, y); + let time = time_ms(); + Event::new(id, POINTER_MOTION) + .u32(time) + .u32(fixed(x)) + .u32(fixed(y)) + .send(&mut guest.display.to_client); + Event::new(id, POINTER_FRAME).send(&mut guest.display.to_client); +} + +pub fn button(guest: &mut Guest, code: u32, state: u32) { + let Some(id) = guest.scene.pointer else { return }; + let serial = guest.scene.next_serial(); + let time = time_ms(); + Event::new(id, POINTER_BUTTON) + .u32(serial) + .u32(time) + .u32(code) + .u32(state) + .send(&mut guest.display.to_client); + Event::new(id, POINTER_FRAME).send(&mut guest.display.to_client); +} + +fn time_ms() -> u32 { + nonos_libc::mk_uptime_ms().max(0) as u32 +} diff --git a/userland/capsule_linux/src/linux/wayland/keymap.rs b/userland/capsule_linux/src/linux/wayland/keymap.rs new file mode 100644 index 000000000..f9560fd6f --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/keymap.rs @@ -0,0 +1,51 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `wl_keyboard.keymap`. + +use crate::linux::file::install; +use crate::linux::guest::{Fd, Guest}; + +use super::keymap_file::load; +use super::out::Event; + +const KEYBOARD_KEYMAP: u16 = 0; +const FORMAT_NO_KEYMAP: u32 = 0; +const FORMAT_XKB_V1: u32 = 1; + +pub fn send(guest: &mut Guest, keyboard: u32) { + let text = load(); + let (format, size) = match &text { + Some(bytes) => (FORMAT_XKB_V1, bytes.len() as u32 + 1), + None => (FORMAT_NO_KEYMAP, 1), + }; + let Some(fd) = install(guest, Fd::memfd()) else { + return; + }; + if let Some(entry) = guest.fds.get_mut(fd as usize) { + entry.size = size as u64; + if let Some(bytes) = text { + entry.pending = bytes; + entry.pending.push(0); + } + } + guest.display.give.push(fd as u32); + Event::new(keyboard, KEYBOARD_KEYMAP) + .u32(format) + .u32(size) + .send(&mut guest.display.to_client); +} diff --git a/userland/capsule_linux/src/linux/wayland/keymap_file.rs b/userland/capsule_linux/src/linux/wayland/keymap_file.rs new file mode 100644 index 000000000..80ec04e05 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/keymap_file.rs @@ -0,0 +1,41 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Reading the keymap out of the store, once. + +use alloc::vec::Vec; + +use nonos_app_skeleton::clients::vfs::read_file; +use nonos_libc::{mk_debug, mk_getpid}; + +/// Where a keymap is installed. Produced by xkbcli compile-keymap and +/// packed into the store like any other data file. +const PATH: &[u8] = b"/usr/share/nonos/keymap.xkb"; + +/// An xkb keymap is tens of kilobytes; anything far larger is not one. +const MAX: u32 = 1 << 20; + +pub fn load() -> Option> { + match read_file(mk_getpid(), PATH, MAX) { + Ok(bytes) if !bytes.is_empty() => Some(bytes), + _ => { + let line = b"[WAYLAND] no keymap in the store, keys will carry no symbols\n"; + let _ = mk_debug(line.as_ptr(), line.len()); + None + } + } +} diff --git a/userland/capsule_linux/src/linux/wayland/mod.rs b/userland/capsule_linux/src/linux/wayland/mod.rs new file mode 100644 index 000000000..874b1d63f --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/mod.rs @@ -0,0 +1,50 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The display server a Wayland client finds when it connects. + +mod args; +mod buffer; +mod commit; +mod handlers; +mod input; +mod input_enter; +mod input_key; +mod input_send; +mod object; +mod ops; +mod keymap; +mod keymap_file; +mod scene; +mod seat; +mod present; +mod present_surface; +pub mod shm; +mod surface; +mod xdg; +mod state; +mod out; +mod registry; +mod route; +mod serve; +mod unserved; +mod wire; + +pub use object::Objects; +pub use scene::Scene; +pub use input::pump; +pub use serve::serve; diff --git a/userland/capsule_linux/src/linux/wayland/object.rs b/userland/capsule_linux/src/linux/wayland/object.rs new file mode 100644 index 000000000..59bbec153 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/object.rs @@ -0,0 +1,70 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The client's object table. + +use alloc::vec::Vec; + +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum Object { + Display, + Registry, + Callback, + Compositor, + Shm, + ShmPool, + Buffer, + Surface, + XdgBase, + XdgSurface, + XdgToplevel, + Seat, + Pointer, + Keyboard, +} + +pub struct Objects { + slots: Vec<(u32, Object)>, +} + +impl Objects { + /// Object 1 is the display, always, before a client says anything. + pub fn new() -> Objects { + Objects { slots: alloc::vec![(1, Object::Display)] } + } + + pub fn get(&self, id: u32) -> Option { + self.slots.iter().find(|(k, _)| *k == id).map(|(_, v)| *v) + } + + pub fn put(&mut self, id: u32, what: Object) { + match self.slots.iter_mut().find(|(k, _)| *k == id) { + Some(slot) => slot.1 = what, + None => self.slots.push((id, what)), + } + } + + pub fn drop_id(&mut self, id: u32) { + self.slots.retain(|(k, _)| *k != id); + } +} + +impl Default for Objects { + fn default() -> Objects { + Objects::new() + } +} diff --git a/userland/capsule_linux/src/linux/wayland/ops.rs b/userland/capsule_linux/src/linux/wayland/ops.rs new file mode 100644 index 000000000..5a5a69f62 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/ops.rs @@ -0,0 +1,61 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Request and event opcodes, transcribed from the protocol definitions. + +pub mod req { + pub const DISPLAY_SYNC: u16 = 0; + pub const DISPLAY_GET_REGISTRY: u16 = 1; + pub const REGISTRY_BIND: u16 = 0; + + pub const COMPOSITOR_CREATE_SURFACE: u16 = 0; + + pub const SHM_CREATE_POOL: u16 = 0; + pub const POOL_CREATE_BUFFER: u16 = 0; + pub const POOL_DESTROY: u16 = 1; + pub const BUFFER_DESTROY: u16 = 0; + + pub const SURFACE_DESTROY: u16 = 0; + pub const SURFACE_ATTACH: u16 = 1; + pub const SURFACE_DAMAGE: u16 = 2; + pub const SURFACE_FRAME: u16 = 3; + pub const SURFACE_COMMIT: u16 = 6; + pub const SURFACE_DAMAGE_BUFFER: u16 = 9; + + pub const XDG_BASE_GET_SURFACE: u16 = 2; + pub const XDG_BASE_PONG: u16 = 3; + pub const XDG_SURFACE_GET_TOPLEVEL: u16 = 1; + pub const XDG_SURFACE_SET_GEOMETRY: u16 = 3; + pub const XDG_SURFACE_ACK_CONFIGURE: u16 = 4; + pub const TOPLEVEL_SET_TITLE: u16 = 2; + pub const TOPLEVEL_SET_APP_ID: u16 = 3; + + pub const SEAT_GET_POINTER: u16 = 0; + pub const SEAT_GET_KEYBOARD: u16 = 1; +} + +pub mod ev { + pub const CALLBACK_DONE: u16 = 0; + pub const SHM_FORMAT: u16 = 0; + pub const BUFFER_RELEASE: u16 = 0; + pub const XDG_SURFACE_CONFIGURE: u16 = 0; + pub const TOPLEVEL_CONFIGURE: u16 = 0; +} + +/// wl_shm formats. Zero and one are the two every client understands. +pub const FORMAT_ARGB8888: u32 = 0; +pub const FORMAT_XRGB8888: u32 = 1; diff --git a/userland/capsule_linux/src/linux/wayland/out.rs b/userland/capsule_linux/src/linux/wayland/out.rs new file mode 100644 index 000000000..e54a7cd91 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/out.rs @@ -0,0 +1,59 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Building an event for the client. + +use alloc::vec::Vec; + +use super::wire::HEADER; + +pub struct Event { + body: Vec, +} + +impl Event { + pub fn new(object: u32, opcode: u16) -> Event { + let mut body = Vec::with_capacity(HEADER + 16); + body.extend_from_slice(&object.to_le_bytes()); + body.extend_from_slice(&opcode.to_le_bytes()); + body.extend_from_slice(&0u16.to_le_bytes()); + Event { body } + } + + pub fn u32(mut self, value: u32) -> Event { + self.body.extend_from_slice(&value.to_le_bytes()); + self + } + + /// A string is its length including the terminator, the bytes, the + /// terminator, then zeroes up to the next word. + pub fn string(mut self, text: &[u8]) -> Event { + self.body.extend_from_slice(&(text.len() as u32 + 1).to_le_bytes()); + self.body.extend_from_slice(text); + self.body.push(0); + while !self.body.len().is_multiple_of(4) { + self.body.push(0); + } + self + } + + pub fn send(mut self, to_client: &mut Vec) { + let size = self.body.len() as u16; + self.body[6..8].copy_from_slice(&size.to_le_bytes()); + to_client.extend_from_slice(&self.body); + } +} diff --git a/userland/capsule_linux/src/linux/wayland/present.rs b/userland/capsule_linux/src/linux/wayland/present.rs new file mode 100644 index 000000000..3e574c469 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/present.rs @@ -0,0 +1,57 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! Getting the client's pixels onto a NONOS surface. + +use crate::linux::guest::Guest; + +use super::present_surface::surface; +use super::scene::Scene; + +pub fn present(guest: &mut Guest, buffer: u32) { + let Some((at, width, height, stride, bytes)) = source(&guest.scene, buffer) else { + return; + }; + /* + * The descriptor handed to the kernel holds this buffer's address, so it + * is allocated once and written in place afterwards. + */ + if guest.scene.pixels.len() < bytes { + if guest.scene.out.is_some() { + return; + } + guest.scene.pixels.resize(bytes, 0); + } + let Some(src) = guest.read(at, bytes) else { + return; + }; + guest.scene.pixels[..bytes].copy_from_slice(&src); + if let Some(handle) = surface(&mut guest.scene, width, height, stride) { + let _ = nonos_libc::mk_surface_present_rect(handle, 0, 0, width, height); + } +} + +/// Where the pixels are, how they are shaped, and how many bytes that is. +fn source(scene: &Scene, buffer: u32) -> Option<(u64, u32, u32, u32, usize)> { + let b = scene.buffers.iter().find(|b| b.id == buffer)?; + let pool = scene.pools.iter().find(|p| p.id == b.pool)?; + let at = pool.at.checked_add(b.offset)?; + let bytes = (b.stride as u64).checked_mul(b.height as u64)?; + if bytes == 0 || b.offset.checked_add(bytes)? > pool.size { + return None; + } + Some((at, b.width, b.height, b.stride, bytes as usize)) +} diff --git a/userland/capsule_linux/src/linux/wayland/present_surface.rs b/userland/capsule_linux/src/linux/wayland/present_surface.rs new file mode 100644 index 000000000..31fe9f6c8 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/present_surface.rs @@ -0,0 +1,61 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Registering the NONOS surface the pixels land on. + +use nonos_app_skeleton::clients::compositor::scene_submit; +use nonos_app_skeleton::discover::lookup_port; +use nonos_libc::{mk_surface_register, SurfaceDescriptor}; + +use super::scene::Scene; + +/// SURFACE_FORMAT_ARGB8888 in the surface registry, which is one there +/// and zero in wl_shm. The two numbers are unrelated and both are right. +const FORMAT_ARGB8888: u32 = 1; + +/// Registered once, on the first commit: its size is the first buffer's, +/// and a client does not say before then. +pub fn surface(scene: &mut Scene, width: u32, height: u32, stride: u32) -> Option { + if let Some(handle) = scene.out { + return Some(handle); + } + let desc = SurfaceDescriptor { + width, + height, + stride, + format: FORMAT_ARGB8888, + byte_len: scene.pixels.len() as u64, + base_va: scene.pixels.as_ptr() as u64, + flags: 0, + }; + let handle = mk_surface_register(&desc); + if handle < 0 { + return None; + } + scene.out = Some(handle as u64); + place(handle as u64, width, height); + Some(handle as u64) +} + +/// Registering a surface makes it exist; the compositor still has to be +/// told where it goes, or it is never drawn. +fn place(handle: u64, width: u32, height: u32) { + let Some(port) = lookup_port(b"compositor") else { + return; + }; + let _ = scene_submit(port, 1, handle, 0, 0, width, height, 0); +} diff --git a/userland/capsule_linux/src/linux/wayland/registry.rs b/userland/capsule_linux/src/linux/wayland/registry.rs new file mode 100644 index 000000000..efb660c64 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/registry.rs @@ -0,0 +1,38 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The globals a client is told about, and what binding one means. + +use super::object::Object; + +pub struct Global { + pub name: u32, + pub interface: &'static [u8], + pub version: u32, + pub object: Object, +} + +pub const GLOBALS: &[Global] = &[ + Global { name: 1, interface: b"wl_compositor", version: 4, object: Object::Compositor }, + Global { name: 2, interface: b"wl_shm", version: 1, object: Object::Shm }, + Global { name: 3, interface: b"xdg_wm_base", version: 2, object: Object::XdgBase }, + Global { name: 4, interface: b"wl_seat", version: 5, object: Object::Seat }, +]; + +pub fn by_name(name: u32) -> Option<&'static Global> { + GLOBALS.iter().find(|g| g.name == name) +} diff --git a/userland/capsule_linux/src/linux/wayland/route.rs b/userland/capsule_linux/src/linux/wayland/route.rs new file mode 100644 index 000000000..72099ebf8 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/route.rs @@ -0,0 +1,62 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Which handler a request belongs to. False means nothing served it. + +use crate::linux::guest::Guest; + +use super::object::Object; +use super::ops::req; +use super::serve::is_destructor; +use super::args::Args; +use super::{buffer, commit, handlers, seat, shm, surface, xdg}; + +pub fn route( + guest: &mut Guest, + object: Option, + id: u32, + opcode: u16, + args: &mut Args<'_>, +) -> bool { + match (object, opcode) { + (Some(Object::Display), req::DISPLAY_SYNC) => handlers::sync(guest, args), + (Some(Object::Display), req::DISPLAY_GET_REGISTRY) => handlers::registry(guest, args), + (Some(Object::Registry), req::REGISTRY_BIND) => handlers::bind(guest, args), + (Some(Object::Compositor), req::COMPOSITOR_CREATE_SURFACE) => surface::create(guest, args), + (Some(Object::Shm), req::SHM_CREATE_POOL) => shm::create_pool(guest, args), + (Some(Object::ShmPool), req::POOL_CREATE_BUFFER) => buffer::create_buffer(guest, id, args), + (Some(Object::Surface), req::SURFACE_ATTACH) => surface::attach(guest, id, args), + (Some(Object::Surface), req::SURFACE_FRAME) => surface::frame(guest, id, args), + (Some(Object::Surface), req::SURFACE_COMMIT) => commit::commit(guest, id), + (Some(Object::Surface), req::SURFACE_DAMAGE | req::SURFACE_DAMAGE_BUFFER) => {} + (Some(Object::XdgBase), req::XDG_BASE_GET_SURFACE) => xdg::get_xdg_surface(guest, args), + (Some(Object::XdgBase), req::XDG_BASE_PONG) => {} + (Some(Object::XdgSurface), req::XDG_SURFACE_GET_TOPLEVEL) => { + xdg::get_toplevel(guest, id, args) + } + (Some(Object::XdgSurface), req::XDG_SURFACE_ACK_CONFIGURE) => { + xdg::ack_configure(guest, id, args) + } + (Some(Object::XdgSurface), req::XDG_SURFACE_SET_GEOMETRY) => {} + (Some(Object::XdgToplevel), req::TOPLEVEL_SET_TITLE | req::TOPLEVEL_SET_APP_ID) => {} + (Some(Object::Seat), req::SEAT_GET_POINTER) => seat::get_pointer(guest, args), + (Some(Object::Seat), req::SEAT_GET_KEYBOARD) => seat::get_keyboard(guest, args), + (o, c) if is_destructor(o, c) => guest.objects.drop_id(id), + _ => return false, + } + true +} diff --git a/userland/capsule_linux/src/linux/wayland/scene.rs b/userland/capsule_linux/src/linux/wayland/scene.rs new file mode 100644 index 000000000..8331c7c17 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/scene.rs @@ -0,0 +1,67 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The client's scene, and the NONOS surface it ends up on. + +use alloc::vec::Vec; + +use super::state::{Buffer, Pool, Surface}; + +pub struct Scene { + pub pools: Vec, + pub buffers: Vec, + pub surfaces: Vec, + /// Serial for configure events, which a client echoes back. + pub serial: u32, + /// The NONOS surface the client's pixels end up on. + pub out: Option, + /// This capsule's own copy of those pixels, which the surface + /// descriptor points at. + pub pixels: Vec, + pub pointer: Option, + pub keyboard: Option, + pub pointer_entered: bool, + pub keyboard_entered: bool, +} + +impl Scene { + pub fn new() -> Scene { + Scene { + pools: Vec::new(), + buffers: Vec::new(), + surfaces: Vec::new(), + serial: 1, + out: None, + pixels: Vec::new(), + pointer: None, + keyboard: None, + pointer_entered: false, + keyboard_entered: false, + } + } + + pub fn next_serial(&mut self) -> u32 { + self.serial += 1; + self.serial + } +} + +impl Default for Scene { + fn default() -> Scene { + Scene::new() + } +} diff --git a/userland/capsule_linux/src/linux/wayland/seat.rs b/userland/capsule_linux/src/linux/wayland/seat.rs new file mode 100644 index 000000000..332d26059 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/seat.rs @@ -0,0 +1,36 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `wl_seat`: the pointer and keyboard objects a client asks for. + +use crate::linux::guest::Guest; + +use super::object::Object; +use super::args::Args; + +pub fn get_pointer(guest: &mut Guest, args: &mut Args<'_>) { + let Some(id) = args.u32() else { return }; + guest.objects.put(id, Object::Pointer); + guest.scene.pointer = Some(id); +} + +pub fn get_keyboard(guest: &mut Guest, args: &mut Args<'_>) { + let Some(id) = args.u32() else { return }; + guest.objects.put(id, Object::Keyboard); + guest.scene.keyboard = Some(id); + super::keymap::send(guest, id); +} diff --git a/userland/capsule_linux/src/linux/wayland/serve.rs b/userland/capsule_linux/src/linux/wayland/serve.rs new file mode 100644 index 000000000..6b480e7b2 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/serve.rs @@ -0,0 +1,56 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Draining the client's requests and answering what is understood. + +use crate::linux::guest::Guest; + +use super::object::Object; +use super::ops::req; +use super::route::route; +use super::unserved::unserved; +use super::args::Args; +use super::wire::next; + +pub fn serve(guest: &mut Guest) { + while one(guest).is_some() {} +} + +/// One message. It leaves the queue before it is served, so a handler +/// that refuses cannot leave it there to be served again forever. +fn one(guest: &mut Guest) -> Option<()> { + let (object, opcode, id, body, size) = { + let (msg, size) = next(&guest.display.to_server)?; + (guest.objects.get(msg.object), msg.opcode, msg.object, msg.args.to_vec(), size) + }; + guest.display.to_server.drain(..size); + let mut args = Args::new(&body); + if !route(guest, object, id, opcode, &mut args) { + unserved(object, opcode); + } + Some(()) +} + +/// Requests that only remove something. +pub fn is_destructor(object: Option, opcode: u16) -> bool { + matches!( + (object, opcode), + (Some(Object::Buffer), req::BUFFER_DESTROY) + | (Some(Object::ShmPool), req::POOL_DESTROY) + | (Some(Object::Surface), req::SURFACE_DESTROY) + ) +} diff --git a/userland/capsule_linux/src/linux/wayland/shm.rs b/userland/capsule_linux/src/linux/wayland/shm.rs new file mode 100644 index 000000000..7f1645812 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/shm.rs @@ -0,0 +1,71 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `wl_shm`: the pool a client draws into, and the buffers inside it. + +use crate::linux::file::mapped_at; +use crate::linux::guest::Guest; + +use super::args::Args; +use super::object::Object; +use super::ops::{ev, FORMAT_ARGB8888, FORMAT_XRGB8888}; +use super::out::Event; +use super::state::Pool; + +/// A client reads the format list before it asks for anything, and one it was +/// not offered is a protocol error on its side, so only the two that are +/// actually blitted are advertised. +pub fn formats(guest: &mut Guest, id: u32) { + for format in [FORMAT_ARGB8888, FORMAT_XRGB8888] { + Event::new(id, ev::SHM_FORMAT).u32(format).send(&mut guest.display.to_client); + } +} + +/// The descriptor was passed in the control data of the sendmsg that +/// carried this request, so it is taken from the queue in order. +pub fn create_pool(guest: &mut Guest, args: &mut Args<'_>) { + let (Some(id), Some(_fd_slot), Some(size)) = (args.u32(), args.u32(), args.u32()) else { + return; + }; + let Some(fd) = take_fd(guest) else { + return; + }; + let Some((at, _)) = mapped_at(guest, fd as u64) else { + /* + * A pool over a descriptor the client never mapped has no pixels to + * read, and reading zero would show a black window rather than say + * why. + */ + return; + }; + /* + * The declared size, bounded by what the client actually has at that + * address. + */ + let size = (size as u64).min(guest.mapped_from(at)); + if size == 0 { + return; + } + guest.objects.put(id, Object::ShmPool); + guest.scene.pools.push(Pool { id, at, size }); +} + +fn take_fd(guest: &mut Guest) -> Option { + match guest.display.fds.is_empty() { + true => None, + false => Some(guest.display.fds.remove(0)), + } +} diff --git a/userland/capsule_linux/src/linux/wayland/state.rs b/userland/capsule_linux/src/linux/wayland/state.rs new file mode 100644 index 000000000..057669d07 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/state.rs @@ -0,0 +1,48 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! What the client has built: its pools, its buffers, its surfaces. + +use alloc::vec::Vec; + +pub struct Pool { + pub id: u32, + /// Where the client's pixels live in its own address space. + pub at: u64, + /// How many bytes are really there. + pub size: u64, +} + +pub struct Buffer { + pub id: u32, + pub pool: u32, + pub offset: u64, + pub width: u32, + pub height: u32, + pub stride: u32, +} + +pub struct Surface { + pub id: u32, + /// The buffer attached but not yet committed. + pub pending: Option, + /// The xdg_surface wrapping it, once the client asks for one. + pub xdg: Option, + /// Frame callbacks owed, answered after the next present. + pub frames: Vec, + /// Set once a configure has been sent and acked. + pub configured: bool, +} diff --git a/userland/capsule_linux/src/linux/wayland/surface.rs b/userland/capsule_linux/src/linux/wayland/surface.rs new file mode 100644 index 000000000..461a81029 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/surface.rs @@ -0,0 +1,54 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `wl_surface`: what the client is drawing, and when it says so. + +use crate::linux::guest::Guest; + +use super::object::Object; +use super::state::Surface; +use super::args::Args; + +pub fn create(guest: &mut Guest, args: &mut Args<'_>) { + let Some(id) = args.u32() else { return }; + guest.objects.put(id, Object::Surface); + guest.scene.surfaces.push(Surface { + id, + pending: None, + xdg: None, + frames: alloc::vec::Vec::new(), + configured: false, + }); +} + +pub fn attach(guest: &mut Guest, id: u32, args: &mut Args<'_>) { + let Some(buffer) = args.u32() else { return }; + if let Some(s) = guest.scene.surfaces.iter_mut().find(|s| s.id == id) { + s.pending = match buffer { + 0 => None, + b => Some(b), + }; + } +} + +pub fn frame(guest: &mut Guest, id: u32, args: &mut Args<'_>) { + let Some(callback) = args.u32() else { return }; + guest.objects.put(callback, Object::Callback); + if let Some(s) = guest.scene.surfaces.iter_mut().find(|s| s.id == id) { + s.frames.push(callback); + } +} diff --git a/userland/capsule_linux/src/linux/wayland/unserved.rs b/userland/capsule_linux/src/linux/wayland/unserved.rs new file mode 100644 index 000000000..782bd1cc7 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/unserved.rs @@ -0,0 +1,56 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Naming a request this shim does not serve yet. + +use super::object::Object; + +pub fn name(what: Object) -> &'static [u8] { + match what { + Object::Display => b"wl_display", + Object::Registry => b"wl_registry", + Object::Callback => b"wl_callback", + Object::Compositor => b"wl_compositor", + Object::Shm => b"wl_shm", + Object::ShmPool => b"wl_shm_pool", + Object::Buffer => b"wl_buffer", + Object::Surface => b"wl_surface", + Object::XdgBase => b"xdg_wm_base", + Object::XdgSurface => b"xdg_surface", + Object::XdgToplevel => b"xdg_toplevel", + Object::Seat => b"wl_seat", + Object::Pointer => b"wl_pointer", + Object::Keyboard => b"wl_keyboard", + } +} + +/// A client that stalls should leave behind the interface and opcode it +/// was waiting on, because a protocol stall has no other symptom. +pub fn unserved(what: Option, opcode: u16) { + let mut line = [0u8; 64]; + let head = b"[WAYLAND] unserved "; + let tag = what.map(name).unwrap_or(b"unknown-object"); + let n = head.len(); + line[..n].copy_from_slice(head); + let m = (n + tag.len()).min(line.len() - 4); + line[n..m].copy_from_slice(&tag[..m - n]); + line[m] = b'.'; + line[m + 1] = b'0' + (opcode / 10) as u8 % 10; + line[m + 2] = b'0' + (opcode % 10) as u8; + line[m + 3] = b'\n'; + let _ = nonos_libc::mk_debug(line.as_ptr(), m + 4); +} diff --git a/userland/capsule_linux/src/linux/wayland/wire.rs b/userland/capsule_linux/src/linux/wayland/wire.rs new file mode 100644 index 000000000..7f53b3bf8 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/wire.rs @@ -0,0 +1,40 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The Wayland message header and the argument cursor. + +pub const HEADER: usize = 8; + +pub struct Msg<'a> { + pub object: u32, + pub opcode: u16, + pub args: &'a [u8], +} + +/// The next message in `buf`, or nothing if it has not all arrived. +pub fn next(buf: &[u8]) -> Option<(Msg<'_>, usize)> { + if buf.len() < HEADER { + return None; + } + let object = u32::from_le_bytes([buf[0], buf[1], buf[2], buf[3]]); + let opcode = u16::from_le_bytes([buf[4], buf[5]]); + let size = u16::from_le_bytes([buf[6], buf[7]]) as usize; + if size < HEADER || size > buf.len() { + return None; + } + Some((Msg { object, opcode, args: &buf[HEADER..size] }, size)) +} diff --git a/userland/capsule_linux/src/linux/wayland/xdg.rs b/userland/capsule_linux/src/linux/wayland/xdg.rs new file mode 100644 index 000000000..59143c179 --- /dev/null +++ b/userland/capsule_linux/src/linux/wayland/xdg.rs @@ -0,0 +1,60 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! `xdg_wm_base` and the two objects a toplevel window is made of. + +use crate::linux::guest::Guest; + +use super::object::Object; +use super::ops::ev; +use super::out::Event; +use super::args::Args; + +/// The size a toplevel is told to be when nothing has asked otherwise. +const WIDTH: u32 = 800; +const HEIGHT: u32 = 600; + +pub fn get_xdg_surface(guest: &mut Guest, args: &mut Args<'_>) { + let (Some(id), Some(surface)) = (args.u32(), args.u32()) else { + return; + }; + guest.objects.put(id, Object::XdgSurface); + if let Some(s) = guest.scene.surfaces.iter_mut().find(|s| s.id == surface) { + s.xdg = Some(id); + } +} + +pub fn get_toplevel(guest: &mut Guest, xdg: u32, args: &mut Args<'_>) { + let Some(id) = args.u32() else { return }; + guest.objects.put(id, Object::XdgToplevel); + let serial = guest.scene.next_serial(); + // An empty states array, which is a length of zero. + Event::new(id, ev::TOPLEVEL_CONFIGURE) + .u32(WIDTH) + .u32(HEIGHT) + .u32(0) + .send(&mut guest.display.to_client); + Event::new(xdg, ev::XDG_SURFACE_CONFIGURE).u32(serial).send(&mut guest.display.to_client); +} + +pub fn ack_configure(guest: &mut Guest, xdg: u32, args: &mut Args<'_>) { + let Some(_serial) = args.u32() else { return }; + let owner = guest.scene.surfaces.iter_mut().find(|s| s.xdg == Some(xdg)); + if let Some(s) = owner { + s.configured = true; + } +} diff --git a/userland/capsule_linux_proofs/Cargo.lock b/userland/capsule_linux_proofs/Cargo.lock new file mode 100644 index 000000000..b5322f056 --- /dev/null +++ b/userland/capsule_linux_proofs/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "nonos_capsule_linux_proofs" +version = "0.1.0" diff --git a/userland/capsule_linux_proofs/Cargo.toml b/userland/capsule_linux_proofs/Cargo.toml new file mode 100644 index 000000000..e1cfcbc01 --- /dev/null +++ b/userland/capsule_linux_proofs/Cargo.toml @@ -0,0 +1,19 @@ +# NØNOS userland: capsule_linux_proofs +# eK@nonos.systems +# +# Host proofs for the parts of the Linux personality that are pure: the +# Wayland wire codec, path resolution, directory entries, the stat +# buffer, and the ELF reader. Each includes the shipped source through +# #[path], so a proof here constrains the code that runs and not a copy +# of it. + +[package] +name = "nonos_capsule_linux_proofs" +version = "0.1.0" +edition = "2021" +publish = false +license = "AGPL-3.0" +authors = ["eK@nonos.systems"] + +[lib] +path = "src/lib.rs" diff --git a/userland/capsule_linux_proofs/src/image/mod.rs b/userland/capsule_linux_proofs/src/image/mod.rs new file mode 100644 index 000000000..f9f645513 --- /dev/null +++ b/userland/capsule_linux_proofs/src/image/mod.rs @@ -0,0 +1,34 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The loader's module shape, so the `super::` paths inside these files +//! resolve exactly as they do in the capsule. + +#[path = "../../../capsule_linux/src/linux/image/read.rs"] +pub mod read; + +#[path = "../../../capsule_linux/src/linux/image/phdr.rs"] +pub mod phdr; + +#[path = "../../../capsule_linux/src/linux/image/stack_words.rs"] +pub mod stack_words; + +#[path = "../../../capsule_linux/src/linux/image/elf.rs"] +pub mod elf; + +#[path = "../../../capsule_linux/src/linux/image/elf_phdr.rs"] +pub mod elf_phdr; diff --git a/userland/capsule_linux_proofs/src/install/mod.rs b/userland/capsule_linux_proofs/src/install/mod.rs new file mode 100644 index 000000000..7985afda7 --- /dev/null +++ b/userland/capsule_linux_proofs/src/install/mod.rs @@ -0,0 +1,27 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The installer's pure parsers, included from the capsule. + +#[path = "../../../capsule_linux/src/linux/install/tar_field.rs"] +pub mod tar_field; + +#[path = "../../../capsule_linux/src/linux/install/tar.rs"] +pub mod tar; + +#[path = "../../../capsule_linux/src/linux/install/index.rs"] +pub mod index; diff --git a/userland/capsule_linux_proofs/src/lib.rs b/userland/capsule_linux_proofs/src/lib.rs new file mode 100644 index 000000000..ab9fae3e5 --- /dev/null +++ b/userland/capsule_linux_proofs/src/lib.rs @@ -0,0 +1,46 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The shipped source, included and exercised. + +extern crate alloc; + +#[path = "../../capsule_linux/src/linux/wayland/wire.rs"] +pub mod wire; + +#[path = "../../capsule_linux/src/linux/wayland/args.rs"] +pub mod args; + +#[path = "../../capsule_linux/src/linux/file/resolve.rs"] +pub mod resolve; + +#[path = "../../capsule_linux/src/linux/file/dirent.rs"] +pub mod dirent; + +#[path = "../../capsule_linux/src/linux/file/meta/statbuf.rs"] +pub mod statbuf; + +#[path = "../../capsule_linux/src/linux/call/spawn/exec_shebang.rs"] +pub mod exec_shebang; + +pub mod image; + +/// The installer's parsers, which read bytes fetched off a network. +pub mod install; + +#[cfg(test)] +mod tests; diff --git a/userland/capsule_linux_proofs/src/tests.rs b/userland/capsule_linux_proofs/src/tests.rs new file mode 100644 index 000000000..ae67ca5b1 --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests.rs @@ -0,0 +1,27 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Every proof, by the thing it constrains. + +mod dirent_tests; +mod elf_tests; +mod exec_shebang_tests; +mod resolve_tests; +mod stack_words_tests; +mod stat_tests; +mod tar_tests; +mod wire_tests; diff --git a/userland/capsule_linux_proofs/src/tests/dirent_tests.rs b/userland/capsule_linux_proofs/src/tests/dirent_tests.rs new file mode 100644 index 000000000..dcd2372ac --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/dirent_tests.rs @@ -0,0 +1,68 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! getdents64 records, which a libc walks by adding d_reclen. + +use alloc::vec::Vec; + +use crate::dirent::{encode, record_len, DT_UNKNOWN, HEADER}; + +#[test] +fn a_record_is_eight_byte_aligned_and_holds_the_terminator() { + for name in ["a", "ab", "abc", "abcd", "abcde"] { + let want = HEADER + name.len() + 1; + let got = record_len(name.as_bytes()); + assert!(got >= want, "{name}: {got} must hold {want}"); + assert_eq!(got % 8, 0, "{name}: {got} is not aligned"); + assert!(got - want < 8, "{name}: {got} pads more than a word"); + } +} + +#[test] +fn walking_by_reclen_reaches_every_name() { + let names = ["bin", "lib", "usr", "a-much-longer-name"]; + let mut out: Vec = Vec::new(); + for (i, name) in names.iter().enumerate() { + encode(&mut out, name.as_bytes(), i as u64, DT_UNKNOWN); + } + let mut at = 0usize; + let mut seen = Vec::new(); + while at < out.len() { + let reclen = u16::from_le_bytes([out[at + 16], out[at + 17]]) as usize; + assert!(reclen >= HEADER + 1 && at + reclen <= out.len()); + let body = &out[at + 19..at + reclen]; + let end = body.iter().position(|b| *b == 0).unwrap(); + seen.push(String::from_utf8(body[..end].to_vec()).unwrap()); + at += reclen; + } + assert_eq!(seen, names); +} + +#[test] +fn the_offset_field_advances_with_the_index() { + let mut out: Vec = Vec::new(); + encode(&mut out, b"x", 7, DT_UNKNOWN); + assert_eq!(u64::from_le_bytes(out[0..8].try_into().unwrap()), 8); + assert_eq!(i64::from_le_bytes(out[8..16].try_into().unwrap()), 8); +} + +#[test] +fn the_type_is_unknown_and_not_a_guess() { + let mut out: Vec = Vec::new(); + encode(&mut out, b"x", 0, DT_UNKNOWN); + assert_eq!(out[18], 0); +} diff --git a/userland/capsule_linux_proofs/src/tests/elf_tests.rs b/userland/capsule_linux_proofs/src/tests/elf_tests.rs new file mode 100644 index 000000000..3f4e84909 --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/elf_tests.rs @@ -0,0 +1,71 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The ELF reader, against a real dynamic image. + +use crate::image::elf::{Elf, ET_DYN, PT_INTERP, PT_LOAD}; + +/// The loader never reads the dynamic section, so it names no constant +/// for it. The interpreter is what parses that, which is the point. +const PT_DYNAMIC: u32 = 2; + +const IMAGE: &[u8] = include_bytes!("../../vectors/dynamic.elf"); + +#[test] +fn the_header_reads_as_a_shared_object_for_x86_64() { + let elf = Elf::parse(IMAGE).expect("a 64-bit little-endian x86_64 image"); + assert_eq!(elf.kind, ET_DYN); + assert_eq!(elf.entry, 0x1000); + assert_eq!(elf.phnum(), 3); + assert_eq!(elf.phentsize, 56); +} + +#[test] +fn the_program_headers_are_where_the_header_says() { + let elf = Elf::parse(IMAGE).unwrap(); + let kinds: Vec = (0..elf.phnum()).map(|i| elf.phdr(i).unwrap().kind).collect(); + assert_eq!(kinds, vec![PT_LOAD, PT_INTERP, PT_DYNAMIC]); +} + +#[test] +fn the_interpreter_path_is_the_one_in_the_file() { + let elf = Elf::parse(IMAGE).unwrap(); + let ph = (0..elf.phnum()) + .map(|i| elf.phdr(i).unwrap()) + .find(|p| p.kind == PT_INTERP) + .expect("PT_INTERP"); + let raw = &IMAGE[ph.offset as usize..(ph.offset + ph.filesz) as usize]; + let end = raw.iter().position(|b| *b == 0).unwrap(); + assert_eq!(&raw[..end], b"/lib/ld-musl-x86_64.so.1"); +} + +#[test] +fn the_header_address_is_inside_a_load_segment() { + let elf = Elf::parse(IMAGE).unwrap(); + let at = elf.phdr_addr(0).expect("headers are in a load segment"); + assert_eq!(at, 0x400000 + elf.phoff); + assert_eq!(elf.phdr_addr(0x1000_0000), Some(0x1000_0000 + 0x400000 + elf.phoff)); +} + +#[test] +fn anything_that_is_not_an_image_is_refused() { + assert!(Elf::parse(b"").is_none()); + assert!(Elf::parse(&[0u8; 64]).is_none()); + let mut wrong = IMAGE.to_vec(); + wrong[4] = 1; + assert!(Elf::parse(&wrong).is_none(), "a 32-bit class must be refused"); +} diff --git a/userland/capsule_linux_proofs/src/tests/exec_shebang_tests.rs b/userland/capsule_linux_proofs/src/tests/exec_shebang_tests.rs new file mode 100644 index 000000000..462be2364 --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/exec_shebang_tests.rs @@ -0,0 +1,68 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! `#!` as Linux reads it, which is not as a shell would. + +use crate::exec_shebang::parse; + +#[test] +fn a_bare_interpreter_has_no_argument() { + let got = parse(b"#!/bin/sh\necho hi\n").expect("a plain shebang"); + assert_eq!(got.path, b"/bin/sh"); + assert!(got.arg.is_none()); +} + +#[test] +fn everything_after_the_interpreter_is_one_argument() { + // Linux splits once. + let got = parse(b"#!/bin/sh -e -u\n").expect("an argument follows"); + assert_eq!(got.path, b"/bin/sh"); + assert_eq!(got.arg.as_deref(), Some(&b"-e -u"[..])); +} + +#[test] +fn leading_space_after_the_bang_is_skipped() { + let got = parse(b"#! /usr/bin/env python3\n").expect("spaces before the path"); + assert_eq!(got.path, b"/usr/bin/env"); + assert_eq!(got.arg.as_deref(), Some(&b"python3"[..])); +} + +#[test] +fn a_carriage_return_does_not_become_part_of_the_path() { + /* + * A script edited on Windows would otherwise ask for "/bin/sh\r", which + * resolves to nothing and reports a missing interpreter. + */ + let got = parse(b"#!/bin/sh\r\n").expect("a CRLF script"); + assert_eq!(got.path, b"/bin/sh"); +} + +#[test] +fn an_elf_is_not_a_script() { + assert!(parse(b"\x7fELF\x02\x01\x01").is_none()); +} + +#[test] +fn a_bang_with_nothing_after_it_is_not_an_interpreter() { + assert!(parse(b"#!\n").is_none()); + assert!(parse(b"#! \n").is_none()); +} + +#[test] +fn a_line_without_a_newline_still_parses() { + let got = parse(b"#!/bin/sh").expect("a file that is only its shebang"); + assert_eq!(got.path, b"/bin/sh"); +} diff --git a/userland/capsule_linux_proofs/src/tests/resolve_tests.rs b/userland/capsule_linux_proofs/src/tests/resolve_tests.rs new file mode 100644 index 000000000..ea6096bd8 --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/resolve_tests.rs @@ -0,0 +1,57 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! Turning a guest's path into a store key. + +use crate::resolve::absolute; + +fn at(cwd: &str, path: &str) -> String { + String::from_utf8(absolute(cwd.as_bytes(), path.as_bytes())).unwrap() +} + +#[test] +fn an_absolute_path_ignores_the_working_directory() { + assert_eq!(at("/home", "/etc/passwd"), "/etc/passwd"); +} + +#[test] +fn a_relative_path_hangs_off_the_working_directory() { + assert_eq!(at("/home", "lib/libc.so"), "/home/lib/libc.so"); +} + +#[test] +fn dot_components_disappear() { + assert_eq!(at("/", "./a/./b"), "/a/b"); + assert_eq!(at("/a", "b/../c"), "/a/c"); +} + +#[test] +fn dot_dot_past_the_root_stops_at_the_root() { + assert_eq!(at("/", "../../../etc"), "/etc"); + assert_eq!(at("/a", "../../.."), "/"); +} + +#[test] +fn repeated_separators_collapse() { + assert_eq!(at("/", "//lib///libc.so"), "/lib/libc.so"); +} + +#[test] +fn the_root_itself_survives() { + assert_eq!(at("/", "/"), "/"); + assert_eq!(at("/", ""), "/"); +} diff --git a/userland/capsule_linux_proofs/src/tests/stack_words_tests.rs b/userland/capsule_linux_proofs/src/tests/stack_words_tests.rs new file mode 100644 index 000000000..fa825239f --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/stack_words_tests.rs @@ -0,0 +1,55 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//! The shape of the block at rsp. + +use alloc::vec::Vec; + +use crate::image::stack_words::words; + +#[test] +fn argc_leads_and_both_lists_are_null_terminated() { + let at = [0x1000, 0x1010, 0x2000]; + let got = words(2, &at, alloc_aux()).expect("two of three is a valid split"); + assert_eq!(got[0], 2); + assert_eq!(&got[1..3], &[0x1000, 0x1010]); + assert_eq!(got[3], 0, "argv is terminated before envp starts"); + assert_eq!(got[4], 0x2000); + assert_eq!(got[5], 0, "envp is terminated before the auxv"); + assert_eq!(&got[6..], &[7, 7]); +} + +#[test] +fn no_arguments_still_produces_both_terminators() { + let got = words(0, &[], Vec::new()).expect("an empty vector is a valid one"); + assert_eq!(got, alloc::vec![0, 0, 0]); +} + +#[test] +fn an_environment_with_no_arguments_keeps_its_place() { + let got = words(0, &[0x3000], Vec::new()).expect("zero argv, one envp"); + // argc, the empty argv's null, the one envp entry, envp's null. + assert_eq!(got, alloc::vec![0, 0, 0x3000, 0]); +} + +#[test] +fn a_count_past_the_end_is_refused_rather_than_truncated() { + assert!(words(3, &[0x1000], Vec::new()).is_none()); +} + +fn alloc_aux() -> Vec { + alloc::vec![7, 7] +} diff --git a/userland/capsule_linux_proofs/src/tests/stat_tests.rs b/userland/capsule_linux_proofs/src/tests/stat_tests.rs new file mode 100644 index 000000000..80055e630 --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/stat_tests.rs @@ -0,0 +1,63 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The struct a libc reads out of fstat. + +use crate::statbuf::{build, S_IFDIR, S_IFREG, STAT_LEN}; + +fn u32_at(b: &[u8], at: usize) -> u32 { + u32::from_le_bytes(b[at..at + 4].try_into().unwrap()) +} + +fn u64_at(b: &[u8], at: usize) -> u64 { + u64::from_le_bytes(b[at..at + 8].try_into().unwrap()) +} + +/// Offsets are the x86_64 layout: nlink at 16, mode at 24, size at 48, blksize +/// at 56, blocks at 64. +#[test] +fn a_regular_file_lands_in_the_right_fields() { + let s = build(4096, false); + assert_eq!(s.len(), STAT_LEN); + assert_eq!(u64_at(&s, 16), 1); + assert_eq!(u32_at(&s, 24), S_IFREG | 0o644); + assert_eq!(u64_at(&s, 48), 4096); + assert_eq!(u64_at(&s, 56), 4096); + assert_eq!(u64_at(&s, 64), 8); +} + +#[test] +fn a_directory_says_so_in_the_mode() { + let s = build(0, true); + assert_eq!(u32_at(&s, 24), S_IFDIR | 0o755); + assert_eq!(u64_at(&s, 48), 0); +} + +#[test] +fn block_count_rounds_up_to_the_next_five_hundred_and_twelve() { + assert_eq!(u64_at(&build(1, false), 64), 1); + assert_eq!(u64_at(&build(512, false), 64), 1); + assert_eq!(u64_at(&build(513, false), 64), 2); +} + +#[test] +fn everything_unknown_is_left_at_zero() { + let s = build(10, false); + for at in [0, 8, 40, 72, 88, 104] { + assert_eq!(u64_at(&s, at), 0, "offset {at} should be untouched"); + } +} diff --git a/userland/capsule_linux_proofs/src/tests/tar_tests.rs b/userland/capsule_linux_proofs/src/tests/tar_tests.rs new file mode 100644 index 000000000..e2f7b3d0b --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/tar_tests.rs @@ -0,0 +1,61 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The tar reader, against a real Alpine package. + +use crate::install::tar::entries; + +/// libffi-3.4.6-r0.apk, decompressed. An independent reader sees one +/// regular file in it: usr/lib/libffi.so.8.1.4 at 38960 bytes. +const PKG: &[u8] = include_bytes!("../../vectors/libffi.tar"); + +#[test] +fn it_finds_the_package_payload_and_nothing_else() { + let found = entries(PKG); + let named: Vec<&[u8]> = found.iter().map(|e| e.name.as_slice()).collect(); + assert!( + named.contains(&b"usr/lib/libffi.so.8.1.4".as_slice()), + "the shared library must be there, saw {named:?}" + ); +} + +#[test] +fn the_payload_is_the_right_length_and_is_an_elf() { + let found = entries(PKG); + let lib = found + .iter() + .find(|e| e.name == b"usr/lib/libffi.so.8.1.4") + .expect("the library"); + assert_eq!(lib.body.len(), 38960); + assert_eq!(&lib.body[..4], b"\x7fELF"); +} + +#[test] +fn a_truncated_archive_stops_rather_than_inventing_entries() { + for cut in [0usize, 100, 512, 1024, PKG.len() / 2] { + let found = entries(&PKG[..cut]); + for e in &found { + assert!(e.body.len() <= cut, "an entry longer than the input"); + } + } +} + +#[test] +fn rubbish_is_not_an_archive() { + assert!(entries(&[0u8; 512]).is_empty()); + assert!(entries(b"not a tar at all").is_empty()); +} diff --git a/userland/capsule_linux_proofs/src/tests/wire_tests.rs b/userland/capsule_linux_proofs/src/tests/wire_tests.rs new file mode 100644 index 000000000..c60628748 --- /dev/null +++ b/userland/capsule_linux_proofs/src/tests/wire_tests.rs @@ -0,0 +1,65 @@ +// NONOS Operating System +// Copyright (C) 2026 NONOS Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + + +//! The Wayland wire format, in both directions. + +use crate::args::Args; +use crate::wire::{next, HEADER}; + +/// A real wl_display.get_registry: object 1, opcode 1, one new_id of 2. +fn get_registry() -> [u8; 12] { + let mut m = [0u8; 12]; + m[0..4].copy_from_slice(&1u32.to_le_bytes()); + m[4..6].copy_from_slice(&1u16.to_le_bytes()); + m[6..8].copy_from_slice(&12u16.to_le_bytes()); + m[8..12].copy_from_slice(&2u32.to_le_bytes()); + m +} + +#[test] +fn a_message_reports_its_object_opcode_and_length() { + let buf = get_registry(); + let (msg, size) = next(&buf).expect("a whole message parses"); + assert_eq!((msg.object, msg.opcode, size), (1, 1, 12)); + assert_eq!(Args::new(msg.args).u32(), Some(2)); +} + +#[test] +fn a_message_that_has_not_all_arrived_is_not_parsed() { + let buf = get_registry(); + for cut in 0..buf.len() { + assert!(next(&buf[..cut]).is_none(), "{cut} bytes must not parse"); + } +} + +#[test] +fn a_size_smaller_than_the_header_is_refused() { + let mut buf = get_registry(); + buf[6..8].copy_from_slice(&4u16.to_le_bytes()); + assert!(next(&buf).is_none()); +} + +#[test] +fn two_messages_back_to_back_are_taken_in_order() { + let mut buf = Vec::new(); + buf.extend_from_slice(&get_registry()); + buf.extend_from_slice(&get_registry()); + let (_, first) = next(&buf).expect("first"); + let (second, _) = next(&buf[first..]).expect("second"); + assert_eq!(second.object, 1); + assert_eq!(first, HEADER + 4); +} diff --git a/userland/capsule_linux_proofs/vectors/apkindex.tar b/userland/capsule_linux_proofs/vectors/apkindex.tar new file mode 100644 index 0000000000000000000000000000000000000000..74295174da55577b75b2fa596d23bc305c0ede37 GIT binary patch literal 2000000 zcmeFaeULO=TNegm5N{PDL9HYplK@rk%P>3r{jqu9*JpNic6N7Wc6YvZW;f{4pEErl z-80=ipCMLhkP<|JRE(rjg(Q(gh*Dq@G?i!tC8Z#xDMS(ZLoq3%5HM&Zfx>96bGmz` zyQimjW}lnqormzE&wbz1r_VY4yRLJc>+4+Sta($uJ8LuxXVPe5m|9NN=Gy3kk>R+G z|I^4YXUj9o?&Ua=V>OKx&um9Jo6O|TIqZJ~{EuUp&q05}|Kfj==r@w3D2`$Xnxa03 zpa_QKJ|{yQ*8PWTHFI3a&SXAZCm-XtneY4Z-}VQ(=0E;F|JCpNfp7k~pZ-4PyZABv zgMaNue(HDq@)uUF|MGW!d-v>bf8Do!u>L1s{Ga{CAN#Mh{D1o$f8hG@A8LR9$A9<_ z|HxMiyFd2DU-U&k_a7NQK>iW_H~s9leTDSBU-`>l=>EPhd-v)8;77mv-~9Gp{~NyZ zfBqxCK&$`v-~OL|`u>N1`fI=I>;Idt{gTi7?SJ?m|Kh)v``&->zy0Wc^7o4N=l_;( z{mQ@oH5T(Nzt8?lfA<%E&;R)HGk^Z?{nfAf?yvr$PZsVzul=w8>B~R<=f3}|FCYKr zKjW86DSPvci{JZg|M1s;**&-|x<;4gjiAN#@oqd)nf$#>lSxYhzyII)8nNd*he|M2;l z%Tlx0xOr&Z+~56*F)>>7DeE7e(j*ZQ00c=gB=r%mf7`O$Gz4CIp7!nuKbzBM6mdop zIlw&ElNgdvDVpFk_JrsBYg2oF2oxSFH+Pq%?)&R;x2LrAPZAVIb2JrO{{+ka+WOx` z^8No(Jg<|r`m$Sitl0w5T8V7!>FKWjaCc$mJD1L<-#wi3Yh&{6@tmU12r_3A?+WKj zfqUVYcg=Hw<3v$>cXLki6sT^*yVm)YG14-Ut@Mq#W@i?L+s{auzR~Mv6l*-OHODb5 zGh<7xVZCdg_g#15oagg=4hBIwX8v9Eyjp&!=BP6wXPKkbJIkBE_`EREmYMD>^NDM1 zG_rW|lbKIR@YBocWjXs`CG{=qOp!kG&OIkNK_D4UV8wUJxhgTd08BH8(eGcP5Q869nC-1K={sScT{De{X+y_YP5`G4Ay5mRC2^n=AhDVqC9O z}$$hvGDi6KME9K^J6!*H}s-c}8S;fzwohRT&Lfb2O9KGb-c# zk(*eKu?+s93>;Wi!4oC;n`0?M%>}+hyywmE(;EOVyIqZo{kzH2W54z^ACVVido|B4 z1-B?(_O`I)9L@|F@An&uGN8P~E#8Qroo_)Wv?Wn@ViE+kvUA{W-OY>W(d zm9caX#l?Ivo6W#y*^<2qu{OZcpUG!1k^E?`ShAV~q%2BRq&rz-@nh@6T9x~giF zrYJNi(-f`Cv`mAX1A%vWKGEz^MxGfXH784s77#6QW}o(v#S5U`)JxrA!yPp4uC!u@ zX0D7yO%N~o!os7DqZy-|GQoQw0m?D#CTH=DkYq4f7y_0w&_qV>WQx{!42!agu{Ja( z^9g|dlbI0c5^i{ASZLcTOeCNn+W0V}n_${DUKIaN#j+OB}tKxRgg8RtZ5}b((lNe zZE6-fpWS8i{Pk67^2Al}rsK^Mfsm72YiuYv*lmY7S99E4UmF4Th+X%ALlYzo@_`aK z9!u8x0CO3=c+k8cXkHLBFCH{VH9%~0Mw}6_`FnryV7D80 z#+V*S=KX`vy%e5X{Pd;`d_H+lqPzz@t>z?il~W{u+yG&b1~|o2NJtz9`0fZN3^h#l z1>kr=aJ(QmQb6u^^}Ft!IG0y<+C4dWlHKQFUT8f(4(bUYTN9-FNTZyjD4?vS!%Q=8 zf;m3Mi31%>_r-%G1?mRh8<0esDP`xg`ooB4%2cJ+xw(|gm@LKoJeO?P9o&PErnomD z9UJ1rf%a$nI?fkY<$P&nx3cy1Lv6-XmKV~6U7Z$deNSn_5*CYVyced(W1h&k7kg0aLcpS_rvPgR`F!!Y_-NM#(}J=j2b8wHXy0<>4zmO79CSRe)wDEt838;T z$HTkn`r`ufVV;f%9pD>Z5PT`r(2U3Y136=FhE-yw8N<8D{9)WH)fZQ_I5jL=O``+Y zJ|rT9$WX-LLQ6rto+b&fltA-)Ra&7&>lYpD0i>m1KUAPmhJ~8f%rJE;Opr(mTY14F zLip2-kS*NmC_(BXD=ukDyUX}^4ukIwe@aY*g4t3auEy8Ypga)dRiAqttY)M8o2uaX zezyA|`sQ4)C!{hN%kzlI1X9F)&B8%DW3>BI=C+TJ{+PYpzHKdDRBfd7k{RwjaY^D5 zim^-a@_D{ehn?1_clkgpr7~YCE=JR5l}Zvt>)d9&r7;Zcxd4vbe9?Li^?$+~qb(5h*DpDnpSTV=1$B$8d)`Nop|V?eJX8b@eGOF8E+vR?)rqu7B>xik{qiL?2;th z5p40w(6uFH?>_%J_jocqrs2JB&WbB6F}}Kyp4%liKfR+LnzKr$v)1MAecW5- z@s%TiV@S)n)=)Fk_zR*x$9oqNhB#q9!?T60F{%(I$z~6<7Ytg;8YkU~L|0^tqNy0E61MhBAMITT3Rgy9ZTxuX4_G7)Trrj#(K?{NX` z)#qZ1s4FOAHhVv~&8n<=X-n(kyrdL~WqwyxM!-&HkP+%?3W}WWb?`Gh@rDHy?fx|B zwyV$hBzq+dAZ#2X%1maU`XU&^)Q?fdC^aW0Rx_U}jQis?u z5K%@Z%#j->&}Gy4X;KAmMhDua?}>r|A}RFCy7$HVN3&`@mu?2FQs?2RbUV7ep-aOZ zs{#vxv=zm2BJ~!^fqXe>9|x?3BqZOf9E{1>*ea_{mYu=G8q6R1vTQpLQEl7Qa%i;q z_$pI1d4_$++vSiV10nAQ1%qf#fXt|P2zXzRGhv8dTX7Ic-QbeQEisCAo`q5MiN4?; zmBC%3x9(g~b3hivrz5IZ_=TM)etOd& zwCl%U(;G*FscCH;ZU0jgv`Kp!giBJ|AZsF6!s*S@pN2eduQl{6?AKZ$1M9UmVXHKy zZN#d1rQJqJPj7bsWLPoT-^)fW9{_(K9u8@0fJoMJ=4>?DKeo1%#^`_=_GY9tQ#72y zk#i(nb5}S?2?7&oZ)_Z!InS}VzpXAAqnQnpFnTCQ#N!G(rTs|iIVigiHXapLxu(Mp z2Oxr)?Y#H;Fs5##e5lvy>s;Wq8%ws+mqsw@SG$}*)07qO^*6DNIZBZ9F!KeD^(uA~ z+v?fUIA==ZSBJ0xUa+wsGWHr&Ge_!e)qsOqztU*`W0?M=udEcAmzumMo2&^hSnhpa6!kPT?gqUhr|=^m7(u@rSb;!#i%Y zxn)AmI10@k_yXkZjwScN#s_|)m++E96LSo62+7-r4lss{H&_@4P6x^B-VE}L4{Q%h z*-hCVBS7NRQpt;QAJ}~;8}(51@hgBov1v zC&q0>0GdebKaJ82*$3h+4d{lA#%+PErpMf z+15agwgPhiVtf-g4T8@np#R`QLYu~!$g}W5**+QdEZF$^TM@ha z2vW)5&>)yMTY$EW%&l%0{t?_pb4x+GX~JyqArpL(BK2YTn8j|x@F9Wpr}zj#a+APA z;wNP%H;N{1C$$OLM;j1O@PFexOL)mJ)fXLdI<^92`>Nq?m%;W|Sda;5%IIegs+e-H zd2d#zv6txjSjFawK!MRhPFfc@I*)*PGkR1QxKedVvL(_>IsC%*}+aL=VvM zVoiNk$QO`-Q<8co}PBD`e4xT7-1v$gioe zKwc=EI`jw_(T<{BAc5r{IZEISF9Tqc$(HniD77@^=ZcK5hFOOETd`;1#DRUiqYVi3 zL_^s-!9za6J8AiXxA=V{`EBB2J3MC%z`_pKq&{Yl=mw_;up*8O@q{)}U)i?jNF+Y- zy-++j`FWtM?mpdk;8Gr?FjL@^OKW0)P|{x_&bZCTsVnfq7z&)dGA-|vcmgFguz{tm z3uf~&C<~_b;z(df?atnJ@4ZCbd)s#dtrOlyZoT~rb)%oAHQ9Ll{8Yx>`S_l`7thn@ zuZx6v>*xfUyP5!KTRV6&ZQWRcJd$i%O4tOWPL1t5$oGe(Ovq=LFu|l|DRjl7p^ZB1 zBa98YpYOc4lYD})E~37`oriA!C0T@d1NcrtA8vooO^i8u#iV`rxb{L2&n4P zY?P!k;C35-@3C8;C&4A=Ar+%;toJ4adSjp;cez;89NE!07W7`oN+J`&Bo?d;U~>YzF+PDIJWY z6*Sm|0{K_>>GO%IJpA|)b+&FMgC5~El`srEihCX-?+@eP0sAP2>aO&feq>cb&ZZ+kqvoNeOmhWZ0+|IJqhNn$G7S`YbM_jQfwk)&PtyRPpDe+3qpqbVS{Uyujvbx0=)Qd>}=paa^*<3W4DL2;m$NE~Qy zQ}h8^f3!u+r;a7H+*qDcUoiNEm7FM>-OeXhIY`l+$s`o%qrI{{2AE zftc^}|HZ#CSZc8_<=$y54A^SMU<(bX}`2Y$;LJv6ThJ*mDfo&{p z^9{}<$t@Jb%F;KpO{+*mE!6eO2LOq>gsGuO8#edik+y9Yn`3f`uZJUR;di1Dwa^p$ zWuN*FQrUl&qCp|i9f_`myGFbjiK@jOChR)UAH3zHjkps%+x8kgUb+hq-c*BV8FJo7 zqGg+YeANZX-h@6PN5m7JLnJKu*Ud+HJe0h-qd?kAB#^e97M^c{A%Pux`$W;q#0v%F zCAfY(R{}CgEYQ%vy|FvfX!{YA37dId{nwg;5-LN2%0bI&fL>X(XW?P3-DIm0QJUAghSMv#tLnlTR-bS|TQBDu zmq${!nWt%4=QNKGQXO};Kiv0e9s1_AYwGmSW`syZo{`KM;S+lAvfRKF3$&#WyHFOMisN>1 zIVw7fN2zyRX}GpIk{Sk?{bDe%;AU5lcU!u3^aadW;@F4aXPH(Wc#WmX?nGNRj8~N z?bsno9QR1$7m6oX;Fsf;t=H>mu}7rVAf8|ffLcu$cG_H>z9?!0-+qMMk8qz>Y-zHy z0+Y`6qyb7pf%vxp8b5h-qG!YRZble%?B5QhLZlF(&RcA;+M22L%Vu%#+_@07#kyJ@ z_9pS8z_{l)Je$1CbZQXCSN(luxYOeMpqA=!WZBr@DfB5D!jkQ0nf!(Dloy=xN}k@{ zRr}Xh)wp360ESao(~jLU9I6d<+#&5q=ckE1-X-unU;GnrILRf9ZFujAWi=->dmo#M zpK*j}5*{I@``G#<|q~BmBPusp0m$@@g7IrieaYm zr}f_0HsG@G7%|4Jl?VOH-Xl{iH3uDW3YqDqdcoSWBAg9FH^^X~!)_ywu|nB!sl1D8 zYrlHXx=(Zf0BYO13~7X68LYS+={>?Ga%70pq{c_B#q6^M zV#K@^#E15xvFcZg^tdOiEP{g+#QR(AGJfR^W*4~BEGV3jMoN+q@x4NCQNlwboG>N5 z#S_!4!-8#hGw}{oq_;U>HHJGzi5&Yn3@3W*YqLK}_ffO!mg?cT#+cPrrt|FWQ@&Wc z=-e=D_V&J>A74GKv|7BBtjDZ)vrXeu2=F0?^;`A=ukRD)(4!QDkIuT%1#2ZHH+ zDcJk=k+2x@#!Ozq;dZAZZZOv*>ew-MBn6&!YNMO$3x;MZ7q|5rsoR#g!e||LQH73R zZ5buaA1R0^_;FllI&qK_=Ek&8S?pv$Snh|J=0G{NtL^%o93Bb_fqMvRP}Sz`jdgiX zEFM_m`d(>V6KvyB_oMq(L!~p z)Pf?gZ=zOgh|{DL*3u6Yke)`r$y^T8BD^$TcLw2(;#au&UA!mO@xTvGBZa3LV;j5L zHLsknf35r96sTk2c_Qt8+!%l|A$DbY^J+_%CojN_AD)p=9zBFNY;dbzB-A$^! zhuV&S10M3rF{E)3$BUSYjxrVy7X^KvFdxNjurMVL)JfkHS$(il2y0cJjLDGgt!vpw zZJd3)yni5`>DREvbqS&Tb{fTaf<8V4FnN@Z z3*k0JS;B~iSL%MB?0Z_A8y>Q^RHFu18)}wRY91$x36$-We^`c9Zt- zpl4JT*Du$TMtz!oL$D`G{p~m>O#isgHEA9CrGmD=r4XggJ$9?o^L6v?PODNvl``eI z(k(r;H74dvi-6@FX-*>uOHs#r(vrqFVPe2^50;|uCHw6-?@S7Bc=Su*3(_7E3g1{S zh5Udluw1**%~p$@R<<1Xy+mjhXf`RK5rz_v56dPFa>AVPVO6BPcKvHC7n8XiO)6?a zt!m!Pvf{vfUYpi@=sa}tM5@e1a0horq%Cr|8twS|2_v+OjC8^TMYtzuqT$UJH3@dD zL)s#M!z(b{*Ma9mM>Ji`{TN`P<9KcSw+oFwDjd&-dv9Gp7z=Dx&HPM9&{3PG5Q4mz)h=yVKc z?`|F8AyIDuk&fyXy_m!&LIKvahdWeX@tgq$6M@)Le)ymCO5X z5&1Bva+@ZrxAWV{)V+J|mZ!yJJJ&a!HdaE~Vxa`~t@iHDFsHRzqMq9@dv1UUQ$B|I zvI^nlcD6U@4lf@S>%nNWTTi{}BbSZm0RS<#;t4Zn8r}?rt<~e*xxwN>nYXTWVkbHG zW4*IlV>q_~=x6@PtXm^qtg;t{wZe=W;w8OvA9)04RMY_Oki)kPrNRv!-#2;BH*iNr zIxP;5IDoMn^)IOk^L1D{?sp3uXJGh!zER*IM4_}drd@cZG0rHPwfemKaHnNwYeh3w zjQrT;M-yw(Pjwk#dU@60oK(&rsN>5T?DAkR(us4%K^uLNA1};4h{b|+k+R3{S11u} z5XBEGMG_efGmQ^+3e!k=xDZZBM&s z)|=XjSI9?#iD#OiHG~X>RFp~L_}X5Zjz5kF$9xGfKAsv`p`M=trd^8^=!Lu(46fRf z;<~$QWQXsjOvRXE-{QxMbbp#i?`~XiPwKt|*BI>A-SYZbT4rmb`>tcM55i(`J)$pW zlX2W&i(U1ZhC2`Eu2Am6QBmi3|ECE&);`l58b_J+uM{TOrSj40Y)X=Qj1!8b9&HkO z{f=KgG#N=6cAvSc$EQ`T8V|GVzsog^DM*@yV=u=Ze@PkZW6B^0q`ifekXH<$*PW*C z$6h*8mDykXKV^fZ32Ssu+&t$8C4O{iT-Pef^76sCCCRuf3hoOCZU#={JDR~o;f`}- z>MPw=G&Bs&}Pr~3wLTxit`cpB7yr&ZY2`6)9X_b%^^LV|c4xFD{2dfp1k-^_C>H<(oLydnMeX_gAN( z%d^7q@$JMxP7CG0ne-mEN56=E_^OUbNtf6jdD|YlwMB~~+RCh^Nm94EV4DqfVpZcI zXCKDECXEnndzWq+^+cM-Cr3DeJN&fhfy16AJ@HO;l>W3^oj$zK4%;M8c1LV-HENRel1b=+~ z?f#KY3;RG0A7B%is)etz(rgp%wL%}LnPIAgmuj4fUh5Zp`3$~J=ExV(r80-U61gen zm6vv}OxgFsYv~Wa0wQR0XHa-fF{z_I46Yyg&$qPQe;hV%NWQE}V|{8Uwbyntk0fb~ zPc!`SXF)v5Z$p&+Fel9Q-i)^r$D6Uot6}6n3;ca}$Se6H!qbm2PP6y4D6{i19CZ=$ zvb_?WvDmVeTc`focIDxd!)rN>eINl3d614X+Pv?GvyVU6X)#giwzZFmVpLe(Ki%v5p}o5 z-$4I{yR?$GtQZ-^%cXKvoV8|MN*Hx7=k<0&8z>#HFXC~)J)olfEscNzL4J7k&-
      yA87t*e<<=B20D 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�X(*@9*m?V`x4X%DPy+%{sGe>p6dQ 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%0A)gW@Gf7ubz^#B7qwT~D8_gX}ur7d;K?mcc9!GU% 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

      bbBluk4Hg;ugSz!j%H9I!0C?>4+K{YD`b`m&+Li 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

      OZ-6g^TC4$O*LU)(Ai(MWJO)!F? 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əF=V%mmbpxF=j{DC5nDN3Pw8KZCSXhIGm z>mH2yH!}+XGXH?UjfuHC6DRru#IUjcX(ZJzz+Xl>%BD;*b>kfq9ET`;Wa zh7Z>3Q<3`deP=AZ&)Wl_4!G^7PFwKZL1Y!6a&X%60C#f&ZP1_{ForHcK^%smWz%3x zjg{cI(HPTIc{pwVuj^N0urUn+zb+l2171#~>=7Ey>AblZ%Hspm4ffSmq0ZY>P#^cz zBe7!dX!sy?@99Vhr2cFqb(0DCkzJE6U;bL+qK$oH9$-15n1!}~dnQ-Km*Hes_g<_; zo|(|cZH>QJ>z4%1i>b%gSz^LirXb7<31b=}VK7pNRJ-fiMjV*?l_TMHxo(b|;&R7B;NnKLDZ*m9n1Ke-e!4laGi2^x z{;S(gf7eqE`Q_Ar#-Z!gVtOp~6{ovuU$+nL1x@q7KjM=I{>#|XGZ4WbQ#ip=;6#}d z7>shd$6O0}Kynkn=m2ESAz2B52RSJGwgq>H7sfdJNA3XO5y*81@Ayvoz@4A51Hf5N zLwExZl1buumE{yoFzA3qZDKHQ|} zy2pTlkva|z$1BH$rU!WtG|9vPRfBLB`+PyJ%H$iY0MQbJ8H7lr+@n1ad@XST@G_@8 zW?E0c$(DIeyTLuAjT{2cNc&CN>7?(S)Q>%#z_*zCO{bHiq&f4Mz$Q%m z!MD58Zm>)9&n9<+SIHif3m0XdR6sUQT^J?Kc}IV`2DK+Gl~w(^IrGYA(VZ zl=4=~Oq&)OjRlHrKOt{9#?n(}SXlwGx1ZoEwLQ4Svu{fog)=vO1QGoS0B6u8Q*S~B zegrcSVCQsR<^M{wV9v%uVv(t7t8U<>k zz0uJ3TAGCS4CpPee)6Hd^pl=0N4!8kBXc=%nS3j40nxN+4{dELZE4_a0H0ObgK%(c z7FnZdqK9Bq@JVUgI#9M&78L^3PG49M9B^DifKBT3`;Cs|Ps;B?#%1~$bn=vU`v6${ z{qgTB5Mz2syp9xqKVbx|1ROxN@qUaPr%w=wW#cd*h@*Xf6NDezPpYxemUm;sFgy-B z=aaBK_AGCzESS>pa#HI4dF~cN3=ZoPAq;nAuef##PHI_V5cCf*T9inU;M5;cZvTkU z_?IZWL@kRm2*?T()EX3nd4YeEe}MXm{}F0&NLhNq!I*bX5)}^~y4x#h=KXi5%76eM zZ5X{3rZ`B)Lm5pxmMSw$=~jb%Az=U}7~VQk6l zz|k^K<7%^D=t4*zsiBXpJetpiwqa!M{#5qN2egNUMpldT9ZM13a&l}2J;H>4lemKD zk9VLOq7f_^Jn>ry+jN%GjbCT!MSa_Igrl_W>5b-i%k9g=J4bkkAO@)`B7$Q{VkwLS zvn&*SC-ots6(LWD3j(<3PqZW$abWxfuUq+55xOavlBycK#)y=rLddozDv;8_2sEWY>WKpl>(v6AQD0V2@zgMU0Cfe#8`ybccK&M3b8y6ToIPX0R*tTzxIHyB;1hj z5a=tyJ9H&tq}vfF#KD!sVbDSoufuVjbUlu&B#z$$D@nIRxJu#}f>ja+VyH^uI097? z2SQ9GaV&yVQU(d4k}`+^m87vNQUV!25eSueUxd44-<16Gh_#gXBtkb52O`WRaqtGY zqz)6KGb6oV~^1Mjhxq}$#@Eg5$u|2Aw$Cp`rNcQ{M( zJqTt=9ziHe;s^#=Qbv*=K@dyQ0~ldR8~}hN@p=qjNgPkvzX)APy8jBUqzn>lC2=qY ztt5^UWF=|n3alg!UU8MQQEYuD4MwO+;#kTGTrrizhayNNd5|C~$zzXzO8Q;t+d0Bp zlAgtIOY#6hTM|bI*pfIDVl63S1ZqheOp!Tppe54q!Fk~Db5 zSds<_#Bw)+5SB-+AOu(vE)#s^-M|fAc^pbYS03+)fh(~gqUQ#K$^KB^>Q1+`sqePi zm&&YF>}ZRwNAI-jEAFk%NW9F^kOK$V5kI2o{vl}PuhV{G+XK#s z50DiByP+avC88h1QemwGPe&-HF`uE!fPqq(Sf4`o&g&ku>v+Mv)0S6vP2ZmW1PSnh09!YHzke{ObI+OmjHo(jcuK+-$=NA@PM`EpxG z*#%G7cZYsJqQxhj{6AoplJ)z3!!vUyVL)g8GVqG^!C5GG-G(?bcJ!e#EHB*B8>x#= zw!;n7x^AXeNCh;bWgvtKV_E=jaggbcqWPi?@xz$bpHERt0&Y_3f>%| zK{-2nIu<6qC9m+pYB%!x<8HP5MvAK;`5>Yl5r)|@cPf(%O?<=rbPgI%0rZV`#SbV= z;&)S0{Jb27QyhnZ@+dnS${*0YVagmQY6fR$5PhY~k|y(lF0z!WqJ%oU&f)_+7*T*I zJ*lH{8U8&98~>f)A^PrXTqT1yTt>Xs!<`Y5_;5MG5g#rCiumrzJ%;#x_}vw7o;}89 zU8#Ik17m?%34?$fCR_#3>HXC>YM3y3j~TwdAwmojMi5?@a5;t+CX6DiFyV5D6ef&B zIAP)tK?xIwFh=-(BnctRxGTa3vu;WHK?EC2cnTqd36~>WFk$G13Z@Ja5Fu$0tn>Gm zZ+KwRScnF`AG%?I@5e9_m~i<$4*342_b6cMJxRX?BY^Lpc*Osb?ucbo5vhR$35Y+0 z{UzLwk-x<2Nw*`^@BPgf^Gmo4h+o3h7~YpKnz;KA*7yG2E7F%ZL~y=@p%}`SFiJ4K z_XAgiFJb74?m@u8p?XO}1k+0zc|`Qm?n&E<5t{e@IgI5c zT}DV=!gYeOg0Zu30;dBxG zZYpam?eP!CE1)w1g0W)Xch%XVkSH;I@HRpi!@iWNleW%yhB#knV!OC*Ee%&(NWCyW z7g-`t3uMlu*&|RRl#@~78T3quC;mW69exgCN>Eb$4}{hnt$E;5lr)Y?BPsIGu$QjaXVLr$B0HrEY%82bw51qI#%`KUV=82 z&%fBxIKEkKi0Ad`7&0XBkhC0DE(f;|6g4GP-LMM)@^gQBF+#rZQI4E^v1m^0?ok|S zwX!5KuVzUO)Y&l~7qK_MD2;6)rV%Ivauzyv3Zz#=BuV~sB=oOf**_z=4+-}hWp673 zhtZ>shB4CE9r#pzcNbu$v3uf(>6N4Leh`l9c4t-Clh1LV{t!BUi1ht zz0MNb7f|?=Vo_A*=MdAlQu0&bd`XCD{A2G393rNbel2g0+4)V{T^YyD2IC0Ak9c5@ZT5LsJ16 z%BDeOXM>eB2xpdfNl{o{lxS6w6$NT_t7?RpN)L!>M1fd9B^;yAh%!G@NTu}Kb*(UD z8Udm7<3I$3z8gRxm5(<=Lh60WYQhZ(4}q2|y#qzBgp3qyxF-gSCJqBIns^;hx1{TF za5QoJ9v)4)B?3qj#}GuCI1mF#6UPxunm7;wrHNw^RGKnKz|xdK43{R2B>|?H_eGFt z_D#t@kHDshPa@znaUgA=k7~47w%_MzCw*Sjq}qq1VKR zBJeeB5CMzHg!RG{*5oG4n=(dV*tEeESrdn1 zlOByyQWMAGh-=afSIjkO@QS)74HDe-ZUn_jJ|6dBtYpGvWUTq`@4uq2?}ifa*LU~a z5ZL$-f!fwkG`V!%aSf(?sy4Q7{l%-z94C`;iPWVBTLl!1Fb_5QVRvdQ1?DkHa)S~j zQ10nR-Tu-a!eIY8#Wu$OA7il6ouL=ek6^G!MMfCx_38&9dmo@7kv@3ML49N|9LXSs z!?)KGJ}AyBqTezFmF`R{+is)K7GL?j+M(%N%&c^ST%&J}a{?qGGo(MQ%(DzJW-v-3 z{ZYvE&tF_@9y`5#-qV|Hwz6ulUUjn83*%tHEvywO|4;S;TC`M~4q}C&qz|h94@Jiq zfk)U#6dou2Ft+;V|Nfr?Ta7G2%$$TTCDFHAhmF#6>-kDUUDejQ+b*2@{jel)v?ljK zqe<*3@;t^XpxoP!1FRsVeiUH+>lP6Ka1kj#GOja)3f>jL_%Nyu#$vP8WSwKR)$U9E zQ@+aXHn%W4DOQ9niT0ArK-WhebvI?9pE9(oBGn2)@$kbS>Yq-8%8dNB>2<8(m$V6e_q&V#8R=a(Z|CL zg^k9q#X->MaUxOLZf7%f`POu|H+mX>TKL;Wx4Z0D8#k|Wd@&;s^g7EO2rAIHOCHn& zCIvXYD{M4A{Z9qmC4r#vkG*LPknJ9VpbM@)f9bNdo?Ma`U27h!23In+^9D~eNax8n zHol7+4YH)2)?Jqd=w^q@5<>eiTpOV5+BQ^ZLv{CDGY2JBpdKG;96 z8PMtwSN=ZxrjJB~pSv&qmzswj(i|NFJSr&Q{2pHUEm{M-nJizy*7xH@-w5t+e0-Yh zrC0jE54fT0@++-y;D%i5*f~^fqdX)U)0IYGK|t&@^43RhiffKg9s<|X2B|3Hergqb zH?Tm#u@=y~5HSO39vF5ByiWX2SY6bKB`hKnk{K)M=)b_cOJ0bOpw~qr>v6IKX79ef zE>*YF=$y~>`pjtdM0fE@91>Tug%(}XV!%>J*rCVbax$ZD|J@t%13T|;yGd^%g&1~M z;$j_wtM%B;W;ieOF5F8nT?V{++%Hf!NaE%Hr3jW5*2?dcqwVC8%DE%|4mmVs%d_u?!$&zurFqz(x57*2A7|UwI0I_gSV#eRwJ6-^|>b#6%gA5o{O52 zB`prk0{#KI9S;^DN)o(1kkb_d4y1pAs6ri0Ls516eOH>|BV~JZ!gS0lmGA~=QS`=X z>a8hX-jCbrVR&wzTa9Vy=#WsEBvL=QTVvy)texvz@$Ep7%uIpB0W-G`3JIS3wF{3A z$~n|AEIL2pS$=<0rUqmEst=&#o+QfM)+8h$UW0BRT8j005d2lMB2fE0v(gUgX|=17 zz6Q6MLX;zs?9f9LWnV(uDO>{Rzh4T$%b_XFLoa~8?_#Ai{Dpl)5Wl#t_8Thh7FHo+ z2DH(UYr{$YtqR4Ax~)s2SY52U!zoF~x~&$O0Ttm-S}=%z#5MS%7D3_N{~)n++YcY% z9iE3fE=0xT;-tS*!Sw3}BAS(Z?7W`1K7TIm+e4QXy5)1P(O|7h@4?CmtsVUX(FL6= zVGBWH44l7wzan2xZiT=9O7mP?Xcau&<5;h0`pmJjcGyd>m>rhAi@}kyWsa@_<5SP_ zGyB-W9q<+!Rmh}oEpr#kU;}1ht_?@BcYbO^;c`RIRiJJyoNY$zj0P8z;)k}PuA-iQ z-BzX8gN{!U>iC4-`k5?n3QRv}oP&y!X*v(x+69V|Xb`2MVnXG2TBmhI6GbTg4vC4B zs6)>Rh^0w$30!3d`VM5|QP5`jDma{}vn=|~NuIp6>eZ5Gj%$l{k!$8JB-0z72@QZm zs(~Sj)lA6s4&6CcHq}1R=zj`IB0>R;LMC}^6dW5R``uPdrf}w4L(Nc`*<@sPr~RYQ zJD8nNT}LFuiu!fVxJ4^axO@mJNMR4)4+)s2c>e^%yDHIf3KBB)ht7a$l}bi4IK9la z+;&pj9tIUku8{~^#Az6}N!y{&TopWqFW)4AA|9g;Sncn!LBn(Cx;?|g1?cfRuHAj* z8mu#;%NU1wf7x~wJ;t}l%ZKhpkooO0Sq#;i=a;=knR<2312^B%%apm>*oTftcoy2I zqjJViP>FkiTv*V$5jRa`?>HA&7fDP;01*XdOb>4M6eq-8U}YfGl`VPgZng8q`2J!s9~0~BZXvFcFM)pm!Ncv(!*-NE#y)VMq{+j- z5j#b4^Nx0pgy+oHdZY6;Tj}Esv*@h1=Wa0XQD(DAB&fUKG$>Gm_A7(-D{7@4vw@+H zBul#bFi;Mh^tV|+HJe4Q2D{ccy51T?=H+}oCOYG`RP+MakkPAJ-)`M4G5%c|R-TwA zD8>tLJW_tHcRJsi%6hNnnwGZ@)=KVQEA;1ouE?Ly+U0-#5L~G?s+%;cLMKJV&=^fpcvUbJD82y>T4;Tlq5OoKG1GM!*;dz21-*?%+gAQf21O}s zG_@<5m)YvAJQ-9L`O?dJ)pzBweVkkdA=if#3ALr91wh^lWDWD8NX+4un?nB&w4}es zn%wBQC*6O3i-?lD4&5$2_8gA*hTK6U&urwa7F%`C_)1;x4){a8be1ON@*=Fs6FqZt zF-LE_+XoZ{h1#%D1?|2?Xi`an=~LI@&gXpB|Mu^&5Cl>l9cgiD1^GI^Ix|ale3_a|?3}JLgkbq6dL9aScy-EPKMzAGvgzBhW zedyT?dz7I~7wTWoo*r~C*HP^IV)BUxCT?h7AZl3nRVfNsIQj|I3)h&U#MR{j$EZ&;(m^0OGBX4Lk&$^7)#UfAqXKwiJu=#7k zDl#-hqpT>XEc8d$@Uu$LPq(I5{pVp>LRxnZCrdm59^G$k3fyGW;*9g57nDW>-GpNl znr|bmhlBI_VY47e6RVj#WMsltK@tlB1x(L%a8m)4eY8K_Ydp_T-+g1)*Z|Q$$QQ6f z9sf7EJ@(IM7ze}$={;Pi_dJcup!%R^!pT3iB?OSM2xcD9%1J(7^P8;t;QdL1fs=0A)? zlOa?h<%^}@wNV(_7vgM*2oYLSx2NOkJ!IFSLjf@f^7y6@JwsI7YcoIFBHTnoG7SfQ zPwe++L2I^Zu8zA)E8i9dr=GLik+9?|4P%bNXc6LM6kzMY(HeRRQ>pj~e_{0IpNFBX zZ-fYFD<)I3uTlEs+$r^H2gPReJ~bHByY;fuJVXj3dF~1PDKJTzD4=;BSC0s(IY1j5 zMd%<6Bv?Z5m104-4xR$*CVwN5a3vi%qekteA-v7D!{%c8cBwQ={2MPFTE?7-geFog z2%W(9a0jHx&>|(ab9)es7UVX@5wg5D0G9!Y;ANOTIp5l#_%P8z^yKf^PjrN{q0QnaNdIVuBp^Gc@G=sAf9h2C2|3TsU@!5rb7m}HnaKxYyT<}oODZRQVzvhSL(Cv+tcCTKs zNvN?4VQKqqnoa=yaRuCDUWSSdSSN6|IoP4Cwi*D2$T+v1r6Df_Su;qt z&p{@U1-y>h=HYbwRfr6~yp zbi`&AUDY&ErCHN7pcVnce~0P}U-8@R=VIxzoy`Vs`$DV5H$3;SJ8vxZ<=FM-j!vWx z`bEU>yFD1wF*q7($^xChg_}gC?^MyyOa5(Si?p!>;_z-s9Vp$B<&VmCeZDF$rpmI^ zmIaTTg#LM>q4*Q#8QPCMm<}S;h(Lmwfl^ag6tt{^ksHDj2&ewFZF!#S{omk&&xn%4 z^8+*C*CZcrWb6~H^@Asyhh7wJ%+&a6d#^n4fDa(od}Ju#4}=XHQV28M3*$4&+oa!= zU-E|yQ)^cCwU*Aj)h0wG!_S0lcYQL(b>Kh6b*p6#y!PnO%OLIdvLK@I&p_%cJE9MI zpc|B}&o^Et!(g^l990nkJZ?`KOUfICn-x8Ci@`}G9mL`TS4KubHswBH8Q>-RIp`M| z1WBCtDtmU59?RCiRJTidyK^f{vEv_(M}l>sat#O#pq@o^CJ1q~T^1nO6Ypq|hnAyY zm%`0!|1rTar$KXZtm^7#Xz^>IKhH@2T?3YhywJ$896LXb$K$h&--|(-6g8H7*r)b6 z_?$osq2LGs8BM7SL}gH#$;paofTMshO;*rNO@JadtV#)*%4QuQ;ns(~(|4K`{w(nB zh14PtfUNCVb+y`eXH<7I>AsBurc&&96h#Uy;b*Si)c178Fe&2EC=zG%<8;p0{XY}k zqfMVgPRs4(wf5kmE5%F0sICI7MJ=nH0&^n5G6*&cXv&PzOu$FPqLNE@&Qg|zEJVEL zDO#3EC(_Xf&LHNQ%8en@h$I>zA_Md|{5d1>_sz#X??=-4S3Ej3;rZ z?}yI|6h4CEHcYTpGpD-Un{}H`V7HX-F^LwPHVW?TthphOSbI8pD8|prx^EjSQH_r8 zxfS!})&*leW5U=F0TR09{1TdmFx!$cHHuyB)jDk;9$xcT_ndokG{5IwP8MZ^d9zTF zkhtkmc^CG&aWHIm>lgq!U|jYNI{2yi8KwN;jringdqj}`3HU#iyYeV#0^#1iMe#v8 zBKw5zxQ&9^wbgFB@JS2oa4;9Y9$q8sv}%_{&0h=!cE+pHa6IS<%y8xRmU)6VMqB!- zktIkONdnLo)(MAO<7yaL>y#Gff`80UDs!$fI+V9Dn&V@y$nAISefwewZeD8Bx*^Sj z<*32()eBi7hGB4ZzH3xUwk7~)Gs=+4lq$5v-K(1 z-fkjX+0vSdaV%`AT(dfq&T{!As*9TD2v1|npT{lN2{@r#ri(lEeAc;8_z_q>i z-9rHxKCzE!eG3o6`^%ru-b6U71qKQg!>Oo&!p874W5_0ycUGZ`GcU=s0!gDLYR$%* zj1FMMK9{z*6UrVCFgDX+wWT?_87`nvk9Lgt#MdF{CCvD{eY#;uCPl+=qDNb|+ zI6?6i;a?$}Do~IqBo+3#t9#4VJp+|7iztX`AGEi-6MHB%=*Ik5J@wozH+S3Te9I%T z5Qz5vhQ^v2XkQPA0WV<6bD?*)IP5@~Nb@eB4OSzz`(uo_-f!0HJ)tpr!ySRq1?StV zqIkgg11mTv8^E#tMV?87zY+WW7=MP2{SgWrOAzJc5zbjyZc^8zVwQY^fD2; z#2bhRvR@cV6qpOBxEPm)D5~jU|Ef@U8eTxSu}B`iDXl<~C)d{BG2zmMH3s|s`oaeu zB=dZV2O%$&VsLaHO;MC?uuyzmQdFq3!t;iqtBj^e*xZ7W^$-NYG76zdZ#C+ReWx1? z+wx>l>R58?Xm{odZbwW|_(X7uV}S;k(tXtc2p~jfEcitc>H*RWrEdsa&T_W4fz%%2 zlR84mf6m`;(ayq>4*IkEAVrdS2U0w@3MLJDZ=7?`-=Ct%k8%y6j4>M=>-oa`Y#nE7 zds^mJ)4ICaaEr}#`>0j`ZjQ+}9`GdCKabSGrFjW;if9Xi*^QFw&PdcBEW|fCnBi#o z21>ReIrec|Jien0AgKq>tssRTQwMcMQvv|En0q4OPx=Izeh7iX@@3E0m2-PoH70L| zWy4y$RF_rH@%!4?$LZ9Fb-)rd2quXo%$+Gn3qpK5LCu1N0;)1%B#4#+-vpRzK%*F& z*!zv*kt5Sb;UOrr!Ey`aE%$pUeDik($I|F` zl)(rzR8CiQiZ>Kw^`ZTHmETXAZGouv(Lz7L|NEdqgYOXja17m2pb`fD12B6V_N<(@lD&h6ZQzMSf4irGMt~4ec``Q zrNaV%)&Z*hK^PRBY|q=}_KrU>z5euVj7e2#F7w5Mwdn6Q%gK7=v;Jn`ytO7lSTzZe zimVwB3pOyE#`jnS0J{?A(5MVUF^8;o$g)7;M@9~odylQVh3kbVJ|;O)x1%z~r|hUc@>Hp~}N`HsyZq-E|^A_ZOL&E#4NoFlpA_#Qx4yCk_>~3NGwt+H1frunm`DX_gLVvAEIoK22MOi(hYZr7(`mj5fan*(meD&&Xjwd@ zKK@0{HwfN`kN{tEbC6vPzEX&+H^G;S{`KFfrKCFPF%J(mn}Wcc2Ta533*7;P7#|w# zcDr^wlHv&Hlc9*x9(;fRxIz6IaP$iAPa?#{v2z-L2@tfl3(omH)}J-kbHQ;AK@p*} z1;mZv1Bg)2HFA`rjb8Y#qXl)e6{ip$M1CQB`SUVx?E8Hle$^*Vq90Q8FqO(hwGGK@ z#m@9(l)C*zDO>xnN{&v2#3>OY@-OUv}V*`82+bFiD zC+{d|ZOkHD6QmofD28fi0qJN#Me8j?9yDkDj18RA>7IIj=a z#jAoF5h=vlQV7M!3?fvNN&h{B%J78z)P##*x7cEV)qP_hERI^VXun=YJ#$X6g<8XC z?sV$7oR_uojj+yPyTPo7kG;F7H3oe3F>+Rj-!9kQ+X1wIL?LXGUgusCy|XZJaJ7zJ zLUMm^$}zqO`|y(nI19ZdMAU^s2hW@?i#jVq-wBmtWy4@Jj^|BLQc(Y4jZ#EK(zQ@O z#s~wZO2ZY$N^!leZx^S^aMSFbs_N^;?~6r}Wrs+*A;%a6X&4mugZWP0B8d2N!X3y;RgR2Lfn%P+|w+Ii&j)eDZrbbVP}H8>g`n< znvzu@i^JL=7gG3LfA*Hd<^-_@$j4%$4NHZkd}g-eH?DaZ+uHPasn4i39h9yD-8cZw z1+0YZ1TfL>Sn2)A7E@7?y9L>x)@Hj8a#$ybj(_BFiyd$y6q>jRXhy;+6nSG@w391; zHiM6c`1+__oy$>yU5xODF?5ldbJ;+jO>*b8u*y zo!Pvo_|;Rse6`0-fP#>*g0ninPyUWypky*4PgDv(H#D@p2E!rFEiXd+7$z5*C!|@7 zFfoqtA*hw$6tPzljhl@nu>yf&OWY(XkuuN0`(RHg$wc7$GXlylNV= z?RJ0Y_mu6Wey$IL-uS>uE_LN=?DBP#g@vkdVUz6vaUvy#Vt5=uCz1aEbT{(k9Xc7w zz#Hfmdq;eO$1Z&lK@xLecMgt1s?qoGJq3^ZZUh}~0n2P_;GIG>B~Pwjep&fITsF<63fx9)(TbYXaV z-@Qb7j&Oi}s*zg9eKv`B%*8~wl?`Rg(4-s5zGOa<&Q7{(-j#n6nCn8KF zKv5K#-o07l*JJC|ptr9R!?CMcQN3=g1;q9H;Bh0{3gHlUrzpG_5e7hW4#)S!kX&R6 z0aJlv6kH8w;G}RS#6mFUz&Vt-;lk|vLiFZP`MCL^q5+`M_oes$FxY*CgQ8c0l*5Q) zC;*wKlmRwvfO|hcmcp9M8*W)FzA1g9@*Se}z1bns>;G?1i!x=MQRlX?c!ItzVMz%PhuPCSPZtlCN{`u9N*L>axrCcQdtZ2aQQ* zv6;M1h5T+&VXxLlIAI77M4u72+n_ExS`P^L#DV9ZSdR>lAf{^mTs7 zd5FP(MK^M=yVF8PJjGf#s{(#C+;#`tk?;AlcR$hluAGfuN@5Oy1QA~+U1bTu9`5BH zt`h1yt=aU_ZIoA3(-k=XAonlF`r^$$hm}r%`nIm1{5IH63C1IM*zb;?n7Boi36l?d zpeLFXDT#RUxPFK)e1fz;e$H&fm-A|MdYvtT;-)I(_sw&s)16p*_qv&Fz$*y?19l+C zf*$n2>05a!LG}L#El>XSy0Z5+7HC4QS0FFA|NZEd&bN`}xVe$x{eS-lQXvEQ;~7p} z#s5zbzR#xh<5`ddGnfa1{y^BVzSi$`w_MAAD{nfpmOzuxPqgZx#}=SG)M8Ep zCpD^aAZwyQ>l#g|nyfRbW)l7%2F;7>zd8eFLf8Gp;mAu(Yob<{!>h6Z-*N(H4g!=Q zI{6)ZBF5au#he3mouS+bO7Fy$(w(J%6cE6@uTgC##tx8UAq41>8D>KV#!@-13$48Z z*vuoL(8v8X8|FBksG}mcsN|;$+71>$@G3E{5I{uotuWW1x~E`vzOxyi&?pwv*R+Aw zUOlfdz!VSqgP#}@0kkp5Yy48eII-Edq>?#H_TdNQRe3A!b+G;QciS z0)BTNcXy4jV)-DPWCyxd)LW9x&U$@n9Slw*NX5EF9zo5uK!K>nn>fC+%OJ-XSp(N> zKNpaZC(z^k-2eJtPWb5m{@)Ns0{eD$6&K^F z)1}?5Ri+l#SQGn1D#K$m>dtvjb6|icos}VqFe}G)KTdZ?wfzBe2U8sJKWzJ3nn$eX z3)*$?($A~gKYnsHgzBsU$sW>+dn#21gIVFl>79eZNxzz{Hfrz)Y$|~1{Mcn2a213> zMMkTo&WnIJN18*XGj(w|Ktv+A;S1yicPA%)~Q;wmV%To9&CU3rPabtnb5WePp@68J^qj zC;#{hj5#~_?J)QKPlpTNr#}2RBeW)O(+$fU#uaKfFzc5(z37ytHD|TDdNv)<9sq*~ z3xWe4`=CPN=4;_zz@T(^d$b{vK*reGo5)fpp|iI)#p!Un`dv!p577dfD#*8VeOY9m zJX~NO@8E71h>Wf2ooRk)od&ZR6EwSSdEgd0FAaZEBJG<%+&MZ=4#0QVHjm;pBDXt~ zssq2J=AE|z%Ie%M;V%f=uxu-UYIF$^3Nfm#@4`#b3-3q@fBz+W%HEboL-j?WC(x>= zIJ%g{ym|}<`Lllw+lYcGF-5@ho=lUFzuHmcB{=fHoOl^8G=)f&9Dn*OQM*^H&DDFaEq&>{x~nTAAqzX|UGTNLC6L0Q2_ z0E62uQs%+si(9;bxV^amZp49*)q|nC8y5ojV+i8y?GF^XebryWOXrst*KdjgZ@=oi z)xD!uQAA3y!L7IL4ccuD%}+*g&1UNq;OcFiW9f{X3H*RD#X}8$1&Rd3g%F z0kh7eL4`c`mq>y&_ow~5T{HXh-C z4J)+`Mu)VDt-@T5pfV<@F;+|GTq_+D#^dJtw3)RUJGob1caudvxT}_~i<2rarNh8D z!OgiPQN5R*Cp?Cood_j@)T7lZ<3fd}HI%Bn)TIl@6?*&IbOOGp7oA36>+lRzTtPTs zYE;I8W-nRObW7A^ivgKHO9q@^md(kKa1w0JAUl+-)G6L>=e2V>o{25z`{s7gvwNFU zZx96fD-=bNbT_nnhTtl+4Ms;%-ODI_q~Oe=1VMQ-@LOJd053~x1pN2~ZTNkjA-oq3 zo%mdAa^QLgo;f$-ZC#HYH$rPvt4ZA;iR6!jU=gsmA22*8!vWYF1yG^{#ynhs_B}i6 z2yJgB>Rk#3iEtYeu50}_+*t0`TMyxNI?#Py5f%J88B__M;=#3kMUX5HOGU|mqy$~N zBGjrOTPYiYqRX--GA7JN!q|c(17E>3SU^PhU|^pkT}3N+D9VC98&Lz}g_V;aI3zs)i)MW(4RS zgOakzn4G~Oq%>+IdpxzVnljaGt((^~D_W-B-jR!ets1hMcaV+5x` z_>T7^<41O05#Q6k(_?oNgos}mIh@{GgbW~l(=SN}wq(IkhYAg_5kk`>OVwj zU_}ECMjL3`x@4l}J6;l?BM;w&&0TM#6nSx*D#c~Ka>yQYgZid(ZY6@05x&0d8HB+6 z0NuEkC-5bJ?mpr$f%gr@4)8Er(%b;WBI~>a#{rY4w?L-ZQaN=v7VbAklXpjv3o>yu zK!!L~{`GxHUf*cL!Sd3VQ!X_>4rAt|(lxp4ewf?k)3wr0y&RI;6TXk2(f1}$31t{V z!a`Y92nRowP>sQm0dJMiegY?Hdq5uqXr^xqg&f!t6n9qJ)0O3icmIkcpbZO5x;K$5 zLO+(mvz8>Auw%sJOcnxNiH8cK1x#hYZY$8F3A5E$5^H(JHkZk5f@^3^XP51rvin|U zQYc;K#vn_$JwaZ4<;nVBzP1FncK7zaCa{;Sb zj-NM<73EK0?;5=&4&$gdzdJ%kJwN}gGBL)Q<$Tm9fZAH_KmM`Tfe!m)v%Bg16C@A_ zFlE5?r^_ffGG~B4gLK{i?zRkWT%HWzGh%@+|FNhTF&q4qg5UFhQvd%z%pvu`gtadk0 zeuV+=LldBD7?y4@k_f>*8Cn35daCFsh2mvElC&2^@g3GDdBLROrE zrFOU31HiIf(*AH$`gL-Y;sp@s4xv4u6B)h&I_C{!oQ=idNZGUCULzaS2OW4bI0aA( z5`;w;(D0>e5M9j|Zqjd+M6lL@x*b2g3-y!_e!_tpRw-Fi^OS?bk*wrKnOUK*Jq|saT%vi$J*#jT6 zwqdal*WkWVd8@r{dc1Mn0DlE{RO`LP(qt1>y`8oS^WrMAQtPH}Z4*n2uU*P(urd}O zeYj~klvx4xpsTkutmfifkL2Tjyy=}jKSG|DKq+i^@W=W97eD= z-~)lZQGto8*|18B7d1h)I5^$Fc8dz984w$DifBWo!GxS{v?u9v-*y@znTg~_xGwag z;@PJoSKOuaR&u}##f@E>bBl6u3z%Px3-aZF7{HPf?l_s!)zmBLg2zp;(7#L^&i_Vx zZ|t3e4@@lE1?GCdlAAOB$9+p5YI;FeK|7-8=hxB>kh_$D&VVzWl4h9}q+oc#5G+__ zqg#-JFm%A4z!?eD6JBB@T~~+)+M71ZP8~jzI;;((R#I#YHzQeO8u`Ejb>ZxqYak!y zUvS)mb1yTHYQIX&fKQ8BUVH=*NpF&sKFE~Ai@-#Bxs&+Btu5LJir9cv@LoLdMXyGx zTzGnk671NgAQuu6k#}uh8`P5^b^$ObETMymSwVz=nuXI%)EICiERF*o%YrFc7>ogq zg`mlTfw^$tL0qGilqK%psLlY-c^EB@hhS-bw+~Q^dVj5(i)e1bn?OhX;8E%BOt? zxljoP`0{bP3jXTxVOdXBTHSeNmN9pyUcV^2;G&6{Lvh#(W`Eqt#?Y6j$^~5q*Q_R( z62JHl@SE_9{OO5v>a3Lt+);Oln^!T8C^Xy; zFNAz}2@m;rv?f2HfFf#`d&KhsVCqpHU#k}Mvcic8Q-7K}+D%-|T{;?7>jT#hy| z#Fy|V*WSIcN*wpN)U+(uTU)KlHd%|8r;Xjb-{;fmWntOLHYfq%Nniwg@#r|=WHY2M zE*15vwMEN2(JYTIt6SBH$lYPlptrgf4t{$S#lWi0yat3&U?9xlhaY47!%bZH-GqX; zotUwSDwVa)alx0i$?kD^vfB&cGWO)Iy*5t?buV6}UpT590mk*C)hK_M8z@I?{FDLm zt?%=g&}UyeS05bS>nk_Ox9x1IG}=g~on9`tHr2VrpYy}hWYXc<&7h$IF79)Fdi3e( z8r9XO$8M1K*O$QT4dqbPYWA_%&?i-<$2HTP1fQ!XtCbWu13sM#$zchL8^C~aKkg|3 zJr8(K4ET@VS_UJ~p011KHw@p5j3JyQHzU@X5ng7~e1CHA$9mbOUMi#c(=Zg&gq;Ym)c zx2Bt^YeDka1>hWR@Dvd41l+W%Dy_G%p6UqkPfYM8yxgkSf`&@{(BBDT0Vod*oq{lG zt+_M*P`QedKx!~oi{9A_le~)vg-PB+f638OPQ<%*X_PG1+0L$>=~kLMM@@^yWFAzz zyo&{5w!TBV+fYdx@`52x43;wC2`=J^RdC-Kr29T#{rm=M+AzZfe+(n((6avDI1LCa z!KDERK`8IS^f*M8I~_ku3+*B)%0K%TeyOX27z>PC;fpaii+pbws|Jr%m5Oz`*eDx#* zo%f#fyydcHtN9{q4^T6W={8mFI>jurTRwUAOPBeR@MmS(?E>Z$9zJn!TbOCHoOUbgqOEYJiz zq=}FXMbkt#;5DfFqp>QW)XI>vfGUmu2T)u9r!xQ#P_g|*PL!etZ**7JgJ)mOIelB- zy@-U;$(tJ>xEA1gdIGt+38H=>xDld$A-EZCf5E#UCg)nSnsC)awwVyDg}7b?O-E)@!wuuA1NlZOIqA6Sr}dfGlHc2^2= z5rAHT!*F?UKTgXXPP0OnGLTyU-|pbeMQE%L`r46rky8Q4U;{mmXS|@+J-@GoTN8Q* z+?i)%FP9y1DJ~B~8UqepSVjXIEdQ~^f61`_`=pJROEfO#t&I70s46n;K^?L_(x$#K z*h71!TgqWpOxLCtx622%ASMTR5?5XqT_dZ*j2o!n9O@sY1r0kU+;0AgdT$BTZSsP; zJ(s|=og=Y$jF>BZ^Dg5>cY&HtRcsaf0twhGl4Jp58JKaz9}K`SuB0JQBf2n349+D?rcw=Y z4?jO-(s_?LaPLR;On1WwKyO~Lw5rdgA_%CB)o1z8-y(YR$3HvNt1cTgozgK z)8}jZZ7Viy*z;nxTAUVB;~cj(+5VyuI4p>Z4WFJz>CUT;Aul)V)df57Ye165`0Q7i z{kpTW^vMR;@JI>p8{MtP<7d8v@svasI@O_}3fxCdv~^zB6b-sEY*PmZQqo{4573H1 zG@@q0LP=Q?xXXeBPc(&_yI+a2^5uvY^OIUqXs-yuwy*b}(lv9;DdnrNRI)Olc=GTzcbqZ80b&CH@a5cFc` zo=LzTjIB>N+({P^zOFAAYPcgB{(b!@PE~+K`V4x;=oA|>k4*Zi1j(G30 z-!sTS_yv|dvcE7pGg(191DM}E@UWJ^1kf;|#YM?v2yOZ-3x;_C_*61yL$CItjL^y2 zY75+{G_tH&+`C+=IqOoOMQ)(?^p|AIaot;j8hN5=F@uzFgea0BtFL zH1Q`1__e6x9R*GWAXujV3~MWnK}IWes>~8|VcBAo-e7sM#;1Mu*c&ebTS+Ez(QrQa zZ{bBAVc;`N-=1@oyFnQV7-)x~e4?kYZ~*@tM{jW3QvcKSy-;4$dDx9Y=9e^tOg;tCfEuOZI+%+_7W|jESCF93bu?1^Hxf6#dRVXZw6Dj zFro-15&l2QUa_IsCTJ;xW-f5Wph*fh$bn&89su+Vg?>Cc_Ia@Io&q{k16^OE9Zbm~ zP~K#;K&BE5r`LOqTwYl62JBSa6yW}#{4c!R5E5W$t1g}ELf7||+gF9#3WS52VS!X3xq9vM11~( zw~rWif6uu5qW6Wd8Kas$8x@gvcXCOY^J_CvYCD;<Xh}U>BfL z`C_Eew?Q0n^mTZXG!NED`KtZ_?@N7MltG5G?2T4RO~~c~9A;lOTmi6-ND149ZY{sa z%;nu_Cn%MD)?t;NlNZX`RP*x_Sj>+${lE%Hzk2L<6~QK9-$Hl++%LB6$L}=qHXNZQ zB7gJb?E>Y$g$0cz1wtl<6bm_H=hmtE$d%1itkKGfhuvVF<4+Se;kT9|AwOD>1CcxS z*U3@%`i7j3zY|9usV(i4QFB1Ioj2?n+kylcqj`#XVNi>6TT*Y`H_fNl^mU3T;!l_X0~{O3S5f=xZ>X@8L0 zf8L*b@qZ>Od(f|5w)UW(aEQ42&6u0Nd7m0qGqIQDJ>+Y|@(3O!FY0}dRY^+7Qe!XW zm+DxM^MbR?rPt=5&-%qV^fuo99F$J=+808l1r~f)bWiz2oUg6-xjF^je8tc6TgnqT z78ppJh$|%Wd7?f{4il|ae8(rX;&!t=oGmNc6Z`am{CvR*h+V=}0tm@qlE|wPJXo^w z@p+xl| zogG&5r8ZOC>ZyibRq&)Z3EGdyuKJJ_S5*b+tUq~*nu^iX64lr4*VZXN$jigvrY5iL z;;NGVv)A&xsU#*eMMPe!Ck2e zn}RVK>(znQ)k9VVFM+vlnRu8w zmo@fY0toHA$1CdLyocZRevv$I{j>L^=ftP$sf^@owwrE8-A$$1c4Sqn-A+1Jp!rztvF86uDGQ{q9sq}$Md*uFd<3f)*cYdt;Yh3kpYSXK`)S6VZP+gxhIwe-VlmY zqVMIf;DiG%S6uS#fo9`uF&6VYo9rxWZh29))7*J3W#oN2H(yQT!CD&lqtAyss9@d! zCDULw4w?i#7o5~QkpF_n{3uyTZ=rg{6MvJPRDoHEBtm#$D3%Zo{L!3n$c-sZ+4M4= z&CUwbWi{EUBo<4h*eTlOF&+4OD~pi9Kmrf96vE^oX6*YSetE0aoiNm^cii2x43-mL zML3`1UDy}W_}^+pi8dG{w#1i#&QmrVUE;^Vd=RN&rPgZ9az4z>+Vh&)Q!}x(dm2p5 zku@`YgcbU244(0t*HG^By8D7t!7^WlMSjO>p@?sR3Ok|Q^JlLa3YleJG&m`Y1%u@Z z-9e*Lu9ho^i*kIOXltdaJj~h4@y5r426FZLT39c2A8N0XRSd)OXO*%KHW6LrtRm8o zptu)`P*{5}kAJNa^^I*rubPU>C4t&{Ynnp#;@Imf3N5*_Ee?S!!^Ai8qSIjocfIvH z*O8R{RW@D|^7SGe2{xr6_d*ndv`FM8omZ^!d+pVERnkO8xT_dRC?sZSe_%U!O7_?cATFnE@XEdzIqXs8(=#jh=>Sc>u&2z^TKwj{@*7QW1;;`k# zqWLG@S>#z=gAt39Lp;Y9^R>;oEW0ucKV;K;n=Vv5Sihkv44%X$J~8Ct{E8fsDcZmB zlB)jfZ5&UvlbmP{^naoQjq`to9U}N=5-=i3f$Dl|N4=n zMqK3gahE>do^AVpwGucF#j3FW%=6pA`#$cbv9Iz@KX?1btD;7GPd-^B+^gI)mJx11 z@%N!%RbCmXD010uZ<3=+UB5G zbOH%ZY;Q{nI=*h#vA|MryyT06iWeTsh}_8XibV*aDuQ>W`#*yRU#nWuc;}b*vjn;d zZ-%r7F*3Z^!GCwS**#H&ZuWwto{H`CWYr({V^eWGt{)pxJKm1f=s@_vq6Xl%p;QC( z(g*i>P$Iz@=6)(tif_BPA^MQ=b@OOY(E{2j0ZY`pH5MW9s?}I29%D8Mty#+Nio>mJ z9G&wdvpdsnz{C9y(BXgr;9$z7e18SRl`l)V|37~X#Eo)Z4fqhD-llWN6R0chlL?(( z=%Ii5`!YfzPvusrvb_>YwU#qe9IbFJ%VoPiiS_6(!rT6UvdaP*EDHC6Gc2B6_CtvB z#Z|zdB;dTYKcwZ}#; zx#-E0Y(izR9MHC~tunhTxMS@sd)Aud=~&D9wOIu&{(3bv$jAGOL5` zu3$0mVQ6mVOt;@^+H01dgb6E=!x+*%L3qA4Y*Dk=D!1uc^=_|`jZ8L%I087sE&xB4cr3-UY$dx9x z*jq1?twFP#u-o)ehnc#FV1T2S5Tpd~1t`tydlE?K=y0V3UxNnMCcTP}3Og=xByT}Y zV*Ta2N1~58qVyX&p7UJ@@4`W-Fakt&b@Z9`h7q>R`FM(r^HMW4SdZ3g^*nC*U^(>ZN-SX(8*+{OMmnV%kSa36A94PUV5AnFv}2i=Wnd&jVBQ|{YwqAaP$3~ z?I*rSpIK#ZXB#rfj~ivtr$Ak@!2%gY<=tv)(e5?I>t)u?%(*3PB%(L0 z2r51gX&X_eR;)xwo-z|)Res*Om8kF{Y++Z3F6nJECf=`PuFAP#JwEE%_OxY4HKvkX z0V>o8m4N;3f6qO;vzo;l=L94>P-ndq`TzC*{XhRNARq_}Ei(P!9asy&~`@FQ(&V}$mkgv*r;}U zzHHC;o$@Kc@acxJ%K1PaWY?c=B4Al;j79#klk7&?$Y%XY`v{_?9kvdEaIQov!1}+M z($8<)eM#)hG)LT;^EjhT({!;2RrXL_^Onia!6p*WU_YG(o|TW-`YMz^(p*rETd3}d zE{Z-4(a$eeJHL+T_ictJS5)i-)8GjtWEwgNgG+aZN>$W`b}479XE8C?X`Gf*+U7>H z<9WzC;AN$}$ihCBXlgp>F6DGlQhEncx-YFyk9HktX#FQ%oV>fGu8S^n<~zk?!%@#} zK|iQX_gs(jn{k&eU-;B>5*>%w8Uok_D&^4f80}Z+^;;M1bLp5ji@L^u<%RL#pO0UE z)h>`L^}=Sd&&qIfW~>`$Hq*h%92^>LbCT|)j_onv>p zQ9=gx3E*3W&B(}6p!_g&bX_>cIOu(E$hU72{9FFVeCIl!M@9OVB;f2WdE(AM9Sk3N z1Bh^XdD!oe$z|94+!ooP)5!Ak?o1gi-J`p1rT7Y+@I^232p-O$?bMe#8#>DF$oQ=Z z;;)JreF!9S&OgkEXzq)b$u8H1Rx6mfvaU|#QlH@lyVkiO1QcPA(<@YRMZlK!i55ff z=b_EtmB#(5l*0pxNd5eec3;lZOu0R=3wqJW^|)N=G@MA*xp=BJr=g<^UWW|hflub& z5Aw6esw96&q0L~SQW{`_a!~bEw_1tsjYJ?vsu-xaV-}P!C28Q$OE$Qm7>h^u9gSfzx@X+%i3!TWUm+eGlU2g52WlMFW z37@LP*2Bb*PWgItYtZToznLm6L*fTFLWIx=Pyod!+gHif)ByT@=NY~j!stfd5&360 z&cK~yUm3pm*8EVY!t6=rnrmIDooeoB*6Svkr(>b$ShHQ-8YVYvold3^b}@(*Ds?DM z4i%T7AqAa!{!U|b>Un?gam7f!tI1adW_|M>#N?-1?4Nrc)*0o@uwX(uyI3AeZDVh& zQp5THY85K8OK(z#GAqz+svhhZ3-=njEJ~Qk71Sw+sv;Hq5_K86*3s7jmq=8W&27P`2ZdPD-A?P)9 zrjb!uB0@h={2v8xe)($&r0eh0yFjt=moz(>!?|I*rd+Je&*|>5F*`w4dAHxuV+0;& z%DX4feHCiJg6)3T%_h5fUxq+a`hR70eliI9Wn+UU2$9ZXnS^Xj>);G(vmURFat$S( z$ua8;=gf!g)tN3fVPY3D<2NX25#YMW8A03LQOYQqB^@ospURVdRftFgAVMsFkOT*o zR&({)uvzNnkM%=8W}jE-{o-_L(MgL)95p~nF;I>L#ve8qkBQVT9fohorzXS3pGXpr zs<>&EI0&_Ba#Yw&y8<_w#>BE(5R-jzv7OOAMI^f#m`aE%#&ZBO1x5Tl@ajkzzZuHf zS6$*$Aklz^LfdM%3#F7Dn~HaYF#BHv$sz&38-;{^vARFs(LdgfeR$cr?QGwvA9wb&zwc2 zWZsS_J|2(pWfHQ@3|F2dV$PY{k4u?zcRAR^GO!2QDYY(M0|)Mc2uC9rq%ijx8df|M z5Dz;>aSO%E)MqNfiylMdz7okv6wsNK4Mnwdm4_4n0MMYROo3%Cnq=#?%nLdvDU1P+ zSO9cJXG^pXMg$9z267MQB{J}2qR(%JM`0k5$i{yV5YE)2p8ASxhhI15$HA;x!{99?|*wOMeQA98zCOPGHYzUb9?P0CZ~1q(!`L zr6==kPnW7W*-9Cgd^3po5w96=1}H~|))x4ESpSKHQP|WYAUCuG( z%_%Y3H8zFK#i8RqbubCYBZeqLq;sHXt2pvQXqo{a2_@mW~#)WGE{Y3)uj56sb94?r%UDo3&Y;XG!wcrm5_tjnwIhRc-T?04UZ|I+wmQE*bjtF zc-UBEkd*|3{gj7IzKK&sVh>W8ubjmBv0YeB^CNCra8B#SWv&Tc_7CS_heRJycm1h6 zY-}Cin4@{v@Pjjfj&qkNGk7L651YHaZazR&r)ZtD0pSQfAo~dXs&#OFK%4@{A90!g;1|2w1lX+he}L z!wwlY>dY>qlcduu$Nhio`LOPzi}~rQ?|%VsF(@8*#KR_cLN@6fx|@1UGuVRF8>O2W zr!jKRHP@gI5ub;BC(eS&D-QSa0dtk*fyxif>MuuH-y&WARgo9YTvtzfzFt;(+gN2a z=jF4piA^ns&&{|?$(KXq=7*$f*v!MC@cv8KW$qV2T|c!4cRF)!vCBjs+XJ4B*J^Ra z&yc=#UA?+;9Fsq0=4IHR7IrOUeD$eP`75Q)%DnZHN>(x0sCE zlNDFr^u?O0thBMsFS1SDtx~Bi#Ae1Z)E%=c^1OiQ`78(j#EZ?oW_G{Du>Pw|ZxEw` zmyR5H2#gTJ+D~PzW+NCPu_q&7Sg#DUD+^`7yk7{|)#PU{!(|=gR%ahyoC}HL(jK0t z>S@~UjM{xAWX311u>=$u2px@Y+{aaWOYKP-{Y6~0@9LonjBZrozyyIpHh=w)e}>rtMO0l>XIp@k)YpY~S25W@F& z@YA#@h)AA*J;PTK?pgOP?9UG|q6UpgY=JKW1s4H++Or7waTskOQp3)3dMwHNX=fOZI{WTA;2)H;-sg$=t1r4Dm$a5CUO{aW4? z&GM4Bq|>j|!+*Yp_W^!;YK*76K{P1!jr(mp|6y5)^Ug>V zd$j^LV24d!G&4Ch2Sgs)MZS!PV-LbZTGMF>8OFImvi=Zq_A&6A7Fo2ZxV&lDUR)mk zN?t-zzYqL=YMd{Z1crhJeiI9Ama}vHoaZ-vdy#1N7-lO8YXG;%*-I}U_Z;|**~!#w z>{aOodVUEH`xT?{mcZ|)lD-f8CSn%1Jlj7ml=|5?DcKXZSBH~@GZU=xWz>-Sd;t8W zp?%2B_#*Jz*K2Twe>LE@XC$tH-_!l6QFN+i>@*s;PpL}0T-@Zhg>pVi3-l52TlN+K zP|Z1%Os|38QLY-CDCj*t6W2es9;cTL8bK4FPd1?f}0%9gYBg8)xSf ztFq#HS0BXlnbS47%LM)7!5W!2dk=V7AWGr_MrH#$aKYdDQFW*_xS5J86zSxZtm!u)c9~$JbcjQN|!N z^B%l&$Rzle^YZk&2+4jRPZ*F(l>wS>S)9!pj42qFVgdSDQVrQ+O@n20Lp3?wu%UYi z-WqZ3W2;&`vwf zQ4I)ct*F`>4%RpsqtpF(IPo!`EGBc!`Eaf62RH#?h$JE<(=AH&N54}3KuKfR*hB^? zA}qmz-CASqFhjK=_@hu=h+N`Nx4ajrgT$aZ?a7OLEuIqdX{#i3t?G80TMx`bfzbrZ zuu5rlb{Vz;nIBP@<`cwe=N4#1cu^2-Rs$r-9lm-O`fN1+LgjHDkpt)0&U7 zDQPa6DR#PW%5(_vgs+aflV0GfM`-HX@YOE{;ZNbK6Ol{MtzIkk6H|R}9}Z%7H?JyK$N_%DR~J|m89(Q%M~L!Q<*WNLz2U1f4OJ2Iwv=7B5~D&|?I_2p zdg5|Up4Q!f91b>_u*2z2J6^?86{MRH=gN+73Ywx)+b{=>}Kz7y#LREe@ zUp??HAj|NUe03k9;R^;FVNWa}r>tQ&y0Xx47L9e=&6hNNDeN6<6f2%+%X%S+6Y*j# zr?gdtUF(#1zr$De^%ms$_I!1ss1suYU;Svj#j?HJ`K8rxwkk83R_t znjFkS8XG{Yk!{7uuFwd)%HcU}A4`(-iV~0b>b?lCG70a;SAUvT2vF*DX(D(Kdj}wH z!dEBW7}qSQ^J=xNCGv8YEz~CLc$<IGj;j-j1hcC*TXw(4SC9B& zE{*!3tD=MG&=X&X^1j7(@T2Jq$=(a=NPzuGUkrQ)7rr{)78~(_OPS1_Y@1-?2h!HJoP^w$T&K4K49CvN*EDLm;=1-G&?%7?wI_ll|&*iI= zri5U!CYZlLt{cr)7uxk?T4xo(VsgU1HP{>$>&aP7pZ9cwFm&)vjv(v{Mw~j#RFU<{ z@Ph22QlseV5qb)C0KYyew0Un7(pLP|UsBj_(bZp6SadblH1&G77^|+ey;!cAomlAz zu$yyX$5lEE-6euQS`ihZ7AM=j&?=Z_ht8`%rm5o`Bvl>u(GAOwFVNJ3kQl`uZ$nd$KGjIg;+CdP z9EcIeo#)%GQfB+o!PeAfAv;P|GEL@8I}iaK9Lzz$2dAt7EAiNc@Z&gNm+3U`e+Et6 za}EM|L6wN6sY|JiT&pE#^;l<+Pq*@L{sPfFq*oj#~lkC>N%q-y9diUx$S(V=PYVQkFRjWLt;%Qejn4+Wfns^gQD6)nmR4n z=x)uEt08a*H_q|3Y3xXIKOw10qJ9E zVejdq4KUwG!cVj~c#${fd_R?Pcm|f1&wVv+&#cmPP&w4p`D~pMa#CFy9yh0aEfYG* zK+f=50Iue-qkBipfM|LyX8$#Qbt#k2fvQ11@&t*RJbYi$`gpk8m3g%kUkuu^EVtZK zyP>kvME6RgAJWt%6ixU&ey!&;^}wrz7}$Aln)*}SzAyD#nmREdhnUEh&tkhcRtC$_ zU|LV6^1FetR|g^0_BiFyG<5+r>ij`8b=v8mLJas~-ioG9Tnj9jYnpnFKj?#ns}$Ci zcAZbyOQ(F4$F)hDr3o6(XzF+=z}IN%fhJ#-li!S{9<9YBze7ZW3YMrlCtNh1v|_TA zH_=+eyf&V4bzIiBYL9yy$L0)Gch-PivstMeW-_2O_JA zRUht!b=Kq#G(0I8*dY0pM$#TJN#Wi-PjR;gXf!|ZX(s(N=cW}vvYBn8YE7!Rms&;X3IM8 z>V?;b;$*}&l|DBTeG*9$FQeiGE3%@98v0(x7*S;CXihi(mEIAW({1P?Yp4ou%CL$O zj#kqW7{gW!S<^&=;Z4=zbW^fr;B@mZak?i9Yq6ZT77mh0nhgayNGdpPzJho2m<5aE zMX|dt4|+peF}Ib_gq$FY3Jvb2nkV58Kex-JXX!=cKgyyV3k>Z!Xxao_yJoS~X2xw+zWEE0_ z#&5c%$eJ$85)T9rRpxoq)?~pDB$HzWo-qvB79_^zVY(CT;{0Dwg5!ShK^P!#!iNF0 zOlz~9*b_tBS}stC7p7worH2bd3XkQ)kjL&|sIlOSn^;QG45zGVM?1I943o)2qB#a2 z@#LM{w{bC(6`{QWMCdgTWs-+ICAJez~F5Wp6c&-=oz=hg+w1wUHz%dbdq)B zX=Xb7Kr_?%D`q->#Z2deo=tCpiANnP!9Rn}PWZAu?=jPPs1iJ9rjzf{i4_*JTG8(6 zu~t5%*X3z;x71h1`joa<9*`WL$QTcB#Rq`xD{xQwrN%Ea(`onS*I=eUxTQS%b(fh= zM9!x>X2V!oTO8s-Gxi@2D=Tai`(_s6=heQJ6XNkimRj6%!17T)k`VelR2r;M+qF(y@AR7hQR&T{iUUSr-30-d&qL|-q_98Id_w!JZ@fQcCdwyFqFkPNi_iU$EwuFMImv`&Bs)~#W2-@SNZxZyH z0Ml>vngtw`gc2|UuW&dZ{gN~Bbzb^krP4Gn{W|SEbax$VUoXY0!?~PsW{oaW?(MC1 zB}W?r3Dj z{8n7_67Ga$_id+1>o~?%Kg6Zu+Swn9OQ#P&>N|NKT)L;mzGy(WG%h`{bPTt-vl1my z(|Jelo9Er4nx7=f^qF?SfrBRdKyX@@6}Y zAD14j%)~ffE(r_;jY}umyVxFTe6LVtGEkdT)h#S<5=MjeY(%ko`RBNFOr-xRECxIr4z+LK(uwMxgoW+!CdUl(gI1w>9w>s*Iwb~` z9Bqf6;?e~UnPHmi`v8|tn_=qYdJA0oQ&Hc+rF%LYflJ>dv~sC2U-a6^#b(|L|dfVt~zXJRdr7{$-pOgL`(Oo za?tRGi*kPeEj_{zybmos+8SJ>eoIRyGPlG+<8-o1`ne+I)6HqY&e#We!U$%_wEkhV z^w25xZ%j)k;uWP)tf%)3dm29*BWKDLy6SM2YNaM28$mjCB}ninS55-#pWu;ei}#q| z-P{v>kN~E??<)A_0q!&^$v_=hZ$nGJ7=%BCmQF<8n+Uy;>InI6wp@@B>vK!vV`p~T zo?pgF;4DM?hCZ^h_3@)?N_3u6TjgOEnQHj zt++id_QX@Bv02JxQrHo1IkgI$+FzAdTRpW+4A`usjheKt=0m}80DO;@E~1F+kE5jr z-UTEX-jbHi6PL^v3}nP;S~@wxVp+4+Sj5h4SYMv)#U-iTcbi#f&V;5R{t8;UueTu2 zx2L5OMUA4RcSc5coRueWW+}JrTux}stEZ*}t8?jI%K-jOe1q$Ho66(m@P5uF`J9&S zi|}gD^!;e*(Q$-dmGDXObY&tC7?@cPE>C)8y#l>H8yT=@DPdrCt=eDmsV`J@Mz)<{;ulVRRsA&xXK5NYc@?^lUY^ zJeBy^rdv_>^NG_q*~Q%AV2;Lg?D3G6jysEePXc*o=uN5e^1m%D-4pE{TKaghALVOi zXPXdgio5!FR!~!8SJhmz zpcaIYaHj16;**0NfZl74ky)_89PQx(%v(Wz!*^)uvF0{tO0WGT-hD(%=kaPL=@~6OLQlaC;Mf1Tv~;)%9(~G@fcci5P8^C;rOw_4?o)@}vv-uB~Z>Ftf^ z=}?BpNa;wI!GGe#3C>%3x>8WuOnq>gq+8SVai(T;<5;ejTBRo4MB+Z8r^65citEUF zwn%#Vm5cVP)6+e>Km>!*XaPNaP`3)ZRD4vc3*%JQS@!blh2Cja`4SyxJf^2h-g>s6 z$o7z)PD?hr`SgwH=|quNl(YTRre4n(`DJ<5r%OLD%k`L^4#X_b zQ9l8U%q(&guE^f=6TA*7$Ah2sK$L4I+`x6s0q1tf6L-cp z1MytJkcr7<5^@|gcAXI=YgO5*ImVh-8Kt+7=p;LOk;n9OJXh>j*&<~8E6~%U{aPa8 z7wPFlyyCz~6k@~Nd9CbM?Fw7&t;g$KZ8xX3DS)8|@j~48n4Zqu($jCWICzma=XyVt za(En;md|}PUb59$tGQYqrtO++RAci!Gw2lHkqVtUN3R3__mH0MMaWc#?;T^|zs9dF zW%4ZMh-Jbol1IGPr3BL?cie3ZeH{S-?5S zU_R?PJw5Phv2E6Vc(4Csxf#Wwpl2O_z}~j_csaMiZY_Rcu+AxM<19bQ+QOV$z<~Mq zhvE4D{@)(h40pDn*ZW_8+y2J>o-Mggb^E^5Z|Uho;DhmqIoQ3uTr4bE&FDC_bStGD zj%7V$p`X#yF+DPb*zns`mo`aEcwHvIV46cS>uR$cZM69u0fn}jJA0u8#ew3Mi?0La z+{iz}Ux;^=fA(=1%B6W%bWKm^6Uj}dX${lHp(bZCPJV7NwY1XbnxRl*yMfP-0yrNM zPM0-APDBG(U!$i7ntWAWelvP{v=)>6ju)z)!26}?=|pEOu~tfD(%od*s<@eRrOaiM zE32_NIdsttUIIAaSh$!3PNjE5Sw!VyKd>nOZhE@!CzBl7FG)`)t}>Py$o)c3Z`URp z#uU>-#~E}7@_fcNm-~sV_Qg;j7x2B2$OCL5bW&X{AyY&auXTgs>|(9eQv<$DU}8yJ));0 zv&(a6pE)wStKG)(=#D@Y{}@>dYol$Kn~%RkLk|#c0b+pH8fza-&6v3>&9I0g_kTwc zBi@sq9tifDo=ya7GRgC@bJ8=}W4kh3WaEpKIz7r(ZAAB=JfWwf6?!kw)9E|>UFqrg z#DRn7oAh)d)xI_yEQ(3Dd>-45o7Is`IE04PKz86bpcfp8J?)Rn(o!P5nRA9>=U z;OUnKy&g+x4TQwgQ0P@U3w6;D>iu>qevo2IQ(|kXEo+R0PJx?k4Gln;Ziug1> z9lqa7l^GS35*`FR1VnpO;XvM^2M!M>k_k-wOTjUm6>tMe08eKb&~b|gw5g)$fMya! z%QAJ&FciZUR86;SQ-<=b2Jm!mrM&lcv|>khr4T{iV|XXcHM>*xr}cWo)*Y+TTNP9D zf}jjz7b2bTh~bS~hak>_mGJ1wt`pLD`I zGrWb!+&u}Xbx8pIh1N-eiV-|pk*f{TiP^Zao25s`Sjs5?;3R7-dz;!Nlm_`eWO!q| zsxRa3F}$N>8y<*3s{IZO?+3yr3~wwl$bh}V@Fw3xjG3Od+s39WOiStM;;_+L=NLP# zBpa7N177wq!&~;K9A9C0heRJynEI&yUzW2oJ3(~&NH8|1UV!3zYpy9{s4 zlJ*N;UuJmIr|hr6@P2ShJz#hfktgk}URxiVi(OH!C!Kn%S~_*xrF5Y~-#RZbyzvs@ zZ!x@mnL`TjrAG31VR%PN-ak^Fc7S;2cO=6*IjtsI=6pM9wp}-&a%!$sbVl`F@pws1 z!5sldF7`wLi~}uWp?E+NJyuJoz(DunMKQcX#*Okf%jhHl?swe($DR*W67a=*$yNFm zWe*NC!#S+Lf@6O^q^3kbjF*;&bmbU zNIcIO-e1NW3%>}%`>8hGX#%;08xwV8w&$tK%xhVVYxN|3Jd4kVLMq$JvA?^s<`6fsAD1*6Nbs4Dg)*zxxm-hW*Z zjOe%bAB+vVq_OTYyullY#k}7k9B-5*3q61Xf~#K&e#eV#dn?U6HzoIYHfzgPdO6-6 zor91}b_W-F23Y%-VBd6)-;1zs-yuZBoL?OF?Kyb9q@cSR!WNuNP&`SyWw}3Ju6Ub^ zCwt9!f8KA(>l$0zr|B$>5Bt8o0RU#iz?MwNgvlZctt4O6|F6To|0><5Vc*wjT3BZx z$2NyG)2&Rl`z>dUQ?cYoYxg)hQ1pP$ktAwtqk~STZ;+^IEsco&;l9OJ5zZ%i7xw4- z$WNSOd>NsFxu>l7anMwnL_J$b3$b&a99H5)bS$S+C{|Xd#F;zL5=VSmf`vwnIkzNg zF4Q}Ma*7`HA&NvD6@*;K0@Pd5a}(6Vf4-bwb3$GvQ4#kw=E{FBh9=^0%YCK|c?c=eh_AU6tSg;$QMgpr8Kd{bwL!9ML=N z!b*+}kIgclUU0{W*zAv&BI78TOTV!2C&9v_?D|{6!k^v@_hI4WPAKi$lYU`T)bi(9 zJh>8@iDPk=?;d9r+Kyu)HrxjCHG)nI&2hmEKp&Z}z`}jg1FrP11`GG>_%$rNqU_s; zWII0C2{nh+&7R@38>RZH-K9O|hp=!CSrvNjh;l=&Vd0Ug`X;dOXze5>;~TJWqPokj z&4}@3!97^Qu2<@=60_E>)$KHgwCX~w4sG{@2=b;Gg=KgJP|U~yVI>K5qaX$TJuvIP zD*Eti@wb^}FshzkP1|1ZF#?$Nx<3}TZqX=?%u=H(&fArYo8Fej#qMR&@KSXH$+0kr z0Y@K0yB8=EhIfd331%IotDzBNxNZ-lP5aBigD(#oe;a0v?`o8TK(oycVb(+qCt}e` zS|_{KYNzrerJl_t;>Q%9DU|8VJbZ$OFl!7Y_yb|qzFoa)IDH?Ob+lo)Nc|ROO=LdJ zH@30UY|~#rNv<|`#;fVHXqT(mamdI%gjpljGQA=os5;?c?|v$>L*(BWW=+IfoK&W6 zu9j)m`h(r}z_eCp^N^4-qDD7BIger10?Mqt0JDzJ)VG0IUkt*Z0<$I}&k4n(lw-2| ztUfMO-TXQ~mk!W{#fPoP6PPu297xPpzBprFfmug<9q?+u63p83%`p2L4nIQv_O|`5 z=gw)BXA;SYVu{(TQE^P8+GqMQ9r`_iS);Qrn6tkYbO5uC5aq85v-V|r1GBCTN+Y|} zsoSHzno0Br`AxFs9P;ISnhw^jJ!SXn$px zwI|--Q+qvq#5yDdWn6)!kxHtTO4mojPU0x_*IC%(OZym+Fl)v`8TegCFT<=Oq#W+u zdrz1(k>(Z5dX|+8b81(H+K`);4|{nv&v0wW=p90Gw9E+_n842OJ(xA-%l&aM>%cFD zAowj|)&gSc~&v?-mB?^u1>tK%Q?8vnGlfNCgs> zI3G-e>P%K`JLb4U2s3nfYK$4_lqtEJ>WFs5F2rDDTRl269j~c8bS_+S3d!d%>xf(b z{b1J7aRf;)1hT=2N?((G!Zr2|Kn2NYjPH#p*)}`NxJ#wMbl2^fxMVm(sLtw}kkr@P z?dNKzI}>+|54G!oSdPcMf`~y27q_Z^R2uCz;`%KtWBcDQyMEPk8jb*eplPov){2^D%P1Mc#kQp}m%$Y8L zJce1L(ueO!Any#qd7q((g1diPn6)R`J230mxY5uv{rqIIueFBd!nn5SR7`F#5$JR8 zG0Ymp7XF#n@>CZgAApAevs(-61O6J-Jjk+S97KDfzdsmsQCRY}w5pPazM!Nq%cZD_ z3{yA8Z<1(njKpXxt68>Sn3e!Ed7fhpMrTdKR$<6RP#F_dKpb4MAx6P_S7Z?&-9`Gz z$>5b~bB#kxkXYiJZhiYX|pg!Vh318rlCQLSiiVWmXK zIi#-?c%7&(CBv6`kl}OvRG9TstNa{hO_cdA%=(n)<)p~>m#20bdhfRRO(UHy$cd9d z2XPN!)+qf$+lUC5b%eQvuf+?8-w|f*N$wVAy*5hgV=i+p)oiv?>KxarojHzKW{KKk zcp0eh+%p1arXn>~!Zn}&T$r_hmvmo-OM(#;w>6~rX@&|io z%bne2t{de27-lWt{=ug(>j*ssJAhyR4Pe$}*z6UUHBn&9PUX?AJaEt$&l2y?JASaQ z<|RI>b{Yv`(x0BDGB2s%#kqbo1JfzfAF6Ov!=v-1+(4_$_Lio*W7Woz?aq2 zp~AK5*=)0Ag*15Up=vqQQpMA82g?GG2MjG;%p`}~*I?E`h>YqPsDEM$Vc-wbiaWrI z4!5HqwDuPq2cXizY=q>^!iu8CDLiXQvZ-jI$(gVp5Rh&H&seI&7%&QMshaviXE*UE zZei9Wz*sxAwq{iqgN!m-Ps+>EJPt;AJTG+V$(aDo47NDHGlxtunne$b7wK|P$^aq% zXTYpI6%OQe1+z{V>}=8#xx-v*cjB#-DRyJMVir~D{`t2$aROg}S@SqY8HQP3N&DXq zW=)Cq4$PX}xlC@Km6)Qfulu7jJDluPt#sPf=}H``rAEQ5v4QXd3*_#4gs|TQvksXH zstGVuX+{@C2Oa3=m+Q;lhFSZ$G+sqrn$I$pK=NhapxE4`L@TGW>HCbw~> zfc>T|@ne`ZZrJgIiAb3Bm9!tB9?09FgDnS*fgChoEEmoRx&!?S`O*moU0NKd1BAw~ zWQms~h1CVyFipi2RKXA=&4PYFTh(gzehjmg8Lu7$SFWP5frl__TC&mot8WamCbGN-vv!9{ zLhkJ<4J)Im`}{_+Ovcq~slRKQItYVeAPEXdM7kLb`hW^{j%2;%i-I4LH0JDB7;um4oM7(3` z(5cn?y;Y;IlQ-we#I7a^sYJe0qqFHqy#7Qd_ID-Jb`~lPDX=H*xfTa6;&og@!0^B( z{6s4IQz?h%LTUNjSL5<@Z;aygOv)LRjd8D*a+$>;xt~s2A-fB5hSz!svldArWtFkp5tqCo{rl%ot6k&mJP{PlXVSn4eb`E2&YY+ZGrtr`ouKOJ5o8fGn^lz%tO z+E-bUL;EFR*1kR?se#-tFzXX*j+eD&b645#%88+|Gk2`pllbw7t_isTZW-zGLzp#> zK$XH3%sMC}{}0TX>Zd?{E;f9DbR%Ha`QGj`S3D57)oJ1}cs|F5jhd%&!p8=HGDYjQr;<$`=(HcH7;Ox_d=r$w19$5w5# zQ>I<)M=)z(2fqrlju7KJz^tDN@fK!HB)II9&1zoZtLbL8){AlRL=gxRMtM=DHS+FS^N3R8<;hb<8d$4&y(y#m^Bl&F_;-sSiF_)X~vOGUp|6aBeVNQ z!>mIxeovTnAlPe|H4$uFOR;ILC-6t5Fi1;of*ru@VNGdw=px2rm^C1mUxHcFclf)) ztnrBh2hTTQ)pcoww> z(JnAR>{uT4oWae{2zZbXx0qS(_Vi!w2Lu=kV~ipUNC_1SZK{`tiW_j(7WxZRs)zUF z=-LFjhSy3HGAlsB6w0oU?A4)wX{xqv*qRBKZm^=x8U|}}&=v*NP21EAi4znanAR%u zAmi%~cL&qn1YR8s8p7qloHvUc0uE9W&;}vHY^AC&EaTIx(XWJ`LBALhDfO#2&yhB) zt(Y3B(2yA)6^GL7kf|8CIxHU8X8l_Ly^V)sx_))~3uB?)E8_gJz_1DnX}k7skG`>w zzr$-<&T@sg!XFqeKr`^(>s$2H=SG4bw>%~g*44M=iMhN~oq8iV+#Pc2K|2jwWsMug z2ArGn=Q*&LmuQ{pBQXmeanO%no=7-~_47{By-_Q6cNpIEF%u%majrC8^K)f=W zrBt=p=)~OwIRLlI8IGmFjD**lfl}hUnpkAbu(q`$*Iaejo6C6Jl>HOLt8$ zAm}a1za?AgPyRFIXgk+}(vkP@R|-dr%7}~%Iah$**_;k{jlpr6q>7Rb<2s5iY6kG` zbX@>QiNP40tt($KBmM;VGfISSXW&yI6T|;?|A6&KZ(An&HtQ+719 z+N84;{)kuv+}9bBI4ASai3xUF;uQh4WIho2>o(v`z6P)Z=yU|j1)&*8!7I^8w|0O$ z=V`C9E|pKk$titobIr`aK3eB(_R!e(b&^BI^2E3Ptvp##@OoTXQRG0RPbK=oJ^vQc z4DS1j96fQBCgpYNBw9^VICrOIF`p|b{jqymaNdcupL5tqGO%( zQB)xr4E%xRXaXCUKDtY1H@7}2+5#3|Y(BV;-F5;Q`-$aJcfPyaZ4B!G>=q1>ap1i| z1>?;p?0JH}PE^w$Wv`6PelF=pk%8bS1A(sgEA|1tW=8ea2*`jp)D4)ZWDHpXPXinx z1*i%p11wBM;04YyI9@c7n}IIWV+BH8o5+Qj0&TLySq1W=?#w18{lINCn*1hc`CMDA ztj#AJ)Qc_tn;&4fR=*i@6W-An!xj+>PP^a@$>Yn#-rAsJ@cIduI@;d(1DMHJIncUs z^9PvvW8OYKzw;1Gd)SlFohRU9ObpAt_sj%VDFUkJ&Qq>t8h0Pw+&;Ro%$;%PV{NSY za)0;ng*LzYxC>aX+tG!UB74e0@%aXt$qbwZH!v(c||% z%W8k~S>T~N-@txk*drY_DeYF*myVx;mxo!x8(G0~cXbjTzYzgEc3)57iMz7dk0NBV z9|1lOHrn4_>3#j(k6_Z{?(ch#8_sfZ=c9Q~MriYXG`BXlHzPbeTP)36?cb07fA-#N zJ9T7B8@)eI!QI()TsEjdNNen@k=PiFO=BCdF*hD+K?Wf#iT0u%>wkg&#m+Y)BoK}4 z<;<+wURgD&b}kd@XUv!}+i#xcS{gq!(=>jHYZt?#8O6}a8O0iBx^W^DxUjz|&fJa@ z0B`2H>6J`x7|qV$akjO$t+3x3AKNR_o=a5bGcyqaQ6zQab8-KP*73`30q%6ZIv=4S zk{yIO&L==-+zIfb{bBzc0`*C=@X0OZz~I3h(oaD0T>-|6Rw5kQ?Xm4BpK+@?znU%^ z&#sFkvC6w~zbHI*D%L=%aP5+IGPDM!Eyv2-=YjO#q3FFk4J%IrR)qMvChrltU8fc7*n z`An2rWxMR%H&>U};zAfV$Bp{zZZO-31zxPd?h(5YPEj9->+rVG(kW@8B>t?#%(5ze z%_&H14-hLwXHMYO(yBIk_q}3y=JrSZ>$f|n{O~>u`~^=ABm!e&5A;moB+Aq^au@k& zJT=7}yX0?WbD%lc2u0R`O@>q$n*}g0EE|vl?&5^1??A0SrMtg!-R5;+`KjsPzRQJY z&Aqf1$Y-hQSKc1ohx~J={C@3Cg)38NPSMU|@UWXD+R-v6Nt4j7jb;h%XIbJ{qcl(9 z2*w|k-%<|C-@`cMzMj9@4*Xy%;Sby@0Nj2&C-Fx64Vigtn&UgrI4sA#Lwu62jbW#$ zymT5$t6LatY7eu!CwD$ywIo@{_mqAg!+`e zDW+(qRuG@|ihf{;MZY!YJ-UGzO-`&pM&lFXGk-Eko9BGi3fG1{&)49r%D2RcIQJq^ z5U*;3p3K8PBtY36KT{Nh5=$3hokloj zGY{NrL-J-XkNusZ_L+VrNu(bn2;x6uQ2j0SH1`K5RE`8xiu*a2x7&qH`?_9JM$_AV zwXqKK-F`_5$CWmB>Jpa&A3btEP=p1@CSHn+`Vmp3PSZa@ZGP8yhg$zl?VFugy5Qe? zGy#6IdwchI=Qb-3hTwLd-=E#?+1stAO?kdB1FA&6J0&}n(vixNswgZ?7+%%_9LAt} zFNDp^ns&QWxOW|D-%V&6gtpuuyE-?vgQ-0sOqob`r#xl}Zzj5er`^XVU@Y^Kl}Rq- zBX2Q9kMNFP@ePXtA#z9s#Ex{$Fl9@#9Y=#h7@M186=eyy4XCFzEZZ|-+xPp&J?)h;QlDiKG&m2H%BMN z5m}+m0@3jyz@__e3GO|BZiSA>*t@s~`1HYxnryIXItYz4&~}H0|Tpna?bk4rpD={P{;8jJRts4T(<2mo9a97?Ufwn0|Cy zk3wVfb|0AUEDR*KM+72v+?JZJ{#*$j1ux65z4ZJ@x zeyB0>4k-<+m=ed|P#D0+uu9SG@XHxk)VtN}sd_(OZJOQHeYkP&p65|eYl!z;=_ZN= zu7&3DrwK)Jhtvn)1CeOGWaq+#la{LuKmoHZ($>hFeQ%Ogepu7c)5CYpPrdSV@;0fI zuWs|RSv$IZE*74A-MP_jcx^VQV;RFN(jX)$X)<}gAh9Kdd#wM|=0ncxj5dj38(rap`RiudcI6oo_%aJE)gn|x?BW`%o8a_Z8X*1wy3 z&TXk{a+{6jggF(HC#DrDxDoMxOgN&g{a-O7S>DEPI2(y8F`*|Zo1D#?%X#7Ld9AF^ z8kcT;@~GOLc%%1&5;qVSNtZC&Q5k+(k`|G4$V7$88!13&#`-5R5L`5uvU8Tt?|^~G z#%6?_^Sg^vFmG-+8|H@7`D}=Wf`K<3;_dYyw;Te7bhY8+3j@C)U7gvcC0EMhtLI|z zzPWin>ojk^=__=><9fIjB#c#-uU)A?5CN@Z&m$EE? z1C>8c9gEEZMEB4PiqF}&DPQZurtFo>jJ;Jpna_ZE`yr@dKT>ojB_Y^hPP64>ek3hM^>R6XlfSwS zLO=gzH1(HNi(_+w&$s@XQ^Hp&7P%LjyEp&jUigV4=Nt0-&P$V`FDLDK-Rj+U9m(qU zow+PMy_x+t=WL*uV_u30($4fuc9aT0_t-_4@5{|S49V}$k9?hG`ht%Peb9o$K)jZ3 z2bH%?FjoAvwS?#0Sct)()LI(to9*_M>^Kx;ImMbK0ZW;$Xv)m!#v4?ODox!$?3HQH zqMSaN5!xxio+caGx0kZmusD|?f4*34zD;JMC+AtNRW|t-ziUkTx0S6ryCu~5#2%vY zAm~Nuwn$zqru8TR(F%aA0#XFvXv}zOu+wv7F70;y?cF{Wh}k};^X(my_wjyQ>A}R$ zH82I9O$mP9Xv&QDK4G_SNK2+;`klM6(m+1OVilAPwKeW*E4|PiTo1Qu`;LIV>1HfcI5k-J zjkr-n`>LMn#*6h=*?bvey~RfQ%2(fu@6UPvcD1@KMprLm^?BIrpWXN=vV_q&4_u!X zUTEm9Xsq83V2&jUB6fc~&Zm)!9O4LWJqki?Gl+i`Dt)pgz-nZE-B=O)3Dpov4P7B* zJBP_uC3>CfGZ%1xhJVV@7@q)~YtIkPc^iVrwsz_i%PijADL&EjF(IFvlyx{TN7(&? z@Ptp5zfFdBnjeIV`oo83yRg~y;8r)~huix)OoDF2nduoXZw_aAbi#Aa?#+DR%-s!g z^EBCHbLJTp2^m?QX_lLn--94H!@TcZHKxXI%Cm<>N{0$i#=aFula;WnMad$hy z!o%!Gop#74*Hc&qS?74!6TWYL5_8gj{K4!LIy>t%0(Z`%4d)II|74xGu+Ndcubq=@ z%{V8H4t(%99ws=~EemtW@^Vj4rM*Ipo{2=?j3>dcegzJUmwk9_ue0ceRt#C>piuNj zB&Wrn73N`cf)hSqWlvvI8~`DdNyeMAMR@K`-_Ym*zWa=`rvCZVUY^ea7YXR6Dab@Y z9CTn<)LG{RKCA{eOEk@J7%0{m7YF+CoM(5Reu)poV*ttNgfIqKydmoe?4*o?p}w#` zWPcWsIiF^|K7vF+Gy$-F*4Kxlc|;2Q2OLeoCd-~>J|Z&~#n^=fq$oT7H2o-2Yy-wK zK>bP9DQgc#>^Spih-Nyg>*)##cMLMUU)`<Y0mNZ94;|ltjcq%tc z_e@en@S#W&(Ne(nt}o5n#`d~Y#8)Z7ZY7tb zC<&^>;u@b$62ftrv5RjtX-U}Pm}shPH>;J%Je%L-2al7P)3$;^*||{)JcEpg27aR$ z=P9ZQ0@C~879hM471=7xnTylskR;smgFKrti513~9O;n2gXrh?VQTnm)1=9)ep>75o2KuPNfszRw;o> z5dF9@D@=t$qFL{rH=*(c)AJ`}D(gT|psLgZY-3#Tr4%EyH7qG5V5FJwqM(+@GG(VE zDo8adnYvt5iYBVp(SSfSgn}XInq?Xg0Q3}>{`(vMP(HVeT=Gq$IQ2(P&wetS=BWQx zxv5T+UcULl$+eNeNYoD-rTcr{Fcm%{R@sG;UKYS<4CI^}A_Ejszz#!}eE|z6qz*~? zWatNOH1c>_fun~JN}xz14syTey!j+@k*SfZUFO3aZElpdevzVW3J_tkk@NT;D4Z_k zJw;nO3z9XOBUdR02bzVRdbxi>XD3(-JNO+sx$iinHQ5)Ye=#338LOa%7a$G{O+>;P zK@|)nu54|b7A-P}6w)6vB6Z=5BJGeY*?umbpuSrgG|kTeQ(fY5lp^-d`cdyYQd>K3uE={dTd>d$F6eySgjWO6Aq+BQ^LaY z$t}}L9*}hQ@_GLYCM0Xm`|gvG?1D#YU^59-Z8)sY745lR>Q)!B*S;@3jtd@7E{&%! zV-Wzns7SG+EpXXiF1j+}(chik*}-Xuu{f^0k(pM~uikyUz;Sr_by#xZONQ z?&eW{nwHGFS$lS4Ufv0DK09bkhA74QPLUW{e=LR|2r57-D1iUhQaNVBO7-N}Gb~+A`eq#o3->z?=wZn4cKi=@;_b|GEYHzo@V}kXjoA*}1d%gpTWT~<+`lZg%o`88}-i!(SM*bLZ#aL%7l>=PX>d$B3k@^IWQQ=?d94zF`L=K=cGqmc2YB zz3}2V1o=@Dgbmz{(w1CyOqyt8mT-bNu8KXMvqtO`&HPV z_xy#tG2Nv!SoPGKxRd6_-$Gg((NmCwQi04KWViBW-Ho3o=qIZ2HzhKr7t~{vILcDp z_ze6o&PjRldv{*DH5Ik$!}UX3TaMPX_n_j1TEe7Tcg_)EMNwjg$#zM9iL6-)?zbfA zcA0PK%GIdl>al!t<&TwRE8lmniu(HD))-t%n`;&p_qZjFz2?wYAruh*CWTfMvA@&q zUTgK>9X12>!b8LZM)=44oU#NjXpCu74N>#u@ zh6_>@ONQuTrL-K;n`=YDc;WDI!UjR%o3sjg^7*&G`&99F}@r9Vum`Vl3^8m zukV!ZOQY3YR}{j|)9CRmXur>xgB2X&qW*_~gRpy`5|5zeg|r%@6pHE06X?*!WR0zZ zF3Gj(S3r7YK5z*3X89@ye-wFq_G<2+U0;O3#VE@E=UAV*s5i@}pWFCR?_3d^rQXH+ zQHI0JLdw|{ilWGALk=|j{vG}z+rj^)rfrda6mK5?B|Nu#A;1X6q+z_LoXw)vb*NOu z`=L5HE3D6K__oR|X~cPNci}EIbbE)C79(i9tFX*dLw}mMpH@|WQ<85}K~r;mK-#k9 z+!vOL-F4UcI)6XwKdvvu*2)a-nO;ab1M)Aps&i311SO`@6Jl2lN#&GMe#0YWz*w39 zVvyppEQhgKZ(ir3^$Zz}5R9hFj&R>M;oP!A>8jD0K13bqh3kWH`STk;?&k*XnXC91 znlkp~N4_K~WmS`b8Vpg1KC2Lo@X5)gV$pO2qgay3my0%afHeBsJuJhEN~K$?rtCL`L!%B!woX z3R}|Ug7DD4tgrI2w$|#KDF0sHsMq23GS9bOTt%@$mE=I&Km*Odg+p-(_G3{4Xo);Q z6#6Y9dKN<3cASm2X1QpgJ+&x9&8E4EEx))!2`SdBjF#DdXn}}pXLBRW7f>=$P*FCK zUzu~piYrJ}ZxVaL8i? zYo1bkzxsgIn{r{3ujJ=%o(YLqF*l&}KphCJK2zO2eM~BX%$v9FwU|Qv4u?}hBt(Vy zO_a~^j^kOX0^-LIl{v=RAtA#hv>qm?D5j)(DFxWG=xFd|B4_Y&(pvo38u-@|eap2e z%5pl2^Lu}M-y6;^uN$>T?@E2NX3y(t!}j96Z)_uf3E~y(3b;dx>+Yp?z-VW%Qb`Uv z&k^QQ8Pi5WnP!hE0{li$HurI+h)bz#9{GV|RMn>gz9hWQ8H+QWVEZl$#pSXZm&*> z)dMx+XKDEfGkzD^rkL;~1v}#Pd{8&1jR0UC)vUZk0ysLsx(hrCts-jlXC_aq{ou&b$ulwV^-KqDHG=xmJ5@o#2 zv3w562kpf}~AKh0NpP%KQ5Y)c&eIz&Qqj$~|)E!&u|@vCC({@?!t zlatk4z>oRQ&?gJ@j90q+&VR8&7<)oVUa?II$^pTV5;b%rNB|UEF(g%S9HePr8J8T@ z5wPVrx`7Qy#6q%#n2^s=t@o6_Eoh6!m-g^JSQ?#|us8I1gF?J{5=s{23kCN29>6+0 z{CFA>kg}V}2;vv8VjB2vVZD2}-kbbeuGgyfiJ(MG7Kea#MrnoqB($ScG=ksYf)u^U zf+&?3?CeFpu>C@oi3K=tsV2#i&4Ok)a2LUo3&J2eWm$>@NE{@sn2N4rdzLg?M4uKU zEPWv6V!d;lYKD(PBC)@4DYb-uDg<9bs`%{qlS2PD-mJxf9!_7AK9iFEF?wQX|3p4( z-LmjloK0^GVR6^iy{qfl@bN((tgmiZRu;cKYAgaD{Li+gLvRI-#GV)7>feF_8%U zW#ngUit`Un2|G@$yFv45tttNVo&ILtc3O)EMJY++nRdpI}Z&&e8Q&;A99YD1*GUkI#1Hq9*f>yw;_Hy*k;KyS@- zgB<5oBaNCRO($&}k0R=mjfcM1{zWm~yiO%vC$-`6DKoT45YN@LW9A?=I~AsnuUUB$ z9x9E0^Bpz$f%DUz8}i4$nxpY=sd;CXFFQbpz^_y*cJinbF~s1L$0+ys^i>E~TiN#v zrB~Aj^4sA}-Rab41$W`xJ35$5DE6sSFPj`jNzNkkTH7;h%R)iQ;ggfA-6{O~lL=6# zGEbR&aBMc24_zoByX6%-7#P=|qp|?G6&VMk4WZASNB%iFk7u1_ormy$WF9>}fP0DF z`s5wguPCsYMz0on?IEQ%Jid7ChPro(Z#;J7IiVeS>o-jIgk{tpYRVx59 zJfsaGb^c^wzk)x_@$1Po8J|MwCZ-8VXBhii*E;WHTRJw+!(*uXJ_B zjO|WfE9mpH7)?&S$?i@8no~iy&wLej{B=pn{_dPuT{v@^11;Z;s-x>?|Lh?uM1H6K zY#ULmrSf&iUo(3jgySA?3`}Q$t}0QO3V<6xFHLZsN}YBN z9i_2^N!(8-@^9iZ{`>dFKf5O$?SX$}L))5!+>*mYWiV4rCX{orhDIqK;Ih^LNT{vv z?H`;u`u_9d;;Mc1a$VR=FWZ&!rq-2bL0Pfm07c9k@F0$|c|#^x4yKkv1%WReoYACh zv~rm<=t{gEfWvur4UWMAmFbt!lQ^a7^_%d%CH5-Tu%$19S?^(`P5juEi|~jt&>9JK8Ir<^BCi-&I$Jn|2b|C@Q7nHMN~MJl6~Rnm-Rldw}%a3eanY+MK0| zK^u4_(!8D~4egpZzIy$LFzh7$-LD^iH#;-)!{}%h|FC1HnTHN#a1I?h%{IxA(>y~* zv*wwO9ZnpVUdYH8S_X>N$C7kc8C+|AAc=laS@4p}gjKm=m@U1~>y|3_;5XP7tR})L zwkcVgWhTiCKN`g*F_ZbRWZaJk#1H-!8bE9gbAr|U_qo?@+&uKHdt+Lv^v2QKQ#~5= z+Od;`Z;Y{;2uK+M;g>EXmSwshu2az1n*j7=5k(>t_#~|Lg`za%?2=}(CDw0q{=A$I)5>k1P@CX%9 zK()3YX>cwmnvUEb1bwpOcZu{5*0YFp2u-T059Ie&T63i<`A#as{!QZ3fm~eEy>;}* zx7kf+bkpw^mFlEz-CFak>4+1cPfiKi+_LH^v4m(PMHs#^BcFO(8D}IM{e5PMrMrhP z0~Z1ygBZ%Qk7SQS5d+HhE{yITRd&?#c3NK zjtz#izPl~kcS%|u9pck16_(SA7_@G$-m3P4E|zb~8{4_7mP`f>n6P>5T2EO#smLy& zeIi_gg;$awtyrh%Y_HuXv-;gUd5#xl%^n+1P4@9rpL8aqD@56jO!wK_$uZ5z948w; zpDkfhj)von?pGg+(|WWP+upkQEG*ng9Eaz!5<#czodrPUGD9Xr`ZvT4iOCNqE6aWV zy(Vhw$Y&HtQ zG&W^}0Y(J@d43au$jYdWN#ySL^Hiq^7Ym|4?yWwuF#eQfzPDv@2ebB@pz-N#FB*P9 zAKe(scGY?8-Yvb>xE3@wXF;5k$rna4y|m)8rx;Rccmy8VGdbLpN+elP&3HpZrZfXD&jhM9y!IV^IV$S()f+M>+xez&a4qB4xJAL%}D z)%~NnW`CZtIbhx8$41_sA{mL=R<84L1mNSQfj68Jbw zlRO5IwUcqxsOH-W{Km7((<> zuk52&Dd5{)-4+P>H3 zz$8mGoZJi=4ZHnbc5Cm_&9hkVy^pn7}EMT1oAZ%G5&hqnJ?w*(QAQUvDUIh$PFtsL5LSoWw_w*o+ zi%G)>TsPg}968rrl8po&!G2!o7tpIQaDXBKWCjWD4@3o#U|g^*4PGqUMCcs}Uz)0$ zs##JCI@MYlx{j4D7gg;85A2o$m&i#}o0gq)jafPzPXJ4*FgZECTaHW1SO#H3|suCg*q+;@2`#l12a#N9kkxaR=+T zLqDOD>9xNSLMWkz4#1Nd7}zX0Dw=ZWs6;F2x(I;NqJxq&#X$QG0`4q0B^}ig*2fGS zdsy%)yUasDftwkGj1~I$JxN51!qJgcv7phR5I ztm8(9D~P+eWy19Pfy!TRDwvp`R=S0UaW#6hABx6Ievk6E%jnLL%Xu#5W1=za?+ocA zA^}=r0ZawGZ-BuB`P7Tz_7U7O#_y8*hdVVVb5<3O1{<&N7v=IflZ=`r&?W3c<@?to z>8GL29dol(4yr4-4&}UeqSFY9WUxQ(A3({^q z`{)37eH;u!Qk=dK9XNFbIy~ahb71z_{Uai0w9-RPm74wx6xD%no2m%v(axm3Ml`~Ip03Lcg5%C~jT*3aW>DUBVHke!D zr;EdhIyk<6F*OWD(v6Sw=e_s!Fy*J;4;{VG7Xfz0{`o-4IXP3_%suguGjuP-3-8}! zhP+;zZTv^$$SfpwI~ot&;q+(_z7^Lwn7LVq3IOC&ML@QGB|M;m@1^6%JpMkngEg+h zM@;Njf}h(3vAJ%?CYPVaC87<&VQJgJ!2_^NkEb=jQ%`;}9XR>TbO1byIovNYeCUS4thJLZBe3}P6@Tx0tq>RDVaH&prV-T_d-AB%i^a;- zT)29;&)+o4k`a#1bnas}eSho{0*-hg!@YihlBXgH1?nW=LNyzm&LBT>T(QYb=g@2e z4luUTf!dmL0^dt_AKnp-pxaVF4<>%+nSH_j%bOLa{=C3($QzDEcD_X;qbuUZ#$WM1 zu!$xxIslTP*QBFcvgW{2S2UB_J`08f5E2qcs;#Rfcw6+35Q4W7fzb|#TM6adAG`NU z4KtJLW%B+sD*58v&X8H2#5N(*Cy!fvk zdz}>aZS1>b!(XGkpdsK)l!sGCv=mt|b99)q9Q=efZ%5aKuHMb@Pi%#SY8!h{HX(9O_RGYUTRLc`M9IJ$Z6#l%A#!1Fmc^`p$W_-Z6C{ z#wigq*-O7lUAk{Bn8SVYOY%39=xEi%K7%oJ%*|YQ2v$!~{bpY8GzM3L?z_5)9zA>A z>5RBCjE|>ObcgMbrGp(3&PUSWXeTEP?uw#l zTyWSUhN{GZBm8%s&gRc%t*;12X*=@Oolr&=E_OlzMozIL$TpM?i(n*_l4Ym@z?5|S zG%N!>piOL*oHo`_>2@31W82BUwWpn%V&SnGi8JHU<5}Q3wZ3Nq4{vT$3txnZ1bAMjE7#{C}y}73Jvf5i>=(aI6QoA0yWe zZ<}6-0!cBP5_>=IM?*)I8G40X+JWgu0Gk@?=Qw0feox(nLriI!ghCR8FcIxkbVUc~ zsOBg|yQq~AHB#&%AhvA*o!t!}$7)4ORz6bK5`!*&SBeG!HfgIw;AJtr6N}R47-%mi zVysc%Xljs8$m7@#?k8uhe2|wn{@v`&Smi4(MyN;Jdrlu5>km+=5s*6E?2yhyVNzu7 zvRK1kFee}A6)EcG|HX5()g4YzRT|lj`shY-7&JG}kB-9U2icx?`{wBx2#LUf< z$e-j}kcg4cli7=ksJ*=S-bOoX84aPTblb&+WHoI);8H)ij$|ly#og5@TcwCEWY7#! z30^ix|DTv$AVVp41A^j@LMp>QKXALzp9xsda>w9N&t3Owo zPu!YFu1h3K1`kT;kwGH)%Ow27ocK0Ka(}!_!>}XBwI2?v_f%2*$@O9`4lJ= z77CK>h^TZnVz^5t+MKQ(4jX=Nq6zo4!b}{^JD2`kl)DRF&wzJF5en<`dx|8$X%kSw zz>?$DA|cW<%{GHDB+86A?J}ML0MNAY#2nqZ29`61o(aFjCf zT=VFzD?JK;)Pq>}?k>oB;@|oo7=6 zEBlpvJpW;b3*psF2)`Xe3oa%AXdtGfnmj8-tczmO0Il%uU(N$*DUF^-1L4+rUfooS zm&W9>&pkA3*#z$S5Wscroc!%uO79uXz^R3RqjEEJCqeEl!y9HRD87 ziIN}LUO~9}G_Y`NG!O zxk(I`?m*=;{xp3uG6(j4u4X#=EbX3fRHikg#Ykr)q2A-fd+qD(XCfQ9U%xiuJzCCv2sR4?^40{3v>u#$xI z^d?7mvPSwy%nU5LpRmj+2B9&O0#Lo(;pG(n3=Rhgi;u>Vx2Nk@Onx4mxpz{sDX~Eq zg`BA16E?tQD|b7&jb2s0iq->vSl;v-PQLh{H7bRPpl}BX2{%aDET%*zg+`u0MT2ll zSQ6*|Vj5%y7yeC&h3adRLd0GEoPQ(^XuI!louu zT);D{u_itWx`Og@TwFl&@;^daK!6ZIldRZ2RFA#i+a;8^QTkjJVYBeXP3u_V9Bv+8 zkq*$A=q1uZ}mFy&9m+%tm)tkyDdz=a)QL zp7SZT(<~t(1Lui(l*pW?U<=#W!VwBetQ^~jQ+~YftqpNOdn`A03w_HPhyZMR?1r~< zVKUMxvvupT`zE`yp>(a^)Y@yCC)98fvfd~sbxRTD+~g2R@&^*lpw_tVEX2Q?a2lF9b#heB-PR)0>B)?mTcV=OHGr1fHdP5PNjXG-e@lilK%VdIlJ*{`qEAM5ZR z>Fd=}b@|Y#3emM$zH2t+%ItdbJ`gV_H?gl59KsFAEY6_zX-G`P!W5883n=5QaPu7p z7_~OqCbGKFxaPzW(^saJki%oXG~yyVNI%axBM~jQAeuBY*@td0;nq zyr(8w8olbdIb#v9?F$|lh1q_E|2h}Km$~(kd+;~|5z`83OYN;uoK>uKZ&{McFVX#3 z=e@bUUk}|zlP4Gw(=K4Fee8uQ7F0#X4n<{&$QnXYe8RVh6Y8m4zOTpZ`^&naz^@BE zi&y`IbK!gN(O1lg4BO!^unA)Fezb*73LQzjv+s@P!KmWTi^8C%&B_lG&yK@=#Ix2+ zpMTD_MQZrW*j7ZH0&;(29c#V7PI6aANS=q?`eTjH|0@8$2R!m1KHRaesR*6gkyS}*lUYrr#OnJ&S(o5fwS z_#2%#G}P>azoi1Y3vxga=6pEK-~493G>88QhCcQanyA!HbK?K<>Nd`YUZdR9hrg_hiUEVtUN5JbLIYJn*@`H>50BZSy>h*1Am@J*I0W@ zveS{iJAwCx(!J4soxcTY;OHj2B8>##FC(pI>uBUp6K8j(F?C=z9hv0E4Ekl^$@m?P zJ0joS+@ul|_{=|z8$|BcdaHZgc%9BClhKmReasoj@#b}>j52o0H%EOnOed=4n zWuP<6yxlEQ$$uisl+l|35)s0oA=ug?P3nZ%}eRPKh$8$yTXzxcA3N-p=nLaQisFFy}{nNoV zOn?1;P)NmUdP>OCM3W#%Mb0R4MN!>kA{`&O!MdXqY)5cle%YdGDi%sN3aWt)Gn9Uh zrkbcd0voW|9nZlLDEdt(!K-%mhh}TKinfpVyS8V?^;Of3^st$Y z-`lr^`}a%Ti=N&hb9FhrO_F_pyG)gt*mMZLi1dsM;saon93M#fVUeXvT*MmC^NV<) zJbRDSg4?~^NMu{Ho&hHq4OpbI${IQq3lic!grIqkC@+U-vU2xKrsRxugfYwJm~}LJ z-*a(h2*aZ_O9Wx$yRoD7nZ9%+FI>3tS?S*Jn*~{~jJ(u3UBu1ck2eyfAkjK4mL%48 z=ciZ>cLR|0YzB0pZ_9A>j{8i<$(3K3e&|$tweH>BOZ&N0aNfHk^scynNbCl1+vaC> z0i`5U?tM~^Jov>o0emy3kQtPlvtH?b;=g&m(>kmAm)%Wy@ccO835cv>gE|fs3jmTi z&`MB#2b!Sa7Fs%CA$qPE_)s5az^=V+majU{P1oo_MDR&|kXnH#&K}JT+8XmC!v`=k zz-kGJiX+41w#YCT^nN_MK)ULorRfXPMyd!l17U%uf~I?)(e;C!^t;eGDN8#+ zs!pffH1Ah_X>xblueJ-5%BEXC%lG6NCzb1>CA`nlELp!rXh*tP7&|FG4E=dv+CZBd+83xQ&TpZU@q;~m{j`9S@f7E6aI@Sgybp# zc0=4m(K4#@=iYb~46l0q*?akM&|fbt!|w{bXoBDxM^QB6MZXd*ET#zy2sZ|yCCET> zrlsBS5Z9*NbWEu-OWWWn*u0+rfc2Ou;?5RG_~ctfOywW>JcUto)3e!f-xaHG-+)jB zs2EsG6$5V%eucgYU=dK^fogHIw3M;_OJs2r1VcdyTS2uYR8Sen-nV5y4ah*JlPvq^ ztATfj)QJ}lpG`)dw4De>)0rNIORAq?MCG>2_H&Zqcr$-<%(HoIZa(XG=49NQzI1K1 zvV1WwdClDRvaRNQG*K!qW|dHxN2<`5rzt~teEVrjB+8aV`;@&a>2JO6StIJ$8#xLl zn_+iw(+qTJ&BKS=%hH9eN5lmh1wlHXaER%de}K4@OOnyF>K7ofkGBuZ92z9V!eXDu zcC};om+QNx2LG^qeVMPW%lY==so3QyoVW}-Jh`+kv;%Y(bd%-amPIsop%fT2uAB4h zfhif+-W=C5tQXX&@iq-im4`IP+vvcl-??OC&({USr>jp{2{syB=IO2J@hQBs6xw}! zkXkmFBQ%;opEno@XxR`7QaC%*Ei`o00)QL|79EZl1!b}h1d5;wCIk$yUSwSmN}6V< z7BUSLpr7d<2=3U!g}sT%4>kUMO1aQO6XJd4pn8zea4SymW$7W5A0eO71wwA>yj4ts zc#O-O{+T9@AqH>Ss50i(Z_o3vTluRdY{)*Hsl>BU|H^Z$n@+JUFYm6O@=tZ!xakAAa;uO~%P`QX zcp<45#RGu>MP7od5ww!95KBxRH-Lq>&OJjh0jAMC{NJd*MGv*>6>$;^91<|pqfM6U zsRl2kn9ws5)P`~p!PV)SR6&1!j{`}o4El}!+Jv$jz+KAT^DCwGsMZz{ZjwlR047Q^ zBn9x~svuidspy#KjNurz2zRMvS{7_`)BL1Q28*15()1?3?dZh_t=xBCAX*mYgHhK} zPxgKmjf(B%rqSb`&#{9jTL?lCK&SxNB=I~@(z+iau`HWDK{D##T-HjKE`&yH*{d8N zs0lO_&2*p==K3jVyn-@);UKlzvcoZ2M<&DtUIBTUQ&0a21p!S^LTjG_D2P5ZHbQqw zsi2s)iAKVXDOqTK2-yn&7)dMWG9U}kH}$7+Ug*0}LQc9|Qsze=5Upo6jU_cq-0=@( zkADP;3$Pt>@^P`uzAa;z5qx_-7a#7G+MI2M@}?)b%UR!bX6?J-{p4ykYz(A&xO}KST^lz~wQ7gE zUty=Xk;B{YP(Q{4c>*hp=gk0Afq`pNhBVB>gtKihx(hktIbqHv>;dlQFHdIZ7Mo)C zPhjSfw@4`=G3aV?21YmL;o9(5=Y~6lFDw2SYrEDIp$HXAQ8 z{5Xa`6{{=&bOrcqYTX=LsqvZ2dO|b9IZqQ$s>SIUbUnp?wgf-lNf#1y2D%eKM++hg zK=JWZ#tV+m@xkzPLa1-&4kVRBsQ1b2GwG;X6~Ab>mAd~ncpeVtFU?JV?dJy%H{2l@ zPfNVub{D6-GpHjW=S*U9eT8v8SbDz*BW>5^A?dkD)4lp^=(XQ;w;gUaQ_WW_aeik! z=jVKvAH(g49bPlf19@-HktDROB{^0^q?2W7x&fR5xjR3Y<~js+pIUS*G1CpmYex;t zJ-RCpaonKYVVF2Q()=y^9IYqM#R3|v(Z+*wydRza`+rdIlk3{v3_AZmL*K^Fvs7&J zcRqw>d~^mmg*bZQe~oJ)@f_ggev661xO5Hd!9mw{O5MrzyB>uPg`!pN8TV?)onkmY z=FnqO0u&5*l=UB_lFBh+4hi`I6aFHE-7?_;*;;ec3sg;i9;~dPyJ*$4=bBVlP86N* z2@}tIV@i*Fq+b$DILmKG!5An=F0Ur~Oz^reMB2BQ+#U*Ya&P|HnI{|x)5W7ZA80!4 zVPBH&0&tfAwFl{5pk~emqaewu>zo_@ z907jFcuoK=McEMw@}C+k1&`#V{<8TfXyqAZmSuQg;e+J(Q5 ztP}VbX-`PvYM-)B#v1%rvQo0B=u@|3tt)RIJ>kHQ; zWMPtz41Jld^;sD$W=_wcXrq533kgvE=okSvN}m128dDy2pUFMfyEhC753MiHuUDo$ zW63$#!`TadMWjNUY6=>GVGhxO213&TIyXega!lQI4m=WLK>6&DN z-(H!T4Rr8e0E}DMm!F)A46#GrH}6-Nn?y#PqN#g-vngE_rlrcdU3xCgYj#(Cj^1wG z@*D<((Ug0%vzQ!S8mgs8vY39B!#{-+{zYh;xcg60w|vz;dvX1zmsX)QY;VSMePG>} zeW`-*H}$ddnPMMj?5SzV0UUI4aV8M?P2WHps~qoN6{1m}yC5Ng9_7gXo+5WVov7FD3*fFXsOONk-OrlP;`&OWW8-B*&dA%s7hy&ola52?Y<@D;51IthV{!xXJvAW zs5id~Tc+DCd+Jl=_U*D~RL$x7wpr(~CZZLuABz=yM&^{r6a)nmMU04$dx2u5O0Q1HN6~^r%d&*2$lH7F`sY!!j<+J+Kuf!cKV%8d0pen>tbxcY+^*zQkqR7H zk!KJbpNx#D5U#Bg=Vq!V$5HU38kM~`R{WyS`6J($GY~*gjt7s6Sq^s2?WZ3s94qhM zOO@7BL#nmzpNe_yrtjY0gFTE`AKhNKb)2$PxV<%lYPmEFbc!23+9kgYckoq{um)wR za-mYb)B8^^ehCe*`ZMYN#n8(oz4m0*Cp^oX7Rt_$Ib0=*%u`ZhZ}MLttbY+=@-$x% z=YZ8}XKvA&n*K{i7dL0^@=IB`?Kd~k-P4Yov7FBk&A>}$wjtuCDqK;q+&MCCzLVU^ zk{5qB;ld~3V8$)QEmazA(d#$#$9(_#@j;wk4LZfubgSvaJNpOgNK#pky{#q*#)|FP zUt~QHJI0@x+XANiKMe}7`wTbh|kt@Bx;*uc+{wCf5En+LaQ#So<+Ye-aKJ*@nrZ zzhWOESp$g-tbV0flpP7Cpb3Q!roRBso2<+5z6q8L5HeFPDMAs!mY;CB#oL?thKv&0 zTa%#T@!q+8>-1?!T3LJ>%C++WARX~aWepBJtk3P0uhtsvjH%_cjkecrl&-BzXo84O zJQ>{MmyA;rYhX5K9E=m$vJMB7lakCa)6q(+LR&6w`u4-9Uzwlz;$7k1zbdGHk-J}$ z$Hto$s|DWPA*HIx1@vOM`9NFJd>e+z%HYgm zl-(B)_aq+NgnX|vxG%S)KbTQCeRjvVMxY60`NmwGtyiwq^ArS%%4d z6L|hpQ=%1-uE2Wvp{qIv+satEkZ)Pg{JYPhs0~cEfALCYOzST?fv{PYTSK+lGxc}j ztT=do3B}qvF)TRi#VuL3bWfYOk_3l67#8A9Wym-m(B=bN{_jQ~X41xA4?w5z>}-vZ(t7j93D&m!da^zdvJAK?7Dsfk^2brvq~bz|{#C#_7O(s6Hf zy_Iah$&C0^C3JE|P_iem(u72WWY0)uQYodI(OTi4a@%d>E$M(<~f%h;uxUM^>6SrdRP z9_FNo^SQ6i&T_yrn8EaC;gR&?zqO9Ux4iAj-_vg*%RD=y5#^YsF^phBRa2a{AFQc= z_jq}Ws+~^1diLl~H?789V(G`SfcP}X6bB-5bV)wP{faV~x{bSJq-!%D`8Q+lUEjCl z#SVqSo7Ckq0faPZ<0}XzPu+7+Hr?Jt!^C(Iv#3d)}6dFhx(rpLi z_>A-36&p+1E`7@$=CM%oXrkDP+p3Nj0Banm&L`s;=ST3oA+%r&#Zx6Ra=l$~8qQZJ@ zEi@|r&{+2M{^ZW)3lX0dYnZ1X_D>p{UV8mj|-}btc+yW*=fgx3X#)lcMnD0rb zMEyIaR<9=3<$Tcd?+S%!#}AvgV^qs}y?&GDuFNc~K$P!c*;3;rxO@v~;{^rvNDxgK zF9^>QAO0cCh0AD6X;fh9fuEtWoC%Fp0Ypx8Z!^i`GhMDWkFy_RCJ1O;qmN`}A zBazf$3*1ZIDbLc$FGi6!fjxMTxUoHp689q8(UA!l&7%$S_UNDAXWoTpb088_O`^Fl zTuT5Vv5k`CD5il9b&esS{kZ}d5>>?7(Jf?bAdTD+RGad{KU?V^z{Bk{7y1;g&dBI~ z4f-Zhm=2H>j)%D%c-J-!sd-rfYDv*7R?AXhQ+s~$`%iD&N0JaG76zv#4F2Q-Q__*P zzyT2cq8a-@c#!t3&1|;6#IS z@BH#;Q5##18CGwMurM;}+CZKSS{$>L2)q>x$3zxTImzOH%$)iv&wjM}zX#E`D?ZJ% zoHc8J<#>*wn_;sh4237>^6p8S+};kKN<3;b8zPN{8x`WkVaQ06QGHFSFJ(j%*{=L) z=wqcLGY0L6n)lbWTzPJ}e(s)ugEBV>!>tT+!oTN4mOUgL@hLr$R1s($JA*MU&EfC! zg#}(hb|k{Q_y{z}R2)%6ZINaJ#KTaHf^MnkV6Rywfs=@Wp-P4+TB%%7M8BrI2qtk# zU3l|wa=ucPS4C!a+?FrdYeT0I0@EaGmJwc1SvE$} z)cg<4@=po(?=bToCkXTsN`p`4U~~m+RxJ} zO4{$V@WpDh+L9A1nnZ_f1Ur6(v|S*e*E21=1o7yP&dA52>t8<`Tfs%IvYQP~Me%(! z90*JCsaEW2rRB04-rjoZ%R@9uQ<3H|i?fB2NTuBnU}}-$bN@j?;vvTlchdeiGkp(X zcAPhsGL+a{lc+-LH5o;Qu~bXRFdQgu!{sSShH()%D?DK5kL$C`@IA^qgTC9%hyA>K zJ5{fiMP4=g9!2N&$|heh?skyIPG!S17ibzpMP?y0ae3ka4$YU-7Iqg0KzJx9|JY^bmBhl+b z(&kL<^!c8hToeb5k135DO9lyB1c4Jv@k#7Pb+H9Uuf9`jSD2awx=C5nVBVpt!H3 z3yy5)qA3;~pnnx4Ll@w}LP57_Yo-7l(m?J-h2c(orXmiRCYeA|na+^P^e9s&ArI5~ znAh#(5&D#K)V(`!jlMCumB(GQ6@_Hyfjm^tT^R8Za zzPhol>+f8I(35y3YU;|AAD6Jvm{KU9)0@gmGC!U?NQ*3O4E!F(0~gat0vKP=;L%}~Rmk#0xwnNp zV9_Xwj;=$WEoq`*>p+XQEyFQw)o>K@geF8fcP50szWe=#KCY>s9;(PvKc}oTb$js? z1le6WH{8@OP%d+8jpd7j;xroz1{gein%ELiuF!Dc?4~8jv*wG}s$cszjdi;}bjmzi zZTocY{n%cd-ssS^n5xGGOf^7hx%`hY6e0=jhewudXbG@a)wox}ymxKUrWXeY4nX3PNHNalsn*DZB}u6FH_kZ*Ehk{Q&4Z*Jv?8@ z4Y$Wr5|YdKqJueoig!^ciChmDEDGBck*f_c!~|OIAAGUK26UL@34UXOeX3%xFM0*? zS!i#G$+V5s0l?9nI)-}I@u_h?n!Pf=Y(m}C{peWc!{{J{w4Zg;j~=*0%>LvT%%>Tb znWW#R<=(sBB9`^iY{)`lIAR^m~SB6EmKhCPy4i4~XFOJt}_f$TMlW}RWuBckAIa*vbZ>`JsjnHfks<-Rd2#Xc*bLh8OlL!Y2<}k@hNv+%# zs_6cH`*h%(m_7_1EJ04+#%1tS?=_Z{hxT2kaPzFM{B~HK8SgC~yxgu5SPU8TMN*l@ z)F7mpiM%)VZk6;d>uizW-)iUYu}l(EDOk^HS*E}SeKxZgFjt7CN+LWux* z4|}?jnZO+xz+Kf%0)@*pJLeUkIMT)%w|NDaB-I1;a=gY(#e zJ{TJ#DC;`pjyX60sOsZ)@{YcmG1B3+9vaaej*%V)CPn+Vg9imi_r%&fJSiLjdz`J< zgR601=^RfFW6HyuutBC?9NdHust-?IMfwq;H^}YTzcd;i^42^xz?Z&UuHW|b!P|0q zI~+9@wPkx+b|1CHb1C+0(bA9OzuUX-Mc)8G%0QMCxV0GS-+oW$KfC_nk;w`Ue_MIL zTwTNaY2Z8#?`|8jwxW-V?NU>>#D#Lxja^-wvdqtQlCm1wxUp*N5}M#q2;wg%Y*rlY z+Y)x`>>}FjxSg}|)7{u_*-CK`EN|M=e4swdjrz;#X^@Yd6?1H10;NCfbwL8$7j0ij zwg~qpt_dX^x&XYv@VWO=n@}n!!IMFN6+WDE*EteF_^&T)IHdv#sY(caQd%KEUyCLI zkQGY;pzt+QktN-BY*alIksN~HF>(-*f%vHp%ZuiS`LIuA%oxt5zV7Jq>}3}9o-W-= z?Yc6sq+9eOV#sdMiqQu3IY0&918qiv7%Q?yX@$%RzF4TSNlmzNSBOgt5fXq2l)Kc; z@qC7Y5$X_**0QY0cZzPAUAVkxmF(W+dh(OV!wSLnFN7QaYc_833fMrrga?jQArW=B zZW^r)MnW@m?Kd#YiE#?Q9t_ja{(U(YKR#bJXNBuQq0$~z-NjSw-7nsjyslD?xp=k9 z=R2M)AeyMGk8NC<@RiBR@O@KN$hVxltuRQ<1gGJA+}jBEqv=@L2a+3GbN=P8^_GkbOl~@coX6`00)ov!YAyu^!P%La0XER3u zz?S{l$i7(UfsX=a)-MD9A!d)Wk$2pl+$w&fFL8cJ)I?1nza228QO;`@kcB7+vSFh~ zfT)!m(J@5?-EDMg)&Yd-NUT?YJ*RLO{)hE??(t9BCa1>6o9;5hZ;Ne{m9vby@H;R| z@1l@+KM5S?oYhAa<2&xkR^tJB3wBlVJ22<;TZQV(a{(-mXYx~eAY~Qezsb#Jm_*>O z()l=&9z`vEhzU4xgcOn!!wbYv4{wyrN^&}{D5Cd?UxTn;$D};2Fu+-eO9y(f_!SP0 zB=^i1HZ#Vp?Ko%giJIT^@BGg4tiSHA2FM-hEA48%Z0M(0JQf+rJErxwqJnY|^7ta3 zoi*I4a0#Bx}58se4@|9pCCQiqYZiM!ebjD*#eDB_;SN{hs!$89nKIxB;fyMA>B%uwkRe)% z(+mqhh!vS4`?H)wWXUMEXLuq1LT*CV44w|nGXCTlK`xn8Rk<5u zncmI2!qj@7Df!xnCnyp5oQT&qh?HNq*DMU}M@ft&&2a7mf8nC@7y0LMxauF$zvUeC zoFE4Z(vp@VbX&}^^g}m9ALk*uEb%2uFPB<}DN}0UyVg0&OUlz1(YuhIlt$~IEc@g& zzpzRbAaZJI2{5qeDu(<+#UQ*t2MbkHE#xVoMX#djwu%3$CE1~NOWMcw72b_em#7r0 z92kmq1gZ_^JM_@EFRRb)Qbf_`%UgGTDNhyevA-w{;~koR<`xj*nCu#Qlz{9>a{Zqo z`zK8Nou?w1^&Qc-YAVDjNWbNGHX~5d_OIa6@l>rh&)yb6qc5-Y-qWm7zj845jcC1_ zj)^_g&Goq*1T4tL68HCP0@UrYG`+Z2Y=fOo(H`h~E+Ef=%$Q?WUyO2y4Zw6{m5TH} zv^%AlpE#Z|JZ(ZTtEZbI6RYpNPlOh=S^*h2h|PnSH5-DES1-?G9$sWm!xx}iX~xbgs2po8 z{`BON=!)&frq(tc|5xp?OyW7^`9uD`+z_rrqgxRM-n8pHK0nsw-cI7dpNzur!5>a($qE->vA7ypkWOQvA(-(0T6Pt2d^m+sgN z^CRE06MK-wE@JNon~(VIydT}myWBr{|Ek~L-jL5}&*O$w5^PiCWRYxRRYPbYWg)*1 zzM~Q_>jhCjmr2X8wW6uYw(|dz_h#LRD_hp+d;JRDZrzXLL>&_BQM<;$^cXO$ZTyl$ zEeM1FiT>gH?RQ3m1Og=6ndj8qc-N>=XQzb}h#3(pRy&uGRizJPTOiEnlm-?UF>u&B zLxl?UAe{UuQif`#7)f zGpx{@JdSR^taCe0*by$gay(8eayEp$i0U^iF63dlLP0K%#9*ArtN{;eaY$b8a@kHc z8tvJ#v}cnQTdef^quMchqjNjuf@65LF*earSq=XA&kMO0}-h zrXb-}k!%D>r3fa3i>dOeV4%NpR?#@p88riGlp&1D35{BU&>DG3oD2a(bZx#2n$O&F z)N>x+HhX!}t<)=9xv}3CY}NuN#P)Rb#^K9y)&gnwJMez}#JwBHHJh}@wj6WMPL1;6 zFgj+RM{BoZy1VSQJypcF_j=LXvEa}d$bhHm7Dx&89ud{?H-StFR7BL4I|1?JVhHx{ z)zY-yk@@~KXz_Tb7Pxhxy@8h%!5xp2fGILcWubMcA_b_dxx?(?HCc zdxZAnT!;skdmlXa$8E#WE6vhi(NqQ-sr}YnXJ1*aGXZy@`AG1X1xgNb8HA`a4B9{O zo`?RL{u+@D)mfk`4YW5DX49~c9m?8NwLPS29XeBo<6az2p-jEDZo-=*Wmb_o!{}@N zilLJeK!PR0deQ$t+bi8b>nkaXu7aYDHK+4g4df(*c}78ZSss)KS|1dr=Dy^&#r&bVROkI-%`NSNnuy5HI0;(RcV8h+Du|;^^?n`luglqc zo(8Hf1W;2$hX8d$2Nc1S+{C1`ILs^c{?#NFJ;fi9dUYx*8R21 z2#vt0j6P91e$_D&Q6S>f{S&=rXx7jRah0|BS^wjXH-t=)5@kBpM+yb?o=~jl91x_a zKYxrOs)cLaTm)_2@hiR!ztnSZQ3 zci$J@VZi);2Y*FvGpNxx5w00@c(6}FauFU6SSqE>e11rwec}wAf0&&@9#75fG3t2X zrin})WtUJr8~H_{KQwNR*d4z#O*szyXadYe{SOsg+$~)*@e+m!r;aA;5V#mW|fqPOe3IPHSFsy;EhmHes)4dvaW<1py~ z9Se<2=pa6Zh7Iza017){QJl6$MbHoZ`P(v+mgM}fo$u~P4SV@IX63{br*rG9B%rcH z6n_F#K%w!CmeK`MxvD!@zV9W|+UGlE&2Hp{4(S&xn#A`) zHW=(KENr+#vDG?@<;GD_b9iDGpzO(48;lKmv%i?NAAINhkD}^13-A@V2B)&jo>Y<}>~i6$DLsFJK2r1d3fF_!ww zyb8tSP4;gd|%% zv($f0;a5J){t1o`L`?v3G=bW!+z@j;D7&5D!@6wE@crudZL?NeqE^M+%4#rult}OZ~A!sBObKF zPc(tN`e``0z{-Jx;A#jIs@+_g=*ydH_W1UaKl|y=wYcjy*IfVR64fiO-o`?!*Ples zyuMCyA+Ik^mQ&;A+IoHS?zTR^y=ItrcVydK4`5pmf*#h+8ik2hZ-J_k`0F10qgVGj zhI;d*Bm?l~zQxV&BD-^SeIMb`Av8O2*Ke*-1^w!U*q_(8y0>tF`}X?L9r@kYSCRYf z={M_XIVQ%z)c|p`hYp|Mzqq;)3=$xZxw(qcn44=${rZxR=BEqq=4liO-OPmV-Y$ul zJ>&0gCvk1hZ_-)kn%p}0$dgQ&i&zn}iJ?|Yhf}Y-HM5$Pn3sI9X&=?;KC`Adl zqG$=}gV_IIHX&wwEUe`5za6d&$XR>fE;4 zt)YY@M;eGm78M9^6L7@S-vma)oDG&09LmY0l=nyvIfiJrVb%A-q4Csh_q+9`r`P1h zyR&`Kgc!5)fz-YxEKPI`pv-f8mbiBkF~#%W1k_)Zox0R3&n;oJRjNbvdCl)%UUCO- zRap0_)Awd=GLt3&O`4#4F7Jxn=a>s(6nz^!)w!kyPR)pRwC%rbO2b0EK6>5T+Gtp* zEiN(+$74K1i>*wNR?Qtc`JF{4|=n z@~ZqAcW{R;g#FfJTvA5zJ4%vsK zRP$=lS;S0FfC6b-C7TIZ~DBvm#1vLw;F2KF021 z;-E^x6D>Z7Y5ftN^zm;3=dbQzepRja8m+gk{k}6ir*j;R9BFhMSEjTy^=f5K;MGe2 z5_!v%! zpo+j6X`UAr6U8pkh(G_ksF~*jeEY6#e8U~&I{wsea82)U+*MnBbJC6rmWA<&B(y~F zbF^55V!Jemayo%YOfU&&9=s9c%=o|` zMj!v%;ml6p))Jf(YpFgi@|oRs@~*cOznpHp)i-g+g|kSqT_lNyXFl4|)WDH<%E@{kj%<+b!eQ-V~>9mjLt%@)hJXq zplspRd-OTw-)Ft{yZL0aOC4HUcC{HvkUaq+9?hajknbY}jz0cPAo{w{W1F$uFu3=% zXYDs!-fkXNex=cOdZJl=k5h-kY=vYnDK+$GV3LG~@3Jp{70`xUD~x*MY5!Q8je2e2 z*&bJNtNLQvjFWD2lG2fYCi@9o`Nt;V~@z0x>tI{7$lhsl8ie8GoAJF0xNT7v=pcKEW*uMM_??9*PUWF{TA zG0Tsu!$Z0D{#JR6TdVFm0Z90(DWlj&iX$HWn}S$4N-w3R$v2ws`}SIJ4ja8aY#2_h z9_N`sVpal*GP;8kmo+GsM08Ay_jr-V|E4$&x6kEG#_^P)Exzac?(5@hx5*D>JvMX4 zrMYVfPzoq(C!v%aI_V@L$p-kFf>|lAweDVQ3rlo)C@l`+x+JK_@+8-bb1^>@nT@Lrt0ipN!)4#e^!lU5#& zq%olNk!=?Y@J-PARsBcGR@8RpP2W4Rc}P2H^H39u4lj=$uM8OKM{3!p1 zJ^#0ZGEje(E28;i*(&W-CgtpIpw;*JMISB3UaINsl6UNq7neNpQOr-u(c18jj%)h( z-wsv=#0ZdfRQ7!T#bvzj0ZwF?u-!0UAu%8&D z?oe+eTeY3e^D|c-ca&+p$k!*;9XEI@J*OYF_qgqkR#8c2rNHGWRoh2L6n*?}hcW{a zog+M_+a8QxWTDb_R;BVjU2Gq0b3(~GuUtpolJ&v5O>30Uzmn)hK@0gfH6W>>9uyUG(NtsI_k9lF2*U4q;MqxFA#L)NjUk#1BE{SP2l>v_85r3 z%b3e#%;k9hX}O*%O+g%&8po$i+s_qVYLu?!YOj*&pCn-OfU51nNMxkT8dZj$?)hQv!HLyP6PDn5gKlP!Z;^e!a`t{|? z&Jr$Htq=Fr!4_Q@N9n3};JEr$5c)hL@VtTXT>O=QCpZI$$@7u19W5dIF1Vgg7eCK8 zp56XaF2lKMM(8;^CpVr}7hN&VF+mFT5|HA-ZueQ>hCcpHHuSG9ywffcKl%YV?ZO8(#{J6Yug~B0Nw>UC*rgC($qpcW zb%h{yb&27Ab&-Y30yIPBrrM-xS75XWV+q?{*!fq?z4TIjeEgiM-B9s_0HM=g}Cw zk3fL%S`#*Y-JZQ~7JPKE?Mw~8#L*lnS%j%c18b23V=ws8za86p=DUIpEq6|76 z@D!%j=6;<*AGbBg?$0ZRQ9Zef2lfeJECN9}VFbMDt%}Cii(jGxdM(qhOdpMvw+ZUffSG@A*D7fxc)K(awwH)0 zg1o03<*4k_ds7p8JaO>pX0Rm|kQzA8vB ztxTz3khW-TO%vMvIlvKq@bV811g{r+SIUBtfb3lXZ9kCPfX$oZ_BlDF`o1~W9MC|a z=ZZacv6<0AH?>65SvBZ6K^ibpdUtSVt`9ee`STwe|F*}3tKxNjfnivI=Tgjrz?~3! zf|mlV!!*zg3ZkaUq9uq%PP9P$q3VK$|3#SxkFI&iJNUF){W&^ShmbJJK$OSh-KqK9Z1Q}lZB5e{y=)9tgsU5@MXGRpu82~W(q4vsgaM9@2Q&-EQY1tM zsf|zgzqYoyJM};$9OCFh^y9GbCZ_Ylbuum)K5QpI{{Z8qiT)dFG!W3yF$4dy|A~m| zdf{G?-Qi3}e;yI*PLViOQcaLr@`7n((XGd{be&ff)6|We%4gBZ2MxFg+1>A)9C$@S z%S(ShwQ=8?f>g?n)pd9A+I)H~HS5Ec*-^J@?*!SYALk8hsH3M5lAuocBh)@vQ-39j z;cB|UWoKt6m9$muwfOG1u^Mdb!D2fptVD%rY&v`z5OpFtQ^{A|q(n~1fwC029~>vq zGQ|QY6xS)}CL~4*Cd{Q{qpLY+ic?q(U@V^d=Voq%Q?4@TT+2A}eYAfCR#?#~pq)1s zla8KIE`5_<=T`mq_mgGok-iVjdHs`dOVbN~hCng#N8VXe(X=DxI=HA~uA&|C?GVdN z+^z7yEpVEg?q{O4p}ow@FSY60Xe7Nn=j`QhHtD2yO18-ei^wZIXp04UvU@XP>V;ny zm9HYmmqXuv+b?UuaYq+5mZ1DY`ng2*C>SQlv3Jo$13a`cRb-VMx;jA&pc}XkkwbKa zrK29gW*QM0Zo6CCx1r=d*goOB{(%rE6bAZjq!Hj7lG=zYXJ7v-IxAeF2!gaYiy`Y*Bw*!{*3*I zJcOG5A1eWlzXX5CLe-hS#pYVyTCw#Cl6FwkEN$kt7Ag;REs-z=9*2f ztY)6o;c@>qa%VY~Il*Q#Xby5cc=T97?@r1WA%TDc75Rw^>JtHWZ;K4wCSb_TcelXe zley_`;y(#?K{_4#T<8#q{cuS-V8o0XZK#O;iELuX2vCLD7Ej?adD+;Dbi|8W$=l!D zdiqHhw_g05_)l)f4<5Stis-Mu7>oY$o7>NLT-*%J@#a?eCs37s0SP6%XISmzhoH;H z%{r!L#NqI6E@rK|!}a#Fb^U44uqTyrMW362x=aOIU`gBz5h1)sVw%Vjr}Ny0!u11# z;=cC5=`^Ac5QHxe7K&ffSdDv?vXB$khmQ9o4QuI{U+~jKkvX3NQG$I#RMVR=A^`GP z%83*-xoEQogA>UHhx>mn95_p9M^D1=j^+*y8a`@dCq_=oe@%^U*=TMhrEL`<*$uy7Mb%VARaVS8-cdJnsa1BtH$+{b9MgSlwWPpA#wc z2~Ox*nv;nYrpP?Unv^6cU|8(n)AtYwU<0QJYua5e^KjvXZ%my~H!>sjwcFSdoeZ`W zbGT8wtk=?%CO;nzJ6*e<)AKCLJy@a_-}uQ42m-WDOn|^Egh2@Xm`q>yY_N+%5hi{P z$QSgB32;}@nd|K1zAxcSmuIcGGfVSnJzr3|Qj4$dvu3a5*vb?N3h`<~t=DBhLYl*& zFV#gO4I$5rDo~lql=)Cifx;g$RbM!cNn3^!KoI}6HV*Ba!y1&(?D54c`o;R|bBIxjH%OHj_&}qj&BR%7z7**imRt?a%xa!=5Ymp(uygaxfkk76z z(;sws&5OI{pweD9y~Sp2%9pnzqsw1<>LKCs&CSUJ(QjCv$6;Hh>-dM)?5OZmE(jaB z)~puQ4tB-qN`$9Xn`8>cb3wCaOH)+3vq!!@Q=hrH;IcC@Krd*idb_1~ z1Yt-dE#wmYy&d&|et36ShbrRbE?{fXmxcqUpKkS=<$YzLzm^`$$C4wNqcQVXm}quK z`g@Bce0>>lla(yx5#?o&vl5>A+F;O0kyzTRsg(*Zh?(2y@E0l(DYQ|Zq|{U~g$~)K zXJPY2#FD#MdyDChplzzX$hi1s;<{+YbkifB{ZizOgF8Aa;ca!K4=Z^~)A9zIdqFJa zm7Kzv2HJbd7B3ix&RJGAt5^cO7&=&jO}N4>;!cNd`$n<4=rJCw z@av|bkx$vNL*NdK)zd?4qK?X7(ccQ~#q(Ip50&1aAv`rruTgws4pcf(R4$z#jG9(p zIi?;|tX1@N{mq$5a-iPdEQMm}0)B>MqcL1qJ??d1Ryap2`dqGDYGkCkykQAEL4gM( zQ}##xhjb;FK;tQs!||j)_G!=IRGaBTsg{bATodk;b*e+crO>4UNra#)k={_8XaPys zZwwDU^xLft@u7xa{p%qyh2!(t9K;T!P@edO1lcqZmc{?&telop%&egD;F&|ElWZEf ztRa2WVK|T>cp*~jLga?TU0%bFbgB5c{$LJ^GwuN>GE0Mf5a?cHXyeZiWV!*!C3@rO zGMlsEWb9eF?tt6W({JkD*lGKlz*6O3+H4`-{01x#$AEWt%Pjub>L^3TGQMWdzJmBoL;s|ET!gz5{*2@ zp+xeQz_vuzJ33bIO!9vXrmg8LmQ;>icpmN#s?r~|x?$4|YXxfx4K(;etau9FVQ@$~&}P&+pbd^UNz3Iv>j?KeN zF)Ssmb!I!3^bmqK-jM!Gao~aGlgI}tOB&H4;lX9bfeOzC8pI)YWjTTJ?W9`u$CTzR zcF2>b*?aUfW=@U!1FdvkHpIxKw(G-s796ST83ghbkc-FuKzwiP(j}oV9eKNrsN1D} z+AM4XD=e}j5|ET3IcQoC@*e|P8+&SA7-jI-f8S#>VsBj^noNheIL&fM3rmHW|pJ8SmbX2g6uNKRBWq{3Q zZ9Z(p2U0?IIRsfF+QylYjLC2!PZl8gV5d5>+fRs^b$it?owXWsIp)^b@54nGS<|;8 zkcb}gDsEno>^Fo(Z$BXPT`^bv+iN5>=Vn~iEa3J!(uJHWl&PhRtn8SZJ=H~`*7Y6^ zP3zkSHb_Umd6liI$6URb6}D}Snsv++R-WNAT>)s9D=T|b-(De`1Yc%$hvrt;0SWw4#R7t5EXGs=}N(rQSIbB2TlqM*urgQM| z&TX6i_F!M?H~k93J?Je-IR(Ln?g4}>j0Gg5O9N9EpTu7#o$YV#wXMJ?i4I^d=QON! zd2PLMk$iOV4rDmny1W#u`slN+o%E_m6ko=?fTv#lSQ;d|_#U!&*D4aMqhEAb-a^6_ zU_D*U?PTRWE9~X;+l%Qmv?qDL&OVtZD~m3`2j)x&28}L45zhK7Q5*6+!Vbha`oSVh za3PSIif^?j8F<-d$$M1BrP|(-xBdQ0wp!(t@~HcyvgD_5H=Rp&u6MA23{L7`AYMmu z;(m->oN4+^u#4EMbU}sdlOg$NR>xicrOfRsN=+ zKq-rW@{5Z)Gl)XU`5J}~iSjxqb~5!&%HP?(pHjW~AvJSt%lwfd%Ku}(l-i=OOohAI z@)mQHp=tQzM?_LCRegp--v1GN1d*BXZG#BP=nFOfz*rCBL(x%jS~F*K^z->2P59DP z&sd}ip6RNo|3c}e;~BBBdO5FTC3v4ntX>dwE-ML|VVH^}t68|9vyzcjOjHYLN*39@ zf}BIe&?&PQ@DSA{^fxC;O;<+*H^7j(%ev#o%_Q^ev~q1x+>VDrW>I?1yV7etw8A1k z=v*0eGYdHZg|P7OhowQkI|(0zalg%^oY#B=yDQv#T;aLhm=PH|uKlsXgY(#=frW`bc361_b?62seB( z;$lSkAV+GZk-p6;zJ6s2K8fDm`?L@lXt5m06RI)3VBKP%GeJMjlzTNUJ%4-~`;JuV zywB24heEwzPNIMZq1ZUU#XLb1CJ4y7W*P{Q55&NS5Fs)I^5>kScHc;a^)2dV z3<37>K^WK-=H7Q`C^kGYT?d2^kR0%Zg)RZ-f$G`U*O9Ft&^v?s!jX8$oS-I>phs@u zA@!v&ZA5*a)|&Zj^Ql&y)YRu~yFQe_IQ5k0LXp3A2vdp(tLBGrrR9jE&jRtx%cvcp zd;`tJ?!hq;aY`|7M&O$dvwI?wMZFZ@#tEcw`X(4B73Wr`3Gg4YU^~vp5dXuHGk9x_RF)MeQDI5>%(H9Ju@ZK%e|+?=$a=^Usf6&Bas9}VcCYLW1xrfklY=f z9+;K?g%T)`NKyF{9wt<7QqdEtru53gMD^=sJ*lKq2-J4sr9fV0;_ z6B0uAa-DbzPY^Nwf+%OpT&tyJP%=Mm%U-X@|5< zR3}yz$}vJ3;vRe^0yMef|m|{1pP^=-BSHYUY;;L zz^`EM$j^OH*K_(`xct}jABJj@LJ9JjBdnM7AE<%Bbg_#|kmJBDi-a!v5&09p&9Dsi zC%{2u4i7WpefrNGqNg_EavNWJK$s5PQ8tJc*wmK9M}rep#kHRNtumXu&JIt@(*9lN z1C?V((%HEmS>cC(q`iwu2Q+v>@&s(0aDVqq13%;c@sYN-TO)bcH5T}vF?BP~5KKib z=Vkg!WEPhy3{mq3O(Wi|FVl#_S;V{i%G~j&Y{-(f;3#c?n+93~Yy>H5Wh7 z%USGF$R$uCAO$5DsIki|C#pKmxa>P`z0d6WF9=aNkAx3Ye<={6ITIydU@hcOj3H`Z zx)3BiYl2fECkmFOshYtlBKRdv2AOuGW^ia+-OALn$fPg!Kp}$Y{F9^d(zU>b=fXl} zzy;U93}IYfBM@I-gEnJ(qyp{YX*9e5A;;+|Tio@QE?4SGFVlUUyesM6qggiB+);Ty zGTsLEb}Z5rju*8bc#e~^3Y883fWwR;0s5;GNrZ1q_ACkC+}p&`^)7dhD|Pp5Kl4>% zFB$7Sdm+ z7ptYnLeAu0-?!y%aj{mJBxU%WlG@_d8wf**;uRi6zp&Ik$ZfmF1$WMFi$k(un%b@= z9<@$;{n~nL`sE{NQ@Vm%V)Y9Q$&=|Hhome+{!%4Y7LbogD7=0F&14V2y)8((a~ncs zuvhEtW=@?gpVi)y-&pfze`1VSSlYrlL(0*E^HK0bKaigOL+Dfiksv9Qy0E#j90(zZ^yG0aOSHaxW_mDx zsb!aHSNajXfZD_luH`4$#a8%bzn~Gor-QCe@YIqhw8G_KSVda`iE05r{+*%Y>99U+_zl@?41;h&57Pt)_L;T2qh zb%`Dl$Vw#_QGgxZ3Zv6q|I`8677y@1* zeRgv{Mep`1g3m|^y!hSt&fALwR?O$s>yfK;;F#+albGw|CtZFaoie;e+~utv`>pz# zBz{Gv5Mxj^@A9fYS?uV0TwR_&p!n0a4p*1gs)w?I+c(*q=J#se&mWvdVj6F4WLKQw zwzwWT$V_TfUgY`HWS6t*&%x0dNQP5-*R3c*k+PuBx_mJUhHzR9awUsCP;Kv6HZg>n z=>@0heMOQ+ncCP`kA*catoYqK7npS?glL^uIN4FN0Oaq)whMbI#(;C>4~z0Y+!H{= zpAyKo(>jXtxm?`CVAMAJrrtNYphbc?w=%Y`_Uo!vkZJ|yI}VSaQz~4{LgRQ8+!B2k z9z9AEev4$1VQ@bvo=k#Z-JF07He`O*TRVe;ZZ|5eRiT-em($7Wd0VQme9IF~C&M6a z#mTIoC~P`=gVQJK|2?6_erF2njwwV}c!@P@p3ho}BEJg7p=31rBTa9cW?2iYD4N|( zq7j6PC4WWODe^f50*mnW=2?Pt8?F_qs;1b3grLXs5u~`yk|tgldMj0{&NVwF(6=)FBvhDg(xgKrC=8AVe@~I; z?lV>kDY!Iu9ip;?I*eSPjo#}{P-a0YXoF!-$(*b)FxK+ajn=qkx`dckB{YDCKMD)cG9I zPlWk5!Sy8PW08G7ymSlOW^p^vj@@4A(dMPWvdDL4_@+rn4OBN|l(=jDj zuMidR@_Y_28#2t6imGPc0$I8+d9Ei6x?-`{?L94}c`PS44CK}YqF3YUnAI0O>mbY1+o7fX07 zs^F6*2UO@SxGnrcOAmY=o`qvw|4AP>8UDeq#65g?(-moyzc%!Anv5a`UwfjFBH0`h z!C9yzq!CO3J0$6_u@~cS-JkDeLa9@K_g>s?!79zY?&CqIm&Hm~mkw?%I`^kDHE#Yv zbVF!01=LS`ZT3GqSMOm(1WS-5D4#*UVuU6p4}04HR|e`}JZU?oWM_8TaBVe4ukN(g zZtZKn#_CbnBd3!y2Gp#?T7RChCO+L#05$RK{ObV?PsR(dh#;W?s9Cc4_1n;0H%F?w ze5rJ0aoKhcucHieIR|(FZKkTn04B?5Bac;hBGmi>U>J|(Dqo20zaFeG5Bb)&d=7;M zZ%O6JpF9Z3k%-E`%(rG0Jzp!WjWoARS6<&*i)o`Smv;`!=?=h*oP{xPB32o&<)XP& zJ_j}K3sU`~WXC%Y^K_|gUyB*LIUQ!@jX8MTJm-i0>(diopK8pdg=AyWs14Ok@=Y8b zp7bDB5y458tVmWFJ=Q!pkkN6E9dF@zN0L9GdZ)-o;JA%0GfGEBzAW^*lM*l?QUXR_ zWd27(oo%#K!}d1o8BD+_`SYJs_U8}%$nv4l001up#Zdo)S9SDL&%*hRoF+>_6DZEm zG)_|$Q8RJ|^l$||9{Bu!%>KX}!{z=(1Mv35Tk6QfBI_?Wt*(x0zHZZ+e zgegb`r0FAcFbq3RIg4xVT>9W&JsDRxh3ZF=RsL_76bA71)QrZ%^80Zr4cq#DC38|i zd0Oudx=^vo)KpdL~W?k!YsnFqf zZ{lliS7`6uN5LOW#*Hsu90F%lq!Vekn@YP zSaU-+p>Uz4ZR^fvdxz0SACR>d!swV)9fU6KS5xDyWmi3Pt@AB9E~2 zlCZrRE`l%;m=o}As{0J$R~86nBX9CReE_sBaPl*^l0dbjm;Bhz`@GzHD+)zgua@x0bI>&e5EreL2>*oZJjI0R&y zP>p#mO9LZ`@Xw}@29OFwK&io~=Skp@BbT(|pV6_J-0kOxY_1vSv$UFGv1u*w#v*IeJS8|G-tHU2g^|t&r{@W)ARI8B0e(S z8EPzXEb@c}Ua&pee`B%p#8} zxkvN4zA3L4Q+2m|(if{yoc?0!6Vg2>R%(N+nkwO8kLQokCL=|l=6=XYI`~;_AIAGu@KWQn_mb6VLPbqP0+O{!1?k5}VRXbZ{KPM%Buv0r zI!B+qFTwor(O6mc)x&U*%UZedft$b8<)^g1eacMJahTh46gEDvEU_dpfmRE*kVnPD z#UOVsEpCmGVEvA1dcVkoY=!H*`p^0NL2_Poqr@Lq)yJ%wcb#gSelcYs!5A?iqF;>2 zs3k>-wi{s!Hi{me{;rr^X}k+=X{629soBo2j?KleKIr(>qR^;c2?o^ixJWoxvV-RX5> z`noPPCF5n;UOo?}Szqh(WmXG%i8i8556Af`32tPjP)+MgVl^1+3^(%(C5Ti*1!1Lz z(iSvcqwf^H%Dtk_;C1K4*X63VPiO3jT{rTty{Go-XpD=QSa>&T611d>6q#Iv<5(0x z^6=TANI`8&#Xo$Qd(wNoxV3>g(9>S z!TJH#)LExI7xSxG-!wa1z28!tja=rBi>%ac$H^P=<(nmAp-Gx6P?C{k>#rGr(E%@J zjQd=>h(3F-^G0=7ylCP)u~`^a3=pkWDx2B+#>mx`eLmgW=JdDcVUWHR#v18(uDbUV z-P61P4oY%dqERw5>`%7}9qbG}pX?^p{0IL4deC`>y}*6To^iL}dA-M{p`IN`Lp>+t zde6ds&$nVjUoN5HPg>D}1gbg$DLCm^zR1TXDIM$#DI~l2BT4#z(nN==j(+`p18R0> z`^+f)c<{u>QZcWW6kF^TR)vAgcxx`t%Amzatj#P43gu|#!Jk0s6BwLPg^oV{T~#{r z@=!F`)^?g=<8{SnJN4(ms;=z{qe-J#e(4mHI2R^WQW7m@beks0abMHt*ieyWh+{CD zpkJI#HultgiPMjbwO2W9JWhJXuveJv?Y4N7x81dTd|h6CRgPu_gwM%k}t)D z`uvHlp=Y4Eo+P0!Gh*Mb=?>@NBJd-dBhgvOejj-((4y&SdLHJ^y_Rk^+nc&RpMH8C z%*IZ)y6EehW^X0#;*G?o288*zwPf|0-nul^qD=4@R^;Mc?WjguctYN z7CIgA3_SF|MB~n0FDwfL6&^`GV!%h=>b@7rb7>g8HdZ9Z=vOGCZ;WHh$>eKi~B zu0NqOW$loX1dD=hJVbJTDYNu?&@<{hGLMqnsIHBi0Y~-qi4AJk1v@9hp?-$%ci-Ua zFJ*W4JU-5)_4~@!ORvIEX-fRjdyaGSZx@MzToBO7jCzi;SnQvRatswkIZ^ALsm>a0 zPl9!gr|w;dgubGiyv9?gAh;u_&7gj~T75F;yfo_ja=%<^RXMG1m5te^S8(F;2Da-& zDGzQ#8f`%pDC#ahJy0>yc@`krK^>f+vTPSeCrnCWrv3wYjr(5RN-z70KD2LLrCXmF z?~8d_UZvOG)20`vsgT|ep9BJFy9S)07bb;>Wa_L9q_^4E+N_F{SyubBE`XSEgbVSW^(kYnFgLm$$?hrE28BwBd zB-t~1_rcmVKg=q|t>Dk(V5E5D-2%Oz13hT`#k@ay)qO@ zv)&|#;Z)AjnpZJP8hM5$Odu5KliyAdFnFH2qBC6D+ug2NpFHK2;yd2=?i z4z1R6+s<7FHv?OT2l3mGOXf$uX%*u`My&HO#{{g^FHG#B=>Le)O05;!gaFmG<3o;tpe z23s6g>PaYk7iaalAoZ^z^Z{}oWKs#DNGAbNOk&(#oiyj??{)?MDxN33lbuJCwAPyI z2j3q|I_X-rzcefQn=owFq^t8Nfa25iD%wWs({S9yXy+yU%@VAB75n&%tC_md%}ue< zd^?KUwE0xvlv%y|+Ao7X_LSd7!;y(0I`k+ck|gBL`Zex`)PFvs>2I%?LR?~<@^ueg zTKuTRdMEkWXEJnh9A6jqqfh!|k?Hz9abB8neCMh5Bxlf_L41kmom+dJq;jG?2X&g$ z5CT!DeicNFo$?O|eC+QMJMwyTyb-Tb4ALO zMQ;1GhDVZ!PV0CR^y*LzfwxR($%17Hk|~KMujWO?;&e;Q=XF%9=5#e@{Yx|<>YOH} z2PfDkEFt(Ye=-QEs#>pS%zeJL9H=9k&v$37*?aD3QOec%kgWv|gru-H$cuRpC}6`& zk{~ksC=vM&7$@#)CeFkYS5PgDTwCU(gAMzFfj28Iek2}?_i zayAR-DN6P<+Bef~5QP*1VCcnW&&(8Ig}1@Yu_n#hR0q*?KXq7aNVgu}R6TtX_BJHl z=4gXE6RuEnb3+?c#0^c)0-fxIB*4(vLK{yv(NlM9{s6NeX?><|{Pki^g#dZcUnk3h z0VfE#9Excm3M3WTRhnvX9IweHCvZ7a1ZB4--0pn*7LAkuB^*IIRM=W}j_E-08a?s1+zsH4`~`ngbU_kpQW`_ zq~{_z&i^OCOs1u~D=<%z6>oL9T;EF;dPTmAFU8hS-R_6IdA*|W4$r$mt^8UK=rIwo zyK2S3bKnf4^oTfh=^<2~FCBA^lzecJV%IOMRJ}Z?q`Jd;k+6rY7hrk5*#5+KEl_4E zcTB#C?ER1@lYa9TS;CZ@jIPv_8WW8CSw(|2XJ}Fm#$8^`ngagG%isvJvhWDy(Yp&l zwJ%Z8k(Z!5UjCDp;W`V6=w77FpfG;n9y6YnYaaWaHSNA1#TFMVO!6Gb7^5=w7CMCW za;)@PF27Q&S+3;N#1&waeCgQG+d1yADM<0Br6e`9W?ZjqxuG#_|W2bo|k006N(GhM?xg& z^+(l+fNhFWtZAUx-Py)^0$(g_)rA+}k5+NSM)i<5;2IB}ZH`TcSQak*;s_so&`FhE z{-vHjztsl!lPQ48Gv5&`Lsr~dZe4u?=0*SFCPZ68GF?m(RYS{)TX-qCxw+LAjH%k09FK(s^U9!05hRQ9BcHu8iv&c~A(1X?-^4savCfb#M{vNXE-dJ%Xd!)-7>o2-GbZ0Z|D$OxT-7rcse)&^VA1qk z)$xpkHVP6a3ebw66Puc9h@xyss>vIwF6eme$EgHtl}+uo#P z+^k|!l$8A;k(C~bnv*7dvYjUvtun7{>ByQ79=PP-1QvgWGeMWXdz{qYyy?^P-lt>iw0}lkNKYT2*_`&Q*7)L=X1_uY)jNx$j_32C41*8F-``1lpxZZC7 zdpsAb`2LN|<|M5z8{N(!4Cwa^&B^iwsX&Wk=m- ze<4=M3S#2Y|I$jQy+p)NcH>81E?ucL;(ZyJz+=yz)=Yj~GzRu+EL#I+y3?6J$9FXU8`KKJS?Mfm?!Sb-S=sBnb`Ve^0u&>`U%suTY^o?#THglr~N8 zb}DkOk)FQj<<>eoub)oLhakF;uy#2V6|zcMa8oft&EJtEF(Hh8S{v$C z?bF~*$|D4^b2A`|hAIA%OPTNzx@PJj)g1Ig+U}^1LBBF&i4Kf#_8MO_!r@oTDS1%N z>VL>OEOI4h-~zS^LC|6W&F< z6YP`l3PZhHoIP##{7jh_R@}bkWwL9-$b&@7VfB^)>eN#ik2;U`>Cw8g--A5SANd!; z9jcu46++lf{V{S~=e4oiShnZpmeO-;@+#L?l3nQs7Gx{#m+So6{Q zhSpF27J%_>GyX#GLLKyfvjk*b6teAzpym1OpZI^a@7j~5v1kkmFEVu9eHO(MLPpT! z?Qp{UPRpRIR(|lLsEm{0&cSjC8f8m2jOc z$5eKCri0_k_~|dK^$rI}#>F=hCw3EFb#z+xEON=svZIQu#5?9+;ZvEeRu?glRxZluuI#%un0LYvNz?WLW1wqGsza;wU>%w2j} zZ`S6hZeW>&c;cK{aC$W2EP~b>&Ae*=o2Tj1l!QBh8mxKc4>-LBW zjviXc&&zpUMokQY>}aj9fGZmT;H`Gy9lHghEnJ{kjh=)?=hkTYFg!#J4roOMqw*PQ_^HnVJe_Xl(>Ar=0-vW{|cU8 z$tAz9C3)6SZg3scR$0+{POIkAd*!8Rm*&-K^UxZu=Ye2c5_$^hhln8Xg@wrr=p9SE zXrx6EW9UULB=QH%vxV7XUfL^RIA0u5R;yA~JaX_YJ(?WF%t~TS`uOT!I`;mDtVz5F z@x}gm3hg@j)!&BCF0iF)mo~2Q(j0WxD%UT`FYC9mR9h|d=X4-BmtJ6L#=(j`pCg$G zFpGnZPf4(TVq%ireP2+M8O5nXmlC`VFxeggvhWMfBymB8cOsrn6F~5HXnuyEQ90X@ zs|{!S)aluFWzuUo`IS^E9QL-g3sgHoc_4xc_Bw|Ff*>dx2fHkqZW0T$#TF(!B`h(g zA7m}0`e=b|>t>X1I!IJAy$g&X)BQ{^Os3;4rl!93Gwpt#r2R!!w*N~D8~x02iozvC z(i#-q5F}315NhB_j=U=H8bS|f8o?Q8AFAXyHEZQRaFYZI8iAOs+ThP6Thyn&*pd#F zxfQaaO_BOkPF@zvGfmAQ7yksj!JX{l(zCZ$AGp4MdqtmV_5-3JXuL((?<3>jcJkrP zMR1Xl8lIc$Bysy{e1DDr(e*XBu@*D;`l^3=mhIsBn?2gSb?2JSci-O7f(C5dzEswm zi*Qv18#r!dA?aFCh`R`B<^YB)tkQK>W1uE}uLXrU`7`{%DYASB2sB`TfB!e#*x0UD z*^hw)LU1s6m^}biSvD1H#PA}S#)~V#A4~>-*p7Li!na_v_3}R5boJ+X_oX`T)++jB z&=z}c=4D%95o_N^$IbbJW2j4F=n*C=9+uwKX(mZLQ4pl8B-1%7xcH6!&R!$wKPdR! zO+ej~+8|#oWq?^+M|$2NFz%u=iL#%`#zTB_;W8&G#yP)1#CghJI8UQD{gQa#ek*nF zi{_rALBvHulLW=+-$0i9$(_Uke(cZFO@9i3_;yembOxS^?%d$bG?dli(DUDh#oA0w zzw$_yUX2x&nH|OBl*ku1byy*H%N;mYoB>W{mQ1; zISiYloh#*MuhMjNyFt!c^m)1>&OjtDkRaYkjsCSw@~N-ydmtVbB}G^0HRkiTLG9&j zEsS_caEAJ8$v4W`U29>y1qPu1K(Zr~)Dy(0d78Yf2%tJ7j;8^+o1Po+c>k|dQ6O2! z!5wHC_$xg0Pf82b%TIq@sxYB85PS^Bd1SDQWJ{8#aXyF;$fYt&pVRLb3bOcQB=S zYi@6Q9W#q=s3S%iy9P(BNYd*B4%{o?OS#sLK^35oeU9=H^qj})>(h|oKT_7laUPK1 zg7gd1_y-)%NV49+9f}n>sPrLAq4}9!G-r#LA?wW^1+yebk|Dk_)jed$9)b=)3ga$9 zEe*)jF|!#fJ&zA15tx2C8BT#HK8OK>#MM0U{6IU%ng&n zHxxH#^_ii@1kRtiJn8q!*6=nvS(e+yX*#Pvy)Nf_X`*TdZ@P{f73vT0sEt3u8+9*e zrvtoY4kd*|v-m3B&KNf$jLovDy}-7+WD2AMEx!aqp5Bk;NF z8ZHhh5|IJ{CuyIBtJ}j?A+=mMwhqt6W=YDmBHsJ44bO%~^*EOep9%hZ&Ip53BhcZ3 z7nuK1LL)QNNrBX2F;<<_e;Gdem#$xB&k(H>$3dPWI-DwUC}*}z-PA=6`D`fI%H^!A z0wx7eo@8?*Z%DMX4|KS*P{pediOM5)=_F6*twX2TIWFFEC9$dTo4z$3O_#N0cgo!K z?Da#1EEYrbcO)3{go%NkT!|ol;;X+?V1vp1^R$Aly?f+_;8V7x^J&XOgz(IF(V3W! z2}UfW3NpUgY1V#eJ(TxL(x!oUpS_g71kDVcNK(Xxv?G=P884|>pv}d%X2}20ua3`g z3_tx9tD8rV68XB6kqQwhLDeKNYwCujWmVOZH8gJILA8|yAq{6DG$NQEN$g;Dr=Z1u zpfx68T#3HqeIVxdl_f(uaaQB^S8LLV0`Rxw@`crOkTV+RsL_Cy$Bv z;0MQ~{+z~%_&#$aN_ajo<5Pb^4A1#Lk^OalQ-MsN;Ehkv#is*}CZpn`BbD9`eWlp# zG_uCDxH|UR?cODnEUP6BJ^>MJ>Qu_1+ZH34|Khs-nxMZ&a7jEkb%QWloFjSkR?C)+ z)l^J3Cy!fMXuP+zwbzrFJr^#{<7IMIywu=jS)wsVXmwzl82s@bmzVZ8Se!tE!N+k+ zZc`pr7foNv9h`A)G&B5Gp*pEj?*nYI{ez*dRU{62a7jYia;VTpO8W&lhm2K83*p1M z?$X2K#-~9&1pKLJea1*BRY&+gJT(c?gFUms=L&<^HK{&)^L?=*_U5i%5w*V;=VQes znzJ#XI9&Tp@gK(UuRPG4&afMAuKB!iu*G1G0*!_FCK7FHQ5~!xv_*|h|-_2g%`|Cnm6_34R zss1+F_)1%!G@ob*&B8X22uwokh(?fl4=$>k60Z|+JB6w2MH(8I)Ze0RWS*P$QQ%u$oaNx2mYO(P{*Noli~5AA~A z0H0W}2}!tjHW?JNY`yY&EYzmOvfS@z_3C4nFTab8@wjk_88t-XFhjK&ShG+!_*m2KjcOCPT=2BKFDD_BQL8 znt^jV{C1j?TOS}FH*yi_Ney+j(NYce0E*$rpZ^S=|DhjQF8;*8xN*B0Fz+`=C1%F(O=dhUCuJ*4Hfb0F);B^Ur4QM zlzqgO!=Bxqv)RH2JmELpGz2<-^c$3}u>3`M6bZkCpbDa)b6FH6qI8D?rE6A0m!rIp z)AEw0!p)--a#sRZ5(nGK`$^u395UHI2}e~BO>zaZU3zSYljGEZ3S7~R$0`5XX}%mN zjqB-m1pd!BKoLk{b+I``2GI)^;fH{d1LOm8$H+3gLy%8+{23x~?FzlRgL;|BwJ>Kf ze2%T_e=fh*=F+w?f9=2IxVA=Hj1kfCfQHpR^Aho7F<+1vgY#A4nU@Ir zi>7GQuBy=fk%D@GG)=;|W+MoLA&GwWkJKEsf;Q?7)io(tOWFNmzfPI)ZS_nzNF)OZ zPoLj}m^m>T*7;3;jjK(_<aEB*}0j&Opu6=Res8Ht`6u zxuMfduRe^))FDTiqUoyCDRpy`o$$d=h&z1&d-V`A^iON|(^;VMIqoyG@}wMpw{N5x z^Oy&S>+|}x;LY@iJM;SbCh|+!`kijGeZzPaH_zO9Ua4oE(xbMpXpeUpre2*^#VLNm z#*A775F2C#hfUZ2P3!j)F>{A&`n<)06qgYH+w_*`qJ(hu;YB-AzWQ2cMSjX)`dKb9Sy* zZixJ2+iK2(pwJ4z z(Bt!Oo0Mm~`zNhu&aZd}({m~oJipb|F7V2&?NgR-DKb~w_cNW2>20>7l9@J`>y_;u zmt-Nqea8t`wCaKaZ#4uzDAQQ$L%V+}lBcEf2#!Hf`7Ew=em#~2ETG=wuTO>iqd z|0NyeH_1FcS>3lJ9w*%-P%+5gn$`z^OuhI>%J?`xk zaXy@)cLj|jpP&d1=5WC1PC#})rRq9SvwSu|pPac7)&6cL?TibA=ow~4*3PEvTI0u! zWTyTM&S2-|AiSd%u`A8C$MrBA6kV{*-A1F@u<&r{APste3k>LQFAbopU17tgKFk zkc6{*`}Xa7So>tiPbL=YrGu(DKB_1{;e;Y(2rS6SI7;$Rh3=0vX;f>s64wiaaPMGvNAWTcM# z&bgEh{5z<88tb5^%iwr9n>>*ElSdK>U-&*8GTeV-^K<+c8X0sR>*}cizZ)8QVZ#$C! zO{EP|{C+++b0Vl}rBlI@BEH`QGLwh?>HyK3oG8Mkx#1TINW&XTK}W}Rki1p`WqF^ z#sp;-KMaWCFPq+UmTT8uN-s&HwdRHWV4#+Ar1Nk1D054O&qfduXn_JrhxK_vKZVaN<@(oQ z6H%H(4lblejQ4uIjUDec+zCJK2&;s<$*!CGc{y~WQ0c(|hqzL1fukT(g*I{lmkp$c z)F6BY9=!Rwf-aboKU-{maw(rLQuea>X>sE;iSwj?5;|M<7oQM~Mi)Q3&UC8zny5_r zNPJlKpQMEB4y*YY|6CQ)%4uOQY+6B$E^yGPXQ@s+DpfESgnn6+X{BhDXl|w&ZybxB zYq0USPpRt23Pc>W{0HSm&;@Qsu-3#XlQGy5Q%7$WJMkpX=^>a230wnT3-qKK`e z1_mK?NFsrI&9ak*BifcDIudUoi5snjZOPyS^9@BD9%k5(XwM@R{zIU|piRk^wJ@c{ zzOFQ%y7i5a9gMphbtf4t@Ju!m{E{$kbOT-_$n*5nsc4XY--`Ymyzi*aZwYxY$&5IH zS_1?r1};SKhJVVRged-eb@G&{ERThb8DH;ec7m7lC2=zxz@3qgfE2qZ`4-d8`1*#NyYNo+ajgNHsK^pLNF_QePZ zfm51G5A2|1&pI~aAFm9nWCetYrE< zpGm$HROGsdNs<+SdJ)-#3eqh}G(_951teS=l5S|4<)Ft9dY?)fn!G_7eK7g*Juaik z+M=Yjsy}a@?oH_21_{&A(%|6d!A)Y0AN+2Omb=;%YVpuMOeouUkzbp#*)ofK+W%gUpP8^ykJ=`cySX!XN zSrMPpEg-R_6C8s+(IJfNq2C$9i7mUbsIq$ zj50LaigpZ&iXwUFcSi7N7aPN3ar{)zciTxTRd1Ih*KOxHoAOwlYrzT0K)NG@8uF=G zMFpuyu zso3+hOwpV7;+&A$mpIx&=^V+aMS@zl7BiZXgXaj#8I%XeXpI7ihXVL+93Q?vYIpZ% z2H>hOXsCr}J-?CF-AtJooAi2A>{gHQ8;kkPeMOS{QZMuZy*dF1!Nk4ap2y2xqnFk4i5@pUrU z+H{|euj$6|RSUgWWK}V|nE7-MF?3|OwFR?>ehbVOyP*7un`fN?5(P zR;#xTHxTpY=J*a^CyAbX~CARBh7O=EW&Y zXI3cUA57V@^_KUvoD6zxny0A>Xu22OC-BVgiJy<>+%hQpg1>}!dTCx1)(R&aG&z%4 zdtzl>l3w#(=Gt;Wk--Bx@Z1wgWc>MS7QGXYeSgsupPyE#B-iTZRH3+Ar<_Xh7)BWB=vm$-C7<(s3(?~| z5^F^|`;>BugevG+-cR-n$>n}8%k?9kB;w{H_@UM-bf>T!A6%q-sVhQk67jx}y8~9W z%j@=jP8@<4ci-~)khkFa>e6*YuHW(nk?Wof7U>H&6}i4yUAVc(#jSZgklk>uPu=i3 z6R@Gq1%rqyX`}OY?K3Yqc`uYJ+0tUjpP%xB>JcVgXA__xB0wepPCHb~U*Uf* z5c_SkcqCSPLWjgXm};-p5OCIS^Cit25KnUY(~&` zvy)lt&z!W}w&#kiZCcBEHr=03&(E^#;b`f{weSjZlB8V+r5_)emUpS_zmZ@QnIVPf zf!%u(&wj3?=QevKnRrc-r7J=^ZFCeKVnmv z-}wINa(&|~=Ia{+0^2R+y}kNrV0hjiO!SpT!`I8zjURmzBi6cFM@;wDGi#FLbK`^E z^!lP_FJYzMxbAt|$@a!|L{%~38=p`JyK!08=xloaJ83 zh3vIA+{X2kTI1O7Ex1*8R;ARIS1;9lfxM&oko!m+Q~||K72wh>BY5n0R(vD7@HDaN zt!zHs=%*UPY$e-N>IKnyIk#VeKVGmSf%Tg!46#uWfH0k>KP;8opzVs0l(m6LmUXF(8oAA z+Rm~|xu}#=T7MPy>b=Etxx1S*&$D3yLBzg#4@kc|o$U8G3xT9t@$ZY^EIo`jb=N62 zT8rAeAuTG0oq0SSMXD>rk`rOv@^ z+%|7~qyHX~GGUQBac_r6hG&J}7fErp>!t1XNPOL^6UXIVl%alTc1vF8JP9G#MS@e( z9Vlgv_Bp*$gTZ6JlO`-BL`^d%y-aeBJ|DSy|JW+DlI^20K6h&e&;`fHJJ69zq-bl3 zPzry-c;9Ta@~Vme4p>h0L^*(}w1L&^u2*4Y9*P`wng@RxhyvW!4S(1RFh@ z|3)i!I`@_vcfFp|WPf*3Z?R$9cz=$jl zS_!LypzAE%Jai2G!dQk!z02)7_&cb5V956D9y0mGep(bbeb?QVmHA+v-ne@0_Ub>m z$nJnEiYjeQgAO3H$~aU4rzd|8?HS;CeiWRk`G&4dYRAU1{92oA4)Ru+$@TT5bX!uH zTk#H-py#8`o=bfi_#%HtF=b-8kEeE=RG4^f$*IJxiCdPqktX%6;ceH>$qRcA$|U$# zZa64T5B|pNKTXpBlI9Io;W{l|W1 zB+W&+*qJ3p>d0RAohGj@gk<4)vd)jsQ=|fGX|W~w}QhsF(dA_mabxWC<8GYGK z9G8vRs=IvZ^SNH7(?8F34Fu1lQKLJsVFgqExvLe-p8B1|Ppj-lwU_yP`C5H?)-2H} zjwEN7wPo?PHBM?5NtEplk|M{8B&Z*BI|b!j{ zzOFB-Km(bK#3k>*$@3a=`fhA3kw<@LMECn~f4jE%^l?An`;Go#a$FpjoZ!uG`@vZ- z_a2xioF?|;)hZ7{z`wF~yq8_>AxpC-ISn;XxovOXz}5{dPzAS8~9kiYrNzZ(R< zZVMsK_}iq?F_JnWA^s_k{Z8ub@vq$NsTLl<8K4~yDD$qE z-t(PO`*ra&Km!DKR~xUD^OKAZ=)xF-^xz(#AQX>SJGJynHZS~|fZl~K;tOH`PC70W zp~FA-TeIhNif@PouPGGOO746q`v7`F{T_TgFVgdLpbwi*soxE~3*oB|N7G?LYsR^b z^g3!b+WT6{*tv1@RM0USu86x497+-;9TlR<-lQcB@#uyXw3Rg4hF8#kDE2g8#2U6Y zpCCVdK08skT9?Vpmqc+erbxR$bk~8;lzhA2c_@~uWMlt`@*Tyhjab;1*eCh^Z=Z04 z4*N5NBd8TnQRYS4kZ3kaFigo&1x2zn)zp#5E}NiamQ`6Wc+L=Y4OFaeupb3VKu51$ zmI%O_h6KNfa2)%1(h85@IvTY{K4Jpi@Z8osspg*(anG)Ito6}3%=YE3wFvio@@vB$ zhQW)Y69v18MJ)Uhz>m%o3MTF)?Ek{^7D@3Z$Xy|Bd9!p~RXM#-Ew!9E-(2_Rg}mlA zr{P(OB2H$FvRIyGGYYyOP<0YylYboZD&G4>hV(CuJj0Bp9p1!#J8k#l31PF_xZ~IC zz%2HZ$}pZdsCCv4jVOinf>c%@egEGJu!o+}SRzS*^>IZ8I>=j5{ex~u>zz&hKUQhg zg5Hv(88N&2M`7%I^n zAtqF-knx``F>S&?*6HjG4=82M7u^F^R-F%zNlO$1%a5mfm7w< z2;b2r-vjZeQn-QJ6I>r+$*_mAQCaMJ=~b%pD(;?J_VG+EPxU1?p@SMGgmr;R_zZM! zD249=V03NYfN-DfEH{~BNA9FDbADCIb@#1g&3i6SL)QvvJd35xKdOXGQI1L-s>(Ft zNkMnOBzj2RBe<-liS-c6bF9}q;uW>j=`#+6!NDAfgLAT0qRFQJ#$m#=1534L2|Gn@LBw=m37McZoS zc}r?9mWNSR7$Z#C2v7OsQ6e{YRx9S4a_a=qi`#6p?=03g%5|age#r%lLSC{+F?MPK z5fnr0X+bXg9EMH#mQu+yV)>No6VEYaDTl* z(YlEiOZg$>uTImgL&C2)MG-ULY;t_-$(|h+`(vUcwpx>v_L4uE#baUDNm^lW%0Cdu z(q)en1XUDzSXOX~44Kbh=TG$+ST8)#Uf9$;g(~*`Nm`?T6=OjgVR^&N+M4fXF;q6` zu_2hsBNZHx4mDMJaG)n=4C5v{Fs^@Qn?hd~oP7}+H-G3t($W>p00FQjn+C5-reYbY zDHskK)}jlqVMwZi+VAWS*V!z{cpvoHA@;!%VKYdXUz{GF4Saiw9MRAq=3yoICu`fC zIV`*CkAU2HMX5@7{7r}yrsFAk(7P+rPKeG0+w%a>%6wRDW;ZUMUBX?Sy`tM<^abQH zW@deLFRpFQzYDhl1$}Lw-Fxe$bgCb`^&E$I>K-|NVzVFv@jxGc_92r<)2&|^esqJ~gY*n*nJT6sc&7$iyp5hRmad%n1t48}7&$0gKW`$?+xhElJf6&vwtM{VT8qz3{f zH5P7w3EpwywpP&SH=r^6qE>vvVEC4@%Hjy%Le$Cs7JQ=6Z8zx z!sfNs*l#7ZV6}@Atv0TuTlropv)+WhRv=0?0GD*HxgpG;`bVcrf+{*<(e}ANr5M;( z5&jo6XgGXp%|P{PWvOs^Z=HNi?EB67yp(D=$#ymW6h9H|0zlG>jGP&7;3uFPDAB8m z7&c7!qB8i-n^g7(_VkH=pL^~$ydYaW^vOd9!8J!vV4M7%jHtj2M3IrK+3x$OGh5Zxt$N7zZ6X_xN|+SSgEU(SF!#HUItpBHAF zxqods)t8}@Eq6OvP~--cZV1H8C*-s$KJv76&v~Z~83!Q%q$PnA@l(JvjE?QQ`D#qv z6x2i~o{B6w)DqKkHKk6B2wbcA;c=?3Fb&=#Y3iOh3uO6Uf7>KyL;H+b{uS>Li$Jk~ zpkmkgc%(}YG9ZYPF7OS1 z6vsQBVX}REdt9U237yGHVAoHkIanQviD7@~^pZ8+-EI4&hHV(3>)2y`HEEBNGq0zr zkgy~W6$DLXG|#us=s(eytC)H9LmL>zr=;-Dh?!os?z-9F$8YELhYW8g$BuS0Z!n#B zaE~w)*+p_~hShp`d7)olA}tm!o`%JBb&WV|{E4FLhLd}9TY7SovVClqmh1M>+wak2!=4wy9?{fDcJaBWHBF_4YRPZs$LxWC zjFrt?WTX2=@LWh0ZAi#0f>&?G&Eg%a!ae22mX_)BgX(^??8aAN-I53Eq5VU9RB06X zOzZL@(o9L7Dc#3Nu&IW4G4Z}tA;*Xn{}(WV$rfuipJHH9wRJDr1Tn}{!#6y_%u0}8 zvu>ch*l<0az%7TT9>|OE-$3zVET7T55_n!J zXrO2)hAlgqsmMCqauhCNEl%8k`UgXN@SOF6I=j$yA-ILOsqp7J?G3JyvD)nyYg*YA z;FR_fE1}aE6tZ1$KZIvNkDr8IY|_w0Gj?&#VA9c0Pp_{_Li9A z!t#oU>35w39OW2n;{OsuA#6W+H>ei@IdFc0-HXQf{J)Rn58gjbkl2ssp?}fvk5IPh zUg#nEb8!U|e|ZVBL-=PeZX{O+WG}qFZq65n2lv(!WBcHl`s~Iti?QkP{KL?m;23oJ z+&AW53o|2|(X>~&Xz`hv(wwXhFXD9FiZ0zihAi9BHxp8E91iU)YK(cWc>nIOvVYfaMhlztH|g7cd)Ge8^$Xm=!E(Su?xlQ{B4o%A&z&f@6#1F zqXL>1Rd-o&A{jHYyPFTEd(T-7+`}%*TVXIVY z=oVC3*v3)nWxaK~6h@OH(|^#(1`#?ZAPMMdr_kKf=)xvFfw4CPj8Z*3bM5%VLm=D#O)*&jb+5Beq_(Q%hH0h8c* z^{9HgL!}@TjN!4|-Ut(^(#$qz`7mF>f7o*ecP(*1ukoa!8$6vNrNp>{KFLfVv1Vk} z62?;)jDE7$FE9`1I^tx)kl4%58tlI1MBPQ6wp?X|cq3bBcUqOYSZhkHRi>OtD`!)} z4q*4zgQ#lAwZM$PC5V3LSPxZpp7isZe<8dt1^1+#=@HaFBu3`r<7d)K!^JmGBWD%1 zO2)gcnB+SPB~jQ9i(0~%6*9wuy^c@L^gNrAcTTM$rxATGa1u>YJ)ag>C^N?$Y>0+J zQOvJ#WTjGTzqWbXOiR;EX4LO?%%py-&K*(K>@zKX2GJ=O`sUs!Dk=%N1i8>3*%%3$ zZxlv+PZb}8t=4XBM)(WJ8P3FXO!_2+AiJEx%FR1~y=Mj+v?D+Uu~J(34b z+RLBha@lOVcJ5H0J!SIg-fBM>_p)kB%bgvF{Yl1G+}#H>ML@Fv%rPem)GoSEIP@fp z7yL4Z;J<$a5;6ERbko&uSRp4+GO3eRGrI>e1TuhDq&VUU7shP>b<#Bz}`fY zwVX^kRuUc<-I9~0VH@bK!t1hSi8^PSGOsJPm^5Ka(~}q+=OVoF?8ind z|I@X5vL3kER)+WiO0ia4vWiH?2)u}J-^;a9L#la$1lX(1<-r)pE3#FOPG z&ruhfS(lI4q-YLCGgN~SN2fT-00o@frG%m*?-DF)G4>nb)=X(=flV zyD#0P)&h&BkuOb3+lU*CHc`7L#xeo~G|VKR9~V8{eh#IrJ((}2B%ns^`EM)R{vkG$ zGa}yS@*d4T4P=!hE}R}AE#rdYFuUp(t>8tczt1F^iL*Pk5-)nq=x=((g4tG62=653 zTyOpq(m>-CVP?^_wn4A+B#L{XZct3d%gp)zsfl{usrL7Z^O+mXM>Fg@*D0ms=bQ$< z1vFtfPHN5$*(S!5-YSQL+_Gu5h8c(1(;t4#@FQ`aMzytklIlavNFsE26lD|f!}VkC1j z=9w#Zu_jpnC?NOc{idn$_sUdYO`pVx4xg>bzCJ#dSDqVJ+Nq6Lny!@9v%WsmQhJy| zvRx3TAZfHIaF^S^s7fLU9>5iaU<`z)F-L9N`k%C7X^4XR$>HShK=wndU8}_Y5%l`4 zt=uhYV?Y+NCRvtItx4d-7eCJI^;sS63@_{yTTc{k+(7*cWDf1Ui4ZGmivYh3vMD4^7j)e;93?3wCC4&&ls74Y!`rqa>ZYKorYTz{%mo*I=gry{AVM>D ziuT1HFLZjC4Wfs}>j?kkC{Z)bw<;#bxj_Dgg*zt-7(bf)No8>tFh0;m&N@ zGnJT}EQi62(3Se51EOMNseM1j{Fnr?2AMg0mL6%ULnO%uyz8TO#kn> zF`|Wn5}PVzJz3={&CcH5r}Cm+h^H4kpV~}T{P`jwKbSdUZfZj{3Cj@yl1QQwSsIb4 zsHMvHgCf7G%6sQD6gXHI)b;&ttyQ~S-b@(63twOLqX>`Wy;<}84WUt zr5>RCQyb0)a%VA`@4g8U!69290gWnsYg(uZ{f#+U7Y^~4X;(Nt)h2RNPEF6`nZ>Mc zf{e6K9PG))PWbOh%GA%|e9!X!C8R!LmO~yc_t^fhH1!N)KPv7HFB@@H-x+ds-B7Z< z@R&|yn*35)7=9CRF^O8IQzYak;jZGl-UyQXBA_$G0#ol2_QYspwW}{)rIKnJ8Ew~k z=4<=9x9z0-lF*#-Gp`jWNjL~Kl!z$tG~*?M7My0xvPlG-P(oqbL?=&V5twUt zi;Db(ZJR@Xo3-3|j8e_w*x->69-*$Kh5JSF2rSmfHp`AfXyZuN{EP^Ulg zaF?O%-<-!XXg-P~R_uQqbQUE4x^1rDB&Z=Vmbkba-n10k5G@nrSE6Dh;U~33&W2md z&}2!|9Y+)$`z^jY7?Mnt&lelYE5)Jel*j*=QW?G!(lvLHogb3@LTyvZ<~B#MRh`5I zpAZc{@~pt&401%DXstBKjG|ts|19F~DDrPO3k2k#6ygTYNAMxTo=4NCLv`kgHF4dw zwojcwb2zsr1xxpLO@e*2MB)s4q)F21AqfR;(B%Jdxta3>Go1B!!=>k}3@ItmC71e6;=YnWj1kdfH~%M~0S zl4F<#XE+8Fq==FvQxR-*lT}Gd>N{56_3?E+I6L2lO6B_adeS=Nx6nf|G>`Ncq$iU{ zH!FJDB`OIYuvPK$iW%EDc`c<+hL$jV9T=Q8&mOG3@4MJ|B zug~0nN&)>vvq^SV-(>t>5gRN+is*YH+>~fwF!*2SCy|j3Y&`M@KE7roiaZ+Ji^-y| zV$-8m48YxjgAtdzIPfgNK>#DzG zf+C8Fd|xmx4A1y3+0r`gT<1B>S4W0CHTus3k4rBswh>bslPnYI(p|@E3hKNd@Cuso z(ptHyJBc+mvxl`iwPAHk7x=bS#C#c`@4Jmc=G7x9b%K2~20;zAVpw1r9s^MB_$5um zsu3c7f=|*632?D#0=mYSKae+_lyt$7kw$F@hGhvdFFGcCa=L8myrJ`|BXExThF&^Z zGvFE^Xb?U;qCHS6%5Z$*JgqxzxL$6i@~M5vDf7j=l2tv9os#ezNkONG5WRm3P)VYi zKgd9@u1uPM{@b7!_)8)f2L8sCNhnJKQ0Td{HcM3Or%A>gSq(w0r`mh9(M{Heh*Z!L ze7uEOh^ObGv1Cn@$jM%Wbv41r38BvzG|NbYQHL^U?fi z)A-(^`!%MP$QZ~1`~`7k$poMJ+rwhXYxA|STearp%*g4eSYmzH8?Rx5bILeKUV zOOaZRaMC{@)rcO-1WdwZa8eOS`VY)|#3&We7ZM_Hrrn5tXEN7MC$b^py3lmBmrV2j z;rW zc4E@}-XOl~1-ei(K5kT}Fre#pr~cg8%=Bgdwbjq+s$>@C1Jx_HXbMvR^m>IPl6yEK z_e$%JJX#`{?l~qPKK8$poP=Tq^AKOGS0d&T)4b z6g*|0dmT)5t(SHrkpZs{=hVH)L(gCAqr@3V>kH5sN1_bw)=pnJgyqy-Y$hz<03CiN z?%F+L-+=k?hyr|MSx{pimVUxBr-ZZHo+K9Z8~y)0;#NPI133^uG6%Z_rhj%$(rcC* zJ5~lCGIq>$?0>A_8X;Vx*Z!ri@z3$Y8ljrmoYeID8!9nYX5&bmr@=i$7L2uHxsHQ((rKkzI`KqbUP3$z zX)$NFS!;bjIP6H2;`FeynM_RZ)59qhz09WS{F1f98_u6zIGdSC$h1x`Tnr|2L!X>q zL-T5rl5U;u^UN7x89BSp1Gk754uokKvA$AX(^hsi=}rpMggsWCw(ViRY`n4^l8Rjz zETQi|GuvUelbXuF+4z>Izp)wq!lEDSloY4{Ziel8KHMhjPOUSp9P_hbZ>Vd-TKX}5B}OCrgKVYYT`J&$I_*hna&;gVPl<-~)P z-K>{l;L+AeVR1yAUuB2|jl;sRoMjK5oC@LRpGgw@V)7DO%5QiNNWB2j4g%-v^dM&@ z_;X1<^_>RpsK#@7wVHpG_aZl#rq_rL?lS7wqkf<8hlNJqt%=YOABL0%UGBa%4{yl- zFEB5mocltH9Wz9Vo^h6n)#{ExPG>izQM0H!^Wu8hiA&am#smq_J9lP)Y6GdY0gui_tbwTdKF1|^r_FtvMO@O zb`?dkEt-z4CQV0nRMf*LvLm2Nfh3xO4*xq(j++MJg(ja2x5c}%d?C1NeKMKTOgn*T z5O`9OlBYL&`%*VMP3H8YlGEHnbNob8Wfowcn*&X7)d{5e&v_UdwJg*@te{$hn%9A| zk{;*v12S=Ge060L|07W!AZuHr5n)7O5QOQs1PI@1=EH_D{n2zmO&06hGdK1>9{Kmb zjEQ894G!*0Q}>BqK%b&1ATI}ulFcV|+tLiw8i@iT6{?MR1_rI;)Roi?-V|h{?*qp3 zJjO214&(lE?>bBy1b?#M6Ez?1;&1Bc6hl>s|FAQkty#f&^m!7@SsxbETu_2LSFYh& z)J+hmp@BOm1z6w2_IdvkU*oF;?u;^rg!$H*_1pSo$ zh_`QX*23F2?49-X4NL}i^Krbe)V-dun+?>%;-yvSan*S#H=xyZTlG(P$w0 zf$Ks;yowgwepC>N)8Y=v|F;lKs`ol>+gui1ewK9`PGcBFxqXAs|H#XrIC7ol+_~J%8`wWfDRH1T=$(X{s2#3VX@dTqG7w1(^iSN#7DA z`5@sUT#o;XbT*Jsv#b7c6zDB%9kO^k4aNJ*kUXK#TL%6jj9fV_!PCWH0X_`ar}Pu{ zjloBeOIR`FFG8h@f$o{ox$;U81?~SxavS~8^k-gPbj+(OYvJ+|$j%vH;kz&j{}NlQ zl2ELfc?BV;S5Z|&FW#DElZq-L7oLO^*;It7PuH7YQ$y{^p%)i~m@xzsLO-1H*rmrC#5ofexGG1Ga(VYSb#U;5r?A%--z0v;ct{N=Mv;Fe4Fr$})^%uRyWSN})Bm3=XfrZ;ybgPW+gVF2J?avR`v)7Ys zQh$L#V3>=atZ9&m3`qSd_2%5XVe8tv(+5n{>W5vSbm%W%GHKg-dRcEpy+7&Lt6qo3 z$QJqv2B1yOg90Z=2y9&1bUbn4k)jDz;Tf}e6NFw9oCfC;nmA|gQ8P}X&?C4}kdzBO z>%a8eY#z)ubXV}^&KlknQ11u#u`Z4m_Hy{?r!wcToh3DzZ)-VXQdVtn>mmdLTMx{6 z7H?ZQf9u=@eyUb2 zPlluCv5-5%(=UveF1h;K7HhJ~ej)6-S4tpx)|L6TI`+mea6(jcGs6o1 z8J85Qt$BeHWm3;VI41F9lAI`+;Nh1oEh(8vJBg0&rXnF}9Y+8OyK(4}GQc`x5zFcQ zSdG1%qF*s`TFKpyT;O|{fj7vrJsQagoFYKaLdF_(lmy8Wn~ncPr`!pO#e?HLFm$N_ z2iFFi8=+A~(ZUxB^o%9@mKV7S&I~f8;T4pW8@7LutuC*BXl8{?S4r6V>KP8nVOBY; zr(63qSY3FHe(z^=m9i?#)3Z*+KW&jI_I>f!b0er6rLaa#hD0-zes*r&I<N0Z zBmcaNaGxSkk+*;9ECSL$o)mN;yH!alj&4aB7_N9lGYMG!|t}YIIMPM z&NsQ%Ch5Q;AockL_*5yEQ+m)G9^UeQL;_l|4lHzOk!ja5Z*zEBVyWw@q{$^sjeL5)pa zIlfeU{83A0#uK+~7HQs}no)`B}4QhXAxWj1!FpU+olOCtIxQ30%{twh4tXU8-} zA)6SXQQ~0qK|WJ(y}&yPh5^DM-~=rUSZe4gxej4$`tGwm4m~l=13KH-lQCr{LH!=n zyL1G1b6zkJY>1!H6ktFDK^(2iBSm?FYUmEf@rGh^0++N!P_Y_4IHc$yeZr>cXrv^JKt_*2mQ6|uudn0Q^^L3E;`$=$CXsS~>-yf@dN;05 z+#7F!Rd;=>e~~)G&xVaWr5o>{L=x9;ncNrzo#^ZLu24O`ncW!4>IQb+0=v-l*LmC7 z-HX@XxS8!%`uT5RmNF zV-Y|nRT*De2zS)-cV8G$`i-3GmvS$kJ{vYd)Bp2cfcbC@>=!M8@^|7%Us-6YVkK&N_usG7(jiZ=*veVXZZN=4sTh?LLF~mmI<3 zB$cyO&PsxVz!41Dgm1_;9l z9~FO91aFL1jqu-)&ZL`RX4RvF$R*#6E7v*fFS^;9n(z^@OWVr zEGgVzk#ZJn1g6u`f?^j~se{s|@kFJDZT+<&VdyZ9R&0{HKRe;rJHPa_6>mH|% z432YZms=q95nz2IaZJKqYa5`cuu=4&;b5$T+#0qQA$2A(#^H`6$39?4fzUrrH=qRD zCzXFIXEc(yg}5gJ+Q^BA3-D(7z_G<(x|8YZ;vxcEXLmBW9}kX&K3a&qy1jbel#4l2 z>pCy(n!RPos6GavZ}P_c2$+{sl^#^qSLO$c;GS3V+s+x_q=HKcdn0Jya7Tty#85x( z;_E}UyO$0~cit_JqgSqJS@E?cu}va)F^gk`lY6FZR1mg8+k_dwUsx1(G|x8$JkT;e zI48gvrs_1k?ab^VpGXOn(ynBg%XKHEa@y;;B*O(vEc~0G;_!@8#*<<5HA!YUO4wb4 zG@5S;XpmHM)4XRn?}4)M!DdLmRHlu^NX#hXRLarfQmcWsSE*vM>N4+(IW=97nffOw z9^?g5RB{D0W~QV)=Pq;L<_vC2A`DHa;lR%VSTCxRsE^n8 z;E|rxAa`>OsHAq^h8(3RVv~HlyRNDLE=Kn=Qn+bP3tcrVMY4isKc} z8OSTK%y;P9h<}ABbTXVjIEtLF(8=#M*I?yga8gsVqt82|%2VP+eI07YV_ut;hpANF z<_FA_Kg~m6%U{n$5@l7V(|>3eesm`8Ymi@WWrG>GH+PAtt26>3aL-$z|f;5 z4TNYFN0C(x{m8+o{f7VW6iOvSBym|7fh0lJH)qK37IV*~d>o`c9mN_)2yfei5_%OI{*c{aOCY1){*Pu4< z28;4v1UQLUVi3IYhyU}5ZA-3*!sQinu?R1bJ5GO$2dsnuv*ZUsPp=HZqNi6zuFzLR z{tmt(a*56=yN|ku@gB%F>5vzEKbz-PvMxS#q~l`ov~T9t?N&LjSnWzVKVcz2@*J~w zZp<^3EIC~gsuUcuXt#q;>DPRRY!DIme;iIn5YDtdZ-c#e`7lHL_*3t?nwWc+92K zPhE+fNeN=?aC1}dz>~n(GenuEylbh=9sv$Q4n#I*TI@^pd@a++{W6LsqED!riTuqg zG;bqvMWlrLLFo&b=#viey$R$Zar*_r>hHHJdyRyf;G#btPtQ|tDVM#K?mav8Rhk4=|~ypB^?FTHg9USprO%-U}$f}j?Q$y@Q|dlKs@j`Oh+a|cnHBK z?U|5U!(bJiR&C66_C-~8rPRxAS2Z{LeaBOezTpm7gL0J{(4uJ`i1mqTK(z{JV*Zm` zz~75E6g}~mliwaY;t%={U;CqaO8Fy@v|vjR9fKOVUYXtPWawHLac3N>wS_Cmn9!Ub`{RNfae< z)L2cT#GA67eS8hwu~W%5|98%DMD?F$ilJ31>~fl%ttr!Ixl~F_?a95B16 z;UrX-!uua2%#>Zrn%JZqf@CH5&P_c=vwG-R*e|nhW^g{FWX1oeWfILy;CWyI?t!~z zZ9gI&v;qCqr7cTKlB3k0^g^+jq5r*=7-|N;V)~KL}6SX5v5HxyFEo-q)^H<^jx8rsrWlfIFpp2I2c>h zDTVSSvhV_L>d(yMy|V`So!@y5!_CM?>teZdwpFoLHIJ=UzL;1V_0a+swW){v#0 z1X4z4@Q!{1(Is{LspzyrcBG$x8FmnOP9sj%pHg*y*)q9DB@(freJNo+lyIwJSO1NC zcFLm;_X?B!Zp%9iT3!}8?aN8IH*%)!W^&-{tMbLPuwEQ@CI*3gk_E&otp4C9=B4^} zc2>hNUp;o$B2EzmQyqydhhnHi%>#WpaLQ->2x)pzB`LN+K2$b0!#NlTn{)~X8 z=qC`L%m<+40xLlRU+G6aKd>(TwvGKmO8`H`KSnY!Pgb|p#P+GeWnIMQo&9F_YUIYw zPVjtRcc9|I)U|d=Gss(79{x;h(~xsSUTG_hpMafxQ4neVj~HBkkrtxXk0P#edO_9m zlFMf|li5yQ?7eN*s<)Y?N>Z{_#94+PsQKAl+67>YxBBG#=tVBL{fu-qs5$2 zK?RY9S*gHOD`l!48em1Hhy#!G=HFl2d^36 zNk9hzUa~CI9GEKleHgaDJDg=&7V0}q(+VSo#*w<>1ATY*I3GG+$mkxB!iTshP88mn zWla+HcLr-<7?U6F&HwP3Fz^?MR(b&ftnNL{{h8QSf}RYFg82;2kabRQJd;(8dwf{o`@*QI*UfjvOtUJG=)}V`7L8eL%H&b`hrSuVryb@Dl{k;8yJ`vuA zJBE)N}rdSH7tt`t%Dyj*(SWyriLp0F;0w*5`D;WU$(bTbxF6=9Z zwAML+O6Mgbd+o!tKijmbl~lH|66C}tQL-yuJ5&Mp=OswSc)Xe$iIHmtwHP0sn>*VT zIT8Q1b9LJ3-dF+%LNSo(tU39e$&XTHt&x9SCZ3mt)Mzm&N?Iow7!TpAP)1JDFrdfz zM-3gF&kItM615>B)-UA7gOak*{t+doAl)VH&}nehe-q_C{oopEvM&$p;;7pG$ifN6 z{vqe=PplK)|De{z%uBJg6%HxQC<#wWNz17(Xg_zQqWpmcF`jE+WfIuI=E(XzQ1jwr zzR9u9s} zJ6dFLDw__TfC-YCkQVO+*g=FC9EK3~mI3|iUtl?RCnqX!Ug1EJktBg@lo6PsW$~ON zCk;~+EzTCKq~vIZVp^P@WkB{q+$k0D`?&e5%7GSiHY8#W@K&S`N(qaF2D{o%N5`vr_tIBSfwmU>{EDuTD|-#_@C*Q)6Abw zg0^Vq`>n0HbY>~1HqH&Yt|=({Wv3p|@PwS^!9$H3j3vlC^7~+To~8YY=vfGn4~V^U#X{Z?Ji#&xPuo)5<`XE zJIu@nv~wKbI0!AlpoW1WM-S-|;wuDdU)YgTil>IF`3zu!asl102dE}Pk{%`vEPa#t z?p=*Szqd>ttdZ{xfc>~$xg0pinTNJJ(PJr`tH91o|M=H-Gg%O}p5c7s*))3m6Hqf) z#bSF|?DvJ2nv|Z%yXGRA7alnx~NHl8m?&g?&z`dW=-E6$!^C(vpN~ECK(ywL2NFVN_z5`d zoUuTWde?|Z=O`ht4fBJXcO24I5eaSNahz^op$w^MLfSS{RsNo3l74uiqsYyys?#K| z`GS03{gBU_geWvr(Jdq?;QS-PNWe)H3LKnXoP}nOj-VS*>#~JJFON0 z&P+mYV?3Y$2u^-`^?)cTk`Cd6+S=?>W+6ZLU44C;XQuOqm8Wv8x9%+~yd~J~sv95W zS4yt4*|Y4Y+jAAJk?Z+VXiZpS_qzC1ul;Hbtr3at7xyBCL~1&s_5A59G}d2hiO z?77dc5`S!;vT%N4Gho8q?d1#A=DH%d%lX2n4UJK`UA30`#r|~o^nXz((bvd{tj#h? z?FkwFJ>)(sy5AqkGx=om2ccy6P@zl-oB5<%u#jAF(Fcw#!rc(lw~ug7k+yOp@CGVurrxD_#4&PE){@fFH&sz(o>Z=?KKY5vtv zKa=e<03qTGIx6BD-5D7jejwN$>ZD7&lqrk~TsM)lgG49P;?fW*{eS3QI5l9yoOx8x z9{>rf#5)caFhUr9iG7B?f&Tw{3OI7>r)8TCkqsAq^FQ5#!erWBt+2N&$Oh#fIK83H zvkUG5+4g9LVbiJx3V6p^bl3GvtDN4MUDSDQm-(z?$45f*%IZ{XQlm@n1rZ^M-YR1mI)|@yS#W#rsKQv^LAU9H+u`tUS?mlmE1?4AJSuhOdER` z9ncmNl#IeLYQfTUR|jfn2sneD2|LM>B+4AUFvxaEq5463sp07#q~gQ2a`bU30=}OA znAEeEJVf3>mcUgiz#ADW_kYVLvID-z+(58oTD`r=7KY->h9B_FdO6EwOIfb=+EMd9 zEACsMhx+{n@LZIO@ngV$P4a)`iMU=C*OEz7+!(<-_{4<$as*=bc?GaBlgC}DTD9s|5 zNc4`mXo%$C#5)B)p#OT79AFL+kzF9~i=FS@b>Lin)h$=$)oKc&9&AvNUpW1dLG}*P z7GnQny7XV}zi{$g&%v7(iMlEpk|ue$OmMVS4M8+*bo#MywzVxw=S@kp71dBQ%|uTf z-7&1B0QM`2dn2D|zgoriNXYi*$HBCg>`k9`^K5y1A9sIw+`wLx=m9A3-TbGq|NKHa zpZ4!N7v~G+T+GpQg$X&GFupWOar5DLC%+6!Mn79hC2AS8SWNU!)~cy5)*C`S;Lg|v zB3&~4fC(>2jsr;r5n;N6&?jQeR<`=uq7=&bXRgs;^z39?|7Wb*jKRu4HXRy{vjp-1 z5@|lLBG_nJ7!BP^SRNWm&rf0>8Sm#EJ3oDdT`FShHTzUZgL^h-bs8miRTsTk_UVO{ zE->YD8e_OWT;U4eCCS|r&_9o4Xk^$#dES#4~kKN)AjpJ!vj8152XYftJHHX6785L*C zh4&KT`(ZVXZ~J6s1|8w&4zp-(3Ze)28Opr9$n}Gd@$W zOb~zjnPcD~NM@!73%^GLc1UkQxRe1axRj9wFo9+pj8_W; zO~`=005JO{QxqnS_1Ke+J}F>(oZ^qiA^qbb)&V;*OnTwbM9$O;mqkvO32~$HSGnhwV|jRcDX$rC-+WsC~MC>uG>lX*43f-yp3*} zKI*=*xPiO`hIpbZe5V&tvM@~iH1e+^|53H^Ys|#C`tT9`BfyeQMslf&IZjS@v_`d% zd>*g2cDlN(WF{}JfThk zY-&iGCSAV^NUYiEhgfk2eNA)eR`zm(_2yBHjp)h(&9dH4D9RLyXJ^!?Wr3l6D9cvm zIh4#LWl}m}i?S{o==Q>MvZm{b4x3rCG)_ozCYWOJ7ii*=rgo+$NJ+v2%@^_=F`Jdk zOzc^syR)C{7bjU1lbxyB9=BI=_PB{Vr&M(Gw(;fj28=uh1|3$@qp=R2U&Ha!Li=~& zdM1(s_m2P*Dv?gh>v#BGtF2B_gYvF8tv3$&X(h2$&*8MEBuUMFSa?)CaoW6eiObOb zSoZ-(daYR~B90G}4ci(q6(Cpd`b-MNhn)XKm|Zd&X-QDJpgFZn4K$pR zAWNofL)9XS+_42y78FG7;nGkfQ9O^xLk^krI-&T+r&633-K?VeJsBsyx$kwOK~M2(flbQYE(>{ZeqK7D%AG1`C2PE8+D7e zd^NE%9h}lmh;|6IE{_V!GvBrB`{#V$b&4olB9)JeDe=aUhE7yVP&XIaw|qnee_8d? zVg5BLH!c*T_HX2dnP9G+L_K=Q3*#=COT_v0tl0%~#@&IFnRKVVyn% zS=40W&LJD6f5N2(0yz=Wnlcn*vWhTTL`GVu6ODnQm5HD3de=!tk70!(f;a31I3!$o zhu@5~Kv04o@mGdd^ipajn}+)WPKxZr%k8f0`%B(^ON zR!cO_`zeq=D&xNr=$EqY0}7j%K}p4Z&JVPllJ9DcJ5-(^9e>egc=qMYw8->@gS?KLz3$Ok7oLY3V<%Kr8E!C*q=B40 z7l0q`l2;Red>l%!>HFhr7Yh6~lpj?ip>u~0>T(*t|Ad^WmYcw0Q)Q4+Efa6f_(X2m zOlOz6KJ%JZVV$z2)UMyWJ3-9nc0<$fyhz!?!_x}+{@beNqto&0sh;~20N|N&rod}Y zrtzeygH*P??kd*y`9&VabDL4R71?a*1d@s|qK`-oagbvbVZ#IqCQeW%mq%d&cUx?3 z5Wc5VMGh%k7}zkxS1}Nr%#bOEo=R)f=6y&pWr87maRHou!e66`@aqu7d;leud#dz{ zyUmoG$O(%nP=yGR}To+j!6Ti+?yKt0< z@bqF41ld!?)BXR9%~5)}f*_ElA0~O{hiD<#K9VKas(kJc>ipay|07J>=E|Es>W@7&Y5v~X}_mKXYxc_>{Ukm>w zs$}n_c+xGPtv(HBTD@MgjG0+&t=*l}Z#_FhejIUY(KX;gVMCo$6CX_wFWH5X2r5T* z04ljZeiVa;K4RmatD5l9FN*tVyq~c2f5HLIq&<~Q#=HIarZey7mfo_XPYa38OT9IC zxwQ1d@%dtY15;I02&RFP`z=hrCf~mf#@BKk;)lRugz87Lt!1V?NSFCxs$2FF#f%Y8 zO|l(MxwL5}bDbTp1o(H(j;l(Nrkkl~*hn(IQ!&EnLwK?NK>~>`DB1m~sDSV1ziChr z$$U{}wwr~<^r43mzV?eEO-KCKNHcSPQ{4etOG3lOuK3kxE5`S5cI~`EjeWF6b|lFb zV}Bt*YmC4U$wTypY`xT{f)w{Mxw%+RnC^Nz%_l@NVGZj>B;|qXAM)eF9pP%qklzwb zp#A8SeQnu%_bI$yECf6#eg+#={M{!vEm~DBecaBwc27_C?6R}=S|$C`wF6lm&aDT` zyz98|OtL5u*320-RuaCm@Nwn!8AX3RO%~ch9_ZSHw3GI%8vQ zg1SxXFw>{5>D&K!3|q>_&c0=L|5dTa;Qq=T!$0+!1R2*kFeN|TYwHU4Ql5JiftRw1 z;F>Reb)arimr5R>ggTzP##2UrkdxVe3(qgg_P56OhUmI`V#YIosJKqYz0sh*LuX-U z*|%G-e0x;Mn{xO0>MRSUwasbOeUxbRbjt<41!&)+Ue9&D@Vy zeN28M4-+}QibRD8+jK!iNB9ZZ{fW{ZW}cv3i4EpiP@Ikl0k2Qar0f^Pyxz<;(`v$d zNwwy#V73nnRjpkLZ)Dt|5MQGU-nWPh`-Wr$peVXuljg|Fz8Turk{rPd63x(J0)1S) z=G5oj#2Hz7S?>*`VJluQuB+Cirwld9gNcpO6=-2_$UUsi(~x;4&3>q)NJ`nJa62-# zAev?Tf11G?{twg59~0{EsV}PL)3`q+Uj-rkyzp9T+lU&s^BJ=c2y4WdPEDeN^qGZ#JEPmy`=Ul( z{n;Xo33=!fq8BaE_#`jsJ9JcDMcxRDdR=(ljH-^&Y7_@jwccuRekULn&c|>=GvEqB zQ9>`+lPQ}aKQ0R4=OyslLV7Nd7$!D)h6k0!`h4sjpSEUUk`=s3EnSc%yl8HZd@GVt zMHBmx^n8>PnaD;^1BWz|JSw@bg-W*R%#uo>@|>0J zqtxo}_7lC3uAX7OAaq_2D}DE1fEJqciAHl89_>}mYFa>Q$q{FPmIUP^oX%8&!O!|I zA*T|g{spxx$YrJPp+)7CDGVhqtS8?4k#y9d)6q0Anlu^BSEk|e2YsqEQN;=cuOtA|TFrb;#u-1zW zDW_ecot+-LpE9eH2eBgW9WU%n@EiTs@H732;7_^sNi!XBCe>1II9@wauWn~;V^Js! z2F-WI*GhLOvT`aphq85uSi}JZ2#o{P~sH`lL#_LeJdVEnG!fBNc$QF>)Ir_ z{{t^V^!G$6wCJ06YnM`-y#3JwA~zqU$?w04{>!&{3jSXRv#_&agc%NW_LrNoiS})E z(wKG2yJkMN*te#!?MOk``>o~c#|p~-a;1284|qveN&Lkt%)J~APi(=9%JGf1Oz4CQ=F7(eaO3;yoEA`Llv#0YTK-2NSi9jYz;0=*PiRYh=`S@1< zyu;)V06j^v&(4H&XV*JQ;bT91whx1bDXwk?fBct^;JAoweFpOf(m zsQ+d%zd=1&Jpn8d@(ivN?Q!k6sF|tiDHW3z>tv?P72{)`AE*7~D2qAjY_}0(Gw0cz z;g&iAQ!8Z>yX28W0oNg@l-MI7)7c&z2R8!J%0cR$$Sg!e&T&Ctv=OmJ`3E1uoHwwS z+i-};P~H#Q?=Gc`?t<_z|H_GQ{Wj0TALMPwm}}xH-q???6u~$tFKcx156AUZ z>KG*9PZWJk<}c_2UE;UdgBx|Y$d_CRsAQ==XeTw<8RlDjW0c<-rFyCcfpD8wfmT5tMy_jKAvV{QDVlxcINAs+6 zWYfqVF#hz@*)s(GcZvUBwxGJuau@%UKlFuK0Cy%C`_v!HDe+6G%;*qp+qwS-rY&tn zjMmKJJjbny<3cREU7-9lHW+YyU!6eUD_t)T_j`igU{Zu3aXO|}JiaBb>c)53qW4sT zZOCPt*lv{1gTy$Wl{!gVQ={RcnXQkSnMtp&-`g&b0l1B;cia~|%1X(}%?pZ78RY5j zhS0i%34P4=5jTmQ5UB3L$uPxGirwya0#uT#%{kjXXG*zNrnDQbs*TBs z&sP_^*6=z-tkFZ*!5Z? z^p}an{+EY_oBwMlR!)Y}=9LYeG`TyvlZbUXITF*?MMM=vTQoIk&rmgp!{fk=}`YdFFt$UsZ_z9$WRE z&QRIH=b=)iI%CbVH7B1FtFu@y>@2M2q45@;)RW7NZ)Y%^1oUiZC#B@%^oq<8y$htG zF~W*yjmO;DM%Qcq1dC5wpGfT_O`RDbLc{&@C;9>mx7GVo4Z;Hv^828qaIDGmUeC?) zpC|@WG#&R{fg^R3ieRd`Y+)3FEXamtNSMtfYNp(`IZbp#i&t!mGk{Ki-6ZD4YdvdX zo4xbfv7m(;#+#9_!u-MU^=<^$cR3B-6ETQ?uH`?Ei}-0x_+}yxU_B^K91*S{Dc&bZ zxxU|y>TmtRc)u$2Qq6_b$Suypg)d=)H=v|@yg}{Hkt7JfZgV?TR0aJT-3wJBe`x-+ zs^lRO`J52u;e4Y4ly@6{3lY{b+U#d7Fs~fU2FR3+P;PmCq>qEGguE=$ZM=kh-xqm4 z7^I@sLQ`bW#(>G6v-_YUmQh{N7fI=`WZIaeE^&^cTZSxR2&rV?qU-UHva*YJ#-cBO zS~L5nMZemA5+VO52G4mSrkm6+YKf7~&6-Z_(C8Pf&L+9)R~EZTDyTKr@8&9v_ZDC3 zQj#z~4@%=zyS}tfPwUTj+_zgLx=J^=JJVKeIpO2_=&;}mZybN9RL=8arF`_y>%mo) za(>(;4n&;}i}4DUFwB{dev+Bel*XII#VKbQ{)lQfnoNsSNn;SQZ4HuW`~1LoMO8Ma z68%jBlKMLmAZD&nOS28VqN}l4W>aWo8;jzmmB_4zLfsbtT5c|<0)Hn_RpZEQSCTpE zt-d1Br}16=10@{9?}pqBsH~_-F(+Mhv+qpO#(X$!Gz_QUWSYfZwVJxl1+>;4+__GIRuM7$lxj zEL{qB2%%}}`dkPvuqGjEv;<4dW3cr-{k%hRx9+E|tY5BIp#3cow2OXnUwzw*G-=kz zNqjPyUe0X(ZQN)(IbARLVqv%6;tcp@x50g{i|(w4e;M>TkciC2WR56 zyF#QoA$PNHMn@m6I5RU<)fnbBciX$EQf>K)Kk0s8p7VUOnMMYn5_4S;+MVt52r+?! zSRT(I%#hy;YL4SB0XKf<5O9hEiA! z^Al?;nblOuTyE5EQwe83+7Qs<*^3!-xY2bL2+Js}+0UaFbEOw8j?A?~0KeQgJ9~jf z1M-T{d^a;ev^Q`-+Gl{ZDa06BpVNdoeb*ON!TnB8=>i6-bE1T+DXyy~Z<>yy@Q#Ja zMGhvdbG8jx7`m!Cf}vv4kzsLM-}&si>YWtCx-5Qd7C%I$HfAcmO^x`sRVF#9jqSXB z9Bt~AWYeno?x+Ei#JTO?ZHk6?z z$%Ro|O)d8;X`bqB8%Et1=?rez#-KVS-d2X9b3i9da+lhNdLzbae8?RY=nvTr3V!ex zQW#BsM$UVp@R)~OIPFKAcD{Ms!HMeJf%-x_qT%bWH#ob`^86^CRT;; zAip1Na`L7dugBMFQE9zRlxWWvvI~CD#<-~2-R8*%Jz(!VdbHQJ?u%;nO}6qE3brwz zT}-yjLu(DrOHrw&lxk_(%Vy8R!g_d$_C&>(d!w7Q9*yU=;Y^`gsF8tw2JYA>oe=!q zS%N%+`E2n7ZH}6bjQKWHcVF@9&D(pP=u`1F$974r1y}pPefulw@{v-o!zQ<{T8C=5 z(BIW^@r6=Kn9(rTo}y&LN4phRuZ#b8BrG92O7QP?YCb98*MR>g3H%<^9wJFG5XB=! z^jhC$OvOn~wu#E%ZFii-w*5@K-LXf$S|BQO+&3J9jW$)$1Be0$-)%!sWRac~7%oG{ zHn{dYwAn3}i#3Rj;bj#&)yG^coFDiog4;{j2+@NeWZmU#fAT6SGzA2}NiC<|mmNcv z1Pt8897l9CI40kB9H5}jVK%RYaEz>IeZ%vINJVR8dRRuh$tMvqrD@|C=^wKlZdpf7 z`Av81Ca>xliZ(RIX<`PpiHtIGhAMm>+9`s+nsD1m2tOf^MzZtiG7WW9lw_> zFKToSnb#ZefnZ-l>~9eCJrLPfhGBKTEXAQx&9~Q`y0bZF-b(3dGhR5aD|;j9tZ$FM zql`c>iMkU)oB#-Uj4C2+!aSKFN3vB_W4&=ODzl5}dV0u0^)tF*EDR`n42E4i^`bLE z7x|mL5VuHz)^}5x7Fu2P9N%P;(RO%su8oCeCdyCM)PC%v2cf!6mV3eAom^F3576j+ zB-Ph2_~%Rc9>PRk05Fpjm94X=nRmt`ulb?o031> z2HiD|!x%BtLZDM!!bMZjL>XyQ9Zk_n-|U-`DzL zdL7jIFtVzuQNdzBIc<&&B^r&8_wc76Z8Rc;WQcI4zLfI6S?F)Gw7+&>Hxtp(x~f^1 zm04Ih&Gp_oEqD8;X51IR4KDp+b?@X157r+jc~{O)1Nhs?J%H<==t$s$f|KGque6Tq zg{hgHkp%M0!BIS~_2a2`@&`Wff(?<;_Cg1|gdSI~pV7f3dGX50W z%}1E>92(iEP<)JFI!Oj=WLml8)2_sIjlaz-(`(#jXGTDLzr`13XeK{!j^z4@U_bp8 zy0je;AC>s5?S!i>WFnOPA|E!ik+3Z1xA9h4y(0VaZ7#sZT<9CAO9~q{;|3dkA@yg` z{XKTUkM4`S0B%=ORMv0ealWaxg=}7Jb*JZLXYC}LW39=ruYMhU7R`9}ZnmUXJPs{= z0epiV$=~xr?WwOYnu-fOcuDetPfFJPzxx`-y_G&+arlK88bhw#H>&Z4952-dPIY#k zOa%0^Bn!3D;Oc4krFjMKokRuNMdSs_ekIYD!0YbDw~+81j@=z5P^NODNanh^Tuo0! zXH7XdJH)$($~t3m*{xhTmKWT$QOXkEVRp!zT1v`M%=aP4Ep)>Bwu)Q zjJtO?+;5H1*J#E<=YQ zAsa9TET_0$>;^;BlcTi)CFh_V*iAnt7f2HKrHW5|4f=Gwzt??XRa>kQ0rvuL#wnF^ zy1?s}~a{R_FXZlW#nzyJD>k3@czXv$*K zk08^*{mUM8D@efqs~45IF7+vG0I9kr@~lpaH~Ip2Ty@h{`>LTRmTAd~s9Q)=@|Gze zF)8ViV@i+3$VbWUI;yT_cBR(XE$7K`WjE!!&frbC7WrHjeZl^{j3qJ9Y4?(dUjqLh zCGtC96I24wuDmFs*U`o>TB(<(ZF`+D)WNdYYb_VORNM+k+(Ej8_&FG6faGKV&$6ac zM+dyDVEIKxB1Sl5ke!5;Cr@1_0wYmQE@2Nq*Fmm^`Zw=o$;r#(*fuc#&;sr-X`t3%@}WD4eJ;l^5UqOn$5aDnuv zBMbf;{UvW@5ftScAQYrOB$ph@9Kv{QQEI^GrXs;9d6#F&S37&W@UTMudBSK>0h{&` zOoQuBl1;04px1+5t=>_>`N6I@kdxJBIdGStg1qR_-PVe#LaTYarr=L@_63dk zGj{q$QK(d)CrlnxO?Kk(D2t^{SSgfxYIipbr;my{D>Y65Kb6T7B_T6o8<`m+QY8i6 z`@6e=D$&HVmugA^(ggB9f2Qf9=J6h9BPBzbR$uopzg^ThOD6o>@niT3@9d+CBf z{}*^d%f1}0_ZGl3Cy0Hw-)@*VoGXQ9r!ns?3QKimAM|{2Zf3>PwNTA_O~m&-T#&!F z8EBHFGeX=TrzgsfH{(^Df4|LnPci&b#jV)|H`S8rtft2LrAocGDvX?3{EYi;c&&$L zv5&RnAX@g8vC)uOC4p)}Nu?QC&-~o)Oh-&4o9VA83VXwsRmJ@l{|IGaw+CyHn^i@6T~>2ic-8nsFz75vQi_R{ecc59XC?Hah~{#XqADyr}RxDjeaWiD0LcRGC*r z17wztZAkdHzM;z;+CotGBATLLh??zPDwy~6ky}Q1q9dE3v3Bf{n=bp%DGQ!Cet(O8 z26F?M#--xRx0BsEiL+wHPCK*nPN>CIzK*$}mqyQ<&AfP8cN>Z;p@>@*b`{0s)XL)GR5OZ;%qkh)ud9KKCqt*_V?()w zAIhzA;bMzvB=m+Zh>S0mIAJl&!`xOEQZW!JXFk4FlEIwR9>)kOLjC~G9A@0cuO{M`O$DIQXLE(^tfS}N9Ml; zu@Kf}%pLm$ma&Wk28Dm3Qo(D`JBrD)ZP%X{I)`>einj(0rDX^My}I3w)Q$Ac`Q{17 z)wg%{Sj6CJw#97P`-2<&vbuev4S!eVJc%NV%=CpS-Ete>I_VVOOec!1a=Foo3kz(M zv)o>p@@x}R#7~&)WITzR5P9~KTaZmMf%t9r zgPxo*cU|FgQ83@|iDxIxu>;E-eRzv^{{a&{Muu(r3h>iny*%u%Q>B4eIfmso&CV=N znNcF|uQu>R?&AMFu?tXg!t@BHQ_6@Et}QFcDsbTuGuW>ao&0 z0&eo_&mS1x5?{tPFAB1yo2Gzx8RyuFXp5Kl9P@Ngj?LIXp0(9&HYnxg0GJlR&WW&5Fx-og9`MqM zhy_yE?-^`=trDKxQVfUFwUISxC)25-&q;wo zE(b1x-<7b$bLc_4Rt`|pd?(*m@cSpq`xdjy0cM_fxTBbzHtI^gROhQ3x&4-|b2&R% zI%mec#`?K*dzCR-(-&{;!oAV z>D&#QT55n{VKCTtMGYRk)`YjO)>j@y4)YhoYB)No1)(@A6;F< zyA49@RHA832`n-gN&E2rJb&c=srwbwg3*nL)xlaHc00*)+U|3$WHfi~7OX`zaqXatN+h7y!l}5g@cK@(qHoSR^S)Dl%%yt3t`_9!u*{ZdqJMYq`ucn{77+^ZeRZ z2SMb%ag4P!Gw-Y8Uu_AyjM;ULacevR)i0 zVY*xDP9ec!$Dh}?V?!eix}G>&&ns5{_A5Q*Ub1=J==Fws36=@fP-WyLz&X*^FcQZA zOBav(l&+x>8Yi4B@`5D>?*Enn9gnatA0fd*8~sY7wL3y4SpLXVh5c;pfLeFXdIE^d zA{Hu1-AWqbveKUgY!Ca<0cCAW)7n_mC}(T4gV0(!N=iAz2E9dGU#9$bu-hHK92a-H zj#M3;>&kPeWFtYG)N8x`k}`fn6x=ChK(lbtFbPxbRF2zrPr(I1SC56-VP0$Y=T*TT zodsXL0KG)WKSb@vZRHsz-JvUxIJmmZb2?9$F^a|-DC?kz@}D=M>Kb_&@M26u?sPN4 z@k{bGb%%1d6j7_ZBSp%;zEB(vhaUuZKNf2muz2S1f%8>{_csS)5^kGIBlLHaa4n7h zFs4h~JEvgCK9bk|`#%xB7i2#LO-Js@`f2bcubZOc;0)y@1TN&hr5ZxtbOauZF9>DG zs%TkW3N%9cN;dy?6%+HgKy565o&EA->TM10e?-3BXurJq#UuI*m%bk|1v?hnc^$$-LAwI>ppZ zubsHoM9YqSWdVWZUAzO*y>%m1#00LL5T8o*X|wdLq#Q6t0SS`A3@STnh=%1(&&ri{ z+IU;77f}XU-|X{BI$2x!ZhY70$pjzbA`rT%fXhqDF-SLrH$N*NenuR4dKJ{5{QL^2 z$(oVJp2UDWOMn%?{4<$Rskev1W)mBQ!>4oF5zhz3E^ph(X|HMfg3*EJ zFURzq#2GxGE-byt8`QIts+JgA#)bIOzKzov| zoizX?uWNr%lkR2kTU(@=uj}vrC-iOubPjG1r)G!AZeMRq+MD!Y z$5~&r{QV8RoGSO5s!+4$H52_;Z|ZBx`RzCPUT5#{hGUCu4mF@oZCo#n%#vabHi?R( z4YNg2S#_jMU~ys$!hC-wY^J>!{V=mf6+1SZUc~3_m|s#vH`E@$hX>%dwuYOfp~CC zhIBiQ<4!%@*zQu&ZkmnddpoBjw6&p{=5L*7?4dQ;;%ewNZr@%jF&c{~f~IgZY8jh* z9ZYLy2~&%siX2{KR6O1jVlR5=ZqgtRG|2}OUAWvLeGH(?TkZ9oRtsu3N ztG2p~eJs8RbYVMVJuZX*Ki~(*yhJV{mnbE%2Oyogh~VeX*e2U76{&tb8V06D<@$~Y zdqqH+4>h{b_guy7eUT?FeP8c&xmg13gJirwt?t!ON}$tqD_hV|x2 zcl8&`a<>(vR})*|o!-zpnsAivQ-LB3{(ay5f zmD6T@Y5D35{33O2%sXO5p#iB`@@&jQVto<8-$Kmq;F_%)peD0-CAI@cJ621StW71o zZc9etu+26LmSWA;*}(OCWWn{Mb4N+sn#P_;^a^ESKK@csQt3=K9Q_=fX<8)FhsNa?naY>GQQcTj9D$#&0$U`RMN4kQ#gp7vc>QDn%|2Zfz4(c8O{t= zHAVM1phxI>C!VWI+*EK*jvdLu*ClR0snsbV-a@iQu^kQy+y+3rP86$(EB2#~EL%gi z6nmkf+qeGTb6Bt|u+2UfjdXnA2Q%BPehrVzqlGI6->TP}8L`!q#*=DuJmJ$mCAls> zs2=_ez$9{VmUyw;S2o~L-MCbDf0GRfD8p5jo*J-2rIo8>^XqNP-rCz)xuGq?av|3= z3QpX2th0y7=8+~inT$O2?*Rt6&?*xzlR?3KEm;Gh6LFGC$%q^>rh~krlUCKVQ zl$4+Mk*>>qDv5!!0`mf841UE34PCTk(XbT7HsNmz3I~E3MKl$|?qd=>vaPCy{Oacu zu<4P|ImKhbmW%hYgJF4DFSXmtOuD^{t7qR$jjfuf43#pET0wM#_zwcC!cRK>zL*=? zScHFC&UlIsIQb79(7q)9+~70-VT(TBDZO&GWk{#BGvhSf7n-;( z`|6|KNgG`uBuV5ssSgSJMN9Gxg#V5$AxI?-Dw7XjlRYH^lk;m7j9(iOl55zUIQ&N z=kcj!s$JvF$Vf^fvzS%mq7ZMV_JZh(G~Dlis|SSF@@5y%1L2PcJ-7?cE5f(lm7sRq zfrA8ts9dR%Xsxuo)n@6+8q-)ynuK2Px4|rXocJ4IY3%1xisL^8bPko`G{eS&SWOgY z-1*f?rjN?@|L7_vpR}(rk+lO1kmJ$V(h6<71MucU>|iyiM2z0`p+y+ihi#92Hb_o zFgkL|dgBiW+tMY@?;XD$`(AL-ztfdR*(%B`9TaBHPfW;}0e3u9joG==FNCZ0Wx*2P zxZF%!^sjM#eoXaJy(@(bqxpHt?**s-;ph(O6?n;Z6xI=`49b7@Ql2Z}V zA1+6@+U>m`G2P&;%6Szp&z072lsGQ6SgTo4vQv3k@cBLT%eo5j&Yo!KBcwY5j#=7+ z0Iuzi_Ty=N_@nnHfPA{rpmdw1LfV)YxMpnD=QrEJx>RbF@+Y}^^tm)lx}c4Bj;N)f z{)|9;_dsDa{256XiT{qu75qOP#Y>wyF7p!-h|i-s=c)sbVIPtGIeigPf>N$|@y>77 zHT#)xrbrxMbfh(+e;WMD7?;{s#CSt9Za)R&KAbWYj~ZRj)*7B zi?ebsP?b%T^zmdGioxjL{|Uh=h_3tTbjxIy8FDUULELM|h?AyA*>X zqwRb8rpX?5m;J2gjQ~1wVZgIsVgjmU=zZ1V98|Fh2FFW%34L*(1j13o>s+5RB*(=w zv#`Q)pf)B+XbdgwVGPl)zW{C+=Czk_ck zM&fu-0a9?+ll$;yyxZj7vzY;cXCJL~m=w7w#;1?C(igaQ_r7dTqb z=aohJrB9!XI!6o4ZzPTj`(vZEZ9s`s=AlX@g2|Mj1BR@BQYV?BOL#VpLLYh=)lc$U zF;wq`>S4c6c4LKueoXZ(t|u(cmGWDxb8TIrQn{GmcV&u^L;kLnmt^`Vw!Kv6A1&hm zoXNhDIID+7isbWQKUm4}@LXuG_N%nhma6u8$>*J&&tpSJ3F#c(Ajri4ecPo1hE;!# ze`E9=43i`+hZbSz$Db_{0wf%t^evmvencvM$%QfG;Psy(nJgi}9)8}v_OJi9W+525 zx6`9hsPRH<+ZdJXM7DW4pQ8B&w{G}uDZVvcL4GS|NekQ+pO^E~=>BeU4IGrXtiEFm`Vt)aB!wrK=I0AxseT)Sn$k#E2nNXj^ z+=>;q^L9EVyamX-k&#VaVhEZr4PD;OXm3#{36?Bkus+oU?^u93U|G*A!{vGQwH~5= z`*I@gwi2JE=jaL|xZWEW$T~#%94ilH{-Y-47rPzb5<18Ez#f=&ZD1ddT663(Ou_GR zadqC=CQcyb^P++)!e6pYPb<=8sek&m1vKcgYPwZ$f|zLO4#gHHekZoerJ6wPm z8hLEy{eK>2bU*n81tFgZ){+-oAXXV;D2CKG`)Ct!EL~QlKGO6&Z=)zik}PnDfuX_R z!T%X>?B@%;tn-uRK*X5sBWAVwP#5_azQ&^iKW}vymcPS(1nrKyZjw@^F<%en)bfanrdYfXUMoCI#7hP`I z^IM)RCGm(@v&Y8OTS7`i zEYXf8xD%nFW1xe2^EV7h z-TcUGCBoX<%=)F6E&GW>1*BbIA5kfNki}^N2i9(`uW|^?X`BR3Se-Kr(Ng=Ig9cCp zq9s!a=tV6YYd6-V;Y4dLqvzpp*vwT5e5{vG^ez)k5Ttjl6kXp%EAB-r6JDRITEs%1 ziS~7be-BZ=4{*A6z}pod#rJG0PKUJxC!5paaWiji2XW&~9@NiMU(D3o2r}###+(6M zxUB?{Ie|K??s(odto>q#d4=#84bX9pwx^pj!aYk|CcFn6DA&wn*)m=Sy!SnxK>U~8 zD1NWi?fy18w4`%!)v3I#mVYb8>?oXU-$uaLhJwxZIr*|R233;Sga_%_0SR|njk zCrZFX%9Oy!pwF|D+!RWcX*400C#{}QI86#eUl7XMo6#J_xzj258iuYWkovzs>Ri<| zzvD!y6@OHV2xHJkF|8W+4Di#Atk4YZQOGeipU10@F8XuqB~|kIud6`dTRfo$%XQ4`Ghmovd(LtFG)xt6}arxH!Ug2Za6Ty9so6KP|!4J9(UPkK3*3p<*|uOS&!cH7%rH91OS`4b#4BvcdN1~xP_qUEBx$r2Hjr_@ z5znL0{D+Fm4=M7EVMW<@rABmA%@<~cVzWM;I96GUA6tn=w=)mtt?PA?$_e#87I;a~ z`^)m=0&V2?xASobI>3f{N%FMUR?h;#D?el^|s?i)PgU~n%Jp))8BTgP-#5(lNeT@8mPB0p45vL4?wtn1bCc7YdI-icY2 zRC2ZSikF^{@}p?=lI7n|>bFoQ41peK0edD(3j1pBII%O~c4fBBRTt%oRkW)|vptDU zt_dqTI~9b*r^wo|c4!v>%^)3Vj=W;PQt+q_A$y{8JgtGGmK1KKGpC(>#DTcHfn?Y5 zN}>tm{fsajvsuA4heqPhgZ61M&=q9Lr%3&>s3&Vi-uqsNKW=vhayJQMZR0W#`a4Ym z63V;(7;Phqet$DWegUO^KXwyV?B^Q+_)>Ay9Lbi-QY*C^okHfIC%VaL>TnnjlJ)B_ zi+7fK(F~H@3T%Ta@#MN6h(*4*3s0-cx89Y2+K_J&1U)o|$(m}8J)E}s`}Vdx*82J6 zTYjvJV;rAOiq)&vO}CA-*#PEH8HIW+!3!x*t(e!NK>E*+ymHmxgxEZL_7f+YDg$ZC z!RI{f92ml8DTGY&HTFS{0D?JlvpAq z&IjYD++FM(VN}s7XK~U!$49<<53#yzi5L9diBp!K7uSxkUy1W2(0(8B-T|124iIKS zqYzFT(L^m89yJ=a-mjL5vEphqUUT8y?P<5(oaTh2iu<9`kcaQ4si+zqu7wtM1%!s~ z*lhX$3iL)ON&3jt(u+8D_2gmu`U!3PVnF@kR zWf~YBOrLQ@`Y3q6m5A>lOJD(qm&u1BHd&i-Z&r8gOy|x)ZP>BY&K`(~=EOIlgi06$ zGHVAuEb|$N*$&uUly{L*32Ze|cK|JEXF-uQZdei0dO-`Y$zR;VkG+lA<&WTexv3LF z)gT|A96eu+5?uTfE(9Z(V$r*orogk3QiS*k)jIkwsJ!{fEZdqUPTKLUs?Jg+sk9RG zW=ATbrSYGtKOv$iJSu!)Pu>^X3}@y>=I~kQL>QNj;R%sH3it201$U_TBuTstCPTUt zTC<$aCpbr%G)t3u-Lf*Xb9hoO+SYY4OmHXMYz;Nrq=GxpMI);y=e>4^xf!a^%RrB~ zZ+Ol1@V+yOnQ0F6nPF95&b?1Ev649{o8jpYWNgDpm~55blz=V>je7XxpgB6%-8Xo^{-0#HNE(ArGAfnvetj|$&zB;lB1{1u+P_$l(K2~X$C20uGeE6Y@VUzLih^jk;eOSxjK zs+y&@+oSX%>x-#>N8YTD$qV$oDDT%{|5}Cm@0S1jYCt;zVEkRFQcW0IhfV3tT8qtG zx}BU23)@a6nN5|;o%eRfO@N~R`^MXpaP|^4;3b$R(q8rpHE_Lrbed6Jz(^G$p2t<- zg{t$b{As^Tb2M9on$G(F{J)#f-%&8X_<=qeWAh)Q$>>LaL~}e}hW%{U&MZ<&g-f;8 z;nQFxO;55iEQ`s-O`6R$2v^MC3m12N2=^h(zc1X^@&4xu`+bZ%q;=TECk1${ljkhi z>{Vj%?XI%35?t$?A7=UXZQu~$Rx;Cu|A7j^K!Fs`$#js4Mj1GOBVkG zbp8C@f^3@>7?yZJwKcRVik6P9MG&TPqKz5loalhz6NRsVo(AFcwyF&Es;Z8oVxwVn zkg82j68rPWS9n77_Ane-L#p-y#>WSuRw}0w;CikdReO4=A)TL$`yT=&eCYHgZb3ch z1W08=C|1oqB-9RBz-v-vYySsi5E{qjv9}Cw4%{(zF7?Lw3?FSf)ke=p`AtLowSqnaz8|APmjIyciMBByeRiShA z9gyylt_J*8YLXVf@JB*>8n}P35Ch0`1w?Ez6%Dn?xlJoqZgD;RU@X>(eX!G~L$z4t z4w|pJZ$~%{s1cU&WWetLzbEyWd5>7~GJur$6>JnQq1!SJ292Vks*(my@v~3SNk8^^ zY_iq&c`=0V{)1LR>YZ@&WU+-pocTE;gLF^%nCLgbZweRrsOZmehcqlU_YU zg_BV1=N2T~O$-9#z`za-&}9vGcjFQee0uB1BtM0!Z-OP3_zz_3bc+=R_K(fthxkv7 zqt>+h!ocpsO#E0*F=2&?j|x4UZE7!Td6Le=dtlIb!}l8*eA%@9l61Z*ji?$i#_{Kq=k-Zc%baTKrkYs+rA7wQy$BvEQU{JlE#r+A7sN zDx=YrJltLD#XGnYCOB?&(tGPgg+Gwx^Jx5YWg7%11sa?KCK;;sD?O&4*L*fRXy*3A zd_5E8@|L`8h^Om?ZD3zEgZ8i87J>1iP8m@>ve_oK?xvmp5rmS*NNeW{Aib>b_u-V` zGFI*Lv(t38>+h{&K|f~`bG>~!j*>^e)%2EkaSgOP5efnbGp6xi%6jIQ4d*wblaXqR)nmIh89L>zb2WTJ46BV`;PZ9_LeZT| zfeXtQn8l}pNuQj_ZovW>aQpLTi9FOM57GU3Ft$gYja(lk0DG!6^>)3_K=G@csp4@M zUsPtyeSL0Lj zk~pZx5=L<~>m}L~y{Yc^_BED7R&>GUy`*%^qaX_J&b7Xc(Gej$4az@LZ~^RLiNvp= zz@dOUr&b_m)Mw?DCZr|@Ej|oO)@+wgWUiGi!|eF&G z27!4cUjQaM!AVSmMAO;dsNA+|$L;H^pR)O4ETiwmOnKIhRZFq*rk>}AhlcO43M|~k z?>pkgv>=YSJrbv5ics_CuciGolE07i1LzJ2kBsi6D5W^>)N^vOBcY<2To8wDkBlI;S z2i{*Swn#aCUdijz0CIndbg-BrSFy;Jj*0aK|FCx!t61`s?=2_Z|NMyXftfA5Ff^BsS0YSMRso zejdA#obPASyfe>N!m63cw4_=*)-6m@J|D-g%KlHee(%fS&fV^>B(a&RZs)_J`}+ke z`QL26KQyZE?*u#wwg=SGW|ZXi)H+)BaZ*EFl5sQyr@xU86Z_gZ@v-XKbTBl0;#+Hr z;Te=c)!kH2SGSK@+rMmY|2hpujG^c(=Ac(uU@WpT$2j%%+?cNIziycNL;FZBAXM0N z_vF-3FT^LyUY)Qb*khLw5MZC5pZ2kY$ zWd+O%S_W9mBlLgS55TMmLw54nND}x%{{u}sur5fr5U7hpo`wAozhKNZ5yUV?gervn z@G^&lO*wHN2g4gnv@tJa%l%M()Kjr!DTSyz-7Pu-()X`O!@c`2+Ap8eNcztI9F?i> zhwLoRWT#GIrC7`PNzD}0Dkfq}V`;ipxf^>=A9v0Ad$5ufS-G^<6R-CLSiNKj{$QBh zsW=s)w<~M|sTt4(C6~udzgOu>>tpVkwxT-CKnSH4DI;7U&?;lvDy;?b z>My7Tc412q`;f*~Db8P0S$BC)*-aJEX9W!3WCSILIai!!Du$@pBrI*}hQeX!sttY~ z@PVt~KkrLU-(xjl+C&AjH3l1J>-_+1Ju}Qx1@j&I3GrlqJ+3kuPUg+=F4o#4+nG}3 zIO|PjjoFD)XE#=reMMIX-q{7zz|fg1Uh?p66JEmix7d_Bq%&Dz$SPqk*^Wx2P*bV%kGr4Q^>06QZ7H%YAx)R*x44TOA$UbeZ!b*7S{!gdY=?R?rxQNd`}JCn(_+KgsoseMe} z80xiiK(8=H0AU6n=KUa=-~l<%ql4p;1UWrgDjfLM2vNDqV_+d9?|FcVis%3c2I;59 zE}#0E8NXlr@A1O!EO{^j;YWS5P!ZO$xLNP_;%GfBccs~|(=!yIaT9*H`z`?m2yBKb zQa%-rr}Gz^@sbXF!_B$Vi92b!>f!Pm*ILQ0Fw58HyPiDN6fwM!szSKKCx$o1ePgY6 zrs=k2@)&ax2vzGUB}VYHf`D;dAlA+*MKPgwv!}8(Ep0mL@y*y?2S4}>8};3V+ad`CLL3MPaQ350z$LaPlpVHmt{+m z9KkeA8wC}T#&NvH3$|ie=zQz2!u?XR)5J7(2bf0Dnd(St)_jbb@*) z5bh*LwZ0}@>mx5)-~!uwfiGjF3xY^&F^>x|A}P(EPwc{L82?jud&af*Ov_`E)Q{i&%iUun7+ex?OIk>}a4FgSfpSgKV=|4aM=> zp(>4neC|y&s}b`1F96$H*Ard@YM^vYlTjC8{Uo((lF5slsc9CbrC~@1n2b4HSNeTZ zb!-KdY@Cf0w983I-cn!M75DzPphj$^H9k|_oZQ;E2f5Tev|C3)y3^Q zas)*lN1Bc$ch2LjAfLzPpD)-TLR}FduE#(|twJ+VI^=r$hCIkr-nz9zIxJ`3ikea3 z{5fqrYAqI%kux^fpoV*%60r3Uv*1xV%trIk3~^>~5K>9QM_7jt?E+O5dsB$K>Qk!> z87Jrm=M7rH5nIwQc)&*pEbh1VYjMQx7r1VoZN&B= zV)InxFh-Jz;8`UG*R&ml7YzwPXpD;N_c3Bx;4!eZZ-|P?tBxZ|4u-fI9~#_u@w}U~ zQ&w?OS?LMxEm^8;R-l~NJ2m;>E0iPb^Gs437tQa;7jz}WM0nAQTk(DYw|};{KY;Ou zP{>mZQVh4M;D8w$lZ7!TujIl=>2h&p*(qd4HyE}JuxpdFDPy1ybXoD5Ak$KIQ0wRd zFzoR~g$TexFv2KPVI_4B8Q&!Rtk--8cb!jo4}XDk?3!X9k^^a$>4D^3?2)lOEfMjg zf-h`0%Y1B-9^|Io<=Tny=0cDM%i==10XVhsMC=@D!UC2%-HkiV2` zy+AM6{Nvg!LUl|uT6--(bvfW;NJd#&S#4+0I zxVTL#<@S;rq*GOYY#F-XdC~;6WZp^uwP-J4H1h%~ENCvA9C(}U3GGDQgO7Ms1 z39H`cpzizs{D1h|)C6A^B^)6P2RTnr&$1ahqp9&9``vU2wfQl`uw94o$muf9X&Ix! zk(ISHQ*@-hfwY@ufa^)*F)f9&Kn^TgCMK7gx@_Ti51f1!nyj3EhbJK^K662Y&Hj1` z?T;1_axrE`N>#@rMTZDYCg&hnm7nW>#xZ{ORM%{m8t6l2GsJH^S z=)~PFfo+-+Xn3(^dTa(Z=}{H9ROe%xBj0G#?i9k68FYe4i|Rzj$ToC)nA#epj8&QO z$K6|ObI_#q$)EUwPRyMFNO!Q!^a$l}0tezuDhusjOLB=VE_=_=9e+4^3prn&3b+J#Jqoi3&Ra8laYDhYmfo)6btAZlgx@r*}ku8~1WptgHs9+Ec-L||i zC_^;;Xiqh%bo-nUGr4g_<>KLi72XT8AsT$ASXdpx94c$T9$n2}KCch_<6#q_$-ijunCdJSiATR_(b95A zJWs1NP0U|s0kDNd*bJ!q>CBwQ!mXkxArjd9nFtkK0frj8B|ZI6ejZ{n`tov}S{hqqUulMFRBnQsZtRg>Yb|U@f?&vVJMtXDtHTl0Q?}K{G)#JwnDo`37do-Cnd%DOz#ym`)7M?I1bk z_B|&&Ec@IJ1}Cq%<<3rs0#C!MURm!;X5vw?e{-{OzawNnsO6=A9~$wv8g+K*RkbDe z+68$#9*XsR=iI(_G>;ar*I*#JD^i6MN=kn(B!kpaTNrd4%2hm<<5SyFdERO)p6dp} zGG&futScBf%V`!OC^{!u0>;hqykUZN1?<b3vqZdEJ-DOoDX!lv57aScx zghGrI*V`C!V-cd8&*d8-H6t$wnJxQ?%lH?9+U!oUsW;E26fGZ|$-d;w6Rl3^fKJ|S zQn?oXyCEvq_#(PM#;F8Es-pY}BJ~)dpBL$)rooFc8B+7D4fYj_njnt18YiJL;wP8GxS&ROn>G7O_TW+V_!Oz0Z#T(N)6qKllkehw z*`v*d%(y{el6ISB;}uS!H+V(lRE-ptlpSL|J)uO^z?4!1nQ-T7G>RdlmW<_QhbR_2 z7|M7<3{QhX{pU}D_0MCjl?eO&2wwOF#US722_Hx06b^Nv2sa@YXW|dG&KaU33P?D} zeUbQ%$c>|5R5UDGz_1a)R6SqPG9nhJGe($XNWypQ_6dU%!5SRH?Qfnf&ZFrRziBZ2 z5sHbEUXRb?^XR-D>t~AGI#;pt;UfRR-dwcjet#s9r>x*!_Wt$Vd0lD#{M~wAZLmjB z8ds)NYouQGExOfX&Dk)~K5!E*R;e2M)*zg_HrNo$hKSRAKx$q=vBTq33B+mzLEwl< zyD&k;SiH+eLzatDk7+bV-4U)<3wq8F{%h2JvzL=$F*ahjYvc6ck>Z{14R<-udr{sO z`Mo|=E-kE9X-mnr*H*b&ZOxtCsaLf|vueOKbr*L5|2vYFd6nE&WsJWhrs=DKepCg% zli+Wm&#*$cp%`!}?v>h1DqE#xtFtS;EuEpDD)mW!Bw4mEN3n=(w{D#`(i4GV3=n`a z@-uIgcXi|JKEj_=BsILjZ~p zw_;+JXmX;3J^_c5a0{{oQuggQmecn}N`2Dup4COJB}Ai+KALX0p;-%s~6zikN{Z?YWfi5%3Sj7Z}+5sZ#OA*+II5*AT+8!W4ERg6l0H*1d? zd3(Lj9F6@d@m7#V&MDoS#b;NFBX_Bu`Tj`yXlVd#@wN8;FA)CI%J4llBcKip*8c`i z!v|`*H-gmRds36v&If*EY3E&dv7N3q;lb)oD@1rONLEYewhV;ZU;{-GoACM}a@EAo zpMb0QNC6Q&9K8pg&b_hkB|hiBzg#fH{PA^0tHn1~ZoWRL$FZpjlm1#=tWNU$UScks z-<6sy)6pA9VpDGOccu0yHou1y-+`n^${!e_C>*O*z7t#Nv$v%xF6&XNT+b_(rWSgo zYh@cT6&pmsohg#T6q7t*jt|6Ycm@3cz@!(6EP_#MdvM7A`T{hFNzxbDr~#cV)*p_N zxrnzxKDJ0cw)itsEk+(D{0*-8!GQ<qQjY%j`m)ZLZCd< z;%&(w9cI7ISn!+UBsCJ}#cicfogZqQMar6GM`2_{FOlk>7kC2RuGlEN)oE^6DfH%Q71T<6CfP{H)!KNq7(2f5HUe+T>2{s6h+(hr zLjw0kG^MJf$j9s8fx#uEZ3wH|8#Xxm^f#6}LZ%168}6L-})p zeiZE&SNppO{to(n=)wbM;-u)0^M{4e57$?+6jzti-fFC;!&T>?>Q~bJyLSl@HG72 z`yT(*!FT4L*u{xnKaPdLxH{htPKj~1SL;?c2gz5#^3Lim_$R58fTSgasEC#Kcd9%n z>1WaZ{Uq;)|2tB3Q&BwInvJ>aTAS>8ksNkUncShWOAgStp{%;sP}Vyyi5wYW72zEX zo&g+3r@443scs`=f=Ax=1OB2#pR~8UBl<|U@mJuUEdQyH;TOsXK8do#@^9m?Ia+OI z)AOocRAY_t_ARB!8{wLZdVd41UeN6(NSI&aQ;%Qm!C#;b-)c`jQ4Rou_(xQr^nlpK zSMsEK9_5Cuq}0na(%p*MES}3k=6Z0C8IP{?gNH{Huv0QZbF`%nfeT94;ZKsI+06v?>58pr zvToas;8>Q(gLFddo1%&Dt)RP&aZ4~uqbTQNzpgg=^XP~lr=?soJ<_(}lkH<y&djoUGo2o; zt~oj??wN5i9cs>L{S6A)Z$OL*sHDiiOVG7Yx?lWz0z+q<>Cc}8fj@tC8~^SWg@yXY zbV@>wWRODf@7I4O*&y%l)#|@Lg6v3%EbSGGPhjMIuNNYXUxoUnRoOS1n@w?^8r15W z%3eMe_SI!fP6myJx5kU3gZig?`O7-JRe8?-UnBoll;K7etV3i z#A>WkNj2h8J7x3?v6$Z03x(?qcxt;7n-uM)1P4h{w1q%FR7qzxzL<=GxMDgYg#{?& zUmG7sal9+mlFTe6pYgPFLl^d2AyrKBwGxNaMJ#_(VUZFA^4)P-vn`=pS%0f&>r^>DlkAiuwkwr_Qti!~ z)_!v>)+A3|T&Mf(MB7MRH}kG@Q`bB=!C#tHnlMr$HpHqM!?k; zT6{we_sWA^QUVNjDRiz z*N%+RcCY?Oy4@r=*hD^_Q%F7<{acHfiQ?4_VUxg^QZkeIZ|;T=H6O?IxW)8?}BC+X|zL=b(7s7TQV_EQvJW*x$l@I_`OZv%F zex_SjM}M+`DCkca@(;CIKAzuMPI}#14Cl4-dJ`K+PHK|824n)?;c}J{&e`CGfV+Zt zCZYo4`(Lmh&nipt&)c7%YWN^dq5xE$)UT*0b$u(?!rOE|uv7m(cW=6-x{_oK{;#K? zfAs3CkK&+NDAvtd$vn?9e{u;SW)Sn#tKX*Iq+hJJyGuxdh!a3$os9UZDl2cq4GG75 zo4L6S+e)>|dAJmd`AE_7xQOK2A!TQ8CP_@g0NvcBkYeGfirUYv>r6tU&a;mt=YLjN605kL`N-^A(&gm#-aQ6xV(~lm z=OAte9q$<_?-%=LZ%4mRbvNbaV$jtuXQe&8sIlA*>$SMi9nU5eK~|I9Wx8o>-J%Y<5ANwq zc`e>4G!kfgnN3>xpoMt|>sKG?`Je!?t?tVIq@`yy;-PD7n|4z$({3!Q+krH!YQtl2 zKAB&}X+BllrMt_X+x6s^`4#x`o!mv4BXu5*YxAJoUxNIP*@rs?xIzF%pNWuyUrH^M zMrPWGL^`W}P1*6WQZ6_dW-6-pa^;1PWAkN1zf|wMauMl1YVsxUT@ilO6gbd>XtUKB6heZ4}q<<@se++A8*O|O1vdhzLZE)zEwL-R#%%8XX zL`)VY^}{80gKYa6#!B@te9U)mg40Ok?bLCMQKARe)!HC2hY%GwwaL?y9eRcLOWN=L zY3&lhe~7x~vFBR@C{mmS|Cxe~Tyqs&cJ{0AMV^m~ih3!`!g4k(ryDnJioL9>q2}*o zDe}}ovAK#KkmXCr{pPa0gRm_(a?7L=qv*Bf(%39)>RF)|9$MXAYG0G9oG^-brB0bI zk<376Fe+X`!~Nw#dRp+JTPj7=n-bIPP;M3IlW1DEAANgEk!R^`>_JLJ_6nqd><_0e z@C8~(^=Sp+*xxZLGV;#bukeK7{xZ+pXdlTox_WTF%J=w0C1n{s^K{-623a>Z`tB-S zoZku?>2Bf&IyU+NVLy#?w(~zy_&)r>5+Snqd>1={_x>wn4MQ*g3gKDyn%9Ka#b8Q?iw>FB_^F;F5 z#%kfK8^+X@pimuqcm!X70Dbf)}#-Y&^@`Eyb9^T(orheek zN$CKpEh&oBWjfMJEy|_iAkK|D#mYwR^Qp|i(lw8#4oQO@5!ATG7;ptW1da$_eVu^4 zCdV!aI3>i@8*d5w&yjSpbDRXCgfTP#<`WVG4PXMmYX5m3Zvh|fyv=9Pz1L6g0-vzf zUrr_2QI^df#e)l*2c7UphA^exnBf>4&L_ssP6rRngEpfX%&6UKWy-k@_oo@`X}*C#wz zx6NqwP`Zc{;ib_UVzIcfTH$_oGLGo#h(Dp5B)hA*b&+mv?;+PZa1nZv` z@}sc+i9+`w-X~BLD=@@T%xAco){OL3zTS*=bGegYW|vCW)Xc3P^Q(;oduGjPIgLGX z>UOFsHiVWW+4*rNh)n8d(6HvAoCSbUzkvBYQ8GjABdj~sd<5=zm*?Y&O?j$0lVJYl z8$8;pMv9bFjTZ>yhY}`mNN5Nif)U*m2a-0#Ojb}yiuw?=)gq^xoH0}f4jT|X5`6V` z%)YZS7yHDpOO%+kKgYOnKf8{ZLcX;#RFYqNAK~_qOTYlQZ54PcYzaXP{eOn=6lAA|G9@>gm^y7bvt+~~j_h3Tq&{W7&ce24|aBNM>%eZ>3 zPdcS^wW3wVo1K<+Yly*@I42JCm~`)eI1TRc#sqg9t`+2-!bmMdIBLGTHCPpBX)%w= zVp;-g(=(Q#Ghk>O1fsq-hHC7UfedEI;I94Iu~Q_A^1s4kLH?6C2ak&}5*Os(ptmYEqh zl7sYY8`O)l;;EB8OZrwWyUF{Hzrpps@xd+$Dn~~wYv_k36PBObq-PcFf0s@3>evH(mUhlZw$y}e>gN#+`=G~YJedAy@Sau(jPD0U=a^TZRJ#_L zR%;zEr)N^9IEwB0!9rK&%QGmI+&CNC7pes_6Kst%g>u8A9Z@w(tMA0?qZ9(SwI0?m zaMh*{b%@?hi{!BK{H>>0`;i>t?UJ9=r7!X=rAn*fY&6QZQVD)rHd{rp7OxLDao2a5 z@orXlg*;MIK7w*FLbJ5ah35geK8om{Dd&4+Ux7*dG$K6;?0H%4SBAUFtPu+r_(M|| zY%Z0()e}5ZspuYH5c-OB;{n(rieGQ5Jp`4GJq1T1&saFK#b`x(vV)J}nLHS$jeoCs zT%M&q$j77-j#lJ6BpeIqz8K(ckLfuW^>byAljpKz2G}n4|{_r9`YNo7wQ& z@iVq?6S+j4&z{!D)kQSXwH-Ng6RC$fJ_XPYX zs+}ABPZIbYrrnMHyCX0PYF;yo?d`PC)N83l9$jtONtT2RLg(Os(X>>o`zs_|i!rAqrnR zB{7&_(iZAo$GY8T3SSSyH#eb)-A+fE>wGRyh@6^C4;ILyga}iKBC%hP#7by9fiK8@ z_JqI!qt(dPlb%-DOPTaIt#FO$FtJQ^`B`<)IfQS#p6zN#w~3z5Ae+6p8A|Z&NRK`3 z@g_~DQH&F#oXRLWvoD7?WtBK;>*kV_q*W{=d(MFr@-^ns+RPsEUF($;u~D&lA|!_5 za~=2M|FBqVtqri@laY2%y<+Go{5Io_H)X`{j3LrWr1b(pM{y`bOw7sCgrT9KEmG~v zlId(E6EKY#v48Y!)U|Wb-A*R_N_;iwMaG9=eY7scg>W^u>UEmxY!$t6Z6N%sb^2ff z6tvyblr1uf^zQJL4S30veUA;fvs92BOq5q@)KEq9r_+KHlGAc8Upj{K`F8P?DOzHy z=szInB?HLEy${h4Ul>c&KwL~u1-mAvrEeyfFAdUKgZ9pwC=tU&4F(^~^x#9Z2BgLH z5p*}m)#jxmn63BU5H=*{hBO8{{q0l<>1xQG*(Pf$j%$g3q}My? znT1=5Lms5h*^qxn@<@AVB$(^4qdq41S5W;!HsTibuG|S`Dc~d4V9{36^W|8o6}41i z7+<#4Xx1_dZdM!9u*PV{2GcSS4-!$-ar>$jBwXSlc85r%h(8A_En{YObAg`&9G^m; zA_%{>xIT7kx-RgEYK1SCTaKqiWDhQ7*6ME>1{Xc=HeD4Lt|`1 z7M8^~%Bva>XzFPp!$HH1pc5qHm8D_upQ{dVk z{Yn{_ciF5IY&Sj!3MNX@0)N4F&dERhV?>PKFBGc$_kZl(cqIY?d$^9oBN5aAxeD=p zbBH9oHqhZ5M@&#Om@QY{K z7Ip>holL=2NUMXL;gAoD^l2>r1QGk7?81?h08=nhEXSwXMrpNUJzfl!Q~Sx(%=Coj zk}pm@&YkPCQ|J0_LK)A4PYGCd$Ow~!U5y}?kWo>JHSz<%Y&-sJV8`b!Mz)v?#pqq( zc_+iO=I5?Tuai=J!ax{K&g6XMFxvHE(@O&*W7;dBwA$#|sVCt@mTi+;V*r7OAd3HJ z6EJFsSPiETZ*CniE@)0}FM%TD6+o65xn@|5Pt638?kj}W^a@AU_;2vv=!cWyDEqo- zQU{KBbRo=K!|BFuHdpVA{YVC;hj7Wp6dj}~2*m{jf2FK<`FSBOPcFfPmRp6x+4Oqe zXz-RNCF1PJ^=fm!D8o;EZ;W|Mr@#*rDWG`6&;yz{(JjxAyk@%pHy z`jx{pD#H z3gR?6et^56p(R(52PWoI;#BoT8E;_kP=bLSW{km|%y|*RqjQQYE-H=jrMiulCezd2 zYLyRLkAr>P0~_@3?SrPsw9F21QI!r=dTkqC(ug0hEqD4r*ZlXZB9m8Zy%rY1V27E{nL-sh7FbD$!5ig(1 znA@rGZK4vKXUfN;xlhWMa$%qCY?h;2OF|Z9qZn88Tj3!Lg>inkqALiV|3-E%q4XQe z@*bT;P9y|EB}BoQDRztJ0Y6h4vC^d(zHE%CX2nv6(%e)2L4!r1{(drNmvKoDZ)Y;| zh{H<6U`v{&QiB~Me@>ml37PgapL^%teQuc9XVRBEk5uo1|ET|B^SP0xfywBf@K|(s z;*Pkez!&S;dfweOwzEmDQ{41dsyC#93E!1ndbRHFZ{s^lfi%bb~&%(H^;n8hG886o4)M zi4YaOiXfmYl2*rX+<@a%ZeR?hfytS&W@?He7$B{V7_x#IG-+snuiEFJpz)EmWWy0B zYG7w1oL`R3IcjJe&))g1Z6nZ^F}BI8O2Jce9jzu;Yd$|t#A7wN5s^2M$YSUTz}#-q zRa>~bjY3Zou}^Moz~>wF6@~dJ8~2gUP}q==7!xG5T|B49^hA9y)yz$PKQ^Y-d^KuR z_DS9oGG|-jPq48NE_i2r)f$K^h*^IgJOEE9>yZ(|S{)VAtTUrzg!e#Qx7iDi7(wrD1LjD-cJ%5T{$< zuOT9O@UPjQ7j^0f?AJS*HyKArTJe0 zdyY$gZhE~haKurM?DI}zc5a2T?C)PahwP90cPP$T2kS4j^t5o(>sk3UYimGgCOVbq zpHXVy4Q9q2>>!eS?4MgfoOMY>8}_#gL9g_TX|gqHdafeA&9c?%oefhsjS?v$1i;ec z&urMM>hq&E@I6gpUw~9)x-FafX_u9iRAek_(WRKHl(XU`GoPo?wtJm*XYV*t3t+?C z=~Ra}{Ev9YJugZTlB;n>3Z~(TkOo~wmrE})m2v{A!$OdBuKmVh6)#SEC&A65SDT`} zqF0sb`i-7&?N|q=jPHpGH-lFrglVO(>V`DXL<#vB9#wCBNkx&6JP?MQ$|epHonWU- zHhpOE+(zx}i$cGBJWMKF;*_m)&*8gMW;NfBMmj7H4e^1P$5*hxgS3_0$(?p&R7RsT zk@SDe=jXs^axepDYfrk&NudH|bk+NeC<-m;V;%pVd;l!Vg9m=aSQIc^n> zijz%TJ08Q?JEQGf2B@Mqm)dZ+9fQXQ zWj??5GZw1QGy&7K(eP%xaXQL)ByJ%0Rb?QeLk``ieF-IZ=rmO{9cARY&V&BI$=WdT zGv~t@`56-*yYbFr@$+&Q95-8+gcuyh7n5N9vM(pRB~{F%IPbXLqV9Gff>C)MkLHOz zcu_5W+Mc|l7>-nNi}G%ZRT#x;Cw+IhjKjNvaXC)auGX&9dUt_V64s?k!QvR6R0IZg z5uI@OF^hB?1B4I>lu@KNl4R*o`nKF&uTPIE1EC{*RT1cd|E#rVO0Zh|^EjRuW71~j z#(YLnp`OpKH|a%5jpx?ZY`!YArb8i-^RzfH4InGOqW@0Z3JW2KC@&-y=pk{xi2I)+ z{&(OJ^>XuDOAxw zn=mk>p(-ed6{v;|hH@E1fGV1c1q|ovi@Ju;fpZd2dw)9SKu)h-R;zL}^Ng890 z7QztXa$^)BE>IjxrrX;Q%U(21^{FT*smC;yygDFW+!q{AysK=*0yu#eHu*O;^+K zK#$F1Qpt_-(MB>-Ylw%GJ3wP$T_*Fnj@nxSe?pXjBGB7PMG@VGv>_LHahk_0vZwy9 zZ6F>E7?{=>=p%QDASNdBRFXwkD{AaV`~>5N-s7(FVbWiwY8W%H3pQfbC}^=%_+ z3yyqvOz=mMHxB+uQ#F>X1Pv-J^bUORuIC z1opRqzXI|v?U(#1B5UPPoPPZCX4qZ%pLNEmY%QTzkn@>ka4tn6S+3RT(vJ#PgPAn)J?_=86!gz*R;K$$m!~QD_3``ohoPef>k1 zy!UCGzw?fNN79=(8<>NLQ0dSfj@b{5Eo-(7ArNH^QMUr#S?Y(l3#M$v%+fcyv1mHk zALWn5qjp)gR3V?;8l9ooag%)RgCv(kAHFKi-CiNF>g_fBe6OBWm3LP2llIQ5JnwuJ zXb}@B)uM)ai7b0*OOtxj1h-qu>$W0#5o z&2=EpSM`am;S2l0zQZ3qIGA?Wx&IJ~WwvAXt9wOaI#Xya^s`)T6vE~BfZuV!b*iVE z6LT7W&$iv@%k9pf&ywT?9rx(joq1h*e$-CAuQl{55RGw3C^z+4Ki59U4Lzo!V1bK> z{pH4J&4a3Y{u7oAV=~yV!v-ZLKF>;%K(*uc_!sr%WVI(u3W03pAcgV&lmOn)#~hW} zmiYPcY@!xeT045@{p{o^;j_sD&#Q>D=qI8&Ury0Bj%9hO7uC5SHOz}Bbw-mxFquq5 zIJc44k*0ej+)7lIG5Fnu_>&TS7UADt!agwD+e%POSQQ^-0%-_N|1a2yNAJtoLgYeih;0TjKAbobED#I+Y`Z zdZryLM|$cm*)W2UV?AM|GU?PY9W1DBj||xi@K3>B^S`9q6fG~p z>KrQ^rs`(t2QlPk!}lH8VOSA*Jz<+AUM0FxNd5cDf1+j4kCW=E%9M7+?%yA>nez?JnZa zG4%s-2-NIX*lcCg7?Y;<2g+kg&<4DMuw1iMkk`Isc<;ZwXsX2aG!{{~#){m~|%^v>&kJhTZf;`@hg$~)TOmoaq3 zD_y!_%V@HB+Ke-jR@5p9ZF8vACJiws6=!ah)7^$)_`(Q$dkec*7-c&o-|Z_GhWR5( zSI^N!~JT zdVBMJ;Io<7-+$jHT=y?)& zJOZYc%!0vbrTh|ZS!h5)A&>~GQ=wk~3C)~LKMQ0UjS7+p%cV_V^*6={{AmIgiWMTy zzH~0pg+8GyUp|OHmC3xS)%4WN4r807E;VwPU|7FIB5BQvpHxr4%@(Dt6Yq(W=P2p7 zlb!usoR5OuA@TkG;=Khk*;CBgVbG(n%~n&BQL4S))rMv;S3WfdN}{rgTl>D23?PkB;bu=X|! z!DMBC4{=A%X(Fe9u^7BfRy)1#{D$E>Rjugzv(`4V`sg^=_0q?%Vyw=G;?8d>CM(yg zx|MrGp$r>NLGlYye-!OMVHa+3K3VxCp0Q5zU6NPBsZ$|X84dR1!ni!$cX7|V_N|el z7c|L}0imQu8jakJeWhnSsMZP89aa-6bC3WLPB!NJq)W{}fxV*nMs)2h9L6{$5;P%K zXVRTaOz~4?Wu9gIDKvk`xMu$gi0IeWf`k~HTd~M;Uq2n&{c0w?<|eUpWs=TJ#l*p_ zI&;6p)rq+mFxu0-MGC)@?+4)hY4X0sEyEu?3tKqUL??||d~Q~^^<;Flm>js%^3Wai zw(XUNF^0&OO+aCtPmx=?7&1bf#25q(sg7%mpwnr=E8@YIQBjXS z{>Y2>o{09JzT|T_U*XTV9Spv;qm_3UDiTMWV-} zQzHM8++TtJ57>uW^k0SP+lq~TiEZ?XUaL+fV?|kwlDkz!Rnz*#pXkHDO2j?krJ%-= zjLr0CPSImd@=aiK#7F};^RQcMOR$y|5~W;7wz(IWeD+8>#s65q|Ypm5xQJ$AXnf9Pyt zWL+V9-?dUf-jUdA4FgtTt_d<7pWGheO~NLPLY;Q>MVpO>yl@I|JQRxUcg5=pUWfbr zm-$mOzC20ScQnC`v%_wfy4~K9ty`Ebxz9%DvHWH^(X+WqCemmpx~&^CPj>n4t6e>u zyS;ii6b?&4`1^w$@7d>tem6_O03 zqJ@e2RI)FD{`*S$4$%|p&&ZAn= zA4mtGFLNkGk>Zzy4`?_h0N;kpMhjFxvX7Bz8w(ZS);z$jpC9=<*T8MPR3QQMG+LTS zBdfIukxI%wU0b~cHgvI1dG3tv3M~Stuo3#oun#(`p=xj@x?uzzj`&bgFuz1p zMNZ;1Zpi79>FZ!^G?%?xqJ1$I;p}j|@9nt#vYRigdv$*>#y0jOC86O!_0510&=*FT zN5T6pOLPi0m8DJ1XBXY=DVIG9Ruw)Hp*P9`r-+;{p71U11wL`H1Lz5-@C)MlEJjO* zB3mR(E82ewkJwNi_z-z(B{(R;8@`j`?4@9sH>H5<2%wXb@d$YgpCR5l#Um} zN@TZo={KT&$u@iw(cc*YDjc|oOf1yqHni{}eiAFwp1PgIh54phGW*l>x>oYLh&ywR z6Ad>V40Avv#aA+lVmgu5qYIh{=MW=D$=OAw7|~wdMzT;!HUgyehLnq1ls2ysuh8Fo zO7Z|(5^B&7f9YVe*ZoJE0~lnZmu}=(4K_|S(W(gZ)gjia#A3Z=CGK)L5GR4H(1z?g z(uJMnX@taX+kHm3ub}tG2>TY^Ops*S2n8sGH-se?#*JLCl(MqDQR%2B7V+sar5nBq zJ$rH~;4S?^B@yuL3sNZ>3^Va4oFLUZ1{%HNx?2`a`eSHa^fhZtuS00O!j^xCdFKd> zl0m93Ws#jP^6WAADv`s7cAe?Kx|y!WGl$XgoEqn%W=}qj&ecs;)+WBxvAt?r2j1NR z3=N|hWM{h07kA)M#rR1(a-$EnQ2*|VlWIgi+rA8zscLJQ)aS|iq?N%4*HWW1Nx56% z^fl>Ai)ELoM){&!Dh9qlBb@fiDE{)iAOl71XFtTa z)a66J)r-ruV=KBGm3eCv!zAuyzv|XEdKYg)9<^D-X89zH$$8`!;{>_xCHyFcf2_p4 zfc6RvmvLKM4AG|wSDEdO`TnJyFUHF8`a(No=PX~@VA~jAW1??mzwqi3u2n}VVpLysN8~q@0bJoK?V?%V| zdd=~;?7#U2e^voj=m-kY4q`^R%tBfu6S>%i2&0no3u6YEvEE2_8Z0*Rb$z+Wc3KOg zn9Xil$7-ryZPbEsxBcMbuX$CK`^^$KZr%N6<+sXjVV$!9Gl?$59 zLpageMMg?F9f?M{=-@cEr1a?isGu#d@SnI}66Q+!t_M6iDv9^x6pCV;E?O3l;-<}H z-eNoYlFz%x9OVHo`gZ*C*}+!)Z_piLCql*;B;;iN3C77Imrs=nltAFJ4qZ!HSaYb& z7iSv`x@tN&g+7Q4WAdgO)|p7tc51xZ1vlM-B6Q?ft$7~qv~}IR%sC3iUNo?b_cu+& z|6tFY?D(g9_Nos3pgnv~g{Tz$o3J?63cb}nudU8%rTwYizf8)xdn?B_;Y7OB zxL+a^$46no%bY@D#17+pN=FCUhF&BVAmv1f^#+H>j?h}n=_sLV2LtI{v$X_CM%tYo ztz;iPl;{JY4sBw4DhlVv7QWV>)vm4ehKe-f*J8h&hu9D-TKLCKA4_hVo#N=!KgILo zo@`bca%oaIluz3atXb&fbiuu|H;8(AQ;=WXnlGu(Pui*vl?c*?9x)xD#*8ntGhr)+ zD%eBa3>sUr+>mR@&fpYt%S)X4Co=YRW}jiuCAdu}hxMf`$s{y7PXNO;2_t4Suw}7o z=M@1oOJHOV4YQKB1)SG?QgBkSORz#IJj7fN>cc&$IIND#_dWis^4KSk#grvgZ0fkT zj3UCxi1viN(J3wp>b87dyQvsQa^6MTPTKn$pb?FM-e5M}6C3cnYS^;;sT<-~k$Yf} z8X*dAswR4BJvHmxc3qbXN_>6FofRXkahc@W4KtFRf^$yW-az?7PaE)LhBlhF5D{ax z=$+o_Jk>X&JsnU-28XhqIWQKo%hTsa3H`)4X|%&9zTl+!SNvyn;r9ngVmjugrZwLv z&2T?{=6b8+pM3ZaX+*()H{O0H^j9_DB?oa1+3u6+>n&YM1tY*DCO*Y}4o{_&Oj6Zlt)yfW$5J7I0PmqusvG~7j7 zg;H&DaZAu`tK)p9s|wu7o#!Qbk#H{Bj<9|s_7@TFy!pFq!#e6nQrdiFK+~32@fiUtuekX@-lx&N?-)DP$d|D9J>|jA%U2k zp&l8=i#&o^N_pbV>{M}b9J&We9Ok-lPAQT}K5fI;V@6mLBl9|&)wuP zG<;1DJrMhb==fMUJt!sjb*fo(Yc}V^YNH-n)%`Xd40nupE+W-7O1EUWMUmK=tqGP8 zjD+4A;2))Dk*28BsZ+d{5me`hBmjvfR#_ky_O!V~O$k6*bEfHp66__2bm6TZA4fEY zOaBH;D~A1$SLUS3tU`FsP+@j^ZFefB?pFSkhJK|RiVC-6ifw*j#q`D{Ivrb;v6x8) z*G+Rj`&hWwL+4!qqx+8*?Ks2bK9}#Kc>k&LzQMc?sHAA>3RAixmex`ytCKluEz_r{ zDCVNALps{qb`{^<18>=$w{vS`Up{WiC{;oU?+!nsD6~x~f=~?EAux}T7knOw!iTZH zedUhfuJo}Ezb~9REXH)IY5P(gtn#Dypdr?_!|rI#7mCr9?AGQmwPO;z;+aRF+*geH z9;4m|QhXG|Zql4stZy#Wd*m{S(aQpn6-Df%)RkxPM&;NRi^6U`n%A<03xAo53!mSL zuY1<*vR^_k=}Son;C>@FHXco@)GWV`*e-d&LwF^B`662BDluy{mJj^JhN}N#I^7w+ z%>9=sA6d?gd;mnqgg`}jx#Uc%8=qL0RjYGGrEv2k^_oSwc6OO!8Dz<`SHRwh5fyzA zZ!q*@DZYl+Zzk1yeBO(;kWE#FavUM%ZbmA_lZ|v`JRWmr&UeD?#>|t1HHGtW%Ztn_ zJS9fHR`V;qPIb!kgG@AATVy`RzqoGWu z`Mrf=iLrdz%B^#|gwj1Mvb$Yb-lRO`{zNuRwyv9eCtu`Hh*RctRy-%(=b`+A#O;T; zBTC{SyFAmCZBgDw>NT}f>9^G8wk)P4S#Qm|Yp(&uvvlweWp$B2q~q%r5Ycx>EC(-x zB7^wFDO^$+ut|7mvO7P7;s!taF5r2fsyya`V}TO-Df$M6Ynmn^ ze6lVprmC8zJQ(!RhO7-RDN^WTytvM3{)u3Rj5+Jav*SxUd&c0fk$MW2da-(Lmh+Z! z*%G?q6d{xwDe)izq%A;p&Gem+Uc%xx651Wy$c_PRwkYUfwd+)y7olA49_4y6xv!O4 zhjCI*W)#iqU+uqPSsRNIMoc%Eqqml59uOR?zz@EBd=Ao)P3 z>B35U=wXJwpqm@8Os)pb#7q_&4-Dt#iIO8MOw7t8TsJ5p0=)wEe?%#Z5tLc6@g|i_ z1v93cPcr}ZpJdbz<25$d`w4UIFX#_wPgZ*OVMt?)#VP!wzA42rPw6UpB@QZ&^nPa<{xaoGa*G4yZ-bBrLzINK} zn`*5qxA=6nwe@e8{VtN|Rp5B}&N3N%>a?O>7B$LUP^7VIR)-G*=dnk`-{0ga8r@4JNQE5pr(HswqVJiYS|+-tVh@ zWuOgV(r}3N2j*ZPNKXH%T~=xhw&om1H}1JiU{u_xvl1R9PK#1-w5g_+dn0}{65YZ% zz4MefT$g*j=iZ52#4rgWaz#^UQt=guKWe+K5u0zn13oi#m7;$K4$D4QTu-8-MJb=1 zw%Z#iC3RM!bWy!Ku$`PxV80m>elR-v@0#+ubBPs|j#PBq3Bvst51?FfqvPObQv<1A z;k=GkXCv&04sJG_8;%6=1wJxSSMitY*^av?Cyn-kHoX7kp2!ZX9A?pLBCbhLkBBZs zxS=5mx`27KazxiSDPjteF&y-fe3f)@fG*aEYCLq3CYZ`EXrZ7 z+eirNYB%e8g74P5%f0#scl#kmXo0okAH2LDPpiid-ygs7yeo7Z9ZcNRmgQ^t++i-u ziDgb}*1NTMBqyX+#aTi3xa1qFZ-$6}PtSP{=e(~(NWy?8V#ZJ+N3zA)B|8=nGYaT^ zc--`uH})vUUhd}Sz-GTBy+QPd`&3`(M-#u{c@=S2{k*^Ynn|$Ugpmvsv*#2Z;1sdk&|NDP2g%*dL^@|V-Z2vKtO@0k0Uk&qra+go_*85sB z*cA9|wY13UJGE9WROnLi0iwkXUBRZy{{8*QJ!DVa>@X!f_5%0f9Qa8*DA(AToht1?IG{jYJ- zw%G^E7XF?T`qNiD0Alu0*GEw_a9bbnTUHw9lRS%Eyyf)Sz8}a$5NGXM<(_G_ae$WTX{;V&!YYNO4*BRp9C?3-it^I>_knwpaAnS z>ZIC}V|||Ho2mJvYWC)CgQ@+J$?Bk7ooQby7W_Su!E%^9m}uVKC|wG1!5=KPv_(oD zBe1>p%s&zi^RDp;7=O8pYnv>H`%y4oJFJw&qA2q9?6S<2v`*Hghw!ZJYLAJ_=aZqx zIDs6O;v*Tp2-9yb(|15i@Mb&5GCKo1mHhY^yVU!&mRyw+RjJ+_wv1BtFm^kmXt`-$ z-%eN?G=F>X<3&{?bf=o#HkjLQcLDOy_E(?;CM$BwGv{0L!vu*F7OCNxP>g)g(;l&B zjZYOFe%a{u=ltl-~ z=l6oCid^QLp)Uk>+c(UQTv~fX`;nG4_7eoUQ8EBJHWI(sPA+C(3o-$dBom94wf!&) z;lpynt{`~IA$GsOpWqs$a#ghYX40rs&g;XjnC_L&i&VZaDxMa-cjW4L4e!fVK^Pmd zb%q$dB-@uD{+(rghi!sS(xQ4rC*6iZvymzqsr*4doiKr@c`2M@V&c-sAKeSdW-|b= z`Ck##W8dW2FlvWZy>PfnU&nSKoo#ODxL#6^fTu}4fbH+vqjl_Gk{KlSx$ZV0vWNF8IQaBdKvMC(gG+#l6STsyRU?!j0Ijz;pXeh2`uO%! zFN=w_Nj~LiH_N-iKjmkA5`hfI%BNXAa~6umy3iV=jS0vs36Z#rh)Z6VCh?25s7Bi!i%V0W zgwkw-lZW9L@k?K-2+2j_fH}?NIvM(5ZU#Cktd=yVI<_!f&s@!|Gr2sltSX73krBtA zMr%-Jg(PeU3_WB8&tu&G1^%Z4>~>8DmDfMnHzh)+BBMgD&WF6xEpXLFeHWg!4{F7# z6)v+)zT>ubvgaJ3yBNO}JhHc>Ue1B|lY)O5{Xb+QeAxHxzJDju<{IoZ%KW4z(zAn7 z50{OD8f^so6E|eJ1zRzEE)3=(te|K_2T`ui;XpMMM?7TSanl$d4kd|TpA~5fWFNl$&x||Dg;G9b`+WaC>_PYie_0clPA7DLQnL* z{|j;XFqqbH$zFziAMs?6()aA2be_A_>AH9tRx&$lTGMKZu{rGzZJuv$+$g1YaV~Uk zVX*nshcO_x!N?V7ps|dvQ+7=FV=XyFl&7ws(Bn| zC&`J6s|cD}Ur8h8QqZa{9{D+NY&PD&F7DLjqb?i=FU&Qq<+f)tJ(y`+IaJ$xG?_Y-cWpODbiZF$ zkMMra034cW5(U~S_2`!U#wNWx)b?j?q0dB7t@R?vzcWW^cmlKB@w5nDhNpR<#l?(y zRcrDd(s;HrEaxZSAog?1i7a;N6av$&@U&<%5h|X;^f!{G`M#&(&d%EYK-Bq@E4`9# zuk*oU*3=f6ShN!sgX>|Ampjw^txZx~VBbm;bKUMHkKYUPH5h+W;ohT_WcwJ-*!?}T z%{R=gw&7aYiP-1Uy4q}q_1fAq7n`>JG6OH&F}@?BOTBDO73swB24y`YhbYQuoMY6m z%nhh=(0N5d&IHAuLY8vtcoWn($Q@P@dqIEdV#4e-;cj2=Er;L7?$N-o?is!*(m*SG ztI#!5!+vymc-YUo&6#$o+CLGBpdsp|ZSMDbA|Qs&5DH^SsX8Ht?vovcw; z6!WFwY`e%?qeX0TM6Jz!#KJVV#toXs^7)9eF0*?v__?2eF)C|eM^sfj90t=Ab>0G3b z&Y6f{>ij^`g$Up0q4vzLWcXa{mzL7rMHdS>%~izA)auVx&2zI@`%s!!px#TAF-$oH z8^4$6)9Cy`682%(zq0@{lN$x|zBuj(b#s;J8ijMVHd!XbV%ZvWr!_Zm3)_q!YG^w~ zYMYugdW|PZabH{tT_B`<-|2n1b3WKx>f|j|Vi+GlH2GNffmbknv+zH41~@TU@@3gE zfIBIZ7_%Y0LT7Q=m?t?7Y7Bm=jmkZ1KB_8~ClGimb{qH3i#)?PWsM_Q9VaULspwyT z{tw)W8zt~V!M`7u(&19+&xFaI8|7E6bvP3rRSH>QruozWecK^4S@!Ael}wQL@f|7= zTDjnivsvgf)O;}h^Z8^n-W^Ty|4}{)p4&laJ|X|w=>>npzLQT+;L~5xgX_xw%$=3l z_G!zIi?gCRX>U)P<~BU*@Xg&Zk=jPx+At;oD%Go9zmqJQCy3YR*!AZm`vTa1grsla z?d&k@JCh$ZG~Hux*X|zoX1JCtno<2yG}n{KqBAaeqKt4=QOk@{B|F`wX-GTYguu|^ zhaKPvmoN#@BJpFb#+b1}sLD|j?L1FCb_4Z$7V&;2b5h5LxCI8$d}{8oiln`Y=MnDx z3Qs^BoQRyNYCNejL6`4PH5I`?*P_8icmw1qLm8|U0{mau>?^V;YD2|v!eZ2eC;f{d zYqgt06wFQk-Owhc7O7S&cx;dAI$thN!ZGQzn8=HykrW4>2#n_oUG?IAUodBtcD=}U z@a6e!d0IPu%r^P-!y`^8h%HE}AzJoy81todOUjp})nX@co$4uiM9H-$CGB}UM6<{w zp8+NT!YRT5LwD7f5|~e*FHR(;OgaemTQgAK_ut+em=o#(3^hZV4jMGsJ)n6{UQzTuHdmf&DqEe25@vir(81HU@D61qc z=^PplZNXQx;YV-DN6O+AH@P`nu}*a-xin(E*tn?ITFKfWQXNiPmD(a|CcB;jFl-(g zX%LdIXJXLP$#=RaDtHT^EV4|SL~15HUlSK!62P|EchHHmG09zeiSaRyC`#7;$d{Dk zy52vk5T67!7um#muw6_lqe14fh>h3nb)=?6gZr)LrtA^+RXgqlF0#2}j%s`=@K@C0 zM{U3@{2c%|&J@Q^?#yOgH!>URI2|VSU_Ex$4*d88vVyYb+D5j($#9`Q_vV(2$vni7 za>_*sEf@8fCQA~9gQtXQrG4LVnm(_^!>7HL&T^LdN}#8Ygs90!q=6_5B8UK?dv2(! z#xTOcQ8zVFHZ;RPE2Eu2q@EHkLd?UYmLpu*^{q?08D16Tx!yD~Qt-$RvX^$+ofF19 zsiAcR@;lPh1X?U^7mj`=&6jZeQnK(*NcRr3EZ1jCiHbR!O=51mVb=F){aB56wQTAl zwRX92!c*Hw*NQAQI?jndqmg*OuWD4r{(77lK$ZNl7pIK$%$`iQ4VY-bnSaWW2ww=; zrSE#pO0#D%|E>fte5srBK-^lP+ZS^QR{B2}TkU+Z+@DBg`oE^-cbu>9i$w`NPWkvQ zIMAxc_EzhhhpDxv-pCc`6}tCAl~kSx)v>{k3iUMze}5t0gPE?GIO`0L6wjGr^BfE& zRz^Fb7WTrnlGBz^Gagk%w?mbf4dOXaFbm+P@&##Bk&%qpzQ*5b=6{kuM)MAyd&IFQ z;jdqUD_zrfaww!;Z)gs4+Fox7@l0{p&7IE+DI9I~{5F^@{0ihdfr={aS$A;k7w9W! z{SgAbg)5N}u*#%Ep*raacb<)hEV2JMxUU>n0 zudowNsdI7&R^g6QG$!j{_u0_z0?LME)gMv-SUv7dcaz zo?7ZO-nT$kq3YdCBAY4|*NJgkXpa2%4Z0>9vLDDbqOfjBLB(XC#@h>GeFfX!SIoD7 zrXr*rW)3Ln4%E)8;c7cltw?{oizlYdNn@;SrrmMf?@;V9EElbi%mzm|w3_*HMJgEe z0BVQmf+j3Nf#?bZfmd=TnB?m?tO+Qf0%L^FF)9e>f-wsWQON&c3W+jo68EBMFXP#w zP(12@QG`ic{$q znk9U34RDD>P<9EROBnoye}ti-ThX5^(VjWl(iH!`@4Ut(5y3Xwzx<_B@^Iq867w9r zQi%tmr9>cBPlN=*mXFvX%3a*Yo^gs*j3mV}(GO<4sl2EeBCihzh@Npc+C@Dw#LDqS z(13{!b5j)h>W~D%S*xYK+Jt!0Q^|c8zOetr_OSe?F(*ft{{iy*fjLJU-S-~)>&b9< z|J&jA{&$;qp5B-%>zzM^kZzVtKI&-LFGcE>eKYdg?Qt^tC%wM1wE-viU#70bZW>+P zi}NO@9n#V=9-HL%N^uuXroE;R4^w!6=R-sJEfOofQ6DIMr?&umFlpRc?obqj(;Uwk zWUi|{qAmax18KZ5{`4?!R+62r?TTJ54HwPjF8HYh{( zO&_L)d>~aB%X05lpG);oL+3Q-*T1!t{YDP*LbBT{DJtxWxGJr7;ps4ZN%nG_HJVG4 zO0`>+VNbRHYOE*A3Hav5v`_+T75k{rQ~coZ~Xl~DwMlE#FlmSKJNsl zYP6fcAvpMr+@40|x0a(1m2{CMq!Bac1zO;_(F^L-F=ZEZrJbjJk^10L^q!mhR0_sf4F0TCI4v13gFdPeuj53>mkXURql!+(v}O09zsmGv9f_8M)oonTO&KItt#+_8 zzhHbxRP>aD-F=&@p42@UfNl#n$a&1MDY04Eb2v5T5( zbWS1gfc%E@qK{l|cI(9_W}HtfkWYLs)^OWLoY^0miZPJ5fr{&#q=<%YMh4f>1XQNgQ>1MPL1VYb7Q_ARNz={ru~!SrC-0ei zv&O6UeJ58xU*2bOeH7k5RL*{E-^dUiIh7vWh3T33Xt)lLKPM3e@?SK7Mkhw;XjNsc)t`Aim=Y4kOwPBr zBKh1WS$V-@&DQ&T#>0zhp|1@4lCBLg1`=Uk6D)w#P;_$$}+8X z#N0W7^kK)x`f_9j$b-bAAxv8)STFP?W!}Q=a{)%aWvD+#<0UDqATR&4c&LH5)$oTn zMW6O=d|%;zIwkUn{}PilYdfE9iuxd0%pH%Lu4NXN&EQUV>l(f5wec?ex)Zx%7t%Q~ zs#m1`DDIsA%MaKEFY3L5#I2TzkRqRtL<_mZWYR2WgWKt;m2b4m$5~~DR*!4MfIhvW z7f^be1X5R^rS73qt|03te%k_}8kP6SAW%S|AUvLp<{BE#qO0DGAmPky)0m&iEO zARqf0(AkGP?7l~M6f0x(#+wNK0bJ1afxyFl3$lRlvOF|31=B1C@~|)J;6#>&qHWZf z?Vfk1{2_kc_V`^Y7R7mRF_z-7-UthB=*1P})p~RH!o*QY$_*vV&?FK0)FZNd1;5{0 zws-KQ+et2@Okxzh($PHX!HSxR_myR=KT*P~=5V>$bkANRvfYIY&<2GF%9wuw-^Rz+ zMcL*EWf2Bx5zF1eSVol2o22}C6Np!$r9d&+i2j;x34a&nD?MPQ@u}p&P!XT{bnFlv zmEJ`!-fEbkvVrcD=cwzRY*0l+rh(u$qy1!|Z*+4T`Pa>DV~FN^xv4xj50{DHxKpXl zFUxUO@AWz>%}p}-*Lg*?a4TRH)7d>f$>;KY9?(Bh-hPyO_nbH=REiYnbA)uGm7cJW z+Z}$gT-B?WW=aj7+MZS=x)%e}BtAF^sNa$+N+Kq)VG~4=S5?BF+5pJj-V%6%W;`Bb z0wqs{$V0DznlA8(lDIF>t$X^??LIdeXrXdiT1S0D<}+;>*wvOGRWI?B)IQa-7p-DO z${DWM=pw=9IS290$@*=azb9m5c38X-p?peG`@WE0g7-HU`W=>usAy`3B9Y>Fx9FY= z`FP*3cBgZg>uhI-!KI`mCnc}D0Wq5(@umFMC{Xql$jK4R*mOhZbjT)~yk%kX7AP%I zQE3KDJAsXRB{kt_ikaeHeiSNk-8y`9vRrt<;jq{IilzQ?%)D|^7L$2m9NTXzjY+&d zYFt{ub-dGxxnUBDdPw!^N0ZWTpJXK&1CBjeNix3lVadJ(=$|3!J6uDGr1FT$kD_{Z zQChJ{EZ9=UorKbQ??I!(0)@b?Sylw}S>y=|IZGovtimI?%ajKSBuh z(T8Q=68RX6od;h8v-9{f3Cu4b*-g4Tl}+s6>&p9DJr~=>Dn~I|Pv;J?MWM1aj|Z5g$9RapIT@EB?h>8H**^5SUTO<|B_AD5wCP&LlF)YMV zN$H&5h>6y~O!ZsY^o=c{EJoBsWBSp}DXD#t0XLIzLy-+7 zkv(Fx1E?t&yXO3{8)S;`DZOS<*q8VdWM|B)w#lFv+K1`px|dED#LSqVluq-;LKaHX zwpNbaxYKl%F3j)5jgYFhOZIhfzX<&AEdF<}kLA)32}Lb6;}vyMUSQbHQe5pN{m>M~ z+AMzz$IdI4U7Oh*gf&2-1M54Ou$n;9O?%fMi0UAcC%%UI;)q%!P@)G?gioYSo=;3R zG-ppeZ$|p%Q-@Ex1{>sxnIh|P-uI#k_`cG^kw6b+l&lRDj8X@&0-ESKgGWMN>Lbgp ziJWXove=g~R(;@41~v7hMI*+#LEVbb+0bP{71s(yPz@1!^eAo<|w4Kb!7B zcXPNf>glL>Dw~UNCQ>aG(_CI_Z1tw>_Qc%prmbJ7f_QI7c|{Rv&!a2 zhwqimyRC$-=PFyeQ-zJVO~?suVdfXT@VU9>&+~a>+`ANS-6v}^V`mL66u#nHQI*Ms z%<07?`)Z#g;|U5GkwBU~c#7aJU(_J7xEB;h)r7vu;XkU>7YzIdB@MD9DvDwt)+&g7 zR0D8=K}O<`(}Nuv>sYR6NcchOK$b@^ z1Wpx14L-Ft6ilP9==hQv&+BSm;KTv%L+dFw-KoorQaBr%o>3@cHj-XNJobFJQE+>W zHelb8DKFwfhy@ljjpXisFVvTyYj4Pp5b_5gmnda1!4R=Cf3IV+jYVyYEK3 z9X+ubHRd;wL`VFTp89=IW0DsYznwv@kb)C7R8E8G&6SEVR_s_cC>d|;yUc>X zl{l4Gny4-2z3gc0(PmZIO;A7Kyo2Mq~PLs0@o_py7WW&$?K`D7f0;Cr0R^+0r? zF9Uypa}q!N?s<48 zTrles<6@IgplRm`;l5;TeuA*?tc8T2~1hnzPvu_P7rUN*X1NM=dgw1Yvn zi;C*Y+|(I$GWF%iJ=T|DMlL_%t#^Lc#uV_52BBYm2-4TTe$BSH3w|OS_k}RnC-p$l zy`Gl(OVEX>mxkCmE>oFodX*r~Wsqn_e^26Pk=v+n)(k*-Lz{Lq`k!0ad5 z?$4qC7*vn)3LFKGc!#89xlSJ@D8H-QC&m096))ee_6eAOA?eJnG9|6h*NU3aUa0N) zvB9B0iWidGmR`6u8&_$53}-YG(7c7iA_NcneTlw? zCI56@LMwwFLN%s$(U0|E8Vm4cES%RqlYm2AnyRTBn65z>isopQGfb^NR5*bL{W<(x z2^GpJ?itb$Kgt7z7o6H;2HZ-1Dr~u?I!q38gOb?GUF3XpILPjzH@6yRbvA6@lOAYs zsatL1_7Um5gy8Qb%{!1flA<|diZE($2bQ`FW=0D&EFFW*@aQC7S5X#mz z6Js0F>Bw(V0C&TG1>-`qYc^-l)xp#4a1s3W!5+MXq*t4~i4w3B{z73I`RVN~x;+2) zW3aVXf(KsnIlNzm)gSN1=Rm<6p-lQO4277Jf4Zq-`-;m!VoRj#?6+;1G?qh`0ck^504b8EO!GtaK*wiiO@h5L**8Vo77h0Fp~WiVE3;N<(Lh-lx5 z=c>P7PH^vpQAgJ9F_pkNinKTDMU8O3$8)V!9(n`a;1nf-xo8msHeJ^=lLxhdp`!o| zM}Uk&3_aZu_z+&cLrUSmgx*Lj_S=IBHzkte6!z^nIy zS7gOY8u7H?U(<%4v=R3Tag{7}WNevIYZcXYTz;!&FBW&K7~4W@7!||eX=|w6q04!k3#2_mgO=5e#2ym*}K$svV3|HE8zAdC#QFEBx6CZTOP{(D#K*hTuZT zzKIu~2>E5y{}`dai+UzdS|;j>k^;X~Yn2b(baOVW8RJP}UzQSCX<^L6otvsU0{jhH zOsoaY0wm&Y17IKmA@?U|@=FbKw-IC62G}!!C1zHjN5#WeN8NkUn)T6NJgg8kx-9DE zzh9Q*S^En)j7UTRgAGrbRwNU~e`s*3p(z6;g2eT}L=FRFNqtce(X`SRWm!S)#+z|# zt!kU@Vv~xT(gRD2VDPiJSOvLuZ2O^zuh732v!D^oJAH@$0x`d=65mkl?}DG#$qsa9NdHs2z2NmHBxhT7Xu@sQn4FO$=!7~aD7Gi zB|siz*I1Os?+GyiO7h55wnu_8#F91e$FCcD`cY4r`7c}pn3t0}?&A5&a$4J_c8Sck zn<;3SSfm*nEN*&*9JzXYoSR^-Bw!+k8&Q8$wlBl^N67kJfRlaphh~aKB{{cv!AQo6 z>s?~h=ap)qHEA@0H}yzl>I6wblNvs-L!nvMSFMimz~0bIeKtWeIgN}R$L7*b-+@%e z+6D9jN<<&w&uQTKP>Fo*Ysh9x{BxXl`oSe>;L#uw{oj}R)1#N79B~Y}_uK3UP0KlsI5D?x zZzapA-lw$&&vYTWj}mYfNFoT7Z6OQOjC_%FPqW_>NuV!#9O-aH;CoqZ)Gif7VUa&A z27EEQ=T7`h#g)50*So%x9Y<%}IvD<)>|R8zvkl)ymhXVm!549vsf4HvE*ACZCK2gb z?cJ=~X(v~mQ*hJj<~G7j)R0~E(8CEj*DFMQd3uG_n_nqBtOenGrllwYu)VSgKY_l9 zX^HSM*!#d(Gs1LeRA+**52d_Iu-eQ``1TJb@=Nprik@1miU{8&(eYk)k=if@$_Yn7NvJG;H z?Zq-RG_rN8lWGdC0~h{oMJXY#6)a( zpx#K7n+?j?fqzWaYRDRGxBAH3K32A0rk_q>?2x72CN}K_z7+3JWM0-tyhFzL=7HK* zRS}6z#5e|;fJlgmNVkqUeN-CDAe|ENr{18qp|5u6H}h85gRtD0-Nxix;KsAIF|JRf zOe>f_blc%mwOP+AyP(VROHVuYHC(jc$r@}xUU$0rjI3Y6_P3M$9lV*$2(X#7sQF%O zYwhEhSDIXEabBpSm9F*cmGab*Z~Q#4PElCP2x|Kbi=@$1kK;cZv~`)%`<4>{qN#KLunavwNovU6{6A5G@;Njun;r{vOxmGr=JuR=yjy< z-zjafX|G)l8l-XC~{Cc#%wt6=ixZi z*LOW|f)WP{318ERP3E9#v)>i}Z}?yRS$*~g{xi?w1_)<2H?^@6FCFxL(b<@an6JvU zcI7OK9*Fg*(wCyuqHf*0Mf*w3=EC~oqQ0WseB7kmOn^+eL1EG@?Vh{yd}U~BRb|=T z$6Jfx}>PkDnQn_Kx%>nu`9VZEuf#JQA;j~e6rc4>JpX8~2uS`8Qc zD1SlNuId7zYlD+~8p?0Qtkv8Dk390Z@Ykn)LX2E@{-pQ0D^2#TpHqB)#Gg9be-_K& zJLg1*cuR;+{yKWr=f3z3Eq=DjN*{I-S7~Fe?Wv^R1`Ks8%ll_J0ljt}bSqtwI z{ijyMuQL@FOMq(vyz~f1zMC%;Rx>L<$PLWpXlF@>$KLiy7!Jy3F)YqQ0mbE|@iNxV ziF=cjSQT=h{4JJAU}O95rWL315x4t2dW#K%d zIH+2%L9Aj*wrdzl!gd8yQx!vW6-RZ@H$4heORhyrDyy~0BS5hE>WiK`f2sZzM~4T`AtQ?K*%#FO!NJA+8o(Uj!mowlxPnc54=yHE&9gK z$&(NEqRjx3e)j$@}3X)o{BjQ5)=(QlXkWtGrrU#PBQK z5w!bcQ`BUE&ip|uX0i!n8(Nuq3?)E)bfkUP=^mf|q&j0@KYjZ@6z#bR*=S z5ooPwFE2UcY46YS?<@N&5{D7>fv7SVdr!PHO%+MxQAE>;(y}}{#adBuFlHdWf%85qOwy$< z{=7D`VSm6Ls{)Lk#2Jw+LvTgckz7aAlWx+HM9Vf%!|s>{GVBQhv`D7qy27cG*6NGq zV`7oCcZbw-v-^;p3E(#K>p#xl~7SYa;Dec zzIFH=?>Sr}KNqJt3vc?=0WTQh&kdeVpOmSWv61@{55-!&u-J6hwVKm<)Xq|g{_sLA zrYz2h6cvSaSC1-jD3GWW->bL3np7`!mTM4HmdlE1Y_GUU^zW_ ziqDgr(jRD6do;D|=Z&>#-VA$Z2a8krhH8B&V;vP|$5gz~ zFj~OU1M-hS%tO~)s-ccFm}09esb*zd@;E1FVLIHjgOHlXuQqTrx* zZW+Jy@n|}nxpV#s;okWQ_wZMI^J4a>&#LK|A(Myswq3PseKi_wAL4HDp}tC2MovmP zb^85Z9WE&Wp4O%Q-ep+Rb<~zf;i}J$_lDbd9G?iu-8He2RuUI zZA@X_UCD!QJl^_o|LSzWA3E@Ux;-^t5o`QxFu0SbxMdUP-pt(GES`k&A>Y~p%DU0X_gtZU^A%7&~kE{4ECG=AjKbdd@(YfT9if6TEe^IvV>cM;5 zI@W`pu9$1D+jB;EGDDF@GM)*IC4`QLVY1S7{{i?b z`h*Xg?BF@KCyybIC_Egz56=%RdgVubOyiL}R?*;+h!4?q*tQa`Dj}_`tCoS*c1a7) zP*P1wrYN9;uWnoBN$~Q1Rui0h^1jeXByZZ)YGzVgmRH98%#4!4y*k#=ueq268B82l z0|9W3Tk$}6KbVA1ErQ^=zwo47td;A^0r!TBn%n)xV(GZmvRPl6jg8Y-jvsc*fh#QI z(J~9np1)gjf~+$*sfgwVwBd%mZTMUPTuxZJcLa@&M>l*EzwJ}Y!5`$$RR7dqS)c5> zhnM@RS`vnhPDy=~C(jEr7p3J01sHlQ5^T;1CRa>=_LIC8pL_W=8GcH=zrIW_w3p8% z!Qhyrn6^&EjINGX&sO;`PTUk#-CRv7OU-o}(K8c-?ZLp?&K{nM%Ur&D7k7WEQh5jXEexcL8TA~#Mftq#y>{D6REA?G>E@W;R zn?_2_9`dU}X4kUMT<edw0;&6}q}Otgnleu~;`w(kM{+=(t0-L)-?-!@^+q5E9#sXe9ydNASvC*8=s)O5s zp?Q7M^A3*0F}eXsFKE1Zh?!_iIi?jcL6ZR175<%C&%gDPD(?^Z=eR*!*?X?ktJ-RF zai25t_p5s6QOvHNIyulmN75-rd4|6Gg-p@VGK$)LmrOsW(7%F=FBO`Pnqa$38<{rO z>NB-h?hG39PD6Q_JTL3^Dk}}U56#HI2`q@W1HV{Tywg<$fgd&M%S(c;6W~S^fvloL z*8Q+QK#MDHK4HWPF=Jw^roY9!iQ_DO16S>um=)))Z5)0h^X{w=i(~|ztGBhBMsq)G zIG@0l9e>D&vbt#gh~$(c5&l1!06ncOYqsgiqAMDbZh@RuOPZ$Wh-kp4DY|8tZV;V$ z1F$}tWLM6kvVDBCZ|a7bZ9MgAmXcUh;}Nh9jhZZcOyarWT)%Q&RCckxOUi z^Ws$NNbQDjh#XB%#^#%o*JLWn2?~D&xP%{x^uwlv#_?;2_{5f+i0}8P;Fv|p+U@pE z&mCz9Mk5=2e}6GyF(qoe1tiF~7M8M>>0x?W45X2`Z=^gBQq5ll$JROBF%yI|d9 zLGJ{`An_o^&V<9$b#&#HyV$`ST5#rfw1PU>7RI)-A9Tv)le^ zzF7p9LcTs~nhe%voVng=Z}TTwjrm*Svnbwq^E>6$ozj0}G3$#8eG<92#W!nef9s>w z`|n3l$LQK(J$CFX7rnvx#r1f!aQf$0cS9TAN#rV@`Ekzm=6!Mc=p~}CJ^Y;OA{seoFY;%Y_S3QYw69$R;*S*&_%tPZg?Zhmuh z(HCS>h3{2-!N={`$?$$oD1pT&y~$>^U}S+@iNWD@W3`_TrTMa2eR8)?1GD+GZ31hO5$A^$_LmUviK0fOgaZ|q4|9L!qLy21^^ERrtY%M` z+p=Yk*W14G94Yl(9r&~mG*CvQ>=d3P_;v!|P(mkFhE!dJ4Ubp#RoU;lVpn-90GA@6~PeIPXY!Jt0w^Zbca2-nP2JU(oRjmlDQOw^^g z7ro+3{BiGel93pIKR#b6uLw?;Aupt=eN^j5<@Ry4{StCK)l05elwD?O#Z+>r#XHk} z?$N!;maK)G-7mJKiYS&WJ5nun0Fn|BSn6;MWQULd`0mVxB7my{pnwWpl%g{uN}vBN zb^tcDGN1p$bN&;oh9DeX4^5;x)_5ZE7a_61irU}GYR~`zwLI^MN_|oTv}hC~0U zn#-N?fP6J#W(O}Xo49^c8nxSnk$D*3w+rpeplnX#5epEEIrPV06S>M*6wvZgVEwK> zBJvL_^sh4oCrTg4k|0T;;xf$_)N=mDnB7C`Q}fm1viq_*?1f&gK0Zzbdgg%=)H5cx zV3K3OS{!M?W=6@gYNx6V79fR1t0Y&X)$Z3v3Jl?`R4c?&$)ZDCdX)Gsaz% zC(H?hGzV$SwIzb*e|CZ3)<3a8=!gB>1)^8y>VsNWH2Kh(ts418CSR>RZ4;Xajn|3b zqYLD!@Ik;sZjYbp{tJZv`DOAeOvd$Pf|2uO5{j5D6SZ91CA0f@uky6twkOU|X|6NX zj#i!?DIYOgd(b9(lX;)*ALMzRoIXW?BUuB!FBZ>aX%80TA?|wA@xa(T$M|FZA^#^^ zC9j6*iM2ZZMBm%w-y4CgViyctqv*&!q~!?fBmsI(5*}4D71vB4eyLi5gP0UraEl2S z;SAlDRapR6j^GMLB51_@Y8;2V`Uhv#yje;QyJ_*|X1o;y^~v4MoaBA{7_5v8J5>G) zp#o(?DW^c~-!IemYWJ6v@tN`ldI#0z0%A&AXjaNMdOp8(_U)U(Kpoz9q?y^i$*4yf zBmx_>za{U;%{i$cK=)gP{2Ua20RIk02Wm!9=NK|>^UVq|$)fGd)ZwA9nWxSop>20U(HHHsL+Bt@vAVpt8uShb13Ycj9 zz-I*cUS$oiyH8(KuqS%E8vY)Li|K1ATh-==!GoR}%lnPBw0oIcx;2v0izED*h~tRH zBzY%mcgSC#=&YtltbAAo2AYLd%fU;CgP4!zgpWnYyC$AqoUz zWn+dKLiBL|$8_jfv5=xJs>QqA?hfIW$=!U_C(XS$jnWbI{MhQ7;SXso<(V~Ir1X&? zB6VcSii4VBF=5+k(zR4Wa!v4=xPoojHmHLw%l6YpkZB+q9v`>n&cXoLoEe2o4*;t1RGPfw)9^!(ZieHqTLt&P={OVkeO%H{sbIsXx$=<+t_-{gU$c6ctv zm*K*8z>PME`~YrC?9xJ;RUVDqCY9a2WOeg#s_aamP)Zz=q5*H;?bPTGsgr_mM?i}c zMVEl(B2OEcByzc1-%>zQT0^AQVjF}3(HhDnNM(#Yg8c8`p&+9o51e+%w`_CUSPiKt z=e9!Q_^_D{zR~{~ACJkvaHAet5yzH z2>ESty!kiioOOqe@RM6koybx~d=_4wwkugs9_|~7xKtkGmfQC5K3C}FZ(f@P-?(3y z35=0-@C;yepO}b`+V)>^VxorsR5cK!2Ay&5 zSV6Wk{Kgl=$t#{L3=!ukicJQc&zL(HfjV~R);B_s^qCK$>LD}TeYp4yXX z{W+U3=7v*wc3%d{c2byb;9VaP>@?a?r!S?bNeVkk`VsVNLj0)GeqEtPHIw85ee@;5 z6msI+^tbDWywzPl55~`>R5qh`GHNeVh$!T4cMIO`Ik5ZGnyLLwxf2i@Im!BiGLRHA zs0QeCI^VuE=$;1M^O3qN+|Rv zNMK%pLpkYlO5gi&PvOtlQl^&-X|*7jB!PW=n3b~~S`NzO;RQ|D`G9@YKptxjVji4) z(Po}I*ci1n8R9Su(?P}13Uh^Vl`^ukBnYYjMS*|U@vCX(m~$kcl(Xpmgc=< zU>vuG)|ovp3LuenmGM@+Vw|5v;iGzvTfV@AMD-T}IF*|7l5W_>L$_6S?=z0ocu4OP z$y~hbPL8?D{d96W1N)7)Ky=F6ENIf8#R!R9*kT!sGDllnaAufgD;C}y8#oipHo_W= zIR?O4a+;f|XDNCX1ih<4hbVRy3=ZDUmGW&h7(~+_METn*N5b2yWB$Yn&_Ou^mzKrp z49(EtC%cwpSZFG#x`vEJD+x9lBPpV6npVgcw9_OikntZ zZ+FVMBPQh9Sba6UBI6_vdIWK~kI4AL`upq1{6xvG=qm;An6@%g-F}$KF4B$VQugIx zGAx%D)-*XN)P?xztT59>6(-VM0_?D-9+WJ~u`vJ%Q0L-)ST z6t?Wum~&Lq8EknK7!M*!Ks_H~e*mQXC{<6I&R)bG!pfi)oKljyXrPE zTg}>LTJx-0J$cNK9e?q>@>u8A^t!M2)flIA{o{33?Hg37!IMaWjAT74#FLZ z<3Q0h)S74sJuER{I!-@|xicIge!BziZ0&NF=BTCo^zl%1#N*uL)$wQu4fR30<7$L-W?rokfOmENMz=*^{vTToWxS~ zBD3#M-8Y?bXg3_3kJ38PoYSzT-!cx4v2dRMX${$5!#{vbT+e5uLwCS~{n!6ke-jmO zu1ctiAU_2;7$jTZl)!##x~w^XL))SufW1UE61poSt%M2gn-df6f8Q-y@cDi^T?rjG z-|LIT&EYKW4Y=+u+wGU((>^|5pxX)r7t5{~eu&u?)c9iyeAf<&TW{$}pAJleI?)6>d2hL)m| z3{8P>Ax#n0gV5NZpz3X5e#RbrdEuU$1}r5uqp%NLWXwL~hU@-gVT5$$OX+19mk}Gy zSJP;_H$K*z1Y!@GFJIUQY!xh@8`Sk&nut$I_>-FZ8Kr%<$+#j{5-GEr+~iKBNx$Gu zhUsA=J<@uq$+Vv;_Gg>+sc+%&UQw)34YG|VKtOn-tdIkel_jzWzDUW7=Kc&bzV&zH zTFAHHcVEjX1~3jb$3gR|Di}XzhBJv}<_jbC&lxySjXw~nK;8$y!_A&frQGIz9?Ey_ zHgGF2o(lb(VC0lS`%!)A@1|L=<~>T!dMgsapnZW2HFSujbNNvb6hSwToKH|4%aUPyId$tB}>iLcs^_|%FS^OE$?bCje@TCa_ar;RIGG78L&Mn z0nEk;zzAHAEG;OZ@c|OysF(~(e;um#g?kr!uH$yl%;0Z!%zLxhJ?SR9i9Fwru zyw|rDf|}|-E|kPxQ4B$yPnFGR?KO|6E?RW#M}(W%h1hYf)+k@1!yr(l#(Sjx8I}G; zX5n1fneWbd|iiJv>BqG<1L^^}QWC2cUgzsJw8OfC)bd zZve`ZBwVlvE63P5pK+Y?(bcR|IQ%nUAHXiaY%)bT{O18FN6&c*b0*iMfOt)iJG5Ts1eU35bii8#Z>=|Zyw*D~CM>n3$uwKZ3?EJKm73<5>x z9!W_|r+4=`@6cPVULF*4*LqwGUUK4GJcj6KY@rFi5FRMoS!3`ZJ^Mr1eNwhahm z!8W6Nnr-Q-42qCs0=X5zay2c9wqsTjhiFx^2)ZOAc<>fD$>)7wvII*;AVf9^^J3}H zd&o8tvi)S{d%0a<*l1?s&-c?KW+^%ep}D@82vNXVgPjPXaCAP2y>lKuqxoNdUe47& zP=?bP$fl~5`YQfxKbGfOrP3?O1Ls*Ux8jv!l#b1Scd&^30c!}k;1fm@fRlKfP69a( zd5U?YlYaxNSAVeHIrJ}|h{@crkwPKL9(yxIT=zZJ8YKW0EBTKU^B%|ZuITfhNu>YS z<9JkdnMU5pRpoU)?K<+@ELCfbHHZzE7#`-z3fpWh9A^ zL1waGw%|o?c8!PTDnET_=pb2NJuROc-Ai|xXTtOgdC^+{H=kHzWD@|jI38IV;2Mv2 z(1zRL8pvr$S%EnU7AM2?nhLh4un{j8bNJLihQ3QHKUK@i^p=hO87pX?MFWOAU+Kurp&Q7q)IO*!cTvf(IzYlx1j zT2jJITAHA^PSTPXy5G-gyp_PVR)@uUP8n?3|L9^#uaf>N&zrC}fnMT9dtoi;f<%SW zAO>RmIo9Gk2#O7Bz}QrN4@4ZkNdWg(-yApw*s8x<1IHSFr%;o3`2Zqm`EH?Xdi~0K z)WGTTEt)p=$jy~!BI9Je_DuHPE6)VFXTEk``K5m8>fzP5X}89=&fH=Da=cKF#doe8 zmv8Qf#>1ZXzh4{pW4auYb23t*S@1!*k*C@4khJIFNUMIa>EY4Y%&Z# z&kf|}zCUylH_zQgKD%tS3*hWn_RZO}?}yFUQa}v?^`;3FCwdfM%!F8(M|0+(e%$SN zs5L4^xpR;vb*Z-N7G|B%ysfRbBj4>9^I!q&m6SKm9-cAOyxdgkS(+1QZ?BNm}15%QbD$){~Z_x{3;}6GJvM&9EgD z$0DFC>Mk0fp!;+78=n1^-{E^1+|;dht$|eT&rQ2&-?;PUsNf#Psr~&+o@cY@NBCRB zRY58eA#?-uXzRmbd}DX`N}^@+PF*OtIx!twt@OjwQZYKUPGzE`Q@weiUU`<6(t~gA znE2R65#AVSnI-EQ=tQB11PdnD_frD&k)X^s{+fCj?idiqnFO=@=iU6iQp^?_b0yId zH>Rc4o@djpPo6*QzhDtdcjq}&RRei*RCLJZp?(;Nc9ydxXM-OWK(f|HrDx<2{DMWy z4h9Q6oK|QL7ieYDcYOrtDoQH4fT1}hmMAdW5^y>e)}loCSJRSR#kK`R!NI;@7_uqK zfCFNQz7~P;*X;}W_@ZC3KtqDNPd}cy^qX1a3SYsZ^w=%-p0(V#Z#0H!H>)Fgn~9#w2N>yA_PP3tL{ z8$R+#ARrhsu=GK_5Vip(`fQI7!9W1v1SN`@IkbzPNug34G!d&8tFbv){gAy}3|53R zV~>p4C`Ot0z1R*cu>)SB{sN9Q(1xTuZ-b;F1Kn9T79S(#Y_YeaYXLPZppkXZ@%?m#@A*PmHN>cWdmVAE;~Atw^yc;1se*p zO})VB9GebMvFjL8B2<19^8tAXFC{iQV^T%uMS6EkkTmQ6mJYN%#?b)nUa;;T4ot`)5AP8!f#f;stg@drJ8NA8} zQPK_D%UHXRh?gmWyPN=g0q&^@dfExvm^o9{lHORyV1Kb$4RFrkMHkNAu|N_;6o~xj zjE&5hF*F(|%FzgH){kZt{6i1W<8g*>jMMWraI8>H$G0lH`p7;dAo;0ktb)h^{5ffX zh+j%#=Rz_U{WfI7aUDgMlQvK`7D(=}Rln_6Ia{(^iKC$V8%UUh#iOM(W@}AJbtXWz z^(>Q_q$!P(l|^69WuLkY&B#951ACI^m~^@)Of8(tJt?yWpFwZRzeemour*&|8jhAF z6fgJ2I``egq1MgF_vz(0mq}&z+3Dy}EIsu3Nt1~(3=H{`5Yb{$2fY~`m1LHZ{i~$; zMwsY}$TSESk&sRlRG+mgp4sU>I+fOVny5*$WcOy`j%1O?iiZ0sqe%sTNv7n>Nf<;* zs7V$kO6sT+CunqezPp`JxE3a1kAHD9Z%0ma)!6?j3KTKMkj}&~?_BU}+m1Iz44wI| zxR<`Q{LN2s^Oqko0Ps!~kVC;yMG>r~!7T;CPSFy0A-bBQ7@}@iE?Q25Zpjo4;5L3> z0I=l!3HX^?^V$zHJn#j^KTF^p*E4iN$(Ty z>p|WxC0nL}%AlI4>uNz*b?aKwtar3jshQDg`5IrRBOI(pIHt3hk(gjKi_x5xt|j4F zKm#R2##OdTX$Qb5g>fZL(Y}{j?+guO9i~$-Tly*IOWVg%Fe7j1o4gTD#doOGi>jDWRCIt0oOa0Y!j>>T1K1k|y{I-;6I^ zrk(qi_1z=iNc0bDeQz3lIbUqp+rfFC$QF!^J!H9SDLCL6=wIWkP&W`gA9@SN*+-wn zF4!JRWCvg8t=0?a@Oj?tgYTF|8|?7o*dU zEk<;hCF;QQ>umCG+0R4X^7^}1zkuJkMfL!rx_;yN(`Kl2IKKvk@+)$#y#pOP`MC?G zfajO4d}?Db2_FS@*aTzb8{kd(Q5MaEm8-RkvfXYigrQpQ+STUxbYb~>pmcX-aj8i? zsY)!OC<3;~dkcPKdHrBB{G!W^8KrSzavwMHQ#W!;U}|T@%xFC ztFqGsQOAJ?rIx^)C@Qt|`l#f7ut|PV>1A0S6hIe}%zw$~JLwsO>ZF%3SRwX*W-^X{ z!FaG2p%r4U$VRb0a5veL@bAzp@tcCFKv3OR;PVX{4_KUiim#Aeb=Pf}YoqD47ArOW z{9ILx^ltsAJ#bf>c7WHm9nc}F3ahCX6rPcdPA+XV1R@2{$%!?Kbw&;u1H~!Qk^k`K z?s_qp&rVo+zwCUzk=*d@uy3r-tZ;ahnNnux!b@jnF?#*%gTC<#j`=hz$I13*^5I#S zdW&Q(TU^MLz& z8*GSlbXo)a6Rk6cW91lk)Xa*N(%pea9CdzPoVYygnG^S&MmQ72W`;s2{*b1q>|>um zIq7VOD9%6qJN^I=89|X1z(|fA)|3*dvH}Pxqo+;krlu>lAn0l`;ToorNDxoBVxc*z zYKX2RfSZMJbG|l-*eN1OyOk8R=cAtvkWP?#$1aPRC`bpk#HaU+|gB7!+u!ay%N({KerG!;j{Ug*dOPn(jC(2lJd2{d7q(H1cK%{070Y;4-TslP%J z%NFC_s2YOwgB{&~WSU10lW~ zx%9c{w_4L3Cmt-LjaE>VblZ9?q>9pRwUjuPArw6`Lf1sEp)W3MPyku|YeoMW(B=z^ zJup%y!Y0ZbW~H=D(R>h$S#GJSFZWOJ1gM;ywpHFHIDBbpSS*wRxc>zJ2jm4pf>F9^ z8frmNM1kIi4!GA>&Tlc?N09N~IPuQVMc+B251f9Vs13+C@kVU1Vtt!nuknY1mWhVz z0@KJb5#Qo*=H{|N1VDZwXgrUt@KJuqCZTH#@=0hz0Gs4m0M;dSUDqTni8dv!i6U)O zwn~YFtmzuK%pLSlLa+8WLo0*f3ZWw&O1T4%iEp|_#tgLY3^I}MFHM=-W|Gqsfd8k) z9$8V_W*387QNDl@A0$k_15QGp4!thRIEkU0mJY1YKx4R`vT}mpE4?MkgB+P25hF0TUAjUB`0(=pGu&1-$|+#XaZ!zMXwY~g-J#G?zOWA1cAz%>7U!h z-1b>V`D@Pq5zvd=5@L^gep9cHJ?5~O6QMH`6gO8G_$|yZT7DeR)nfMgoA{>7H~j$( zU!2SLW@xNrOs>8a$o$G(oWgQ3zj$77fvdzUYv&%jX5o2nrw31|;w0mg`%dm=C3EM8 z{VeAATu}>fdw_?M_0t7EAMXV9F~xYra(P%-UqDd;dj%n!No`yZ*1^8@7VfP}2T%!otXkA~(|V`R^95a5N#&ai?(GBnM4p0$iz*&bu=0f5LIMyYzpfg^MP%Ijth^Wi9*NtF^% zs^~cAv{~lPofsz0h@6N|=zp7a;jH9Y~v zL=+2jk2>ngFe6zK`wSsJngj%_36>GVff=oYVDk41+l>JWd7`iEOD@iZubF;6q>osC zSw^)#(f3;49MDdRfW3n~NR);c4cl7o`4RW!9^bM8}_j& z@F}Fbem}0>;CkeeAM!X(dGH>6#kI#ot_L6GlV8u*y2*0g7W&21eQA=}&0k8xnwEC5 zQEL)Zd|aJ;DVa<}`zpNCocz#1_=@Hw^cmRT0x^<#Wp;V3jH}Cht3DgbFV*Ktv9fce z!qecn{_MNp$H{%wIEyOi3&`t& ze>lIW5ugQ!9i%QyIZz;`(!@!sb zS0ee_upi}rlNrC*Y2Pu4jJm>hIdes1Ve<2v?Q+(ND{qiP;9a>sLKnvPah%}b z3p@v$m54=Ndkgdsmp82EO#QFEL;U<#-&mmI<+VpGu8njJYK#5)%I5(>I~gd~@ux|{ zwP&)}D~qjaX`LSIn(^K&bu&%#AkBQ?H`M{b+X)>q2!+tA@fafam6u@;a1+H07@ud9 z%nJEVs%pkZ<0}Na10SAF*N{8aTEd;j7lw#mdhrqOQ4|z9wd(L5CCSlTO)wQC!O&De zFm2hfZ5`cJ!3!V@j$(mn1q5zC@E)UPg0%=?U5WyzZ{<+wch?U_V!O4AxrtRS=0-#C ztEX2ya)_~qxgGIbda9t%)){bUzAC&o+@vom&@e?qE)0bQ`S0hz)!+)(KWCKB>`P6f zTHhIF?_r;8^%n&zK6%OV1SgZCpQgExq9|jsNsLJ}2!&<+kr-b~x_n6y9$k*3^q8~J zxF2-giIi>tvRav%T5@EWOV`kngQK`Yd~YE4NJ>$XsqEp{3+o3G`yrh7>n&p@o|&)~ zmA!a()fr|IAWrX+{F1I8K`mweGWO^L3ptO{n;&ofNN^8 z@>`6~c(7ay=9^*R64pc-4g@kl;1xR4h*0ls0glP)G6$+i3K>&d`D^=!l zXUM>>n%Pm$>@r#I`%)u>vzWsbF_BR)FOEIoF;l5kDuo>YVc(Qn(Lj2@4s2xJKu zT`dy`Wc02<0iiAEj;6Y<36zQJP~PFRsQuLibBUH8TAK|6ovT4+buv9o+IogJVX>zm zwR_3r#((CmJ)>mt@4>0a|Mj>1$=oyunSSxk6ry)l*WOuAu0G0#xbp`E&-Vw6i{yyY zY%Rgc;p+jrHgk43+906loxMSiVDDVHj#7zhR|(j6`gD2->CctR2p?a$Iv#>s^YR&! z`74+ES3W#7u6-XX__*@v<;K}KSFQt21f0?7P?l&pk7(qAs7<0m^!%l8yzH;dfuzP~ zl36fIncj;s>*e%izpbUzAqNr%%E7#+@R8B8sfs2ssMjN8BMRIZ^x|{t^9M1VFSTAn zzltRo&IM{!baC+9nJb57_Qo-*u5M%!YJD3&_%Shd*X_hM7H}Z0N)(0zQP3lJkv@y+ z$3?*G;D>Uq{ zr^#evSDu^cj9c(enq0cm0}v*!iB}WQAnbVNWS{-F6K@pMb1G5xdzsbd7C@WHrFhaZ z9+I21ot^ZA%Dhyr%qQ&*@9pec01hB{O{VC^Loy8uqCd4kzmF%6kLT~#@FQ;?AJMrX zn8(f1W2wC`;{9qVKe$h3UQ|!GpN@hKT5jQXz3Fd z3#>-4^y!_5o_2SSjo*tIjaO+ z;I9CWL^^+UJ6r@%A@7!0OsLW1?PLzr2S*Bp>U}nNI_`48vO|+S%H*WD)f&0kPPgcZ z4-fItyjjj?XD2%yM^e6KKv1(wftnyf$UppVr||q|QU3efgz$GFYJcdXT3NBj4?VLz zvG04`LbhG5+53El7q|PH9fOFxCR9lyehO@M5~3hH7sJ$%c-S^R(v4un;H&{ZIS_DX z^;TcXnGNDLuO2!Bbq&vf0Vcs0m4B%7mD}~0=#G0KJHaidODZIuou8ZdbruFYyThBJ zZ1Tz-{QB7)+>dF#%wBRUC*N2V#bwEPoXQ|5*hYMP87|&?mB+;b&7ZX1|A=HCO+Rtcs=;q_tL$CN+>CF42xk2l3^*} zdKW>Ihw5BeOsKjdTZU~qCQ;;3qJmgQf+n`Usp)^;qNgm zX;n>SOS{};aC0MXH#aq2b9g@HD8BZbG+z;zi3!?k)L_KVP_e&&;FwfOsSRqSZ}vH_ zJLwxD+wCJ{iBL3CvwoN#FRNA@9!-rB_pWFH9TZZ58FG?%v_aZcS zTvLp&n6JcS``&(@lwNKY?#kJo%_5nI2YJG&7yr}k~{tH%0jgm5TotllGx5nhQJ28VC|3nnjwH#-)1 zTu|{&(6Tzq`OxTfr4X`lx$R@N(tsP=*q` zVo*=i5rXv%p+X{4x6R-^EKCPjPB3TVtwsMks7qI9h!nguR@MN$wylX{fYmg(%Dx{t z7TTr#`+)FUujU9wKB`<|_UeM= zGv9_QC7kS6R9^%l3Y@(#9bnLb=8)ze)zl{j|3wr#P~ta2L6=(lL;XW$%qD~Y=~V!+ ze23BnYm8>qnxF@Zv+~sk=S(svT$lI@(4zxdj89T%*nfxq46j4Qj44ydKotn`Y9gg| zRIjKe)8E8&=&RY#qhE0dUZP)!1NDsPFRpA+W(89h-UGE;&k+Ie9|1FmTDFsKG*NMn zZH86=wkh_<%E1D1_Wn=U8b}x*L%{9yi)=llri*So-@7kp&0h09zb!uI2Ax`%mkI14 zW)kZH%+%NIHR}461k2Irx_~e+bT+pKVKBKKvFY62pk^IB#2!5YT#h#9tv#ysFQU(4 z^7ml3`nV-Nt%}=hhTJgz(2AZ|&0r4Lyv~QVL?=u3f=}yY&Zo6oKez|WeXOXxtyB~$ z<;2=+6`Zw~4$nB}(|S7^GK9{Rtyl!mML|M~F!%xptLVVW8CCLzg0+5!w6mCoy-ksf&lyUhQ{#hIe=w+&q@!qSH!uGo>?k z6Hnmq=|K0Q*%uLDb_EL#jH)u26WMn0aYyL~No%UP2~MnEXQn8Dy<`w-{N-5S_9i&B zMTIA#5`%-o-My`lP?}q_YWq11(u7ORCx*VV#F8Q)^$Y+{0pCyhy6?!IeU<4ul_fHZk&Id(uH&*} zi)Ff69)v<$dwG~9>zh%wURt&*E$7j@x!kILV9S72!ReV%?g0&=^M;xa@CAS#;9wg% zqoER#K@WYphL4_KBiq{FdZ-9R=x;IQa=UWNDo5Vhye>%iPGQeSYsbtVo1oP`E>vss z!fLs#bs|?z%Zewj8l&7XIv-4JB${w#F(BwcOCb@o-}~s9@7+nHud*7VCqds~4kUDv zVhY3;POE>|HgB9s%_>z49jrw0WoNF=dYOAQt8*&j=+3m5_%ZxzJBh3TX#>fNpx@=S zcI9}T#k$cU&#}QCH8~>H2%#3y^Izqh9m?*l6+m*r`QmiX_r=HbeURuE?WQcZE0!|K z_vgD>r_pE^OWx!)u?KFzYc4c;T|@d|hh<;*fMNd|y3v3_l7#XFHdy|7J8awElSD7KbQ35mk2+1IDZ%iSE0KdixoC%-bCs5N9;I!NNNsnZ!A6Uy(P zek=ce3(6PAn+uD};7(*QBLMC$mY6SAw#p`lZ2G0ysW1D3qOO;^o!wyE$v=$?+NF;i z&Pb>cubfrUhYkx3P(3h&Mdl?Yg9zr|b+K`wzJI;FbCyC;UoO7$Z+yr4D-EAUs#;fD zrP{h3m({AaD)wF`+r1U$q=QWm1_bT9URitS0H;$rI_#*2wMWg&{you2Dxt>_QSt71o;MRC*PAS}&fTB7@m|Mb}Y30Dfum*N}+? z_=P~}bv{mX|NgT<`k$-Gf!4ke2>Jhm^nXu~ep1)&6LoV^5+5q9n@N1w?bhw)VKRxI zJEhRsW03xefksOZ@HLUnQvVXhv+$un?k{7Re-E~&x3hB5C|6I!@h8iEv_^E&6 zuZPPZy>cF;zw#vJ7AdoGp_Zs56VJP?Js;%e!)$KQpHH8sy!+fSx}vbC@O9S+WLUbO zQ`nJu5^#!>k9$UcX^{SB%+wbN(zo4IUCCF5`r#(0jf-=^IZU1pyRqoE>^zx6UL|~G zi6y~Nqq8y>bU)D;y~d}e@U;@+kL6hY_0#u`AiZ*2c5Ja^o>edIwVsCkd2ThA8`bUT zW;CoyPX7G-#@63!zLhK>k;PJ4l8p6|WNhg_D@gyZ7wqXNA{3#&SN%(a^o}Cb^hJC< z7?~9#TPqpL%W|+>W*?Wl32}5Kg!LZ5W_pr!L_0xPv(E|Zt7Vtj$A2~TTh+st~o!$reaIufy-AG2Wqhua^XM`$XSjltoSbu(*IoP zibvVK<-WZcq~A3M@lM>#&5FIJCwHG0(2#t+FYkrtOM}G49{5_Xh#&MjB>lf9NdL3v zAq>*{yWyXhj!>*8al$~?k2dfaOS$IT@sRMc+-vBMyOO(mnN&9k6jirOVRI-nFV90^ zNcffMOe8g#V!=N-NdL1ZG9q6dm3?z2-x>bpQI&kFy`)`Fd(6~O7ZdaM1?hkG9MNJ6Lgw#XZ||I?P}G-;@BACzvHlv*GxKG9=sssU zjb+2gYQ6p8an;jz_O%s<`N z#KC6r@|5mm6(3lSz9Z;+3yGtn7&<^FPJA{+Mo=CShi|R>5leg?RS7d-syW#fqSr%U zOe2w=2(yt32JwxjCPA;|e-CS_&08S&O<96>rr(-tG%cFN3Y#H_>0fm zGjN4~J7Pz0;ear8Ho0ZxV&F;iZ6U6p#o5K>g*Bx6Lh_7@CIx{kP`$?`&Niu4PhQsr zeKjr*(@nj*F^fuhJzN%)o$v2)0p3zy87$A~v63WsOq6a(;_RphG*etBO}%K2_XMRR z{*)Y%7+-DX$olX>2C^cS;FF)vWcQ>g&(%VH)!jCC@?$y?AMduK@v>xir?TUCx-0UM z(P#{6jx3;GoriC|rsY3C%zZuC;n#XVm7WTa@4uz#<3#V|^uD>jZ*QB;!e*W~$LnEk z$2&eQxIsWWH0reyQ7ly0koOaw;%vjA^wn-K1d2SY)b-HR$%)nLb;_TDdT>5rfH<_J zo!kQJjlZ%j~n-)841(w(s@jb`e$k|kar2;?K2KEzJUSU0V2 zx*&mz2prN1Sg`<@ay8@+oup)lKocfaO>u1G4HMKd3g2>TQ8z651Ena#4dxGj8tWA8DciX)tD)ih!pbGT;Y=5{^2MzsuNgaG1JUkm;HrezczxDj652On7 zRI3uI!;j`YtW%3l-NlUk)JgHR{Izr!7i4YHO+QQvgY8p(FhV2ye6BQ5RPAvz;o*76 zohJ7cNx}f>tb)g9tp}afYL0rODO)+lW(}=G6&p=o3|kYcl0b2X0hRRz#9s9yk)CMw zPm|oM;^LL2Bn+5!U#XZK@92|*Yd^?02GydtXbRaz`I$T^>K<&g|V8Vxl3I! z`AqTr`h0eF0XF0E3cSmUi$n|w=GkE0nZ_Kvr+B`U&e(@aBD31m8*Xly>&j16ffufj z#`yg;FVzK*lO(IkKeGG1S6g1$&)&$lVDbL9-{S)Ic}ly1J3gF!ZbWTidef^qPmkNd zL~967iIh2g*txRXE1FVhV zWUw`pTI9IVAt(m5mTt=_u6}DaflXMOkVcUCbXD z@N=Kyr|p3lzVB@XCiHH)K|Rr4Q@$&_V45rbE@cioPupU~6U&Y?y}wWCPlHCQVH%;( zd=Kswxyho+EADvLn^)y##Qwv75ZXfg2WVv(AHneqcvY_hxBG998yAnNTQB>rrtBs0 zIhj#%mUENXrIJjIMjkP817uyw&Sse&L^S3 z|MshZAL`$Ae%#mk84&n@d`B+T#Cp@ytZZS?E30~F;vmjBG5=k&aG>8t87SCe6prPJ zP9c?Ejll=wOm0zG&muGP9JSgi4`-Wbzq5<^`qJ9(GZv9hs9~Zt2fx7~v^CtwB%1A} zsUOnza~=r@ZLf4RJ^M6%(EYF~76*^CydqW`xx;t%}u@=w5LwTI7Pm3d^YnAyKWi{N+_Xh|FJ?!pe)I6N< z9!g-8muaC=gpd_Y?i`bLqWytWTp0G&n4#E<%qsRKMl@qA40DM7$3w@9Xd1(R@ox*L z5U#CPe>@+EUw*RX{X03yeUi>2RS@`7kVQnA2WgWaxe|7pV_^jT6F~SD2$VSx?P9jF zcy0>y{b9G9Z=6+sl&KaobyJ8=gnwW>-WzcX6PN+!K!7Ao;N`;~n~fhN1isen1gEv@ zk~9j{aoo`l`{J;17(S@zgj;dSnblt6MRWYFqlGkt)>cqxJ2hg1kZlcR~HZ z$MFS}{a9vwU7!VJD3vwIE(p^^b-2xsGQ!ws3%$pC4sbv@=fb;XZC$A|;(1{dnoM$s zED8D)mUw+y`|F=Yp8TXM*#9zG_ZrEp+&hOjc ztUo>biQ6fKRZnl+oxL>H)*!sZ-Kum>n>Naghfc0kFYl$DmR%(0yS(Kbc-AOT4L|xC z{K}J5BIq<20l0)vJvj@1TE*XpzW#!0PjGlr+fe$)CM!ICdinuAH?}GFHnU1S9-rH_ zlH{2!RX2yNL(Sk$+;MJLB=y?dB!Qxq=s>6gZ~?sAUo$zcg;IaHi3vAT-*|@86D*EY zd{uj}M&0sW+?bE!htBguy;f?rIOZmt0Kc*KwHc5R#$&8AqNpa5tn#XSy|Z`lv|ri4 zBUlvtj8K-5mf-PhDN)|%YufJq!P(sJird0XRow5@8jo-g$iUpVbS6pAUMim08Qvk? zhb)vM{j&VpeRJac7IR#8Xbq7^je&7)W38!K5H(Lf1t~yNgAQaEFhe%rdtIE_Y5(Md zI7Ke-eUiWP0S{aiWbBkeQo}Z>%DQRU2~`waz_DB*VE|H~CGdx>ICv|GTI7VDpr+q^ zP}GExq(H5;U%7%&UwjJJZgIw7O(mHSnUihR#(l>=^lmI~Bcy9DMb}zZor17=;KaZF z&%U)FeUazpPIy^GS!U!30Y;$i%Pp4Xf;*xFID-;V#MJ}Es3mQq#k7Tg-z{l`)b;5*IgD36^eRj5 z1w=8>D)x||lNYT?cWvjRyC69~8sj?UK$b;kHTUFuEZ|-?-R4t?&xSkFZEnMr@Xf>Qy2pMMu|0v}%h+xOjFp+-M)X$@3h@ZmMitl_JGsycYr z0{ZXxCU}6q55OP{XC=I7JLZO2uH%)V^L^-kpKU-q96ZN9fHrn$eK%&aISz}|8z6ko zof!R-S8HxCsrOiLKR)AMg&93w-OMa{7T7t^4#odLWaYyb69e&!;|<)(BM6EHelN#g zO_x0Y$05c;c7m5Uc8J`!pTPkKJScpV}=<9?(h24uIBDUSkZYV zI*7|6nbY^D-_RZlIU=MyV;S^>f)$GW)5Y4Nzy2^L@G>3H-EUAhv+A?L8TE7RJ6;RB zMh`c^zzNOdw`7g{9MCAU5&<0RnOHdp^!RfUue}jm_Z^;bXSgb55%38-qT%wpguM5IOp}g@=9l^iv3|IL_T( z6t7$kF7er(mGo8ZDKXo2#fRk7a?@O~;4p(Mk58Uu4O^9XJtHBm%kV-i*w|VeW1lqr{DT&>z(LB+-p${q|Sh zq7UnnyaQ$8nfVcMz*4BPL&BMh(YmH$8#GQtbg_?}g1pTs+*zdi$%{k}j#FU;2i*DC zoSQH&_@2v%7hQd4_aTvj$pR9!);AMK1WR^QQ?X@1wM0{O6k9i4SukY9wRGK8(L2|$ z-Zmvy(`^R!ppy#9Q=+VsmMp%xp`V9FQN9qF8#XO>(xrV|FPo#?GJepl(oLcF+?=>8 z-xLs!KXb&w`y%;$1Rt3p2wbr@ME~P;{uQPoT+$bU>f5!%s4$xDk`Pbi#=GeS^U%ce6i8`1p*D#G$qS$bSDX|O&BtEIT68Gbjy~Yx2~>hhGxA(TWQSj z_IUiw-wcmE8?bBADx?n?+@pzHA$<<|O1I6ak!i1$=PdT_LEdhZQ;E`KUhhBgu$YI| zX9U%g?@(5K3IW1?&g$3+DZ!dGHJkSlPtpKy`ox(8UCEHicVmQ(pij|ZfweD##b8|` zzrkpDgWvG4wZOkCYK?{e&o*OZHR#jWi8rgob*nNNP7d~H*N0)jXfHDtbanczZmd@a zYh=V4a}SOt_b>lgtXCF=3GSx6Hd_@XUBrCRWSIyoBn?Z}!Dwx3g6yicj_K1)*>ZJJ z6>Z&+lPtg=v|4jzpb6^(e#{k#ICFy&R^gGY4K?3Jj=%=4wLo>SY zS&IXG4`$pO;0P98=Wd8vN>6v)RdUr&^<+$(Xvga8SI5l58rOixeECU=c!bEi1%XTEX{cuC9&pIyUtSkr ze&yKr8*8wJqO(tN2OTh`+j-PMXYav5|DXT&3Pc1gXS%>L{HHf}@bbpjd;aPccpJQV zhg#-8bHMsvxX0mJq08`pumaeqp`Kh!Y-f}vLa&x;;Lukc3@SbEe(~f~=WVTM@)$6? zC2*4c8zWmIwHzd`#4mY&uYBLPMSf9vhr1`u^Qkn~#m#7&T9}!Z+^?z0ei0oc6Lz=! zc;Gqv9WoLos|WQ31=ORjj91w))`zt>k1yDxBPT|m7lU2? zPzLjpu+7)biGl9XKp-ss!9l)AZz!Q?1Ypdvzurhe z)Cc+2fIJN9;0S38cj_J3!p?Cbel;*!Xo9|-5@P+qdgsu;zY!UTJM5#Q4bUR7CVI-w z_7ohNMmL=BEAHrUgLjF6<8C;QJF_^kPXy{71MBfEb%&R=;l;8;a}-cjV3 z4d2BYrN-6v!+p0`Q^q$><9%r<9-cf)@A)MgbpK*u{D17d*>WREvL*O_zXBrjFxA3h zz<0QZWVR%Ug#?I=1VDm#NpbjseIXqCV@v_-VFL; zZctNG)Ai^I@i1^cmXI8zDNT!v5SEB(5{yzLW>nFIlj)|>5V4R+c)r5B+2|j;(PR{4 zhj6i8$S8)a2_J-YaRY}UK%eZ@3VvA_7x?STfc^E`07xuTI6`NF%MA&6E>K%wU|6s& zTo)-(y4iOiU?fj*A#|+1fi&WrX*!;68hsxU2YP+@H53r=pC4Ko;eVO6A*4(AFo_rW zT@l6h3EL3WQU7MSydeTdEdY$&d8{5O+ z(cMXoIAt0CyQ5XWj#(DdG*k3NH%zj|!?x?8CM*tH-inrO0@s5;M)5SxUJB`;w=cS@ zuMvrcaEAdmyAGC~GeRCA`qr+3WW;BASdN%)L>$JnQRo>ug=^(D1qb+=v3btEK6uCp z$kgop&Z7Xqg#P?8thM?NvIaFC`}(3Je(Rahib=)_Hvb5Pp*z5{q~_; z>I_=#W^Q5LbI%+RbZZYsOfi9V0mQw8orau5vMwS@aux7~UJwF0vBjz8h>aCG;x5%~ z@Q;0m8;(3Xgq1>>kuq@g;MZ|{)AdZ`a_Q8ozK__G?fEA1Q~R1^yTG+#s-Al7_9v7?KL)T8IP|#1o$;N*=H*DBSl{k@gcAuc zHw1xCPBd9U5X@o;?5Zil?G8|&P|e{IUQh~2`X^s7+QRT zI*F@-)F+quDb=m#ns#y6+`ZHn`c@i^chc+L7|WYyZuy49j$BKFzF+wiuD9kDV^cO zC69;^^T-3?5(SE2;yi<3VvgN*wZ)F5{MD5#Xa2EO|3~H@e5(n;kSw2LU-^Qp0e3O$ zBli>rVrT*;a;L>yzDqX1z_TP-CfT5QmZKogQ_HD3P&o}7I+PRj=_2x_J`o|khu>)=bre5JD;74mo6T~Fs>e_|pe;!H_)%Fyjj z1p%@fQDzIiv~nhV(V!o5$>4;ZE&x@9%22(F9 zJ{%t4;?Ef}uY%!0?NnQ1V!;sN!`IvnGg4)YsczD|lUaQt% z=P&Pv`+JX%j+e=@3}YcvT|K24m|{71*Tb=rA$ z8`+?7735xO^VZYRE?T|W%RXC+OxXT<b_NxK!jEu8e@_|5^lZ-xM)vm1p ztkQIJWX|KFqH8PwoYcvMO~fWZDKj51l&%xA{WT&QW7R?HAeU@=)Ee$`#asXC`6cKc z4mG_yjkdUBk5&t|!xe-sPsuImIxjFms5f=ar|3<9q->lFKo#M>0W>OvPa@|IJ?q*1 z@HSW159}IA$}_}1p%d`Qeb);7`*we5t`fm$Stx=AcMh8)_+5~Xv_9U&KDNnW~|Q~)tQb%)RX z)GYP`J=+~VOgGOm56&|#o>DFYObEEWzDNcb`6RMqs?0BD=(QQw?N7w%R4P0S9&yrkyb!wwZUX!xi= ziB*x0&0Ka>J6yG1_VdVhPCq<05-%)B4p6%!$TjN5!L+>(L?;+IIlq(ELGw?BOn)-+ z3$u}?nWC$R!1eBiudi3;U}`V4N7sAq_Le1gyvp6yA|DSUJ)Sv%y{UWClo=B>R zsr_XZOp3FGeZuE})L%{<=EW2f!>^35hf@6Hd11LY)0YR&*{Oq)Y;1kocv4DAZ8xgD z@T`>h#|nlHKbMr>R2M6;246BDI2eZfhh(^*Vl2ZGx=FYS;eUVL)er*wguJozKKRSG zk)a$9liAx~dR5gB@`rv$NGAXfEX*(37dyNTz2;kMve*QOH?s|b!G2H7 zHgxEbr-)YUq|dfI@y1F2x@ZmJJ@jzjYPU8o+2Y`kuNj-W;^IyB!Hn76v_*AqPkc_<2)xg|dnII}%_FahJtrNW)|( zwB!bud3FF4A@0P2mw=mNiB&n*^1}~a@(hIcW?!Fe0KptG52zue?Bp%`^UH+&c_x80 z3tl0p6wX%#AzRCJ4BPbkz_GCr6xCEkF>;12nXc(Mnr&#FFMl*iPaNH1UcZJU;%B$G zik4}za`~2e`EqBmsXrsvJ5X=$G)g5_1OU z=k=Gn+^V>HJ=nd;veuOz`!`N|@t8lOe8kijs1GnZV(RaTTZ9XGk*PyU{`?dVC9?QA z5E+6#u}I$DRS$(t`(|!s%XU?*7IQ|=y6snb_mO*nvaCp1Iv3x^?XCK}_ixq}z0!J>=DVG0 z*jJ5_{ut?tYFX$Rhh7gz`5|ErICz#fnAGXuLbG^6 zfT^ksJG+4ASED|16#$7HfqW#`J#ijFk+ZYm2dZD2tx_V`5nlh#DIHA15Ys@;r17b^?c)C8 zH`txa-(a^c42E2Qi$mf1<$-YH!Y~VWeQ_9EzdQ_XTps54C7L`0>jScZ-y1RU$h(6l zp1JUyW#Dbx#r_>$iSAw=J-U5i;NbG&2k)$WaB121h$UWLUv}s6q}Z(s6MFAA;`%!S z&8FwWEWPEsTPwVGak%hiVo2eaIp4(ma4I(J-PLqjk?!*4oAKJKuX@kL@+=p`F|F{` zNO8I#O%b<6*&#_&98IPG;r`h|ItK1O-2i*{tw6HyPK*t>y^s+E2m{vp7QS9u=DZ|Cy+%iMtpomN*M*f-H<<}m_hkL7S0FZAP0gC(3%2_M|m9q>XPw%sDPIqVS+}zg4cB_tV=U<(-f>ThU3|?>QvwA}&Zq>7NC75B%VT=42H1ndM z86rF+WsB7kW7ERR%~L53^jzlHD9#got@^bypN<@F9(cmijc)y?JT8=UL78co2v;{4 zH9$!o; z`Zk3>hL`g*Q9OjrLD(xKMw*K2T)kgX9v}8yZ{B`+vZtMC^>)^|%J!ppS@>dfoSm_% zf($N$M6Zd+8LR*Mm>dx7e^ChhOjL|yY+6+a#Xy=nV-YavO>)XjJ*d@t`|_e(tqz`B zGy8TuSVVcBsBl=>JgC5ciGcf_;7+98lB%1_nG7(b!|{{ZJ1BDlihb-b$Xo*_2f_h( z*#xQ#Y~!h$>3bv{s3r@*!E;#lmk`j;^k6=xbYiZU=U?pzOVgXB-SU~hl`ZHM2?<8Y z_&T>b=EK9VGR{v9HxIAP?&ItIpn79BrikyxLV~?0m^&KwWEqIL^_==~-sbBXbN1(< zvf%0ya>iV}zp@_dy87HMZhMRQ&8Ac7sB3dIe&|HXnm^i8XD{Mw;E|t~3nNCu+MuIy zllj9+;`x69b8{0g>?cCH=BeeB&_JgiYrBylcqgvH0SLzXCiq7*PSN}??7WxWhlL{@+oPql3*VOUZv4J#EQre-*sB*jyA(C6SE zG;A`{fxeZ>-Ur|r4Cf2*8S$(L;bw~ypkQxYl*&(B`tP3$pK%heVEP(O;CGro(lP~6 zn8t>_@Ybfj_pH0@v*+b^M!z|_dU=%1+Bro9-$nx@PDK^blgpDpbnHTE3?|hLvpohIkV) znArPN1_NzfVwgFKg8CmOg^PA@0Mz8vv*)C7Oh-)P;9Q?kvMK{BfkU&;T0^ByI^vvb z{=G1q8M`jUJbpw;1~?#^j#9e-$3e$SFXuQ`Uo+4ez{%MbPHLb)d3_aK%553FNPI2f z_yMg>q_CJ_qztp@8k-$jAf&G%$!_g!R;la4?B+iweq3CJhDOx?BQH10P*SGyJaf zHWf|?32}A@MZvz6b5zaOCEM0z&vF5TkBy|dj%r%EBkNXQS3Es-ou+osAEmc(d!3Yu1MKFTf`GEX5mJJsoU#2qT!sq!)r4#2O>OdC|tB2V$ zwQDdszqULK))RumNAvmU1-|w6t^H!xx;qvm?`l5G+Qs($I{Q+&FPPEM6|RH;A&Cb_ zXk(}+o;wb%@XnP#z>!KYY*RUDW=jA8XY z=u3$6WA;v@Z-%a$^FvllGi?rrbN>rm&g!-JfpNWeYR4lfg&fdgM!(8L%V<+^67!3E zVI~#-(0=oR`JlSozAlEh!PrxqWyjb@IjUl)@X$J499gqWa)5k~x);(bHeV9yl%Ivr z{P;R0v@p2!?qoc$9+b!C+%LV{EFYGW$K`xvPn<{>7%T&Vafh{WPEr}xHqjI@Gj?jx zv*FRi!X?g>8qag5DOZ_jk+0d93990?FCZ;-oP&u?ce5z<^Y&jT2T54m2`oSMIyA%t1<~)niI}+`TAWYB0gnS!~Tu!b5OU;k2g(t?6U;#NT znT4M7^xE_5>$v$)KKM7!Tfg)+MoX@VQH=G6EfxS){h3z}u|R`t7}jurWDXZ4Y6c!# z#F{86m>eAp_-i{lCKNBq5)3bgT6Gb5Y&aufB!+ijAl7ZTv29f2@7L}7R+Rq=pT0A^ z-a0%r;~a|Bgo6pR55e&6>2UxiZ-8OXs7?q6SOIc5?I_g`)!%SPq9w2gJa9MjoKKb| zBm~RC_a@o+;7Vz!m2%s=Z5$ffJPJ9o*J+WNQBUwfCsqo2!D!?I zjDT=!C<04@+f)Zh}fQwXYoB8uAv17pjpY3 zw`>zK2JO>OEa9N^*Hk>qLe_>Mc~tb{K@`F6=OE6ZPYQwBFb#_xPqD9<_?_}!2>zVk z!u}qh`!=qlVs7hE-F6TFyNdN5Pj3Y}ETZ27%TdsjUM7sf3%9tk;{a~P&QAT=sGECJ zZ*Qbs-I5;f?Q1ur-H)w~vl&Qe1Ri$pgHi>s7jP4TZ!qgL=XstZ)LImADai z->y|f)>MN22{{!GoDKg04j?{GCG>^&$ie$BHeHc`W(QnVbUO1?%W`$}&h#|2q|hBj z^)&}o^@i%&26g3ShXb|$#OBz+V!+E~7;eX2_iFoA%I_aL!`nGHI4^w121*Zkef>WEzo{!e zVE*Mkp#J-gru0o06*<1CzN4w~+6tNnlzJjU$jOOIoQrF>qub4sf3xg1Zsh9pWgLt) za$&S{)yTC#?+6Y)@BD0P(4vW=s+{|9eGns1!p?#ky6IEyWA>*fEN9LH8Dqv=XFH8X z@pW>Sw+>Eex2qJ6wb}HoJgr7$!*IL|yZ|0{rpzG3f4$O@N26h}@LLGud*`iLz5{y= zap9wY(_795+40ij{|DSF0nNc@xV@J}0urSAn~A-%v(W^8UmjATIl2MaT(Kvcex@>7 zZPpXmR%80}w=w_oi*x)}5G93H4x*jLDWVBL$a2C&JR1@%y2Dwwc+?txwo~oC6|ba@ zQkfpFq=va)9)l>SDjGDBz~?lFNFWIuA`yHf-WCn}DakEZ_>8JCCyx$q%ZKfKxnZuG z*-ds})eNMc-6#t?@(06-$Q!hQlc}8hJQBlHypWSoATUCMLgaOZ=?(mCxZ~g<<*AmJ zi3v`DHcsAB_+G+qCXLVd>g?+a09G@t5hBzpFz#-N99jD38Ai{)QX_DZTpfKLC4+(t z%%Z$2K5K7v*=|3{lV@9geYvYI&Ewu$jUuFm=vBd;(EtgH(nQb_+!-~a`G7?k4g0AG zD!4LS;)t3tR~GNO?RIrNxG8j7H=E%dlKY=GPj|2RLgX8XoV(ykYIO&$Oc!A4hHOy* zCi+23Fu0%rOc%TBDWRW74nlHGCEVZ)z|;;EVOGt8Zc}l6`+HPIReL<0G{Z6%JCLx^ z_ZETYOwGC3E>P1F;E$POz z=58LeuJn2zVFipw^RcZky;UXzx>PI{>5=5aBsT{NEyz*`yQTqUA>$*Q&NNscpdBcb z0~{Tm=!?dZi+KpyjFd?vol!O=Z)usJ@)AKGZymrj%vzT+Wo(&cQ+g-2OicG%gBGquON?sl6WZ?fyVa$#^^-bA_qe^1l{L~kcJ7)WJkCql*A0xt7U zp!he+27ba7NR$j*q;h97c_?+1db6~an%>6Ng6Z30eKl;2qVSiXGFflD7v?ErD>;Z_ zf`UR17eHxz&;;hgerEpVBIAUtvApOFMmza1Ts$_$WA)kZWM3aT#rmYTHX~zV>T-0g z3yB-#86nxr(2a?t+=~-+#9LiK|}%d)BwZ5Dd%DNMZ>f7(<``o;Zvu zDHiZys11(hO29=_bU&AqeBZP^BWLNzW^xp>- ziC52>8B=_F!NM@qtcCaDULNrBHGwyLark@JIKZy=rg3d(fXke3_SYyhWu12v=q8{! zH$wVd_390cL>{WyzBO;`8(YciXm8rB6(zD#9)L?o)aZnIrjh8t@+PsasBnr>Wmf@d zx&S_-e(B-LB>WMX6Nf~iX;BubpIJmcvJ8SE>#iO8Uy5In04FdA=$A<>YTW&<1^n}% zAKqO^PSf2ia1>9i-c83(n*35R_Jdrtd8O^8NCV+CjjXzJx}pskgCqjWVJm#huO=2M z<(T+11m>qAmn!^+z+C2ZiKUA7x|(=vrT-*1vWrpq?xnMQD74Dv#E*;;ygNgSbmCX# zi^ecaPIxlyR>wOFFB{u|K(eZUEu#Dz6IM}N(_si|33CL z6jjD{gZx2519akYHOohan_)SG#e%k6j@dUfO))(iK(i9kE5B3zFuJj5FY~`KEjy$H zWJX9#rl4d;n-{Zpl&=OaPY5{<=X=T6-0sa%EArLj)xdKoV~eeYPNnCmrH~~VZT}!V z7>-{YXFu(HmKZ3t9--4sd?lNB?lR>Q4}6d0|1rT4e=Ia$!v8W>{{tD)IoxKOPt(Rj z@6KyCH%@+0s#M*F-o%O&Kzsnj-K21%nJ4}~jK#Fdt(&N3PHHCNjc^_j%O{Rbuq~yF z#0igg^+v5oq-Ea59X2`Q(;1aN5Gf&OYZ zw&Y5x1teIN{KF=WRdkj^yis>;+3x3@n2*D$f18AYwlrg6XK~cIt4hAOd~Vh61JfQo z73XVIGB4(V+KRM2@v|a-#wD^UikXus{KrJ|M`Io#!BPzTGgJCR9uqAg144pe9Yi=| zf|L)0FkXuDC$*;c-`X!hqrYwFug55yFT0%U=FsaZkn@|&{GD^J_!S?%Wj@F)+q@tW+( zpwYR@FXh8mAT`LIIZ?hN-J55fRlE7*l8}N4kLVg+Qbg=&ao#!nD2O@5w|_uz{FoRH zk9YCkkFCp|sn>Gi7~DJPDZ>1t8dvg`tL$y({%ZSTb{~dMwQXUqzHRNMH$FrT5&TXe zNupO1<~dG3@YeS^?ul}VjqtgsE|6>S8zNH1Vnlje9eQv3uHSr}t&jKfRnf@~iU;R- z9}8#5AjY%U1E)tFyh}3Np`a%9?q-hBCJ)hMs$GQstEtYNl-EzdC|_Lf)H%dNNRJyE z?B7KWjX{7aqRfjys{BZJH1^uds;Bxs(iL3Wh6w2!o{kF${Tq-njwJQ6+w(bb11Ye~bGm&IXzmdKGY*GV$@UnogWuULMqH-S+gYHaZ5~Uftgxo?_ht z)Qfog(t2pfZ@_Y>rjAm)kJ>M^zzO#Lgew&Bc!H=glTVe7J1^V@cg>gCusnR2-A{7& z{Wr(yM=2LGd%_#nqJhc@lcW2B!~})}rHMJ31cx*4sc?-_S|s(h*x<}a(30{}Y3R^_ z%0zTJi=BP>M-yAnz7=s?g>*W}L*-8&Q0K?MnhCr^~#Q=mViF8uah53fwGD5jN)P-e~$#=;(_F)gQkd zTia4&4DCH%t-eJkA+4^9CQA_C>RD*O%t7NI%IXsJDhR!OYKB#qQ#TY8Fe2r8;b&^$ zII)xvDpL3bvb)JHe7B@Ld=MJQkL7To@tUrK70?Y^0_L#_)zCvYK=*wcuo|Y91MBA$ z%YlJTQM%lj6z9n;;XL5@CzrC|YEC93H-wiXp5}MNW#MNUS3H=|{m1IV^u9C8X+gi% zSl(7gZ&CB{@GC-ApA%o!5Y}LPZ72lM@-a_SIBbHqKjAurT%96q%-6m=pX9nnr&X}; zpY_q8)!C2BkGHvn7HQE$2OiwvR`|J#L(y^+uVo#7K-@BcCJ;*l_#*?wBuj~j*)B^@ ztg*o|EL23{S=dZ5n+vw493v5E$tFI2F^wy6|3`T})>!(k*Vj>aXlWXX4ij6Hn+VXF=Qq zlLwonx7v<^#VR{vpQ?W4TDdH=aDMeKD7g!Dlrv_gX@PkB_eXr3x+=7fbzxjybY5D< zp_t9TJy{#i?2i3$$B*j%*{_MX_nf4pbuge1OVJV3{h*X)gu5t1eroax4oy)q7R!>; zI2uZ>S9ODme!I&qa&@__cKgy>ED%OBkM;fmgCeRhIfcBiAjMK%b8TTJy-y?4VUM;ItAq@;^wtu_w8wR zM&C~(@`qBF?))dTi6qlv4xz^)DsHAJM;E!+U3Pt0xoR(mGE!`Z+s1RrleT7k+efJ$$hI%rAb~IxQ#~nd0};p zeybe|2Eb)qkI;)ZM1+-r)Wl?PQc2Krn#mFeEXl;thPr;dmO+I+_>jPvki@uv3c$g* zVg1p74AJ|az=Aw1z~%8LE>fF7_2OxOr;~qzyW`@xlUuW|?b`>S8&8**$#3H^k`TPj zzb9!t{pDXHLPgpHCjEQ#JLCI8HQsF6-POh$)z?MoZC@DnEJr>_Td9(eB*|YLO6p7N zVWN=_Ywe-tKAy&up8sWmoqp!0TZfR_lXQv+9W#DQo$L35(z?e0$DHdj(WJsf$mLxXdu~>an-CO%3>IYCS!Y@MG-~DNO07-9cVd|>8b;9Pi-#6+Bd zDGhSdMgCc`*S8PN*QQ>ocLu%J<6B`I*^7&*2Pr`d08j+#ot|0(P@Z{?Vl9x#x(sjO zO4;g!_nswiUoTT@Wg68Y03|VA(k^7}!_Y%}inz>|5xT=>!;fCnv%{NznG8vBG_wuG z6bSWzktEbfPOozza?odY>+N=`^z57N?jGIgZPW+&$15*FLJ%(s84?bg)CpB1r!dD6 za%?_aO&pRcRsug2t-16#C2Fj9XtR24o@-R?=Y!YZ7iJapZ9W()rRQywOuASh4Cc9n zAOaRfg&-;0Mv|~5`Qc)arrL&`hAj`US->R#|IWNwpP&{9iJc9XkjV*=fuqy&R@vkS zlZtfm`d{VEc;~DWQ~4b<2?3D}&Z(usv}e8K`s=`WnEQ9zVz8__^8T28h%y%wze8~A zC8Amaw*$Q`J{mVk4E#w6EZ8;XxQMzj%gVd`vE9zL+wDWUE*+HH;VL(??%d}_!7nTVT+Sxx(ot&vM|8Sq+ysCBjh2J6fAk|0>mhW#+l9JVudL>9{#x6= zY&BVadhFP@PfkCw$-{DCUQa{-%1PFzhEL28*TR4-hbDzSMwo9vxU!e9L~MX!LGwTx zKIBQR7O*m?pH71438_uMK#aBEi4H%W6x-po?^5snk(b_Z&ivjPC zm<`@xV*8M)1_E~ih@FHw>!S%FzJ{qWkHafS_8=9SZVZ!pbb_s&Wq-4pAH(npJ$X%l zQb3IYkRUQf$jQeu`Gog6nmUR;N6ygx@Bfu)E~fT>|Lh4E7QI5YOP-HTQzvD&1IptGN-L+Q}ya+^pEuDaDYVEMacn845Axo zEFV{-!#Q1M>`zGTkl8uTSWN1e-S?JUmV9No2_)}We=d)vm2p?D1-WK~9)or#;B-U> z&he%!)ZS2mEw#qr;Vt0=yWNb?vgirL%!@hstl`j3^6>e2h;JknlaO6;`7bm8lMsX; z(P_LJgrES6K$ap9w)7QYf~PKWS#7^r{p~}=zv^gJ6bH21#X_@Xm%P#@(zx-K;OFQQ zDM78u@Fx(d71TFs&NMV*4{h|M<_N0Ij`dm_2FdyLVgb&*3i5W-{(5i zIp1?}%}EJchY^yAY9%{*zOUaKtIlCyR$pG`%A&EWxEsF_%MSjU;B4`7LQI>6#x-nH zF+Q9n9a1Xxcl-?~EqFae=2%Sk^+~xA^w(Xj(mRx8D!=MaeKQsy<6uLWY0yU) zL{chfjub}@Or;_WsGOMG@S8abZkTlPKtjN=2;82h*C^+!BKQQ>=g}3}ADoj62SxF^j)yzFqN; z>sz3IA;LGkFG

      pWW_WV|#{Sq=LthIY}Oql#?3K+Z@GT;;Jo7}Uk!Xm3r3L=?aO4Q<61 zzKE7PX)~&|cUzVTWqU;a;p5V{u?Sy=Ws6e3w zh>9%fk82%#nG)jp(@<1MVK(20oH37fvM+#!@Cu7sFwWh+X3KW1Qt~=>_AT=9BN7FK zbON>)vB+FfjiU;7+U>$)T21s_57wJL#Or{%e4g=S!sxT7-aZ?C9*&g>F;i(hOE{!m8sxDjNm;WA6J@v=a=- ze?%Bb&BYwJEp95i^>JQ!u5_!jQpxn&SBIfCRfc z=E%hlHvLcq1P9ugW#DaG@~^FCz~D=kr6mX|6t8UJn<ue8JPvuSrs0IE}Ar2j^|~)|ofjkM4Y$D~|GGy|fsrquA?nU@{fv zH%@*vNn4ZpK9E#ZOpXZ1#itti+gO(bXSE0dtPpVpbE^Fll6Dlv9Pq~iZR7wv|If^H z0nNa6M5rY}`{k)tK>oFIJ9JhYh{^v&RO~;c$^^wza8htWMI4^E###GueqZXmO!i}E zylgx#7fyC-%^qKB+G`vmIYh$w0^L#c0vHP-yop|RANENcJ{Ls=_a?{}OXF!nE7q06 zq5OOwyf{6j+wgCVdR58I;zRB*VAW1wUMRihnc6B#X!l_YRs5Xlqc4K*d#Hx8`@Sv%w8W8B)kb54*a8E= z&SbHe2U!A~D6IZZ`~u)4UsGktA*eYQ3ej2Rlxw2u7Ne`?gS5@6GgP4(a`_OWfjkdz@w0A6?2MMae@gY|3zh)@ow&7?02Z@fsm z56{B{@!W+Iplu30z<3b8$%|Gl|M2Xqk2BPDk;KXV``dCi_uMbjksk(%a%js6TNYBn zr_Lxim3xh5r#p#tTY4hNjI2Kr!q)Cl717280ceVxPYb4q=oK6Z--wI#nz zE4k-F;lin9LU;HNAami%u! zRCoR0Ivu6&+nOyysZ1!5_*$B6DM^=E@Awh8`MU!TD<~|8#F%=~ow#pPw<0xy zxALz4^z=HsQu6bi>n09Wyc_ZIIfapn1lbFrfSG@X5A;C9iJAE4pkXpye@Qcp$Q3i> zpgo^djbK{rce91L?x2QH%V$fA>L#*jR^Ho&Nj~C9m2q^6DGfB8=9O(0xsTgl@7wJr za%|aKp%#*GzN-mBg=3%k-@$ot-lDL$!)L*Stu_4Z^UU35G(l(FUtqD+`tqy^JKwiCDy9pnh59Kd@3@0D^AP&mW^`lz`c4*Y-0 z5^=E|{_4~k35o5^>&NFo{_wQuy)~@o{B!ZJyV@*scjah=2~+CWuZkz7(Q21y_@R-Yl2*63jQB%=gIY1kksGaFprz zs8F#b&(M8EmJLmH6kz^XvaM=XKW8Wo+{uNn>^s2z?FW<*&3`xB5^F$|C%1u!r`C$C z*3DhHes|p})(h9{bq(b#XSYx9*sePd&YnjD%JXX*WW*twy}w>B&?@`leeL4a$*QlP z-EiLR8#^6cPhER?{swN$`|FF>gIS+CaL)jYaQX|;-53cbNaiE1NYKQY!Y$*i&acm0 z#52(|5?Lz9hdn0*l9kv4X9F%~*XSC1J|Lgh#Yq5WeK6g4XYaWE-Rc4fTu9HQb1gCl zlGuFW4x7{YX#BO)3G;VSqs#+TG@>W&d&G1Dnz6m=BMgjZ&?UoJgCA!7V2!ikoK|#@ zTp*#3!X@CaEm0FaIGZg1T2bkU0+f>l!*yUYpI@GD)>GD2SPg*+2g}9zW5GF<2SH#j zM`w>-I(mvjF^X{`A~k zUDJf&=u9pzUB(VNy>xlH^ziBD*fq48b`hCB8HN5-g}A}b82M)}FBbuX2a4Oyf5vw; z91tIY6lARnKH8@sehonjQW0pz@av1~D{nw;j1FhhUU_H|1j?Bk!C%+esqyP}* zUDIhtP>ZVzCmd#nSaEQ^orFw8&f*0&nDuG7Qq!LG-Rr)6LE!LQ#cSYDogZU~MjV16 zaMoX6JO-G4zUGXdSX6#FIg|AYXIyZZfJAJN;+#MC$ev$a)5qDW(2*HK7qd&TP9j1B zZe#4BwUwZ4c{yg7Ab>OhAL=$+> zJtx6ma+>IsGcAo}(WoX6R2Xs!zy;`37Z{n|9R4{+fDBTJ5ZdH4g*irj--wHns`Xi3 zbYc$40B_>*ca+6}eljdBa(ckKfy@ivGi_ZmZB27M$yfWn=}8WH!S*#>cU2Fd$p1A# zdpk*Z#-mcJP=^lxn=mQknf)4(jH%x7jqCnmvBqIxFX;wZo4-f2_>oztJ^3|bdyJ4{@ISsilF>?TeWT1Zs z*nUB#f5>2DfQ<~2TP)?nMPJ2}d0gIQY>MBp(|!y)guFNLbl9#r+j1AT8ch$eBu>9@ zQ^g~tZu5Q7n7*jR=3u-s$E*HOf8P1!MPcUMHFHtIaQc0*H^Pr3w*~)Z?Qh7dnC02@iwVFHDN(bvn5kL7IuYtLD_b7)6|FA_~ak$u{V%I!yo~z zB;94oiiVFS`ggzHS_*9Dh@i%xLO>Ym**v>pH0$}C{ zB(CLp<;*wJ>A$Nm?;6GqWe$m7&GR^~{At#ITrA)6-q@YE$DnytaYl#!FcvB>kw^%= zM=?MzP*5%GB>W*p1r=iF`AXpRV?0oJQvFEaOlSFRCjK9*5on3mpj6^L3Pi#dXLTCFy+Mi);l~NB zCqc@@Mvr@n2Vy+lQk=4e)a(4zhWaWT?coFAJb#irx07kHU7HZeFCKj@P}o_Cb?&DUdZJ_%S~T}r3O(io}fT!>Je zJu~}y1BcZA`~PGfa6lYs3cuJB@y|ai$j|a)K-rT#8D_#KCyf2TsTb{+lV21)z&A`C zV01gQb{yT_yf%*ZsN%2DbtagXucF?Ar@uGaG3U#qA#%-1OTsGo51k7qGZY)BnG{62ep&acW#XX)Eo~ldgkGB}??B@5;^k zQRm48WrNv`6Mx~!yYB64KEEt%dre|Xyc0Plw%`~c^NkA6?C%b(5n>(__P-BWL!+qO3Q+vm5dN~c%R z=Z#fA0>wzPq?mMq>raUa=M<@G)Z_ZY4)BX>_FVxNbt92XYIHwmU)WyK=qR&lQ*aJO{KzS?+72T9kC)hoFE%O8X z9=?0Ie(Rm-{UP{-THP44ljV$~n!ZEH8`780(m z)Dm$+LkRiP?pC^~k_SBW=L((|w#g50y!hA$gpGLeKgsQ*O;u{H?ZcqH%jR~i=3-+m zmv49aM2kua(~QXHoDlD)%t9U!Qya`r1cnda3xrt*yYZ)M@CrDKfvVT zb01)G@#KG!$)Db`#az4p2-NM$xY>9vzqKC+H|^tX;~ggFb51b%DM3w(Rf_+(<}Rr6 zVJ819^uEO8eC~|NiH4Upn? zBmyyPLEw4w4yZz;pS=Ae+RVuiA30l3U-?gNgxPBQc6YBIP(QvhTN`t*QYU+(d}lA? zOqSHac{2HEN1PKK$eDDC{`ihK`P9d~38yc9Kqj5O@*i50OPl3nYS=ZL*72@+>NEhJ zmF<_L!C>~VyV?fIW9fc1>*S;A(Dc!;^ZIBHxr85{Z5V_}PWpSIiVY>}DBuXu*~Nyr zX_i^s^~LLFZkEer2F!U3JHNk?0VVZ1;WSUV);aw^@`QJpxq`Gy<;52KP}oj7wE488XWYOb3lFjJ|AzWG{xWf_{K@R^LJUK zOFJt5nb=I6`0-|1-k5g>W!vA6Hib^bDj1z|xm#Q9%1^OhZ_^j)VEnw%&Z<^(7IJ2p z^iwIhft9s0*2#nblayZuM5=I{_}Gsxez6g^8G2#-DXtE@)YTwYP1Q>E{^iNx&Kg*~`_noXl)~w|pqr&VNTK z1%htr7wEd{P1p8?%Ol@EzluWE)E8-h)rGfFAF#OaD2Q}2Wg1}Th(VE2&3_qP4R)ge z@im}f|TGX`Pg_A z+&^ut07yxqC$NvT#GX^bUB}KYq)CV|V(Nu?{#4y0%D^vG8jAO3UmsSe-Z*4#7YB4? zB_xAMU;Oj8wP(*9aQbSr-%~DyNJjrxnkjrJ8C@JrXEik8Pg{IZBL2p+-&Ll=BJ`qx z-@GDibK_=Su9jYU!ApN*9H%c8%egy7QOq?WGz4abEbNm^F9H~%b1lleZHlz@Hla}5 z%<&hcj5Jq^^#Z9YnSZozn*W1=R3}x9M2;8#)z|o9mVfo)xy5hIzE(Y;wXXpBceC

      V&T5g3KC*;z}0auo$L*k^>$Ij6s7@itM)_p|_ILnf4n&qjVOc-XIq=_|rR4cDml zy_WoZds|-hhQK+!T9><)@Ay&gEfn3bWBwf68#N3DLp%MJxS`?R;2 zM1^{d7H!V(dg~AXh^uf<=&)D_6n^< zaz$l&(3bM{c6+y|#j=@IUPG85d|}WwNP&uoqcMa|<|kt&t-CN`!bS;qK!Vy~sbQ$Z zM7@KPC<;h;=Fk18RB>}o&TutJF=e~&0%gPo_nWW}TnCtJLAE_y;^^*PVKjs#T8&){;Nq?IoD`mu|*C16xtc^ zOi;2zdZL8RXXrVSJE6A>oC-40Wa>mmXmWXbzM#ecQ%rz$4WLBY#8}jRwRvck6C_U^ zg(&+u|Ne!X+4G0K56Bwg(vqRy!ej$@x+lw?qXW?eRfDoA0bmm)jR04-ELV43{4{`B z#A|V`m_SKTzOpI7M2qP5Yl>=2yi{AmY|a_z)zvVo&gWM*onRRBir(6KpZuYid2b1D zfRf-3BW)kakUghftj2%xGu<>QZSuAQAzc zMKEy3H2B;42r2VJh{4n~LRWKCRO%T9&P^1RN~i?Ge?3>#;k2;Loa1Bf+8R1ypnSLg zEhfKSABl>b4s^z{@=we+zRG3HSZfSx!TMp)F$#;Rl2zvFr1ex;x$W2hJ;q#pfv|uK zW``$*96o$@9zP*n1-B+h81v@t=GCf}ipqFo%!ch+V>o-BNgKE5E0I_qXf2`mHi_Htr8OT;x^}OqSUIQPx0SwbXo{~`x{fAe zo@#k$m11k(&Xtg}i)zhx2o8cT;+-n}<@_D%~`_ZYAfoc4fc4mLmH`yegPF z9y*nFY{3o9+qirO5_U+rivn8Q{E11<8T_2G2{zyP>lgXvzGL|7O1GzOw>QUSeU)9h zktc9Faz@~B9RLfmdcxusN~s`%Lx2TzULS44N`8)52#v~PPAe3)FXn^R&Yu6@LFT!f zFH=7*<|9ckG|TB`4+eNJ^c$aIDP&&C?fVRMM{2dI*Tuc#Em(06iv&e2>gm(w*JTt31N*sMJY{w8875#%A! z4bA96sxb{@x2+d<^1S3U9&!_F^3>C2GbcZJHO)u^q1OZ_$1f+08(GW2+5LTO3fL0H zJp4DHGUx0xiDRzb9G{e>Typg>P?37l!;3tg8MpIEy&4JcowFOc>me9hLI8yrJ5_!| zSO%TsPF(40bC~@rIrOr z=iiw@AI>Eyv%_n%uk9h)*ah&^daD6O`vts)zkfprXgC7YmG{LBp`HI_4=n>^xfY*B zz(5ct6wzllxP;cS>!*28uCE?cedpTcqjaO`bxpaA`>~2Q1z$%4rv$X2GK~GO<;h1h z>5xb$)S7{1BGG1=i5Eg^do%ETZ5Xt)dGlQd%BT3x5Un_|=Cgc!!BZ_hI? z_5d|$nO}nS?zcXgYe6id(8ybPqf5*RtyqTz4s;vn5U}|y%l9-`;ku)!zUFvnx~00d zk+8?#k+{iOf_nvRnBcv8onAfN9ER$xYq#calZUIo+|OQDTHLxU`F6yp7wBuCY6SHC z9*ZwI^xuKvf|V0%ACWs|=Yu}z6)N4GGg{BuTf^wSPO|y!&1)wgg;{n(&zmwn)>yrE z%BiZL>Xi3r78wLo$F>&0^Gv5er5)qtCS%gegoQw`0cJ$sN%1Ya@*T(}C>S>ZwL<0` zurz^As~Mh;8VbcmFF3ugW0!h>)|XubnJsuP9F)Nn;L%~40SV9)Vm`YXLY7b{h0PE| z6m*~$$iO?f%;oK@KW+rC`>nrdl#9-dT&pOZZ27e-KSc=}?7fJIFA!Hlgq+81kx};1 zuq`KJENl}JWRFG3trF!S%VR< zBryWa!EF5fBqPUHk!A$F0|3j^MG3$^C|e(hf1;}Ew}XvQ65(83m1HzO2R~bC4lO$2 zl#pEAlO1Tlj$^`MfxHj&sqid#{!PiTxW`|;_NENCi#lRhDmcuTZhCoTs&8-YU*!7p&TmF%!Ki zHb*$Mq$Z-vip09F5w?}W+WmY)8Ht9zEQmhUQu5sr{i2A@v2<@=)tb{z-##>(8{@ur z=MO5=fjv8zi>S-p!Jd(D2UHF1m2~llYyxl%dj;t7Cc_`+GCYbE1Wd5M-qflIYAz2n zWM~z}ZN1osW?%E*Ot|tgzc?fIuhDPJ!ko`+;6MI_c?>k2Yl#H{xI#@AehtYGiuT_x zUQJ!(T#ZHzR;QoqK0oKP;}Vp(N=xm(+!wCe(K*V#$V;xn&mjl z6@1LvTLbDFkb8h5V4S!FrV|BdsqZ3s$CC62?#(bpm*4gZCYe6>FDp~$&%|i2Kx2n%)aDtrrB+~dw(3<-xjad z`)1*(u`9W&^=^153mt*aaw>6I@M9JJw} z;w9YpRbnT&vR}2%9+* z9A^E+G)Q)6`589_CzU#S-8ajsdf)CUmOU;{o9p7kWB=))BZMYfk!zIfzDp`yQB?F1 zBY9zwoy424{2{4W`)$_t+aKZR{`trScvWcX0L=~+-6WsE(d!8IW4qzngJaNTPh`?} zPOd?PzVIa9Ic$S*o~Bj-_;liviJRzh@~ykrKj#nd<<1Ukv(dg|2DkN^-8<&5hTH0+ zY8vXRfQS;yz4+EyiGUB*I!yHVqlHew75!|B95qyAKRZEePOWCcYIUFAR&AxUu-ds6 z9Gsr)-#!kWg!09yMbiJ>-GL4^ta>zr#9*>EgZ?(?cY!8QFbVJKoeUcywyl3gc_9vq zcTY|F33PrKg3}&4xv{L+R{wdk^X@dWTN^2}!j-iZ{!C6guD8ZVQc`oJeyd5533j^Q0zx6%k#d!QbUgB-|iLfoLo%s%7$k{~yqq(N|3UXQgmj`{VpLE7f}s z+q>DUC>5rL(cH@blz;L|bz9UQpV3YJ2Hgx3smPpe@BlK5^FN~7VoB8_#GRjzdX3^@ zxxc+#`_tz};kdJl^XhZ93@pw-#MI8Hr@Tu&*rC8iCNDaWm=I_~mIOMGeapPa{NoEz zPx-9WyIT)h`MlnoO&<31)r~TnJm0Bi!7gWoYl>5kQcx+db6FY!2hc?9nfYy5BWif6 zK)5#LXXC}pY~gO8Mpp-5=m7D*}G+NElKQp&?P3E$#-#;}^h=*j$!FQh~PR7z#W9Xg-_FNXVi{ zFB=U1=)iW+_kuNx2{TsF3MQD(mUM_~q5UVW!N#9+(>A=3GD=}(@}GG73mF`tXF)7?8E+G`Fnr8 zu=$LxS5|n{OF1{}6J70*s0a7E$^$$@&N8_fJRK6Mp6tZpmZ+Zr$#CR;B;e zc(td4rn+q`@5)0~>>N^&NbmH@o$+R!LqpUMgK?a0nVx|J)UCF~BO)Q>U_GXjG}7n8@z`Q>6oC0Y2s7mq!&9 z_e!7nk$yT#b4q0{(zE z?M?+URA`2zSzCx4P+(BTd3gTEV2mT53h9Ed<%P|ONcmUy@aY8E0ZwXG{q}KdL%n&Q6xO&iOAz z+L!FpvOLg=R#4X`9ska8YxYcPb?>j3e251muI4~CF51A@)t|1^`C;%hP~Wx>v#XM{RO|W`w{GGWkvE5g>USxo!LLXs7czo1R{wH= zW_*M&$t39s`?-k52&3G$)yJ2{bk(U{jbE!yRvp-*o>!UPo$?Xy5BH7)#EEWF)CMBR zVCLTix*$@A6d4zUnR^);4dp`V2*l4tpFfn1w2_&$B#f(&is`q6_LFFCNaV!@|ohGv8tiI&*O-ZN3Of)$8 zLvP=}aehy?hF-hQ)fJr(MnZw68MBiF@;daQahhCvdwYf+3AiB^NC+N!`{Y@o0D{LT-yLFw{1NKb@*V{@OR)Iq7clRLliyi`)FZSEgvp5Qar&i`=Ps@)Kg-W-Tt?J z2!LTOGD~WtQ-0ur)_bm$tf$>=cO4j30l3TENoC+SHxrk2I1sy;XY@pzmK3(Y!(cu! z0SokJO4>g#kUypLO&ZT63*%+whBNg7l;<+~E1=n4;v`i{ zzz~K~hiIZA(?L3Lklu=_+^&W}XAT{f)OZ^Gu~6P>{*$%f({waPXVty_Tyt@>LWO4C zyvd3}`W6ZuDR72h(E)ssM=!;BLU<%Nc8AtCJVSx9b5hb_-UjKh>^UUIegfePX=a2! z2(7^QO|}e6u~DjER1_0syA{;0i6~@1-L8Z(GF{S9WQLSkoRv85(S8g6mp2`B8$)^8 zNE7%47%=1znIN#oFRVQ0WDqUV#PNZ7%|w?^XpWrR!6MTQ`Gnf(CzL$M4vN;sEje^rozY#Oqy!j*3V00O8b3e5MS zT2f1*E);c114tNQn7re~JyJs<50;a3YI904CD#T21_Ukx+A;@1p;c2RrE=j`wF=MO z)vl(r){|Zl78Zj#;bQ{Mk47d0A#&+yQBeEOEVCb9loJe2{LQ%H%PmsK=4^HcR4uC4 zOQEXw8W)3BN!hlB4ZAqd^vcsSi>P@f;o4I6;%d$gn2g?);0&fe2r${eLllL8Qyh8j zI9F^Nb->dldLgnD$km*IVGQqq}NCvf(Y~c-IQhj6Obuq>zJ5u!;^OnQioHNpCO5_ zU%p z;E!Nsk!i?qI7sct;0iPhO6;~OS*-COUhtKC?JvR-PKpy_3Lg@MNi4tZRh4l|zqnKC zwUW6Ty|(V!+G^Zfv&5$4=SL^@F(m;>p|WtQB$QBW{DJLtLO`(-IKg3GZM#KcD&8d# zfdk#AvuOJB)xdh`Rpi3e#c~hmfXe7;JZEioQv^lQlJSW$i_rP=>?VO z*NsZ&`BLsYYdLRUyb~%8yb_39M93v{bM~G6QxQ85Qpn0mWT#*=?mTp zp4otajFlgXw*TO6Z`IDrt5a@2?$r9LRLR}XFStgDcLt~3G1-wOj(*Xc>;jP2`*0Av zL-iAfUBs$CcNM}jEhZ#C$$CgWt~ZM}%G&KZ_qyAxn|^OObSHbh--8NJ@Mf8CnTiMO z3Csd+VoDG~tgA5<6@@9fVN4`(Qo;E`OlfSq)i+q91tjql;Hy{`!Z8JJLa`6(Sr|yq z0~Fry!A~(RFfof|84d?Pt%+I*d3y+C*rKXeiV&w-5lAXfX*9vYQ7p=3$xO8CIGGrf zDx!r@4RV2!MYI0~)i|Ne`<;3_-I-OP{pvk8{App@n66(Q-6!rY2}T8JK$*k_v?s#O zupFT^FwvStYp~&4nLxi3{SnO?;dGvPJE9}!J}Pny2%pRz3dk2fhxNddiQzOb(}Rt%1eEV2Bp2bTmRmBDGus0?z4`Tg{2Thvq(BNaq!9vx)dPnynV)rbx8&e zlQ}WJ(3(VIgcpV<$jwA<<7zaK-TSGt-Si(GM#{u14qCI?@Dk!16%--);|!y0f~uvG zOnNc0H@Wc5Cg|xbqhE-kjBfkqt9|9ZCS2%)-gV_xHbpcos$U4D1y4a5@=glSw(?%e zsa^pJ6bKdeZF!=YagbQFqZR$=6@tN=8J zJn=AzPw5I`Sw$`siCkiiFGxFdr&KO%^Tk*qrv_1v;xg znr$!7j4hbpOp;K?^8Wdv#J**_42u=I!BhgKf4s>u4KmV(fS0vwzL$>dg2L zz_b#8Q-CD|R64Vq%C=HLA1>BA3V6cBqAlA1PC$`Esch(o*yy6F=|=GlE)28W*z~C6 zCtyp<6vs#nn2y1ioLo#zwanSn14ua9RIpN+!&@k%%eXZJ?lNvb+PBvkZ&)H`_QZsqns>tVt$fM%yKaTa@(3-vgJ93gxadEU%oRsC4=96tfkDRyN z(ROav(eXNQsJQS8k{4u-ugf#r=WDEsiYAgD*tzU#)K5SvG*8rdwC6j1WXI-f@g`hOHD@uL*Qk8^~7IvGzN(P6|o z1~H0lA|g6vcTtTb_>hxb0h*X4-s_{+UaPPz>XT_fQ3tK&wa>N1$&6rfFd*-#NeMtL zHc0CUu~1PuHL`hL)X5K@h`Px{Ji<->Hk{3d z2o54pP|!SM1bA`yAU(V_>J5|3y`!^MAMUsH@<28D7UT_qOnTLqUZg}`4#-9vPXvoxy!wUW58n{F;VN1p32N$TkJiNv?LvdO(UKMqZo|p((SJs!$xz^TnXIEEz zGlV1xRGN$x1FA4n4olP_f~pYTTCWqD3dxtRx_%*_hm=UuuWU@jZrSXOW#4G(7lPs6 zD68pfuJgb(>u?m$*2USHK|!UA4rRpiz`WaE|1FXepV&CdMzzwoR;yQX(H!NT zHd=G^Xj-oqPp>?>lwSBae3!BQu!dQwX_%e#_6|C|`tJttzU~$a<9KPRrMH^>T6)zA z)tC8suDC2cwVQQgT6DAl3d@+MGa4I(N;7DUpzbGV{a!@$*CA+{l#A|kqCYMTZ@rpq z&(G1R@TFm2yk3bnydZC$pCd?RL0qx2^HhdoSymZR1@qpKJD}6)oS~JWcXol;zDKSl zUVeV|4=TRd)_Z_P=YTs&54?%&X@WT&qoCoNp%q{yydu%qFL=R^pMcm2Z$tCH#JLBd zXUxuOXrhG!5M}Ccx6;2(#PkK!(@+CNK%v8+L6bGhf*yzep?kbuR;?1^QRsw<2(V(A z<&w!-L!L4Kg2R_lD(_kF`Tm+#7fuGDdZMf9h9(Pa&WC{-E<8^|IfmQTXWEeM}Tc$To>0f2p!c#k-Qi`%Iplml5(sRAG zsrCjHb$hL~o`&kOvEp&Tkg|~+IVLV3^I2JHkZ|#dE%2_8{&grE3hgW!i~VN5x2$$- z{c+RuUWn7yTcdI$K0_FyQt9S|#OM6Q-1d)(IL^>r>0ys_~Wy!nRJXP5Tho?ba zZ3g9ql7>!=OQAKKH?tKQ5(iDkl1h=se-`KdQIP`t-FYcrn`lUrA?HFc!9U->@ImWf z>0nAJrJv6bwk{_i*Inj-IkRWcMJ`J8@_y)T?t4!UmE}usb*JX47meN1vvA3keEy~Y zBRPCu(*1+pm1So3ibz9bX7BG>5%M&gKu`X9E5wZ2((R)*%@t-yiT9th>x)Xc`}AV8 zHWl7FJeYOl_dRB56|4-74qfQKmwc!E1z(SRksxLp{(vz%(nGJGtKKZj=ZZVj)cZl- z+K#49Pvk0Hz?hLB&f-m+ZpqyK-$~iKw^4?^B7GwytxQ$0~1kT4NKvNfg7eI>y&V0 zqrqgm-HA#n7r)boMx*p2)FquDey?k?5{v^LGE8i8FglrgP#Cn51$dC=F z!-T=O)Sg~l@9rn-jqC}7mzTxG(`L}CNjo0f}{zueH@IUCyiJ#>-7wPjXp41Ph&VOtgV(7Qx)Q#dhoVxql z;;jF0-8Qz`0;rd|xm$O~#Y!c|BSVSLjNRi$6c&-)O%!G+v1FxujKuHwz<&v{Gb%oI zHuYS2ywn;9DD2@iobUWX!P1A6f5id}2jAh5`zl zIE=W>*SpL9%9@nR&kc3GSUsS5JpyYN!V4Fwo*86bWBaofn1?w;fZ%2s#$k?p7dda} zC4rts?iow5qS_zSO|hCmxP#89mG~Ke?~q^A?bgYEo)89J^m|!~ZB|89GyoF!7HYJH zPA|6_E2eUNLGq7K-ikkDIb&ip)pvz#G#wO9^PIyHS6uH)wY$snW#_gn++O8`8FGr< z8~v)Fu6U|oG%(P-;^B$pcvus3ib-fQ$P3gyP3t%8;V(-2kcT4z9a6UB4s!Zj+O6(v zd96HNnzNBBblaE1F1LZBfwAW@lekD0WSH`SA^Zc3{H{U#Wl0<=UJUkdoUfLOnHV%(&mDziXk&dNRGz&RcC-VL5!V50?LQy zBMP`{b6z(b7snu)!pac%`$_A{u8Ilv=cm*z0V%h@0cJilRkbwR)({ERWYt1X8I%sw zv^B#-B)wdMDpoOzgj!<*IwWtP3>v6o&>2s;)I#sPXOa?D4%Gzy9T36+m6#A-N%kt& ze(jbXZy%dCjmql2)hf;V4Nv1fOg;!did=W@XgH>^M0m!eC4^!0K)7IY{f&3$hwW>xLzUZo}wJ2V@IaUD#TH#s#;6g}H3-QFiS^ zZ9onv^a|u8Bl;U?4PT9n?`GL#FznDdpmO`A*O&T>hyFlmJ9qV$#` z>-O5amDzZ@em%dM4X<+xAymOg#fv;&$1)bc=79YrA*+^4WyZcAC2N)$@zqEgYg$By zh_IY^H-jfre|l)Ph0>kf+K!h!^TzR|YVDb)+XXDiogb8UcT7HHQnUW40^s3T_HB4X z!A=0M2moxXGcFGP$swZtNeGW6K@u_1gRs{H`Mr7trZ&WjLr+2{A3~<2%o(k+I zD|$BYh2PyjIBN0o^-+BA>-zou%qTWgcY8Stqy!;1KnzQ;_@sj*d;;YIBZtYmU1Zas z-93<#&KTaqKM|kcSA2ef%r)vZqMMEfASH&m3Nvnc_RaT41(Y@;Ps!O^=J&C+3q>>K zZUpENnyYI`m)T)e9-HYW0u(C1R8=4ePy%ETY5B;o(kilHmu)nLRz+Ji%0Ti~ine7S zJF=(&5|psI*=$0GS+o-L&wS5)tmQtIC8T_d> zM>WZk9dhzFz*VJ69F(9Lvj~a7RNmH%Y+%xLQRPjZM}~_NSjoY=!pfVZIUN2@l6KT} zKE!RL@J{&5XLMfxs;L@CAvMhknk4G7z-q!7 z3Kb_JSqxZuARjV(_5d0roC{E@5ELd?1CfTac6cwk%(?h^ws+>crn2mqmhilbc!IW|1;En%ODPC{3WO#O6PD=2V`vB?d#{8=K8h1TwnF4 z{hLXna&umjhAKbYuvTDJ5navU8<&&TnSl0}6akKX(mE+Q<%I@Cm8|grX(?)WbEZ}GfT$5-~2Cfa&gO8Ggz8n*v|Q6ZTV!+LqCBN z;t*$jyA3NULMxhgT@D`K144mp>L_wVl*yxQMRZ680{!^hl=s!Ehbt>La^*#Fc(wGO zOV^HW3*wlk60$b|5cPysf}UUjri}zd67m)O$ReKD17A%YiMGKp87Wf#A1np^kH4#jAX0Ub4`f`Gff=R$>JW0`>0H zk`|hAM9!pz5o4YwuQJ`4e+P;tP}T0iy;LQ~?%BT#o&I~&Ac(3YWL9;BOhna`Buj?V zxM-D28Z3{BRW?mo)hwiy3K}|k*up1jCdl4OIyP<1U%nnBffEinlgy!{J`mHiC?>%w zL~FuUQ*P|8T7!G-p*7pz?Cht?^>cArx!$1rE=xDWVT7>|%}M%l8-mn7s01i@ro|9tbDjC+ z==HiI?k#oj{4jsHy6~Qi=hVWmqR2NE1)%#ZB`fl&?&i>Pf`me*zyB>4WXKASXpe}j zHX`8jiHqys>E`i@6h?aKp<3}C1@}@JO>%|${X_evUsWnR9v-}cH&?2_&sLtmubs>sPC_b6(KipbE<0Co7JPW2h>hd z;GhD4LAF{{zWj#VQB|210SGM&lRY);zv3tRJV+7gc!fH>i{e(_F6Tq(qS~5PTZ238 z_I$5g%u;9d5S8k4im{!LK|ot&VK!A#SsfmK{=aL&>F|B*=_Ph9B#!Edi<=a`NG?jK z$>bfn3zBEvoMqhPC;Yhhs?VLp)vC9BU6s`H=hE)JRF?*dliF}VJh6bbbb3AEM`q$K z@Nfpt|93qDLNGm;P@NL%Idg-X$tB~fvKwDq&vMrMdH>LRxHg{$tN!@9C(SQ~)G0q& zE(tFD#1?~z&B9qBK0ZDD-v!AQdPJM#GDO?Tb`Njy6|!D#FRO#uY+rpG*+zGf+mAMn zTe16E2u*f6;IJ#ZU~q_i@G)lL14g9mx`l&l>3w)x}#B{pal+Ul`s$cdBO7o7Q}8`;$sE$h}C?~Ui) zpmoaN@Qaa?#DnFZOY6$A`pSnGOYbPl*2#4>yFlxS%dQ|FG8G-AJ`}bEmn2)E;f`^vCP=v&`$D z0^`ngjoAu)y-$-@6^MCb^0Mdu_T(K+COg@9ewpU#ep9lXvQ`@vRvo|9Fs}du?%4Ck;#Ix=*qs^e z*15k8@)VfIGw-^#V@=FARQZy`^2}q-<^%r5ROf=Zzwyp*z24<&Z%O`TyZWU0?Ylec z<*Ji%hPp0!#pl2dc*9Mt$QANZ$25+{{Ef*RFn21jz)7!eR%-orHK@$?<>z5;I4E=* zFN-HpGgJ1E>rM%cYJxn?R*KkScS8hgJr~$4--8DOQ;79h3*TZanC3Onc7awmxnSMIk!r499HQkw&o*1~uv)xqZ+rH` zpimG}YeAXH9%W0Okljdsj-Vm_fGmS|68?U*SU9I%7;8B8v+B+LW;E%qt?R4na!!7} z+!oPHs!{Iud5^EanKB=~y&-_@Me-&vc-Yhb-4OEyw{ntufsy8T8Cq6rvlz{`t-`K< z)s`J)BgwOKsd{gxPT4v7&TWxgw$VJ~4HA~j>3t!?JDWHIj)(q@7l;d>{p+*qI`_6A zl$x(%v2geLXs$NB%chhv`RC|K=`UUXtz1t;*iy6(M*QtbY~L%Zb1V0{o3DT=aIusN z!2jr0rMs&G5~HLC8LlUVJko2@1ZL0w?a8~TIm)0tSE_ZduU|j5J5#0MueQsE9n|1( zhpeaRy0df_r|ByQK;I&jrXsLhy>P_en8JZp6HPM0~0`E?rG7L#Xc{_xSJ@ z7ySi&eN#4-Wpz66y{$If-P`V zZVaa@(1ErA3SDDaHF2lD`F)66$7@l0dMvanmqIgF>Y|13-X2}ZgKO99d8w_iGUq;8 z!`Y`7q^z*k%b|ZF9Pr;ofpDS~sU#L;=7!`sUXbNOQxk8WMlTmn7dds&crd1o%~MIc zouxb!tF4a=ywl6U+9$@Mi9h}~UW_#L8S##3Z$DQ?x899czUw(oWn&LqrC_hNn_4er zIqcumYN>-N38qpB5NG}0@bKT5?15l1Km~R>Czio+>1uKj5*pOuEq-pVB)2rr-Hz>N zx7e`c{?(-G&ik%)SK%?PB@eg=-&Eibrwb!hp#5T1P_V@doH-&JuhE(z`y7A@h&_&> zNKm1=x17!qyNS!_4&mMb%^UQZU{7YjDX__W6dd!1DoOb)LlPeW5C=D6j}Qa3p=klb zf>DUoldpaH*6p?u@ON_$u~ z{xN#J<2C+*REw*{lUx|=?b6!V?Ud_5$?@7(mSS9c)r;26$kezuayiMP-x3Zy0wNR- z>Yhu*BFi=hl6x7=S^B^AX7&;eOLWY(Y-dXFN}B0lUt5NSwvZm%_dpt*EUocbx8D-W zlK61;55nK_lPzXuKAIEHTvkRNZFx+iuyMvt!3*Y;*&2>;(4cW)%I3Xo#|1(Pc|9&9ZDLvVmM;U9H%FWSh;UwgE63fYV-GR69_%h%+;O;%XZf9JZ&o-8K{3r-;d~s>a zGcLl~imq~=*i`zv((7|={H(N}%APR0-it5VOS4?!%IVUbn=585i{Iq$fQAPCQ>6$< z&I70&G%r_Kyhc`K1|N40ArDkxNP2U&nNDWF^F@1*IqD8MSQP$k(H}_uu{1XX*1{Ef zihlANp&{-pZ?yO}TAk`M6i)9G09#5~7Q~`dQmH?n1hxd6U{R8dN*TR`D&U2(RaPo0 zSfXU0e>^bC(d+O7tiX-q2w5bU8OVJ|wtywv`Ec{rUEf>3d3$AyGw$15yB+pI}QqwXSsLtgXpx?xG7G z#|8^`|JPmXJtPa!2JP1&Vc_04rqCI17`ZJ-{~FDP8v_5vKVge3fz1>3I)z{eARFmL zYrKgs(Zp6aciVgG+7~xXL)kp|U1jWD-Yj+pOT=o0k0+2^B6R*{4bwu)@bhbwRU`aW z*C(t5KE1;@g=eq&?S6Xi<;K^$-u1j(vFnT8<a>>qtd2t!)}UZZU-H#2X1*3np>>Q2xf z3cX7L(?Q1rmIX{J3uy@)cyLB7?LgM)I6OwEy!}U%GxjxqszLElU^Zs+kj22r%8m?j z_AL%BVZwwh99<0#b?f@FVcE0Q{e8KnOpWfH_W0C8F#m>wEU}lz#>LUfsiLBgDJKHr z5iJmi)uE*T%iKNt(^l>eHctNRm1Mi)>S`@M@7JB;rPdL~mDg_Np>lpxmm9A<%YxH6 z%5(`=Gby@Bnh>RfwxWLtq5lM{=FcW~!mOd6I^g$SX;DIpDxegtDngLA^z56@#w`yH1m6J-2*@lah*l{o zoN+@O*gAu8f#K()#lhLkhPEG2{i_o3lyMiCa(w>Z85s^pXzXro9{kR#dTrP@hHX91 z2hQq6?&=RIj*E~okGW0(uo-RqvZ9jzCgM5B!7ODg0&MvrJQyiqnH)B{m;ifxb1?*b znEtwKJr%YWlSR+mo%2X}$YGIaj2JWlgaadu)Q3UFupL<__)twl) zSN*9;c&FrN3C(NPSlw7sVe%~6noLV_wXub!#nDBs5y^FDn(H^7N29CJV6#=1^2+Sw z?yeduUc0-}>2#2Qgex2Y{*@I5z8WBqokO_kYHfO;R;$9Blcnis5$21 zurz-c>P@J*93Gw~_{}^G4Udy9E-*a54+%|@OYm`M)IQlL z0mBcnMktqct1L+poLssopc#y4DoPO$e+GOUhL$%hZ|T_RYXxodT@>M9eTISSBZOR~ ziPB<$oWT<-YJGtMF%eec;-^ue)m^H zbOKq%H#vI_7V>u3tUs>X%ByIoj=j5=-G23cVsa@!6w+2ha1^+-_^m{!lmMeh2umpU z%sQ=o#k4a z!UFr(cr_i5S0}o7OA4T%0jOyFrb-pv0D7cQv?Woni?W8c-enp8Fck~8N)_9N21bCA zwBP}I1hXUGYH;NwIw6e;_>Gg(syM=vICy-NtB%qhJr#6gupc&VT9-V)8-G@CKxdN_ ztsGcmy)eddil%4(@EmwKjg(*ei&B>pXj$GWTjRF3dl_$Yy z0(J|uJw6ef8o{Tsvm}^Ze3etL(|py$seE0JA7q z0mvK(D3st~CA;IJ^m{`^{F(F&Rl)@G98%7k)^fRvhwI9$+|+U}Gh6Vk?$_gMH-KxU zp&WoRlK3ehCyFIxBeACLQdvNI2j++S;S>1{p99k&X*yr}gy#HMD&FY6U(;``nbcK! zr6=!E>0RiL1BJUG7*zvXPWVbxIyft?PwCo{44r{W97VVn#4>})|6RNLMCd89rfEK3YlqV=iq%7|0((#{ z64#(_hta7}v1WfqF(*C>!7D!=#p6))_B>>3aGft&)q(snHmuPmO9PK32r6Dmo~KJOF`evQ-wkd!1S$C9Ux?);=jhfymEo_}$! zj(M5?E6`Q=A25&|3UK@nAp6B4bbiLEEaTz3=EI+XJCsuaEPtY!2P^-7{w;tT!$)aw zeubC(4^~0>CIrt}TX#ZN&>1?o;`{%D7O)t}|AzUKM{^&3EqI2m!4zc|>w!PNvQZjcn+`9wa4TKpkX^OW~DFgA(HQa0t&v@5J`o?fiG$HC>5Iy2mU zO(|O1%{uZR9FMc=zwF$|@C#^@N()wUU0WI6bAXc*sFHhtLm=g^mg-aN_SJI$TsS(jWfcthky z;tQHsH|#Dtt@tjv^y|_}+rlr_bq9@0=e2V`UR;+f$L4`-5-NP(VgcF4&3mb6HY^X` z95=MqaKbrAQL-qpMI#-Vf*!YQ>ofP?06szlw9!ux;wu@LKGfoZpM6JX4xaj;(j4pw z%5joS!NBpXs)A*hrlpF8RFWiHG!0FX)MBZkVZRHC6xze=Taz8SLJWV?$SL8u~tUDkX`c<(?D)c^zO|?(Z>_a;6SEQb_Z8%p*uWUJMxd{XW zZ(}STa_7!fAvVau0}t%RPrQSCOG#Cj-x>XGd4_Lqg#(g!j7~aArnWW1fmueEf%Z4rqx-P1kZWL3jxRf5Zo@PH6wfVE8+%@Z0oqoN1BUg6` zRt&U4z14g^^N{HW(TB90vrB4J*AE-jbplNwaj+dq z!|>qr1>}*b5^SaPCuN|>|Zu1mTI)p>wMO=qt_>h1i zLg?6>1mpteQ*29ql7b&*!>>roP1`X#7nh6iW8qqzg2H~Nhauo^w~K~77kd!}B}lu8-xCN)h} ztdeQT<+7njnjw`%$tcN|X3H`HbKFPDwd3BjW;A9`L;2j7@0$I-IeqP$joI_US@(fLUs36DZZXXv- zeUKx9axWiEFMYC0v@_RQj%MZ=Ttd$D4c<)6>K*<}J^Mi(O-MrnWs*gyY(n#9{L^dGg=ZKYYQ z4SB9E+vPN&NLaFSIYlNkZDcsO=x>UIejGL*B-F=v?8}j?wmL`Ci0)cnzDUo@M$g&a z?ssnGD)$_76?xIYRLqTja5R@7FF53kRANU<>%7(dhd>o50Ot1)aG6>jt5pf*;~Nac ze&-z#$Da8dJJInA>;nY7fpSL~ng3f!fi35J74 zJkUTCVs1hCb?{mjZ?8w{_+@xMxs`5exAL?6EY*1<1L8*doPZg#$ctoyGE3`~&`X%P z4Bn;hhxqX8P@0oURO;heb$q*M-IX4IMWUCUTX*+0Vfm8e!ZCs4A&iCm=L0sBRaInc zh&)bY_ficGKZ`YgOaTHg;XiQ{`*Z5AcLsZy5?|lsMBGlLSWyh^qXvc`L*o+Bs1JNs z)Xb7$AZZVo>y$$(StyxRDwb8UN}5zI7d25=vAqHVBgm}4k5RlX_)x}8dNX%!&9t1q zsNc^mQ*U)mRM44+R>(=N>)iSC0j45IA%!B&dZwBv zW%N>{?b}Cu_pIj(r`mD_(1eei9eDqHM+YAHC|99zOp!VZ!*G)|3rUH?gNH{e*OTwIJJih-6PsN3 zgA*f*nj)MT676rqOySlb1?B`XKgL*Jk*xg8usYx{t8#Ov)lBE+X&~EuaSBGdohOc0 zz8y33MJT8)S5Qv&$ata^YyB$-gHLe+h;GqPL%X(PQ^MxFr)s8cNC3D=5l9C_<7H$r1ojBCEDy!$go3T@tMd&?wAsOLBI( z&OKfjR|{P@H=d-sN~2zw4<7F|`LP>&?bw9g+FXEj;p#5RTnJj4rEXNqp5?QFsJkhuYkFvH3tHx-&yw*Ds3U@rm}becyO>ydk3R46%2%Y6R2vq~i+jnFYo*K1!;QS&k5|$n zcMHBJq`R)I~q_ zEeOjyvjfIrx%{0S{JhgV9G*w1{m~mf%65UZLmmw{$PCz!vSAf99R`jd8s%ce)NIK# zD|ST%hgKwfZRpV;-cP%@8TXxEjk@>4i;H%nZQQ*N*9m zyc;sW6>wsZ(fk>zX0l`Sv%fNZZ#{9?HlKP{wY*tNud9d4hk>cCYNj6_tZsH|A3hHzJkH!&l|kxjY3SMO_XPOn`|*Cojx zmhQVVMOpZrvUZp}*-Omw$qHBL-Op7C^Z^8Q5DKiIL?|%`glGqHuFrVvDtr=Nq=X4on@__8uhYP9>1VA(!MRv)7P4DeqF{F zrFk?>V6|LfOj;_dtnI}44^j9%9{vSsZPwM*`f4n+hA(2fBHdr#JlcXiHXCkiy@rJV zIPF;_fN-ces_?^7jg*X_CO_}bXbhA_ZL;$nLe~ZGVtBfr88di7byGL?{4*FoGuj(4!Ad) zzyk90ke-ixDWG7&94DLj_mlWz?EGbj%}82WSI%|QELiv5*G1i^6x-vjWRIItKPY;b z<`ETJl8qyO6OJQ~zY#H73k2=%Oq~3lUv-C7!>6Jav|YW=L;hhWij0dGoXDdV-IkA$%KCdg_GnuYtb{ zjOW?^qi$%r+9v)<)V}BzG#{zcnhgz3bGQ41l{!S zkS$CAcdn6;vjz#ZA}Yk~lA&28+fdD;$E@!z^!Pjqm_!@-tYy=*;d`P_PQT9j?gMrg zSwDG6wPevYY~8W}Y*Zrtj34D0YzQ;tO#z7CCD6TstxzdGA@)%XuhVU0Z&{=K1(DtzMG(c<>le!FJZPNakDwpFovoFh z2T%$y&jFqQ&}$9g?#TzSS4|5Dcr@XBQM5I+1SlUkV-R&tKe#mWR@v6^9R>hj@vD_m z@hzI^P-JRbOm2;SELfKFH?^qn<@N=GNO_etZc+9E#SALpMxGtET=6| zZmUBC`+4LY=$ZgvD}v*&i>S=Ih7#y3~Ii1mSAh(cli`E-|x0 zL4ovv#}!@a5UOVFr7?>#6PDU)IYWIN(7+~eBL<02C^zepfV;fBjsd1nv|2m+2f3~N z8FKJ|^74NIoZ~l4-G;mT_bDRnSGP%T2K6)n_Tv(_m9XG5R~Nii-AI-Iaeq@(bBN9-+PuCv{2MX9@3C9?h! zipbYF&}dm>HvaSpM#J9{r18m?C6QpflBcAM)1?ON@v zUdH?T<;8W)M(6PB+H2Jbki{{#7+v{TH<93fDg$Z^gDtJ_(!;nP1L4D8FEv zkJIKa;1{N|#2fWzDo&tmVj`h=lDf)QX>hfitslDXYhl?m7L`upwR$OfJEd2GI(2I+OLhE>Fr+}~On-iQ+ODo~DQ@aSL^xnHcwe-h)v z_F`%U1;XTDQ;@R_<5RH^J=RUhkWmMz7U5?Dzv)K8m^=J`aNtdEJ#z;SGqxE(+AyoZB?M!k-gFIN3O*!x0LZdB=BYJuyL4bD)gg zTTNhI8>XHoGdFMh(Oa-y>=ETAWTC*P(W0 zM>nnM`ou8YSve*w{H$TNIhsvib?15SzqcPj7T?l(^AU(oYE$;+GZPqRZ$1F64De6u zw|@z~t#^OPN1fZ-Z-Fy!>H~l4y;o(^Zb+`J%um4w3?Y$yluQWkJ#hN|bOzY*-Rb)q zEt?l?`gt#N&M1z7i@>1rk?GQ#O|o7dKZDe}>;;b=F;DVD^vJ38jvk;QolJ(0p1_=! ztIX}?07DIBKSm};L5@IrKw4#fWhi8V-JJEzWH!vY?2g~qrF_w5Ko+vHnFF%e)oj$X z16Vy{BZINg_bHRDaLdo$#<+8Ok5k9y6JJ7d{-j9p;SbN8A+8&zZe(&@cmQQ?Mt`0C zvb9MLAxq0-4Ig(ir?AFxkxe|@Ik_MG;AZwKXD41rE1Aia{@ORR?A2v=jAiD=!!R&< z_8e9a{iiflT0nox+L|jkEWp0Q)LL_`=JoMX7;3M* zTyrq)8=a+LOT}khzV6>MEgc6Ul!eopjRIVJXr5vITSBGylvYD7p*K)&6R-Wbnoe@5 zIsMj)+Ks5we%v=Un-WOp(7~*B_=tK-;c+J1UOdxFh8!}NmvC&%ux3mYZ>i-pA`N!@&ua56?JrIgj=%u#-;SKXpTSXP|OwVD@!)n|*zXf{izSi5@sH zlw@AWexY)Tk6xU(e1Zmx6#&$kdXw=kf2L)>jdy^}7_r=v5iA|+L zAq#TT?8o=uj|sJ(wJ*`%6(0_#1X7sBL&}P9hG(37Nuskxu<6TuA!=@Spe`OoXZ<8C zUy7!)zf#xNx#6qGDsaMu2pYj=Ed;t5GhjK?{gqkw_7DEchmBz=R+0FPpHE~S+wA9_wAyUcXx!hqilVJ2`-$3H3bQ^7H4`lZMvd(D zWGn~WJ5Zzwy$8*yfa`Z8Gd}Llc_V-A1l5vf_UF!P0mTZRb?-zh2^kQRg3)k`w)0x+ ze0paU7xTf5yM0{Ev{`R1O;}I@G>qIrr}alc1b_w+QY|By=uq~4oR077JAWjfc}U6CKXf@8^4)~rf5i%s-Ovz zg={t;T@n@{N@M^9jf@vvsQ?R;RS>?Da}hf(W1W?`f8*s3J)GYealaD{NZkc>;hts` z4%aTGejX*cv+#C8p-nt7ntN|Q0J9K%tVgrim>SZCOPTRo+_Zf2k?D%?QQmrqKUyu# z*=G8&r{0;-(!z(rqxR-6uH4xQNi~znn~x=K^3!(u+;2>`b)#H!hq+E=xb(b|c6Gm6 zwL`r!L1eC8#?wfi70A;e0T;GN{jqKEgQ{da#h>Kd8;6Q!>@?QiSbEk=xLJc8&-j zKPH{&?ySX*S$~d}qG)D%7CCp$W{CE?&K|{36#3?ePzLojW4VhgmgwX52ZDtGzpzgeHaxbBk%!dpj2kwbq)3_v3@EvX4~LPXC~%`3-b$=y#y}jR8_H+QxW$g2 zjO%k}J;R6-^PH2*=5P-FMw`!U`_vtB93Kwhr(fa*Ki#_PyVug}Ua8!l%e|Sin6K^z zmabektqkssY@zVwNwG_1W>g&&BCr0z9Q=9v=xcEFp+IIE>1Y{>*2rCo)>f!ambDAB zH!^agvAl+o8EV={5g?QnWQa2vq9VEA5EvcqRt7Qwc=Qs>kO@r-?!S7d^*YyQ{aS|! zhkmQaRd6)a;L!3xTrs)|?{e^?XAm+L5c#MdDgiIW0_Y=xC7yXouEdu=rIxEj8JYb^ zb%9txvu9C7;Ux-uP_hn~In@-=Xio-+AB+vX44^s7GAdNX&XsB%F{z*hPguWk5<&7< zQ&-?X3>?qzD)0C@{-}zzW{VXLNz4IvqPv07XHW!DGf9+%OB{(Zy0v!D2kZDAB|jnW zLf-{K>u@aK1E(xWn}<{nZ~N2boc(gfs}XQ|?^f1qmj>P#L~sv(4)=JLNF2aD{m6lJ zd-B1osfWLlIl+l<0H&xbFgFjyN8jxC^A z?k4vO5-ow~L?#gGsmR{^OLolX4W{^ue%f|n2Gg#(?r5X-<>q=)ZB(XuYjHchnmt@x zsA2eGhUV%l4?F2UBfCk=j>j0Q$>w3y$X> z0Hf@%I9!z(ZXya489Z6y(-92*f;aKXxuhBT0pDymm`@`~K|o%mX82WY%)luf z1=l$ZBjt=`{~*VnQ8v0da%Xf>A73ZWXU6p)f9&Y_6_1do-;S)&6SJYDNFoV> zdm-xqR`Ha%w2RejnMw>ve=ob8@kZo?hxsDu0iNrThvAR{zQwae(hvI+D|2yuZ0@X= z?53n*AHJI>x0w!eZDib}l((bHvlVl<99{QTSrkUyG>}VAeDZ4g4iSR~GN!SbqlvJU z_jfLF=P|=s)|kZb+?gk5#kItjk~F#~KaahQyOI|d-8+A%I+k-^=k;-rJZZj&{4n7+ zC)E*X@2q<{g&SB`-cO10AJF;IbNi{HJ=XowlS-@?r}%k)b2)#}?;e%v>b~}TU%66I zK`r_ZkzUU955W9U(`(ASNT?sEYiFR#67t?q_DW7~)Myx?hlC^k1;+&{$XWO@36+~z zkfd6X_ly+rFoVyWg?~=G@%OG6)^=59? z49$FyR;`!X<;7+{yOB_%@D!#nfpAe2FPnCN%V6-$Vfg7I675G4y?z4in9b=8?&Wju z=3MqRy0<#t+=#~G?RZ(a6Bu$9gmpxqq>Ysj`XZVTu?keg=`tKJpRqbWZMr9qg-@Lc zXo2zhOfN>Twb?9b8^Idyu1Do!ZF;Xvdbzt8>FVB9%gSEza zw|CK(@{DFO!ZLxO!os4`2|&+Buc139Z}_fG3Jw5o zGROII+A_ye!#h#jIyxTX0>o^}D+AH&DPv&pz~Q%I4tc;>9lg-hH^53ezHC_D9BLaf z4H1VV3WZTLliy+QKN^OD9zgvZT_%MLyBa8M0hNKsL`nZg58^t?p^q;EXLG^=a#A>r zv8R`go}-J|69YyB{k|CdKK?xM918SlIekq!dOH>G;~t!=ls`Ake1Mkwkn}F<%m6n* z`!T_it`7nqzhjDGaNqJ%)S8-JeyX!5WBB=WDffsFIU4Bn2F7sUO`_iuf>q!*frz>qo*2l0*D}UX z(grVANPZ4~-yAU5e6>Sj1%#qHdnC-9_$eNIJmy_Km|UtyKP532XV&{rZhm6ZgS}BY z?H?~ZKTq-~_syW9OPoh>T~FH_|6X`EH9=fFK)K{!nAgekh)sR;9!i*;F&i%2CQG)T z*;gjt%`c~}5E6%NQV))wX249xm)XH~d>QC185dIo;Fk4r)zLPcX5(=t-(K9^SKW?X_YA>ota-K) zNmBwqqfJ37!YR!NT5(Ba+Pt6&L6Rubj4;U40Ab)0{w?c6$=~*WgO0?Mq1%gI@BHez zeUe=4wDeDsPe-GvmI%wzla=v*hnEIX+6<5QQe z|IsSh#K}@FgNbEoae)qXTDzK$m-)9wayf8Fb$g->Q4KzyXG!xqp z17qcIHlI+rva}}BS%_O;GbT?Oy8Jm^=zYEC3n?!MA~L|5Lt^p;|Kh3*a%`EF9qC2Pr7`p>CD0+ruPufn5Z=E#jqDQ#QU|RtWRbajc(%OWwn;&YPj*LwxofB%}2S0-g zc=y>fxh>;2(Fo3H@uEa`hx1v+)zNa9FcPDO4@{frI&37z&Uj6L;uxTlW;_7Z=D@&+ z-bwtDp#=XsD3wJ{ZDsbb*f#v<-h5EdR_d%R-YMn+FevEB%r_7h%BOS%f?J0VC4@}u zF+G6~;r=U@dauuxz_4XAVHIr5!}Tj^4b16e>bqRGDk;xK?X?cy(Bv^@Fv zv>(b~R%Ez$wJe?LQ>v4;)<)!)B0ZR7Lukqe*BPCY*WXmN{%FPMgv;qo&FBZ+Q9q_I zopM+G1U+iDMvOEeG6U)UhDS@cnDZvI)#+rRm5%>Td%XS(#}@GQaOwbRW9Y`RJec_@ z|JI-3xOzu{o4`2%^gIAuWh)|F*8P<}s{gyxymwq$jtNZhBmT%z|6Cm|;gNI9OnCT^ zzu)s_eOy<>kE$9O{-v*^8l*yK!S`(fUkN+WBM;Va zj+}vb-$lnQwnBbv?NB|Ex=DqqxRo$(>B`*HGonw(FkvY^2M_Zdig-D-&%{xBc$@hE z8OHHZc#52zo5Ls|_4CD>-1t3QBiPK1dbOxdx4EaALZR_2wY$~Y=DKF735~!cjI`)? zl4+P?2@nS8&;s{GQ6^soODZIZcy?YttD~2cGe!SRhQ>TO!qsOV`Nh+f4*e7f6)C1= zkX^%7o}=_52J{z0*bi_%H zSvvUfzd8<;_W1^rfXgN`z+;5Q>cMgR$Eq>;A^P(j5$5x`Kv|yT-~)e-Z{^ckOWH|t zDlLeq6l}{dc28Jf(Vg@)lDnZV4k9$^3=imYq-@N5XPZZXR6+)akD^Z_TrK3Yw}!OtAqi0%zeN+41)$^a)gK9FYwgz)|?=N7My|$oHwFn!nKB@P>Z?-_K82 zelW-MfmT4rJfnDiI1kDpqGL00Gb0y=jY^yb(VM>GOgR0j?{q$}YK`wG_{jLJ?_=XA zv4!^IcYi*8d3V^k)AmEfx>c#m&q3{%XrRyRgk}8gB+Y zDhhg~vNqwx5)c#!%ezP8GIfT`u9ClM67JjCwm*KlA4gaN5qKge1=>K&xZ$I3sR)_p z!yCcd;GJ)JG~USyJ|V%N031Yv!{4GD)9loh6Bdpt;-~vPLcb$zmBgtTUOsR~ z22@Fezr!mZ4SXk`KMZ>Z_kNDDa>Da6GQ8bhBvmQV&!NbWU@M4 zSe^iw|0 z;OCV5OS7BbjvPVN{AO^|D=!IRep^=Zii|^yuzOh-_QPclnBi;WMjtD6)L<-sGJy0> zc2P#QNU&qFl)oQQx*_jf7eRn zc}7pLQv=2DTcic0xH$Dh*1MsprVYhtL@2B^mj$5@f<{4!2$ST@1C@>`P0`DdE$rdZ z7`+~nF^|Tt>GLkSJ4)I}(bX}uwTQc;tB^!lS2K*Qcu2On72W4shUa>{z1xnz9i<>B zkwK;wrHpzOf^Ny6O8gU`Ps(VC@31WI8=aRk)xrR4>Qv*eFuJE%#v^2 zU`IxOf5$Am^hH8uq)&~O9giq{!#zv0(Xd!F zRt@pGKWRO<{5z0m7ub66)A$U)m96V9ycmV^2(nu%t;eg1j;5}K`aa=U(oX9eK)xZ(6DKUv0 z{P^T^>4hJ)qqxX^tK^f&$MmL9Rewh>$Js)dcZ5C_YenJM57!H1#dDLhcq6APJR6da z@97UA+K9*bz>z+8%2$^00HYmQ?9sgguUO)GW{pD1TNXcj^jU%5{eCNokmAW-uP7+?5_*UBG6rH`I*kUXyONMx#&8dRx*aMAtw!M{mEMBw6B`It48PE;Z3h1wLgz+pHr&8Pz0Wv1Y=f`N@dm@u@x!% z%aOJ`^Q^_n;WhwwPybq$Rz!r@Mh%!K*54w|2=1KL>yK5Za0s0zCm@E>Dn&3LLvKjm z3B*UJfTeD-eH~mm)DMEoCvA%lF~bLQI65@q>+}U-md$*JpW<8X%?JpM z3GHC8BEvlS{4nIUNrce-|Cje>%c*n8y6Am91rhsVuN^EK_05c`6+fMEg8>6Jn41c< zAbKPEi~Tg`P0ov*FUOETbZ%z-Rb|(S)%?>E5`!E$vd=H^vb{jLlsw{_@Gnghohpoo zY7s*)rz&9$AKX20!6+|tVv+A3Ij+QEvHe34AAOjUJGliPXH9lq6kqxmQd~R9$Diba z=lzKNp8Mjy;`URy)b^i;l}4r4YxdrHE1{v)SJUTqqEU7lxWh}b(bPDcpsJa&LKw0& zZ#GQb70NWxeF|8-*^iQiXvi62OIRf^e)V1;a&@AOUdp4}#isonyvT22Pu@Iuje1$l zz40*^Op@~S&n1G1hANAi32mb4rl>QTHR!o0KJ=r=#aWNSW_wEgCWzg|j;`o%eY%_Y zH#O6N!ybJnc|hmf_2lhiXMKO~tWJw7U190XzY1|jFni};x|s54XY}Q+y$G)uLPV@T zj(zj^gTDua7b)glo-^vLi(YzBt)7PL&UNfu3ghj}+~{l0dZ>r@&iJSM4;*->(dC`< zdA{fO(DRI+xd3&Sa4e%weqaS0nK7TV40x`Isp|M^zEBbJk2V3tWmv~PXtWeAAO5Ab zLBiKOSj3-gGuXgTJPc9nzwX#%xCDy#uPM^~mc7CNE9A(Vv9)^Y5=Qi7Hx7Kh=*B^4 zdS^$~i>0fZ=W;n|>qHNbifL8r55@YKn+!JZ>fn1|VUZ!gya&X&EH}}Z!|ni9FWE4{ z%7M>bBBbO+LPv6IB0b11GY@ai)r{WQJk4L6)pO~&R}Y2fL|acJWJ$+fGAT3(1HP%d zM^SY)FOl05c;qA_#oxwqP~MIa?z`~Fg=O29o+p*>37B_x-8#L!ej9Y&Wf{RqCxG_rQ_!J=pDb~LPd|B z%88v!i0zeF!|q(Czy+Y(8DT(4_h9TNs#If#scDVGe)`F%s+msHTvt1b%|o>=KCGWP zx_`n0xY~{XI$I(k$s&0H?9l#W^++E~|N8z_67gWL1o8I%L?kP#t=0Omxpc;6Rh^Fd zM(_1;+PNKclXR#4$xA{~G6g-ta~DKYFaU-XH#8)KA}oGj4W;Ns&`*4X?0<@YyjV*a z9iV-%?~84VAG>Y`xyk73&N_4lN!<8@Cn??Z;`8`&Tr2&L!PB4SaQE*g@~+(DR@M0aMAS-%8{uJI0nZBEAG7&lmXN(WBmdkTa@FDH zk)5}Ol8*k3_)k#<{}I*pnTv zAMCqOD3r{wKP=})Q?nrlPLO$i&h8&Q2pctvMK*x3x&VN@!5=a=1u!vgzb_u*W9XY@^x2l4gn z*<~+*%f@4txDY_48HTK*D(MOy1y)ZZbkX9EZTb^=9es|k=>LbQsY}5OFzkidO=sh} z#}$b&S^v3Mw!demeuPVVU~@+0ACcxuHt7}rU`?qFQaP#U=@^EeW4u29qA3O8uT18<$8+CBWhIqyR+7CJ zp8JxX`RB;wZ!A_m$ZYRS&iI59k6p@Le?bOZGQRf(!O<6Te=;e{kNr9F#;6tI@3heg zV~eh@kfZb``-}V(Rx5g`Zo2*P^Gl&+Y&YA2Hc->cY~wzWhKWxh<2U$q7M!w6maM9Z zRN<@2Qo^5#4TK?4^joPJw zJ&`4|CHhZ_U5SUBEM``K9TaJly?WH(&st!0-C#qF$HBOd32G=owB`Xi=u-9~7`iN< zlUiX;;@lgj2=p@HkaUB2Z((2Knan6~dX_gtSYhmKGO!fb_m+QUfw$1}uB2;$59DQ+ zzc7+lL&2Y_p#l&ic@0mMMAvZ~TeJ*KP+Z#)9LaDT#i5yQmTwuB>saPr2ERms=JHYN1kcS$Z_&JK_STu(RX%Dc z9#bR<%qm}-v>(C&yGn*6lHaVVx}a*vL=HV*AEidt7$YZUDb`g0A397$&BPdYG{c<) zyH2ex!d=(F1pLXrs{E@=)1<+jySdRRnkK!wI38{eFU+onK(C)MX6El0{VFXssnW#t zXOm6puieGwy37Cgqr1SruKn5n{AKmJ`-xg-94>f!~s8u(LYejoAA-v?Xd!uVA*#e4SvTCYN z@69C<_XGE3C-{!Ggz4$9k{R6<2l=chk1L4(mGtJ*t*CEarN{;16yBA;oFg*WpZH&v zbcPP{SsH&(>hdEgy{mpXN9$*$d1DUjUc(S8{ToSXzV>c2uga`EgYK9-L@=`e zsij`cqys@Cpm~injihN3M+YG^G%uB#Oy((i_*|U}l=Ah!gY`3Hz~9q_oe7;$h9RwG z_>Bxclj(bX+}W)myrzqPDgPps10|IS<0JT6_wi{jZ2*IzWMea$|yzthTT*lk;MFaDGey!a>qJPcvlvkKr4(p~FM5(4l0ix}kZlp}LCq@%b4;y1;N< z(FxL`SlTpn{uYsfpOxc3-)5d4e}c1jL$(K5obFD0RdcFoapTYAysEyKZ@e+hiP-uK zg<*<{gwq4B3UF2^@;gW0_gOl21poc?j=6A0F;1RMF)TOg#pj+A-nqqYkhUuiV{O=I z8Y`B(b1cYi9~>xN%h&pmPLL&;o%`J=P<%R7EZ?MHo%5mLG$1ORFML12hAR@ilrx`9 zm{Op>Gq=D!^TwW=safs6KeO~RhK@%XfO#TtI>4AyYt7<9A^5XmA-oUw8Y3sBR_d=~ z2mkrQ8e*=q#}o{`oiV6p=%Q|@D3f)5d75e|zT^suE_k}&8k*$!lC3(5D0z-AIksuJ zf~CE~pb;|yq>yL>n?IrqvuXT_lv|fuZ%gmqc*(zttNWrfuZ>Kt%>zmf2Rjq5MLc)p z&B>~uQ2qUm;eyc=AqO~fDHtSP3PgkM!lB-U9*DlRYU8e*LUYF48-=?&6qGQ{1ldUy zhqLS6JoA6UVCIabD|k?BHRWHAcTINaX>Frlx88Ub3{v#~13hM`zxLRl*E9C#A6*Rj z7*cQ}R-K4MD540;%Cak)j^?V0YZ<1mIg%@BzHV5)r~9rYI-cyynoX*6XRCvh1Zzjj z03C@W(YfAVAQ~~szG}_>x>y_M?5E*vFlr8-nm3BDvFasmkJC$b@rE*`PH?|ZT z|1fdiKlIohN45a)=vwR=JbBt94eJoMA6BZryPLqcQq4}+DD`L zFO+hSMN#7JO=IHER~9TnxM9E%UN~fqMSPjy!;o&XgOAf4Gah}>7Y?+J?-W&%%FZtv zg%Yae$flyGt|7?24zta+O(>AS;>B_Pg6 z4kT6oI252mu$ceyh$-=rGndHF+Im@NZH#U!1;v<~MZ?N)2F!$4Vx;iNLW_p*gmvp6$lvCTa>WM928G`0e-Li{_# zz9e99lM0;c!`LCti>44mq29)T@z(s+LKoL$br?JxEr#;|T4;?JqLrHVHW=7x4bj*z z8$rnr6BML$A_^1O(GDZlgodHjoO9)v!eLAO%E8AdO4Gm;N*sJilYB|=G}kl@&6Zpp zI>sQg6WYf04cYV*SrJYD9Zep&Y6qrfbZr4`I>oOf^D~YDF6JZN9}Rrdo!p?GaK&g1 zDR4^hNOaJr&fe#Hs*f{*`#j5JULGcv^4VWT2sF#078T1WDIq zdCv4Cbz$-9%#2VqnWx(Gjb@5H0p}dn87V!Aqa-ach6b^B#6kxiR5)4891jLu*SkiA zOngKVwk~~)FNFf-zZaxP;85&d2Y9FGcQLz4>Wv;>Z_2|(&{`OE%fBn#m;IMg+9@6q zBx1ka!`WZJ%?E(+UmBQZ&uoFX1+DQ(lDxxa|1uKo*e0U&5pl-Grsy^L!|+D)(`&Ib zeG=sMto{7-c0`*VtozGm9GuL!azd$uJAzT(3kMWRYI99tG`Thc8gWZ%(2P$WDh%YGxoLR?oXtX@WT zQMT-fWK?s*f>W%T_e)paK0kBUe82oCL3Ea^GC+oj_o%0vc<+-$#o0u^`fxHGQ6D24 zTKRu|2%!`E`nNqvn5>)ia@m~Usy*e}%kFg3e;t&9R=8?5vnOmy#e;~CUE)?91H5>Wq1j_scNIqc*%OHSb3i7o4PJG3@} z)7QH7%<|DNc?yN)qiiH9uX>XS)zSbw_9&LEV6rie6oLn^Xq&&XDW087(F2SSQSgTYycT?6-fXxZ0CQRxi-J7W>1Dn+@YIM~rTN5Af^ z!NN}62eZX|fDm_|{`{lQ|Gaj#JO+!JUlpMtnd}kIG<*kt!vsNKOzo(a8b$+afNTTWT!OYZt!e=-__(7jnt-H1!wy@!89G7aUVJ1dS{h!c{% zBiOzl33r0+kU)3K!i#X{&#LKCUds>7TBcljoH=9XHPQ-W^tPgSjVug-vL|NJGgnbb z#%7b#fDI5;pRN$!2mnTMIsTrk`qo!YnQzem{=4UsHCKyfEdvWUE? z;`*|sxu{GK3{kaQ)0Sl46KqAXRTOp#o@yCjNAmIE#{@%G;GbfDBBF2=j;B-p7fg9J zCktsvNFKvO|k#_}$tIID_`zppMJA;W$zcpfOkG@Kxjetht+rWcd z_@(R?eedZldf*BJgifA0^QPnrxTulWb7NJsyUX!Qn33;Sy7=}uA7#U_9$8I%6LuEE zDSJTXu#!_<)+H7_|A)Ebog;S~-1#=#vO9U4Uc24kRK5w^?w}+ot7?9>kj6KU)oFS; zRE$B5yPV!k0%PI)$=B+&cr{ZF&L7g`6nBK7kH|99q4?SB4KG3^*L@WtZak!5*W8)X zksE`n5HG{!Ny?@~CxY|%Cwe}?rzx%+6JfKUt87kuEzU|n8?c0)~$cAY+$R-2j8?k|R3$0o84_^o>4kJ=B z9Wf}b=E(F2!yDOLb-IH`TgczETUC9@lSKTXh|PD8CPHzPmScIjs30zz`V%(c_c;Cg zZOV@O+0u?kuN(IzwU;Za4=bQ@`Tjudz9{$dJYVOf5E1ElAnd{!kW5zb83$YbB;u26 zQ_nNg43V%|FrA0VsKGnJ<~wcyCm*j7D&4gn+(m9ad>DkIYT7It zJjO7Ki%~>G<`3hCDsnz?gn?|N+o0RKs(CZS*ik}(I761o>Uy)uc(Mpnx6NiPmFF;B zWrlFLNveB1c5SgX4dxI+wCn?l%+SO_z9K__753XTQr2|FQF!A-6fRJ&%;CjTJM>~D zVi>aFQE_47(Hti1jL%;!LO&q5!j*%uoKzmOUMAPiD?+hk^wzZ-XVblVlw#53$8ktJ zbh15EVM$g$FBtfp?ST|}FCw`NWca!9&XkdHj7&p`hYMMvUd7Zl6Vr+H$E z#m^c4urjFx*Hev9qFmR(-x>N~$o@Yckev7@Rq3Ab!_M}G99~Q+XBdQgZN1mukqOP7 zV^kY9a$HvWIiQ-RGqk*Rg+b}tN@b~$Lr9Jmv)BXp4Nyz@W8xo68;P!EdVPWUk zGpZ)`;=L`JIN6uneKFmB+}z1E@3nI43H^CK$YuDU=ChmY-o}C8Gcy+l6B9zyny%#7|{e@nf`8#qlzLuA^A`(H>n*hVDs7ijYM+i~e=`?my)5{~Wd59;4UKUrlW}If z!9(N`MypM@gvX?n)FW$+YYs-(d&rJ#Wx4(iRpUO$do#bd37)^ zc%^#XUDPH_!1$QINnt(_rE(|rtcJuuebCg$3f96K_<->HhC}#$2T?vyDlV0t_AINL z8T$l>1>Q@_b=Y0e^)EY1K{21MVtE!!1z z1SP4%@KT#>Tr$Mg2P+A`8admTR~a=x!H5=&QMJdg^IWr@Cgon;eQx9{!@3Y`AN%@} zGb(##kMX;EIN{XEi2pza#BN0s3`7ltX=)IO2fMRj!Qzdmpsz8l?x zU$J*^j*^X%RH!vxO)ukVuNB{^Jg09a?WNVL@_4iF1|dcF_o_2VL*!}6J&2jHX3gdS zuhyZ_s8sb9OnJ`)uP{jHpnVMD_ca_dU%sb?V|1fJH!gzU=S z*rT6Rgpbw~_3MMi`mH?4cUtv{H@XUekj!iPF*~i zno29<7f|CB z@-IGqKmF^hqGQops4s)UM4~9$l4N_Hfn2RB_^PRUiY>U*T_6g+W*I65(y;yo`7&K7LN51osanXp59r5VEJuNA^qs`jpU9M#d%C;10!+Gh}=2c$ZNU$*b?6?$OL@SBJ z#j|O!z-J!gZ2>$*{*sp}J>M13zHumQ{;O1L{-31CNpLEqYi1KSM80wmG8hT|^*rHq zWGHv1b1wD1pb^n?ub>+S2_G>cZo;|iq|+p3wCEEj4Uz1Jasz}>nY%d7?c}C!WNzA}ab~=IS&6lc ztagoV)VWG%tM1i^FhmLAh0Fh=*pLi#1cidrl4?eQ(Hqo>x?VV#Po@;%Nj2DeQjd3! zMF5JF0`i zc^v_F-4QGaMQPYNvYz7%Wg_Zu0run4?xEMzCI|@HuQ=>n#+H))&LCim_3Hd8gy+44Z|EgH3sJl(V(n=RMknTMknNAfIs zLqeEI3bQz4OX;Icen*P^v`vr2+YzM>sN62MIyJlPw3?Ys)$GZ&%&_`ccaqMkzJRO4c0Oj~k%apAHypOecTIz(M+>WW?w z867PofeWx9AWye48R^V?C08&ol`0XK+An6p$x!d_&fZA3wp zG(Io+qL5+BNa*bEO+8}UBf=%5h)|G%fjIBqK0G~ThvTQ&Q(MEHMs@W(NmIX@LltDj3JR>MLNBN7(B#MuD)ATM%$FttYle*jZ z+u}Uf4hAaWF~y(xO0-r(R0DBA*2{&;dDGNnG+v|b3V;Tx;-PBZw?rG=UY2e6E{Zn{ zSEayA{9WkQM6)SXyX=2kfG7w$wfwCS1M@2!MVGEvO z!dyo|n_&6AfwpVGM|rT0o>&L)aQ9-Sl5dj$`j;L7ZWCBeoc3y!bPNhbDEDSdPK}^VLN!O zwX-!nJ8MZ!rd?V#8nc?&7kK6*K6d-y={bg!Bwi@4ArAZ-qVU5Q>X$h6UqI40f*Moj zh^WQJ-B>XijkVEsE5n9A7%e)Q-O*mv$li%KRJ+8U=znAtMu6l)=RYV)u{Un@&wB{M z)n2r{L`>a8`sH^;qxL0=p#nriAvd)LyPitXenj5Tji!4JOf(HmSte?wUDE^Tpys2p z7qb15O5vI$Dv)HeQ#7tttl51oSDyxU(aluXJ=NFKclt}IqCE0Kh?wx&J5mxY{H#{a zz$iIV(4V5=pLMSP`7}K~*xC^j-oEy>%k_A3(`mO+r@uDSUUyn`@^3|6>ANQ(=jIE% zh@;KS?&xTLl87JVM80&M{}rS>KG4U+>*^n85!`Dr919UL~Ga;nZ@_nOPp|gOrKP<)Mu-7np zKN&hFWm55X15FCpYvWYM8wUWBqJRHk4;5!%3uEuvu_81X0i~6SL7fZ=un9!fhw-H< zIIsjhXUKx%Bg|!bnhc-^12{gA>>sA;P6CsOFcw_PsQEJf5tIcn|0bGAiXvk1(&STFPNdi3NDr1O--8qnEUlZ~uHHknju@fjN9xW8NP6fgPT zMfXH-FHN#u=Mj>an!E1H-7Awe zrT`Vh+I18IIB1`y=jG1Je=`#^3w%_%@r|_@nona_sMShk<;9ujmrv?~n>)c2$Q!I7 z75N`@PajlYi>6|dpAu)tvhI@7S1$Q=n3)6MYJ^-}cuJ{oVIxPJqIaD@#PQq%VPAO2 za{>K=inZZWMXe5e1r$I!O3R1Q+CC2&$FpU!MrU1=d>!4=nk^#-@2b9yO$C0nhn@$= zFg&1_hzbCHn5w=I#*Sk|d>u$3L=<9#ZTG7s*)>FOk(oa?E8@IrOb54(K{vyVa{f@H zt#^+m_)QgL;6EFP)0z;}+)#rHP-iIAN# z0RuiU&43Z9YUEsug6<%zi^g2kE@gdxG6aJor^_zOLuJPr4?qYA>ST#Zx9XIZ59*}wIx6*E#`TJquNCL= zOXZRK1i>`4c-y3TZJgAa%9Jw1jv`cpQZ;mtVynVcfLau5Hrk{H=#WeTjwiNkj8OR1 zq&I}LLGc;(j=tv7?$N!`ud+7*wjjVDvM5SKaC!z1qM3U>A^&^beIHc*I7s=iJg0QJ zk9#SE#WI-Bh+0ex^$pkTj|Inj6YeU7;oDmyyL$4BY+d3J7WVVeB1I_|LRmefw61fs z<2?k}8B&wkU@y?6x*6Fh*GP5>d~eb-B8jcdgX=sio7!vlZJfOyOs0~HK{>r;ELlL> zNK~IE60m#;XaJ#47BW7^jqgb1?@gk;P(H_C>a$nun47mrCH>r5JlEP2yQ??Uf|2E3 z6<{Cj3AJwtlzBaXHKHO0I>YhYi%0YUqYwl}0HpC9nosD#eeMoaI$PODO@sjPB!Edg z5NDcL%|g_E6|Lb5DR3QG6;Tppf@c;`yP%k zO{Bmt9p~LyWlO!HHcp&aq6_b4VNWbxLLlz=gz{5g5xkDt{Pn`u4Qn7xA5;q2@Oqy{bDlVeYx}=0ho6zHi;%wq7e- z2oAt>Hswd9YY|x?QZ@(fs*d?OM8drYge?pIly|ESucnLHbb_9MJXs4=#tta2?oqrx z99V!PpR=-$7^&_$!QF}bnfQJN7ine0(|3(LwE#s+g-)^n8Ht=q&YL*^L;ox8kT>WJ z|46(k@^DQUK;UTbGBEiNesa*~tIJ4rII3;imgFFSWqG=Yl4#3wO;vfX7K#c+>T$<_2PZ!Z3+ZGE*JO@i5%GY(IdJmD4by!-)Ku_ zLFvYyME8%p-2GmCkG)8Ey_{}4ViU!<-+Od}?}FB{)lt1GZdy;poaD@f7K$iVZgbV+ z<&W_$u*ATHUC>lfBh;Zi=J%hs3zw!&BzX8c>_Dsnk7!K9X9mRExR^s<+QX~e74E!} zl(nB^tGal&8}g)IMCM(5;R2uZc4rjT1*fGC<<{$y ztt|rS$++*h`H{aZwRr$+uz}n5c13kv!$}uohnR(N+8_=U4n*pGw^2Tsac0H5Kp(~I z3M-ngMXq0|*5H-w{LNt$#y}*o!M`^3;*HVGsj}y_6l!6n=v_%x!%)!&h7V1;Lj)Qz zlnYMc$%+pwl|)|q?kKgMO)=*aF(rBhRemKjD8)AVo=eJ;<-bGrHRnA$cIylFAix1BAjD8I zWKG9-0ZWlRj6m}RM|EKkn#lDS03Ek`f`LRD81$n#sa94lh+LT_i)1{|Wl{AxC+Bgj&8(H%%O+V0% z-;mA;{YaG96OXIL{WVU_>|1v=AC=mM@%o}P?R=$@E=jIGD$874b81F9@sye}#s zasr3N{)nEJ^xU_jWvuD;B-`;|(DSO%S0gSohsAux8?0~g_Kuv(CA z?(>`cQ+w)5B{S$f27+GLJY#GxYe}U>HRP8W8WyOiQ&8t%c!jDX0K+E&?x_OOiN$L@FQz+YXQ!ZNIPwK5%dtCgj@74SrtnLeD z4~4!X0%h#xCCP|kl z2!6VA=pz4>g!wgPK2C<#`oMxM#NI1)oq)?BJFJ@vlMjuR&Lt3t>0`U zZp|MOky%ZrLZ=I3d#)(<+jl4ypn>*noS zG1Pp6JK*Swc4!_{<-XBZ=&5Z_XU`P^l5#dYX z(j1M|?B7GzirxY90-VUNjwV~Q4PjV15M<~H?8KD|Y`@(fs6E;Jn+{Ki0nWP%;W%Cw zJ;z}J`Q5p<#yTd8vFibThTc4b5@!FPhYo-GViu%un*n*mShdq%EbUF3NDZR!NI6eM znk-_r3zz>6q8#3uH|R~fYutf&yfL#uduFuOljo;wyRec+BcYlZ7oWKU5pz(Kxr~>P z47WgL=&UkA-i;QCpL&O@-$`YDTQ1+p;bYQsTHdy5<=H?mUthzXnrTkVC;MLRKUmu? zcOzn|>=SM0$;sv(h*51Q+cb8bE=!0HQ*YmxqH&REOq?VB%rwW#Nw;zHy0v{&LfxYX zr~NjniOcphH%C(d z-icVI0!)~9LV{6@;LsF~>O|SvnA6LO%m7ot46}7PJF0fY7Mf=Kw@xQlNSEDvbly~Q z9EXcN7MZnYX)FRIj1}l&%ZiLAPS$=hjv> zv+4A95k$C55yLST;5-S@u)`o#0D{H3I6i%--%&Z=j(oAIIZMNb;dZJnS15OrhKo+d z>vYy(WA%8q?(Ji}o zR;mfu9f0lt37Wr#g=8omwm09|1YyEwnA&R=Y5_dU6muUkkIj6By(JyLh3x+FFJ}?X zF*7P#DIlR(CRmI8M0vV+T+N*P6<<(8C~3t|5*f3;P}8ho^fkJTFg)Hjb=S2;NmgvC zY{r-b{E;+H^z#Jj<^(lWCBeCPSqy}w&lUM8KJu#l@)U&nQnF8-wkv9sUGohXi9kf@Co zFH3R_7^o0IO-hC9P> zapqLBCtj;ZB{`VE3yTMxws8{#V|sFY0S-5_reO**P(8#d(dkVi)5u$*>*xYNa5Uvv zA+XseDRQi4kV6#tggr+P9?@C*mC3L;16#s-F-^Y4FPs##FJsg-mGlFG$W&a^bQv&z zFv7v~RZp{Z&zBupu{7JTOwYFw_oSI6vywC zBL9yq64WO$Mu&q)i#IL3+5F;-Q9v^bjvnfPT0?IZ-QXJ8n?H!7LSKC@jh^S?^3JTk zu7c8XTDa$xZS4E^KFjHTiuje-&NyoHr|ssuZp}B_<9+lfxm}#V>5Nv&J>S3OUfP9b z&z=HpD?iESy+MJOUydOZaZn(mt_>3LhlPVkwriNKL2eA9Mv&Bq`cse%l9ml2i`_z; zjoE_7Qf3fQV+Ik(9UP1gW`CUw2jQm#Uw?8)qN-Q6v@e_wbo6Uz=wWq&3Qm9wgf178 zjb#VEi!E7(2KYGJ_7#MV9E^tov^bp)^!W5*w*N?jaD-~oDRKLOYrP%(35q0D&Pl4E zx56|=_6armvf;w&qcRxvCv-V3kRNVG7X2N6YBXjgEHSFoaYMrt!)}w`n{dOTubBt4 zDf{Aht?--7~W+8=BZ{<%W$vd2d^@sGV`Eb*ly;Wc8Ww}=_dR`qY@>|Iq!RAEU=+L4#jcJy>#Dw-4R?l$Wd zAB5R(_VC&-ZA+P9Q_dJ4#Y>S4nxd zu(FLwzPr4c=&i?beR^}-m}6?;L)2GH%g01jm=u?#E;^x@b;#hWN#qvSC>%r2PHH+_ zU;q=x4PYFWFz^$;54$BJR)jB;|IWWHQAd`LuhCM_f;flVPCYu0@Mx*Si=2r+M$U-+ zc^yomscCx&3(P~*TjN}*f~#3N{!$SqBD_vnf#r_2M1=Bv$KKiM7cr|&WMo2kaV`xy z^U!&Fwcaw1%R9ARc4ygi*Ly8KS9yww5tRq?E>jh_#l)turSK0jDLwwqc#-d++!BVt zS!V552CeF>aidOOrFG>=oZVN-%S9`f>qlnvWMy;6q-a31a3EDB6BZ~)sw1(^!Xb?@ ze;_qOteIod9RHH;OIg5M~rulzjz#>KZ-SluSBtETdKY4!W$NtN0)C zEvceWLlPGjjp<5`Z3EB~;E<*w8m_Ga2hu}JA}oe?_%$vcjn<54F}Ikw9>gy|63q>F zmpSh~+&pOB!{TwN+1bHH&u(&einVDC+Uv+;lF07_oW3E^ z_d=Di!x0S^!{uQ6ShxuqcFzrmmK6eV=+o!{uMLz_ptph)j02%63d|ONk#z{s~At6 zQse0*KU`y2pZFwnv|#8+uQ_uQnf`cU?^?x=CZZIW7RxG`<0;t3#Cz9AqSO7YNtzIj zC!{NDPb(`Yc4m5iW##qR+v@Sv*)DGTIqsHD9E*n+41&Bka+)OcK(HAJs2Jh!Nso)+ z960H`$!dlg_zi=R!vticdv+b#v0RM2OW^FzuNGrW_;h+qG$OlfowNt?Iqjs48jbQ* zaqW0ha<{0}iY@X>jEPxvn9-&{TB<-s19luxw=JaIWzVrhj7ODxY83Q!)0G9$!kl*J z9cdZ46{ju}evwNk&*ZNd(Wm0!N)b0BK4H;x=$O1r!lF0LIlan$Ce2(r_$<4cxX5Mk zy)fM5S{<~UZOmfl=>>SrqafXQ7V6xNAc{qTc>lhn%0oO-VCiNIs|OGtOtVjJ?FDK4 zqqaJh(L|*a(puKjLRT911B@7d3vbiX-LRuM_jco!XQvoxqd9C4)#u5p5;z|;UDSpA zY1#tQ6|t=2F>gPLxKw<7NLT9G>BZ8WkJiSPk2X5hdI#Hbox7>AHH z+P>&a)Nk@K&>vW~dkEl&IRm12#;lyHELu+IQD^CeL^tIqfP^ro8l&B}9}THw;w@g; z*X=^&95k$(fw`NaiRvN~hN7w&=zp;Y_))bnf&fEMB!HB`rqUifz^(_~bC)Mf!GtHb=8LhDxX9USY2Wt>L8H=ibLmbxUtZ?Chvr>% zAcc{{jW%(gl1K%t4B^=Tf+wH4^+_J1P|e4{4&RmMm>oB9T2J=+>8?ImTjsL* z>oAGtd?xs0#mFLBcv>uELVR>P-^2<%tDZi#;cAxjc5jIJ} zkv-1w!as$#LNN+}5sRq6fhgtH6N(b2Jzz>8AqyN`%b}S?0nOi;V=(8U+rvP!+C#pP z`d{d%**i28gP@=Y>Is2A7nzVgEg<%?rD)V27pH7#U$GZ|bHwl4Fqi}6o&o&;@WL7+ zw+uNZnz0y_AG|SCGFnY{(9v!)yo`_4{0gN_JY{ky+KjjB#Db}?THAsD# z6)xDE9lY0ecNI?jUEin4svRS(l^hxorZ zrF9YyK*$Fbqc~zBW`yu)bq#Z47C2EjM8Fqb(C9xt#Sw#V=hiy4d*@*}G?B17UhIz5 z3J^z`aOOm7n0s-o;CN)f@k+mR;%IaxhGtVd%Qq~*J-VWY{I9Osj^hdl6giaTvSddU zQAgpb&U;80(Rn*PRtIM&HcTktw2IRyyzn2yBGkwe3yu4b5Vxh9}2kq099t?5+i z%}2wd%c$12&RyrJ#r-#3VVqQ)cw+k*o!i6pprV;i);#)_VyF?{+wl^6jg~@^}fJ< zWX!yyiGL7FVonpH8~8N`+W2rw_ge)?&eZO?`&`(jhjvSwE%UjyQW>rWVl88>w&uob zX3mO-Nb2tRH0k5ZKnr12&?fb#%B3(|HF&W> z1MdSgHX#ruteg?1G&@sk%mndt;$|MLVEF47eK;F``SBd``M6fjn3Gs3#A!o*jnFfec!8!6V6wIT`0 zX~abw+CoUG{+%9jPwovp05Y9iFrmlI!ldT0M;ew2FRwC|?x?w%T1tyyWTopDds zoubii@UU^>WmmhR#dzV#gM?AFNVTKu5VhkB3I2ebVKY)lA7FOp`Uwx!)aPL5AZbes}SwAu#axrAk1T$f7mbTolPFKhZ+|UQieR6i;M6(4OoVIEqwjeda%!?+pimqjMydoX zbj8GUN6mB5wxoQbdw(AIK6x)11W4rDL@UQdf-%~G*f&Q{z>X`9U$ZZ(o9$cSd17{k zV&AaK99x_}7Fqk}b^!Jx#&HpMV{`^(qJf8ohrYN4pRoFW!nW+H(TL%RQxLa~n3kLO z$*Wv>R@`9LoXp>xZPsmS*+o4QrW;~GQeJsdi9aC||Nk9fNC|VWC{TRV`ixwJBvKWC zt^stJmD_)P6A~8ZpK=al9E2|qOa7-|Gxw(+L-mPMvG1ObC>6oCr{1>K#%h~E&8-$l z+jZH0=)V=$Ry!AKSlVVeJ|ORG5enO>f(Qo%gRtc9d{F*{`*w0*Gp^AZ17@L(~Ws~vFYg@V^rqtz*B2AzM|fBoE@P4Q>p$zzmWkn25d(R&IGBo z8mFj7D_^=xp*VOLAX!P;B5^J-Q5d+f-Zcxr&8P0s9E9Ch#?fav5q;j>{5R@{*r434 z1+o2zGAs{sR~s#B_1UmAE@k9yI{Q$4*s7KLw_4$drn?e?Q@Vo7SrR5Lskunkcg)A1 zLFc^*8FAVXHQlt)o z8TG?rrJq99z14W0u;S$9A=3_TbIqJ&-3m%gmi%p}IBn%Q82r@p*6h>+#Pz6W9oRO| zj|h&Fu|=7D41KT`ZZJ7$TnEJH$eN>fJq)^I>XQQO6N>jerOka=UuM_@hO_^rIRgjKYgl+v{|8)1FV|vO6E#spD2>R(PxrxB4AV-q7kJy(SWR z^bsLNbevF@0V9~eo?oWpXDq&NK-;8(0zE*#h!T-j+Fj!`?cJJ%rqj6Xwe?zkTAVeM zNo$n%!|*Lh)2R9Sl%{ChgCR#sNjEV+v0M zYTVcAo4YW04wPj*GPQ^wWAL`!J|yI%2v#ItFmC?;;>k{3kqE#fZ6Mb|$FtEhN!|b5 zk9(Br0@5-a^<60q+j2Vl(R~tQYjR@g+Rh%JYaZ3MaHizJS^6Zvl6F@)k7w)hVISCvzbtgbVBI)~Ia3YVx=yvsPtl&u$`{fbY(Gf>*>CWUx6#T1ce8 zKBC~CA!+|LR6P>5_|iS=?d9$6GH1t3_`Ge5)8*0<)!)dM-;RPe>p7FoMALI3cHbGS z=cKNLOgTwiP2&0TPmuH<60`pbawaA1j$}Jw8{SUmm0CC3?%q#|g-)Sw-m168N}jDF zLmy|7Vh-0L>;U`l^ukCAR8WHj@2KT~stV9xPBXb`clqM3<~y>OqLK{c zpOIrnc*ODIV;qIi_Sg$lt3x0A+CkQVMox{q&MyM}wrtT?d|&s0cPV(74#Hr5Fg{Lo zL=452kjmO)EL`l{I<4%EORSPIwmY$D5FX)299%}+a5}vbPp+ame1t;LqZ`LTis4pa zGCG#)(*+wZ6$|zW()t)All;PIu!j1=dz13t3Wu!rDDH`k%g|$WurGv&uI$S-`Br%| z^uZ&L6>&oRT;e8MCXOm*i$qxHcDuNm8Lthe(;pN9De!N7t9UmWWVXB`h&_zF$0ZiS z*dd8jc`W1JWw3Vy-1lUa8j=0SnqiW=Ev@7luqyYjEnYS<83}m*DaxY2XX7ps=m1m z+i!m7HNi#kw{liePC$K8y3OW(p?6b@a)E-G;4{FVGyo7 z8McH`+A0J;614)U0#X5wXyJj?jPfYUB}`;aQ06#CDxrS$lB#=MU~yc+e|tcw=Xes9 zQ1Cg;K#9~}u5P2X@YderI8ZFSmKsv}q{6uG8+r%j<|&QLzONhs)6w zx}(RKet~LNqO(p1@2KlQK?yV2d6;m_0gcNXJ1^?1xG)KU^ZULA`k}b==>A({KBC70AT?tQLu?2xj;UrQ&bb;*xh{Dv59^K$u z(*$G^Y0K#1Mg9IkT_C|kupbKnH(UN~zfCMyDv8~yB~}+L+bi9N`bHJ)ywq7u@2#jd zh`95JR@93I`sSOnz`0Yi-;5NI7(F{wM#1)p z2MO5UJINT`Io=JZMRa-WHiN07Bx^A9y;i647}gLK))xD$pwi(}~#{5=juh zQCNwW9Y8O$-Uc8zM-rOPO-Y8D-j~iyxIrdo;Y9U3@;Y{snXmGb@_4TaeGwBfff*oM zw&ZJ;DM^B*qVC$zeP8o@7$L4@iPk3?#FDrcaqU4uBtvPj$^^jB@oh=oL)2{mnSJRV zfexL$hiIag5i%0-4o1{pxCH>hOSh7> z*cYBAf?RwYcvP3}!5yVWkc+pc7oX(xy7b`E8Xnw=0x+VR+csML8*Q-eIP&yu)49v_ za=w+}?Ujsrj4^i|aC zV&qB97GsRQqYxU}i4OofVDU0AsR)7mHrd%tz>8A?Btjq!6=#U2O;Wx2e2PFuIAyQA zUc{Q>@Y*T(5&!&Gf@ttRf2SHPS>(;X6iz4m)r_}a+bC%Ba{fduZC^Uo=iap5Y-cfo zOyjXe*5L+9f$HkXut7|4hBroT5KtfmCKB?yy1sc2Nm>Tk!Gn*;_%xo%Y%nB+M=+iT zP*TV92SfIKaqtnYDi!Z{Nrm!-jDF=&8Ax03S0`Zq3jScu^qA^%$zJ9_QRuG5=pDd^ zz@Kp?9a&IY){s-S5KM+A<5{}o`RG(av>w&+mTIDLJoaZU+A;^g5pi~gw*XSzWJDiE z)=K+T)Vq_R&~h`qbg3acuIp;A{-i`;+3cyv-`GEz%$K3qS|QsLQ3gID@2iykz{6k} zvwttO*|+a0w?Fc`_m+{Ka&qlH$36Rq z+7XOgyio~iE5J+vt>e=6-yrq7DTjX}nd3~u5v@7hmWDI1CdzoR&gUlCnzHEDyN=c= zGpUl-cl?LF$sBV|hhqwPis2V8g zWru&z&iVI~?c?n6O&E-ds=RmuUZ&B1eC9?MCo4x0za&}#Gyrg25EdE_u_nqTex0!V zD`JU!lCEXz`1iOgoK0;KTmRUf}@S~F=_Pts}b3=>2;!2XbcrbaZ1 zGZ78;i&9Nzm?Fr+F++sS&Jg@098t`BPyJW3nEfIhu4n9+2A1|r2M|8;>{B$z-n@=OKKQ zzUO}e&4>#|&T^dDa=DH_d)o%3ikT~qf^K>wy%cFWzaDXcUMws0J-PQ3SgKa~rHn?dTYeVhJ!GR6A0EJZHVPUT%3rzJ=JT8aKTZwsMyIY}dS z${(BlDBH@~nmX!c{6}Lteyu&dwbP>rVjDjyV$I~EN#zW192RRg6qyOa3)Fpw9lss5 zcMN%sV$P!XTHmhb_2;F7{`%5Wd6R!DXx&Vkr`FyU)@%TFB-|ZT{%J?NDCtaZ7^qfb z9UpItz)cbQQ7XGYx(DFcymp#}zv?KXMzrf8m?xMMp5(hwglqu^Od9pr@Rf~zHG|P4 z)%0donELA+|GtLAw8B4vL2&H{Ts;0B3SkeP1K{MNDPb{ZUIOfJM$;ZKZ5+@7N;Lf$ zV_E|%o8a{sTMIjT-nFk7-1IeJO2;JT5heEXt}IaTDxmfePX3d7^wP6;k;eofcDJ|y z&&-O(V)?3x)y&K6(NZ?^@!g z9e+O{^Q}36lMW+!>kr1-xLHp8{Of2eH@oe8Xh`EqWWUluiG<5J(nZsocE#JDr`sjH z_gzoUPTmkjju=oG^|iHHFDbr~mY3wo_sZ2_t-R1VXb>1M?D^rYyb~?rBz6wUjzm+T z1U>@n_%CY@W#HK?+ z9r9+G@NjL3FiTQv9<2Wh8Gr4c((iOsI&=)QKip1ONl*;L&ntc+Nw-A^pTt#M8#)@q z6aW+o-<3!j`5~eCom`w-v%`yv@yQ$b*%G#IM!ICLZ>rC3aXPx6*A`*!As-HNk#U}+ zYIMfpuS<$2_%9fzNtqX*ibFX4IehVsu1|zPzcZgCPUQY{?e-?J?cJhwE0#*drsF?( z?OHadOrO_sxOn5Uu1H=%D`*6Eb70TQG>(#uvjvnTKtstdzgY~2SH5SFALOPm4T{Qa z);Nols7mn)pTu$F{x`k=vqABJ*iAeh#l%8$w2UvDD;kucsQ|`?Ya|g$km32RBL&>;1qzxxjHLqRV_Q$E(tS(BNUkIX z&W|J4jB{5{&|97)6q}vxORb-)%2};Hn|fMy6r0{SlbpcY3*=In)$=jAwm+G>wwzq$ zjyboD*Fs)!y92*JxVe8aIzvTku6ZrSp1YW{a)!GUh1Ju1NG?48a}OgH&kkd^>ksU_ zUM^I(_c^hY7n`B1kEFYX#Iullayc}N z)Wl8Q%Ew+?OfL5#ck$76A8{9+|GDJC;u&|nwQh^~n`~a_ykvxax3qfG`kGw}S`mce z{xG^!7;uiebe1FhP~nC7P>LbO5!?7MVov8da!D!z zC=|mpfG6;tnYx?v8N=vu6ZqTtXlKn-ES`}|7-bi-yGCLTUS4gS>*O99g`oQCM1$@3 zhtVS>-80+;tDfOle8^qNu=Y&xs1~5v*D|vyY2UHe5%#u&e|=+p_rJv z{7a%<=cRiekqgiN+{1{)Gje&WM^k&f&o+y}Hv8NgwpF1}Q8T5xi0Z&$*0X0_5v zEzGTyaJv{(GOwHVc7ANt_cj;Er8At3kI8ict;po!&oCtL;~95tYL;g#Glgu=e0fL@ zZnmwrwNSJg`4cnsLZDof1va4XLvrEypL-awct$RNS*@ij4W*whg#F+~3!3*&rP*K_ zOpaY_lmndCj4DI){Fq!n+3v!RXXGl3dgHM#zdFm;7x6|NV8-mKuicrg0k8Yt8xs8s zc9(+EgUL1FV3rOBV-EVUwYiz!ivUkLT7`G=+6&`~%X2ky^phCRWu$_uP1eeyF?tvk@2A3`ulLf8?I=-I%Om*V`Gkk0 zXl!QChx!uF{|F+UP1a)Zj9i;ic6uZC*V&rk*X#EswcRh)Uc27i_~eLQ^dvu5^%eeP zPZEn~D#pUYiXJR{fR zZKj#9c8 ztlbw~{B~tqT(zcIrEtt$iwoujMsn>GzG@to8CSg=eC!Z zDkn7gQ{08;e=fPOc*b3WjG(MKYF*Tw(fC2Eq;E^}4q%7c`D1cz&x?A%=KxOj6IEY$ z{^ybli)ZAT4@QA?n|^v-JuGJnBV%W8?!B-xYIPGqLq1*RtYQS7IpeKpcF|}0nLZr4 z^W6fl0mFNyp^RkK#^x*|->Q+;*Y(By%zF@>$6hWgre|qm+L}LcZbKV=*P9Q#&DGGg z_)JDjj5zAklr=VB2kk@*ry!dO8A4MkbY{VHPJmXnms*5q5JT%WwTn+?!PavhyiJ&o z=5GXJHWj(ixQ&{|=&9jkGDt0^^yut=hpFkp#)PgE789oM`Ens!yH0R$qD8MC%og*3 zl?jiQU;g!Y*QDmMqw9b_um%e|b;* zKU@b|Xd~jXy_r_6TCpK#SE_uMb>-~B>x#?AN?}vuRt$Ccfv05vd}B)HL93o*8t97z zUO%!^gsFG)+$cuViBkk3;ido^%ut#^a7>@}QVjdoM>~Hl!t_2*S)l6p*bbsBzWjV^ ZEW7oU&OJlWbr=vbI`;%w@D0rp{y(-L@|yqv literal 0 HcmV?d00001 diff --git a/userland/capsule_linux_proofs/vectors/dynamic.elf b/userland/capsule_linux_proofs/vectors/dynamic.elf new file mode 100644 index 0000000000000000000000000000000000000000..5dbba42bf1ca6e7ce2b0817dcf21ce320f43dc80 GIT binary patch literal 352 zcmb<-^>JfjWMqH=W(GS5QvgCaz$B1p2L=lUW+)$|lLbkRfx!WVmjE>yM#CgQ`a$|$ zKm}f)>63(t!)Pd%feFX}=~IB3tH9_0lLFH)9*l-b>gQx8>F1>A=9U)c=vG*m#haPv j73b?2GB5xolJzi!p&D7CG$Yg=E+}6dCXPl!xo`>qQF;}d literal 0 HcmV?d00001 diff --git a/userland/capsule_linux_proofs/vectors/libffi.tar b/userland/capsule_linux_proofs/vectors/libffi.tar new file mode 100644 index 0000000000000000000000000000000000000000..dca5c837217204031ec58c82f8b8e5c754f808f8 GIT binary patch literal 54784 zcmeHQ3w#q*)=%1|q|XURvOeJg^Gmhxy3rGTp_t`>YX1QkSiiOlyucVlq{$!ukZ|-<5}cckhh?`+E=Zj7L-@`7iUy@=MEZX z88K{@J>J?y=$-mYJy|h^Hg85zdyGHQZ{=%(P|Mbk-r(%po?N#rn@x z|L^7USNlr57R$d^$^YKczYjk0`0kB~!}=Eeb?pc1_B7ACe*dBEH%1BH%saOA)s!u5 zBOZM8v4&Zn+;-?H%gZ-sx2{|H@;$%*%`KVVjD4nX^NP>A&wYOP+M%P~)lU+?d!}mB z@K=f_-}m;P+jd-2zU1R$#%CUgzUaChiu^;eG~u8iFodhPxZQbN7Pf#u04GDd|l58zaI7b4G%u|hv+9Kr%x_^ zanUPpn?L<_#GctRjtm}>Azae`!@S{9zr6PvWB=#Rw7p~b-I#TTkC(l;;pO);wi%j} zzA65$_mSOm^79@r|Nh}`KeGJhzNPioKlH$_P8VFc`7h;*J{|qY%D2a^e^qaplJbkf ziJ=FEZ0Xzo`^|1$LHe|-2M*lw#^0xm-F@9NPuVAWp7UIC^T}(l~e-pWefdA;rs`LXm4+5fjh2UtdXDm>m2pJ$F` z_7Y3UY=8NJIhLUrwxJo;L0)V80E@r6ykf4UtYp52NMKong`&K&!eYx9IyAm&{@jX^ zg&s?;WkLDuva)hQAOqq1v<;81Dk+^`GM9BSp9WjG z6yXs+Zv9>xUtPYG>dG2ABr`j{#9KNKk;U1=iic&!S9;6mmRBII(xJ2xL-J8(>u^t5 zW~t3;_hfm7+e$s2;X}(xvaGg}*|zNL(qUHn5YO;oLrdcqmSFgJS;xkf_)02DK%SA6 zRV9`Y6{P@qN*CL$@oVE3l$Uxcs;NtE*CfnTiQiYb5GtHVw!|{WIH+8kx@QdJg8VQucVp=Jk(>& z&K#1RooO3lFP&3TmTk+LGdw%nYAu^%9ad%=IyAP zjnD-Di~D~#0=xA8Pd^hstg%b~|BxpCpD-l<5c;2W4Iugd*Yv;5HaxRS|NnRJp*H{L zuL0P~vkl@;(}N$=|F)qW{Xau9hjrQiKMnDJq?QZo|6$n{N70x;lg5n`CT5h*^OVl7 z_Akts$UAJg!-fsL>3QRoG?!v-SVN`v0e) z`hP+H4zU=y$oK{H|4$?I5u;`Lzcc@j&6a6}vDfkb&(JL8{10ZxkUU*a-OKk( z+VqQ8V;^^Zws@_*s>k@6?(=VoXyU&f{C}?hmlp`5qV)Q9`bF!m)t!s!ba`q@)vw#L z0GF*xz;AEer7UmExuhS2vM*6k8q}GTIJIG*poM<$SlDkn?8Pf_4Mvt@?NzDyJHR|n z!D}$GTr85Tl9JvL_F9RGwrS>xl*{R&()k?XJ@Q6w*4H}hfI_e|6>#2eZK&yh* zX|Q9teQLRmFjXz5L284ZiJ$uB{8!p5Qp=sJR_f^pd#e4=pw`}alq0(QvyVzn-2}D0 zj`Y{!EouWARLRR|X+dK&O{2$72H)xHDQg^FdZN^LWd5GON8_dZv({uD{&V#+H!L4` z)f@S1e!V09L@~=c5$UOTsV?)v-}b-Kgxzt?T=4LCv13!s%aMjWDH-(KRyij;SmM0 zBf@rsufaP)#pMECi}yM;PQZaTUyY9hbgE$j1rcE_7)g-PK=OE9cnh@*DjcIi0nn|6 ztN*+|JZ0I?yw!gydb_V~^R+n_PpdZ=r=^v2o0c~0(zM6!UD97)@WhGgmkPqRe*T-k z*xl#q8(SZqbnDRZRqx3+uKHr-uwNXW`QlRp?7ar|-847<`0}~WPjBA(ZRR(z%L}IT z+V#oI@vlyI4D)|-Z=V=%pXVms(}=wN@cy;?qa*gZi*9U8PJ8w*c}I6PpSt|wo9gms zejZ-3e91MJ<$UqCQNMfyefaK>AZ9n4ho z&#F>TTK-#A{JIYKzo~djhx#Arr2b)A{torTt9V@p{JZEz4_%TjX@Jt7U#LBOO&xE# zN{3AvUacpuLx0XPIw$G2s!ILuDse}t^?X5#5+047J{6y;E>uNIvThKYmn7W^novBn zF3|HEyhP{v4*gG1>v>u2KNd~)Jg(v!)cPM+@m3W-MD33@u9Zk9I{do7l2J87bh&E& z&u&ogSr|V(Cbgd}>qqRs7v5 z{ttjOUwIw+If}L0Q@5hSxK031{hY7%bF5m=WorIe9rE9)_P@15{i{`a`c!&qYdqbl zr21?6D-~a=)~_peO>!6G*12acJ~i=pC%H#1sI2fzq6>mb+J#e!OBa_Emz7tPEWl+v zU2#MW#bvlh=qWC*D60fsD;?*HcwoT3)7$j1=RtAw&3n;%gU-fzUp&z;a*_X0?%UPt(ZHf z(ochJZ|6cdEq}+n9phTQbA4r9uc~BsD$lh+V;h!vF7CfTJaX)m-!|<0{E=}=&ptmn zBD$!ud=5+Wmehc(m@pbFMSPXTRX%Tt*ITlL;j{=PARQBk&vHuV7njbPUtCsFzM#Dz z-ECx%_5hnvsjCRd$!y$7Js;n(XRJWS?$I#XYdXIt=g=4G zPRCT;LeIjoImM-35ALbzs(kYhm{Yva?_)etI==&|yrSIK0p+g%-_6%mFR8{2*)kB$ zuS8^7+x8Kq5|Dg*g%^uOsFb28m7$aQL`Yecy1+|AU2zGE45kH;cVcC7gY(1xlzt8 z1y}y4QLf^A$Hao->rldq-2&bed`6(8I9k5n|Rtu?At#A95zMDw<-adGzVC|p>DjOyBx^;(k zV`Wp)XkDa-(x{%+k@vH5sfd#eWdw}OLv30oPl%=Rl!w-t!KZDqdfGGtweb! zulB6CQwhZaP}|ybM+6>AN&B-V0#Ex(?Xj*=LR3d2er-hlXe~3~x(IwkcXaC`@P>%| zPe}{;duB!8FV>KN^CIwbWBV-zx&YCIa7XQz3nA1YYy=P_cCp_}&rqtdGEx??`)| zj=+;H(Vh(vc$bC*tdGFc-d=l}BJh`KNWhi|e7^|%z6iV}0^b^ezdQop7J*kyOqO~i z0h|KoP;%u9x|$ivsw z`{LwQuHOo(uu+A`AF8DMSqBNEpXJ3Pe8ZR5@eL=VdHpti_gP<0RNz-DFv_iETtDZz z@+)#*Mme2-^khDe`{hCedGS+U5-;WE123CD0IF@SEXzp#1uD@YEtq@fWJ*gxe4Akj z^66)4{b?*K%i#L0LPlkLD7KFkyJ9l>SV4UZ=8i*gG$Wf|L(SS&e zd3YU@9g`+c+1avhqt(-o~gY4BJQP$#xi>gm%rIX*&g7f9Jz^K%Lk{(d|V4Jqv>ewo_g-Z`f1Z= zI%YU#HnPq&21lKpC`dC>O@Wh9H49zhY1m`lpx1J~(%39dk+(QSXj|7AD{x%Qu>p85`j_u1+N z@m+_QpE5nvk_qd118wf7H}ZkQCYRVO?sgP8#1`A0wsInCU`t9Pk<=~joGiXMQQS+} zz#ZEc=yZaV<{0l58ysSjxO*efxGf819Mh+PBw6D7u3*o%?cwUHcqyLGNqS*EIN{PV z>8AL=XWy3v&L;T`f<4`9l+p5LWB8p79HxC{2msr5dBHUfxl+XYnt1DY-1LBtFR>%LnR>VUCyLc+6;^xf>sJ z8ujuHKCsOg{(GY!jW$ZlV;}&wX8Wn?T$hyDR3;QzPrSuwmm|yZ?hW=nNt+Q1@6V*T+)a=D7?E& z8W$f38Oj2u;%lzsUTSugCQ5?-J^29lVsdyO&%Kr$?#I299KMw2UQZ79l&z4r#JBSoxUFY%ENTOhYzeyJ;|Y5I0T9elo909w~#)uvt^z55X z(&M<%Q9M%_!u8bgx6$!qyoi}OoEF)4FugPy^L&sG#%v|00N>CS!#A`7)xfVjz($e2 zgSWqZp%GlL`@U3;7jJ2D1wKRPzn0Bssaw)5O@eq-Kr`ZpvRPuNf_>+8|M)!C{Wj|U zjWZirr}?0H5m*^B@una)5bb4iEDA%6jDlF2&5QH%NLw^Av6z7rX`I6Ed*tT2=Eb?Z z6k8_cfo)GF)`0U*#@D3aH`>=Dd~u)^!geyrpHw89e@SfzHk-mRByuDWkb>7SL7E`g z>cKSEfm`a!Bp0eX#i|3Fnh}ono5M+fkO|av85_q~sw+5_q+>HvZf}KOMP=iRPDbvd zsM~fN>iaM*pE&K?xB#hnsLG>d(uDZHp{TOJ>BO43+)I1-(w_J8`qT13Uh2-h*dr_e zLK1p}M-t+t9^o8@c)dq>2m(@%Ftkc{zO+Yp0N^ps6m^X2t_$}fWS|}jss}F?9SK8t zyR)!~iEyC7$jjS8)&Dx%ubm6Z{Y-41iMoHB?O!WneDgnz?T1sh&S(337^(x?%O2MK zA7y(Eg)hwZFQA6;e5v^bnu?%d(QJVEds29POJK1{=Zmq)vPm-Ek5pTIuuva3ZQKZ6 z({aunSZ~FoTahrW@ikhd=in>UQFHA|LGAh$z3^um%7eB0~Wo_AAPx zv*@-P?m(y;!m|00QhWj>`L95x0)(dGVZ8nc)R=5Ojy#fKDiTD)4yH6elFcHJuanPB zHs3c#4f3L)2Xe{gRltx=l?+jc^L2ZC32NS7Qi_xmrfPyk=$N66f|s}O!SOPG`3_hX zq!}e-v(-;;wAD9G-dK;3zE+EiU!>l#fL}sVWgUT|{ie=y(-u}%$twiUfa<0H9 zM_l#~suNtn7%X0m)g~@MuzyS|T1@28LO!@TDI^D6yc>8uroRYxXTfBRr zI>!Oc+uyA=V8!zi`Gyig>?Rp(2#BM*p#tbD5C_8yoRocW4DmuKa!DQ7bSfc(o;Ih* zICUo0mWl04T4JiM({SK$HXj^hAEnbpEIX@G)2uWly!bI6oRpgOGTkkOoqUkZG*$>b zHHSrU49`|V*}R^(8vOqzEZ?sR5Ej8TcdN(^ytFLUNY_!oEjOYlGCsy|ZHZVuXlVC_ zqXSJcFWtjh#=_H+t=_~Pw@@uBw`8LW(`Pm^cCh!I#W*W>Jb*6;HZ)~?g))kL3n-~> zzpod%GGFV;T9#(G9BJVM8kpf?3PQc+CL*Bo#ZC|HpuRN8(;Kgs%}pg#33eecLv9F_ zea}*+HS*$VJ~-MGIM@v-C-wzeyAk7K8xl;sgimkb#iU|tT{Pqo2sG(=(E+>Mpr=J= zyK}gaM_WjCAh{8o@xWX}B@?*78^=c%!4jf?lxHGZen$4ew=`f!QQIyOY#_NC6p~M$ zDG$7eIw>uND*1@Ff9Jy{Lk|pky&vXiBimVI#)ErcB(?7@$iTp$r=Ve&+Q$u_L2pI* zEaAAe$G&5R_F=4g?*j>XvdXx+198+$mY=cM%}0dbzzGzzpWtdAVo4KE9^V|rt-6aM zkg7oInH2~1LNKNq1W-@r_Lw7%6AcLId}*%0fwP6d8Agkcz6;XP)(hjRg9uNh!s&f^ zv>Xx;MzWx9VvP)^Bzx}nm_lyV1gcPM=A|hqd_ySOwel3*&#G}^?KTPa9sV90F^lrv z&6k`1iu|ET$j?G-f6sjw+~YHwYSJ6j!zM=H3?nCIy%nE+fV!Q zcvQwCqm4&0k7RdUGq=h}bxGs0h2Z!?m;IHUMN!bAm1D%7ZY9fCp&zKg)(dc#=?uc-PntWJ5Wg)FS(GV+5ZJE6O z_U&BYVFak;@y&W})vqZczT*gd7RA-=Hc%GB1XLhM=8*tgogoH`A?kO1XjSwZsRGW7fwzJTuunHZns0QR*a|KJbs7O&fltq1B*Qlp276w`+c$Hy ze+8D$=^KT1{br`NP7r&EhJ65`OY{g!6H^3fBKUT%uQxA^H1RoxH;~BH-UOuuV-ozE zZwik?zBE2KMq|l|j3w>BfH$!7dxPdU$b%*GkfokjGT*`n!8wSu3ORjiSe<=Qr>)*4 zM!W0waI5Y|&v|JK77$0FE9W6aAktl8Pi&a>fCHr@2ldvzqdGhEF{rwMiDv!fhKqp? z&k%CVm$O>8Bh8gFjj{9u#?lj5KVJ)D7c~+rJpn9TPb}TU)jmkmBcgL+5m!huq?!cLnTp~2QjKlTo~Ee+4#TnV5>SFfiRoGIfVEuu<8F~Rxy9|F9MDt{ z+px_t`flKJWf{sv2(BT+s^Jh6zfs)1w>9`Q*$oX}ngXB2h)3hT2IdZ3Juo3t;6T*g zR{f5KHZHwI5Dx`;bI_^l!|y#5IH-ro7dC9@2daq;lDRvsM>4a{Chx_jaU{sd7uJ2v zi#KBgH(UG{$9)acVy8>&vr{yGGLxo#q%~ZEO~_7og90b}`QrKAZ7r$7yCdQ z!AatD5N*0CJQQ_dN0PLR+9uNXqg?hKT%KwSdDW6*e-J2+JlAw-x6WdQ?T+%1TZY-sfxI%@T4 zidN_C$GF-LPl0aDyqLh&lhv3xG==r#hC;V}l_Eagc z1X_(wv0?8)XYf}fk`73qBXA(bDK;0xHSIkJ>^ZSK=+HMc9O9hmn_VJyTIS%S9(`PU z+fawzrHA7X6**{}kpI!y=ti1j?*RadWG8+?|Ax4lAcYq<_Rup%T zT*knk18#lh1QBJ#4s-!ivmAt3ZVG2InWW_3P%;ruWcgqPic5)bCR!$798s5G6c3)F z(;YYHAX!mZ9|Bvj2;_bT5mB7DRM`OMS_F7XA30;mKm_0H59D+#FyL_f0Q|xDdvAo+{e5?n#ZnvTetG? zdXPI}<3YZ=B!B|j7rYqE11kaW0NCd$HDOJG zL4zVfaL@==-~~$OgRfF<<~DmBIR%Nu;Xm?C*od~lIN0=|ns_8)p=ojjm&d#YSE|y~ ztK|Hb&3{EAFR{pL*q-Rnn1j1_t8Bi95-`pGlL*@zKsGy2yP!l| z;#NjZ(sro)JUSkd%{7!$dV#fqny0*GK|VIzI;0ReoP2Pxo}p#)O)AbxxQ*D`AnRG# z{2=R=e;q65p&G@nWb;m79j}l;hkLM;F9d_ijZGH-RMcFnlM7P1Ev~7NrG>^Fs_0o>^5-PazyCW#a-F^~-aJ*unIs)Ha zyeNSWG;)04V;s1AAmv804j;fC;uJY{WZ`=B4-@+3uSe$r$11+SkpszlUmqx)P zqh<3Qe**X1E-`l-iiEG^bIgB7z}uS_ug5CjO~H{5?LBgmUIUs7TmjCM&Hcwy^#`J1 zsld(xz}_w(7>)XnIRP}2l2#(K+kSuxd{ySN%-d;}$vg>;fGKj&6ylR0lZSwps?afPpg%i9gMw{F)|Z8s;246PE~K|&wa0E$JQ8N}0-Y>2!3o+jo8v5XO8j!@0J+nqaTzYTv_#56%}0R+x#tofWhx6Ek;Hy zWw(+7N+N~ya4#lYBtZ}^wrW_Rjz402dz3^BVy73xSr9YK4dz449KzJ@%CpM0kPl|Y zNx8kyQ>8WCV!2#FYLJs zJVN`zcWGakxl6!FbZr*fEcb->d?_Sv0+h}KQ)n`nnihOEuNNT)BVarN(XP4> zFYU0s)=(-6VBWys=G9|}`wx0=#6iVcgvpx$$qHuTbmUaOMFV+p7n2DwX*Q(>cEJ;D zu4EaPVy=@zEs!E|NfB=(UCR=Z#xX#gG8T;TB3lT}R|4s>zs=PyMZ9h3$Fh9f;DPMH zef%uZH)miANvULL0N`pL2F@K^5HlP{Ew0PAy6uO#04+YS?%STm{*r7@-!fWUgS>hs z1H~c~OsxK8B-sw@az3ZxaHjz>W$EgPCw9Te-StS%(*=xa`-c5%GONKMzxw z!UsooJk-+Tl;UeXIO+%Zcfbq-T;dT|`aXAhtFpY78p$bDM}JvCh&GI*#zpfa06{cl z0l07!h6NJb&}a(%l}+KG#~~mt3A53+H|uO7xTo(OOlk}d02Jmp(@%1BqrN3AY}OH$RPoH{!g&?-&&g z8xW^OKs4Wn5b;Q1Fwp|`eT1Uoc%w2d=(FHd({V#R7&nSt2YekN*}P;Fa^Z||7&Vbe zO+=Fe<`(!XVpYp|2@FGpi87HM1Jh-K5FwIw{3rD8qhdfoZI#f7AOFv280R_ zmd%q!q2&JUxbQN)e)`8ePGW4PgKCk0aed=S9!Bf)0%4 zBbU9N2;t`P8`|+UvJV3zSL_D20i z6T#o2vr@9ra573pxw1OAa7gMBtu=18(~!)^KmgkDz%3qhZqKXx+Mg8nwP^l;(C{1L zU;$=Vj`)Fal2^fh0KM)nC;=2g;LCR z(wkTq;L2AP1}H3C1Ut{x!d}mpPg^!x8V#h9qjMXbS5#`Rzs5qif3El7tGx2CuP zAD>}!ulS26u^p}bq`yb|>CiV$XxFi%te6MCIS;*r?By7aApz?j>-QG*TZ5vO9x`uF6S6FvTSFLU@)SREj%85fiH9{89ijR-3s$j##MsgSjY{w zN{|EQgN7o^NJ*BOHm1Xkf+_ z=%0adynPpr#1^1z`=FzNW=CSltllD|xpKVBj$6v?xTUP8>_}`BWE4JOnAFOV*Z?*# zbWdCiJ8l#*YAJC_N*bjI`VZZDcsnp(4Sb*sQmIKH6f;elYvoDBR(l;J)Ja(jMxv)A zhM&WM-;h^#7Gj8F;RZ2l0#Zl}aZHkvG!qf7_K~lMxaYP*IHF4lCBYg+gRd#3TAPtt zAXBXn2WSYe12m&}6!Nx#9jJX}3Va?To{BsB0||VK4%Cha;s zLE2F?!9(vzJhRGN;5>-lQC@#sv&tZPO_8F9JGD7kH=tIo_P1XW4SF_V?B^`AI5J|T ztl`MP2u8kpFJ+`toN@#TY@a9=8WE2yw0y|nY-^~6>^$7=V9T`y5tqH0tG$E;-s1wv zEII342iRSI2nz$*<%0gp5H&arTgeD-KD$?beVgjP?#=|(9M&%ZNpeLoS8{EbK8a@f@NiT=n+&kzU>;S5SzJr+Uq6H zZHs4lxqI0)ak|ch|Je&)n%L5Q3k7$M;PdaP-p|GTBHJFi9?fyL(_yMjopN#xl<6y>68KBrAJ zDGG+N;WE496;?qRR+>-E8Tu&HrG+^ua77Al+=QI{;>jLTXcl4E8wGY|gvFC2P5BR|8SbrZ} zG?aSYjh=9;Y89OCmhF0)(Xbz!;;%x6z=*rM`R0axi^8~`gJrP?-RqTi;974&je|}z zEX0U(yH{a7g(XOM(zlO{VVtswoKPExJs6Ap8PV<0anuZs-8STaD$3bIH@QB2YnDYE%$G!vWxO1=xr*t^Ri`gNka z{fmWjhjK3Qd%A8JIJ}q_Us#MO;l;`8a5P4fb>11BG`f#iu%7%YbGePJ@zv9KX*Bc} z_OfIH{(JZ9Ve#RDdH^>v#e#L=ZaBVjithE`X>3zqt{2?lkP2eNf>i)1yx|1M{cqoh z*DiAgSEbgYKDW3kbpzEa7Oas9)(^zr$k2%ePr`jA6|CD{@FWBe=1fc~A1rttI}#ht z{p;p|L{9rHtGGKuB$rab9fHJ=bfD&bx=WJQjQcrviB^5jwUGQ|^WbE>Iso;72zQ9T2trNJHMjKx?QU~o#JSV`Ya<3t^ zf@|?{_^pTUsyYF?8CXC&=u#>sy*du@A;=%bcMIF$t`o$gxR5H|vPQWnA+~_d`0QhL zU+VlVYx4sm?uzAZCu<;IO1!K6I}cv+-%%(fp5;sZPnIbc?Tx-3xLP0YyBNQ*elxDV z8{yXFUWY-S_)Yj)zSJ20mKw*_Eg16+454rE#Raw{)i}?{#NDhT;Y4`es_~^&Ciak6 z8^;i3sFT}{Jth}C8CpRj4UUNpR%6R>AV$!`=huLXv~(vP1H#qYCMvxcu~S@a5=zr1 zx#8oOLQxoC4bv5;3zUsHuPkCHyBl+%6wRlieCdZI$zKk~bjz@q>hV$14zBJ4L}3w#F~oc;zQ zFD*AQEz1^LUK-5ZZUh?q6p!P$+TO@f8dHl~HgYRAsCF>&CZ^~HQ;6xfffQnEV{Zz@ zqV^D-5N)EBG1QGhv>b%K#}BQ47Cz`pO=E2ekn7Yo3*8_hCu}2f;1*U|aP0T^KqHU4 z4+neS$N1y&Rvm|Lf{F*eH~LM1Q!%~v2R@DpGKo|J8xEXnZQd-M1NK zd~utSk-Tb;KZSd7&nDVAquNCYfzx`md{V=wiE-g@8L2AuY)D6+p2$u3$|Qli{VcT^ zG{1sBfWf^~-%f~4Orcv*SPTc=;KEmIqMdHIAM*!>Q#O%ucopN;g_AdtOok2Uh+b#= zg47f?23W$OBiP_^87Dor0f~ zT^amTG3hW!Vpx;ZPr#kW2&OH-MSZ7K858&}23H)mV7ELfnEEO8w*YSMJ0C<~j1;r2 zEU-8pTQDP6w*nZ4edjGV(+7+=$qwFx)#M1j@-x~VuvH=b1aCj{Pu|mKYsnZX6An16 zC-~ZozAuBGIIF0|ZS3na`ra)3C2kbc_hvZ6YII?}o(VM)z+w1z`kL;7_?|!-bJyIq zQgB1KJBHDYYkQTM;T>+{?|_{Q>26iem1j0e-59s(YhpvcKpksBx1pF63j^wVGOB?~Nv&bJ@V}V~djhy_A%tE8d zJ7`Q{4(uc=tjHNzul5uB;eKb|D4!gw;AE|BA<}UqcC!g6} z@FO*RV@F@taT^cDdyV4chrnUs-YzK?i_`k;1rL$BQLHO`E`b$wJ*~xVX_}Evs&J{N zU$7u~=VL?(- z>goka$ttmeuu5rle%h&r*&Mk#TRTdmi@tQh>I@@at_OR4g!a!GKS6(l>I!WGAzY3;ZX(bmUk z>lkm}N3w!FvHcBNaT`gJ#?bo9zSNWw#P7m`9r!X*?=JlWMtk#v7fX}!eK2+={sF2iouEZftbtf1JwZXP0NzuQgKpTTmaP%!OXwg@8$_Tm zR&gGjigbT^E2P4WkD8@xT$0!5!j*BCREWJ@zQv7WX@^ux>pxxjc%P;t_y@8c9n%~# zKJp>8>L!~Ce*1-{6{k2S_u_6?T98`Y3V95_N;S;-P9UzCo+{?>c)vpDrO4IOzWqGu6(Dtq@@;25+Lr32Uj!8%q3ziT%FpAO4@pp z0kU!n^<)IiMGNMlCnDVKcjH%^i+wZ~Ye0h)K zzb90W8Bw#0o zTYtiJy->E8?X!xvJi7g)e}`beC|0>d$1%RkYPtjJeV5`l z%6|#>67Do2X!OHz2hqSA&Aq6@b?i6jlYXpko7)U9)S)@g|BBms6_EH&kXa_MOE|Xf z2giSp%DLNXF>~Y(;a8gJt#Z%?&_Mp z8%#<>@9T%rp_7y|rY;Fs{22$r7~vPhw-5=qS}Bh1!|ux}e^4TNbPTRr2%8&PqnXLl z2m>p$9PX6RQv67s7&;~Mc$hdL6tl2`Y zjhJ|51<@G+Dl!pqSZjia&-v-^ADm|hNwF_uh0v)@_e2SHgpI`mE@QGerkKPgGMDhJ zl4=FR#kuQx`sk8Y11{Z1y6GU7zAV+^zJT!$b3)A+fi zK0==A($Hm?Rt|jPg>MC8wqlt7uCqfb?gRD?e3#^d1^5fMFqjk7~B_d1kOgozZxvu zM{If4SQF>w9>pb)-QH+kig$^^RxrwDct7jIPvQ6hAI3Oj{9y++#P)qGZ8_GYfp%%^ zsw$VpZdZ%@oLpL65oiI(j4!}@$zB5_BBl`$(};*^M8vdP>cQYG({C(R{>}nEgp}Z{ z5i@An!|hF8JVUc4C8mDOnUH|(lo27gQE9hjLJ+G8eJYfK;EdE1d9q1zL*ErxU{rS} zo;Zd3jXig8w?Bjk7K$~^jmo;sm)7I+xaP)VI7S6n^R)`wqF=_zYd@?bN;<9IwEkjU zXZdLz5BDg;`p%+jw0c+!xC5=xdhejt%hoV}c$%HwxNYLS4wY+Bo4 zcIpQ=CrF21>>Z~zcKoYAAX?YcMS(5~bWxy-0$mj7qQL(d3eXOK9uqmmFYu7xmmVYj zO8kW$trY!z_zOMf%9F4EhtIim^8f$vIhRg8{2xB&+NVQ|A3o>O;j6vCqxCw9T@v_V zhI8rUzx?3?W1BsC_OAr~XX$hp^TX#{`Sa6eKP$^~@h-&c#k&~qa=iDd?9c*o)0{g40r zov!A&0_A>cs<~qfZGAr0{#In<#|zkcc`!g=~M6);jP81#R=Eh8%Z&3vy813+bYvG z`kzVH_m0k?f78){%qdUGvK8Spz^Q<_f0gAb!0!Q{23-C(S#AM*0Prwi;#0DGHPnF_ zFb{A9ApN^!)qo2C8vs`T);ulC_W)k=3}^!QEnpkq0Pt*22 z*an!5t=$>GX@Dj;o$m*90{*>GmY)Yq-y+McfNwT|mmv0k*pGez?gLy6coJ|uV9E#R z7hrF|w*fB$Yy<2Ecm}XPpa}|W0AL#6xQ}Gn2lyJ`lYpbaJNp2?#9WVndK&P#EYAbX z23!XC2H+aNI}XY6D}YUaEr3_x>&0&X=K&@{?alrI^#eWzmn_c?a%gIQLQ{Ds-X`S3(Au972+hE|^$F07uw#-i4lmB^Z0S3RZ|+OR@-(`+asy%QOVgta^9rmY)7(n z>G^%2@uq+V`%oTaXAh0@YT(`k?iVVK0OfT8{{is0F2EkbO$AN{4j&%0;}!sChs?dG z;?e+D0Jk5wM#4FgO}9mjOp0~h6@6z+LC{dJI@THJ7WE|Ngyw^e$-I!!P3PskGkSH5 zGhm4N8*)LWkw$;d$pG2SpnMqn>ZmcvDYr#~Jb{?&lT*+N2#q8*uaNI<$QwCM(i3OU zP7#&&(Zn0sJYNlbCi1!oU!~yL_<=76{&B+Np+1maISt%DGp<$0`)lZs9~;+`$d~%` zKR2#@$a@9yMvjYgS#RJR)JafbImSi(kAaSI0ETS2>5n))R=j6`%Lgu(5RCUAM1kmnWXqU%k|qDQH+78|W5&UksZY9?2(>=j8@jX8(R7>iti~k)NCwy{SiXwiBZ`zo)2&=;*}S zlK-|W(=FVHd4{ej0UbeDMn}+A3F?Ty7Nd+4Wh`o$K-4rg|DA zJf@93G}raOUDpBkHgFlh5qr`@`Dh*N9g&aPp*1l+A|K@?+VsR)cx(Mi#r(1v7S7V6sjjx1MF<)|x2b*+vbMS9q&tpO9x*S|EEYf&!#UD&)dSjL-} z%TdZ)7P86oMbl)?Lh=^mo%_Bl{|WM~^!FT37M#zM&g2z(FIW;>+F>q7B}9*oO3ohn zg9L>S)3CljfptBrUFHS!=g#P0%xVK4h>h;0h&`kAB;xD|P>gdLlYur8`wax3x@|D6PW67Z+n@liZ6AeHF}NVaZd8Ny!; z{0!h}UbVVX5p)8-82FFdY2(5;NFQQdif&<)p)o8#zM-&v=oTcNXg{kG=~5B2z+>EYx@64%8?yY#IeefW7qav1-dBEMS(5~bWxy-0$mj7qCgh~{;yNua%F()EDBTs_AYeO3wxL~47C5y z{)HZ+ny&pjqY75}G?l_JYP$CC8f)n@(v{E%uZB@z^VJF**$KX|1KxS1l7Dh1`0<_K zr**(EE7JTo5|dd7|wt7po1!g}|OPH9>Wc>z-2k8|fRQ zjG7N--knN0Y^T{%)kA?=yHBg-H9sWnz3Dllx3jU@mq!@ZbzT9?j$Y>47ht4gi?cEzVEz*IFsE7!689F(UqXyrBis=*>v zagyF6-KLe-^yEn3s411SkNkES2B_!tDhu6K#FdSy;CAbyl556{+NHk07uTZ)ACsMM-UkO0@k~vwt*r8&V?6TP#Xe4Ql<= zD$wE@ysJZbt6E-zpN-Z^Do|@z!`_QPWc!*up}`*;|8Ldu+WhIN)S6XDe=|7p>Dd0G zNTl|)@+aAWH2m)>q_ft@N87t()4vZ?D0Q z`L(zPx1%gsx>|Y7zS5wU4_Vlw#WlDWSn9u4K2K8eX)v1-BOXgcn1Zc%iFdW~nq8s6 zBWih)J$kfuwR!jzaFOk6_L>Iiu0!ObmDgaXLwVgAHMa_d$ifI~?P}<+5TLrW{?F3N zsnDo(TrFTxp$5J|phFi~lAxB?>|8B>NB)T%yOxLGJheRggFF!l7iudaxhvR3fi4Pk zQJ{+gT@>h|Ko?KnnZ^ DzmnNn literal 0 HcmV?d00001