From 62b7106671d04f70d7f6b49e9d53e637d116b0db Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 3 Apr 2015 18:26:54 +0200 Subject: [PATCH] remove tests --- test/.gitignore | 5 - test/Makefile | 20 - test/README.testsuite | 48 - test/TEST-01-BASIC/Makefile | 10 - test/TEST-01-BASIC/test.sh | 74 - test/TEST-02-CRYPTSETUP/Makefile | 1 - test/TEST-02-CRYPTSETUP/test.sh | 97 -- test/TEST-03-JOBS/Makefile | 1 - test/TEST-03-JOBS/test-jobs.sh | 50 - test/TEST-03-JOBS/test.sh | 79 - test/a.service | 7 - test/b.service | 6 - test/basic.target | 1 - test/bus-policy/check-own-rules.conf | 14 - test/bus-policy/hello.conf | 14 - test/bus-policy/many-rules.conf | 61 - test/bus-policy/methods.conf | 17 - test/bus-policy/ownerships.conf | 24 - test/bus-policy/signals.conf | 15 - test/bus-policy/test.conf | 20 - test/c.service | 6 - test/d.service | 8 - test/daughter.service | 7 - test/e.service | 8 - test/end.service.in | 6 - test/exec-environment-empty.service | 7 - test/exec-environment-multiple.service | 7 - test/exec-environment.service | 6 - test/exec-group.service | 6 - test/exec-ignoresigpipe-no.service | 7 - test/exec-ignoresigpipe-yes.service | 7 - test/exec-personality-x86-64.service | 7 - test/exec-personality-x86.service | 7 - test/exec-privatedevices-no.service | 7 - test/exec-privatedevices-yes.service | 7 - test/exec-privatetmp-no.service | 7 - test/exec-privatetmp-yes.service | 7 - test/exec-systemcallerrornumber.service | 7 - test/exec-systemcallfilter-failing.service | 8 - test/exec-systemcallfilter-failing2.service | 6 - .../exec-systemcallfilter-not-failing.service | 9 - ...exec-systemcallfilter-not-failing2.service | 6 - test/exec-umask-0177.service | 7 - test/exec-umask-default.service | 6 - test/exec-user.service | 6 - test/exec-workingdirectory.service | 7 - test/f.service | 5 - test/g.service | 6 - test/grandchild.service | 7 - test/h.service | 6 - test/hello-after-sleep.target | 5 - test/hello.service | 5 - test/loopy.service | 2 - test/loopy.service.d/compat.conf | 5 - test/loopy2.service | 1 - test/loopy3.service | 5 - test/loopy4.service | 1 - test/mocks/fsck | 27 - test/parent-deep.slice | 5 - test/parent.slice | 5 - test/path-changed.path | 8 - test/path-changed.service | 1 - test/path-directorynotempty.path | 8 - test/path-directorynotempty.service | 1 - test/path-exists.path | 8 - test/path-exists.service | 1 - test/path-existsglob.path | 8 - test/path-existsglob.service | 1 - test/path-makedirectory.path | 10 - test/path-makedirectory.service | 1 - test/path-modified.path | 8 - test/path-modified.service | 1 - test/path-mycustomunit.service | 6 - test/path-service.service | 6 - test/path-unit.path | 9 - test/paths.target | 1 - test/rule-syntax-check.py | 72 - test/sched_idle_bad.service | 6 - test/sched_idle_ok.service | 6 - test/sched_rr_bad.service | 8 - test/sched_rr_change.service | 9 - test/sched_rr_ok.service | 6 - test/shutdown.target | 1 - test/sleep.service | 6 - test/sockets.target | 1 - test/son.service | 8 - test/splash.bmp | Bin 289238 -> 0 bytes test/sys.tar.xz | Bin 165116 -> 0 bytes test/sysinit.target | 1 - test/sysv-generator-test.py | 391 ----- test/test-efi-create-disk.sh | 42 - test/test-functions | 1186 ------------- test/testsuite.target | 6 - test/timers.target | 1 - test/udev-test.pl | 1545 ----------------- test/unstoppable.service | 5 - 96 files changed, 4206 deletions(-) delete mode 100644 test/.gitignore delete mode 100644 test/Makefile delete mode 100644 test/README.testsuite delete mode 100644 test/TEST-01-BASIC/Makefile delete mode 100755 test/TEST-01-BASIC/test.sh delete mode 120000 test/TEST-02-CRYPTSETUP/Makefile delete mode 100755 test/TEST-02-CRYPTSETUP/test.sh delete mode 120000 test/TEST-03-JOBS/Makefile delete mode 100755 test/TEST-03-JOBS/test-jobs.sh delete mode 100755 test/TEST-03-JOBS/test.sh delete mode 100644 test/a.service delete mode 100644 test/b.service delete mode 120000 test/basic.target delete mode 100644 test/bus-policy/check-own-rules.conf delete mode 100644 test/bus-policy/hello.conf delete mode 100644 test/bus-policy/many-rules.conf delete mode 100644 test/bus-policy/methods.conf delete mode 100644 test/bus-policy/ownerships.conf delete mode 100644 test/bus-policy/signals.conf delete mode 100644 test/bus-policy/test.conf delete mode 100644 test/c.service delete mode 100644 test/d.service delete mode 100644 test/daughter.service delete mode 100644 test/e.service delete mode 100644 test/end.service.in delete mode 100644 test/exec-environment-empty.service delete mode 100644 test/exec-environment-multiple.service delete mode 100644 test/exec-environment.service delete mode 100644 test/exec-group.service delete mode 100644 test/exec-ignoresigpipe-no.service delete mode 100644 test/exec-ignoresigpipe-yes.service delete mode 100644 test/exec-personality-x86-64.service delete mode 100644 test/exec-personality-x86.service delete mode 100644 test/exec-privatedevices-no.service delete mode 100644 test/exec-privatedevices-yes.service delete mode 100644 test/exec-privatetmp-no.service delete mode 100644 test/exec-privatetmp-yes.service delete mode 100644 test/exec-systemcallerrornumber.service delete mode 100644 test/exec-systemcallfilter-failing.service delete mode 100644 test/exec-systemcallfilter-failing2.service delete mode 100644 test/exec-systemcallfilter-not-failing.service delete mode 100644 test/exec-systemcallfilter-not-failing2.service delete mode 100644 test/exec-umask-0177.service delete mode 100644 test/exec-umask-default.service delete mode 100644 test/exec-user.service delete mode 100644 test/exec-workingdirectory.service delete mode 100644 test/f.service delete mode 100644 test/g.service delete mode 100644 test/grandchild.service delete mode 100644 test/h.service delete mode 100644 test/hello-after-sleep.target delete mode 100644 test/hello.service delete mode 100644 test/loopy.service delete mode 100644 test/loopy.service.d/compat.conf delete mode 120000 test/loopy2.service delete mode 100644 test/loopy3.service delete mode 120000 test/loopy4.service delete mode 100755 test/mocks/fsck delete mode 100644 test/parent-deep.slice delete mode 100644 test/parent.slice delete mode 100644 test/path-changed.path delete mode 120000 test/path-changed.service delete mode 100644 test/path-directorynotempty.path delete mode 120000 test/path-directorynotempty.service delete mode 100644 test/path-exists.path delete mode 120000 test/path-exists.service delete mode 100644 test/path-existsglob.path delete mode 120000 test/path-existsglob.service delete mode 100644 test/path-makedirectory.path delete mode 120000 test/path-makedirectory.service delete mode 100644 test/path-modified.path delete mode 120000 test/path-modified.service delete mode 100644 test/path-mycustomunit.service delete mode 100644 test/path-service.service delete mode 100644 test/path-unit.path delete mode 120000 test/paths.target delete mode 100644 test/rule-syntax-check.py delete mode 100644 test/sched_idle_bad.service delete mode 100644 test/sched_idle_ok.service delete mode 100644 test/sched_rr_bad.service delete mode 100644 test/sched_rr_change.service delete mode 100644 test/sched_rr_ok.service delete mode 120000 test/shutdown.target delete mode 100644 test/sleep.service delete mode 120000 test/sockets.target delete mode 100644 test/son.service delete mode 100644 test/splash.bmp delete mode 100644 test/sys.tar.xz delete mode 120000 test/sysinit.target delete mode 100644 test/sysv-generator-test.py delete mode 100755 test/test-efi-create-disk.sh delete mode 100644 test/test-functions delete mode 100644 test/testsuite.target delete mode 120000 test/timers.target delete mode 100755 test/udev-test.pl delete mode 100644 test/unstoppable.service diff --git a/test/.gitignore b/test/.gitignore deleted file mode 100644 index fd7483da0..000000000 --- a/test/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.testdir -test.log -/dev -/run -/sys diff --git a/test/Makefile b/test/Makefile deleted file mode 100644 index 987a32548..000000000 --- a/test/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Just a little hook script to easy building when in this directory -.PHONY: all check clean - -all: - $(MAKE) -C .. - -clean: - @for i in TEST-[0-9]*; do \ - [ -d $$i ] || continue ; \ - [ -f $$i/Makefile ] || continue ; \ - make -C $$i clean ; \ - done - -check: - $(MAKE) -C .. all - @for i in TEST-[0-9]*; do \ - [ -d $$i ] || continue ; \ - [ -f $$i/Makefile ] || continue ; \ - make -C $$i all ; \ - done diff --git a/test/README.testsuite b/test/README.testsuite deleted file mode 100644 index 2ae85a2ce..000000000 --- a/test/README.testsuite +++ /dev/null @@ -1,48 +0,0 @@ -The extended testsuite only works with uid=0. It contains of several -subdirectories named "test/TEST-??-*", which are run one by one. - -To run the extended testsuite do the following: - -$ make all -$ cd test -$ sudo make clean check -... -make[1]: Entering directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC' -Making all in . -Making all in po -Making all in docs/libudev -Making all in docs/gudev -TEST: Basic systemd setup [OK] -make[1]: Leaving directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC' -... - -If one of the tests fails, then $subdir/test.log contains the log file of -the test. - -To debug a special testcase of the testsuite do: - -$ make all -$ cd test/TEST-01-BASIC -$ sudo make clean setup run - -QEMU -==== - -If you want to log in the testsuite virtual machine, you can specify -additional kernel command line parameter with $KERNEL_APPEND. - -$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" clean setup run - -you can even skip the "clean" and "setup" if you want to run the machine again. - -$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" run - -You can specify a different kernel and initramfs with $KERNEL_BIN and $INITRD. -(Fedora's default kernel path and initramfs are used by default) - -$ sudo make KERNEL_BIN=/boot/vmlinuz-foo INITRD=/boot/initramfs-bar clean check - -A script will try to find your QEMU binary. If you want to specify a different -one you can use $QEMU_BIN. - -$ sudo make QEMU_BIN=/path/to/qemu/qemu-kvm clean check diff --git a/test/TEST-01-BASIC/Makefile b/test/TEST-01-BASIC/Makefile deleted file mode 100644 index 5e89a29ef..000000000 --- a/test/TEST-01-BASIC/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -all: - @make -s --no-print-directory -C ../.. all - @basedir=../.. TEST_BASE_DIR=../ ./test.sh --all -setup: - @make --no-print-directory -C ../.. all - @basedir=../.. TEST_BASE_DIR=../ ./test.sh --setup -clean: - @basedir=../.. TEST_BASE_DIR=../ ./test.sh --clean -run: - @basedir=../.. TEST_BASE_DIR=../ ./test.sh --run diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh deleted file mode 100755 index d97fbe24d..000000000 --- a/test/TEST-01-BASIC/test.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh -TEST_DESCRIPTION="Basic systemd setup" - -. $TEST_BASE_DIR/test-functions - -check_result_qemu() { - ret=1 - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - [[ -e $TESTDIR/root/testok ]] && ret=0 - [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR - [[ -f $TESTDIR/root/var/log/journal ]] && cp -a $TESTDIR/root/var/log/journal $TESTDIR - umount $TESTDIR/root - [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed - ls -l $TESTDIR/journal/*/*.journal - test -s $TESTDIR/failed && ret=$(($ret+1)) - return $ret -} - -test_run() { - if run_qemu; then - check_result_qemu || return 1 - else - dwarn "can't run QEMU, skipping" - fi - if check_nspawn; then - run_nspawn - check_result_nspawn || return 1 - else - dwarn "can't run systemd-nspawn, skipping" - fi - return 0 -} - -test_setup() { - create_empty_image - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; echo OK > /testok; while : ;do echo "testsuite service waiting for journal to move to /var/log/journal" > /dev/console ; for i in /var/log/journal/*;do [ -d "\$i" ] && echo "\$i" && break 2; done; sleep 1; done; sleep 1; exit 0;' -Type=oneshot -EOF - - setup_testsuite - ) - setup_nspawn_root - - ddebug "umount $TESTDIR/root" - umount $TESTDIR/root -} - -test_cleanup() { - umount $TESTDIR/root 2>/dev/null - [[ $LOOPDEV ]] && losetup -d $LOOPDEV - return 0 -} - -do_test "$@" diff --git a/test/TEST-02-CRYPTSETUP/Makefile b/test/TEST-02-CRYPTSETUP/Makefile deleted file mode 120000 index e9f93b110..000000000 --- a/test/TEST-02-CRYPTSETUP/Makefile +++ /dev/null @@ -1 +0,0 @@ -../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh deleted file mode 100755 index 4be2365e2..000000000 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh -TEST_DESCRIPTION="cryptsetup systemd setup" - -. $TEST_BASE_DIR/test-functions - -check_result_qemu() { - ret=1 - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - [[ -e $TESTDIR/root/testok ]] && ret=0 - [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR - cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile - mount /dev/mapper/varcrypt $TESTDIR/root/var - [[ -f $TESTDIR/root/var/log/journal ]] && cp -a $TESTDIR/root/var/log/journal $TESTDIR - umount $TESTDIR/root/var - umount $TESTDIR/root - cryptsetup luksClose /dev/mapper/varcrypt - [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed - ls -l $TESTDIR/journal/*/*.journal - test -s $TESTDIR/failed && ret=$(($ret+1)) - return $ret -} - - -test_run() { - if run_qemu; then - check_result_qemu || return 1 - else - dwarn "can't run QEMU, skipping" - fi - return 0 -} - -test_setup() { - create_empty_image - echo -n test >$TESTDIR/keyfile - cryptsetup -q luksFormat ${LOOPDEV}p2 $TESTDIR/keyfile - cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile - mkfs.ext3 -L var /dev/mapper/varcrypt - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - mkdir -p $TESTDIR/root/var - mount /dev/mapper/varcrypt $TESTDIR/root/var - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=/dev/mapper/varcrypt) - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; echo OK > /testok; while : ;do systemd-cat echo "testsuite service waiting for /var/log/journal" ; echo "testsuite service waiting for journal to move to /var/log/journal" > /dev/console ; for i in /var/log/journal/*;do [ -d "\$i" ] && echo "\$i" && break 2; done; sleep 1; done; sleep 1; exit 0;' -Type=oneshot -EOF - - setup_testsuite - - install_dmevent - generate_module_dependencies - cat >$initdir/etc/crypttab < $initdir/etc/varkey - cat $initdir/etc/crypttab | ddebug - - cat >>$initdir/etc/fstab </dev/null - [[ -b /dev/mapper/varcrypt ]] && cryptsetup luksClose /dev/mapper/varcrypt - umount $TESTDIR/root 2>/dev/null - [[ $LOOPDEV ]] && losetup -d $LOOPDEV - return 0 -} - -do_test "$@" diff --git a/test/TEST-03-JOBS/Makefile b/test/TEST-03-JOBS/Makefile deleted file mode 120000 index e9f93b110..000000000 --- a/test/TEST-03-JOBS/Makefile +++ /dev/null @@ -1 +0,0 @@ -../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-03-JOBS/test-jobs.sh b/test/TEST-03-JOBS/test-jobs.sh deleted file mode 100755 index 28368b70e..000000000 --- a/test/TEST-03-JOBS/test-jobs.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -x - -# Test merging of a --ignore-dependencies job into a previously -# installed job. - -systemctl start --no-block hello-after-sleep.target -# sleep is now running, hello/start is waiting. Verify that: -systemctl list-jobs > /root/list-jobs.txt -grep 'sleep\.service.*running' /root/list-jobs.txt || exit 1 -grep 'hello\.service.*waiting' /root/list-jobs.txt || exit 1 - -# This is supposed to finish quickly, not wait for sleep to finish. -START_SEC=$(date -u '+%s') -systemctl start --ignore-dependencies hello -END_SEC=$(date -u '+%s') -ELAPSED=$(($END_SEC-$START_SEC)) - -[ "$ELAPSED" -lt 3 ] || exit 1 - -# sleep should still be running, hello not. -systemctl list-jobs > /root/list-jobs.txt -grep 'sleep\.service.*running' /root/list-jobs.txt || exit 1 -grep 'hello\.service' /root/list-jobs.txt && exit 1 -systemctl stop sleep.service hello-after-sleep.target || exit 1 - -# Test for a crash when enqueueing a JOB_NOP when other job already exists -systemctl start --no-block hello-after-sleep.target || exit 1 -# hello.service should still be waiting, so these try-restarts will collapse -# into NOPs. -systemctl try-restart --fail hello.service || exit 1 -systemctl try-restart hello.service || exit 1 -systemctl stop hello.service sleep.service hello-after-sleep.target || exit 1 - -# TODO: add more job queueing/merging tests here. - -# Test for irreversible jobs -systemctl start unstoppable.service || exit 1 - -# This is expected to fail with 'job cancelled' -systemctl stop unstoppable.service && exit 1 -# But this should succeed -systemctl stop --irreversible unstoppable.service || exit 1 - -# We're going to shutdown soon. Let's see if it succeeds when -# there's an active service that tries to be unstoppable. -# Shutdown of the container/VM will hang if not. -systemctl start unstoppable.service || exit 1 - -touch /testok -exit 0 diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh deleted file mode 100755 index 41e02e2c8..000000000 --- a/test/TEST-03-JOBS/test.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh -TEST_DESCRIPTION="Job-related tests" - -. $TEST_BASE_DIR/test-functions - -check_result_qemu() { - ret=1 - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - [[ -e $TESTDIR/root/testok ]] && ret=0 - [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR - cp -a $TESTDIR/root/var/log/journal $TESTDIR - umount $TESTDIR/root - [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed - ls -l $TESTDIR/journal/*/*.journal - test -s $TESTDIR/failed && ret=$(($ret+1)) - return $ret -} - -test_run() { - if run_qemu; then - check_result_qemu || return 1 - else - dwarn "can't run QEMU, skipping" - fi - if check_nspawn; then - run_nspawn - check_result_nspawn || return 1 - else - dwarn "can't run systemd-nspawn, skipping" - fi - return 0 -} - -test_setup() { - create_empty_image - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service </dev/null - [[ $LOOPDEV ]] && losetup -d $LOOPDEV - return 0 -} - -do_test "$@" diff --git a/test/a.service b/test/a.service deleted file mode 100644 index 4168d2d05..000000000 --- a/test/a.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=A -Requires=b.service -Before=b.service - -[Service] -ExecStart=/bin/true diff --git a/test/b.service b/test/b.service deleted file mode 100644 index e03bae36b..000000000 --- a/test/b.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=B -Wants=f.service - -[Service] -ExecStart=/bin/true diff --git a/test/basic.target b/test/basic.target deleted file mode 120000 index 061293468..000000000 --- a/test/basic.target +++ /dev/null @@ -1 +0,0 @@ -../units/basic.target \ No newline at end of file diff --git a/test/bus-policy/check-own-rules.conf b/test/bus-policy/check-own-rules.conf deleted file mode 100644 index bc2f415fc..000000000 --- a/test/bus-policy/check-own-rules.conf +++ /dev/null @@ -1,14 +0,0 @@ - - - mybususer - unix:path=/foo/bar - tcp:port=1234 - /usr/share/foo - - - - - - - diff --git a/test/bus-policy/hello.conf b/test/bus-policy/hello.conf deleted file mode 100644 index af09893de..000000000 --- a/test/bus-policy/hello.conf +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - diff --git a/test/bus-policy/many-rules.conf b/test/bus-policy/many-rules.conf deleted file mode 100644 index 70dd538c1..000000000 --- a/test/bus-policy/many-rules.conf +++ /dev/null @@ -1,61 +0,0 @@ - - - mybususer - unix:path=/foo/bar - tcp:port=1234 - basic.d - - /usr/share/foo - nonexistent.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5000 - 5000 - 300 - 5000 - 6000 - 50 - 80 - 64 - 64 - 256 - 512 - - diff --git a/test/bus-policy/methods.conf b/test/bus-policy/methods.conf deleted file mode 100644 index 4bc38f915..000000000 --- a/test/bus-policy/methods.conf +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/test/bus-policy/ownerships.conf b/test/bus-policy/ownerships.conf deleted file mode 100644 index bc3a230a2..000000000 --- a/test/bus-policy/ownerships.conf +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/bus-policy/signals.conf b/test/bus-policy/signals.conf deleted file mode 100644 index 440e3fe6d..000000000 --- a/test/bus-policy/signals.conf +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - diff --git a/test/bus-policy/test.conf b/test/bus-policy/test.conf deleted file mode 100644 index ee6afcdfb..000000000 --- a/test/bus-policy/test.conf +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/test/c.service b/test/c.service deleted file mode 100644 index e2f60a8fb..000000000 --- a/test/c.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=C -Requires=a.service - -[Service] -ExecStart=/bin/true diff --git a/test/d.service b/test/d.service deleted file mode 100644 index 921fd2ee1..000000000 --- a/test/d.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=D:Cyclic -After=b.service -Before=a.service -Requires=a.service - -[Service] -ExecStart=/bin/true diff --git a/test/daughter.service b/test/daughter.service deleted file mode 100644 index aebedca34..000000000 --- a/test/daughter.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Daughter Service - -[Service] -Slice=parent.slice -Type=oneshot -ExecStart=/bin/true diff --git a/test/e.service b/test/e.service deleted file mode 100644 index 5ba98c7c4..000000000 --- a/test/e.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=E:Cyclic -After=b.service -Before=a.service -Wants=a.service - -[Service] -ExecStart=/bin/true diff --git a/test/end.service.in b/test/end.service.in deleted file mode 100644 index 4857ffe02..000000000 --- a/test/end.service.in +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=End the test -After=testsuite.service - -[Service] -ExecStart=@SYSTEMCTL@ poweroff --no-block diff --git a/test/exec-environment-empty.service b/test/exec-environment-empty.service deleted file mode 100644 index 0219ca4fd..000000000 --- a/test/exec-environment-empty.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Environment - -[Service] -ExecStart=/bin/sh -c 'exit $(test ! "$VAR1" = "word1 word2") && $(test ! "$VAR2" = word3) && $(test ! "$VAR3" = \'$word 5 6\')' -Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" -Environment= diff --git a/test/exec-environment-multiple.service b/test/exec-environment-multiple.service deleted file mode 100644 index 479005a5d..000000000 --- a/test/exec-environment-multiple.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Environment - -[Service] -ExecStart=/bin/sh -c 'exit $(test "$VAR1" = "word1 word2") && $(test "$VAR2" = word3) && $(test "$VAR3" = foobar)' -Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" -Environment="VAR3=foobar" diff --git a/test/exec-environment.service b/test/exec-environment.service deleted file mode 100644 index 4586b4c4a..000000000 --- a/test/exec-environment.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for Environment - -[Service] -ExecStart=/bin/sh -c 'exit $(test "$VAR1" = "word1 word2") && $(test "$VAR2" = word3) && $(test "$VAR3" = \'$word 5 6\')' -Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" diff --git a/test/exec-group.service b/test/exec-group.service deleted file mode 100644 index 1aa04b5bd..000000000 --- a/test/exec-group.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for Group - -[Service] -ExecStart=/bin/sh -c 'exit $(test $(id -n -g) = nobody)' -Group=nobody diff --git a/test/exec-ignoresigpipe-no.service b/test/exec-ignoresigpipe-no.service deleted file mode 100644 index 69b2e9d8a..000000000 --- a/test/exec-ignoresigpipe-no.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for IgnoreSIGPIPE=no - -[Service] -ExecStart=/bin/sh -c 'kill -PIPE 0' -Type=oneshot -IgnoreSIGPIPE=no diff --git a/test/exec-ignoresigpipe-yes.service b/test/exec-ignoresigpipe-yes.service deleted file mode 100644 index 877ec8aed..000000000 --- a/test/exec-ignoresigpipe-yes.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for IgnoreSIGPIPE=yes - -[Service] -ExecStart=/bin/sh -c 'kill -PIPE 0' -Type=oneshot -IgnoreSIGPIPE=yes diff --git a/test/exec-personality-x86-64.service b/test/exec-personality-x86-64.service deleted file mode 100644 index 5bb5d910d..000000000 --- a/test/exec-personality-x86-64.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Personality=x86-64 - -[Service] -ExecStart=/bin/sh -c 'echo $(uname -m); exit $(test $(uname -m) = "x86_64")' -Type=oneshot -Personality=x86-64 diff --git a/test/exec-personality-x86.service b/test/exec-personality-x86.service deleted file mode 100644 index 0b370a648..000000000 --- a/test/exec-personality-x86.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Personality=x86 - -[Service] -ExecStart=/bin/sh -c 'echo $(uname -m); exit $(test $(uname -m) = "i686")' -Type=oneshot -Personality=x86 diff --git a/test/exec-privatedevices-no.service b/test/exec-privatedevices-no.service deleted file mode 100644 index cf4f275fb..000000000 --- a/test/exec-privatedevices-no.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateDev=no - -[Service] -ExecStart=/bin/sh -c 'exit $(test -c /dev/mem)' -Type=oneshot -PrivateDevices=no diff --git a/test/exec-privatedevices-yes.service b/test/exec-privatedevices-yes.service deleted file mode 100644 index 85b3f4f98..000000000 --- a/test/exec-privatedevices-yes.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateDev=yes - -[Service] -ExecStart=/bin/sh -c 'exit $(test ! -c /dev/mem)' -Type=oneshot -PrivateDevices=yes diff --git a/test/exec-privatetmp-no.service b/test/exec-privatetmp-no.service deleted file mode 100644 index d69e552a6..000000000 --- a/test/exec-privatetmp-no.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateTmp=no - -[Service] -ExecStart=/bin/sh -c 'exit $(test -f /tmp/test-exec_privatetmp)' -Type=oneshot -PrivateTmp=no diff --git a/test/exec-privatetmp-yes.service b/test/exec-privatetmp-yes.service deleted file mode 100644 index 881a040b8..000000000 --- a/test/exec-privatetmp-yes.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateTmp=yes - -[Service] -ExecStart=/bin/sh -c 'exit $(test ! -f /tmp/test-exec_privatetmp)' -Type=oneshot -PrivateTmp=yes diff --git a/test/exec-systemcallerrornumber.service b/test/exec-systemcallerrornumber.service deleted file mode 100644 index 255a8b231..000000000 --- a/test/exec-systemcallerrornumber.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for SystemCallErrorNumber - -[Service] -ExecStart=/usr/bin/uname -a -SystemCallFilter=~uname -SystemCallErrorNumber=EACCES diff --git a/test/exec-systemcallfilter-failing.service b/test/exec-systemcallfilter-failing.service deleted file mode 100644 index c6ce9368c..000000000 --- a/test/exec-systemcallfilter-failing.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "This should not be seen" -SystemCallFilter=ioperm -SystemCallFilter=~ioperm -SystemCallFilter=ioperm diff --git a/test/exec-systemcallfilter-failing2.service b/test/exec-systemcallfilter-failing2.service deleted file mode 100644 index b7f7c2aff..000000000 --- a/test/exec-systemcallfilter-failing2.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "This should not be seen" -SystemCallFilter=~write open execve exit_group close mmap munmap fstat DONOTEXIST diff --git a/test/exec-systemcallfilter-not-failing.service b/test/exec-systemcallfilter-not-failing.service deleted file mode 100644 index feb206ab6..000000000 --- a/test/exec-systemcallfilter-not-failing.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "Foo bar" -SystemCallFilter=~read write open execve ioperm -SystemCallFilter=ioctl -SystemCallFilter=read write open execve -SystemCallFilter=~ioperm diff --git a/test/exec-systemcallfilter-not-failing2.service b/test/exec-systemcallfilter-not-failing2.service deleted file mode 100644 index cca469aa3..000000000 --- a/test/exec-systemcallfilter-not-failing2.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "Foo bar" -SystemCallFilter= diff --git a/test/exec-umask-0177.service b/test/exec-umask-0177.service deleted file mode 100644 index af9295888..000000000 --- a/test/exec-umask-0177.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for UMask - -[Service] -ExecStart=/bin/sh -c 'touch /tmp/test-exec-umask; s=$(stat -c %a /tmp/test-exec-umask); echo $s; exit $(test $s = "600")' -UMask=0177 -PrivateTmp=yes diff --git a/test/exec-umask-default.service b/test/exec-umask-default.service deleted file mode 100644 index 41e20a60a..000000000 --- a/test/exec-umask-default.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for UMask default - -[Service] -ExecStart=/bin/sh -c 'touch /tmp/test-exec-umask; s=$(stat -c %a /tmp/test-exec-umask); echo $s; exit $(test $s = "644")' -PrivateTmp=yes diff --git a/test/exec-user.service b/test/exec-user.service deleted file mode 100644 index 2ca08ebb4..000000000 --- a/test/exec-user.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for User - -[Service] -ExecStart=/bin/sh -c 'exit $(test "$USER" = nobody)' -User=nobody diff --git a/test/exec-workingdirectory.service b/test/exec-workingdirectory.service deleted file mode 100644 index 10855d682..000000000 --- a/test/exec-workingdirectory.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for WorkingDirectory - -[Service] -ExecStart=/bin/sh -c 'echo $PWD; exit $(test $PWD = "/tmp/test-exec_workingdirectory")' -Type=oneshot -WorkingDirectory=/tmp/test-exec_workingdirectory diff --git a/test/f.service b/test/f.service deleted file mode 100644 index 7dde681c1..000000000 --- a/test/f.service +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=F - -[Service] -ExecStart=/bin/true diff --git a/test/g.service b/test/g.service deleted file mode 100644 index cbfa82a45..000000000 --- a/test/g.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=G -Conflicts=e.service - -[Service] -ExecStart=/bin/true diff --git a/test/grandchild.service b/test/grandchild.service deleted file mode 100644 index ab641300e..000000000 --- a/test/grandchild.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Grandchild Service - -[Service] -Slice=parent-deep.slice -Type=oneshot -ExecStart=/bin/true diff --git a/test/h.service b/test/h.service deleted file mode 100644 index 74a7751ca..000000000 --- a/test/h.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=H -Wants=g.service - -[Service] -ExecStart=/bin/true diff --git a/test/hello-after-sleep.target b/test/hello-after-sleep.target deleted file mode 100644 index 526fbd2a1..000000000 --- a/test/hello-after-sleep.target +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Sleep for a minute, then say hello. -Wants=sleep.service hello.service -After=sleep.service -Before=hello.service diff --git a/test/hello.service b/test/hello.service deleted file mode 100644 index 82907b64e..000000000 --- a/test/hello.service +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Hello World - -[Service] -ExecStart=/bin/echo "Hello World" diff --git a/test/loopy.service b/test/loopy.service deleted file mode 100644 index 9eb645748..000000000 --- a/test/loopy.service +++ /dev/null @@ -1,2 +0,0 @@ -[Service] -ExecStart=/bin/true diff --git a/test/loopy.service.d/compat.conf b/test/loopy.service.d/compat.conf deleted file mode 100644 index 51b84b89e..000000000 --- a/test/loopy.service.d/compat.conf +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -BindsTo=loopy2.service - -[Install] -Also=loopy2.service diff --git a/test/loopy2.service b/test/loopy2.service deleted file mode 120000 index 961b1fe9b..000000000 --- a/test/loopy2.service +++ /dev/null @@ -1 +0,0 @@ -loopy.service \ No newline at end of file diff --git a/test/loopy3.service b/test/loopy3.service deleted file mode 100644 index 606e26b5d..000000000 --- a/test/loopy3.service +++ /dev/null @@ -1,5 +0,0 @@ -[Service] -ExecStart=/bin/true - -[Unit] -Conflicts=loopy4.service diff --git a/test/loopy4.service b/test/loopy4.service deleted file mode 120000 index 43e5658bc..000000000 --- a/test/loopy4.service +++ /dev/null @@ -1 +0,0 @@ -loopy3.service \ No newline at end of file diff --git a/test/mocks/fsck b/test/mocks/fsck deleted file mode 100755 index 77b50d723..000000000 --- a/test/mocks/fsck +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -fd=0 - -OPTIND=1 -while getopts "C:aTlM" opt; do - case "$opt" in - C) - fd=$OPTARG - ;; - \?);; - esac -done - -shift "$((OPTIND-1))" -device=$1 - -echo "Running fake fsck on $device" - -declare -a maxpass=(30 5 2 30 60) - -for pass in {1..5}; do - maxprogress=${maxpass[$((pass-1))]} - for (( current=0; current<=${maxprogress}; current++)); do - echo "$pass $current $maxprogress $device">&$fd - sleep 0.1 - done -done diff --git a/test/parent-deep.slice b/test/parent-deep.slice deleted file mode 100644 index 79b302f38..000000000 --- a/test/parent-deep.slice +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Deeper Parent Slice - -[Slice] -MemoryLimit=3G diff --git a/test/parent.slice b/test/parent.slice deleted file mode 100644 index 0222f8eb4..000000000 --- a/test/parent.slice +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Parent Slice - -[Slice] -BlockIOWeight=200 diff --git a/test/path-changed.path b/test/path-changed.path deleted file mode 100644 index e58bdd925..000000000 --- a/test/path-changed.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathChanged - -[Path] -PathChanged=/tmp/test-path_changed - -[Install] -WantedBy=multi-user.target diff --git a/test/path-changed.service b/test/path-changed.service deleted file mode 120000 index 8bdf17883..000000000 --- a/test/path-changed.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-directorynotempty.path b/test/path-directorynotempty.path deleted file mode 100644 index 17e599fc0..000000000 --- a/test/path-directorynotempty.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test DirectoryNotEmpty - -[Path] -DirectoryNotEmpty=/tmp/test-path_directorynotempty/ - -[Install] -WantedBy=multi-user.target diff --git a/test/path-directorynotempty.service b/test/path-directorynotempty.service deleted file mode 120000 index 8bdf17883..000000000 --- a/test/path-directorynotempty.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-exists.path b/test/path-exists.path deleted file mode 100644 index c4c9105af..000000000 --- a/test/path-exists.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathExists - -[Path] -PathExists=/tmp/test-path_exists - -[Install] -WantedBy=multi-user.target diff --git a/test/path-exists.service b/test/path-exists.service deleted file mode 120000 index 8bdf17883..000000000 --- a/test/path-exists.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-existsglob.path b/test/path-existsglob.path deleted file mode 100644 index a05859960..000000000 --- a/test/path-existsglob.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathExistsGlob - -[Path] -PathExistsGlob=/tmp/test-path_existsglob* - -[Install] -WantedBy=multi-user.target diff --git a/test/path-existsglob.service b/test/path-existsglob.service deleted file mode 120000 index 8bdf17883..000000000 --- a/test/path-existsglob.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-makedirectory.path b/test/path-makedirectory.path deleted file mode 100644 index 9408479c0..000000000 --- a/test/path-makedirectory.path +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Test MakeDirectory & DirectoryMode - -[Path] -DirectoryNotEmpty=/tmp/test-path_makedirectory/ -MakeDirectory=yes -DirectoryMode=0744 - -[Install] -WantedBy=multi-user.target diff --git a/test/path-makedirectory.service b/test/path-makedirectory.service deleted file mode 120000 index 8bdf17883..000000000 --- a/test/path-makedirectory.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-modified.path b/test/path-modified.path deleted file mode 100644 index 18363227b..000000000 --- a/test/path-modified.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathModified - -[Path] -PathModified=/tmp/test-path_modified - -[Install] -WantedBy=multi-user.target diff --git a/test/path-modified.service b/test/path-modified.service deleted file mode 120000 index 8bdf17883..000000000 --- a/test/path-modified.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-mycustomunit.service b/test/path-mycustomunit.service deleted file mode 100644 index 172ac0d0d..000000000 --- a/test/path-mycustomunit.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Service Test Path Unit= - -[Service] -ExecStart=/bin/true -Type=oneshot diff --git a/test/path-service.service b/test/path-service.service deleted file mode 100644 index f8499ec61..000000000 --- a/test/path-service.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Service Test for Path units - -[Service] -ExecStart=/bin/true -Type=oneshot diff --git a/test/path-unit.path b/test/path-unit.path deleted file mode 100644 index 95e572d6d..000000000 --- a/test/path-unit.path +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Test Path Unit= - -[Path] -PathExists=/tmp/test-path_unit -Unit=path-mycustomunit.service - -[Install] -WantedBy=multi-user.target diff --git a/test/paths.target b/test/paths.target deleted file mode 120000 index e9939c980..000000000 --- a/test/paths.target +++ /dev/null @@ -1 +0,0 @@ -../units/paths.target \ No newline at end of file diff --git a/test/rule-syntax-check.py b/test/rule-syntax-check.py deleted file mode 100644 index 80bbe65be..000000000 --- a/test/rule-syntax-check.py +++ /dev/null @@ -1,72 +0,0 @@ -# Simple udev rules syntax checker -# -# (C) 2010 Canonical Ltd. -# Author: Martin Pitt -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -# systemd 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with systemd; If not, see . - -import re -import sys -import os -from glob import glob - -if len(sys.argv) > 1: - # explicit rule file list - rules_files = sys.argv[1:] -else: - # take them from the build dir - root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - rules_dir = os.path.join(os.environ.get('top_srcdir', root_dir), 'rules') - if not os.path.isdir(rules_dir): - sys.stderr.write('No rules files given, and %s does not exist, aborting' % rules_dir) - sys.exit(2) - rules_files = glob(os.path.join(rules_dir, '*.rules')) - -no_args_tests = re.compile('(ACTION|DEVPATH|KERNELS?|NAME|SYMLINK|SUBSYSTEMS?|DRIVERS?|TAG|RESULT|TEST)\s*(?:=|!)=\s*"([^"]*)"$') -args_tests = re.compile('(ATTRS?|ENV|TEST){([a-zA-Z0-9/_.*%-]+)}\s*(?:=|!)=\s*"([^"]*)"$') -no_args_assign = re.compile('(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|PROGRAM|RUN|LABEL|GOTO|WAIT_FOR|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*"([^"]*)"$') -args_assign = re.compile('(ATTR|ENV|IMPORT|RUN){([a-zA-Z0-9/_.*%-]+)}\s*(=|\+=)\s*"([^"]*)"$') - -result = 0 -buffer = '' -for path in rules_files: - lineno = 0 - for line in open(path): - lineno += 1 - - # handle line continuation - if line.endswith('\\\n'): - buffer += line[:-2] - continue - else: - line = buffer + line - buffer = '' - - # filter out comments and empty lines - line = line.strip() - if not line or line.startswith('#'): - continue - - for clause in line.split(','): - clause = clause.strip() - if not (no_args_tests.match(clause) or args_tests.match(clause) or - no_args_assign.match(clause) or args_assign.match(clause)): - - print('Invalid line %s:%i: %s' % (path, lineno, line)) - print(' clause: %s' % clause) - print('') - result = 1 - break - -sys.exit(result) diff --git a/test/sched_idle_bad.service b/test/sched_idle_bad.service deleted file mode 100644 index 589a87ccf..000000000 --- a/test/sched_idle_bad.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Bad sched priority for Idle - -[Service] -ExecStart=/bin/true -CPUSchedulingPriority=1 diff --git a/test/sched_idle_ok.service b/test/sched_idle_ok.service deleted file mode 100644 index 262ef3e31..000000000 --- a/test/sched_idle_ok.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Sched idle with prio 0 - -[Service] -ExecStart=/bin/true -CPUSchedulingPriority=0 diff --git a/test/sched_rr_bad.service b/test/sched_rr_bad.service deleted file mode 100644 index 0be534a54..000000000 --- a/test/sched_rr_bad.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Bad sched priority for RR - -[Service] -ExecStart=/bin/true -CPUSchedulingPolicy=rr -CPUSchedulingPriority=0 -CPUSchedulingPriority=100 diff --git a/test/sched_rr_change.service b/test/sched_rr_change.service deleted file mode 100644 index b3e3a000f..000000000 --- a/test/sched_rr_change.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Change prio - -[Service] -ExecStart=/bin/true -CPUSchedulingPolicy=rr -CPUSchedulingPriority=1 -CPUSchedulingPriority=2 -CPUSchedulingPriority=99 diff --git a/test/sched_rr_ok.service b/test/sched_rr_ok.service deleted file mode 100644 index b88adc543..000000000 --- a/test/sched_rr_ok.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Default prio for RR - -[Service] -ExecStart=/bin/true -CPUSchedulingPolicy=rr diff --git a/test/shutdown.target b/test/shutdown.target deleted file mode 120000 index 1a3c2eec8..000000000 --- a/test/shutdown.target +++ /dev/null @@ -1 +0,0 @@ -../units/shutdown.target \ No newline at end of file diff --git a/test/sleep.service b/test/sleep.service deleted file mode 100644 index 946c44b62..000000000 --- a/test/sleep.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Sleep for 1 minute - -[Service] -Type=oneshot -ExecStart=/bin/sleep 60 diff --git a/test/sockets.target b/test/sockets.target deleted file mode 120000 index 8ff86a077..000000000 --- a/test/sockets.target +++ /dev/null @@ -1 +0,0 @@ -../units/sockets.target \ No newline at end of file diff --git a/test/son.service b/test/son.service deleted file mode 100644 index 50bb96a94..000000000 --- a/test/son.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Son Service - -[Service] -Slice=parent.slice -Type=oneshot -ExecStart=/bin/true -CPUShares=100 diff --git a/test/splash.bmp b/test/splash.bmp deleted file mode 100644 index 27247f7a22b61f5571ba5a6069c4fe52845d65cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289238 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

Kx6+UJioe$XggWrZTx7a4~LYp^VZYx&~ z+M-2Et$*eM>L91FUpCfhAkA#!@y{{MY^$xUb^RpLNb}|`rAGTwm+#ts;jPRR{;tiM zcb`?&!bdUkY##kHG3l$Z_yZq{C3cciyE-rlCx=V$zz56&Vw5zL&y{;dDb`ayN;z}I zd*T%5O-;HW7W>+LvBX_}Gt4RFaKtFjDQOpJs>r0P#<3?hd*1D6oA27n)!)LtZYu}B zf_(w|EOxWIJ-FspbkH}bt@<-twfdX3Wch8@)AtjrYkJgj3e%74IW(+|lta=!<5Rq* zt73_Jc%8S3M|v;fu77`?$9yYXf(L>JJ^&u@Yu0lrGan@_x`fK-*MMz{`tp^KdgNH0dm@3g+)ta zsXKXH7m?p@@;n+Dx9PowOYlJOzz5d@o>M*_<#STXn|n?vH>EmGu}ZTxVO23Xs_MD1 z*iARY61Uw!EJe-G{r?#q^Do1Deu@Lrv7l$nZ@Z4_LB*h7@;J|9--;#fy&{&}Ig9f_ zdCmG5=;H*mRR!kt7C~D+)PaP#dopm$!T55_b-Sgf4C?XyS>6=Mx=7EP zsf_}Ua7efW4}63@;92E!H<_%;r6p|GSwC8p)x+qVO3E9ta+IKOV^B)w|u!WSGDG zZuiUl-urp}aNpp8;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q z;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q z;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q e;DO+Q;DO+Q;DO+Q;DO+Q;DO+Q;DLX;2mUXkcAf(O diff --git a/test/sys.tar.xz b/test/sys.tar.xz deleted file mode 100644 index 49ee8027b2e1cba42a8312d56de4bb65d4a2d470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165116 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 TF~f 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

ylNCyuY~M#6!2O4!)bC)+ zCoqT$Hp8F3Hqt4ZU8|YCpmJ{Ko%j9@y-#af zmDBK*tdo|cU6|U9X`(RLS3<{Wvql|Lk5A=zzERUf7i?w_*o(zv4B29Ae#WVtm6WT< zZrom>I_J(ya%!x}%frg04G#=5Fcm@-w>aUabBh8@_!>x(fqKx>1g&fI>fn=LORJy# zN8NLy31ZbQ`9Ol`K3>}Gi;&g8@#7DCQhOz4U3udd>!h)f_Xie z!==GvQf1aKh|5MP);ZZ9)9&S|c-~o>-P*F}^kq!HZ8MNh{CYYJKlzp<`axG)87eae zvf4?`nso{y*&@$m=M(_kAkP33fb@VV6rGW9YgLb|%+hiPJN_Sk>dn=L_9;s|`2_su zJjEWU<2$lyJ!A3Ds(TJ!2qh{7iUX-9{?8~5i*SmO?^uW4W!^n@uuEcz=3_9i1i*V+ zf1~+a-KM)r5q3gxc{2#?xjA|rS!>?wUCW2hmD24#Jo@T{pExqrU7(PY_~1FZ&Mo)E z3R96|$ciH;t<)^MMppvez2Ug)?^RuUOYNApc2G*+nR@NvGxlmOob=v0x_VH;JSqQ$ zKeft&ms!#?kUatp9UXQ{vpiK4hAy%~fR*x;cYaJ}{GD~LloGoBZuG#SMV4;IcELIR zp4u0W^1a`SXtuNVV_}@+Cd7M3(;nF&j*2C2-G?ZJ4u(IqKPr{hT~ARULLuC?(5txU zS6mmLEyEoJqS|pX0h1_We{CY*?3d8V_-U^JsWc!sj`7WoI~`qRqv<^Ql4YJQNsr%C zW6X2q5--j=Vt;iKgo2_+<5yAry-c%sPS5sgm!CC^O;j{L>hbf(AH%BTt$Ke7b_jtx zwWLSDNDTE@Ol#)q=*Wzis0r$10<72UA{blQ<0=7|TbVJFk120kP3@^N0*k1Wh&>0L z^iuX7lkv#t5us!ebsaL1j2Rs3-k_&LIHU~BqxX{wWwYsJY3L)zN`^`22zi!{ffgcc zLK9n6k%=QOn~x~p$v2p;@YV+@?wPlr#&_E$DGiz3g#Pw=;UT$?G{tJa83K{B2budo zBNaTzfNe~zO2{>dFLj@l66T8{Pd+tP_h3LkTUkI*i{(DtOo*Z|$>ueTmazC^@?4)4xFr(pez_ewy{larr)l5| zbWHnYPhWZM+BU6v*-*k_%=5tkw0o?T|B+^}avt@;47hXJ*A+yMmio59AWbdefSt#> zK0JlBR)5h|9sSPGTK5Y25SDZn2+~O6MXgkynaG;@>OZ&ciACVLP*;8tZs4AEAZ2FS z)GRk-(0Q*WC+TQFXpe|d48;<70G3|IzSgzd`Mr~ch$gC`oJiI)&hAD}*yg4Y2f+K$ zVr~ltU;4fEYm$upR#dE7o*Np_)<)Ij+=uFf=x6p?wd)3_migZxCOFk(&HYc3xFJhk z>BZfOEY#884GuWD&3ARrAcjOpMstaxSfYnLu`LoH7D37&fy?SLnQd6>ks7!QMp3sY zM?_T_x7Jl}>oS|ezMT=`E~@p4UZ`_edjDk?LQ0RV%P3N(QM~%o_|tOSWBm(hPUYn? zBIZDDEwQv3hM9n++G>`%-|ON_ipOGy<}G=a!|-0#SrKqxST44v)@z*pcR0g|QXTe< zFs3`Az`E0Op(i_=^O_jsUr$3bGXaD-(L0N0Zi`dWQGCXoK&_@k|IgAHz9Uwk-yv8#;Aq|za8=|(jG>14OyHPK={dJ_R2D>TBRGBINiwJ+x zm-MP)uB-Qn_vceemV@0MGCFvSsyp6^;*L#h)YH)I(BhAU=Bn8CQK(39s^dH{jgOmFD(U$9PKUCSq5eJ))bq- zfd~Rxtc`+2wjwImQy{>7k%kQAYx)?xVUTl=AsN^5k8GH;_MJrnaGQ-?y{x55ODSrc zxj#tPb5e9EN~LFu9N--ez-?O%7zOs~`ge3rJ`ZKdfjjExK2w$)lSTJ~lI0 zSpP^>XlV3UNC{?;&4n34#VhJfL9Yv83&+(&`ts+$QA9?5Q-spAoBaBkfws~|a1`S| zsGzbd+Y+Jd}>ogj4p&a>8)0Bd?`*tuD)O>fOZ zqVbMgC0?6z0ufM<(I`N|tZczhFuuU_5JGA0AyC@w5ZI}vw$l5=cKb959-OZjhq-Xi zEOX*3J=rW2PZmq{nJt>)a@94BykWh3>4f6P4%M~V znqeNCd}To+P&+gC7SHI=E>emebBrTsB6Ovw0rG=-3lCC!-wB)k^<-L3{1iseS zVi?~x&gqH~hz>2qICeAu?ecvsZu#V(T=`J)j_Hst4;(u@)V#`N1;e17WabQyGBaYY z2JVi7<^m9{3*-9s18CNX7kwwLy(d5kayRe?`x}J0Tm4@zwXcz6$Zv)n6~)m-HIpd3 z)Vn@XKhGBTxgTqFLb9cDn$@rOar9B>>%uF6{1hEQVb&kj4vyZ6>esr&DP(W%0++X`)n9aDOxsQU$7$JriDch3Mi&19oD-n13!3|3xr)T-g)t0Ma}>U-HGx4gM_W3IyX^x-6T$ELUbsQljvRu`XYdUVQ4;G$D- z5dn+UEN5#~+9XsP$+MCXm7{I#^G2tjS=j&_@^*-q zI5JAiMaK``SX}oZ*3o7rN@s0yV8IEmfCAhrVEJ&QP#e4NT?;#4kL-t3971i^+b%b} z47xP)Uv9eep%fV8P0;rcIO7(aHX394_oX6ry~JApxA+HHNzu*xxvFcDKIAs795?v& zT}|QTP~HJkRyI7bRKsTF+=hzoYOxF;^@d^h*1vg`Zo|1TsEJZ%e2i^dXL^9g?#7L{W8*7yqDL zh+%BgRI^`tstNe9-H$-DP_>2+0R(B?Z&J;K2B9F*@%E-UE~zj!!^oEdST6r`yHgHT zdRWt}wbZ_eFmORW=EF&R+q=)vL~EK~RwP5=x%ec3WC3ozy$ksutRb_w!A>{z6Y4lf z1}L~_kDJKj*pivm*QI=M3y06-A*K?>gMDZxnKgs~^h(P6k?^ufXt(6q)?8YmcG{m~ zdQunqS5_(HB?m%=zqzrcgApjcZT!?*Hp(pgx&H_G6h zSuw&x(HrT2{82`;6WZ(V0Txv=6h*h|qNFsFgjQ#OSidQlVELymgpM*1d^=20m1UfS z_OW3;GCpFYNQ540j`QWGV!pQ(9{1eY%Ls$yqpCeKc7Iu`Btxy!BtSZTpd3#WmAv!v zYWlK;DTN+R8hPHe0%dpczUkB@s2FIMK-t*Fkf9O$-l;0KbhC&WH7A_IB_v)v1k-Q% z9`4_NnF^JAPFRXDYv(s8p#z%gko+(V40Is`y=EXWIq3E@aE}@Z!5*X;ti-qW7%H-z z6(flw$Q)E3Jj0>PIkzD$L@d zbJen&v*3s2MkDuWC9_8gO=4E(RiVeDVq5aqxt{g6qtE=H(AzY0&Lb~;G@CGFL2obbkTZxNE-WyB0&8*`4 zklfSO3S1`XN9iNN`Rh<+JuZs>KZ9b|22<+pW*NGYJ_hpce{8JE!jXGzrYvYSp3YPi z_rja_?$2R17+BEAzJp+yKfLIiv%}xiam1l|Lff( zfgub}Tc|t&v`&f>p_mv6ss#WK>!HwDQ9f)Y9pePLY~b1txSi51taXxRQbCGcbQbf( zcD*N?R`D=nu7%13*o_sGTB%`92d8NlmZ_^D7DF>uxZlRf8$4UBWQ6csJHbxJuBo(W zfUCyFH#Ux`G?rcVN3#&58GrN=Xub>$;ua-KZU8cHPZ0~w0M3pPef*Rfr!m|CFf*AC zHq*Lx-H02s+CdRnvgYy!$bSzyWs@F(+V@Iw7p%!+ee@*VlBA{pdhx?u0$@O%UsBmm z{ce@LP~m-)xZOiElc|2S&O@Q1U%`jHf_EdsrZdl}Y3txb=g%jUnaN(cw3@etG$Zss!p27;vMY-mcQ8SJ@1Uv6+uTb28&9JMR~pnQ zZ`crpK9xBw3qh&w2+{*qepf8V^r9lJVj-?Aw3b?{#D{k*RCZfc(lm_W)qg=aUQ!1% z9t6!yjJcnnMBb;!G1iFHrbI?4l-)Z_318j{Py3!R48x0=;z{;m^0d6=-2k}vc6kAO ziPJN^)%781|Bq;U%};BV&S+h*VH(Rj47?AOmr?W6S|&{~!mXV6IdqadC;sUEx;w)W zM@j>(;@y;HcD6<`vGUYz4bvV3!>i4nKMnGo$+mssvHS{aa%0L97VerY^>1F;GGnkM zeAZ67#ONEZKHnAMd0kB}HSaMq@Z1W%iJF!q4dqcmffLuZi-sz+JD%Z3=}Okk7Y7y= z_oBf)LnP#Mp<(7Q#x~(-H`_f|C_+N$FH(3{+hrS=t;4ksJt#DG^w;nJ`^LO2rj zK`KD53M+`i(6^wmm)x>}y~B&ZysP9sMT!R1%!8W#y2Ov<5=ru$oe`VtJyw&FG{kk{ zUx_V-6G1Av^#azN%qO9nc(eYRpdWQT$iypkNT3OG=_PpsN)R;c<4)MVrzGwUM<9g9 z?4AD&nMn{_Q=zuYVhMf&%-he?A5`W7dj_yYiO5dkYo1Pt_Mv#&N=%1NV!8h)xiDy& z8w~`n(m71Q!H^h!>1g;3)0sx?w#`#!FGXJup}a_CPt&5| z?@As^jGU746j56#aNEB92l(KABq>LG8EEqZQks=`ZGGvpKqe`ZSAU`Ii{W*CzXzi{ zrnd#Q+MBIU$%T`f-V5Y9eY@!wvfvVzwgehzH~ZSxq(%Qdf$$NBT%W1QIruqW8s#2F zM}y4&yi2b;6~%-3F|L#RUwvcT!ux-YSB;XhMML&Y8S~dFas9t@)91oSLVv)AP?)I) zSi~IyuyP%l*V^YHu1DFKn=GBS?R~j00uIFdKCq+}>51J1-DZWh;quN-9ooRE9w{mp zNrRa~3MpEos?^yQ4WfV|b!4-8&tA-<%Y0r+nP^tBKNNZV>nR$|HU}YT8I1JbOT zJ=+U($r~is07F2$zgCu`DljSUqV#?YD7no9r#wds(6Sstasy>+QhxdbJQ<>Bxm^BK z@4|}Nibxeh;LDx7dW53n4zBJ@8<8}k$N@@szWUH1C0Px8f1Cq58Y{3UW_>dnOsUP! zcbB|SfcfV;-~-D!pUlUKd>r0ENs>$acPwcZ>6Ajg6lC&ZLF3@d?mOKfZiN#%{!sL< z^Mi?Lod9S$2B{H`mjooTwuMW6n`+vMuSD|eQR%T(ln_$3JTY;xaF%VNMrLO0mfU^% z`141a7;>_n8UHvm{0U5##`2qaLyW5?QO^^TZrl+3!a4Ll&H%f>4C39}8QnCvIk}7= zyenEYN%qU^E68Kz7De&^Rj(Aif`MOVkY@M*Q5pH)hZPGBvKejp)h_59VS=Eo7RvSn zmb^j#ye&}fynSTCyYrNF(?CvbW%mL2TRr5v0+BBkA=3rcwL#J)Skwo@A2Zec6bM?u z|H4k;XVGDLij6_2I}J*30a&|Q3Yfm*`&!y**PUkb@42^>X;DB)yT9@7dXss1I$;8F zeOk58igm9=bah4hrNI|pA&iU~L=SdX^f-Hk{>&$x3Gzbk2O3^xe0-;(6rqLzB#;9x z3Yr#h@}AQ_mqT>N*nnRsnX?j^B#FWV_)Yiq6g&D$nC+sq*#!wZ?8orZ4CyvAzQno7 z8mb9{h zp(jJZrrAkn3#0Ol#BwbcHFiwm+zm`MmqD(-3jpipQ}R{OObw9_tq;@iW;#$m>W`Mp zD@(up2QU|0l^98BmdiD5J4f%RHMyGjndCO1c`{+~k*$RV)}!e(Mdq>=zj8Pxr!YJI zVx-iWszq&V|FDH#TUH3d)qFO=$>vt9+ZhlQP5AlmNGf+jlQe#^mdf*)QuYs6Sg-de zfb6UQ(&n!)i*js)&FqQw_K)-(Ia}*70RLSO*O&U?MBlRHL1W5>>Up${p|}km(29YR zhV$oIQT*DC56aa~<^GqS1>_(|2FbTF?Tk07pXxwT*9M`~jxymt6nV|)ZG&%ft#C}1 zZ8)(Xfds$rNs33Q4`mmwre$?OOC_#Nw8hlN=d4KjL~!j}FU&=ODusX9yjR?I?s|}d zcL2k~+pqt7_g$A^S#`qMpEw6+S`f1g%-bNbT1AT*4hj>dwz(xgOYluD1aq$!Ifj)= zDqmur2A6|mc36|B5_NFfS=AcJkOKVqJw|Ig0KzVzvOiX^`IOX1k7%hOFb>d4P69np z61=a0s5mdq*DSsQO=^{B3lcQsC8G^kh0<%`{kEsZA~2q}HKsmc#lqMQy4+PdG8djD zd)+Eb{9XdPXGmNQr+b zXKxclzZf9Cp7n@OW;8Y_(c`yzCcQ3yvt z5Wvp73E9{y+L%ot=9=%1(x#f@BiDU_4KhqIK6=g+e@_uIWPmre)C>7qOC4yt@K4LOuEw^#hz4#$AeeWDq3>;*p|26-;WYATK=w&Tv#>HHAz zz3+*lZokEj9;33lt72C( z4zVLRoC`JUTx82X$Q8Iyhbic-(~|c1Y30N;4@Q9*+AaG+g$zIT6EP|Lc-~fMHH}36 zgC$5vv2i7h%T5bV!4GwCNEJkwzu)aAUAj&u06f{yA}4kaeL`pp&ng~S;GBRKkFC-C zxti-%Umi%|EK#wB9+N`CLf>Za@`r_wH(rL^BPd3u4w|7y? zS_`jes-Pd=0xYBhYb(yT ze(~&i(DXHuVtbzFyvaZ!jQ@<}$lDJ1nB0(9Mu(7hKF$b?J1Ro2{?^19Lkq?2qa(fM z5t4)_-j?oArZyJea&LU-Rma~J*5KJ7_me5Vbdr=>%Q1){z8YtBGIU#N(slLjqH z$C9{dEENir5KEd^p9q_;tB#$8ZJZa!g*`V}T-O?^U8g~gvy^@sWvhvSog;?Pwf=Wd zQ`O&*J!CkQN9iXNSDl+P5}gm!>KQ7Z>FAAtD!>@xLHr9bpUVp`$`*#xVr-y;_zKL9iWJ*C0D~Kh>2=zPP z**BdGf`(fd1pCg+;?Xy@ds#vP1(l%$n~#|XI+k(~M1Y;DF=zQu*J~g65tufZf=F`C zxFQnSE&TN+#w;+pi5W$qFS;$b3b89^UbBLH5xodTf zm2;pgh|n{NjTo3t`gn`jkYJg;af`eN1{`o|3!vwBsQW>zf}M@H3~c?j{`dAwPjFhQ zz_$J(wa%9Im`2wbBRhQ^o%~b6%aGckO)FZQ}TtDk>POAn%t>&u}gDuNz z+tFso{BS`5UMv7VlIBBQokVa9=*brUV~XZIw7LesG_|s{{uW~>WFQA$$Idbo$+7l{ zs#abKftSloF=vqAAS4qR8Grf-+gkldkDXQ?eO~^@J2lPRO-@m^zAcnX>z@|R3%{YQ zX|mMFGvnf!klZk|r85QDkqUKwq3xy-mcn)G87=YStVID@T|zd=JLWF*yrgrjO>Lhv z;6uo4%3qjPox9{?tTLbF76nMZU#U79ENzkW;F~|w z3v{eWb2U>eMPBi!x(n2(J))OUB94Ri5N|(qUv;1xV%fGw1a>+vgJ@3FT6yGoQEDaT z%g(y(PE-=9QeOafV@&BtHri1YIC0rWu7iP`5$$H0;k*!QzAE&-anH8U^>5K{*azGw z;j_pZyQXL={8WPffoc{|htHNXi?0iNSss9a0nXeQMmG|_u-*W=OglT-n3;&qRq5D_ zrU$pZjer`?XaKh~x8}*cy;m2t*KbjumiSb%RHo9Q2}!bUawM@kNlid#%(lU0ad^m5 zew+4|`5E*Z=>AGD=tV))Wmz6&=a7Cz5!eV=Sl(kx98Hns!K0M`@UGEo&yt|nbI0a( z&8{C{>bgq`WE}asI_*5sU6?1FckRd;88l#;C&m((!omoUM-)4fzq+vXQdZc%R>T1} z3H}&#O8e0@Nzo}td(n0JuRBB3?9()^&(qqj{Ar?5-w2g*?0?^EKbx87udpf-nFRK` zl*pV1csrq1ydOr|Q5 z1}WemV-(E+Av8g%+%|9h({UM~mN41Oq#PYmoD~VR@V_?rWnjz;Udai&-hdCobuRkEmL@*-DvUXg z`H65Myw#Lfk6gsrk0;R}6>7r7|D$Z0{e?(MI*foDjnvP8_wf2KpIQ=}MnUfs;u&(<1+lSFN9mk0nFESl z&4W56etuDyoT$ml4rTH{{1Xdyo*nKG=Kh~bc{Bu*l?Rv5CSV7GZy^kXWnfU0YD2)f zE4!A(!sv|;(*9@xNj`6X4Qog?R`<--fS>ZWO!I?wmtMxKP{RZU!A!omPitS<<0*HJ$eqfu}^>zGT1c~y=k*o)s3z!YL1U-9 zoluvQ4`o?5vwY9J{S>UU(t2P!$g@Y#xj>Z{N)eNzGVE)c)SvwA6CW>)OXfa-ppn1+T zBl`M1tVM_`*M?7olg9JBe|EG7$%BN1c8O^Ph2KG0A^i8HtSGkOyTi}#EInqmW3c{q zud*?fQg&X5)Uw?3UDHA~*C8a!o&yxFfub9Zgvm5GLPA0=huIPNmvGgY_Xj<=p(PGb zyR+ou^jxCv-La}ntGO2cg(fEa6CQ}^ zOxp*I(vBBCylP@Gdj8Bzr;pGwgt-xmRLhLlkgkI)+=PLBxl@MeF8`Rd;M;Ewv$+0E zGX4@*RqL5|j!cNU)HBp?pwd&vBftDFCzLGc>_H~__Fb$T>;PzRK-Q>^ND9uMrT&TT z6Vxd|5u9oCvn7EBmC*eEmbwPV*j=FRZ9^dsSo9#SSJR0=UyR3V)brhjq zghxXAGhWFf-OA&X&zUQ#v<6DR%9Ae4H*~O?QwyB1NN;s5`4So?N0MBalh)ol$>^_+ zO7S5vcwWKy`n7Ji$MMd4lT^OcQFNV2IVHg( zT@yCMwa~k{|7n|}hd^_+5z*Z|3^ob1-sI_TDepBeL)q z9N^s?J>Qb2HJQz}sD<{w0$bPko%3V^@;1Y#1p&T#rG_pVc!#2w+1O{el0kMfmGpyei&iG%L4n>Q~sWdoWEQ(8VqAQDS1!uZUYq~cH^JkSZ zSn*X6JsYx&YS(pY=JQ7q8D8Ibqn2m{rb`NtJ5J)CgoQ>Rj2q@;GDf^m^djGzZR z))5W7e5hN&YO*)?UZFC5B`T3~Lr4o7_W2trk*KkeMH4wH>fa7Ks=_)>#s=cYvlybx z19tcxOLqKNrFl=io}am_a{%tdjX{8_;zt5D+>x9uJEzVTHXlMUh!)#D{q9I6CT(|t zHA+0s@Z4GTA&Iq=RGE)%WEL_uhe3h+NhCt=rOw4*lkRe!69mzu<$e?QawW_v!irQFJ+<3~40Q3b`WxB2aCwPia)=n#*nLsBC?@e>)VfYlZS1@J!W0DEB*>you{85Z{^Ah)U02D)7 z@sEyO225}aIuzyfb|SsCGf!f8AhCrTBCKXvKO5Gs{)f>}{o2YNLUx}hJv4sj&3vs# z7sO}F4x&UMZpZs7n;IQuQV+_sTL=Crw=e7`xr+P%y&EF4_bv`4#gfN$c%7oCH0PO!}w3&+Jn3Iur9~QF+ z)h0Tqcyo?UaJ@Pc1hYVh|BzJAliBNfi%%LVJ9n#6+}Pk@Tne$}T>Ow;oI=s$QDx#s zY4_|)Y)QJ_2L%r4_w~i^ZZ3WAz>KD--04fk0lJ?W@=_axq>3yyI!)hMBe)F5bM=CF zAvaCX6z8$ful-e~YVzBbh!TjE8WbJzLChTt4PY=JfNN|!i+u%5UBJdqaG*9y6~L9L z9VF~a?Rc~Ya^F4F^Tc+1L1P1TJhu9qubT@46NwaS3-BBk|4p`HYXtXvW9nt#AL`1Gn;h~ z$;2E}Y_LeM+8L-2FAdy(n2;CRV zSm4!8XN$m}>&Pmt-+cj-WcxstSnp(7mX$nk#Y?=`Q9-E@U%m*~>kleSH&SX25(XaBdcHg#)tO;5bUG_$mBzr;F2o_4tsq(i zpofb2A6;6RQ5lL4k$PSNV`bdtsJ}Y zzah<85@duJ$S0W{26rKuLwYPPl}UKXE+Lu)^VU7Q#LB8EZL+*K^I!FbH7#*nhL_4E zK0&GPVIzh3=XUmQ{^0g;cXiO`9|S>tm}pp*f#fX#$(}j`l7fjeC9|B$zY@KxA1zM; z!k*wC?O>iT=O`I_y~RO@EWVdj;FN1Df9xar^y*NEo+Q0DHOub9*#)UxL10U1qO|Rm zV4VsG0t>$NKu>U)$@0xruOIMW50Xo4U%iSyr@yN=doDWK545wu>Uj_9P|rM2&SO6K zi7_>6ODtHSUO?BY&ml8zH?V+lBt>pO@J1*N-KHxVUo&3ur=X@-Ae`6dl4%W;Azn!$L({cLs+ z0jpa#h~THQ+($u^;ZOqv2^a@@pC(lA%kHihg4SG``}mA2V_ch07)dlmnGuy|deWUkSQhU{L*>bd+Yj-rO>JQm zsOE2eAxjNF@ag2f+=x)H^ePb3rjr%0h zw|~bQN2NTBpr*;tn6udSxLWWmmF^p(n$l$fTpXaWX2aIJaO#Ni(M}b}%766%B~<0A zVP0SzfhiaG-O>N4TsG!+iYF|3;`1uYMC7_Z+qZ{=1%oL=Ib%W~(Qy+u_Gc**viA3@>YnLc)O_%j)$5aRXv$hg zTw*JibjHB5!^2ikZy*kPeZCzRK2D^HF?x#uCe9}0w$`H!Y^Xo{*Ckwe4d zAXGwS>A42n6Z=&Jkq*OUyKfmV+{yobwHm-EJ%ZRm`V5R&~RZ zG}d@C(23HPwvpynx&|2O_VQ)qEqS2mmsA@|C!LYI>hG1xfx1m2wl_PgsbRbx4*%c1 z)|Iy2E%`qC{5PpU6@E}tgz(&^^AW59Z@m2734e2TbpD8EuM+RA!rmE7h# z;z($gY7ihWzCgoBZ~7sc^c6dOLHEMjec)F3DKRY=7}OsKzIB|~>*7zJXu9MhJF!xJcR$&$2>AXzm{=TuS-&9tmc#>J zU958}r{!~kOP^K(+zsP}HgAP}0rok9V1{5hl9d!N$jL#+&z+nckew}a1~B}Hv;UM6 zQ|vcRFW2q>b$ioFiVRQ}uany_*@AlRVgS}m=#Tz9MDyF{TOHI}xf6i&M3~Y=9)sEz zUmG9OQTW#vCVLl3Vg-d=bY!VCj6N7iQ~ntlDWYg0hK+G;ih$i3HY)Iz!ej z$INn1W?(U5@{i6rAg@gpvrWuf7GFi#F3b#8>o+Z>=ataJ+t zx{YXY)PN)u9)W1?`(Vwb1nJ0>H6e-3)5ro7I>P3VQGmM|4w^?~O!3xkAfJ5eoRt3# z9NSy?(sJ{%9fka^1owN>`SXs^c-Ow8*z>1tT#A0F?4_fBQd`E}xK`U!2edyNrUsD# zuYDfKt8lqb0Sz&CJG3~dam`)pT@56)2Hk8p;~~bZ3PE|loIGN~Ri6NXL!wI@@Ih;% zqx2H=?gO+>L)RA9v@6WH@*!qs0KC%OVfGOP)nm(kd&=yPum!dI5`PN9Knmv_bCjaY zp7MSd2+u$C&*+lXRmj90^8{7RP+f8zf1ibCx@*9+RI=ag9Q_Jz_+LX}2JG%Njf%9xh_7!8AJEDsZSGP2H17yKq`}>1}a8up=cqr;3DxxaN^4=(4g@ z9yB;NcygTpqGmLyfa)Is6Z2@%GeYpEsb`b#JIHQl0~{hnQ_uXDgC0n)dvk=HPP)l! zF{=65xgWO38IEgmqBlCYVL|oP7_7lO0TYWA3T>gTCcokci+j8MS*LU8P(+|$I&Y4^ zhd&Nofn?VKsS=bgMjAQh2PlAy1BhI#yx^A~r3ZZEUWnF>a<^6@gJVK;bAC0iN9rpK zhf^m!s>2G7>u{`}q=SoL>#gaPFO*|4EaBl4%u{Wn!!)M=Ji?owe1UTTEjomJS=uo) z)5vk=3Xu!}q}g!i-N%NI;L|-j6h|Vr0uKs)SKM_rri<`au;M3(C)S@YFe(&x@%xtB zibkGlMwBf5Y_+)Y72J9&2|Z5F%*;Sv3zBH!Ex<-CCf(-9w*mt*q^f*=tYjI95B$cw zJHXVUW=XYp($f@~d_X7A&7){h7CVp`-Ti0j)g>+Fyx!Rh4x`%TL(5RvvyoA`dG zF8Q%um!MX?Tp|Ui=%(7E^CIQnLZgk5oeD4rAtI=x`qI1E;7>wJU5hkPEjAf8-apQEEWS_AmZ+87D?s*D=hdMjluM?t43Q@!Btqn@~HVLCH$;0;s z6Ay1ZS$!LB?DmkeN2?k3q0=wM@y`ACnLQVjz8TDG8S&;f6Z)j~5V7qxj$NjXKx`jZ zbnJeri9*1P8$M(UKjWiRUUzFKQoCdx(sdHQV`7 z)3W~cT@ZIj9@rmzT2o@h9yyO8so>kfSV}DZRPqygK|FlXgGG}H0x8hE3$^n1+1H8l zJhAJDo9Qw*nB_$^Ij?Qcf2>EB>_{qltFA+RrCU^2Z)EM`3C8k)j}FhVm&>@zvwr3ucGdWk1Ono#>#YX*)Njj<0u{xF`YT9T!eo~2MGbI0pSKJ41cJ`= zF_syV<+xR_kn1|B>9g@Xx|31m*f>1KwIHxSCWt{*mX0%k{a`tfiG`Upk}swgHny}k zq$h8nvf?NsA?o~2X`uhR$BOAgW*WE}Q=IYq&*RJaG>5<009bwhQ00wwK6+f8#8`}9 z!lgZ|$!`%lQWf8LaB8kr@z?K40}-LM4M6f;KpG*C71Y?r^1AX=!cMCuO3?@{cOI&J zvtUeCKkAn)^HRJtN6u>02Ic-~v9*=twI#UmW)xd-tMc|o50H*OoBIM;Xpj5MxsK6w z5KYojE=|BdbC|)4sT6g2m!6zEd7D&`61bAihgSE$tMUr``XDg1=KVH~vJ0)#6%u^W zgl~UZJ##?W#FfI#e3YU3sh}`sybi?c;A!T-zhNYy?@foSsWtv##p80wGDWTf;x7Xq zbS&<@5gGv?8F>?B$ao0z$P?=^+=;G@X*TNW@1YwD-aSa^9axr3) z@B0fQkVng`^Zl<|G1g|z&>IVrB^7M1h?k7>w1XO{1Rn#gA9>S!Ip z3VH&MBC}$u+COH(og}S%H)be+(yO>`4~}^ieLlcTivWMjuN& zGSxZMktn;|#{@6HNw!7Na{5mZ9het{9o+Q-|2{XEiW|3hloJt1F`I-Ma~VEAe3xE0 zPAv213RP4tj3lB`oLApnCC#y6IdB84S>XY(^^|j!+tIk9!xqkzsCF&!&g8-U$QxHw zO{E!V;7zpEuf96Tk!SEhz$=4Wsb`c+?FA|0zd(X0(6CU`=jVEMM9fq_%qS&DHG`#e zvv4i#m01%A#a#&ak(6#f2ElC~HpE-Xje`RsYbP<$zOJsTcz4SouBCWZ-n1arkoT;5 z)$B(V26bd%op&rhHoHc|F7ICK%G57&H|0XCX2*=(RCu*WoPd4~cnRC60lTCD01Gpa(sjdR zT)t&5fCk(<e#DDF%xTD4nKgj1{ zzwb1M`|A1Ab)@+yA>cbv0~A%=Y!I<%#$+#ZsoayYXHZKdqXe`yO_{1-VM5-9xfitt zBQ+<-z-w}?0zfWs)gM+J;tD6B1yk$A?dOGd%o?6Wb@baw#C%L@S97)*bKWv(z&j3Q zLAnLbBeYJBXgaQ?vM=cRq+#mBT;32wD$zwKH&W9y+4WEEFl3BZbqR3Ta&AQEm(M%N zWm$aG8&`9{66F%$AgwX9JVX69(~E59rF{%Lur`Ccf73?}mPuSD%VE4-HI|JQ#TLQc zNU$;wFQETk{6ojKTg$a~rMvEnwWP?%LyXyRV#3ZPe(7Ss4$f99F;w$rV6}M%*0ydm+@d*~9k!L5$06@5 z7u!#PE!Z#wr_2@!hnx-D$>N@_s#0BVv+iMV)wI_xI@?QNM`Y4ZZfQs&XTmwjp20gv z3P3|{iV+EjssDnq-90TFv;Fu8S*3m@6^$Ho-s}Mr{_I@lx$lUhO62u<+9M&Cr~G1# ztr&fWzd8`4_hPY5R%gL7ztYOZ321H7&RhBtG-W_^tgHKE@%%sR&j+Yf_TesSm_A_~ zv1fdzZ8b2d{5JQgRw8AQ^Lq-wq$Km1s}6)PGUrfSQR@6eSWF?(kX(TZ0=ODy`^dH< zyBj1kdiP8tZ$Hf~3;Y-56mqpM!zqR9upL_@9dPNsz+LP?jm5{9S5DjidndSXca-IA ziGoiXx-cp)xF~?6Pax1LtIGPbV1-6t(>ps987dY1|5-6=2cYVUM~R|Nrg1wyI7vgN zVfDA{i0|?Xz%P(hVsiWhVwAe4_(Th0EGxWf0G`1pfU+r-5R?LQt^Fi=vvyP}Gvl&jQ(b z+!p@7BAY?B;ZL9d7vybYU|R0*5labha3qe0d2?yP!rd*VYOwQT44{f&zh!AGzax)f zJb~m@DtuY~abm}zjZjw!F$W`ku66#RQw%?pu)h>Lkiy8>Xp{wKPhVmCnZZC#k`2O!k^UB$UtHLAW9z&fb*fHXK zr2ss=@S+;X?^K^%h=Aw`Oi~w4@Y!S2KDz*cFprS{oZOM%O({=Bwfh(kbCW7+hOokdZl-B~W;6o~S*3qSk;32RIhna8FQ&{0r&CJ_Y2w zj=54%zx{LwEfHeUh`495~u**GT@Hd!u!@ z&BaBA#Z}A7c~$iyFJYJJvQ&S+r0nMQcH@lg?2b(q>v|_*0y3p^1*7&XD{#91JjLDO zukZAyYm~b^wj@Ue8Ld2qVREmEyY-EBL*Yu39(fS(LJoJ82DDp%*W5%f&hOr+-U`3Ua17$zk3TGv9CDhgx4Y1Xiz~an zt>BYw*j<#IVKO2X;>ZGkB%>s?YJG1~OnmQf@L0H-2ym)!IzdF39ck^>XyZWLWhwtM z;5`0o+)4To{2q3SBb#Y!q?!fR1SOd0uwKw_fmT`eb+UFsd+LYpsq^)n8y+lk+|Lw+ zq~c33P?$o+jna+%jSVjkN#)e}i#u!yLQG{r`;VT`O>FGZ&klif0abuNx)vr9IifD- zK!o3)4WO*t*EkoFO`NR8vPuuB?1p{1&T(joS%f1<@eLfpC7g+X*!*RC$vRocuWlqA_@sCP+LHn2zRO z%3jxi;~D~cyYQ(D^~+A|q?k`PJ)0&qe9`({_PWw>o_NWSzh+a`A%SJ%S()Fq5+x_{ ztu?R23Loa=J&E_lL*FHQhkE^PcK!?A8ZjJI6BAT>FT%$min|)QMH_L z7?MC@E)9xaNP+)^SD!4-t9Vhae`6+P*k#x_W8VL_3x`5Tyl?qukIP?t$%jdOG5~`l zxvYZ^!4`8*i_v8<>j++5L{*u64fJkHf%I* zt3uAv9O`!R;#}Kc&Oxu=@biU;+;9OV=J^X~ebTPyhiCpVf2(DhpEtcIL1xjSckG&i zt<>fPKcrKT0%?5AUxNUky^_P%Q})|K{=n&LVlv$M(~h57eJtSo32`?$p zZx}TN`D^KUGHJQQX@JaXz(tHqwtM~`3Cy5j#hp-{%{|aVnh%J*_w6ya(gq$~dC_a@ zNL0_{RROuP{b5Q%@a|NVsYDjdw4QtwZuGM8^r^6H)lHEyY@0S2hw*O*Y5bSR-v=~% ziZlACScGII?VHNOz3kaqR~u!S&&&mq>}B6C20W4l#kF1S1Ek0AoH2{Cf7_EjBPk8+ z6${7Q{?m8ko&(o+8s;L0<7wIvUvp#bv@hOMJ1$TPsY0TU(D6!NC)49zOL2z48WhyY zrITSPE#PCF&~pw|gq23#^1nMkBn7Fz(t04UJL&fg)7)_^vUm=?9?;p7f~vM8uL!dA z-W-=Vp4JjR zm5agzD=?uVQmJ@YCr)#A+ybkokFWloLD~OtQp@3RxGq&t4EqIFO6i=n<94TSvZCIW zu2SZu-L25dPHZ?@gUPLI->=a^gq3gD8luT^Jy?ZH=bsJh!3>pC_91R9QEaHM?o_E4 zXcPzHG)Y^q=dVJP#9DkNcK`w;E@mO}xx!T@XrsvAiq(fe)zZCa6;Y3xYqVMTc3tJ> z8W6aJwFOh_*955e?B4sX6siBMMFazJ7+S+m^7}Xx)l(i?tj?ll*8pbJsE+MW#(TN% z1-JD%C68`CovIZ|YnTlBm2U0+{i9M!9LXd1043^pXX%2XG!ZaIgF_pYQT_p8KID15dw26f?kQZ1LwXTg!`IpX zIj~~fdR6zs;kf1hkAjJ{;Um+8^Q=fB%DB|Vb8X-OJ%+8xQKbFQPei=>+@}%r0XNE^ zDm!m|JH6qlyZJYN!spT-QnHX3BoV-az7Wk*!tUH`&xo2IL!09p9-&G`T54j2cE1I@ zUz3=ZzvHzcmBdr&3D;huZMd`sYuFcpz(s$A@3Qlirh^G0f3C~#{}|<80-p9Lw_8HE z-uxjEZONwVSKvn%m7@gh0KDzfF_UgEDvq`y z=r#GJ`OP#@yjLHR{JqDV!o@xAMnsc}q{ML!-#_Yp;eSNON3GSGq{uZWXw+zm&kAB+ zD9uvsu1ShHDcM#I`@tBr!U9p4Z8fq%Qgh40EVXYG*hw~t7j;OHL4^`_N)wC%ltf=j zZy7x2ub+Yh=nYD6x#QQ*JD@N>dw)ml`#(!XvJbez>Jp8=gboh~+q^P)^eNbo{x_5E zJm&_o0aQoa=l9pmzKINcSv+F*s+b?k2me5?ft)u}O=sY&c7{j=*8#fIlPMcFS} zxX{pqzWIK?%O2~G&6l%OQz*@t*rm;GaHUorr%J#wS0xF=a}sJ%eR{!I;yEhU5_Dm6 z%t_T+SA|q0$CpIh#&ZkdA?jJKYl0UZU#;7?L;D*pmVb(51lQ_Fw)3@akEYyjD_nX7 zvHHg%u3GpYoTXqr8v1JSPR@^DenMXox8MCb{yVj#94~#e`Ew4O*Q|f{OOv(Epql(v zKY9F&v?+4?>srR2(BFwOv~Cfe~;T<&s|g^!{#bgN`FMX5n651 zZWLBv!jQLLuXRe;J5qws(l^#a33YUMOQL!l`2I?X!m;ZfO698f;Y8xOc5K$_kK~zZ z?ZG@WDiO(H1oR@yyq?^vq~&iLOnA z3aKPsT?T@T>xOIPP0kDeJ^zG(0Ln^DpDK7UVT5uKAj~JBAruPk?9p~QCd#|zNKt!TXK2T`#s)&4z_P!qB zf+sa`G79{xLYLcQ0S<5B_{?dM4ajXMOWgivI;Ogdb{?vfC#doLN6QDbg9YG=N9uK1 z{#9C(%BoV-#YZ=Ho2lxzK517H(2ls@MleAYw(qVp+FOq0I{MLOqFH)?-Ilc=;>ezS z6;2QcA=&I?&;)sNb=Jf33dk8?`-$?zWy5jwdsfo7g;QUR8@U4LJP`06CA-Yp|x!`^EnZbWe_-%3cGH@)n2TS#LYp)Hn zrKKZOwdrWt6iY}j@1cx!$e|LH&n!R_Mogh;U&Y$W zS}Q(bqNG(S{_eE+fxA8}{dHxzqS`y>VNEWl-s_NV|ITVB3HpCke4iK2@qAQqd*d?C z4pR2vAk8(K-0Uou48{_My}oU_Cmp9aA&q*g!4lVpGwXhFOrKIEjY0swRVKVLL*kXb3S>% z@}{MX>iducg{EeOlyOK7Hl>82(b(oxQ7m4lRr-SF94|H`IP`_Bktt@>N-;ovC(e#R zP4q0#Bq-STzjYqdNa9hF9F+jHuYoAgs5?5Hlop-FHDK_xRBAl>jWVK(x}7xzJE(b7er$jLZocMOC-Hyo;uI_vKwZL6N$ZM~iYau$0$rrZdFd zu0nOWhdA!zH4jH>*DLR{zwd&5UXOH!+O{wEi26;bh=SJ-Yc3#uV5=Qmo*UC2lX|(l zAA#T5*O~fuQX0Zf+;g$4HFk*ghKwMdx&#-Y^#-C*n+|QniTZ~pNM(g$O5@jrG9oV` z%WY=G8LTL6)RRl(`_qpHgAVVMUGe{5PZr-rdww-F!^Td06&BLUz$RQaHhjfRholm2 zr1;-|NeIv1zmX~&TfbF6E3Y473X|}Vk!LnAkmEPSo!P?V!82ogTxyN|+5+&G4J6ft zy(g$^s+NJTAtQaKLMj1?!ON>C?`AgqY6}NL8GF3g~Ej zL1Lk3QimEhXY&qZB_D~6YzDRft8y9M}2)e%@uR*pNq-xZg$rg}!;aCW_@$p(C6 zW7I-?hWoD1;j^$;Nosj8QgMGqlHN3mh|os0@~Tf3UIPfF$YdTeN-&hpVE!j=V0%>| zQB@j&JpZWvRqvJVB@%jmZyf4H_T?OrFEYp8^_26{#pv+C7-(X0uFRC;(w`yN4arP0PI8|qWRgsQe}F_?*H%Z~7996jZ|e<37b*?kKu++=hF`y0Bx{#^K>GjZuaWAX zHR^T0YZn&!8VBnI0bHPS71D-HR<6)tcf^{v23`k42N(aF735irI{ z-Q}+A#sRs_sGOWOb)1jBO*jD*Wg=6)dyxI6J7{Xq06jp$zw08QEClf zOinFvj>3#O$fK;yL5wCSr7#M%+Sr`rImai)ywO~C}vzcwn+jsY90n~2bWVr%gP57}4KhI<0M5Qgn+73&FzPwPOWB^tCbTX(Q_{IY;9%tz zvZ;XTaWFcPTYBe?#~O0(OP>JTHYoos_v_&4O*)KX6`Um0SoHrNz?sI8%s-KG?o&Rs zc253uM&OflDIv_*AcAwtoF@^i>8;yWM@{o@naKR^gEx!(b02{-8gQNcapD? z=1fn^eJ+{AHpir)&aF!8s3*I?K_QhDfHt8vl=r!-g{bD=F_E9_3D#$sg$=zUyzuvy z`NPC#*S}nEwa&|pu@>}kjN46DGaRbxtinf7In4p?4`xw{s&|8MSH?LjH=CjPHi-Uu z9U%jc^js_HC4;&Hm<-aUCxY`e1GfVzmTa&6lmTb}86<~#tZlKagPu@e?6yP+YzbwVhkl(Z|sLd5cn&JrmO`U-)uD!?+YH@33dw35vVNjZa1n0d;3Gu zZXx!(Bq^nYb)20?GnHp92p3U|%ZW)Xyr0L|xA&jeDF+x$fDeb4GfETS4(#-=)f=xH z!N7gh`Zlxs(aTra+e!d*FLO(oO_t&1k<;IYIhi@pI%$_9^l7}3aJ(R*{_JJ?Qh-U% zSj7j!>R?%!$_Q8pqX|wBaD0TU3C%W>*d=Y8@pgEhpBTX63O7hEXQUZ3i!0N$rb)q$&Z5HgANir4tAyb{O+sR-I=d|8>-8vconBNl8A`QA}f2l-3giwitLW$^JzyXdJGqyXknB=0V zmp5|x2#fsRo~S9v9Uw+3Dac|3q%ny%QqeghlWiWARWe`bCXU-8eCF!>;Md1GxMfUl z*Q1W+?AX_=Pe+FqTXp2h1p2@D2;r9prfL0o~@+o4hs_SII?TDU~QGzGqxu>M^L2y$N_T8 zq!EFDgt*^NN$zW1RbG^*{IAZ!$a|lgq-mspP*A}}YeKi(07uT|jqsUnLQmJSp0U89 z7|P;whJ(W7(NVu$A>P>`QBjJQ(i2x$>N1jd3}cWl_4Ip7KS|XOVisxvj^J-KI!75O zomaOsR@4j1?Zm$YF>q9wkl>`t#2*tBF^m?F4agL-<*}fYvXZ#Ye(NY8*pg6{$0+-^ z-|X!t3islHd-!tR0GV(xwIM;Q-L$*#x9U|!Am6YwdJ;QV9|lJ#dkk2pRL>*gYZL^SYMkd7T;k< z?#cN(AyjI@dCO!YAPDi@$c-_BiY#>7u1O9B1h!i4N7)wD7xymS#V+`ogc~>X!n)Ky z1>j3H$Mbs5EX5fUHHqk1jJ`8$?d|JnXneROI#jd(seSg7X3#I3gTEEx_N%=mZ;Dk3 zfWdb^Uf|j4X|}j=kiR-~K4VdX^%8A~@p4;i>)PQr?$SyxEs1g1*~r^mby2T8&#AOb zxd9RlUgFW&$R@1>%g*@?ca1}J`B-7XCo%7CRku@;O1eFX?art;@C#?ywb+pY`i}?E zQ#_D@gA3m6uFf1s7%s!Aa5q>(DG9wrffE(n%4=6SW((q%D?4nOX-%dFFIaW)*E{^C z2kWXfLAeLW>D5#r%(q=oGXRRk>qD|XWE_s&-^Yy)&Ki5yb#$P|6<}sk*J)Uak_R(Y zTIz*Ws;jX*H7}a@ADrf-%WSvC-5j!s#|R7x@H3EnB0_^K3Xu} zELgX`|MXUHTV$gErs;mtD-nJV^+8roj*F?{rg?Tz*5qYkQsM-lCt%}%@<@?&=Nt(BmbwnN(xSSDbK0)Qy}n?vEC zvqOyTF&$k+?#~UKVK9-*@2Bj&tn@qb-*`wjDIydRx>khFb7GM8NZ7P{Yfv&$%*^-^ z)k|qerz?krq2=)rKjV|Xevsgbm95kn=GLg)9|}OsjbUg%B#WG%(?GnlF9NcGnj&tX zzb-CMEfO_dlmzu(tNM|76 z88%bjV~cfwhRxnVS(nPYl_Du^3@GbQ}rvNu^f)@p0DPJ5cfVEtY%G zQwT1ppo5^82^#Alf5p6DdZ+SrEHo!Pd-tBwQESqn@rrrdp~ie{++Gbdx3_%Jm0zYC z04!01GVnsi2gCg9uO1qm`insm4hG3C@fH5COV^K}bNya1662%SIy}RHP0G7=PjE9W z0RV1q7}IRkO73;COUw~ykLi}33z&Nh+vQ%Ww=LNgu|~>W`30lJy0VzUpeIV@G(jP- zVMPjT<2?tZH8N8>UL1awd15ta<$-(P=ziWd5x38<#5sKgFpU3LHRY4b;vh zVP{7(+L>P;U9@~Q20BZ#fQBV>#?* zFh#RuzT>QG#z%8xK9&SM^bYb(a2UIVc3X1S+To0f@%T~2gc5P*+=C)SnU2@%SGJnS zi?rSu0g?D7ah))cP=V`rE1Ue+K>xBja#QmcQ2qaARTJ<5N8>nU$A z+P&LAWhqclPl}rn%OTkj+Iemwtx*EtWiYmvfWgI7cYp?$_%BP$R?<(OvZPzG(GO*R z#GcR%N7iGWBHp6X>SISm_A1-Wg-(tOd)lbg($~w!IKp{6a58TqeExUw&~~rdYHH6* zMt@YpQT_Fu(XiUdwuyQH-?|t0*Y>PE2MT_`PvY5E$p#%CQv&O+sKL^dVL`?n*@=Rk zVlm&0!kl!V9k3?~tdI^Ug5MD>Z}VCL-{Czsn8VyLRF1TNq()l@_HpRmG1{-ND0}O9 zxI4z;S>)2>!}27Omvfyv^b|mRC%3QruK(J)8`iBi!n>KA1#>0%N~>YbTo>U;#nj0F z%?cp>9A&iQ%~nQVhBo zGex!!vR@zQL|J#gF~nZ|brN(%{6xQz=(d?j+RF3?3jcX<+^1v;svTGTs4fdboeXMrAaPoO631+Yd^LjhAE#vF@C`oG z9w(s%XYAw181+<&R-Wb7GO%rxfmCsjBP{{u|WK;g&ej5Z|nB0|O6aOr2 zh_Pth^UqaVoLO{b#7jad!6)wy@NyVyLm^Yfj#39wMgl(Hjx71`eJc3!=@R^0JD$*( zM0?eybCT4c0X-;lk3Gbu>|xK<4I#(UOXmNeky&Oq<9XP}%(l!-#)hj7 zg72iy=m3((*jFs|!;?fC4+-82a1rOBtNiEHr4dX%bSH^|DiXcqYt<@y&u|Y zGewYW!GGIO*XaE3q`c!^(5k9%E`JCUp9+^Lex7|i+qOl%qfb0+O5zv#pXl2cb zhfIoR?c8DObzWCNwkDWLDCF!;5%bLR8#_CR^})tnTdo|Uyn+q?Rb@Ze!3%6gVm7~A zcJd!Bn?>-?0vFJijHb(})XDvC;_3i7uI&gvecD@F-7*@0Tes290n%fjm|m%ZTgg?7 zZyyhB+bGWRC%KV!5%#x8X=yfj%TYj1eXJGP6r#>p5FMvsF<3}Des0w;0LBCNbQH5F zNesNq$er%7$=M0ERcr}Gf4D{hAnf8cBe*T3BHl%rHW+4pM*$26Uv?{cXF8wqBgjMN zCsWf_tD4l9UC_oA5U5!u1%b;Yb^mqZGgFgeKK&B)R^MfDr)f0+@}ta9Q#0ISxxz$y10 zp0K1Br8XwyO#De!RgB;PR;&up^n0n{gPm01S8m_H53u2;c_#LTO>#7(>qcf$*(C%s z+<4Z>0O%P;iN>d2_+T2ESU{f(zu&Lw61kLPG#Np*ssZ3 zoSlBVPk^1@D>c?$5F3C8f8?8$F4@%ho^q{Jis<_=96>FD3@e=s_9y* z=NBmAoAnhQ>mWYCR5WB3RvNXd3;0`iSMhACbX0)4@nc{*XGA>5u;ORMt50B)+f3*I zl+DJ?m)cD}Y>sm^>m+z@V=UYTk_e4$TzP2+q!bp_f}0npeBdJTz5B(#zBqKw?SqyZ zCopX&!(pO+434dSX#lXE&GRfK9zo)MK`N~lP`|Vi zEFNlZOF`q%Fsw~0+(i}?#dJCZNjAxI7f)m7t#*^hgo0W>Zo-tL5ZzEW)}7@8$q}L~ zH4Igvn8Ou;3BtFtm{p518EShR6`e2!+-!j4!wWpLCZqKX#mZ11&P|M>#^*W&lKA z{KDs4u1(%r5ru9KJ)^y;pc)-tB9!g@J>5;%)}`Vz57fJt@?7}BT^iH~sRzt^;g;B@ zFiH~dNPa-8Fcp7WdIcvz@3VK##~zf?U*R9rHal7sk@TtkM=#fd7|b?npx5yJOwP5F z8L<@^b#a4OA~N=Z3$zd%9gLH7?Q8=v&MGN6c?5V0)y{nzAY-y4>URf2r0JzhgKrd3 zj*c%Da zP0(GZFtdPv>@jC>i&|ATrLb|ZPwZ(rM4{qsyGY84*Q_E!{frRV$*#u3)n-Cb_a#d> zcn~|FO~Y;yZo2r>dh)&Ax@g;MTU#0Q(HDZ`kxpr67=7O{<(} zTeI+vcyN)DNNyj-o104@2v$n;`!U#tJajEL%L)aYfywFgTlil37TQ$K(dkNC&PKBG z_FzMJQ%fIDJI8?*f_^R_VmQzLvpF?su|%VNsqTzR>UX-VTZDcgVavMGGU2S+>Y%eT z`eujqxGD)CfF=F$9>2k!e*V+<;REFrY-({Wx9k7_<+>YNz2E3pjm*Q?r!f`ufkK-Z zTa9`bMjo8x0w4j2BLIX&v}Ay-IBbI@r68Dyp1du)T#C;?wcsFTHWW*D2c)ah31Rs- zs%ez`Z3Jb(yDR*Sx%tt|@WAprjB6LZ&4e1|e@ISEK<>B+u&qkd zPWW}+CYFpvnHf7xa1Am>X+HNPDtZ*mzS}0Eoh8d+(bef7wiV|*uK0Q}QC9=sd^

NFb`PNsL9s2&~*V(65v4;gbT>0Ay`$j+ex>_9IT*DJ6JXLU(CJ-PDe3Sl8mIP zDW(BG=;q@u0z?4L+uUYhELbfUhp{SV?QRAtV{^dC%IQ?^yQQ?2=I4*Y=z- zr*EuKjNR{(82eKkc+h`?%s7cS5MVZ5)^Aa}5wAp{eC}1D9P%mMNi3d6$b)CFvKrqN zn}jv<+I6pAn-x3YtHE-klSmD)P~ItkqtZQe|3u(~*S@Q!2G?x%he*1}RdzQ06OsPf z4P4wvwBWI$jLm(RG_!zXrl0ml0kKqJJ#bbB6Y8;YS(<+BsU9@>862OQ{+pVe$$LWL zLQE^!cHQn?RuT(C>;&(F-$*ay3FQH9vBa`PeeKZ=;02Wl{fn-y!J%BY^Km12>L+Ic zr2;l>99AJC9H51$1i1lG5cR`eY0*q&cv(cRRH&@#dOu+q7M(Gi9NL#r6>u;z2;SkuhU`;j zouh7a>$vn&o^WjXlf21r5wVbR%u|rUm2G(*jM<8pXtSPT7#^?wqE5E_Vt{Aig9tB% z&mpFb-9V$wR0H@k?Q^L(f+{z-lmJ;doBk8Jw&K|*j9?En_YORXPf?M}0C2nR=QO{= zv%fj%BCunAN8MoA6Pj%MMwF6JwoP7!!xCw5+odBwqjCX&Ty@5OO`SQdL+IQAUa11s zWL$go26+bGvCWdZix`MK;vDmj6iQ11k0U@=4`AL*F-X@4Wi5a#P~)t;!u1eEX$Lcl zZAt?*(Rr?uDy*wdcM#D1Kwk9&erx=*zm&oN(XWKo4Ae^sn*<8KS0biI$b;ZT`Fp>a zU(UlYy%BiXh&OI&E*QbiVM^B|FmNO+t|g%p3-MajM@K|%_23&sB6FFPMm*@^LK|>j ze61RjO9=Lw%f6R7yMA1^M1!S?xVw6(pX))hRfVW*9>udolxAt!Xd}YPQ16fVIy2Fz z+5zhDl4dF69(P-3BmaHOx%t}UAGPE7{%eUd=JvZ94cMznU+!fO?B`15C4Y-ydrQS- zMi-91CA`?k0%Fy_-Dt83Wnpis*oVGLfYx@lHfI!XnUn^{kV(Yg0}xE~3G-gimCwQ0 zRw(2o4z}Rmk?@Lt63298S%W}2#0yQQqIIi5p6i1_bT_%z)v%rYCJ0nYYNAk>q9eaB zS(A0uinD2)U|qs!zqD~#r~oj$e4>=slYTn|PlGm-jKIG?E`^6qQ`q5o-go*p>V`P$ zm+EpH&dnyAc`o8sr-j_|2`_}9RikJnMx=kKkGEM&?CtCWWmz7NA+}5kN=<+akB`HV zgIOe&7nJ17UP)MkSv2Ftjr0>d4TK}gMJ`8Z+zziXFn@vcjqh7JbFw(!Em&!lSK)V*#XW)XP9wZRM}YW+YXJ+0E&^K5Vk@ z;Y%QYf)Mq&O+59>qG#PLpGztG|I|O(&*4yS-9UYln5DhiD5qoA4a82#1}q35mz{>dm8xH3SUncLv2$rmJmj)G0xz&wn;aPiR$4c`#Sw;_P!F z7Kw=jidh;0>tJp=BV%1kedqLT$M@s!t$StP)2>80?1SnOXL&(R8#Cu=F#$8`{*ph% z`SsrIotO!^>2tp!ef`I(;z#A3lB8PmDqy4uqlT6d2P8#!TH_bIZ0_HcQJcGI{4f?VJ78lZ>&~i9i2NpwJ zoX8Yt5!-G6XMIS?&STS$T&)S#;I(B2M+Uuq##-<*_z1e<0Y;i{whX~JzD>PI{=h#1 z_(Mq=f&pwWR{leMQZm2f*Jgefo?2oxJX6=nPzmKVJcvM!3yb?habc^AZ*tFJDOzRK z`Gb7QKv?ImBhSaE5=PMg^l_@5(x79~UxiP+HP<>-tO=@dUi2KDm-)#Ce&blqffZ1f zw2n)vWh^u(e|g0ri5FE-P)S%l7(B%QdEcj1BF(MP=@_3ca|o`9Bo&z{%FhT$qeK+ zke04@fTJ%cybcKX_70)0L6A@Sdt!rB}P2wGagHRvIevISlOW3qJGi0{j?Y+rNK z$6w*>2ox5MyP`G|Xxv3=uCbF_iNk{P&p3cFuzSjgGMo^unwJ346*B}hCuyK5UQQT$ zTnsW4A$XcI=8pA@Y)(3V)Q{j)fPa!-o@{rHGn9iUiDIFVWsVa#dy~ui!xPxENAvXz zzu)hNth!1RBf(To%pIr2gYyYdl7ie0iNtHL1+kNVeD=zf=&KgiOA4VVd*ly?!Zs|u zDaY`JmH!E!kQa9#cTS#f6&>GC_2~#Cn<$7ol-GmF7}7=35Tq^ONYjYjcr@O0=r|k3 zXDOlUP#Gzn_@)0rF^9gA?a$*CE-CZQUCx02Mygc`Y;Jw!OikU|InrIH8Nxrp5tP{% zD$AQ$@&gg2j4R^bVJ#FUu0_JKWOu#d(lED_PeGUIHz^@QL*&T2UBWhF6qtKwlO%f! zwTMjO!P<$S3O73mVo@@e*~j0{df6P^ZZ=9JLR?a9SY38nqx>LM&b-ud!H(}8o91(Q zdg;X1EerUdp)OgW`sp$Z!8o*_A^2NI_y>~R+5N`p4kKm0^?v21Lt5Dr;1BXa+N>9O zHQCfEk%x{Toyo{2vA(vNMOE)8U+Kao5Pv#s{KEka|5SD}Z#Tr;I^Q6rVjsAM+%v=UW3BsAopG6Pm7 zQ;R;dQ(8t=p(m3?0%8mLS_#k{LC01`=MbSOE}nVb(J>>cbvim)(m6%N;0|u@q!}uU zky-f0=-Ts+g26+B+M?R75DNajXz+4Ugw{mO$3$W_u-b`kb?^fIxyQvD>qSF{E_1Oe zL~&j87fMeE!cI&CZXHZ1&3iM4tw4kO`Eypq42=2zCQ=}+yU-W#!ob?d31kk;I%*>L zJ%MdNT8S;Au4O5)_~Y$GN}<^PK(NkwC(Q?os79-HBUY*(gK~}(7{83i3HmHvFdl#6 zfWL0rWoZs+N_^2XRd5Iiu6yQE4SmET9*br?MWJ>E_j+V!t69mYgFtM{Grf8kM2$Js zSp;TnYraFJ5R|c-J--G^pf5?S6xK5Tmp>r--@tln%em!C!}Y|JOBgV|)T|rsTB@X( zR=JeVz!QNyH$GFgZ!=SICaNi+wmw-PW6eK%j`Q?oZj%`AkvLx&dCn37=*$LO5RbRo zEdV!#^aiJCsf21*TNFYr0Uzs@f94h^3^0%h8O2GxqoV!u{K3d~7}UEl4&|*>Gl})E zG$*MlwGgs^W*6RDHiwN(%KKS)iEFMwX{}Q}PO?^DUPRYr=l#qx zx1kxtO>NbuEExykub)YAG&zdid|)B;Ok>=N7KdAG{LW?{^xwEI;0faFhwH7|>ZAoP z26(=4PGhEv#a!{=DmF`UAJ0(Zuu7ZL9mT0}ptzJ)pZ^({p|W`{kLoiA>`Y#ql~5YG zs+yvFwhc87qiJkz>5m}xqAGct0HVQ*Vf~<3)V3E; zy?)sY_qd*3MjIp zXFPO7zeMeDyTX|VVVoMX3D};tgIhDV5S4zy$fm4vTrI!gDloZH35CK60m_#LS>x|( zFiF)O;+&IGjJ?W}KTynsPhiJc7OsmLq$tHcCDPX#_Ubj5a^ zbv~KrktmQ7x(;sD57BoPspd$`_?$Ts+Iw896Wid3{bFRqNwgKxuTRrtL7^wICW0SSx2(*J<1a?Q!MTnY*;# zkSm%*LXZ0k13iz^KAugZKWhg)G4^jpMY%My?;G#X@0KL0W@;c$eRTcmXvk@c1rEK_!^Z6hj7d$`{+#ra6AoqH0WPK1qwh$9!z}Xq+H-SU-h+53 zEdL3wxI6$JA|3~tx0bu6R_kiZ;^be3>0)4(m+L=Jwllsv;4c-C0N%*G2u;$PCxShe zJBJxM18V)V5@Dv!UV1F49nwLz``#UNOU!SaGix5hBqD0vilx%C5Qhn|$FekoD^!AN z7QBMfZe08)9{HKo>^1ND-iaYx`@!Y`<#LFn-De!P{ry^$>1TrK{>otT9P_24z)J3* zt!x-nCQ|7{<(pViQ@2b5Rkzr9laFO{vF_<6Eje@fD%*UGp*a-|1FReB>x8%<9S<7#GH^|&uJDK>+Gi>=@}QsR5T2+$UI|?&?L>Cg_^D@ zBbOxk^BDpxaw?X9Gc(z&H2M}zr+VMhaQW+S81$@DnBua7y4>)QUcGaOD zzq$ScBkmeqSu{`Y$uPoE1&0rt~D@YuVSZ@Z{ zOcwKt-3drH67~yZ7}o+h%A>5NXrqAQze1hz_`oMJmL;}ynb>A~=f`)2I5_AD*w@EUgX6etJA&~Z_&V<6Fc~V<4KUAQm zrZ(_*kasN*r_WmmX--@%2lPJ|uz+(EAw}m`1w-KL3?nLT1j%J5(y2PN$gZ=M5nFkzMLM zIpdN3N@pUq4~vfq11QfMl1}eNTM>&n`xb_MUF2RGV79|g#$ugCVoAXFnm|XuDBN%Z z2UvlANjwv%rC0YWh@B4GPha5$3gcPDF-(m6U|->eJItm>o*}_ZmtbBxcZrdIcw{?D zM=30u@#SU=7MaZ|w=-LqaoWHHZ$_SCz8)NN#}@7vR=~Xf^kK$o@IH@rt9OLqMg|Wa zY`>*GaYG#moh0Qoi?Yh!-6at>!|9Qjli%&ATWwzQ6lwL9+k=XN8-`ehKQ)t+kPv4KAt&dWQprLH%1r2RVRPK2QMRC zzN;Y{k*T)T7j#WUMfouenjkfS*+ShOKKAvVAaF#qx5sl(uH&})@b9yZCCmOHjGhz-!gy`!>?age}!%cLd282x{_;<2_(ZR0*GA?wt*uG<{ zk&v3HnBBy#cb!L$jd6W)D4<5Nb`7C@n|!Za3M{~}%kyMd!to&b#mr2HC&=b;{xGTW zT&kH1wN|%2)kC@NOB5F2#VoWF8LU3Ztngp)Yb)iU<9OKYQao)j&{uZ@i40ptohGzD z9h>}j#d3eOSc8o0$Xnr^GC$4IF3wpHhZPSMKfBCeFCT+V&DVS2K1|L zm4q2fl9)R{(UV1glbCc*kehqcwtb3}{&`;?E@Fd!4r;F0a{-+HZ-Y~$nxG!Klv|D8 z2Zd(-dm&|4d>eL)?rhJTuuk>M z?hB~x6&oCQ6q7kJzDi+M`zsUZCN+9Un^kC$^~1mgzs#|8uj!~bc0i~T4dSqkfmnhF z%MwO96oy<^smz7zzX^VppO1wY;~>+}l_+u^=0mt?vU|P)9-}TvB<dsa#X0G$DCuHIkn z*(3JCQt*h%qhD==Vk6Ct+Rj!`A{cZ$1LZqAV^Y0~Xdq!4mDbGuwvOC!8IwA9epLD` z3Zr*2cJ*Qf-QI;#F`J?6{GNfZ4LqqiFfsZx=-!zC?RHP6>y^+Y0&cNi^1dYO$ks_Q zd&fTBR8&w(i1{bqNF;IgNj)4-v*@Wi-HjVkF)+R`KqQHq;{P^{MMTAzg`@S9TKgD* zD{|tI@<1C3tcZ0^n-C)=>NAM@GWisSb=!{%NS**!ZebK4D)~F~FDdUWf2wX#Z0IR{ zGWbtBWKG0Za{{#U0R7~lzM9zTK|3|t0Sh}oC>6P7W>Z|V$94F=uj?yr>qPHEo!<3q zgeu)fgmy1)c!?1$P8H-4TfB42ySF?*loQtk-(Q2UgMi^B8{f~Z-WCK>9jve|CW9k0^QJFDq9>r%oIIe|4cd2b06n=OH zO@Op2Kg$e>3P(rGFKCRIShb!G`SQRK|@ zPZ07&!e$|1SeL2cSXmWil{L#N{Pk8XI2D~phl;%1lliExZ&Z(`WvS5L0llYgkg(FF zn2P&cQEcp-l-zoAnLbGt$p|LLN!#?SLA>`mAKw4{o# zGD`+|P3MBnh`04RqoASPDj?Jyg~W#@gb>l@OXrAXlq6-W#@3=Fm_4?mBK`+}C1S|; zxa^!A<~_>+;wWEu$$4h>ZElNoHeTlTPi!G4;y5I(W!>m_BN#cA0Z-Mo{2(=Xg-8E(jdW{`=jdk&>P1~)DaF71Gc;z2 z8+p?nMA;bO_==w@CJ61fnHpOfMfkOwUsd2jpJgb4>+X{fe`B;4X$BzHXYxdU!T?xt zAkrufefL^31a}9&;*bgv{zLL+K0=8A%dhT+7(F^bYbV3Gcedu))s-3TXx^v85pWZ+ z>Hk>0wfwr6gu0`I^}}WHUqu4I;3QPNCSmaWsM>AkabIrSz&tJEym1V-53pK>mCAGU z8QljKF$vWAJFuaV+aE@g4JI#sOYyua&kq%0i>h-EN)Kw?T6!>OuB{AW+O-#R>EtmZ zY-E#&5QFXQtq+9W@;u6g&^8KMW=s*JvD&3biTMgv)WY$*+RE@X$ni~N9d%i=y`%*~ z*wSN>h_$hT=Q3DOS@nfWSdAxmai}J<#?Fs9e@IutyJ+SAXf3IvI_s~CoPaBsf?-bZ z9v4HlCI;dHZaR1YLeX9YeM4yr&)knTL;)wr*-nAj>^ZpH0ag9azR4XbjJ@Sa?;JJs z?2ar;19krX@+k?@f^;kzap%gE;hn9TyobR&aU{IKMj4k9POJ4u7iKiCMA=`5Kc)!a zHh2_Y*h-8;xh%cXsT}C31M8fKf41VtUh2;pedknQl}xwaXo+Zx16>)AeS?=XkTFna zkhV9wJt{iz)OsWU*%_b(5JVey(u7PFZJdZ~_A9Jts#OmFufE&y!oz)i8)VSU@1-oS zr0`9h=BTKWf{NwHi_=4^zTX}K?RKbn zb@_o^tv3H?j@F(5V<&btvZSaxpy1{CdHrogFuL$itx)rM?7Bk3JOu>?H=W(IxlX2Q z@#R9+1nqDe;T|@*%Yg>Hy`sqZP65W0y$&+CaUZ30-Fhboj6|rlv=#kH#6w-Kdxk#h zuPx^?W6*k~x%#6OZVk(MO`E#a$3wFVvDs;zgUC(|S4UEp*6=vxX(nHAv`O_=kgPtJ z?3ihvP1S|X(}LI!#dF2xzbsmiyeM;}d8p&!dmEFvR27G=Qe#(?N+2t_T&2;6M=5Hw z`XJ|)4BTUff(=(6PD{fKA{ZA+HtSmQ#so;jqb~Bzr@SeCgxEYpGRZVzx?%Vpo&Yrp z&HStRSyu!&_g@R8k&>ce92^;E+`gBB*T~S9;yZQ~DO@ZEr^Pf58d%EQB_C9g5YKBR z%P0fdtgbsam+}j zF*K8(1Bq0fks*W?1=u50C%6J-Cd~rIp6^@|P7`u4m;+jqP{qIO;AQJIl)@J?Uy1IG1=Cnt0%qJLJ(7Lp(c2k&n0P*BBPc(1C_r81A8 z)G9@4NS-UIC4ZtLW}a;M$n+F?6n@g)0N8^RGW-y00=|TyDlSByM}5Ehg}5S^89qtp z(L)yRu2Hzj%WRKgiKr*0B~@|YL|dYC|&JsL=FU;Kw zVDAcQZFkCPyIi5%=%PELB45eXQk6`t+=u>riLrAc@DfjyuB5}vDS zjLWf#xzc>_F3AnBUE@;*z%bD7in^0vz)R*B?3E&ZmibmU!Jm}ai5vJoesYOcFezLA zeBBYqrd8b7sVv_dOg5`x%s5R;N0hXPFj&ffh38F1`VxI`Ty2a2x%yT6RIJqCSRS#O zxw6W;Hzd6K8-db>Ch|>2JkE?7&}cF`+@VormFT;@gP?rn4NCb(U|D~yymjm-OayMh z(A0hBuCJ$kA@_>Y^j+%b5F)A_Mkw}>Ad}i^;j!~33D|*vYbF`_%&FWacj&z*r0zvD z3}u!nq5G{=}Vg9t5WS!jDu~c5QH$8z(mn;;!?p! zLqlav{(eob{uB&t{BO+1vx7BgLOU0d3!z|B;b8+HiTH12^_{0nZH~nIgJ9WKOtP;4 zleW9x+rpW1CRbGiUz%G_uS#x&=qEP;9K&Dc9+My-H{!7AIGvhK!Dt9eJWFFK?!!eRQ{*9?Q!IPHuWaGpZ^hT zfdI1?Mv$i4Fie}&n-zAFFk7&H2LGx=JS4v}R@fz%^WNKaqDcqI6K>z9%T~;^|NSaf z$75z5ZxfL)Rk1;-V*hZP4iFl0EoI{4EB2}T1M9U{-PO&r{Y&mtec34|lD$g3qvJc` z&tBbL-E ze+lZ2ay5_Pi2$B z`-if@O?|-u8Wz}HH5{LXJ1C!O>*-dRRikSVaOKBSV{DD8i5$!1hoGAfRL#s&orJKX z`S;ho&vo7CX?=;*rE!(^Q-64#tA3O{{JRan(sjpP^ebkhXY!V=eCDvOtaTFAR?U%C z;ANOK3u8cxH(>8HFT$Td!*(#y3Dgdr=9@#19cs@Fzc~iuVT*p_(w5XD>8_Vw1ZiBsiOUQHf$ZY*PCv-R9LkMZKQM!4+ zfl?$3ojzZ)Y{cR5G0MWvYVcmUdj6U?Y1~wU^-s>}nnjf}>)bfHR!lhhqtg1|dvB718xXNP}9SKPaEjO=$u)%c!v3ne<<_LM7*|* zGJ}2;?qSRD&46Y)KR%tT87sW-v&-JH8!rPc(u*eLfkFGZ7 zh#CN8;B>7zoJ2>Q<5DaqZ)_{c5)iAP6fk3PM^AZt zRWHJo?$V{7#W+9d=#`!2>I%KiG$wvZrgeneav$dPX?@H2PWK{hNmr9`@^B<5{ZP+jj;-bxpsI}*jih>0L2}%x#W1I z^5%=f)GZje*;KXHrHiBdO+9F|G6$qa9t|8Pa(REmg+{;NFTpt`d8kf{z_8b4Yc1Sk zVAZ$=lFAwU>tMGd$Yhxy`(js6b&0r)1jn5Y(}o!#TVPo|L?&4mj9Y80UbEs(C_LIvILhM6~Ht4xG9u}#YM zT{bs`_uGva|3!XdK*wyxb`^r$tv7mBY^uXXVp3Ysmwn}#B8H`A%I;rU8T9e)PtJvP z9*ov-Pr$}P1B6sr2*++sng-Bm0<|(LI+7pQAj{bgxK0nM<9K2s(9JFs&uGZBYQ|#a zZk*vsV_uV-(T74|dVQ-OkGEY)l`wsi`D-n_^Exs#-F-lj=E~Jk2q!V-RNX&;X*YZr z^<-^1RDSV8g-?)cB?$_GMg^k<7rtO{nJ|bgej!y(kOqvJ=QA+}RpdJnjaa6A3@7K< z_&mB1w-uM|BDn(%az0de9&*eJZ$v5W*U2-IE-GVIlYFh#5foymO394Y_1Nhj19p{9 z>?$RzG=$W=al)%bjdbNw_*C9nX0w#`)z`mhI3@1PYJ_$`xaxI*#$qp5CAKMeXZy2D zhYnOM`Z#gi_e<_Twwepo_?0CYjrxPPh1_bHU2W~tFZw!*opIrI%mE&~I7ITu{>rRz zYsf|Ahtc=X3x#P-pg$BLZjev^7vyWWftwH~{{*%62|dtiMS(tth6eN|eKOazNTKF! zZCt_Eq}B`U59D&(W8dlqO|TJ%R<;+R9#%%=c!);P_#7XXw87i4;yA(Yoaw`+xlcj6 zzIyD^X{xA5(;IM{Zl0N?NILZIthEuJ=Q5WmGM6zKaBwT=w-Oh`u6TY8YwB_U@j)`N zr)~Fg(l0x+M2yQ8AyBR#ODCYnD%y~N#j&@D6a!Qg zjr4)>-749>z(0-;*#u$A)Ead9#0g?vqR?6Mq4udTR9OY^6Hz+R?E!opUV$*3Jo869 zj}gkdWtu5A7G>#W95-^3DDZp|CMKOYQLvIua6SEk1a<8A;mAp~aY;-Vb%Y9cf^Wgh z6huDy>L9m6`gs7G0{LHzLUFLXEY%V^P`4wnu^_~3i8o^qzHjIB|J4&B^)nJCQ$JOhT$2d zlm7I5%C;}OeVldglkX2ge*oV&K*OCH?#mfGWt_M%QtUgr#$dhKs*+Y%5Yn#tuJ)Z? zQ9TkPOBH}8fYh&6+zNq2GuI4@q&3N20{+mnB5%t47-4BK_UuYPUj-fz?M@!D9suBm z3R*NsFx{vBudFLHm#vRJ8~*w+yJCSnJ#mugyxMrDQrE(Pop@0rA;+Q z_ZgAzKgCo|sUFmHdjDfzXg#w*aOcPg~F(kWs2`U0U|(;3o6h$l@uRnJh9D$p;`}y2bQq_@oOEE!Cq$$HtDpV z3?58ccTTN6$v%m@p43K*>V09^lro7Q2R^3Hf<=4u-`+tRQ_81H&T?a$j3IQ#9QL>n z$t@jpSEOp_tk;hKo_hS(${#pW5S_}V)7DQ5fjs&tpwrwl_Q301Tj7hxcy@e3(M7_i z?U=2a(KXR)AHyKC&flN;7$lpx!4JF2D^hD7CQgSWlPn4h>?TcAU6pZC;ZW>ZEM? z?&9dMF>TM@&3YWYyj)2x!z6-NsnW8`!3#{=Rt(-ZBryoDaC!dFxb~6_T~)k*bZ(` z4@7+!X!3-2i0`#P&~WOfNG)zcXeVc-frxf<)EgQ)2=B_m{E+Z1S->Hv@!x;<4smRR zg3rgkeEjNUC{zrZZ^g(H0#BK~HHu!@105ZBpmwr0?!5(15a_X#yCmZOd*_S1T9 zsYoKNuiv&1oLI^PK_kLCxWMh(Vg^LpBRJ#vJd72Qbj-2Y&-_;SD?CzxR%YmfmTLBN zcuU21QoDuFOydh$YKl49=_3M>QaSR)i0PO z03UfLk_*7jg)WL0*%>#66u(T>+V5gv$3ARh9cRMbdJfj1iHewpO~esk!@3b<*;%#EWWapvV44uH&TIgr~QrcJ_@}Zag=u~ zwfPoED(ue0jzp<+MHwAgh`bi(odQyle=8A5o?4EKuCNK>vH!~>@Ll%)++)8IQg4fM zyi3Wuruuz3DHT5*wb0Quwb4_1WumK&q6ymE9C;%0jhbn4 zb{xVgihH1r68hyc%b2C_JBr$Em5z%vwlJ+I5Mk|21pB-ILuWuY{XXPV^ptrMP z3}0pU!*M%k#)?M`yp_7U)_>mL(lj@5Lu2fGW5yTzq3y=oqIQruv2?l(>$u%DZI}`( zoNN+|eD#5#KH@B=OkEMO(CRh>Qc(KDgiYtybYI5;+wf5krJ*=bu-|w5pb2#Hv|;u* z77vXYRhy;^`Ay-S4_Y#RA_&2)u{1h*+l0t>2(@EDsHqjsv2h9}D9m1`6H=|R2=lJc zyRN&!8uykMyQ|qB?E`L+x>W3WxPLb;QlE+`TjR%y@I!Z}5$mR+v$VJ%j;|^Jbq?!e zML88-k<{%5aG(d&EKfq_grV^_?kaD-*DZ!#kva?t%qD?7nkiu;>Y>J>e){+;Oe=P5 zqxey-d=z{q7WOqslqag(yhjW)WvyvXl0k1Pxx0YM%Q+)@Rml5@D+gL#aZ#`;4Qr~} zvexG1GWsmp=zTM#^OR%?>ZP4 z=0x3TUAi?>954|(&Ia&F$X=CUt1n+qcDb;zV+S|Z54h<$dMOUU9Z@@rJ8~)@LdHUK zXwL)eyLspi{s7#uL^(&2rRkOdj{&6EXe@GaDwF@HN5|G|$nt);BDNdswtq3qa(q8OEhnu;t?x&dvDpc=-4Uu@P-IoC4k7P?I zH72+4$efbep)W$jC2OpXGnNV2OBzMGlOCIRzPT7lhEB%@zhhyABSZk%dLB0RKgJu3 zy%?$3RswM~=k^3SA$FHE&#ssSKac4!$XqF~qOQ}mq=expm6R{A^35J(^nOc_jfe36 zQ|_;EnLScz*bVL}%V?%wh>5GwfVzUm$MaIB&NO$Q%IU!BO;8AixwudgO&c|*7 zBlpoxonm&{(X@y#d8ub_dl>@Am~Dx^N)tATfSs6kWkFJFP^=hZRm zF?aLU!g?NV9`C<#-Q*-(5O!Q+0%CPju7VOb9Xv;02)k2OJH9VQ^l_@KI&`#jEjO3xjw1 zQjU zT&ytbLaHA0Ik7>IJ6fHWd-Oh*&R$NBK_w=IOWo6b!J(fBw`{_HuU2(H`U*wgdfb{jmeg8aN@&m3nm;6Yxi|p>AJM*si66#>S?&X}r$HM+d5|(Ns z|H>10DFIB}(jGzK=P(618al0@;267z{Xxl%a^anL@kzR#h*VhNyCP&q=R;kUEsxlU z4+G?w=@$;{@)(_atwvp>2?IvAasY!`Q%|adt-5-cGgLGbp}XZ`a!m)I>#Q(@kN>5# zdE`CuC}Ix}-?+JiiIbSRsXWi7K##dwVoKwlRPb>*>#sjZZrgU3?$^2%u9|9+26a@u z0I|)#V2PJ+C3+bv5%o&X;~yL!;{#8r zotBY~CbdecubES!OsavIYE?c!_R|g`n=N}m1I$dOzm<_2enqlWDxDNaH{Lu+3YWe> zhJ4TVY5=+jM^3Me#nws_vY3m~8h0pwEm(RS7i9uJLVJ2pJ7o%WwR4O`zL&ZHD#Dl+ z5DIzAly^A7XNwkTJzaK<*76j)@T?~ZJcN)gR7H)Rd}O$&{GxX!sA0TJn<$(vXbg(D zX$aOkhKF>l zqir6!>^R+w6#k>eA}|eq#iwVlv%?uq(s712g8S;h*`_=zMN4Jwrr;MEw_Kw3e^#IR^Z}#0(H60@#FHT}?-IgR*n-I; zONO|2^w|nGiX6y%SH3*AGU)<97V zk?{S&29~-ou zf>!Gt{0++lH=sOtOGhj)Bh@gHv6w7AXP=ZgmNXoN+MvP9moTGUI%HTY;0(Z-%le41 zX>v594&a!$=HBv(aD!(sHh)3cvy+3DNJ0jtsb{%$zATw4`{#l!i#t=04*E-*`t!Lk zrTA+Vkj`*~B)M9l2)%sglN2i49uJR{HOFT}n9=hzgUvQ#&2sn7lSS=wn2Okf|Hb9? z*Od|~$o_#e*^Z_WyIyWr8dlz;PNza7V3(~QIfpYt#mH8g76MTP-Jx1cAK)nHZ7wNK zXq>)`sFo~5R3cL|RcCU_`v(&_=M8pV5^}|iDu;onT9B)#UA%%zelj>T1qkgtyIrop zvXe`h)H*?lY<(2|CAe<*LDE>qe>B}o`8|skyvw`YwNbs{EAOAQ^53U{Q}YIr}`G$Uk6I+^S-C?0r*P-bV-#&Sf zR%=n*RK!GOnTHRvWYQQ26)}3{Z?6X#eLAZf_QF^M@ooK(h|F0}yX8j_y?5)meUH8w zy+lc;rtDOrzrRcdleTehxGKbH-Efs+!Pd6eue>Ti(Yw-fQK@j1rG=0HBBClsDanS zPvSXC-v&I3k^$uatQEIPmRdwkx9dS=`yJjnxFxIg$wjT_arb>;oaaq@UhkBv0@(h< zvkAG20?JffP?vlU3fDhWj1zk0_VUPLzU11e6iUea2|Cjr%O<~tX9zN*Mml6_4(Sfn ztE@_NdgAYfM;)#QpkU-T`JE#ocVPI)ibc-&?lXXO8D6pFK)KXcY(rA}1@8jyA|6*_ z#PS^F&=yh3$yv^)`JVhfMf0*CQeXny;-cK4lfy#9ttSy^sF|oq;4$wSqRqRzGpaJ- zA;rch0x@1Mwb{`FZN556Bj(Y<%{vmD4@UsU%;+d`9FKqrFJKdw%zN9vs?O7O*Ax_4!X4FOHVqUEppkSO62bXz_`D1!d1+qAK)8{~}e z6%aKlHeH-K?*W7}K3`GoZa0GptkecbXzK@`3IM&`hRL@1v2JmrsSG7t6w zxc`Qwl#Z#r9zp&k-tYg z8b0B?;93f^TR-fM;AJ}M$#7~J@{8*}bukpk+=u3K)j@@dz2Ppp#JQL53?wqu-9jdw zhzBCvSZofcF$=@4k!+~aCd@ElvAJ@l{4Twi{s%P7z$t_iD`|26cwj=es5zRwy*p9j z$3u1t=H^~lemWsAp^Jq4-#F-ZPsr0lE1R)KuQ#E`Suf3p$+HVC7Ao zm}x|V_gVu|<$q#K@FqA0WL;OVknxYx=$kI;HKm!j%S#*DI#m{Mprx+>Z0d>nou%|m zzVCmxwxP3FOX)q``jEnDCu%nwc@7vu*J(7*+IXQxLbHXvW#evP*JV`BWj_cMSEzz{n>hj|Y2Z=R<%XhuVC zw!}CBO4{s-(PdqX&6sr-p}g9n)hf{M!EfAtJ?<51nqb$@BNo#iiiVwRm2G=qOI>iA z8F>L=O=I+*7gV=?m9Ko&BIJ~2d_$5mrSOL0BJXxVqAoj}Mx4wYGF7 zB`(Bor{J|kx@O-i4JJ{FT!!j*Ym4KzN<0IU2(i#-(dmX+uheJQgRw5D3lNsfOW`3Y z=dob)Q8AwfKBa6K($I2(dwf-XRolF=$Pg z2sL)mWl5sXvCI=-RCTlV7~q?hxZQgV6?O|0sk zxgrO9T|Gq*E?yY07SS>a(cI)f(z>ZQ7f!}!ZZsp~24#36)BhI)(Dn}Tu+7P)Acq`c zseO>+d6pa=SrcB6sMEP9Pre%_dPOj}TI_gvV`MOdVTj&Oa-W1aenKr~OoadQJEuD> zrn`d76#czO$2z1yhy6=-@ElM43UdW8C)tEs^z{h@1{qBIUY=c%JEib^#EXWSkzlp2 z%YMv=M2M02l+{95tD^UjyFYD_wgZpfC?=;@lWA!wyCynWE)9hg!6Jl}csTUWXNQ=7 zMSzK98DkCe0V-K3aac(Xo(yl>yi)z&X=DkV{^SVR0jacjp&Nf)HzOT`E-oyyZWt|F#6>urefd82D zD3BZBrS%FZIb{=BzVqFPY-( zY=oQPSVPF99q_~mSa^8TxZ9-BpVJV>gnNXd@i%|NRvL`K>4zELM37VKfHTgZ1H)tI zV*#mi`fVYXxQ8Y0&OE%S`&%(ErJS7i;5%NswJ92js+tCW6okkC0AD?SLiwbpg%w-a zO1vW|u5H~2ih4;W^luog4SW+LJO$9pf;4lJCURxq`ptBxkPc!7UHqL64^UF(zrNsS z`sSpmMU`-ZJ|l9aa^at8@Dm&Hdkv>EByjbM`IAQ4N6pCfBLTyQ`zXk{_`kPUG=_l( zbZM1A?9TW__hE=YS!^4PWjq{J#NN})MsSJ-gv9b7Enl{C{#|-RA)(|Ba{CcFK`)0;M_2s89Ww(DMBB<4K`kkd)cp#OY$~ zZ{O0D=v?tQN{D*yN=Gi(I^0KbdsX#Tp$GiLawRF4D3Ki*DwF$@n!fx#Uti$R8mSK= zB4s-l%XPGKMFoV$iY=M{dq9K%2SlN<03{hOp!9Imo)Aqyn4Aq+&}eA?tm8|Ye?+y} z6(`D{3JX5lHUTOl9uBmXU*_kFHvJmVOpj}zlJR#xzc3c*3kzDy9o5>Zr~?;1(!Ze- zpncVYd%!&J$WLKQ@bkXp50iWfobZ>CFWs>9!DydksKdy3XrLGY+$G zF0NfCuM%0LJ_aTGWq_lIYnQ#DepQ*CRg+CED(5tJH=}YQ!qFgOCX&xW^a+YTJVTXVq<631!+zKnf)781MGb;+lj4_~LG z`t$Bap`#qa*|=mxG@o8I*PF4&?OrKr&%^`BC%l$H&y&X8zQ2L%xk{i< ze`;T9CKjIZ-1t?2`4m1Lvo(f;;*|f4<%ZEqZ&znDrv1m0!MAIhx&-w0tTbhq%gPev z=>oa}ZcNbr}f9A2OXaCH^OBl!^M9A`kz9{65e0* za|?WFs>53&C_B9URTy_=@WOar8j8;c}^@aDg_Dhk(Z-N@d*b{kbo{<8J6!W#UaO9RgE zdAm#CLdkwkk&%lveTu5PeC7!MDCAQT-OvVz&aG8f6HuLuSW%V-p z$F4lC;|^!C7{ifh|C`wj!%50z1&Q_&xxB17K_NQb;*?Q9T9Se2-Q{PV@DY;N(($+_ zZZPCb1(sx<2a2|MC%a7IM_@_>LJJ$P65xB%+mvUn+!N)z`*-A0zj796-$ioDVqFq# zU{UFG#i(Penlp$|mQ_vS$ko1bkt*BXX>w#@+)|k6E^oZ`%hQc`F&R&U5e)<3vYto# zI+++-?3a8m(cyMW)F4MyXF?PM`})Cg=BD2z@9G{eYA|IiAATU2XGh`@Y&l?NOgy!D z0Tjb6UBU_cHTX`?D50CFlmCku>ojD+7c@BovyIU9Da}oHyj^$Q1KCaOYr>~Ln<-qm zoVfrw1_I%jfespH!36AT#$$YKvkuzqOzN_ElgEW?90q-OTF=vY8HHp#eOa7e;fEIUibn(a%>` z79bhR>9~kn^uQ4rmxq${lE@`?Z*!LA{302gAg4>x@fU37M%D!*w0lvG?RY9srL+j? zE#&Dw5C2{^B&EQh!X|X~qj~3($8l9>4<|W=m0JsD@&0tfwo__-bwGXh!~q66X2;p6 z#3SSDOj=5M)-e;8oty2BBhlh(-_InPMpZ(w&fJ@Xz3e=;&k0)4a2*#ZG%MQ^`el^EYt;2q0>#nCSHEIg0*sI|p9$g{IVoE~! zZj6+*o!3^g-MjI|es7paf7JIE9q|UOwjdGu#3i0MyI9%I*U!{C?AY`>enC69-5|AaRQ`V!o z)IM(c4oIJYF&+x|Il`5(cK!l(Hk+UHLJ<^1c=!FQ)f6f%iKC1Y?L22;17SZDvG z%uIdDnNPA%5v?<%?&biyg^m2M;tR(@5%;^GjnZrM=e*>GGb{c{zTp=ItokG|_EgX( zX|lGxte#tb9wa_Y25-Uh=i)i0ShDZQ=9xqf4}6sZ0rq}B@s!#c(N_V|bwDMPL(|E1#X@LzAsBDV#KmXas%WZ~*}9T@zT$;)C%<>M8Rnh`@oKtC&e1uWPn?T@yA_ z>mT2{002i~6*SKML=9Tb9tIJqs37Ns=1I&f{5*bm%`T}^Wl`plf{9J`DfnP27NiK( z7RcCQaA_JDB~dT9^^fY?iU$o#wt|=1^(9SJer1wh(9!yVCCweHVX>UoOs8f-e^66= z+z9#(_r@|)y1r)n+dn_WlJK=7+7l0wrpD;}X$~ykd{m{fX}#EYsUT4#>U1UjamrsHrX| zyNKPhs75wmC8WM?9^zX1qyuYCetBJMDLJJCg?z8r_rdEM^5()4Fl4l=B?CQpO_ zalx83^My=g&IScd&EHZ|5{7UwPg+*dY~HK1QtG*Q#iu#r-g<{|Cv>HhSntuE3KU7h zab4y%97lONsOT}ItDrIN6__IS@rDLS(HY$L)y=*q1_f2vvK`eVweqGE1#%kCb?ZZD z%fdCzBlup$p#DFgPs+FNPM!EZb&r}=%X~9X_Rt-EW(V~P0z~0VtB#MVm0w--9h&a- zcboHsML@3UY_i-4GAF!CFWApDj5$8u0#wLB8-3QaSH{A#S4+rdn8q+4Io3&jn*YA& z&g(CD;bU#nkm|p9y5Wl^m{&q5O0Ocyhd9%2I;DXMEH&^uv`_CVeYEsuY;(<=@lMYN zSXSph^wqKaP<_-6_juh0{?i{lxR9V?N4b~+d?g-P2d#cfQlLF9qrK5T-#F8cak=x` zET$dmCJBA0Kvj?(nUNz}4xt)P@dwB&sgB#T+!p}3U^nu(yF?gtj{0%{j6o9+7AAPQ zYHy`QkZQDvel~_+VUnKI^v^vNEN6In+d8pF-LpjgBygqqIN^$v$WHzvIbwfW*1f} zXux)<%dg$oiUyB)+rb7$`!`muGH%IH#kjJmn5Y%tNWk&Bd^CbJfqp|FGns-nj2&_{ z`R({7skw>yyrFq7qU-m^h=@+>>1UIrF;WNBy&VQy$ICGTzRWjj_9s=y7U%I?gwh)e z4#P(Ya~SF(1c>d?q>#*f&gC8}j<#ER24{6)9C)1nUo*%gl*$l z8v9nWX%S+`$?xiNwdiXtG|p0eMbm=OT;PQe&rKlnpSS%U^Kd3GJwaHBJ$n2&kkC&@ z{uvl@eY%uiu6|#|L-{L1blTUnef)sQd*@>pSs&-zGfsa6P173ZW42B?AMZ;jk1#yq z+Em!UptW}?t=j#04Q;f2C}}9IzIMqopKX|&Uh_Q@RjQZTzV)qz7yKv_SB$asWo?c8 z4Jpt=G_(^7o8e0)|5kz|y%&?&gduv4mLCXL_Em@l~$fK*QgOs zGps1Imoq*A;zm!=inl#o5XPt;9QJ3nh8K2u_C&tzI|M?5hp0*Y#?fj&pYTGzEOK`2 z9HEaxa0waiV)+)rNS&8QWQ>dgFmtVAc02(Zx_vJFn>wQ@)WSWcJBE_Tjz)jWE?JtOX;@Wlj3;J%0qF-@-@(nx-mowFAMk^mkw&9>AkhHi{ z7WlHhgqb*Xi#C=76NSwd<9k{HH5F&139r%;gmE-i7ib=BR~yxTk4He|9a8Q%AHms- z4EGN}dn#WAd9jrGcJ~_mfhT5e&g<976e-b6Cfe@NCOAcwJORFOJ{i&6n(eV9)sk3I zV)2R%zez^}y3z7O4!r2Ng>l2&&12ScC10ZLRhP)Wagsyb+uql?$;0xui%QmgFh^`& z9H+cDk(Uwx=$o2W4c*qv2N&VUq>6+q5yDPvi^eGEuhroloS~Z|EBsG|gDbv4&=tj2 zoylO)r~@6_q8rDCt)6AS8uw}Y#g=g<3gLv%!MPQ+Z%J8Xgl7FfNC|Z5H)c8I0N{5@ zg0{E1OIY_&mH4miW4$7lW6UL>)LTCO527hV_y}o|DwIirTzKpjOuDc&N z^^C#x(#JjWa;humZrv%#5Ix0&5bkLH&^pz>7i$7PB?s_y#4(k zOiIe})@{(kYQ(>Z&)ndIDzYymwDqS>W-um1LX`hCVuhsEW%e`y+4Ix*6nb}^@4`YN z8DR`U`vfG7XUkSWM4s|BaKk_;Qe}8v#QmY1N!8n2GNR!6q(@g zinTY1TdCH-cH7u;l{B_V2Uf(<8O~;hLe$IWE162&0c5nRd07L)*EXA3kah~tUx|ln z0KleEc~rLWvS-PVx|&0$^oRpQ)_t<1>SJ2Gsu0m@2eHR0Atc#_OQr1}%i}g^O8)1a zcs_hQd5fF5p7)|P_Z=US`>t`b2$YhEmxOT6v8tgsRm~k(V(`Y8higAl?kKcYP6~jtns=kVJ?h`&hQdY5DW0Q%*gi#~ z>X;&Fx?q8Bqu-4txsUoz=!!DaVap{Mb=J@f@&lP(rk&{)z${)oWbk_nD;{T0o&OIG z=`Mdc+e$gT5)%n@qm=jB@+SfM4kFl|K_3^pi2S~#BtZ8|O#VRP@xcSP1RY@BE;{qt z(Y^nlw`Pet4RUp0b&O+B$M^#-EYft+)q`&?pu~&K%E-fFEg^TzqqTAY)k=sytfsBM z>~^LcnwF(zhn{NbQy72#Kb0$tkevDP;GbhSoLR0rE6iO<*cGBcI{9()n_BPiRqkWB zuS|;^;3w2Y4}>JZmS_(CFod8_yM_gjJ+gQ;_vK$=5{lG;l$~Y>%kg;1a5jV3!=Ru> zz?zIW{E1(Cgz`hJknM(Fg0VU$`vcbus1NN%Pr$zXM63tB-LA2(sWdqY4fya&*TKax2 z{j((?vX!j;iK7#p$xNM|I5px;OE8xm2qNFB@03#~Mk;7Tie*D*rHx+JyG$>XDuW^N z4Y3kz*O@lHp_7>~AiPr@*rE=Pm)WbD_(-Ervdv*xkh5e*C}Lt zaJywDwl;Ytx!O#Is|06leVsJ41Wf&+yS)$2e20d!H}T2!CmLEn45jTGX1T4AuQ^m7 z9jsi?4Bu@zRS|l%(qhX}1oncT1QxvniRgEhW5*)22HUN_Bq0ICvp`!tKYrh#OD%w| z8JBV^>)`ntAakJoEFfaXc=qq=Jq5MR|L#CuR;%tV3ZGJ@ZmsX5pI5RB|U3 zfTx(Q4v527_h#9nwgT#tHgmo|OW_lDT`iB{^Oy$JlNX|O=voT@#&6N>sZ|NFy96)t zr|wZ^Z@Uv)tB|*teX!6+d1E)qxz7*a{;O&QSYd-S_JI>2bJ-P#$PEWQyoSaPJ=ZdC zsaLmh5(Ax6hilECPpnXJ2c0fZoVD8SgrY+rcYT3c0)e)=o+c^Yf~$G*KkKmdI#% z>I}%#a&N7tT8_Z$S#=-r8|L;b=9vEDTG&Zk)DQwLKm-6?R}hydcGgZ?{wBeRiMYeb zDhB}zxv6!D9RX4B*koZS*JCEOt(-%lm{6-}vIX9+Sx%(R-PJDy;Kcj-WaGTL>1<{s z=1ab3=MVDy4l;V@Ibp2^=qPFs>0_Qx|I?g&mW2>mbp@&FxcIXVvAx*P9ojgPd(lJ8 zApmxO-XPGtd<14Ctd=my)%TLkIEZZF*Pw<4u-Tpyk-|oAA?b$oXDEr!Xr<#oi3R>tAJ>LxTeLT0?I;)|oloDg)a$3mCiAfS zHmcB+9IU#O@SANlWV%OKcOSF15l_}49~Lne(n<@dvm^i~%`QOtNsZ!p1Xa1mAyvAk^e+Nl-E1b|$kQ=-n0( zEDKx!*^lWO?=T~a;cVcQ#Nqhh#r8D#(q)3;X)?vuvPx0o{L6}K3Mhw&G=-*taiH|? zN1lGrMFsj(_u0cDo|BoTnK?>yIO>yMQm?)cG8-iJ)pvevD-Ek~`Jgvx4rt{I4 z(ANF@SasO1!p-WPeAfjDuPiFZgY<5R8mxglfxj3~f{+8C2*ynCAx=zzF_)Ifgr@t| z(xXw?e}G!)YejU}nC?G3JwFklYz9jn8WdIZQ7(JafA5h=@v-e;N3dhc%^Tl(UzSL} z5tVxg@&-Y=NSW>^$mQTUJWt*Q=&Py2*S&D#)pv^`{}l71So1O_)&Og%tc`lZk-m&R z-ebHN%VJ&5xUZjg8LOHR2>Rk`H)B<5P%&v}b>- zJJ06Ji2J&8)r|>o$BwXJ0U%QV6TR65j%P>cbj`_jr&O?Lq#2HT*jN7xbAVc_y%C<4tt8l6kBu^7O9|^;Y{m zRN`p9rzOe7mwz;ORKLW>+VtwJNXoZ5)>uGVEpilw_4MZHXQ6BxyK%?Kk|4*1#o2@) zQu}sSvg<_oVM=$XsRyfe#>VLsbs|I}Rz zheO9>k44gW%CVq2Py5#APGYu8Cy)gE9E3f-yf;?@6bX<%a3K#!;MKL=&LhC#k&ad! zv(epJys!1woE6PUC8B^{^Kp@_b#jxlgnVZT#wujE%vLKEL0j zd?dmXOG=5mxabB@Og(MyE`p$Py0)IP!^%@M>x+Du63wUu!UJ6!WVDVgqbX^yNS|Z5 znWe}90IXI?ai(G_rxjQ$IVZ+95X0*rta}+hvz=NJGN$7wq@%4#DPD3TPf;{q8V+K{ zq2YCa7lQW5>-Nb*?lEky)X?P?jvg~n`G>1OvcUlUigQhBA*9hyoBI2+V3*2JVR_8F zLxD>M5Md0E)k-sUbtzJS6!(tSIrKk!tk3?4wM=f2`EkP7`S?C7- zr=7n8yd$@g1VajOi6V7{YpU6FKDD~!$Kvr-P_vIS0eph+NlttOfPzFGz;jnOum;k4Dj>3 zN}KwE94#=e07F2$zw*NdYqR5+BJ=J>qg37e#<7Fnl;IXy*b3mF{MJ=GB{$QgQV48M zEa5WEp%;$bwIyI#m8qM;>!K!&+KV3v7FHjy81VFHCjXIx|Ch>aCz5mO&PaVY1Jc!L zofl2~_pc3QRNul4D<{S!?p`eh>Nfs>K&S!WWpx)6&|&aCrdm^1Psky>YA zznkkBE7!^{LzC9|p{^sGn5Mb8 z#|BD=v%NV~dRk=u=$~JE( zaRedul0?wpm0s>aeEE;8YVib6G0%99R$T5Y`joUb-~c8RXOj6z{I-R9m_a&e&&E}E z5An-qOvYN>6~7#WTby5rFsx5lg*~3l{aYf;%6hgv{aw;gl4sQop_pG*mC{$3Uusw)e3>%HI*A8eo=0sr5yO1vcEA$UXBQWaQJWwL? z5<=O7!c7;Sb8jXr=-BlHWxy;5PgbFSpuV=EWmtiR?B@ccwYPW0>n8E{ROsSO-RG#D zwyoL8PgDmGB%v*r7uYx7ca^LwRE4_gpUH63`C{~jtIfBowFw;d`#uo+jL=%Z$*na@ zTS8|*CLjDjUX&StRb^I_qKYR;>bl3B6|V5cWg-3YQ7coWg%!C zhLr!KU?%CZBQtQ-+w+Fq$1%rCEG(~-wCA<01(v2^OAS}6%S=S|iv^=?E&Cop+&iSw zpmt$M6^5}8ZPDoEy37hcn6D3c>#;Q5-G7%@Hc|PjEuLj@9F-l?jE(jh>^SqgUc5|& zziC~U6C|1E?ndpFD8&EY=M`rNz*wW!;1g+536*Da;V>w!P0tB$vl8-GB&1Y}5Bn`0 z=MLX-Ggsl&VS(%4w4+X}}M-X0{{OTULmf_mcm>aLZ-YRYKU7rMB^+XMPWb~45 z8!`q8jPh9U*5t~%H{7(hD0#IxF-}Hl&YC)Sz;eX~2GS@Z02YL)_l@iC<*AD)L{Ee$ zXd)OEx{YB(%K%oC29N7A53~zf%vJ|fyJNIfz6fg7=Vv_IEiTvG-D9RkK90Z&xvDR! zUgepXg0=%(U4fknd#E)5#5NkIeYTfwvh{fq=Bu+*-q4!m+sLh%L$ z+X7AdGW|fmk-YD)sfvv_~UzDOGGBFQqLow^lu|WaggFQgm!*!2c_U&pUc3 zmYC_BK0-U8ugWIjCEwhSKoX~TjI_QFaMG%(j>D2;`Un za_Ycamkd#g?&*RlT^QCXWTVE4jSad@zuYLLkb$5ihI~kgvxPfBYP&*St*Ag?!u+-= zAY_p0%fod?yaW>XR`_Ve)+M>N(r%#>55U+y=O+`TphZ)wT(rm1{q znSKaAV8k?8ok`fBndkr|2>`6rrIBPaG4@dKIrWHtFgN6+k7E%{Ra>;#&WmH=9-;p$> z5ICSAqhO&j5JIkM!-kmW2m~5o0%9-Ajd)_U>T@EHf*L<;&jH@-d6LhO`_3!pADR6< z0C5C1&RPGy`Pc?^_9aViOKC7IDbuTCy}kD{ahqOE9jKN%WD-x5Dp0ltgX&&IRkjUS zKv82ZZuxn%Rn^T6YmCTm3gHBB zc$q}UvzE$L+T_w;cp9!T%!T$4dr}DeS^$yY2}$}5raz4Ht!mSGHFJ|-Z_q2>`USYB z>^xRc`RMuoBU0nIZu*q@jCW=R@`Ka01|YHq9CNwDgoe)*5=sfS&Qk_PurnUf)Lk6m zN!bnZOQyXo7~9nDD(0w=KK^0Va$~KC#&NNa8Kqnd6e`*x@ocXnFl|ZBxsMUVKtCYc zT)S+!O5w_yH8_4Kb`5H3jB)A~2PDkt*2E>}mVYP&PqIHDL#gd)d=o3=)1ke?u`WK` z%n=3x91w_1EuL8YmEL?^-nNlRE8 zuTQINw5I)d-|+wq9V;}Eui;K{f13}`lN>_)uY~nrZeu0*6lDzKZ71rrJxQ~$ZRYoD zvSpf<1%lY$JtNLjksWV30?RREw|K7oJf6%VSQQ0l;2)cJ4(=cRy z8Wu^5lV?5}f+<(HfE;-KopHXRyAVF@U3CnGMZwbst7#`MnKX!tqAF0gpq-?+fss;k za&&mOP`n|l+u=5!I|^h1iUbTqsl4tj*LMp_*C1Ues6|QAhREhzfdCJrU?IXsur@TV zF)%Kb-vt9LwP)%8tNyeDw1Xv`E}Q@U*SAscW$v0>+S%Xmsv$W5EKL~c97ZOU<6@g* z;d@eAJognd*(a>Q)gTv~V^?1a`goQEUH|QxxE3|r94H~L2yJ0}8mw5)$~#~B4pYl{ z(xsjy!cQP;NAo!VMn|U7R*&Q~sh?I~p?(q?>V&?D4dY5Qi z{QJ``mX3*4YNa!w%5u$yR>v5{ z&1GdI?oOI!uCr4Tv2lw>2OA&x_eQzXmu%^3Z5Jc)U;!UDuObk}sh3tEsUS7&Z`2>Y zdVNUYRVZSL72-w;juN*KL5fTi4%~^vPOXaODqrgXXVZjTut+XR;AY9PPVRs(ZUQ=w z-02`*d$xVqi)xY9JBmCEMb+Klcd+8yttOI?2sZ?g`Lte+XgW5O0P+v5DZ@J(hJ4(6 zT};4Uk(qTtQspvXr1S1^m_oSPaLtW+RA07jSB;Z0Fqk6{>_(DekfV!Ivh1^&W+)RI z3in`RNJ*wpb1V=Ke01zs9%R4^nyei5!2(K1&yRrJenN}3qyWMOI*DPrr>O4Wsh+Ol zOmB&{<%3tnGF3X5BZbx%=x-+uDlLVsz7<7k5#GyX>vT|&?bC7;?g-Efg@RwfoNE?* zvN?1Tz_A(i5THj{bO?uM$eFR@uannfCln4ib3m^}$lKeX|a2%Kmsyy=mv^ z82)W1qhHcL!5Yzs30A94>Tzr+)z2_65SUXE%#5>(2lc6hO^!`&@g9(-PLQv1$~}-r z{|?xu>07@{5=Jdvw>gK+^RU)%KiVt#l0sjp*c&@ z#6Ka;&4cG!61C&KIa#m$lNdIcF}s%B?JN37=`_`K5^*Jm4CiL<1HK{WW@l~Xxo#dD z8U76k*$5dR9DQL&rcdu`R)>xQTt3xRh>I@*>@~rV-#Vr=G&jsfAGLv4y}Cf`vuB>g zk8F>Y`<0lD6E)@oLhjPPESc33GC1x$Nvs@owDN?jbD-s|=fXcaPN7V8mJVN&3M-=r zh{Eo!S9TQ=>P?2q12zoMq$F~NPSB<6vkqWjT&(;pTV^I`@O(Su7B$f3#~A5tQA+*; zr2(FqjqWDezwcF?$cVu}8oN8~A$_J?Dje0rzGLB<3i*x^5~r`R|J_HBXnzTcXA%>4 zxtt$EOg6d7acYY})T}SJ`~_*NtOyFTZIP|nOcWfWV!ld6Sl#UZvAD-5v|lVE1?XfbCWw7fDekPY zhUujRYc?4Vy5T?NKrcP!f-O@o%zoXwGxiC6K^#Wn1(n^5-$F7K+yn1zQXd%5WqU)^ zTeIE;-0rc209cslsGGFa+|)XN_js=jO?Q@gw<;09!W#QS{m?fi(FB>0ew#^3vo`Si zB<$GDb>q_vp10ZRauM^17R!=GNu#KI9W0C18g^w})-(jg1?{3h#8={TO>8L}d_qEU z;fl2#L6tbnbjfCbGw8!RWcv!{9g>_%>obe>%`vB3D&Cl~veAU1Bh*wI!Xb4BH$RCu zP5Ps=O(oSo0;V@SDN0u)20rja<;m%ce#rJ>JPa4RZzSvd4qixzk)E)*Ze8(S&eG>& z%B4N@qNajfgOnS=MPrDYM^15&c_YpRa+&bsYO7ZJwJM#1IP`{L`z02oa{?90Q2s=B zq{hKj=(K|_Cy*WQRhTf19PE4{Yt2XMP`o)sYL?dkNj>4E1fp&owdr07Q8~8ZH#v)% zx8PJGjMmRCLGri$sP$(|1;o{-!84)tB$>$g;f4OL{DPU%@>XLqR?Op2n8RNWF!gys z#fE`G95|6RK?@_CB5<%s=p z^tF{S!$<1k)Z1596YY9>tdPC*h~3BGY~PBZt7>-O{ZRg(sQEFb8^gavc76gIl$LRu zgpEqy$-4VH?4T^DRIny9_gmb+2zHuah5VtGQvk3-uedE0#8$^+6?7FyB%_?ov*+T* zI?x_IgTAwG7Q^v)(Tn(($gI3S8xt&f=n`nXg1FduBEuPOfRFa;e3UE}P9(oLWIC%B6y=p`)JLWxt*n zZr*{xXRw}?P6;lzR6ba4f$Cv3+y%~J2TcXj>?(r}yE6Kqhjd^ewD zfCU5aP2=~;V{oXX-*tibVwR*xUn7`nEx8mnc~mFeCkObX%h86X{IWa;^WQrpi3|eM z1b-eTwY38%Hgz%%LLJY37~X+v*ptWv1cKd8kfbMKMd(7?{TlvfQ-N_B5$cq8f&&7h z7_ilay3$2ncWal;kXMB6K6(4Mr!nF6{V19mhf?K%iYsIRd(%17apql#2s*Qf8sCu} znOY%h7jVzv=>LF-={7&jP(57w9(b3$CrzysGn+|8W%IL`QkXr&#<|b;1(<27Jm3va z#t zR-HNs21J_Q34j$$xJ;pNP0hYvIvAKN;Ms>~j-gwly%Al@05<-V5mJ(y06Hv`ljP1; zTQtO2&a8J=uM?gNcA^GQLdvJdVT&`wnQ*CxI7^?Pf4DaRZs5bmu^^s@eB8UR{n!qY zGZXmtMUTZhK~OkRyvrN&c8_rV`!p0Exf*Gn8&+=X|C7w>| zIrqUQ#tPDbPZ8QKKk~d1ic7?=$15C!;smTc35lU_5J_unAx-+nl5%`4qG=QzXt~(0G zbC{t=$lsE&;z^oU z;_&TWa}D%S*uvEd0>D+au;q7utFHTsgOJE-j|nOn6M}o#C*way4kq5#LJ_TAeZcoX zYi`s&|2t1hz{U?z2Ud2$HiTk^_c4S8>;Ls)<Was|N}0Ji$3TSST_uaELrgx%kG04@Cu{wrjPvIV(nia z1IbLn79X1uSL-e`L0hTKm)!S^g9cSPjT#%CtSrL)Pd2V3noxP7p-hh#sU#A8vY=~N zz7mwl)!(DP#9VSpE+SI*Na#=^5tgAaKLWIBAD%}0iVsWZ;AOxUZ4C*4p$LZGk#g5V zkNM7*@;iV3zjKhkS#G-~w~Hq;BdKGGue==RlP|gm0()XKbwTpXPPB?ypTWYh2Y&B< zZJ~B7AR^=gz(L?9?!y8m`K?@o+?!fXheRRm@+Z{t;x#l`1;Dzc;i0G5-2uG>*w#ue zvmNlZb{OFn!yLtkXv9J@sEr;Xpgr>3x1|B{Iz`o z{EmIOVs^cZy~}HV!Upy#jr&EoU-{Nw&s1xyrWBg=W4|XWGAQqMtdQ>P4n4`dZpu10 z=?C6O(8x)y;U@;2qzDGTBMVfgIjiDq=fU-32=@A-oLPQ0@(7f}h+26Xr`gKljyr)5 z<@T^KfA&eIa=r9;-pG|^NX!jYbAy4yJ**~5zQF`B+SM=IC-m58@xAU6x%Y%dOzE9Z zd#AExI~}yu3Maq28++(AS%TE|NtLtA!9Ui_$%ejOWV*c$B#rB$AObL>GK;AXV>>2> zP~m-apljozW&hYE(dOzc-q@j)vUsPHg0oQynBk+y_IL}V-fi!_bN7q)hYuWUgBlf{ z%@i0iHuT)0{Y1#a*$Gi>nvIH}x-a<6C&iCO7@Z0R%T)*MvWbaoPh`z5IJVNHmHnwd z8Ywqc*`Z=fi9E@mWmOC}YRM+hb+Q_dN1$-ySB^bP|Drhqkx{RYrhZS{ka z209)4;9Jp@yFDZ42((iA<+Dj3?N@Ppecv_}THQbH`nr<6G7a9eqxIe$E0Z3%;h(hP z`Zi@ElFY8ubkjT|gm9&zw*#qp9ZIh?3LzOK_cx?;GmP~~-<}TXv%qL$!MI5&aZS$( zYH9JZ6lP0hCAHAekk8RTK2DGYy6>pgLLAlcmb6*q0&{9A73XZLmsEf_`ZReDhpemd zBHOgkc2Kd^?ZsWxn!`RyI}%7|zG@16*id{c$1!#ILu=_BS9^n(Cv$=C$eQdZ+7cbr zj_E;!QPRvyJUP{p)Th3yk^5#w@!iXV%zzo>K$!nQ(mSKJ%`?2p8!2V-%*#)oCx@AO z3eq!zgz%*d*1H3{9TuL(yVZ9@urG3gT5yAWJmg&Zc*o3x5#^cVz@FR@dV)7MpUv&v zpcvch*xE|ee=uf!a7$NpRV`tf5Zr_|SI;*{d-tQ_Z(zb(l_Nont1M-6)V42Th3xae z;+cluqLM>)ETA*h(eHNWk*q!yC0!#x>uXP|4gT?4#BxJIw=EA(ESY$T<|jL7y+>>@ zXbNd^m?UiOZ@84VmmRz_0+aP(8K`zKqMqpBQ^irLsadG34`x-+p$RA5%q$qJb5H6- z_W7>DQ(Nk>Epo6}WfSYC8l_LsYDz$Fm{4_U0W}S*Y%*WvIY7!5#X``8lBnZ*Hs5F} zsqcRgMMJ3%Y{$FUnzZ4;*am>#z`KxT#2{ir7g*L9)bDM*%&*D(a*+il(H3kB7^JLz z9!2YZ@xiC_DrZ$xlYHjw3*F>u;D%9_6{|?VVB0Ye>(T3SIM(K@C2vY>y3o+{APZ{; zdK_QnWwof<$Rx@2f{`%At*5GfsCv7dLC+XJ@H2tp&1lQfsEkt z9Eel73&7_@F2Mcd^N$%tH6_&>`diYq)ezcR;%XI+GJ1z_g)e2iel ztFFbnDprQ0DpIzKEpVhG&JzNYvbhmC>fq6;h;SHmz5{EVX|-Hu&)KV9t@U^qzPx`pJp0C zaG9U*7qSzSg69mD*PqyPQlaRoMQ=VZ{Ia|SsN~WTOJ+WGUgX+7XI&?nK?UFDRF)1)qc=yDD?@bNZ^-Ymziat zflj$?v&9&dxRH_W4Jfih_Lmq|Wz^8MdZcY!U>ZAZ?44+PrCBCL&?C zh>b3tDkO6M0J%9M*BZ>CKn2bZrb^%_Mm2+pu6MRP^5l~+>~%9EP`5tVpoWRJJ2Ld? znSvCYs4J}!TxvX$hHmsZslq?l+%LTegG!f|+y#>q^JTV~VLCKfw>QpLeK~vGoO|H6 zimE*B>d^3*g|j_^KEup35KV*Tw@1aoxsW!_DwaNw6`?y(PWF3A^xLHykY#9 zt)9<|s-MEA&oCqn28H1%R!kL1F0u57#iV=Z{#}7Z=<(K0oXT2CjUpKT*r5=8gH(8f zqwRF95_B0+TMkJ`1f}KglD;!VAWVng&9p{bIl0~1X_vFcuq63j6vrCazF|DMGp3IV zs(bR;yg}|nkYFF=!U{Nz{J_&v!R}o5Id&XDr+1A84h-TZu+dO%wOBOi z#SpfoNPPaa4wE$TJ#-R9#3yaI&-YhBPxZ3NjEP`v>Zz}0V%N~hS=84jvh6_&==sgB z#`bdasb4u~MP0^xu;n&DUKy}fdVL#S9bN#Zd}9Vi=v;;kw>pWFflc_BRl3hWPI(@4 zUHNICDQVu=yk7h5P?cuhEXv+i#MjP83k_M*p}SS{Hi}Cj%nhbL=CqV;O(PTNi!hE& zpL6l(Gs-BX1lYOL6oO=S#J%W}@MGVKsK@!o6zMnwoaYx{Svk@q)#Ys|@;Jd15?0H} zctX=QxyvERe3D_Wo@SU`$O334%t<)*X~c#3E6$bv>Zuwc|6hZ;0+`5C>j9L2%qOq7V2CY7T{lC!mO?z(!)+B|hsi&(j8(-$ zl%ACJ*aeb=GQ>SOd*O-oDkOcqta`OT=?{x}CV_=4-Db^l*&*wYxKB(86uu{$c^`@l z0nuwJb_dFQT!~jep$_HCH= zrS%O}q_!e`nJDHwe|R~YO3y5v+(e4isVdEVqkxfq`^LM5?=uF zL~d;GLjG}koCBk?>86WLLNN^zNp1h)$4l^>a3%nGH1UCzjC#wp3^6Vrb$Uf1er_

8ejJX%`JWsLLL}HQF(wKFscfzWKn#zJ=q&&PKJxAFVi37EU!-X?a7)08 zJPxj*q}hm1q7&f9O}K*i*$tVTKmSOcVnPlJs+|uY>;6v96%u8^`+m93tg0iJ%^2eI z*(Virbm!ia#p*h<{g=ny3lGKgsy4tB5^frGezw*R{mJmpIf41P=!(Y*^74 zzjP%pgSA#i3EwM^zMcN>jKj)xN=wiVFEWoBdKWr#f6}~UYijgLIB!>2OnNe;32&%p zdzXw|?yw^gb_)!Nb0yLGi8oU+gwcm9(OFEC>6uERMrJNc>;T?O92auZ&h$==?1M`mXTsVAsm!QRCd4A9_q8_dI~yS0Q97BX@bv|8P| z2M$ewx_pxo6VmHU?7g8xDTc5k$~gg5g>zYx*sC??cLS>_Kd|uDDeAEY53x?aK-f<^ zm=-{&{cR_NI?_J)X|dZx>YSp)$!+nkl^?O1G!?&?7Z3L+NcJwYd*URkyJf~k(S&?c z6DPSn8@y+i_L1rMX)c800yBVtpyN2$7S0L6bK?FmYBJ4nreeoURFSZ)cMr+9<|F#M zRi&)JqDTng4MBO`y( zZMPOEdK2w8#+8bzcD+s^yz<{rI{{?r7w-`CK z*bg|}H#qCJ1$mEgHOiBkYvI*Y&}K^p0GT!DEweFA+^7zC5Zgm2 zuvuY74f4B2Hx*6<=BZ@p{!vF=u;IUq7)Yu7BM<)}MsUNsk_M47cjKaAUl z5WT)89CNj`blXc;_V2FwtUo>6UF`%A3q?32;eqg`EXc)-=X8PDbHb|to4vdM%Qo1O zveK(*pJ6cRs>;vj0GFB^v!Ya259~qE(941OywgetIs^BX%Gb5e#NYp(&s&~6zfy=` zSD%MU{`PI-s4?~(bn>VteZl`2!CuVLCJ$IltYFUgiB;y-u20vLZcwrYIDUF`YXW-r zp$G0<<$>>O;Mk{t{#Cemtw-gd4V4mCn1le65zF=a*w9Q!y#_VOso>6Zh_AE1aW19n zZ8Ak=yKbnwF`q*S5Vh2M|5*DeWfG36erD?HwHOf^Mc12sGN@h7xN?J|yBhd7-Gsg{ zdf<}9A@?@o@P1o#M0;?L&#&lh9L;DB9rh74{@}f9$_xW(V2pzqin(2&`l%EWr+q$y zS<%A@CTWEV?{F<~PKigX^g7)e9fmS;I%$HlOIq#>PI*4;WYIBQA#qlo>5A&!$NN zeAGEE1rXI9^J!lZg~wSoZ2sk;I;g?K4rb1M`}U~k9Gzls4{Xy!P1G#vRd?m82l{kM z)kG-*&8`sR!AArREN!H5YhM+@hMFC0CZIOrd*@v};wVjktV|S(KT-_5! zz;Hr%5|T#ln>>UhXJMMbV1Di*mVDS|JR|`=aX7_I&>7cH13vk*xhKX5Mze@&w!n0D z0L7dmo~yZYMZ?ENgTA{rI)V<=eRwa$D3$R|<<5{7Hf!ZC@Z2hkUhCuk3^*@7u}8A$?t&@kAV7Q|s1O&3IM) zs)68VWm@`)QQN|_kyy;1nD}1uvYn>c8GPj#sW>^(RgPBd^~Bl2lmpNALhv_*=x2M1 z5RK}IZ!j1pfDr|}*k4F+W$nCM^2aVuj`Mn@|C` zmFN6RQ#`rqLgK=SZt@PjeKE-<-MxDk&(YN|5dDaJ6`#P{0zdEMU{Zo7lK|^&(5Xcf zM2u;Sy&qdaL@HVdG2ZXI=HC^zUWA=`UfN)l0SoA@32l`wtTE=7#$dW*QM*tpknIMq z-iV-VR1*1B5T5Niou_4!tw8nC$focPz`gAa1zAba`y8NAUey@tamD6(Vu{^9wGO{M z=BoHFTCk#1L7jSsG}IkG2)ELYx@1{1!1N&OCy*$!qM6D~B8Speve85XnHuPbj?BW4 z08KS_B|DS|+CpeENnF!diKnjdU#WEkt`7Z2QkY4v(HhSsrHh5yr4^X=8E7VNCU}71 zyBI+#Nhho(3gGynppyPw;M9-$r28_g^m7ZW;-7U|^Br|9K78rq8(Q1zjR86Y|GRx7 zK5Afejtg^Z_@p7kG>=@={jE<=U$`lC+@}l3z>z1_ZfF94-r`Wid!2ACqY`3tjXj2( zG(FBlC>N%sn3?0G-HhDg5#V<*v1ax&*g7vn22Pe}pH=s#p=mI^C)As88xlkZuZwhy=XI3*k zZGuJS6LJ(Hiv}WB_&@)6%x0y1^4VKh$$OEDS!YFvj)1KCk~ai3Py)SvT?rMaf5Ma` z+EeSvPzcI_t>j+1_44UeEWZbzdiVghq;1x5i!I4^RDTZM=#5xmn@-{C!VYEULPd&l z39I_tY8yfr$C?=k0Y?`6JCL^bsQV*AnRz?uL>iQhbB`I_K#JZ4I1@~xCvENe4QHLm zZP|Dalv%=g^R%_yqN;b^zGih)4(Y$*_Hd+-07XppFYF(+wRfX&Jnh}HSKdNs4BVq@ zpm1ud8+~#JPlal2@4rL{RPe(Kil2l2W9Xf?VXsiAco*UZ%jsSG_X2RtVnF0`Aw@$P zWwW`{M+B|?O+T0M>EfZfMQUB zQCs=UR{_Y`ux>hh+e1X*rd#>dH={lc*5l?iLS$3i@W>)ab0}ul-}in~KT~twEYvAV zXEfk#=Nx+2L+m8btTEGVJ%b5MA7^%hl$7dgjv;qV43X2({O$F%dG zJ35Z8o$BpCcM(}9Rf?TCc}A)kr7XFJrqYy_0|ql*0nuF)<`{sidlR}VO&F-B8WMhw&*TWx?8YgBv zFbuAF?MytBUaqrN^qnZvw;v$`iQpB8N;>|9R%!^MW(=_0N2iOc&G@rd%J{wM17+LNEEewV5n*&p61vaa_d1xhD8?YBh+X zaKbKlgG+zhAVNE~%(&TrCA!RI7SXcsX#yt-(?2o6S(px3ABkPK0PHj zf_(TfA>?WPD)TQ0Y)JUzY41I>G_czbHR8Kex~fVU5EJN zR;BAZqYoUlaaT*vvPMkkOp>&fTYdxEVk#;>x**>H@dOi)BW?p34teK-ZrWGg0*)~e zz^`^#)O97#>FYDF376skisC$ zqm`Ujun02>5p%FkeaeITklNXrY;kf2i|DiAqjrzE?WE#E1(gwjD%U)vBuR?m@Ok%q z^2&Ji)~e?8h;zAejYMSCeTSYuiD^-?S|SRs!BLHt{t0dg@G@97bS>Rld3MB!FGSvc zZMQZuFa9lyT003T7nPG<8~rn*zV=?-4+gq$~{RAsSc@6I>a@XGyY(bkHhT34;1PwF7}$LXp# z-!>G0!pp@c!~KWC-ULh6mYR3WtGILa0%yYU6$#GQ)5vuLdYyF7eFxji1X~cRh07M_ zY4%L@dHCH|Sg;d38@eJ4B2DDFD~)9jaM+iE*pmDif)BAhu8ZPbn+m)5uLN|c0dQOz z)fk4bW}O$hpQFa)&W4F5#)#~buLkJJ2XZPvdLu-)W-a3tXFJA2ohL!`=aLbf7jLQ#x=1 z7Jq->-LSN8u~y4H|^T()mk=_4H@ArhCcrJTxIj^dFy+#3+NSzMbN@IAH||S-lK}M-aX@L-`&M{2 z)?JFuWNvMv|E1ZTQUQ!0nS46fqjEc=mMG0ByC_;IDc#jLNEYZs?3 zlz(q((rX&dQiqtXGAGgjP@wUt2BhjO^WGCIhc6A!rpd+RApn?*D@4#-V9!|%7<^$^ zX*eM;`A27ruEm{tAWt-Uv;-4M-9|Q$^>p|pEUP+Vs&LI*xdbz$tMh%(yS``c#e*l$ zF?eqrr;`B;H(UJ&W$GNOOz()rL?UP7+;q76x3OUR2E4!CdzB^Ky1lP|P31u#XXfywBGX7*FH!6YI56{hCXs1C>-T4a36y!hK@|jtm>qkd6*MM zPM^9l3NDpaH-Lj!MoF0#h|dRac?n6wmEbwFJ;;!>prR~7Xs&aMxA2|I^|infIkeWt zIG=wRL&=cs>cUb`-s!rb^xhA>J1 zk-@vEOFP5h}2YMHYk!sJJZVmJdl~ZM*T#_|36X;O5xqK z_Jm^)(!MogVEZL~vr#j;tF|&q$s^SC-Es-w3tMNWzWuAl=#=-SyxXYNnVAn|xbHaJ zE=ee+hz|@_5Rmlw&>a;Lb4gLgGx?lEL}uwtkYe+)rCBdE51=-rBnbbSY!q>tgSxIY z4~z`QkeRo*Kjyuu%d!H-3{n@jg|BT=h7eY|OQg+ZuPM=2DyfP=8K;k`(zxE5Le|mU{A8om0 z1fg$r#i35BS>}K?_7+|H4%><6V|9`2% zLIWWMi3L9GK~!IX7xT1?`t6a0t0n9&)u1v@R1k&r<5vEEtBSF#KNd7(`ml{1t)@hn z&Z@!_S2r9@`(wc_+igWY>5nbi15IQSF+9pL9wz?(7oRDe2~U>lkfN5*!Gk)2uU1+^ zS>KURw0!yUQk~$6GyPP^0jq6=nzp|(_Pvmq%Q|neOXJf5zSC;ozU{tIR){Ty(O5(T z7ky=!hX}bZ*e63;fJ&2OJTGf75cx2z23(BW^ZFRi##1) zLI6kN)h{1o3Zh!ro(8?FE^rzncW@$k^Dysy8NRv)2suD8aZ(;Wu=wL!XLk`T2f07C zEi#1O@v_DXxd|$SGm?@1AW*tc31^=V`^687@_oiou?h%{EZ}Is-6H88hGoCal&+4+ zhXquGD&I!8-?@_yuAAj|BWV3yK&d8wDhK}Hn?QSP06##$zaU`);l}y?ukI zQJpEnkGha|&AV+M{6b$`RAyR!^-iI%z%`jH-&A3*!#*zZwM8kHcerkbH!7>yNXjgX z*w(0LH$q$f!2>%}r56cifLjwy8GO4CeQTKY7awUP{f<~Ulf;ASk#>yEE+6~0iT13% zw%;PB`@J<0Nm6PseM1kpympE<(#Gb;bM#|158obE6&=0PWeXQKsOmy%(TeSd_yQgJ z?QL@9Tm&;CZ6|5t|8RbJR}tvvOXt-4JC_pIHZXEJAZQ3+DqkjtS$rpOO~}kHNyTJh zUm|kBjPW!TclJ*Nc z4Tcqqev!ft0`otC@YMQQ5XjJzX11M6ogwFpo=)u8!1M0TC=#~G#j>3oT~ai=EHN#d zr)V&WaM?;wrCy=sB+m<0ueP1_I5`ysNAC^w)-9BNMN7upQPv&m<=ULOi~v^;iGG9d zXjK6-JMzM3Y;?)u_X=PPw(9TCL)F`7@)j)}w zJo)|gw&-|vCvQL!;$+Y`0euNkB#R-m6^;m?J6{50=lA;7`F|woVn*si1i-@x$yptOccy4& z#s4*;@yjoR$V$icY3-8->PDX&i5qEs(Xd|CU^Pgq_jimYX#eF%`G*Lkn$wcORffsa zLeP+#f#f~E9=@c1CQNaZZ(Z?a^Oo7>2$n_guYKJ9qonJ=doe@jcUXa_V&5)z`Hz2F zV)~t0%$Kypm`|ZvKElhyS57LuL6WidyD8viH!=aif=$nIGNceJCj>TAvYI(y7$a82 zY%CjYR-Izog5<*7dWo2%pqhi=$J`$}iux$cdq)?!g|Ur%}OdhuRaZ6PK!i zl^bP<6-d`l^(cj|kIc-Kn?0s(zrRIixf0XmSz21oIoBM64i&CEn)<(cHDZuM*Pe4M zI{Y|~HIyD85{HUT=;evl&K+~$|NK+^;^ae06pfHNEZw)zsudVFZJni;(-vAZ0a^Tc zCiFzh;6gs43KO7>zY54lXIwZqUFm9=6?n5jLiF;y8<$1M#qX+FTg^6yC@$) z%rNvsp0Th}TUzlUgA2j|=9IRv0>P~TY<^l-)d&JG9WwFIuBC~eeGr>Da=(nDLPZ3} zZifmzp;ifJj8$EOPZx~L#4DE=iJDY>nU58K8}xIW8RtnLTq+%XrO))Kx#s{JOXO;E zCb6u_1-Hg9+$4SR7Q2{@R+K3F-ixIVY#-}|3lS~pu<1d3$PZwO2UPa2c5Jfx zl`{$z|I5F$S!Y6M8Y=JaNAhaS0Pev5BbSwZ(N69$!*p-yZzL+Ik=*#3ZYvSOzyK69 z=8=U6Cg5qXPp|498??s4Ee$yL7#LTtGafBtyuUrEO|2;(qZc9OC6N<&UUOvWxq(pg zP*oN$XvJ))#gEu>~tKfcdcvM^9y;G%e3iQLa94u5*@wV#HK zFIreTfLKSOgrIhBP#N4?4595D>9hht{aBatu;U^Fu3Si^^XdPOELsou9P^Q*)?Je3#4_L_k_{@S07 zAR3lGTF=#>kNVH{X)DuBl?vVQR{}Mj_si)}GmTDkFx%wE&NeS34s+#1rMeLpiE6VJ z=*MIUw3J>%|NNFtZ#b4o6>18I+8BNtVCERSF=|9%~bg=)s6CLPl!4z{D}Q1aq`;Jl-qf0>ceRXd^y2COr|4L z`yyb&!*aHi*)P6$gC4@Hw{xF-2YLR-B4W5^Igpx|C1OU&w8z&DY%IC@9%g%+g4>|R zo$us{4t2y%;Uy=T6P6yuSoPkE&f!a6YUDiF#Fk?rnzzo@=Zv42?zSSmAn3w})UGC31gR~y-Fx&mw=q}eZ z|M~pr%T9SDU=TkkN0-O1bJ34kbW?#W??7daWdkUcu$H;t+FkrILPuxFS(=Ja7m@Mp z1GI?Mus1ck6K)!QKLj_UFg(ms_LvgwGQ6;yXXrK3kKq`sIdkQ?UauMrJ`F@{=rd0P zex?Q6!%ulk4W}99z(Y_1Kc)AGx|*ie$FMi|``+g4045-1K%Vrp_uJoxH_wvYUGRbg zXW<=52BCwwB|G_GDG#2Ox-OaBTJb}WG0hbRjTPdKcObsN+Iod%C`($V9F9=-C@d>) zpp+gWE=J(?J_;=BSu##)x4O$Dl%~aaJ|ZS|FFHrui0Ufm0Hp%l>j{DGvcP&a(2#Zz zQ9PwchJ;*z0-ILz^R$?DFX?!lfy?INflTxkUFAp0g3C3>lB!XxpK!|IKpGqP_hO{% z#~RnjoVAE8q4%br2+)xvg2aoHeUG_xc)O{Ni69f#2})?$pV4g+Kz#$C=;Z3$d|RKb zX76Lo|518I^8fQP3<{gHp%T|R**97h+3*SZ9W5oMa2W9VK8S`B?ErKjWioe)b7Md~ zl-I!00YHg7uUsbhGanN@kuC!s%+?*UJ;`izW*dt(w){qi#KQ31*5lX*T?%?wKwL4oG|Cg0*0&Ex|#TH#UKWBzdKaj70~&H&CpRZ zBg@!x@+{l=f8D0hMjQrODRxQf?w}{WCl|F>kn)oyIjh^*B5A>p<93BJ-J4p3DM~t2 znuviycLaG=#f$`KuU$naQN4V`)%~6n!`B zSg4PS;a$v4dLFVd(w5V_NvPsz^Zv;7_7eAlEEkb`4 zcoM#NiG}miQAe8~UMooR&UHm-P#fVe!CpW}YAbfDJs7*3L;D%G_*uvB`e&0{JxB#lnA!!LCbYC%-eK>9N z!2gt4SUP$#TCSfF+X}HS63jahqQ#V?w3@10PKv!Nw_EBIfYodfD_M=Ax z6W0|}$-KR=!3vUYvzh{#3}X-kHX|+MR42)Tsh0vQjng@oT5+|XKw{cu06n#1AI~Eq zElf+Unlb^*U!G)AsIapjO2B~{u0tYq>Tqh{+*2(#@KIcGtVkum3^BFG!mG1m&wrk@ zYM~*h0`*w%Fkzzea-(69QMLi5+%^AgA?ra6Lis5}uXQG1D zOO4_jh(tI*6W^g(6&PYEf%i_j4MkUezCwBDFT|boNVF{WH<91&=gt#G1 zi!Zgz=+kvMr*Sjl)Obv@XaDJ(trew<|+5ESeCn0-(x-#e4oZxZ1xB|R%&?! z%Uns_5bA6|EIm*B2vwfl7DN($1x3l}-f9gor}N&PsIPTg73GMrVXJ(DI^nupiUKe& zuA%ePn8>k8xA;uZd5(bd^@7;ZRU%$-KyZ?r;=|ph8=*thr_-{@ggrzNE)BO1p|T86 z(Z@TzUC~uzFG5{Q3|h1YOQ8#=7Pzebfjhc~9W!y*oPZB-1y|LUAQD6^Qmk_J4OY19 zBbb^8nvWw#)FI_wW2^sAYGwsTvoa)m{JOhJyo=^WdfyM_KBv5@XHNY>&{HN)zwo{+ z1mlcuAb>AH`=LyddNZDFwHY)~V zCZMVta;Nryb?7+S^A6G!z6BR(qmO>GrZ+lJt`#_SI2~9Px>L-X0L% z@N5ttCoJ@TsFw*hfYTjSvM|{lOSL=0spWySEc%gzcY>xa^NL6mUA?r|ciS{vhV{~+ zmTE#&KSAL`+J~igQ+=W*`dD)(JhZ3yWl52Thq&K1vxu%d(K1!@Db$IXeQryO$9}gb zgUDLRJ$Mq7K}Lp;A=wb8%ObSm@x&Pai8MX*HVU=) zq{Y=OpAdcL$xLzA#~UhsYEw_v2gSJWU;4DOchtqs%7^;+Bi3-xs8XgC0IpJQ~s;a`40X+Xeh$bGRsFE69 ziX(k#n2lisi{T<1GwWN;z1s?c#Ikx;P~xtq-8X!g9q5D9tMeZ+XH&Is>AG)_0XA)x z)YWW_6s+HS`gS9ldEZ zf&QU~t$a#XboHKexM`1`?Fpj$l-COx8k}#?>aa94dfR9KeB8S->SLR_a6~zbc%Mzw z!wz=XB^I|xgz25tBjdJ@AUAd7Aea0}HO)XT)cE%$Q{QMi^K)%iDSHwXB7CH?xz6}( zVV0zU#3b7bJ(1q=^Byvhz`xYyD2~{G&aRlKEnSGcl`~V@Ersv6j=Qf$BROR*YKokP z=8Fyd{uzsbM()k3Tj*B60U8V$j_dEGU+uS@ldB;iY>77rWce%05PdtCbT%OXq)#FM zFb8r}eZP;8#{6C{G%5ZI%9{F9IO+|zy|frR+>?`4Rp#KY?~h)D%i566_NQ(ksK{Jt z(7gAorU{w>dBQ2^(aj5&uQFe|mPmK9zVct;#XaJ3>;0m5hmDW z9fxxTbw#KKWY!+#O+I54Tj+R_EKyk`(=6w_%^6&U#{@sI^`;w6o!>Aay zxx+GrB#+eRzt{xBI6xoTjbfo!WF~vL_gIYg)*znIK;qB=1!N%%&xNgq$E#t&0Z`w@ zU!mt>L}EMdpvOdti3kQDN0hrFrwGW_^IN&ZOL;a1>xG1EkHF%5CjWHFS|8WOu|2-C zXve+Rf1e^Yhfyi(rrnvfY|1Ny_@e0BWXY(Q)8q9>}|i;PHTht0GKSqukEDap<@ zaA4H;qhgD8paEK1SLd3>s;TT#Kg30#nR$equ{_vF3jpaEI5n@NY;liT#O4$kBQWAo zpIv;us!2v=9fm~~P>++*MIo>i73I#pmZwJy(c#utah&G#0xN>SYG@)pfHG%A7K5D3`DjjJgUx(SgeU#_?p z$vkI0{pjMr10_rhz#D=d{211BWGp!eionqX1wvqx_Kx9|ERrjyY0FXzd!#l{g?Q!T znh(xLH3KG8A2dax-rGN8GhIZ!gUel2fy28%#+ILC=^py$Gr3=iW|L9#u1vW%kv!dO4v6#<%cZ#s>3hT zWja7$TV|^Fyjvf&GI)tEZPSt{1nm$%l&Rka@2ix96mOj={Vq2wzaB`9i8(pkXT&U= zY8sf+9Ced!?I71nN0OgKy1Ic$KjNVXKMDL6Yuk(;MeC%i5M^8F|MzEC&Baq&iC?0H zA?f0=jT9K5;p|R1PbQvvoZk?GFO;pVdjh^rc6K9Le)sisi3Kmhjy!5fmpGCfVa9Kq zS8x;xqo2;NyqaMkb4HV5hQ+Pu*7Z1?4v|8C3)-F$vFXLYp(+^#U9fxHcV>9Dq^&={ z?8GNYaxS_(1}TMuxGki4a1R(;Izc&bJ`%l&IN|%lE$#7e-JiL9^BLQ`{3dl;+H&jy z0GNZusz#VTWt~VV-ZlbJP6!BSJaMe2dk>$4=hKwVucapThkK~ik)t{iqJAv z*kp9wJt;*G?~#~YjgN}p2CwganAlLrP>&g?SO+wIHR~cIWU3J#fmHB53s#AP_Dj!v zrmz?pUjthvHr5{L_xR;;Mk1?nGadyG8GoDGu3w;DxRA#;5^_VTn5b&80H)&eO5p6| z$oXL0V5YVRzvF!@Bur6{50Q2)6ebM>PdEK*m|MDpG;ewJQ<#ddAmiU3__9@o9|2~ERc}jCz&x$dR9xb{o+HM6_CRS+NE=Fu&Y*{ z%H!FquHI@@`}EV z?+Pbq+>Kz|(U$zi_@1LD9)jO38FA^~>qTOSG_7dO(eA3w=gT4v4HH8#8o;!4S)Xzn zyNjZ?9BVylX}D~z4P4a`Z-jnL7W&=Fw9Rl~wc{<*dZV;4+c$%IBTHaebgYn&=$DdC zLqLCv(C8v~o2=GrzyOE6C4B<4Mvm&MfQj@5y-RpO9Tk;v$g{~d0&-~>YTlrznl6e8 z)i@7fpwwCw>hlia2+cxnc@lT;2v`DSttN?kJcqE+`q+U_=TS~uQ9=L*J8HWUFfuX9 z6I<&!+`SOs2=>2tITFW1qdkq^!8S5lc@e&f)}!+eJ(T^o)qcrfaXuv>Xt@W?Crken zzMtxd2QzxlGj&9GG}VdheqmEL1`X%DG+wY%tvx)JY#_x^@sgVUF2%#suY5p(+}O*s zoY{X{Tf3@LGR+*CakBzOpLrGRY>*3cL8MyvNPVSDxufESXJDxM=7&P-*y+}DVqNIo=hc4Q$4hUmV_@Aw?N)>1lx;u@aA z9-A4_KTn8>vYkCqH0MOT!0O+1$mP6ZOnfK+{veZ`i1P2 zevax2>;R_K764xmz+cC}x0MyuMLwsNkGZH0q15&u11)famwDn{bwYvCjF*A;F{+Ez zRXYx!-1g4Nl<8%em8F0G2>PCmX%`KKC%XEip$9}6bhV07czuty9P9ljo}dT93Obma zIeg!UCdLzaQa%l}oE@W6I!tZwdo;NQ8(`T@LG|)WxW|h!9zVK>lKWTL-`rTd9Zddz z;CHOzTk*BGblBjVE|9c(Y6kxM#rIZ$I{;mr6I2EJ^qszU(zG5BCjcq2^$p_xM426~ zGIQV;M`;vkw~r^um%~;-lHS=${9^8c`dhlq-zAyll2`c2%)&OnYTNhrMs<)P?TxN>if@+Mt%w6|rYid{ zu7YH7qlYVR*z&KsJKDC$oPw=SNHJ!?JeJsa zWE={n#e>Gqwnn{LqB1*+{LaL{V555$6 zHV6Q2C1}L#njh@?nycON#0TY&dN#;Th3~2bfnl_xFTIc$GpK`WqKpgBk|*b|c`!rv zpp%EGAhMo-d8-v~vsQ)Bs{O_e!(%WQB6rZT96R9T72{jEd7Xci8%J@ML_7ImP( z!6#7$%01Af{{sacL2GBXmP)ZHH)31KvL~Oz)_}?hE3b~LtyoYe<*nPX$ocRH;vu1F zrU=OU=gztgva98Ze!^@x16^L!?f*c0A~Z^YIMaKcD7+_B*~#1#_QgQ;FwKRa5K6ic z@1u`%-?}=3s2LE>`!t|#WTy;a&>u(SqS*PJgeAy-&J9Ca^ zgQ2@97$@vG$K}lBt_J?ZvZRQN*BzJr0~v;+dT{V8osL&l0$aNymQl+# z*3aDBmz#vqark;v`1KdahOWopaaR3dk)TPx@GMNlPe%*3M^%sGnsR$FO|rVK`9-?c z1+lgiuKJ9cS9}Y$(<-!j3r1_Zc7jIU@^?0ATUdQmR?O$<4ft4l38_ro-Z8~Xu33sSa0~t9Dq?b;=qywPsyJ!H+qJTbjr8nhAw~)2E%CZ6zx3?iW|bFpQiiK z5M=(jng31&ET&cvXSz8{NvX0&GGD0+HGmt0tUo1sB@&A~4Ci{Gx98E>#FN0~*;9RY zX)DFwAJT));)cLZAD`JGAPup;qBnfYod^oCQ?*9ewgdZkG=t$mG1^564=_jbsn8fi z?Xc4?$t(x-sS|=-2o;kOzabcAiG-mF(s)4AKcO}BzG%11gN!ubHrWk{supxtZUGOn z=*h`0dm%Wr$4>f34ewKDhwFB9dF8Zm^Nf~@aA*FNC&K)CS*IK68zWF*-X6caF{S357BAssL@yn^fJhYWEX z*&q?GZ=J%-naRBBr=7~}(oz<>!|WCRA#$RcwM2K}Fz?hvW_RUO!a(ROIDi9Fh^eb2 zR5r_uNHQnIJK5M7sEv7br?qoJuSsQY7TQbW)PhOzGDuhM(C!Us(^?OcJYj61r^SAR zvs-$)e#F}sTpNGwSS9A8rhroPMie^eA8~QBSRvg`5I_gBs%f!_;0kw^i)X-Goht*M zn_K&Jx6E$?hS}zZf9!$>nF9ylbfqZ?BL&5D85$;2vqk+OKt`eKEatd_;=j21q>1AG z!IH;dU5wU=uV;wAccJld?XwY71nmrzG$&(ezLs4tg;X$^$t&_CK8Nxut42JcFeGik z`jRrYtcY@H@7bVNJ`wbM?sj_!0c#q0tNf;6t?X(ZC&rUZM-8S5mWzgPZFN3kh$J@7 z$$;wGP-1|#@uM+-piCeF(m`ZSzi4t+;P&aXF~$`soPnF}EiC@I=<2_5Ut?g}&WaN- zGG*)~3Vjv~F=JBjEN+Q7qzPuruzSW=Ejx;$#?PSSSDPFC*as=#kRL`T8%Z)!$8Tu2o zWp|!hrDQ18W-5bk3(g+y_XyzS7;&?g*FQSMXw6xS)nau!<&B&h)g?00jdmVI28WJR_!Hn)2aJd_uj7t6$4*AikRccT>m@(B zVs4SLD?w9Ncp)JwMMf*R1NbiS=twRzTlR9zr;AL`7LpK<2JO&ibdAbin1hb(!2#~t zf12H|=@hYTKnHi>^N9)4c?K__ zw^$l3=lFwfCoBruJZdArl7K84SL2x+*h8_*YiH@S7Q`+td4Gt9w-1Yo)(oEl3SY^D z`2LQmP3}nS`%KzI4IgI+AUH?Bu7o2pf=LEaKmZY)ZghaJRWd6A=ZO_gwKL};#{F7a zgO2OJ50nh0PAIXtyVu#k+JR(W0%rcSF(jktvWEla;oUlV_d4zHD;2+0sQUIynNb^5 zzoz>0`+XTbdm%?7CSC@WHLc+?AX3G*@d}64JYWlAX1rOVYzMw3(DDKaFDS3^tv1OA z|AzBwe`zQT$(3UjAeEa!k4E1L4&c}=F~TDYe51`)Pv;BnoxLN{fZTQuIf`JWl54Y< zK7X0T$uC|sHyV~|-S1mOk4~Xg(OIIN>CYOJxA!mkcpf(Vow?Twki$m~0SdCt4c{|W zOQw&YSe$qHQ?uRszT<{FwZ!gXvC-$kjj>&EObk`dBT=jL6oA?cBKz{iupmZFe^=$k z$K|CNhu}H7M5siN=vnMRGHZ_U-agFlSzCvFL(^joT-~HOKc4rch@LNX8Bd>5gK;0e zz8|0AHwt}Befa5e<&%YMwQu0yE!c#sSqVB?N7(3CFcfzto~B|jsm1)Q%M`Ii%q4HU zyz`i#iS~W^P*=-_L%rhrxUa$xUzdHyQ+LWR53<@q03iuHLl;347>Eo;wJ!bBejwAI zHu%jN>XfHM9n6iS2sS}_sNGkSzY#=J4X7ei-at4Fuw!$%QGW${k%F!w{k6}qyjlD< zI=33-CNf0AIp#hLjg4Dl?*VFzd?@}y>&7mvE*m;6< zQ?LcuirAHOJrhd0eGsmr%EVt%i37@7{2fK_N50BhDmU>3&JX!Yf0sjv2Ga>_*-vB$ zvP(CGhY7ZPChBr0q2bG6x_ig@`^&sCx+eA~cNjZB2JO2C_jM#G-(bXiBqxnuyGs2`mm$)BPk6Qsx6q3x{h{q9w38``I~QXHi`TnifB5 zNNrI(egL!HPTY?8BGRpbE3p7Gh*NH06sd20Z$16m z7lULTU%^zBVkyL!9(b7^AA;}it4SWnm#7M3dWFFcxir=k{O7h5Zn0?wKGht&`7449 zo0L@ob)3quR$W(MpY_iTD;QyVRqsNJpzxOcgK`@!Gz$D9+o$rto+tE~B5I6}5Jg~@ z6?wLWL&^ceiK{SjK4oR61@)}I8+TD9cPFYJjR-%(08=YwprFPqbZ?2VZbzVrM{E@r zCvNxyw|+&DX_?aoIId&;;h$o5^#kb-C6G)$Ob%fXFN89x{So?a7ZjnbTw?jl1?2^} z_mji3f9fc*2(MzERS@FGJn*_VkS}KKU-j$2hj54K3T$hI6`$M&w!dscY=F$-R%T|= z4F-q|Q}&F!;9?f9X6RU1L@tBmqDRF=1d4#Gq!ubg@Nzo{uN4i2`+E|Eanc_{rOjH{ zB$#IbB&pL2o@$JwRhs)B{spTufd9iTg~n5=jJJnb6-MY5zuzpAT2qI5*AO>1Q-$5m z@q<_-`88vitWlv&6edcYp}v5Kl#vXzd$1S|g$CIOfXi}fQC?5EtI+M0y1WcEKJhTW zG)AcB!iYrxjG!q6XhMS@TDh!Q9J^iXX!%LccA86vd#OO5zI`evJ2`JxADk1+z#&J- zj{4qE6~V~de}iBWjEd}f1rHys=1g~ja#bvFCDef*<6KH?M=X`Wn-XBfFaF?t=t_>9 zR|(}|kb55HRv`%ngqSS5v40Nqf=wVX%}2^JGfW3!dp}HG*D@m(LC?UWn^m~o5e-;D=zUR8cc9xY{`z*MsgGWY)i z1QE<%Zd4jTIhqC*ms?P9uW{J^qT=LDv-Y1@O!ea8m&2`0TEBlQDtYJgdhv<^7$9nX z7I(shmM#s~S0YE&fEJD=uuUNkz74{$j`JP%W(za4KgBQD~z; zer~^|cao0pLTUT%RA`BX9{EGL4+`+6U%Oo8S`EC`;XwC_aq%k@39ez>9Ga0v_TM~# zB23iqp?(db_cE=)pv`~v4gyL~OY@-jc4t{n+*W8%r|a$KuoE(5Ws6_kWN8~O-9?Cg zahYIg(Oc^Q2CSZKW2%6qc}6fvK1jsltgs+O5|xQfAeN@~T9F16V6)6&{2N^b!EBH> zVj{WCbwy_k2Bd|i9pc?P&iPqg5Fj_Hkm1^tccoF$$hy(e)e{4XG>BppG%Y`4*PEQV zu*MB>>Pnb8Ymd2CWgLm2?UWpwGBjj#!1J|{-vJ};ToEhUE4%!^TR@hWhrqw8wR*Y$3oa z2oB0@ZArMAD4QGC&jG--C?X;*;x+@-OwJ!z&3IDNv{kDsz-03Y+n+cW@uRv<6d;M& zbXMg%719=>Kb$B3%xq$y2%n;4_%D7cY7p>*X6B4v!+X__dk8m0%ETFY^*5V9@^h0X z6Bv4zoSBB8W;wGx$&?rtzN9tC3*%|Rz-p!4JkcjbwhI;@Y(#%;q+dNVlIb@!0G zxItk@BNj%CX_X^-nashO5Yz?}jhT4ss;FtA!-UmL?!6E?*Ww%Elf~%7Arzj~OuZK? zTpncj{U1AkKjZLRXo#bu`!G<)lADGKl$DmM<|&U{is^ZId@$g>g`Dsi@S|bp=$G6Z zYWrTPrc{k-;~`)W`eB?a&V}7CseE)^Vp$T$n$AOZES$nFDV#|spIoXX<_iGtazsZN z)MmCK5%*A(SVE5PnvKjTnZFL~&nMxZq#QZ7LYGj4xa}Caz~Vy#i>f7`&D04`6C(EX zPml!ztUrvi<+%ic_&0NW3?#kElt@D2=f09Luy?B=r^caZ0S(5gEcXPB*xmDRR4{eZ zN|f-|Efuam4SCVyX>436$=&C`PT9qY%Buf7%m-(F|KJI=TB~3wf^u}v=mEipC)!k! zfYmwBo8kuw!7W?A9qevfg=n`1O=J`!(C3`S9Pngl#lZVdk(Q6IaX0Kmtw}3{#abkA+kC0h9=}1>?ID{ zXee>KU)FiS^icZq16(qDONt9TcKTeEuOLZ{Ry^61|9J~q`qPO#({Y2h9kHHH3#zEx-dY3m`X zH<1SeiiGHcCNtAiUkI(*}*>Yo5DX%cS-1 zx&|m@4+7?|QgiAi7DXw1pi)+t7o2YvU4mk=HdNDA>TC>wqO!*?GN;g zE$WzlJj6C)d8KYG!}2F@cJ{F^#Z;SK%E2Q-E@hB^A^RjYC@RIBBjJO;cy1Uyh_Ge9 z+1{dF7i5Y=_+oMRwQ@D9NtZI?pt}P<35W`m>~cH4llL!_@NF9|c`R37H>O28NYz6w5yMRJMvFdzaj!(FpaERr!(h=>`zje(owz_i`q}&R%um8(7d&On zAy120b0lnFHB?Xw0OsalKAZfsq1(txh9SEN{7LN6lD@*MQG#yD(8H}F)Jk6GvrsQq z3*WJG8uYo%g!{}i0I6t;q+^3~-)|@?uYcqD z`Qn1G>V~PTH~YILsw~6Gu>z^uJC_z-zLdO(7GjzBXnRA7j8%&iSH#d>v6P++ zAt@kWG8gu1rQ%MN#Nyk*Dhm%G6&lfq7*y+!ylOGAThhqv{arf+GID;gi&7^95YoP! z9bF4c7s@o`Sgd6KsKQs|k2sUJ0V2tlpR!XlIDDf65{EXjONE}DH+l1O3-$Ih%Yol+ z3iqL|wU*Fo$FqA0z5+?va=oa1(HKpajNMp=`b<^(?NxPLQ@+C&hS{IjI;X(Y7e-+3 zh_9Y$mLfR?=XC|71y@!f4S!QGg`kF#z>&>nd&J2_wVT~wP8?c!=PIuVeC1?QNCCFnmGJaJjI<+k=2RgZ z?}wGKGJWRcohV6Ctt^&J{3xU2Q#yq*fAA3;506!fu{~iSf)@Y<$c89vXQ(Ca z{Txh}Kcf`&U8DK&Bm7B(L0codY;yTWVk+H=rVG1+ji{+ke_I0TwSb!ZDw(e9yxo_D zHwOZX9poxx@NJ;VrmST2rhWtd&fqEWZU#Xy z4S6STVYpK-J*$d(=9J1YU-qhz<_Bv^r*wn>AcVK#ad6SGc9?&JH0|}@^_ikfV3)-{T^^=al0MLb) z0*g^CycC;{beepKmvNJ|an1Em2AR-AhRy*<9YRHI4gCk z3MGeWVkKFGCfMimLCI8VE{}*>3_RmX7&K6=f5U@+R)z#8R%oadA#-@OgbXk)UwBCE zv0>o_LM@ZSvr6NI&ho@>{)c>FOS0+J`?^YW0!Fs%B6$A!^3vgl6R#>rR z)NtX+&LLHsQD{t2?(o#cT)O0`obB=wh&94SAAXGbKV<&p*GNG-aFnYuU-xnLrbUpA zn9?m}Yv%O|B49t6IZpF*Ii$O%&*!ZqDboh*T!ZBE;PwwZjj8rcIG9lV({s(G2?})+ z{*X_%YMD$2gWki}!vOht)`z9?A-My^kZud3-v5(qjK;8y}s)wK*M)nxVQP(-cx_sJ9Nv z#9TBDd+K)lU+c=)7R0{{rRF^lK_c78cJtl08itIYkI6oVZan{dAf6^S-=_gQ0Lg8P zJZq`V)C8A=vAqD48O%02IwOj@iZaM+;v~!Q&|O!FPHG7C6o!F3ZUa_nipLvyIZpTZ zJ_Cgi06=hKMQLk;QT?!mQ-|=wn-lkkf}))9b_vFq5fW|M@wG~%$fqzvNC<+VhppxG zrA(+QNU|gF{lSw{jFd>eU$(J!13R3`>e%zM@9F=LQyeY&Y-yv>-~ddv3LYM!W#a_> z@x6b}<*)z=#G!$i>Jvbs=cIwzU4J}nfLlBep{!Vwr|W)^m*m&{?8YDJ7@*?K3lXLd z>b4s!66oa~X2@e<;ettRdoUJ4Mkg2ZJ2q~d{ZEYM1N$PCx! zU{&hwK(4K1;eQ*6C-tB)yJar2a>6Fm-7Y^S zvz@wvw0cJ2lF61zM+8+2Dsl!ne+NjCj7EzS{%(?~ikOZ##?F#A*>%nLqn}cD`M%rD z>c4Pv-p3!y`}h^+{7t#bl_*h+U_PK#4mI12?S`)dUPgy|exx6#*AC}rwy@LULm5sG zn@he837*E0FHQWK!B-DS$Usto1LMkVHZ7~NKjz2-fl&iiH1Tz+Q#UhlAvYb2hia9- z7Vv7DieBM{=UA`$Lg0`UiGNclRdAEM99M9fNcwAinIoGGYW5;Yy;T>S!Qj^LeX8w% z?gg8;D$guk$cHK`*Mo3Z=doaVp6K06DD2;r9@z|L>_vC0-N+qrO|38o^u7e2zUM;(Lk-ZF&!qJ0U!hWK44 zlu$ueWeTXyS@DDEJTNeJrJy30;XbSY9hC5u$izsik!_H&^31uI9r4dR^V;6~20^$w z8b3>C;PKYLaYz2QvDml$&)!b3eX@dnTC)0}BCh;iC6&z5#@lMCZic5kruk}I;Sf0T z04qS$ztO>3hgc*+DkmECi#_t|q5+K`9biGLf|+vWEN36Hnw^HCN7+dwvZ?ixQ{S#N5XMupfz4 zrCO5HF!Sx2g5~XW{rcb;)B6VXTdCl5=OlI5p^-Fq{_$F(Hm*d`Ps8-X+pY>zU~p+! zEF&%UAx`CH6=lHWhlcJXg`wj^3?1l2YjEvL;EBs_;>9Oo3SXikyF={vhm-5KRMoBF zOAKEgCy?=-5|^QC-i4PYW#1P4!jm@^O{?LyPuhPXd@CuU{ZV{!N+f%#va~()ePn;& z2xA2B0;X#pSz;|g+lW25?8OgP0)zetLck-2^BC6bzeF_|K46D(j9-KWjnM}=S5*OZ zoeH8`MO;3@jMIr_OC!mcwUR#-rUvxd?&3RG5XQun3;82*NNXSIVuDnmo~1z@0J-sqb7~4#fDr zSMh~j*de{>ho$5#8hyta7W;GVC&_jv?m`~#LG?0G0TQ9|@}ayH$eFQY&O*iA$B1t5 zAqG?7l*>^)=wl>Zi@ayaAh?ma;a<7+i1^^koj)%GV2*LnGZdQ1?YJ=+oVv}Ty2`bN ziM8X{@4&TNw`=obWHxyJ6{=<4rmz z8QAb~Kat5Pzv+6&9uiFrA1I^AFV`(xY}XEPyZ+GMpud~AVCxBca#dG2A+Bxl6iz}8 zjV?R71p(x)lTQ(=+A1@wxaakb9f89W7-{#CPV-%Z)5p8a8g!CGpWU@aWgT$EtgU&ae7t$#B%O_g!8xMTyN6||29x%1x{XSl%3JjCuGzw z^fY!G#LnTaYade^{xXZEYvV!(3-qn8K4I_aU{BsFWow?Taa2Z2-mHb@N~jM?AkFa4 z+1r$J%TDhkGXDnc=&JjkqfgoXFtI!~3Pmch*aE{n+5utWA2>G*V!T$@k|rC?Unm31 z(mJ!i5WbNahryZ?ZmW<=adLFVrp?e2QYWD~zN)FS=_SqzwPeSq3JzJV7gbm#<0Ge% zYy8$tT*7;(7=Pe~_^_H$W za&7f-5)#U55l_U0OlNJDQmK0tzVRVP!nsDKZs1;e{S|gzW#OH^PXzgstdNp?+MpF> zTl5#>>40h$YTAB#LP^n#TQ=u=Xw_7V1(c%2?rHvdR;nKz7`x`m2TH;8myS*zpN#Ss zRb?(aRrk1fDlZ6b^Se-X!mG9ef>m;8XpUo4sRzwE(PibF8rW@FN;q(9+FMR?f?Kqn z-HzJxResglI%|PqB}lGx0&hsgFJN7(N#`)Ez?rX!9A~@zdX6+$@!r)PpaE06V5R2+ zA@4$MB|NSF(@~3YQG6LMgIX#gA-Z*|`4*|6ur&Qc!W-%!X{sDnr!uK#wPe!=N^Gg; zY?4am*EX!8a`0X%uPH^TTsE_w!v96NXV*L3jf7<@huO+Saa1rOr5sZj(h8Iw*!~?w z^J1YG^Y-2iYz1S`czg=jB#()b2IK%DID(%_Ais4bUa<<2Tw)UhFuYR9Ldks9U;pus z7I_-%-hR;wBXkjc`p#`RJg<0JejNsN!Zgo@bk_7q5)y%fS}eN{Q+>S7sLr~zQ^KRQ z9uU{C#eJF-W^MxihgAtR^8-D){ zUVKw;kv;zMri}c8@`q3+k|31Fpdm`Vg65wJS2_awE(Z@=piL8)(=Wjy=S(}ohmQ#a z5H51JiD5{I3Cfdfp`li(U12ZI0iYU;AW>A#c*DCISaz_ZRwr*0LHWCkR&TDFf*7?d z3cz=xtIIXc#usrnOQ`ub1ds!9!fp?4eO_*4>R~c#MO%u<`8!b#S?ujbIgGeh$7g$& z-Xvje%|Yj*A}O48O4e0et3RrF(d@ziJifdHv-9Rd*W?xBY>j$zim zzw>>B5}dU?X0_g8%Q^X+e8*!i=o6^FTsiI*3b>SxIN#7~-pOe{UdkztqF{U!8!?0e zj*lIWO!Me0D@y0Yo0R{&3SHYA*9gyyAzdH9zwc3NH|kU};gKC1PXa%WFPp)+2^Z&` zWLXyAq6=y3kRKxls0iZvrOkFPj0_@qC~H;)z(ZlQcKCP5)`*c~S2XIJY3urKsxTI> zPJI{;gISeZn8X;Ynipc3ejQNKvLJI4j^)eyRy5@b^QSjI7R4%|EXH);)Dkdu#k+zN z(13#bTNa}*&QZ6!X%S$E#%Ggiz4s=B{$VWFb6-KK4%mrC?B7(^EPo+sHP>K=Swi#B zUV2Q#l-#*G$O)rCWMIv#AMkWDE`*_etmsiWe^;f=m0~ejAG>+46GdHMn9W`)eg|QJ zcNf4KLJWvoEkGBmMbE-D7+nd z&Nh1bEJ}N+pXLvcLHbW8vUHK z&nwpYfFaGlIZUd7KW+;l+xbjDu7y(Dkd{P~@5M9!kdrR>sDsj%xtM$sqGI_^s{8d9 zbe}$*DoYcbSg|4!Bc=>{{l9glEX)1mwqHPYlB0`mmJgXO!N@Qq*w$#f9O@WD1L$4g zEJAxWrmG*SLOuoH0O%HaOb57u#&VfAe|uvCN7GeR7SIbl%gGhtEKOip6H()1aVx84 zK!nZP7MaZ0mU=vrUq&Xl+QwuI?1+hKmhvA7wF!5gN*OK~iq8SIsdyC%cyB|RBt&Jk z>d@>?+{4Yij5qJAGGkgK8EzZzJcowPRB$m2)0(4q6bks^7+-G8+1K>*0 z|LBX52MnY=x78QHpxZ&G0!jk{Huc4x=ltO!3o>ft`P(gbul^qA8@d0+Q^5Mx1Q1HE zV;b^+bG^@pGAsB}J9O{v!h@2%yvORFgdpaiD}fPUD?n z;eF}DAbOS)J-fJGb8cG4vh2{?czvx*?a8NH-l}UlDRz1#BAI*%vzA9q6oDk8gD_1W z*c|SHBLlW!ShgA8T8w8Z>YK-huV2WG1n>Bkf-fzquZz0`q5S%WuCNE*;K56eXlQbA z>xedjJbOoA8D+Vx7xB&g?;G|yNp*7n-EQrxz6VezBuTtAn5@MWheL&=Gi~B&dtw}_tl_YNl zF%Z!+i4FS0u!=r0odS=Io>1AWG2M?A3=}xUTi-ivrO-=IfmZ>nU+#gJL9=+CxKXJ= zyd#G8hbM*7Ky0`+S9{Xi#>vht`0U`qr}%{5YfZpjNRGcRuB>;3P9gFX0Eti-qO9r( z=tS`LoO(|R8ti7Vw(uc9S_Y>=iS=fNAduX4JWy=gL_c3@@NUHo;$$L3;o!7Q)+Fg` zJfzF&%u$oUi21lKnY|St2kk)bfrl1!Qp4`+HLP%lahM)g@m#~WK(7#}JJc#`BzG{5 z0NnVv#_W2W?Uai(UzBXss^=r$$ee{TV2feJ^_Pr$3=$&EGOONAonq@);)=pzr(6G% zH@o}#8)?6@hR^sqC7yE>;qT3K+*?~Di3eRP^#>YLg}-9$$Zn)P|5V3bqYURiq%_}1 z{KF?wzwTCy4g~ksdOny(%ZK_e{^ZR~e^gc&IE}dGf%PE3CD!DopG$1pBbFGa0|frz znp|W*evmc{)lr~=6FbaT+JL*5T2oJ?xy$Z|_LK&=Ls8^Mq|et?k^f6V9nWulNR zSUkZ(O#e4>6`X`R3bT!Q`4vDK6{R-Nk{DRz_502_X`Gb}ab&YFp%Q;8Agt>0WK7c4QVp9ewfy#| zIZklFeg%dO*UHF)_6~MB*JQW|G?24h4iYEglAP=f5m2iZ*QN1BZMyTYamtw(bzj1@ z7!K!6NCP2@`;I0`vBN$ix6dH%87F8=)0tNGEZq&YWP|Pb~1D_^?NBM8s z5&)Z#EwUstU2H)>Cl z434})CObB?$%-Jrn<#?m#iY%&-LOhxm*!kJ=Sscw3F&X@{_>)V^ZbDi*E+9BceQW~ z#nr7r1mp1jUaq(OXY{sGl$0HeQk-opnF79+amv+Q!56M|I)cJ1f!XNg%7Ja%SXxw5 zV!CXqWFw#0Hz=O#v*?4-W^Xq-d^Qf;hC4^biO$92B?Yk@YzEnr>4 zIbslrF~tg$v~&1-P|>(&+X;RK4>bwZ<1*YSg#*xOzH~UQz#;p4_4OO|rrp?p;nJAj zRp{W0pP{fIm7!!dZjs;gt~68=koizKTH?6>s^rZ)*rTrKD!NTfjMQjj{TI}y>fN+G zEn^KGl1CE+?5+lcT7zS?0H=!7!5xqTh>y2y*_oi&uSrQ0e#W^|jhXxi6gLVgFqh}5 z!4Cl~-Uwvi1)b+&cKD!a?9b(K+#NilF*ohpLMtnzSr8OV-Vifa0+;Lz_0x%Dx$osz z^I}Yu(XW&lz0^(*cqf}sL*`7|-ch$B-Jv-7Q?%leT;+a`OiejIN(%aes_qUfZX`1T z3XEGz0rGH>+%HnnZH5h19O0OeeBPOjC-maaOsB4w(oJ)+Mu(EV474#{cZ4QN?A?ce|D7H(d7Rv+>I0b#{cq!k-+B@Z#&)|ge-wW5BM7#|zZVKWAi-63dD{DZ~DAFMN zQZf;lkS*%>{VO#LdmR9qKLEgMMx(ml*)tgXp;P>v?I_0-EhMn;U<$MlA}m8-3$ku` zYyuDM zPPD0Y$Ydx>^s^x{Bpx3BiZp|VGN6=QDdi#D>OmAMd2oK|Qk7n;t9OKJC58D;v&tab;b7?K4>tB|bWY_05`n@)4~`oC^y>@T zT_Yg|l;Xd$efWkGIu6M)%vt@^Xz}N*O$foz6FT-VFzb&#Cii7^B~#^ju0X+Z_?kn1 zG~GLU9OdoFGb(^i8_<4()9OlsIw4qa@vT2Z;)@p^PP_Q)diu|G!+p8Iezdz7)Bj4R zc>5Wm#>M;&weLF`nsV^`*oc)Z9a5veS`OwM76+vaA3zK73Ms?rdCxstdZC{YEBckf z{IK1C0bz`CODNpnLej*z9Th9SjLC+!_9e%*OUBgIy_}-2CoicSHI}}AzYu)up>y$> ziz9sLyxBQOa;PX-khQw?y+-qH8TV2R=rlM!Wzp=HkuZ7Hk6$<9e*7{W_Nt9lp5~C9 zR~iv4`sbgy?PCD>14&esI?zC_=5sQG**&UQO0${CYfXFum!(TG(hYSr*-u|n&ty97 zVKH(TW4W`*ipE5f3igPfV%jQuRM<9GZ}TU~TPKENO;r&3VQ;~(MiSo|IJ5Ocazss0 zW9PjBj32|I*7Xuen0?bi^EquKuq2J05x9bGi$-Tn=0;o?Y`XFqITX58Tpt3OrdY{u zyrDr7x`J|glUn55LbIsXIbdJ!ux35cU3XtcCE!X}-w)!}khxaEG=RQj}!{ z(RTB4 z6ZLZJH86ey1(Mq~VlBr^predpxxB3!0H}+fZeWZNnqw`ffLe5{!-UzfczbjKPNbZ% zuQx%bFP;e1zauT%RNNPA^9GzhUwKQ(AK^&veTpT0lPGpfRro3Rz~HWk0P)(r5@&Kt zPlW2NE(V$y-An{Z!{jCy3tTCvfFAY^DF>qQo+6h&*iPcI_InMlOh_ax@pj?Nr?G+w z=CJjo&ca3wFTy?1omko-XL4`AkZB5iQ1>;q{#{e`-OMmx%(?JWQLx_3-tNoSYtN$k zS1sOZdDeyke z(s0L&lh;NId^7KrSV2Y@0S?f84x5HjO2JzxWgv^?$N0S>g9`QcF*!j)?=k8ow2J|Z z1P)OiE=0R~`NFw`{N|x-rpL@5ic_JtYg%iPndy;j?1dD<(~f=r7-@JnWc3El`FBm!!QA4 z(L9vrYZSBno}ZqmtJ)?c)Z=r!S2ZrZH$QH_ z+5?Ll-Yk$qs!bJrF@YWsNYd;U6b`e3=S-y!hp<<_*g&~(z;Juwcrv@&zv#kzHtZFW z?RBhCEn?P~fe$4xZe{0mBchmI_~b~MKU(UE6ju^@5aK`aqw{-pK*?^NSPcq?J^9h! zmQLc=X!keuEM6w|z9#@@6xN&vd^ZW711Jisb>oXej__%K_b${Z47pyZf1sz^Q?9~- zhE&wu2kLYQw$EN?p?f&#xNo!U;#aS5cq}xCk;7Ju8^VW0_e2Q_uoF7;%`&cj@ld7& zbFYihBuyrMk=r~(MQ9bV=4wco`<;34(-=tv@J_=k4q%B3Pu)@uom15avL{eUDqvHS-0TfiK~IQMEO`Rwt1W(@gH!E{9epEAK$|xEd=z0lY&Ty9Ja2||!*2p}2*}cV%b1jrsQ_Me*)o53q z$s_WN+0dmrbOoN8AIi$V0q}Jhtkg6o zi{j_IDO}H3V7Gtlda^-Y25}Wk{VQigm-ZyEM%c6yO z^%h*3dLfppUC~)l068)E(B&rGAAYgAijFA*J0cKk#((s5$20|-J0CkT@!>JzQGO=v=L)_In2NK+AZ~f;tWIAMrxmxv_b?yNOG}O@Bc2Vq(r4Ph{Kq&` z$op?IKKu9rA<@Dv+${acm6y9d1#{kmE(noNVkx%!#6fn{yZ5Haix95Z@RmF~sD(e& zDsZVgkg|PBfV`djWx2wfGjr+c5LV}N@IIiez<)UtR8liJO{+}}#N2FS=se=B`h(#x z6v@~fX~Y6*x8CHCD2N}uZ}aJRzj28l6zOB}qPkqu>&%(F<)xJ9yjw@=xy^}eWi?!( zX!9WOmeuhFw;vv4Y+T*4h{VjZ!)+mAP(D2ypTG}ccfPO{8-%?pMMmel>y7C;^12>Y zT$${plb(_0Ks?3p#ytL3V#AKc09@o}o1?i;;8%&cuwz7Le*_}o7T#Phe1^(nCh{zvQ}F^b8uyRzTCY!4~!-9S)`wk6^HgjNX(LrtIGTFRVvDKjOM3C zp_c?J2;Mmg%3cepDESCx;Y{bykRm2;!K7I2XDVqmeW35w;)#xQ8eY%X4$Vu&0=tne zS>aTS@eiX(Rt=l-{ewk1>>fAz6@Vjn-%-WGZd_T11$&_RI2UyekCVOcVdHjoBt7Rs z7d=iGmaa$b11Rc&5O=u{!m=Qub`gM_&a%g>)2WBg8=Cx73!}v(qtZd1Ooaz86d7t8 zZsEpPlSjYrJ8{*G@}z+Xk<@p2t`2NcnH>#!o!=%Q!0C74ha7;*A@Gv5bi8@>=w)?p zcs3GJF$v z-UNAY>av)vgP?H)gEU0?u0!`*!tovF4eK{2eSvLc3e*y2Hojm|r<_FzG4zm??Qqyl z<~rGUBn1@aG3QQ{Zf@@Lp7W~whV^XyvDMuzP6@?8mwM-q_?qzX2$kFY0e0e5`@@_k zDt;`hPhq?6XB5Ii>%gak9=};@+B|zmduia92G!Se7bjZ^Rel0Q>DAP2*5#ycb5qQ_ z!g+@6V-{3b0o14^#yw-zGpRrx%|l0^m<^8I?)qC>#0eN+=t?7vZ5!Ra_`_dti!A#(gbVb|KRz-@Zzig^((HeQxfOJqS`2w(t_4t6BqkHc*N&m#5y4X= zA7I{xPdd~IP2UA$fo^g-E#!66&Q7bI|+Q|E?=*L-xfBs~>3b86TV| zkc!_4kHjF_iCH9jB3-e{A$t7N#v}ndN35W4qvNVJ=FoTRj46M9iXMd-l7>~_>vyp2 zazYDtP}N|vw>++JM%;w?6nIdt_#`4+*UvZm4`C$7F^E)b=w zatbnjB-2H$0zHsv{*nt2KomxMCpSyQ$s-k7%$6wM_p0=R;$7 znl?^U`eNz_>AYpzgE&8vnA8|_8d&tK!XVlEx^1U(3ZUc*T7hF0Z6;zR4A!A=A!c@v z-)Kn1T!JW!2HYX6DqRD9m_ruWX)m>0jf9S_pS_QI-jBo=^6RfEBEKM0B8V^*uakVc=Oz6IE5N{4Hhc^x-C#>v!66w0j}LykeS#;l~vgtsQz zx~U-#SeF#j@R~E)bYTd7a}wTuEsJbWoVf%h!WW7_mSSm?dzpN=`wpEhB5TVmya6gi zAT|N&^UG8h362e|)ea7iGVF5Si&)?hWxv^J|^+2lnWrC5YDdo2Il+ieaM z+^r=v|NSZ|-G$8sX^7$;DGE|Ds5)@P(?S+Mn2w2k9N=))kV|Fp=qN89T*S(Hbv=B zGZ_zzg>pjQ0rgE4)bnq+h%QWHAK4QO!4Q+Eu<~WLw7!Ed)qj(Y`71=kx6oH53Q(1r zWhqcB*xoBj?GC)8#m-?PRs=C^(zFfnelY@3=DwZnplB;FMu4qOM?jfR%_L27Czvli z`HwI78dP$cVN*b+>v0aJNjtFzcCds4083AF*$~f$%Um%I&NNGM1eqcKY%% zL+x@9#B}ey31+r7(C8Qd7qjs7Z++uswVs(4#Fv4?FU5>UeLji?Jmo_5xf1H@c2$*( z*L=)U!P5aMPA%|1C*yBH18^W4yBT-Lrm$x}xiPm?zU%yPl!C`4r63~h$dV?~-t|E8 z>_tG_sZ?TjJqsgt(a+0Uh@_x^CkM3hcQi;hdx+GvJ>tCAKiza0!XP@Op0EmBTPtW| zgF&v9Qy}hX!*{CAy(nS*XAzw}wh3AQu^eaakame_7rP@F&|aL21NNrDP} zE6Vmxsy!|1fY@&qNM}RZjk*G(v&HDQa&_@@1r;d$q&F*ahQJCy3B!`pjH6$Yz0{+t z+u|n)5ZL&XaowQQK|=$O*5m`;C2y93vl@i45JR5UFrD=H2D+$b z_|Mhv!If~>cUdJX=i6~poDecU}r680y$8#il+ z`J^8+=S~53tQKZJL39~5H6>RXf8JmjW;GK+stA|hNasmSD!<;;*j5ZuZV=b=`x;i& z)#dT*hFXD*{Q{9>C{4({wu_uJj5*}5v)h2gR^l!l3V|68QX%&n6nAIozZxmVR&PT~ z@`=P$E}dabx~{=PT*bypvDw`nQqGYPOKJWW&a^jU{o1$V)CbA&`*dAGm`H~*HU(E{ zA)<83fuX1e*tLY}qNnIF(QzhaJkxUi#!`8Mh&7~a1{ep`@`>AZX$QzjmHR)zFWOCj z8vLt;JHA%UuNz}8S~+XkT2nz{5*SlMq2$%LxE(07D_dMWZ6gIzSFG{$i%oO6!%r@f znPxH|L24Z$XY;JiH4MBXyylM|#%D})(8a3k|Ak#m=Wl4lLzH1DP?w^!RW|C8!K-%j z24rF`Npk&?$I<#vlIo6?77)lrs;;=XKy*0g$bgSNpIiaPw$p!T_4aGP_fOeeTXb+b zPY#*go?$E6PTyuX(A_)7K;dCD2PHANw^Tc&3~xp7yhf)chU3@n=uMPVI&V@V7_}!3+OzE9PR&U__~o!` zs?T(^ndCZAUB!+95q}xx+2rx}q1AyuB>O_ie*f~4IqjO2QJlW1@Ad<+-e5b+7;7fc zx5mjq!~;TD~*s*Bw)tuOS^|rrAb`4l$obnyhz8wO#YcY-yejykgV(y zwpg*aNaREw&|;&%XIUE1%3c#$ckF(tTC^t!O}qEX!yIlR#WDjwHabqJ*AmhI61)MPaQBsXFZqXcqy1H$%_-k5+`i!KP~SgM zD>rO>wpeqfkwaTVY9orw5e7P+LYsM)Y;EY=649=-%(Swb^D0^gPX;?m2bb$_3Jlq; z9k4nkpf!x25?yfQvJrYyNfzmd2<0sKLHx3HMR>>8L#O9wL)VLv1yh8g9aGP&7Vgwf zzOU49PH6Fi!*?*h1)X_H2E=LmyS-CxRgXbhc7h0_Vl1Mk`+I*bNZp=>MRCnQQ1Yq4 zaPPkjKnTB6bnhHhL>UtiLQuy%G1%}&Jh81IqOwdojz5LQ_g3oh>YeEeX45auk~7FY z2=7S#!vrHku-Z>Q9Nq`vhHdNm^nMYZnK>0`WaPDqKj=kcC;i+x(5f&lnD;G#1BKg z_|p|nh-rFHgAqs{pQi5#TPrwXg|988;3BO}p#AK|%em zoSy_Te0+!TLm}A0)Wf>UcG(0uk}@Vn6k5BZR;>>gHXqB_l|MCGZSJIJtrMkArjnZB z%05;fq^HB;$}&?95u@+Lce;kt-VAYk0;nR#mN2`;913x23B zXkA->1I}zGVRGo*^I|^!PH;)(HLnmfq&R>~WjL5d7I^|gWoR=cA#o%sznj*v4~d11 z5Wl0kih4hu4kwO_`UFK&C~I%ddQBpz92PPhlS;5~E%v-xAq())T+z!_J0$@izq@LT zZ{aBBO#gMcy#{4a{2rbn+_|!mYhY8L)qHanrsr%(kdYS*xoSnVmMex?J{8XD#FboO zwK@XloWG)90y?iF2JrwXfZIwckA{42>>@5QaJgtkDR@(+kXCpz4R7ne9j_kUH&V6W z`~kC_n{aVF83D@CB8;7SDrp;jc2)A2DAY8rBreRy>p`iq=~B|SGOc!8%2 znTwkT<@RW%sTqq9mcH>e^gBjHloZeuchw|w%xS55vW2lntFY{|LGyyC4GAM*Q^s?0 zr-hQ+!`Ue|5A!-!@f&42^@==rGFNUk{FHN~y)^}~^nnIT9pl+jM`aGpa6*x4Xojb~ z0!>Ygqzx{Hcup2xDI<61PNGjf{UMA5D+@DH&YOa7og54y!hPo-bX0GfcJos*|M#B) zXr7t#Rdk zWGWvL?T&}&cn_$olRFtooebv94=rKcgKUXv;Sc4^i;XoNk>9sCynukFzaovSR=7P= z6H$j)E*>~$S0gOlO@~rhxJv}}YI)ThAKnWM7Nmw7M_^;M%Wj!v^n|+5)jB!A{%d7n zmEcg1iP9a9VHd!i!LYBjd=XT{=IKXgnMFu=kNg80(v#bUDib6dYVSqG{i?18*UZ<< z`~S5$=o88-i#&4bsfr7W@+$y3u!U}-m^XTY55EWoT2!u@FDLzI>!sGlIfJRi`!9{M z(8|KeCiol`F(9|6x)!3*AH0@t_U=DkKWbBG-(Zg7_lmDYq(^L zU#pV=Muy0Ow-SeAdEB+t+5DEVw`mwWIF$}(w=@c_ZY@lM{k8xx`RPOunY7w7xjZ%| zLe`?wBR6%T*|Cm=MDk;@u#zHp?qtnqc(Qz0qxfTHpZ0oc6SM$Xe<`f7;c@>L{<0h< zVc$S}81bZM_6)fdN`B;1x;?@)01p*2BuHx8-1VaGoxm(a2f=Gb_|&yeUzuD^qrBA5 zE+IEVWeDT|>LGEa(}BA)WS_UW#Ybu|iG6?rX8BB{9O-Xunsiw0&Ci5v%uN66JyviV zn4IywhmAwyO=(eerN9mKE;WGn(_%`UzGbn7VY&rcqF{e^MFyI2Jyw0B)H{nC;-9+R zzDm=Xa0h=3<7}aKBIwbS=mVRQG}VEoVRQ;AS0=g@Q|3qBx!t=kiP?>JnFV6+LtIfX zc$AsU@AOx&o(kToX<#MWcFvseq}-`rI1iO}7hzqS9@qyw zk9v3_qR`T=+N(&mtpPu)ItZV#b#P|r=DSa&9xen~s#(F(e6C}l8*4Ir1~e$$C!Cvt zbBCqJkl8Nb%wAU`uVwCTIUU~&^r`@AJyN>QiyYI$Q_2rKYVj2Mn@SEHL3a1Z0o7gW zx(*>JXLQ3~rP0>-MJv9nE-|y$+0!!&+ME8Q$THL(arhMEA1!BdNjF-iFE#YPaBQ)TS*D8XVW2l#(F4ko*lvx$GiWT{ zVsolf4g+Y6n;nq@U)c>_dsV&!5L1BF2CByBn_bgT)Q-?g62)C_nzU87r+fa@9>%Pk z-etcFn|3%fw)O|s;fKr0PPZVwm(JLljF@lNwAqFN5kAjra{^vM!V;Am(1k~9*p7c@ zdL0Ra)1gbp1>=Q4vaoZ02}DpJ$Z?aE!g(#Ea!cB?AzPw;3Z*s7dW@J>HxUY?bOzx* zSG+3g8@3#*V;$t604W6OF&rN1UDweGTI*u;i^V5J*icxxZHb_CO0x^t<<-@{+9noi zg?|C&D!vo1>c!<2*-kT0iA9ct2)N}|TIYwJYRwBSqC%=0Vaf!@7YU&WM*<2H)`#w2 z-9_bRZ5Q>uiIveI`MuWE2UparIqw&zhbFQY(#+W*^m{8MIqSO98~cSOMz1&S6mg5= zcF1_@G!BfzXrY~(~E2JGTFyt}M5NDWqcJsOiZ+5kPtd%%kgy^P)2!J+HQ=L(_ z80HYJItb_Ya3Oph-8OF?{9w?{A^Ey+!N~1L;K4M?U+#Dt6#KhDp}=ueGn%hvGz){f zqNFT{e+;M2Ip)M9Y-}hewY5c5W}B0^0Y4&RNi^1&jW$1H1g^{ui0Z#n&>k&7o;F~8 zriAA!{qDiUG2ed%NatEH`S3v0=Z}@=XdvQ(Q}oNMVz+C@q*8PKpex4!(_b(1>P7^l zR(_EW;t-XBUu)FaWLwd+Nbm}La_$+Q`b%htKbp9H&ii|$t01SPO4+^fQRu;{LGw)B zIeE{08r>#~Kn5jfp;>PLqyoU+2D`*7RRTnpq}K%Z*C5-`_kYJq>48=JvPTgw4g63fbd8%X$zGGL_v*K+Xj4rXh%g4`T=d|dRh7l;Z z({f%Ev9VXi*f3SD7wU<6M*4gyE;WE6tdu9zB07We2iR*iDScDsMWGYnhkN%bZaVYg zkIL(jpJWsbF&c2eND|1=sb{?WZ-?D&5)`}O>taDIGG&uyVUcXUb7v{EUq*=yS#!9o zYr79lie`>e6`W{>xJpxZ4zpnawA_xvGV7-aE(I}W8B_LP=#&+^ zflXyFJ-$i}YkYi$Slm_BIwHh$7>AD$7%HY1-;2n8w?G4=0SiakwL_aF&Jl(4B&2Op z6_hqj5lz{_3N$OuZrrcR98jy9!T8Uo{XdY#s~oS^5O|CJJ44*Hsb zvY5}5AJeZs%_<~6!9q~9V9tMt+%%`)COE|tVx~ndnlD)vvmT-@uhp{eDyxFj(&KR4 zDfbr-BtcDn`DSL=K{p{q9ut;4~Lt;W#5mdmZ`F% zuyCjO-&hW;$YRyc0qCWO_o$mJ$BU1Qh#EsQy>#|3+QDAztX(vpI(z2?t{Ces;f z4uv<5bU@eK3PIdg4sp;*PhzP+Kw#(D2k&S@O!;@4&TR*st9K=kklah88+M&Dw_%zZ zuQk0p(}l(9a_jg_)tk`VKp5gb>ya6L&+lisXK$g!iiqy($nQIO!+o0P9M-^!ty~lbQtG)8Z|e zvxytzd2dO{FqLEUa+Go@0T(TirvAMw1Mem#SbaN2d{Z;zynakiVbF)%!>{mU=co(LO8e*Cz^cLwGXryh11Pb=8Z017mWQ zznBGg0BiSx*H!t9#brIi-xQDzX<^LlS-~XWsL439b0|_K zYV#B57G4hY>r0`)L^`UgYuK!z<F!++s~ZwkAS3yP{p|E zsam5VTUPw?PN`h+2-YjjZbyEDe>oKtb{{XG*iWba=SD`HmNOlrS}Pw67}PNra1J&y zp~iYl%byavVHB;ACO;P6t4Lx)UJ<~_SBnJ1V1`IrKwjnw5!GhFTPtH4j8~EV*{4+quDz@0PP*WM6-ZcY3?m2Ra=XT5FOK9 zX2H}kZApCsKibU$=1#(DVv1s6s^@id{kW{}E7)&T`5Ol+;Pj0^p4-pJ&KD|?I3c^t zJwxy28Zd?f!>OIpXs!(^sLwhE%vpA0VI*G8AdAsZFiNv_JE-7WvE_mXp>~L-!-V=3$&0wlys{EKg-kXcscOxw`7Na2&3{8!1#@ONMu5ympUO&aRd^-uS78WdW0 zdG8i%Y0@_Fa_=Fow?CM z?AjWG2N+g~9D04|IXMqA8S-?GCElb`(~WXrg{m6ZVXD_oYf(jVGEAE*n4w$p`~YGL zB)v|j)LMeY6t{q2ET@mwByjw->(%*!C!pP?X;`DIF(T4*J;zUPHx6q%UAAV0UBbu~ z#!0Y9H>7Ok*U{lPl*;Unj?K@qmsvs< zV=N|Xc@O+|!4`fW6QVhEh|gx$teg{6q1#dC`e>i>j|6CYQ?}7~P=K9GIK$iI zhH(Hsfi~F}r*ckPw3$%DNWXuUE;AvIQG{0vN5#n4{|V$e=VKg{N=!6(Mk75-MkqX2 zQk=uO_UT3(W6&+n8ft~ykc_1RZ0duC{m8y`EL>bp4^ZRBw&P|zeGzNc57Dz|$Lo1& zvoo=Ff{QkF+;jevk?KYeL=FNSf(6~d+-C#U#E8|^Bbmd_C`Q916B< zF-n!QP^>>fak+at>yZz=y{dgLwc%JX9SD1!hXCJ>2PYG#2TsF!3Ntx*U`mEh8R%AY zm}FAIo8IR}#VNR2NVf>7=E0$Ur0Tk-htWRamK~lIA8$pf3*OIrl4HGPbC;dW1u7m2>~!V3G%# zYRyiU;&x1usU%hxcw??AWaDt^dYP$5u`Yx^Q;5~0NgJ7p@*c4!{3LQx{`70QM3msG z0)6;QreLF=00=TxbL-C{KX+>{An@5glqvrnzFE}|0W<#reQ3J^%(H=ztY#>pUU#OX z5kZ$=c2i>X)03QJ$!#SGIqDC1;B4FuK!_1EM>l&i4P**W&K4*X)sY0HBw_*73T;az z7yUIvysUPZ=OxzSB@A-hQmIy>0o%fKKYoXXy;Wp!(&?54GI~L#c}ezcQN^N#t2F8# zGg@uq%FL`<20UF%0r4QL*O)q-s(yr&4fEr%+==&Xj$L2W?g>$}zdMvDiCy6Tvwf-~ z16_>j6xP8Yt}e`V4rII(*Cg5Z7xyFW-U2CV!fuKdAQ}N$Nxsw(vYBmGfYQqFuKSx- zl@Iw;QR+O^$lxV0eJivdDLhGa;T54 z5mARGlOz>1hqT=kHBg4)PWoaVJ~RGuLG3EPl}U9B%4+7eXnkI9xSGdjL5uK`Emuxk zo{w2kO45>}ZeAsTR#(

5#Za+c*6P=J8VpOUpA9eQcAgCS~d!T);&OO_Z?FAE?JSMhv}QIsXC`jDfgTz(lee^n6AN@X z=x`WVNP}W>rTtvEE5kY<7_oI>Kf!2Z<^l z0q6o3{e&>Q06ge&`jpe@ub%zxX-7B9oJuNGC9aw#FsS#U3a7rM`z|`S00EWk&ga#H zqVS-qyzbMb_qRLM1{X;3{=JkQj`qhtF44?W@JGev+>72A>VaR)z zto*q#7X~npWUu$?c@t5}Qj}xvNSv0BTxbC-BJf1`B_1OSxBXOH=!#9Laz(OfZ1O>tv^r9%5UU6te|BEELMntzVF^`AEmD>5r`W7bAdJ=C@=DjU`iqpv`a zR3O-}#K)-MiE%wz;Hz>?sP(_h>EUU1%Bf7WcHElaQ=+#Fnat_8AyP`>q=5*gtggzblBngv~iL zkU;=-1L#QQjyI^#EEBjr;Z_rb>(6AlSmZ7;W*cd?y-FM+?aR?0)yZTiL@?C9!q(ZQ~iPz`1MG71cy%h;bZEd&iRF>u}V3BpiCUEfuK&-gX z)VeBZBGV?{8jsA7IX_1~xDYpM>R$_-Q|f$JxA!2447fUfFuJyo1{B7(pFm->Uacz? z)zcc6W|^^Zy{%)uvD6;+z}yr&|I6U8CBnEX{{)pF-Ku7yvbag{E5Kwg@8fL;LTwI? z1P|XEv@PftjtMLsHdVZK+B;Ksa5@po8e}|jt540G1A36APE`8wNcyi40-8Ml+v8vq z2F=|N{u|Y7eCGW4KJYDj1@1Gc)^g^~W&``lnOKpoe2)MC0OQA1MZJ}o+yDX6i3)(A Y)C2$k0M%KP*c2B#FarPp000D8T01=OssI20 diff --git a/test/sysinit.target b/test/sysinit.target deleted file mode 120000 index 330133818..000000000 --- a/test/sysinit.target +++ /dev/null @@ -1 +0,0 @@ -../units/sysinit.target \ No newline at end of file diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py deleted file mode 100644 index cf7d46736..000000000 --- a/test/sysv-generator-test.py +++ /dev/null @@ -1,391 +0,0 @@ -# systemd-sysv-generator integration test -# -# (C) 2015 Canonical Ltd. -# Author: Martin Pitt -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -# systemd 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with systemd; If not, see . - -import unittest -import sys -import os -import subprocess -import tempfile -import shutil -from glob import glob - -try: - from configparser import RawConfigParser -except ImportError: - # python 2 - from ConfigParser import RawConfigParser - -sysv_generator = os.path.join(os.environ.get('builddir', '.'), 'systemd-sysv-generator') - - -class SysvGeneratorTest(unittest.TestCase): - def setUp(self): - self.workdir = tempfile.mkdtemp(prefix='sysv-gen-test.') - self.init_d_dir = os.path.join(self.workdir, 'init.d') - os.mkdir(self.init_d_dir) - self.rcnd_dir = self.workdir - self.unit_dir = os.path.join(self.workdir, 'systemd') - os.mkdir(self.unit_dir) - self.out_dir = os.path.join(self.workdir, 'output') - os.mkdir(self.out_dir) - - def tearDown(self): - shutil.rmtree(self.workdir) - - # - # Helper methods - # - - def run_generator(self, expect_error=False): - '''Run sysv-generator. - - Fail if stderr contains any "Fail", unless expect_error is True. - Return (stderr, filename -> ConfigParser) pair with ouput to stderr and - parsed generated units. - ''' - env = os.environ.copy() - env['SYSTEMD_LOG_LEVEL'] = 'debug' - env['SYSTEMD_SYSVINIT_PATH'] = self.init_d_dir - env['SYSTEMD_SYSVRCND_PATH'] = self.rcnd_dir - env['SYSTEMD_UNIT_PATH'] = self.unit_dir - gen = subprocess.Popen( - [sysv_generator, 'ignored', 'ignored', self.out_dir], - stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True, env=env) - (out, err) = gen.communicate() - if not expect_error: - self.assertFalse('Fail' in err, err) - self.assertEqual(gen.returncode, 0, err) - - results = {} - for service in glob(self.out_dir + '/*.service'): - if os.path.islink(service): - continue - cp = RawConfigParser() - cp.optionxform = lambda o: o # don't lower-case option names - with open(service) as f: - cp.readfp(f) - results[os.path.basename(service)] = cp - - return (err, results) - - def add_sysv(self, fname, keys, enable=False, prio=1): - '''Create a SysV init script with the given keys in the LSB header - - There are sensible default values for all fields. - If enable is True, links will be created in the rcN.d dirs. In that - case, the priority can be given with "prio" (default to 1). - - Return path of generated script. - ''' - name_without_sh = fname.endswith('.sh') and fname[:-3] or fname - keys.setdefault('Provides', name_without_sh) - keys.setdefault('Required-Start', '$local_fs') - keys.setdefault('Required-Stop', keys['Required-Start']) - keys.setdefault('Default-Start', '2 3 4 5') - keys.setdefault('Default-Stop', '0 1 6') - keys.setdefault('Short-Description', 'test %s service' % - name_without_sh) - keys.setdefault('Description', 'long description for test %s service' % - name_without_sh) - script = os.path.join(self.init_d_dir, fname) - with open(script, 'w') as f: - f.write('#!/bin/init-d-interpreter\n### BEGIN INIT INFO\n') - for k, v in keys.items(): - if v is not None: - f.write('#%20s %s\n' % (k + ':', v)) - f.write('### END INIT INFO\ncode --goes here\n') - os.chmod(script, 0o755) - - if enable: - def make_link(prefix, runlevel): - d = os.path.join(self.rcnd_dir, 'rc%s.d' % runlevel) - if not os.path.isdir(d): - os.mkdir(d) - os.symlink('../init.d/' + fname, os.path.join(d, prefix + fname)) - - for rl in keys['Default-Start'].split(): - make_link('S%02i' % prio, rl) - for rl in keys['Default-Stop'].split(): - make_link('K%02i' % (99 - prio), rl) - - return script - - def assert_enabled(self, unit, targets): - '''assert that a unit is enabled in precisely the given targets''' - - all_targets = ['multi-user', 'graphical'] - - # should be enabled - for target in all_targets: - link = os.path.join(self.out_dir, '%s.target.wants' % target, unit) - if target in targets: - unit_file = os.readlink(link) - self.assertTrue(os.path.exists(unit_file)) - self.assertEqual(os.path.basename(unit_file), unit) - else: - self.assertFalse(os.path.exists(link), - '%s unexpectedly exists' % link) - - # - # test cases - # - - def test_nothing(self): - '''no input files''' - - results = self.run_generator()[1] - self.assertEqual(results, {}) - self.assertEqual(os.listdir(self.out_dir), []) - - def test_simple_disabled(self): - '''simple service without dependencies, disabled''' - - self.add_sysv('foo', {}, enable=False) - err, results = self.run_generator() - self.assertEqual(len(results), 1) - - # no enablement links or other stuff - self.assertEqual(os.listdir(self.out_dir), ['foo.service']) - - s = results['foo.service'] - self.assertEqual(s.sections(), ['Unit', 'Service']) - self.assertEqual(s.get('Unit', 'Description'), 'LSB: test foo service') - # $local_fs does not need translation, don't expect any dependency - # fields here - self.assertEqual(set(s.options('Unit')), - set(['Documentation', 'SourcePath', 'Description'])) - - self.assertEqual(s.get('Service', 'Type'), 'forking') - init_script = os.path.join(self.init_d_dir, 'foo') - self.assertEqual(s.get('Service', 'ExecStart'), - '%s start' % init_script) - self.assertEqual(s.get('Service', 'ExecStop'), - '%s stop' % init_script) - - self.assertNotIn('Overwriting', err) - - def test_simple_enabled_all(self): - '''simple service without dependencies, enabled in all runlevels''' - - self.add_sysv('foo', {}, enable=True) - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - self.assertNotIn('Overwriting', err) - - def test_simple_enabled_some(self): - '''simple service without dependencies, enabled in some runlevels''' - - self.add_sysv('foo', {'Default-Start': '2 4'}, enable=True) - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - self.assert_enabled('foo.service', ['multi-user']) - - def test_lsb_macro_dep_single(self): - '''single LSB macro dependency: $network''' - - self.add_sysv('foo', {'Required-Start': '$network'}) - s = self.run_generator()[1]['foo.service'] - self.assertEqual(set(s.options('Unit')), - set(['Documentation', 'SourcePath', 'Description', 'After', 'Wants'])) - self.assertEqual(s.get('Unit', 'After'), 'network-online.target') - self.assertEqual(s.get('Unit', 'Wants'), 'network-online.target') - - def test_lsb_macro_dep_multi(self): - '''multiple LSB macro dependencies''' - - self.add_sysv('foo', {'Required-Start': '$named $portmap'}) - s = self.run_generator()[1]['foo.service'] - self.assertEqual(set(s.options('Unit')), - set(['Documentation', 'SourcePath', 'Description', 'After'])) - self.assertEqual(s.get('Unit', 'After'), 'nss-lookup.target rpcbind.target') - - def test_lsb_deps(self): - '''LSB header dependencies to other services''' - - # also give symlink priorities here; they should be ignored - self.add_sysv('foo', {'Required-Start': 'must1 must2', - 'Should-Start': 'may1 ne_may2'}, - enable=True, prio=40) - self.add_sysv('must1', {}, enable=True, prio=10) - self.add_sysv('must2', {}, enable=True, prio=15) - self.add_sysv('may1', {}, enable=True, prio=20) - # do not create ne_may2 - err, results = self.run_generator() - self.assertEqual(sorted(results), - ['foo.service', 'may1.service', 'must1.service', 'must2.service']) - - # foo should depend on all of them - self.assertEqual(sorted(results['foo.service'].get('Unit', 'After').split()), - ['may1.service', 'must1.service', 'must2.service', 'ne_may2.service']) - - # other services should not depend on each other - self.assertFalse(results['must1.service'].has_option('Unit', 'After')) - self.assertFalse(results['must2.service'].has_option('Unit', 'After')) - self.assertFalse(results['may1.service'].has_option('Unit', 'After')) - - def test_symlink_prio_deps(self): - '''script without LSB headers use rcN.d priority''' - - # create two init.d scripts without LSB header and enable them with - # startup priorities - for prio, name in [(10, 'provider'), (15, 'consumer')]: - with open(os.path.join(self.init_d_dir, name), 'w') as f: - f.write('#!/bin/init-d-interpreter\ncode --goes here\n') - os.fchmod(f.fileno(), 0o755) - - d = os.path.join(self.rcnd_dir, 'rc2.d') - if not os.path.isdir(d): - os.mkdir(d) - os.symlink('../init.d/' + name, os.path.join(d, 'S%02i%s' % (prio, name))) - - err, results = self.run_generator() - self.assertEqual(sorted(results), ['consumer.service', 'provider.service']) - self.assertFalse(results['provider.service'].has_option('Unit', 'After')) - self.assertEqual(results['consumer.service'].get('Unit', 'After'), - 'provider.service') - - def test_multiple_provides(self): - '''multiple Provides: names''' - - self.add_sysv('foo', {'Provides': 'foo bar baz'}) - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - self.assertEqual(set(results['foo.service'].options('Unit')), - set(['Documentation', 'SourcePath', 'Description'])) - # should create symlinks for the alternative names - for f in ['bar.service', 'baz.service']: - self.assertEqual(os.readlink(os.path.join(self.out_dir, f)), - 'foo.service') - self.assertNotIn('Overwriting', err) - - def test_same_provides_in_multiple_scripts(self): - '''multiple init.d scripts provide the same name''' - - self.add_sysv('foo', {'Provides': 'foo common'}, enable=True, prio=1) - self.add_sysv('bar', {'Provides': 'bar common'}, enable=True, prio=2) - err, results = self.run_generator() - self.assertEqual(sorted(results), ['bar.service', 'foo.service']) - # should create symlink for the alternative name for either unit - self.assertIn(os.readlink(os.path.join(self.out_dir, 'common.service')), - ['foo.service', 'bar.service']) - - def test_provide_other_script(self): - '''init.d scripts provides the name of another init.d script''' - - self.add_sysv('foo', {'Provides': 'foo bar'}, enable=True) - self.add_sysv('bar', {'Provides': 'bar'}, enable=True) - err, results = self.run_generator() - self.assertEqual(sorted(results), ['bar.service', 'foo.service']) - # we do expect an overwrite here, bar.service should overwrite the - # alias link from foo.service - self.assertIn('Overwriting', err) - - def test_nonexecutable_script(self): - '''ignores non-executable init.d script''' - - os.chmod(self.add_sysv('foo', {}), 0o644) - err, results = self.run_generator() - self.assertEqual(results, {}) - - def test_sh_suffix(self): - '''init.d script with .sh suffix''' - - self.add_sysv('foo.sh', {}, enable=True) - err, results = self.run_generator() - s = results['foo.service'] - - self.assertEqual(s.sections(), ['Unit', 'Service']) - # should not have a .sh - self.assertEqual(s.get('Unit', 'Description'), 'LSB: test foo service') - - # calls correct script with .sh - init_script = os.path.join(self.init_d_dir, 'foo.sh') - self.assertEqual(s.get('Service', 'ExecStart'), - '%s start' % init_script) - self.assertEqual(s.get('Service', 'ExecStop'), - '%s stop' % init_script) - - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - - def test_sh_suffix_with_provides(self): - '''init.d script with .sh suffix and Provides:''' - - self.add_sysv('foo.sh', {'Provides': 'foo bar'}) - err, results = self.run_generator() - # ensure we don't try to create a symlink to itself - self.assertNotIn(err, 'itself') - self.assertEqual(list(results), ['foo.service']) - self.assertEqual(results['foo.service'].get('Unit', 'Description'), - 'LSB: test foo service') - - # should create symlink for the alternative name - self.assertEqual(os.readlink(os.path.join(self.out_dir, 'bar.service')), - 'foo.service') - - def test_hidden_files(self): - '''init.d script with hidden file suffix''' - - script = self.add_sysv('foo', {}, enable=True) - # backup files (not enabled in rcN.d/) - shutil.copy(script, script + '.dpkg-new') - shutil.copy(script, script + '.dpkg-dist') - shutil.copy(script, script + '.swp') - shutil.copy(script, script + '.rpmsave') - - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - - def test_backup_file(self): - '''init.d script with backup file''' - - script = self.add_sysv('foo', {}, enable=True) - # backup files (not enabled in rcN.d/) - shutil.copy(script, script + '.bak') - shutil.copy(script, script + '.old') - - err, results = self.run_generator() - print(err) - self.assertEqual(sorted(results), - ['foo.bak.service', 'foo.old.service', 'foo.service']) - - # ensure we don't try to create a symlink to itself - self.assertNotIn(err, 'itself') - - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - self.assert_enabled('foo.bak.service', []) - self.assert_enabled('foo.old.service', []) - - def test_existing_native_unit(self): - '''existing native unit''' - - with open(os.path.join(self.unit_dir, 'foo.service'), 'w') as f: - f.write('[Unit]\n') - - self.add_sysv('foo.sh', {'Provides': 'foo bar'}, enable=True) - err, results = self.run_generator() - self.assertEqual(list(results), []) - # no enablement or alias links, as native unit is disabled - self.assertEqual(os.listdir(self.out_dir), []) - - -if __name__ == '__main__': - unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2)) diff --git a/test/test-efi-create-disk.sh b/test/test-efi-create-disk.sh deleted file mode 100755 index 56dd09abd..000000000 --- a/test/test-efi-create-disk.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -e - -# create GPT table with EFI System Partition -rm -f test-efi-disk.img -dd if=/dev/null of=test-efi-disk.img bs=1M seek=512 count=1 -parted --script test-efi-disk.img "mklabel gpt" "mkpart ESP fat32 1MiB 511MiB" "set 1 boot on" - -# create FAT32 file system -LOOP=$(losetup --show -f -P test-efi-disk.img) -mkfs.vfat -F32 ${LOOP}p1 -mkdir -p mnt -mount ${LOOP}p1 mnt - -mkdir -p mnt/EFI/{Boot,systemd} -cp systemd-bootx64.efi mnt/EFI/Boot/bootx64.efi - -[ -e /boot/shellx64.efi ] && cp /boot/shellx64.efi mnt/ - -mkdir mnt/EFI/Linux -echo -n "foo=yes bar=no root=/dev/fakeroot debug rd.break=initqueue" > mnt/cmdline.txt -objcopy \ - --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \ - --add-section .cmdline=mnt/cmdline.txt --change-section-vma .cmdline=0x30000 \ - --add-section .splash=test/splash.bmp --change-section-vma .splash=0x40000 \ - --add-section .linux=/boot/$(cat /etc/machine-id)/$(uname -r)/linux --change-section-vma .linux=0x2000000 \ - --add-section .initrd=/boot/$(cat /etc/machine-id)/$(uname -r)/initrd --change-section-vma .initrd=0x3000000 \ - linuxx64.efi.stub mnt/EFI/Linux/linux-test.efi - -# install entries -mkdir -p mnt/loader/entries -echo -e "timeout 3\n" > mnt/loader/loader.conf -echo -e "title Test\nefi /test\n" > mnt/loader/entries/test.conf -echo -e "title Test2\nlinux /test2\noptions option=yes word number=1000 more\n" > mnt/loader/entries/test2.conf -echo -e "title Test3\nlinux /test3\n" > mnt/loader/entries/test3.conf -echo -e "title Test4\nlinux /test4\n" > mnt/loader/entries/test4.conf -echo -e "title Test5\nefi /test5\n" > mnt/loader/entries/test5.conf -echo -e "title Test6\nlinux /test6\n" > mnt/loader/entries/test6.conf - -sync -umount mnt -rmdir mnt -losetup -d $LOOP diff --git a/test/test-functions b/test/test-functions deleted file mode 100644 index 901ff4860..000000000 --- a/test/test-functions +++ /dev/null @@ -1,1186 +0,0 @@ -#!/bin/bash -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh -PATH=/sbin:/bin:/usr/sbin:/usr/bin -export PATH - -KERNEL_VER=${KERNEL_VER-$(uname -r)} -KERNEL_MODS="/lib/modules/$KERNEL_VER/" - -if ! ROOTLIBDIR=$(pkg-config --variable=systemdutildir systemd); then - echo "WARNING! Cannot determine rootlibdir from pkg-config, assuming /usr/lib/systemd" >&2 - ROOTLIBDIR=/usr/lib/systemd -fi - -BASICTOOLS="sh bash setsid loadkeys setfont login sulogin gzip sleep echo mount umount cryptsetup date dmsetup modprobe" -DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort hostname" - -function find_qemu_bin() { - # SUSE and Red Hat call the binary qemu-kvm - # Debian and Gentoo call it kvm - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a kvm qemu-kvm 2>/dev/null | grep '^/' -m1) - - [ "$ARCH" ] || ARCH=$(uname -m) - case $ARCH in - x86_64) - # QEMU's own build system calls it qemu-system-x86_64 - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu-system-x86_64 2>/dev/null | grep '^/' -m1) - ;; - i*86) - # new i386 version of QEMU - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu-system-i386 2>/dev/null | grep '^/' -m1) - - # i386 version of QEMU - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu 2>/dev/null | grep '^/' -m1) - ;; - esac - - if [ ! -e "$QEMU_BIN" ]; then - echo "Could not find a suitable QEMU binary" >&2 - return 1 - fi -} - -run_qemu() { - if [ -f /etc/machine-id ]; then - read MACHINE_ID < /etc/machine-id - [ -z "$INITRD" ] && [ -e "/boot/$MACHINE_ID/$KERNEL_VER/initrd" ] \ - && INITRD="/boot/$MACHINE_ID/$KERNEL_VER/initrd" - [ -z "$KERNEL_BIN" ] && [ -e "/boot/$MACHINE_ID/$KERNEL_VER/linux" ] \ - && KERNEL_BIN="/boot/$MACHINE_ID/$KERNEL_VER/linux" - fi - - [ "$KERNEL_BIN" ] || KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER - [ "$INITRD" ] || INITRD=/boot/initramfs-${KERNEL_VER}.img - [ "$QEMU_SMP" ] || QEMU_SMP=1 - - find_qemu_bin || return 1 - - KERNEL_APPEND="root=/dev/sda1 \ -systemd.log_level=debug \ -raid=noautodetect \ -loglevel=2 \ -init=$ROOTLIBDIR/systemd \ -ro \ -console=ttyS0 \ -selinux=0 \ -$KERNEL_APPEND \ -" - - QEMU_OPTIONS="-machine accel=kvm:tcg \ --smp $QEMU_SMP \ --net none \ --m 512M \ --nographic \ --kernel $KERNEL_BIN \ -" - - if [ "$INITRD" ]; then - QEMU_OPTIONS="$QEMU_OPTIONS -initrd $INITRD" - fi - - ( set -x - $QEMU_BIN $QEMU_OPTIONS -append "$KERNEL_APPEND" $TESTDIR/rootdisk.img ) || return 1 -} - -run_nspawn() { - set -x - ../../systemd-nspawn --boot --directory=$TESTDIR/nspawn-root $ROOTLIBDIR/systemd $KERNEL_APPEND -} - -setup_basic_environment() { - # create the basic filesystem layout - setup_basic_dirs - - install_systemd - install_missing_libraries - install_config_files - create_rc_local - install_basic_tools - install_libnss - install_pam - install_dbus - install_fonts - install_keymaps - install_terminfo - install_execs - install_plymouth - install_debug_tools - install_ld_so_conf - strip_binaries - install_depmod_files - generate_module_dependencies - # softlink mtab - ln -fs /proc/self/mounts $initdir/etc/mtab -} - -install_dmevent() { - instmods dm_crypt =crypto - type -P dmeventd >/dev/null && dracut_install dmeventd - inst_libdir_file "libdevmapper-event.so*" - inst_rules 10-dm.rules 13-dm-disk.rules 95-dm-notify.rules -} - -install_systemd() { - # install compiled files - (cd $TEST_BASE_DIR/..; set -x; make DESTDIR=$initdir install) - # remove unneeded documentation - rm -fr $initdir/usr/share/{man,doc,gtk-doc} - # we strip binaries since debug symbols increase binaries size a lot - # and it could fill the available space - strip_binaries -} - -install_missing_libraries() { - # install possible missing libraries - for i in $initdir/{sbin,bin}/* $initdir/lib/systemd/*; do - inst_libs $i - done -} - -create_empty_image() { - rm -f "$TESTDIR/rootdisk.img" - # Create the blank file to use as a root filesystem - dd if=/dev/null of="$TESTDIR/rootdisk.img" bs=1M seek=300 - LOOPDEV=$(losetup --show -P -f $TESTDIR/rootdisk.img) - [ -b "$LOOPDEV" ] || return 1 - echo "LOOPDEV=$LOOPDEV" >> $STATEFILE - sfdisk "$LOOPDEV" <$initdir/etc/rc.d/rc.local < $initdir/etc/environment - > $initdir/etc/machine-id - # set the hostname - echo systemd-testsuite > $initdir/etc/hostname - # fstab - cat >$initdir/etc/fstab <&1 >/dev/null |sed -n '/calling init: .*libnss_/ {s!^.* /!/!; p}') - dracut_install $NSS_LIBS -} - -install_dbus() { - inst $ROOTLIBDIR/system/dbus.socket - inst $ROOTLIBDIR/system/dbus.service - - find \ - /etc/dbus-1 -xtype f \ - | while read file; do - inst $file - done -} - -install_pam() { - find \ - /etc/pam.d \ - /etc/security \ - /lib64/security \ - /lib/security -xtype f \ - | while read file; do - inst $file - done -} - -install_keymaps() { - for i in \ - /usr/lib/kbd/keymaps/include/* \ - /usr/lib/kbd/keymaps/i386/include/* \ - /usr/lib/kbd/keymaps/i386/qwerty/us.*; do - [[ -f $i ]] || continue - inst $i - done -} - -install_fonts() { - for i in \ - /usr/lib/kbd/consolefonts/eurlatgr* \ - /usr/lib/kbd/consolefonts/latarcyrheb-sun16*; do - [[ -f $i ]] || continue - inst $i - done -} - -install_terminfo() { - for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [ -f ${_terminfodir}/l/linux ] && break - done - dracut_install -o ${_terminfodir}/l/linux -} - -setup_testsuite() { - cp $TEST_BASE_DIR/testsuite.target $initdir/etc/systemd/system/ - sed "s#@SYSTEMCTL@#$(type -P systemctl)#g" $TEST_BASE_DIR/end.service.in > $initdir/etc/systemd/system/end.service - - mkdir -p $initdir/etc/systemd/system/testsuite.target.wants - ln -fs $TEST_BASE_DIR/testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service - ln -fs $TEST_BASE_DIR/end.service $initdir/etc/systemd/system/testsuite.target.wants/end.service - - # make the testsuite the default target - ln -fs testsuite.target $initdir/etc/systemd/system/default.target -} - -setup_nspawn_root() { - rm -fr $TESTDIR/nspawn-root - ddebug "cp -ar $initdir $TESTDIR/nspawn-root" - cp -ar $initdir $TESTDIR/nspawn-root - # we don't mount in the nspawn root - rm -f $TESTDIR/nspawn-root/etc/fstab -} - -setup_basic_dirs() { - mkdir -p $initdir/run - mkdir -p $initdir/etc/systemd/system - mkdir -p $initdir/var/log/journal - - for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run run/lock run/initramfs; do - if [ -L "/$d" ]; then - inst_symlink "/$d" - else - inst_dir "/$d" - fi - done - - ln -sfn /run "$initdir/var/run" - ln -sfn /run/lock "$initdir/var/lock" -} - -inst_libs() { - local _bin=$1 - local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' - local _file _line - - LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do - [[ $_line = 'not a dynamic executable' ]] && break - - if [[ $_line =~ $_so_regex ]]; then - _file=${BASH_REMATCH[1]} - [[ -e ${initdir}/$_file ]] && continue - inst_library "$_file" - continue - fi - - if [[ $_line =~ not\ found ]]; then - dfatal "Missing a shared library required by $_bin." - dfatal "Run \"ldd $_bin\" to find out what it is." - dfatal "$_line" - dfatal "dracut cannot create an initrd." - exit 1 - fi - done -} - -import_testdir() { - STATEFILE=".testdir" - [[ -e $STATEFILE ]] && . $STATEFILE - if [[ -z "$TESTDIR" ]] || [[ ! -d "$TESTDIR" ]]; then - TESTDIR=$(mktemp --tmpdir=/var/tmp -d -t systemd-test.XXXXXX) - echo "TESTDIR=\"$TESTDIR\"" > $STATEFILE - export TESTDIR - fi -} - -import_initdir() { - initdir=$TESTDIR/root - export initdir -} - -## @brief Converts numeric logging level to the first letter of level name. -# -# @param lvl Numeric logging level in range from 1 to 6. -# @retval 1 if @a lvl is out of range. -# @retval 0 if @a lvl is correct. -# @result Echoes first letter of level name. -_lvl2char() { - case "$1" in - 1) echo F;; - 2) echo E;; - 3) echo W;; - 4) echo I;; - 5) echo D;; - 6) echo T;; - *) return 1;; - esac -} - -## @brief Internal helper function for _do_dlog() -# -# @param lvl Numeric logging level. -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -# -# @note This function is not supposed to be called manually. Please use -# dtrace(), ddebug(), or others instead which wrap this one. -# -# This function calls _do_dlog() either with parameter msg, or if -# none is given, it will read standard input and will use every line as -# a message. -# -# This enables: -# dwarn "This is a warning" -# echo "This is a warning" | dwarn -LOG_LEVEL=4 - -dlog() { - [ -z "$LOG_LEVEL" ] && return 0 - [ $1 -le $LOG_LEVEL ] || return 0 - local lvl="$1"; shift - local lvlc=$(_lvl2char "$lvl") || return 0 - - if [ $# -ge 1 ]; then - echo "$lvlc: $*" - else - while read line; do - echo "$lvlc: " "$line" - done - fi -} - -## @brief Logs message at TRACE level (6) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dtrace() { - set +x - dlog 6 "$@" - [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at DEBUG level (5) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -ddebug() { -# set +x - dlog 5 "$@" -# [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at INFO level (4) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dinfo() { - set +x - dlog 4 "$@" - [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at WARN level (3) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dwarn() { - set +x - dlog 3 "$@" - [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at ERROR level (2) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -derror() { -# set +x - dlog 2 "$@" -# [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at FATAL level (1) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dfatal() { - set +x - dlog 1 "$@" - [ -n "$debug" ] && set -x || : -} - - -# Generic substring function. If $2 is in $1, return 0. -strstr() { [ "${1#*$2*}" != "$1" ]; } - -# normalize_path -# Prints the normalized path, where it removes any duplicated -# and trailing slashes. -# Example: -# $ normalize_path ///test/test// -# /test/test -normalize_path() { - shopt -q -s extglob - set -- "${1//+(\/)//}" - shopt -q -u extglob - echo "${1%/}" -} - -# convert_abs_rel -# Prints the relative path, when creating a symlink to from . -# Example: -# $ convert_abs_rel /usr/bin/test /bin/test-2 -# ../../bin/test-2 -# $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test -convert_abs_rel() { - local __current __absolute __abssize __cursize __newpath - local -i __i __level - - set -- "$(normalize_path "$1")" "$(normalize_path "$2")" - - # corner case #1 - self looping link - [[ "$1" == "$2" ]] && { echo "${1##*/}"; return; } - - # corner case #2 - own dir link - [[ "${1%/*}" == "$2" ]] && { echo "."; return; } - - IFS="/" __current=($1) - IFS="/" __absolute=($2) - - __abssize=${#__absolute[@]} - __cursize=${#__current[@]} - - while [[ ${__absolute[__level]} == ${__current[__level]} ]] - do - (( __level++ )) - if (( __level > __abssize || __level > __cursize )) - then - break - fi - done - - for ((__i = __level; __i < __cursize-1; __i++)) - do - if ((__i > __level)) - then - __newpath=$__newpath"/" - fi - __newpath=$__newpath".." - done - - for ((__i = __level; __i < __abssize; __i++)) - do - if [[ -n $__newpath ]] - then - __newpath=$__newpath"/" - fi - __newpath=$__newpath${__absolute[__i]} - done - - echo "$__newpath" -} - - -# Install a directory, keeping symlinks as on the original system. -# Example: if /lib points to /lib64 on the host, "inst_dir /lib/file" -# will create ${initdir}/lib64, ${initdir}/lib64/file, -# and a symlink ${initdir}/lib -> lib64. -inst_dir() { - [[ -e ${initdir}/"$1" ]] && return 0 # already there - - local _dir="$1" _part="${1%/*}" _file - while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}/${_part}" ]]; do - _dir="$_part $_dir" - _part=${_part%/*} - done - - # iterate over parent directories - for _file in $_dir; do - [[ -e "${initdir}/$_file" ]] && continue - if [[ -L $_file ]]; then - inst_symlink "$_file" - else - # create directory - mkdir -m 0755 -p "${initdir}/$_file" || return 1 - [[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file" - chmod u+w "${initdir}/$_file" - fi - done -} - -# $1 = file to copy to ramdisk -# $2 (optional) Name for the file on the ramdisk -# Location of the image dir is assumed to be $initdir -# We never overwrite the target if it exists. -inst_simple() { - [[ -f "$1" ]] || return 1 - strstr "$1" "/" || return 1 - - local _src=$1 target="${2:-$1}" - if ! [[ -d ${initdir}/$target ]]; then - [[ -e ${initdir}/$target ]] && return 0 - [[ -L ${initdir}/$target ]] && return 0 - [[ -d "${initdir}/${target%/*}" ]] || inst_dir "${target%/*}" - fi - # install checksum files also - if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then - inst "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac" - fi - ddebug "Installing $_src" - cp --sparse=always -pfL "$_src" "${initdir}/$target" -} - -# find symlinks linked to given library file -# $1 = library file -# Function searches for symlinks by stripping version numbers appended to -# library filename, checks if it points to the same target and finally -# prints the list of symlinks to stdout. -# -# Example: -# rev_lib_symlinks libfoo.so.8.1 -# output: libfoo.so.8 libfoo.so -# (Only if libfoo.so.8 and libfoo.so exists on host system.) -rev_lib_symlinks() { - [[ ! $1 ]] && return 0 - - local fn="$1" orig="$(readlink -f "$1")" links='' - - [[ ${fn} =~ .*\.so\..* ]] || return 1 - - until [[ ${fn##*.} == so ]]; do - fn="${fn%.*}" - [[ -L ${fn} && $(readlink -f "${fn}") == ${orig} ]] && links+=" ${fn}" - done - - echo "${links}" -} - -# Same as above, but specialized to handle dynamic libraries. -# It handles making symlinks according to how the original library -# is referenced. -inst_library() { - local _src="$1" _dest=${2:-$1} _lib _reallib _symlink - strstr "$1" "/" || return 1 - [[ -e $initdir/$_dest ]] && return 0 - if [[ -L $_src ]]; then - # install checksum files also - if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then - inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac" - fi - _reallib=$(readlink -f "$_src") - inst_simple "$_reallib" "$_reallib" - inst_dir "${_dest%/*}" - [[ -d "${_dest%/*}" ]] && _dest=$(readlink -f "${_dest%/*}")/${_dest##*/} - ln -sfn $(convert_abs_rel "${_dest}" "${_reallib}") "${initdir}/${_dest}" - else - inst_simple "$_src" "$_dest" - fi - - # Create additional symlinks. See rev_symlinks description. - for _symlink in $(rev_lib_symlinks $_src) $(rev_lib_symlinks $_reallib); do - [[ ! -e $initdir/$_symlink ]] && { - ddebug "Creating extra symlink: $_symlink" - inst_symlink $_symlink - } - done -} - -# find a binary. If we were not passed the full path directly, -# search in the usual places to find the binary. -find_binary() { - if [[ -z ${1##/*} ]]; then - if [[ -x $1 ]] || { strstr "$1" ".so" && ldd $1 &>/dev/null; }; then - echo $1 - return 0 - fi - fi - - type -P $1 -} - -# Same as above, but specialized to install binary executables. -# Install binary executable, and all shared library dependencies, if any. -inst_binary() { - local _bin _target - _bin=$(find_binary "$1") || return 1 - _target=${2:-$_bin} - [[ -e $initdir/$_target ]] && return 0 - [[ -L $_bin ]] && inst_symlink $_bin $_target && return 0 - local _file _line - local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' - # I love bash! - LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do - [[ $_line = 'not a dynamic executable' ]] && break - - if [[ $_line =~ $_so_regex ]]; then - _file=${BASH_REMATCH[1]} - [[ -e ${initdir}/$_file ]] && continue - inst_library "$_file" - continue - fi - - if [[ $_line =~ not\ found ]]; then - dfatal "Missing a shared library required by $_bin." - dfatal "Run \"ldd $_bin\" to find out what it is." - dfatal "$_line" - dfatal "dracut cannot create an initrd." - exit 1 - fi - done - inst_simple "$_bin" "$_target" -} - -# same as above, except for shell scripts. -# If your shell script does not start with shebang, it is not a shell script. -inst_script() { - local _bin - _bin=$(find_binary "$1") || return 1 - shift - local _line _shebang_regex - read -r -n 80 _line <"$_bin" - # If debug is set, clean unprintable chars to prevent messing up the term - [[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]') - _shebang_regex='(#! *)(/[^ ]+).*' - [[ $_line =~ $_shebang_regex ]] || return 1 - inst "${BASH_REMATCH[2]}" && inst_simple "$_bin" "$@" -} - -# same as above, but specialized for symlinks -inst_symlink() { - local _src=$1 _target=${2:-$1} _realsrc - strstr "$1" "/" || return 1 - [[ -L $1 ]] || return 1 - [[ -L $initdir/$_target ]] && return 0 - _realsrc=$(readlink -f "$_src") - if ! [[ -e $initdir/$_realsrc ]]; then - if [[ -d $_realsrc ]]; then - inst_dir "$_realsrc" - else - inst "$_realsrc" - fi - fi - [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}" - [[ -d ${_target%/*} ]] && _target=$(readlink -f ${_target%/*})/${_target##*/} - ln -sfn $(convert_abs_rel "${_target}" "${_realsrc}") "$initdir/$_target" -} - -# attempt to install any programs specified in a udev rule -inst_rule_programs() { - local _prog _bin - - if grep -qE 'PROGRAM==?"[^ "]+' "$1"; then - for _prog in $(grep -E 'PROGRAM==?"[^ "]+' "$1" | sed -r 's/.*PROGRAM==?"([^ "]+).*/\1/'); do - if [ -x /lib/udev/$_prog ]; then - _bin=/lib/udev/$_prog - else - _bin=$(find_binary "$_prog") || { - dinfo "Skipping program $_prog using in udev rule $(basename $1) as it cannot be found" - continue; - } - fi - - #dinfo "Installing $_bin due to it's use in the udev rule $(basename $1)" - dracut_install "$_bin" - done - fi -} - -# udev rules always get installed in the same place, so -# create a function to install them to make life simpler. -inst_rules() { - local _target=/etc/udev/rules.d _rule _found - - inst_dir "/lib/udev/rules.d" - inst_dir "$_target" - for _rule in "$@"; do - if [ "${rule#/}" = "$rule" ]; then - for r in /lib/udev/rules.d /etc/udev/rules.d; do - if [[ -f $r/$_rule ]]; then - _found="$r/$_rule" - inst_simple "$_found" - inst_rule_programs "$_found" - fi - done - fi - for r in '' ./ $dracutbasedir/rules.d/; do - if [[ -f ${r}$_rule ]]; then - _found="${r}$_rule" - inst_simple "$_found" "$_target/${_found##*/}" - inst_rule_programs "$_found" - fi - done - [[ $_found ]] || dinfo "Skipping udev rule: $_rule" - done -} - -# general purpose installation function -# Same args as above. -inst() { - local _x - - case $# in - 1) ;; - 2) [[ ! $initdir && -d $2 ]] && export initdir=$2 - [[ $initdir = $2 ]] && set $1;; - 3) [[ -z $initdir ]] && export initdir=$2 - set $1 $3;; - *) dfatal "inst only takes 1 or 2 or 3 arguments" - exit 1;; - esac - for _x in inst_symlink inst_script inst_binary inst_simple; do - $_x "$@" && return 0 - done - return 1 -} - -# install any of listed files -# -# If first argument is '-d' and second some destination path, first accessible -# source is installed into this path, otherwise it will installed in the same -# path as source. If none of listed files was installed, function return 1. -# On first successful installation it returns with 0 status. -# -# Example: -# -# inst_any -d /bin/foo /bin/bar /bin/baz -# -# Lets assume that /bin/baz exists, so it will be installed as /bin/foo in -# initramfs. -inst_any() { - local to f - - [[ $1 = '-d' ]] && to="$2" && shift 2 - - for f in "$@"; do - if [[ -e $f ]]; then - [[ $to ]] && inst "$f" "$to" && return 0 - inst "$f" && return 0 - fi - done - - return 1 -} - -# dracut_install [-o ] [ ... ] -# Install to the initramfs image -# -o optionally install the and don't fail, if it is not there -dracut_install() { - local _optional=no - if [[ $1 = '-o' ]]; then - _optional=yes - shift - fi - while (($# > 0)); do - if ! inst "$1" ; then - if [[ $_optional = yes ]]; then - dinfo "Skipping program $1 as it cannot be found and is" \ - "flagged to be optional" - else - dfatal "Failed to install $1" - exit 1 - fi - fi - shift - done -} - -# Install a single kernel module along with any firmware it may require. -# $1 = full path to kernel module to install -install_kmod_with_fw() { - # no need to go further if the module is already installed - - [[ -e "${initdir}/lib/modules/$KERNEL_VER/${1##*/lib/modules/$KERNEL_VER/}" ]] \ - && return 0 - - [[ -e "$initdir/.kernelmodseen/${1##*/}" ]] && return 0 - - if [[ $omit_drivers ]]; then - local _kmod=${1##*/} - _kmod=${_kmod%.ko} - _kmod=${_kmod/-/_} - if [[ "$_kmod" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 1 - fi - if [[ "${1##*/lib/modules/$KERNEL_VER/}" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 1 - fi - fi - - [ -d "$initdir/.kernelmodseen" ] && \ - > "$initdir/.kernelmodseen/${1##*/}" - - inst_simple "$1" "/lib/modules/$KERNEL_VER/${1##*/lib/modules/$KERNEL_VER/}" \ - || return $? - - local _modname=${1##*/} _fwdir _found _fw - _modname=${_modname%.ko*} - for _fw in $(modinfo -k $KERNEL_VER -F firmware $1 2>/dev/null); do - _found='' - for _fwdir in $fw_dir; do - if [[ -d $_fwdir && -f $_fwdir/$_fw ]]; then - inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" - _found=yes - fi - done - if [[ $_found != yes ]]; then - if ! grep -qe "\<${_modname//-/_}\>" /proc/modules; then - dinfo "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - else - dwarn "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - fi - fi - done - return 0 -} - -# Do something with all the dependencies of a kernel module. -# Note that kernel modules depend on themselves using the technique we use -# $1 = function to call for each dependency we find -# It will be passed the full path to the found kernel module -# $2 = module to get dependencies for -# rest of args = arguments to modprobe -# _fderr specifies FD passed from surrounding scope -for_each_kmod_dep() { - local _func=$1 _kmod=$2 _cmd _modpath _options _found=0 - shift 2 - modprobe "$@" --ignore-install --show-depends $_kmod 2>&${_fderr} | ( - while read _cmd _modpath _options; do - [[ $_cmd = insmod ]] || continue - $_func ${_modpath} || exit $? - _found=1 - done - [[ $_found -eq 0 ]] && exit 1 - exit 0 - ) -} - -# filter kernel modules to install certain modules that meet specific -# requirements. -# $1 = search only in subdirectory of /kernel/$1 -# $2 = function to call with module name to filter. -# This function will be passed the full path to the module to test. -# The behavior of this function can vary depending on whether $hostonly is set. -# If it is, we will only look at modules that are already in memory. -# If it is not, we will look at all kernel modules -# This function returns the full filenames of modules that match $1 -filter_kernel_modules_by_path () ( - local _modname _filtercmd - if ! [[ $hostonly ]]; then - _filtercmd='find "$KERNEL_MODS/kernel/$1" "$KERNEL_MODS/extra"' - _filtercmd+=' "$KERNEL_MODS/weak-updates" -name "*.ko" -o -name "*.ko.gz"' - _filtercmd+=' -o -name "*.ko.xz"' - _filtercmd+=' 2>/dev/null' - else - _filtercmd='cut -d " " -f 1 $initdir/$$.ko - $2 $initdir/$$.ko && echo "$_modname" - rm -f $initdir/$$.ko - ;; - *.ko.xz) xz -dc "$_modname" > $initdir/$$.ko - $2 $initdir/$$.ko && echo "$_modname" - rm -f $initdir/$$.ko - ;; - esac - done -) -find_kernel_modules_by_path () ( - if ! [[ $hostonly ]]; then - find "$KERNEL_MODS/kernel/$1" "$KERNEL_MODS/extra" "$KERNEL_MODS/weak-updates" \ - -name "*.ko" -o -name "*.ko.gz" -o -name "*.ko.xz" 2>/dev/null - else - cut -d " " -f 1 /dev/null - fi -) - -filter_kernel_modules () { - filter_kernel_modules_by_path drivers "$1" -} - -find_kernel_modules () { - find_kernel_modules_by_path drivers -} - -# instmods [-c] [ ... ] -# instmods [-c] -# install kernel modules along with all their dependencies. -# can be e.g. "=block" or "=drivers/usb/storage" -instmods() { - [[ $no_kernel = yes ]] && return - # called [sub]functions inherit _fderr - local _fderr=9 - local _check=no - if [[ $1 = '-c' ]]; then - _check=yes - shift - fi - - function inst1mod() { - local _ret=0 _mod="$1" - case $_mod in - =*) - if [ -f $KERNEL_MODS/modules.${_mod#=} ]; then - ( [[ "$_mpargs" ]] && echo $_mpargs - cat "${KERNEL_MODS}/modules.${_mod#=}" ) \ - | instmods - else - ( [[ "$_mpargs" ]] && echo $_mpargs - find "$KERNEL_MODS" -path "*/${_mod#=}/*" -printf '%f\n' ) \ - | instmods - fi - ;; - --*) _mpargs+=" $_mod" ;; - i2o_scsi) return ;; # Do not load this diagnostic-only module - *) - _mod=${_mod##*/} - # if we are already installed, skip this module and go on - # to the next one. - [[ -f "$initdir/.kernelmodseen/${_mod%.ko}.ko" ]] && return - - if [[ $omit_drivers ]] && [[ "$1" =~ $omit_drivers ]]; then - dinfo "Omitting driver ${_mod##$KERNEL_MODS}" - return - fi - # If we are building a host-specific initramfs and this - # module is not already loaded, move on to the next one. - [[ $hostonly ]] && ! grep -qe "\<${_mod//-/_}\>" /proc/modules \ - && ! echo $add_drivers | grep -qe "\<${_mod}\>" \ - && return - - # We use '-d' option in modprobe only if modules prefix path - # differs from default '/'. This allows us to use Dracut with - # old version of modprobe which doesn't have '-d' option. - local _moddirname=${KERNEL_MODS%%/lib/modules/*} - [[ -n ${_moddirname} ]] && _moddirname="-d ${_moddirname}/" - - # ok, load the module, all its dependencies, and any firmware - # it may require - for_each_kmod_dep install_kmod_with_fw $_mod \ - --set-version $KERNEL_VER ${_moddirname} $_mpargs - ((_ret+=$?)) - ;; - esac - return $_ret - } - - function instmods_1() { - local _mod _mpargs - if (($# == 0)); then # filenames from stdin - while read _mod; do - inst1mod "${_mod%.ko*}" || { - if [ "$_check" = "yes" ]; then - dfatal "Failed to install $_mod" - return 1 - fi - } - done - fi - while (($# > 0)); do # filenames as arguments - inst1mod ${1%.ko*} || { - if [ "$_check" = "yes" ]; then - dfatal "Failed to install $1" - return 1 - fi - } - shift - done - return 0 - } - - local _ret _filter_not_found='FATAL: Module .* not found.' - set -o pipefail - # Capture all stderr from modprobe to _fderr. We could use {var}>... - # redirections, but that would make dracut require bash4 at least. - eval "( instmods_1 \"\$@\" ) ${_fderr}>&1" \ - | while read line; do [[ "$line" =~ $_filter_not_found ]] && echo $line || echo $line >&2 ;done | derror - _ret=$? - set +o pipefail - return $_ret -} - -# inst_libdir_file [-n ] [...] -# Install a located on a lib directory to the initramfs image -# -n install non-matching files -inst_libdir_file() { - if [[ "$1" == "-n" ]]; then - local _pattern=$1 - shift 2 - for _dir in $libdirs; do - for _i in "$@"; do - for _f in "$_dir"/$_i; do - [[ "$_i" =~ $_pattern ]] || continue - [[ -e "$_i" ]] && dracut_install "$_i" - done - done - done - else - for _dir in $libdirs; do - for _i in "$@"; do - for _f in "$_dir"/$_i; do - [[ -e "$_f" ]] && dracut_install "$_f" - done - done - done - fi -} - -check_nspawn() { - [[ -d /sys/fs/cgroup/systemd ]] -} - - -do_test() { - if [[ $UID != "0" ]]; then - echo "TEST: $TEST_DESCRIPTION [SKIPPED]: not root" >&2 - exit 0 - fi - -# Detect lib paths - [[ $libdir ]] || for libdir in /lib64 /lib; do - [[ -d $libdir ]] && libdirs+=" $libdir" && break - done - - [[ $usrlibdir ]] || for usrlibdir in /usr/lib64 /usr/lib; do - [[ -d $usrlibdir ]] && libdirs+=" $usrlibdir" && break - done - - import_testdir - import_initdir - - while (($# > 0)); do - case $1 in - --run) - echo "TEST RUN: $TEST_DESCRIPTION" - test_run - ret=$? - if [ $ret -eq 0 ]; then - echo "TEST RUN: $TEST_DESCRIPTION [OK]" - else - echo "TEST RUN: $TEST_DESCRIPTION [FAILED]" - fi - exit $ret;; - --setup) - echo "TEST SETUP: $TEST_DESCRIPTION" - test_setup - exit $?;; - --clean) - echo "TEST CLEANUP: $TEST_DESCRIPTION" - test_cleanup - rm -fr "$TESTDIR" - rm -f .testdir - exit $?;; - --all) - echo -n "TEST: $TEST_DESCRIPTION "; - ( - test_setup && test_run - ret=$? - test_cleanup - rm -fr "$TESTDIR" - rm -f .testdir - exit $ret - ) test.log 2>&1 - ret=$? - if [ $ret -eq 0 ]; then - rm test.log - echo "[OK]" - else - echo "[FAILED]" - echo "see $(pwd)/test.log" - fi - exit $ret;; - *) break ;; - esac - shift - done -} diff --git a/test/testsuite.target b/test/testsuite.target deleted file mode 100644 index 1a7e5b371..000000000 --- a/test/testsuite.target +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Testsuite target -Requires=multi-user.target -After=multi-user.target -Conflicts=rescue.target -AllowIsolate=yes diff --git a/test/timers.target b/test/timers.target deleted file mode 120000 index 576d47fed..000000000 --- a/test/timers.target +++ /dev/null @@ -1 +0,0 @@ -../units/timers.target \ No newline at end of file diff --git a/test/udev-test.pl b/test/udev-test.pl deleted file mode 100755 index 64d7f9344..000000000 --- a/test/udev-test.pl +++ /dev/null @@ -1,1545 +0,0 @@ -#!/usr/bin/perl - -# udev test -# -# Provides automated testing of the udev binary. -# The whole test is self contained in this file, except the matching sysfs tree. -# Simply extend the @tests array, to add a new test variant. -# -# Every test is driven by its own temporary config file. -# This program prepares the environment, creates the config and calls udev. -# -# udev parses the rules, looks at the provided sysfs and -# first creates and then removes the device node. -# After creation and removal the result is checked against the -# expected value and the result is printed. -# -# Copyright (C) 2004-2012 Kay Sievers -# Copyright (C) 2004 Leann Ogasawara - -use warnings; -use strict; - -my $udev_bin = "./test-udev"; -my $valgrind = 0; -my $gdb = 0; -my $udev_bin_valgrind = "valgrind --tool=memcheck --leak-check=yes --track-origins=yes --quiet $udev_bin"; -my $udev_bin_gdb = "gdb --args $udev_bin"; -my $udev_dev = "test/dev"; -my $udev_run = "test/run"; -my $udev_rules_dir = "$udev_run/udev/rules.d"; -my $udev_rules = "$udev_rules_dir/udev-test.rules"; -my $EXIT_TEST_SKIP = 77; - -my @tests = ( - { - desc => "no rules", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda" , - exp_rem_error => "yes", - rules => < "label test of scsi disc", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "boot_disk" , - rules => < "label test of scsi disc", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "boot_disk" , - rules => < "label test of scsi disc", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "boot_disk" , - rules => < "label test of scsi partition", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "label test of pattern match", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "label test of multiple sysfs files", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "label test of max sysfs files (skip invalid rule)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "catch device by *", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "catch device by * - take 2", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "catch device by ?", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "catch device by character class", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "replace kernel name", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle comment lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle comment lines in config file with whitespace (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle whitespace only lines (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "whitespace" , - rules => < "Handle empty lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle backslashed multi lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "preserve backslashes, if they are not for a newline", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "aaa", - rules => < "Handle stupid backslashed multi lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "subdirectory handling", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "sub/direct/ory/modem" , - rules => < "parent device name match of scsi partition", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "first_disk5" , - rules => < "test substitution chars", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "Major:8:minor:5:kernelnumber:5:id:0:0:0:0" , - rules => < "import of shell-value returned from program", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node12345678", - rules => < "sustitution of sysfs value (%s{file})", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "disk-ATA-sda" , - rules => < "program result substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "special-device-5" , - not_exp_name => "not" , - rules => < "program result substitution (newline removal)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "newline_removed" , - rules => < "program result substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "test-0:0:0:0" , - rules => < "program with lots of arguments", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "foo9" , - rules => < "program with subshell", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "bar9" , - rules => < "program arguments combined with apostrophes", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "foo7" , - rules => < "characters before the %c{N} substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "my-foo9" , - rules => < "substitute the second to last argument", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "my-foo8" , - rules => < "test substitution by variable name", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "Major:8-minor:5-kernelnumber:5-id:0:0:0:0", - rules => < "test substitution by variable name 2", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "Major:8-minor:5-kernelnumber:5-id:0:0:0:0", - rules => < "test substitution by variable name 3", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "850:0:0:05" , - rules => < "test substitution by variable name 4", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "855" , - rules => < "test substitution by variable name 5", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "8550:0:0:0" , - rules => < "non matching SUBSYSTEMS for device with no parent", - devpath => "/devices/virtual/tty/console", - exp_name => "TTY", - rules => < "non matching SUBSYSTEMS", - devpath => "/devices/virtual/tty/console", - exp_name => "TTY" , - rules => < "ATTRS match", - devpath => "/devices/virtual/tty/console", - exp_name => "foo" , - rules => < "ATTR (empty file)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "empty" , - rules => < "ATTR (non-existent file)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "non-existent" , - rules => < "program and bus type match", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0" , - rules => < "sysfs parent hierarchy", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "name test with ! in the name", - devpath => "/devices/virtual/block/fake!blockdev0", - exp_name => "is/a/fake/blockdev0" , - rules => < "name test with ! in the name, but no matching rule", - devpath => "/devices/virtual/block/fake!blockdev0", - exp_name => "fake/blockdev0" , - exp_rem_error => "yes", - rules => < "KERNELS rule", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "KERNELS wildcard all", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "KERNELS wildcard partial", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "KERNELS wildcard partial 2", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "substitute attr with link target value (first match)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "driver-is-sd", - rules => < "substitute attr with link target value (currently selected device)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "driver-is-ahci", - rules => < "ignore ATTRS attribute whitespace", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ignored", - rules => < "do not ignore ATTRS attribute whitespace", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "matched-with-space", - rules => < "permissions USER=bad GROUP=name", - devpath => "/devices/virtual/tty/tty33", - exp_name => "tty33", - exp_perms => "0:0:0600", - rules => < "permissions OWNER=1", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "1::0600", - rules => < "permissions GROUP=1", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => ":1:0660", - rules => < "textual user id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "nobody::0600", - rules => < "textual group id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => ":daemon:0660", - rules => < "textual user/group id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "root:mail:0660", - rules => < "permissions MODE=0777", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "::0777", - rules => < "permissions OWNER=1 GROUP=1 MODE=0777", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "1:1:0777", - rules => < "permissions OWNER to 1", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1::", - rules => < "permissions GROUP to 1", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => ":1:0660", - rules => < "permissions MODE to 0060", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "::0060", - rules => < "permissions OWNER, GROUP, MODE", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:1:0777", - rules => < "permissions only rule", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:1:0777", - rules => < "multiple permissions only rule", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:1:0777", - rules => < "permissions only rule with override at SYMLINK+ rule", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:2:0777", - rules => < "major/minor number test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_majorminor => "8:0", - rules => < "big major number test", - devpath => "/devices/virtual/misc/misc-fake1", - exp_name => "node", - exp_majorminor => "4095:1", - rules => < "big major and big minor number test", - devpath => "/devices/virtual/misc/misc-fake89999", - exp_name => "node", - exp_majorminor => "4095:89999", - rules => < "multiple symlinks with format char", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "symlink2-ttyACM0", - rules => < "multiple symlinks with a lot of s p a c e s", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "one", - not_exp_name => " ", - rules => < "symlink creation (same directory)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem0", - rules => < "multiple symlinks", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "second-0" , - rules => < "symlink name '.'", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => ".", - exp_add_error => "yes", - exp_rem_error => "yes", - rules => < "symlink node to itself", - devpath => "/devices/virtual/tty/tty0", - exp_name => "link", - exp_add_error => "yes", - exp_rem_error => "yes", - option => "clean", - rules => < "symlink %n substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "symlink0", - rules => < "symlink %k substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "symlink-ttyACM0", - rules => < "symlink %M:%m substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "major-166:0", - rules => < "symlink %b substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "symlink-0:0:0:0", - rules => < "symlink %c substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "test", - rules => < "symlink %c{N} substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "test", - rules => < "symlink %c{N+} substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "this", - rules => < "symlink only rule with %c{N+}", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "test", - rules => < "symlink %s{filename} substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "166:0", - rules => < "program result substitution (numbered part of)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "link1", - rules => < "program result substitution (numbered part of+)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "link4", - rules => < "SUBSYSTEM match test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - rules => < "DRIVERS match test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - rules => < "devnode substitution test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - rules => < "parent node name substitution test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "sda-part-1", - rules => < "udev_root substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "start-/dev-end", - rules => < "last_rule option", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "last", - rules => < "negation KERNEL!=", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "match", - rules => < "negation SUBSYSTEM!=", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "not-anything", - rules => < "negation PROGRAM!= exit code", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "nonzero-program", - rules => < "ENV{} test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test (assign)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test (assign 2 times)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test (assign2)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "part", - rules => < "untrusted string sanitize", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "sane", - rules => < "untrusted string sanitize (don't replace utf8)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "uber", - rules => < "untrusted string sanitize (replace invalid utf8)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "replaced", - rules => < "read sysfs value from parent device", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "serial-354172020305000", - rules => < "match against empty key string", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - rules => < "check ACTION value", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - rules => < "final assignment", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - exp_perms => "root:tty:0640", - rules => < "final assignment 2", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - exp_perms => "root:tty:0640", - rules => < "env substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node-add-me", - rules => < "reset list to current value", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "three", - not_exp_name => "two", - rules => < "test empty SYMLINK+ (empty override)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - not_exp_name => "wrong", - rules => < "test multi matches", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "test multi matches 2", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "test multi matches 3", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "test multi matches 4", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "IMPORT parent test sequence 1/2 (keep)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "parent", - option => "keep", - rules => < "IMPORT parent test sequence 2/2 (keep)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "parentenv-parent_right", - option => "clean", - rules => < "GOTO test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "right", - rules => < "GOTO label does not exist", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "right", - rules => < "SYMLINK+ compare test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "right", - not_exp_name => "wrong", - rules => < "invalid key operation", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "yes", - rules => < "operator chars in attribute", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "yes", - rules => < "overlong comment line", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "yes", - rules => < "magic subsys/kernel lookup", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "00:16:41:e2:8d:ff", - rules => < "TEST absolute path", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "there", - rules => < "TEST subsys/kernel lookup", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "yes", - rules => < "TEST relative path", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "relative", - rules => < "TEST wildcard substitution (find queue/nr_requests)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "found-subdir", - rules => < "TEST MODE=0000", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda", - exp_perms => "0:0:0000", - exp_rem_error => "yes", - rules => < "TEST PROGRAM feeds OWNER, GROUP, MODE", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda", - exp_perms => "1:1:0400", - exp_rem_error => "yes", - rules => < "TEST PROGRAM feeds MODE with overflow", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda", - exp_perms => "0:0:0440", - exp_rem_error => "yes", - rules => < "magic [subsys/sysname] attribute substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda-8741C4G-end", - exp_perms => "0:0:0600", - rules => < "builtin path_id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0", - rules => <$udev_rules" || die "unable to create rules file: $udev_rules"; - print CONF $$rules; - close CONF; - - if ($valgrind > 0) { - system("$udev_bin_valgrind $action $devpath"); - } elsif ($gdb > 0) { - system("$udev_bin_gdb $action $devpath"); - } else { - system("$udev_bin", "$action", "$devpath"); - } -} - -my $error = 0; - -sub permissions_test { - my($rules, $uid, $gid, $mode) = @_; - - my $wrong = 0; - my $userid; - my $groupid; - - $rules->{exp_perms} =~ m/^(.*):(.*):(.*)$/; - if ($1 ne "") { - if (defined(getpwnam($1))) { - $userid = int(getpwnam($1)); - } else { - $userid = $1; - } - if ($uid != $userid) { $wrong = 1; } - } - if ($2 ne "") { - if (defined(getgrnam($2))) { - $groupid = int(getgrnam($2)); - } else { - $groupid = $2; - } - if ($gid != $groupid) { $wrong = 1; } - } - if ($3 ne "") { - if (($mode & 07777) != oct($3)) { $wrong = 1; }; - } - if ($wrong == 0) { - print "permissions: ok\n"; - } else { - printf " expected permissions are: %s:%s:%#o\n", $1, $2, oct($3); - printf " created permissions are : %i:%i:%#o\n", $uid, $gid, $mode & 07777; - print "permissions: error\n"; - $error++; - sleep(1); - } -} - -sub major_minor_test { - my($rules, $rdev) = @_; - - my $major = ($rdev >> 8) & 0xfff; - my $minor = ($rdev & 0xff) | (($rdev >> 12) & 0xfff00); - my $wrong = 0; - - $rules->{exp_majorminor} =~ m/^(.*):(.*)$/; - if ($1 ne "") { - if ($major != $1) { $wrong = 1; }; - } - if ($2 ne "") { - if ($minor != $2) { $wrong = 1; }; - } - if ($wrong == 0) { - print "major:minor: ok\n"; - } else { - printf " expected major:minor is: %i:%i\n", $1, $2; - printf " created major:minor is : %i:%i\n", $major, $minor; - print "major:minor: error\n"; - $error++; - sleep(1); - } -} - -sub udev_setup { - system("rm", "-rf", "$udev_dev"); - mkdir($udev_dev) || die "unable to create udev_dev: $udev_dev\n"; - # setting group and mode of udev_dev ensures the tests work - # even if the parent directory has setgid bit enabled. - chown (0, 0, $udev_dev) || die "unable to chown $udev_dev\n"; - chmod (0755, $udev_dev) || die "unable to chmod $udev_dev\n"; - - system("rm", "-rf", "$udev_run"); -} - -sub run_test { - my ($rules, $number) = @_; - - print "TEST $number: $rules->{desc}\n"; - print "device \'$rules->{devpath}\' expecting node/link \'$rules->{exp_name}\'\n"; - - udev("add", $rules->{devpath}, \$rules->{rules}); - if (defined($rules->{not_exp_name})) { - if ((-e "$udev_dev/$rules->{not_exp_name}") || - (-l "$udev_dev/$rules->{not_exp_name}")) { - print "nonexistent: error \'$rules->{not_exp_name}\' not expected to be there\n"; - $error++; - sleep(1); - } - } - - if ((-e "$udev_dev/$rules->{exp_name}") || - (-l "$udev_dev/$rules->{exp_name}")) { - - my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, - $atime, $mtime, $ctime, $blksize, $blocks) = stat("$udev_dev/$rules->{exp_name}"); - - if (defined($rules->{exp_perms})) { - permissions_test($rules, $uid, $gid, $mode); - } - if (defined($rules->{exp_majorminor})) { - major_minor_test($rules, $rdev); - } - print "add: ok\n"; - } else { - print "add: error"; - if ($rules->{exp_add_error}) { - print " as expected\n"; - } else { - print "\n"; - system("tree", "$udev_dev"); - print "\n"; - $error++; - sleep(1); - } - } - - if (defined($rules->{option}) && $rules->{option} eq "keep") { - print "\n\n"; - return; - } - - udev("remove", $rules->{devpath}, \$rules->{rules}); - if ((-e "$udev_dev/$rules->{exp_name}") || - (-l "$udev_dev/$rules->{exp_name}")) { - print "remove: error"; - if ($rules->{exp_rem_error}) { - print " as expected\n"; - } else { - print "\n"; - system("tree", "$udev_dev"); - print "\n"; - $error++; - sleep(1); - } - } else { - print "remove: ok\n"; - } - - print "\n"; - - if (defined($rules->{option}) && $rules->{option} eq "clean") { - udev_setup(); - } - -} - -# only run if we have root permissions -# due to mknod restrictions -if (!($<==0)) { - print "Must have root permissions to run properly.\n"; - exit; -} - -# skip the test when running in a container -system("systemd-detect-virt", "-c", "-q"); -if ($? >> 8 == 0) { - print "Running in a container, skipping the test.\n"; - exit($EXIT_TEST_SKIP); -} - -udev_setup(); - -my $test_num = 1; -my @list; - -foreach my $arg (@ARGV) { - if ($arg =~ m/--valgrind/) { - $valgrind = 1; - printf("using valgrind\n"); - } elsif ($arg =~ m/--gdb/) { - $gdb = 1; - printf("using gdb\n"); - } else { - push(@list, $arg); - } -} - -if ($list[0]) { - foreach my $arg (@list) { - if (defined($tests[$arg-1]->{desc})) { - print "udev-test will run test number $arg:\n\n"; - run_test($tests[$arg-1], $arg); - } else { - print "test does not exist.\n"; - } - } -} else { - # test all - print "\nudev-test will run ".($#tests + 1)." tests:\n\n"; - - foreach my $rules (@tests) { - run_test($rules, $test_num); - $test_num++; - } -} - -print "$error errors occurred\n\n"; - -# cleanup -system("rm", "-rf", "$udev_dev"); -system("rm", "-rf", "$udev_run"); - -if ($error > 0) { - exit(1); -} -exit(0); diff --git a/test/unstoppable.service b/test/unstoppable.service deleted file mode 100644 index 24fb0a25e..000000000 --- a/test/unstoppable.service +++ /dev/null @@ -1,5 +0,0 @@ -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStart=/bin/echo 'I'm unstoppable!' -ExecStop=/bin/systemctl start --no-block unstoppable.service -- 2.30.2