pax_global_header00006660000000000000000000000064151027624430014516gustar00rootroot0000000000000052 comment=b5bbf4f292e49a0557c271a73c09cc25ee79239c onedrive-2.5.9/000077500000000000000000000000001510276244300133465ustar00rootroot00000000000000onedrive-2.5.9/.github/000077500000000000000000000000001510276244300147065ustar00rootroot00000000000000onedrive-2.5.9/.github/FUNDING.yml000066400000000000000000000000261510276244300165210ustar00rootroot00000000000000--- github: abrauneggonedrive-2.5.9/.github/ISSUE_TEMPLATE/000077500000000000000000000000001510276244300170715ustar00rootroot00000000000000onedrive-2.5.9/.github/ISSUE_TEMPLATE/bug_report.yml000066400000000000000000000125671510276244300217770ustar00rootroot00000000000000name: "Bug Report" description: Before proceeding, please ensure your issue is a genuine software bug. This form is exclusively for reporting actual software bugs that need fixing. For other items, use GitHub Discussions instead. title: "Bug: " labels: ["Bug"] body: - type: markdown attributes: value: | **Note:** Before submitting a bug report, please ensure you are running the latest 'onedrive' client as built from 'master' and compile by using the latest available DMD or LDC compiler. Refer to the [install](https://github.com/abraunegg/onedrive/blob/master/docs/install.md) document on how to build the client for your system. - type: textarea id: bugDescription attributes: label: Describe the bug description: | Add a clear and concise description of what you think the bug is. validations: required: true - type: textarea id: operatingSystemDetails attributes: label: Operating System Details description: | * What is your Operating System (`uname -a`) * Output of: (`cat /etc/redhat-release`) or (`lsb_release -a`) render: shell validations: required: true - type: dropdown id: installMethod attributes: label: Client Installation Method description: | How did you install the client? multiple: false options: - From Source - From Distribution Package - From 3rd Party Source (PPA, OpenSuSE Build Service etc) validations: required: true - type: dropdown id: accountType attributes: label: OneDrive Account Type description: | What is your OneDrive Account Type? multiple: false options: - Personal - Business | Office365 - SharePoint validations: required: true - type: input id: applicationVersion attributes: label: What is your OneDrive Application Version description: | * What is your 'onedrive' client version (`onedrive --version`)? validations: required: true - type: textarea id: applicationConfig attributes: label: What is your OneDrive Application Configuration description: | * What is your Application Configuration (`onedrive --display-config`)? render: shell validations: required: true - type: textarea id: curlVersion attributes: label: What is your 'curl' version description: | * What is your output of (`curl --version`)? render: shell validations: required: true - type: dropdown id: syncdirLocation attributes: label: Where is your 'sync_dir' located description: | Is your 'sync_dir' a local directory or on a network mount point? multiple: false options: - Local - Network validations: required: true - type: textarea id: mountPoints attributes: label: What are all your system 'mount points' description: | * What is your output of (`mount`)? render: shell validations: required: true - type: textarea id: partitionTypes attributes: label: What are all your local file system partition types description: | * What is your output of (`lsblk -f`)? render: shell validations: required: true - type: textarea id: usageDetails attributes: label: How do you use 'onedrive' description: | Explain your entire configuration setup - is the OneDrive folder shared with any other system, shared with any other platform at the same time, is the OneDrive account you use shared across multiple systems / platforms / Operating Systems and in use at the same time validations: required: true - type: textarea id: howToReproduce attributes: label: Steps to reproduce the behaviour description: | List all the steps required to reproduce the issue. If issue is replicated by a specific 'file' or 'path' please archive the file and path tree & email to support@mynas.com.au validations: required: true - type: textarea id: applicationVerboseLog attributes: label: Complete Verbose Log Output description: | A clear and full log of the problem when running the application in the following manner (ie, not in monitor mode): (`onedrive --synchronize --verbose `) Run the application in a separate terminal window or SSH session and provide the entire application output including the error & crash. Please also generate a full debug log whilst reproducing the issue as per [https://github.com/abraunegg/onedrive/wiki/Generate-debug-log-for-support](https://github.com/abraunegg/onedrive/wiki/Generate-debug-log-for-support) and email to support@mynas.com.au render: shell validations: required: true - type: textarea id: screenshots attributes: label: Screenshots description: | If applicable, add screenshots to help explain your problem. - type: textarea id: otherLogs attributes: label: Other Log Information or Details description: | If applicable, add the relevant output from `dmesg` or similar. render: shell - type: textarea id: additionalContext attributes: label: Additional context description: | Add any other relevant additional context for the problem. onedrive-2.5.9/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000011321510276244300210560ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: "Have a question?" url: https://github.com/abraunegg/onedrive/discussions about: "Please refrain from using GitHub Issues for asking questions or reporting non-software bugs. Instead, post your questions, installation issues, dependency concerns, or anything else that isn't a software bug under GitHub Discussions. When starting a new GitHub Discussion, be sure to include all relevant details, such as your application version and installation method. Thank you for helping us keep the issue tracker focused on actual software bugs!" onedrive-2.5.9/.github/ISSUE_TEMPLATE/feature_request.yml000066400000000000000000000023341510276244300230210ustar00rootroot00000000000000name: "Feature Request" description: Suggest an idea for this project title: "Feature Request: " labels: ["Feature Request"] body: - type: markdown attributes: value: | Suggest an idea for this project - type: textarea id: featureProblem attributes: label: Is your feature request related to a problem? Please describe. description: | A clear and concise description of what the problem is. Ex. I'm always frustrated when ... validations: required: true - type: textarea id: featureSolution attributes: label: Describe the solution you'd like description: | A clear and concise description of what you want to happen. validations: required: true - type: textarea id: featureAlternatives attributes: label: Describe alternatives you've considered description: | A clear and concise description of any alternative solutions or features you've considered. validations: required: true - type: textarea id: additionalContext attributes: label: Additional context description: | Add any other context or information about the feature request here. validations: required: falseonedrive-2.5.9/.github/actions/000077500000000000000000000000001510276244300163465ustar00rootroot00000000000000onedrive-2.5.9/.github/actions/spelling/000077500000000000000000000000001510276244300201635ustar00rootroot00000000000000onedrive-2.5.9/.github/actions/spelling/allow.txt000066400000000000000000000110621510276244300220420ustar00rootroot00000000000000# # Allowed words not found in configured dictionaries # AADSTS aarch abraunegg accrights accrightslen adamdruppe ADand addrepo Adevice adr Agrant ags Aietf aip alex alpinelinux annobin antix Aoauth aothmane Aparams apng archlinux ARequest armhf ARMv arsd arsdnet artix ASCIIHTML ASpurious AThings attrnamespace aufxw aur autocheckpoint autoclean automake autoprocess autoupdate avmkfdiitirnrenzljwc avx bak baus BBBA BBD bcdefghi beffdb bhref bindir bir blargh bools bpozdena brp btw buflen bugzilla builddir buildfiles buildroot bytecompile bytesleft cancelfd CApath cattr cbf ccc Ccodegen Cdebuginfo certbot Cforce checkinterval chkconfig chpst chrooted classinfo clen cloexec Cloudflare cmptr cmsghdr codacy commandline concated confdir constness controllen crt Cstrip ctl ctls cvs cyb datadir dchar dcompiler debian debuginfo dechunk Deepin deimos desynchronisation devicecode devuan DHAO dhparams dirmask dlang dlclose dlfcn dlnow dltotal dmd dnf dnotify Dockerfiles dotfile dphys driveid driveone druntime drwx drwxr drwxrwxr dryrun DTime Dynu EIOv eis ele endinaness enduml Entra envp epel epfd eselect estr eventfd evt extattr fasynchronous fbc fcf fcgid fcgienv FCGX fcontext fedoraproject fefefe fexceptions ffat FFFD fhandler flto fno fracsec fstack FState fullchain fullscan gdc gdk gerror getenforce getxattr gfortran GFree Gibi GKXPN gmake gmodule GObject gosu gpg GPLv GPOs grecord groupinstall gshared gtk GVariant hdrs hideonindex hnsecs hostport hotmail howto hskrieg htons idk idlol idup ietf ifrom includedir ine infodir initted initval inodes intercambio iocp ioop ioops iov iovec iovlen ipresolve isv itemdb itimerspec journalctl jsvar kdbx kde keepass keyboxd keyutils kotlin krb kservices kubuntu lalen lbl Lcode lcurl ldbus ldc ldconfig ldl ldmd letsencrypt lgdk lgio lglib lgobject libcom libcrypto libdbus libdir libdruntime libedit libexec libexecdir libgcc libgdk libgio libglib libgobject libidn libinotify libkadm liblphobos libm libmpc libnghttp libnotify libphobos libpsl libqt libsepol libsqlite libssh libverto libxcrypt Lighttpd lintian llclose llsend lnotify localstatedir lol lpdw lpfn lrwxrwxrwx lsb lsqlite ltmain Lyncredible makepkg mangleof maxfiles mayne mbr memtest microsoftonline mkbuilddir mno mnt mountpoint mozram msghdr msonenote mswsock mtls mtune mydir mynasau myuser myusername nadded nadjusted namelen nas nativeclient nbd nbytes ncache nconnection ndata netinet nev nevent newfd newfile nexisting nfds nfor nintegrity niop noar noarch nobj nodelay nolan nomount nosignal nosync notif nph nrecords ntfs nto nuntil nupgrade nupload nvia objectsx odata ofonedrive onbinarymessage onedrive onenote onetoc onlydeps onmicrosoft ontextmessage oob opensuse outp overallocated pacman pamac parentid passoff pastebin permessage pfa PFN phlibi phobos pidx pixbuf pkgconf pkgconfig pki pkolmann podman pollfd pollfds postun prefork preinit preun privkey Privs prt prueba prw Pseudoblocking publicsuffix puml Pwy qewrqwerwqer Qmark qpos QWords qxor raf ralen raspberrypi raspi raspios rbtree rdo readdata readln readret reauth Recvd recvfd redhat relocs relro restorecon retu revents rko rlc rlim rlimit robertschulze rpaths rpcing rpmbuild rpmlib rpmuncompress Rproj rrodrigueznt rsv rtud rul runstatedir runsvdir Ruppe rwxr safebackup sargs sbindir scgi scl sdlang Searchmonkey semanage sendfd setsebool settime setxattr sev sfn sharedstatedir sharepoint shortnames sidx sigaction sigchldhandler sigemptyset signo sigpipe skilion skinparam slist Sockaddrs socketio somevar sooooo specpart SSLVERSION startuml statm stdc stringof Stringz subobject subobjects svdir swapfile swapon swp symcode syncable syncdir sysconf sysconfdir systemdsystemunitdir systemduserunitdir tbh tdcockers tempauth templ testbuild Thh thnk tidx timerfd tkx tlsv trashinfo Tting tval typecons uda udas ulnow uload ultotal undefiened unistd unittests urlify userinfo usermod userns userpass usl valgrind verifypeer vsid vti wal websockets webtemplate weburl Werror wpath writefln wrt wtf xbel xca xcbac xdeadbeef xdg xlaunch xof xored XXYYZZ yann yourapp yourdomain yourfile yourprogram Zorin zypper onedrive-2.5.9/.github/actions/spelling/excludes.txt000066400000000000000000000002001510276244300225300ustar00rootroot00000000000000# Ignore the action's configuration data ^\.github/action/spelling/ # Ignore all GitHub workflow files ^\.github/workflows/ onedrive-2.5.9/.github/actions/spelling/only.txt000066400000000000000000000001721510276244300217050ustar00rootroot00000000000000# Only process the following files # *.md # onedrive.1.in # *.d # *.puml \.md$ \.d$ \.puml$ ^onedrive\\.1\\.in$ onedrive-2.5.9/.github/actions/spelling/patterns.txt000066400000000000000000000017331510276244300225700ustar00rootroot00000000000000# https/http/file urls (?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/*%?=~_|!:,.;]+[-A-Za-z0-9+&@#/*%=~_|] # uuid: \b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b # sha256: \bsha256:[0-9a-fA-F]{64}\b # sha256 string without any prefix \b[0-9a-fA-F]{64}\b # 32 character string as generated from /dev/urandom \b[a-zA-Z0-9]{32}\b # 16 character string as generated from /dev/urandom \b[a-zA-Z0-9]{16}\b # Microsoft URL's \b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* # Microsoft OneDrive Business Account DriveID identifiers \b[bB]![A-Za-z0-9_-]{64}\b # UTF-16 Hex Values \b0x(?:D[89A-F][0-9A-F]{2}|E[0-9A-F]{3}|F[0-9A-F]{3})\b # man troff content # https://www.gnu.org/software/groff/manual/groff.html \\f[BCIPR] # All UPPERCASE letters only (no underscores) \b[A-Z]+\b # Ignore UPPERCASE letters separated by an underscore '_' \b[A-Z]+(?:_[A-Z]+)*\b onedrive-2.5.9/.github/workflows/000077500000000000000000000000001510276244300167435ustar00rootroot00000000000000onedrive-2.5.9/.github/workflows/docker.yaml000066400000000000000000000056001510276244300210770ustar00rootroot00000000000000name: Build Docker Images on: push: branches: [ master ] tags: [ 'v*' ] pull_request: # Comment these out to force a test build on a PR branches: - master types: [closed] env: DOCKER_HUB_SLUG: driveone/onedrive jobs: build: # Comment this out to force a test build on a PR if: (!(github.event.action == 'closed' && github.event.pull_request.merged != true)) # Build runs on runs-on: ubuntu-latest strategy: matrix: flavor: [ fedora, debian, alpine ] include: - flavor: fedora dockerfile: ./contrib/docker/Dockerfile platforms: linux/amd64,linux/arm64 - flavor: debian dockerfile: ./contrib/docker/Dockerfile-debian platforms: linux/386,linux/amd64,linux/arm64,linux/arm/v7 - flavor: alpine dockerfile: ./contrib/docker/Dockerfile-alpine platforms: linux/amd64,linux/arm64 steps: - name: Check out code from GitHub uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Docker meta id: docker_meta uses: marcelcoding/ghaction-docker-meta@v2 with: tag-edge: true images: | ${{ env.DOCKER_HUB_SLUG }} tag-semver: | {{version}} {{major}}.{{minor}} flavor: ${{ matrix.flavor }} main-flavor: ${{ matrix.flavor == 'debian' }} - uses: docker/setup-qemu-action@v3 with: image: tonistiigi/binfmt:latest platforms: all if: matrix.platforms != 'linux/amd64' - uses: docker/setup-buildx-action@v3 - name: Cache Docker layers uses: actions/cache@v4 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ matrix.flavor }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx-${{ matrix.flavor }} - name: Login to Docker Hub uses: docker/login-action@v3 if: github.event_name != 'pull_request' with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Build and Push to Docker uses: docker/build-push-action@v6 with: context: . file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platforms }} push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new - name: Move cache run: | rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache onedrive-2.5.9/.github/workflows/lock.yml000066400000000000000000000021221510276244300204130ustar00rootroot00000000000000name: 'Lock Threads' on: schedule: - cron: '19 0 * * *' jobs: lock: runs-on: ubuntu-latest steps: - name: Lock Threads uses: dessant/lock-threads@v2.0.3 with: github-token: ${{ secrets.LOCK_THREADS }} issue-lock-inactive-days: '7' issue-exclude-created-before: '' issue-exclude-labels: '' issue-lock-labels: '' issue-lock-comment: > This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. issue-lock-reason: 'resolved' pr-lock-inactive-days: '7' pr-exclude-created-before: '' pr-exclude-labels: '' pr-lock-labels: '' pr-lock-comment: > This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. pr-lock-reason: '' process-only: '' onedrive-2.5.9/.github/workflows/spellcheck.yaml000066400000000000000000000164141510276244300217520ustar00rootroot00000000000000name: Check Spelling # Comment management is handled through a secondary job, for details see: # https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions # # `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment # (in odd cases, it might actually run just to collapse a comment, but that's fairly rare) # it needs `contents: write` in order to add a comment. # # `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment # or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment) # it needs `pull-requests: write` in order to manipulate those comments. # Updating pull request branches is managed via comment handling. # For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list # # These elements work together to make it happen: # # `on.issue_comment` # This event listens to comments by users asking to update the metadata. # # `jobs.update` # This job runs in response to an issue_comment and will push a new commit # to update the spelling metadata. # # `with.experimental_apply_changes_via_bot` # Tells the action to support and generate messages that enable it # to make a commit to update the spelling metadata. # # `with.ssh_key` # In order to trigger workflows when the commit is made, you can provide a # secret (typically, a write-enabled github deploy key). # # For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key # Sarif reporting # # Access to Sarif reports is generally restricted (by GitHub) to members of the repository. # # Requires enabling `security-events: write` # and configuring the action with `use_sarif: 1` # # For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output # Minimal workflow structure: # # on: # push: # ... # pull_request_target: # ... # jobs: # # you only want the spelling job, all others should be omitted # spelling: # # remove `security-events: write` and `use_sarif: 1` # # remove `experimental_apply_changes_via_bot: 1` # ... otherwise adjust the `with:` as you wish on: push: branches: - "**" tags-ignore: - "**" pull_request_target: branches: - "**" types: - 'opened' - 'reopened' - 'synchronize' issue_comment: types: - 'created' jobs: spelling: name: Check Spelling permissions: contents: read pull-requests: read actions: read security-events: write outputs: followup: ${{ steps.spelling.outputs.followup }} runs-on: ubuntu-latest if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} concurrency: group: spelling-${{ github.event.pull_request.number || github.ref }} # note: If you use only_check_changed_files, you do not want cancel-in-progress cancel-in-progress: true steps: - name: check-spelling id: spelling uses: check-spelling/check-spelling@main with: suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }} checkout: true check_file_names: 0 spell_check_this: check-spelling/spell-check-this@prerelease post_comment: 0 use_magic_file: 1 report-timing: 1 warnings: bad-regex,binary-file,deprecated-feature,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check experimental_apply_changes_via_bot: 1 use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} extra_dictionary_limit: 40 extra_dictionaries: cspell:en_AU/src/hunspell-en_AU-large/en_AU-large.dic cspell:en_GB/src/hunspell/en_GB.dic cspell:software-terms/dict/softwareTerms.txt cspell:php/dict/php.txt cspell:node/dict/node.txt cspell:python/src/python/python-lib.txt cspell:python/src/common/extra.txt cspell:shell/dict/shell-all-words.txt cspell:filetypes/filetypes.txt cspell:k8s/dict/k8s.txt cspell:fullstack/dict/fullstack.txt cspell:golang/dict/go.txt cspell:aws/aws.txt cspell:java/src/java-terms.txt cspell:java/src/java.txt cspell:html/dict/html.txt cspell:typescript/dict/typescript.txt cspell:cpp/src/stdlib-c.txt cspell:dotnet/dict/dotnet.txt cspell:cpp/src/compiler-msvc.txt cspell:cpp/src/stdlib-cpp.txt cspell:cpp/src/ecosystem.txt cspell:r/src/r.txt cspell:cpp/src/compiler-gcc.txt cspell:rust/dict/rust.txt cspell:swift/src/swift.txt cspell:css/dict/css.txt cspell:cpp/src/lang-jargon.txt cspell:docker/src/docker-words.txt cspell:csharp/csharp.txt cspell:clojure/src/clojure.txt cspell:public-licenses/src/generated/public-licenses.txt cspell:lisp/lisp.txt cspell:django/dict/django.txt comment-push: name: Report (Push) # If your workflow isn't running on push, you can remove this job runs-on: ubuntu-latest needs: spelling permissions: contents: write if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' steps: - name: comment uses: check-spelling/check-spelling@main with: checkout: true spell_check_this: check-spelling/spell-check-this@prerelease task: ${{ needs.spelling.outputs.followup }} comment-pr: name: Report (PR) # If you workflow isn't running on pull_request*, you can remove this job runs-on: ubuntu-latest needs: spelling permissions: contents: read pull-requests: write if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') steps: - name: comment uses: check-spelling/check-spelling@main with: checkout: true spell_check_this: check-spelling/spell-check-this@prerelease task: ${{ needs.spelling.outputs.followup }} experimental_apply_changes_via_bot: 1 update: name: Update PR permissions: contents: write pull-requests: write actions: read runs-on: ubuntu-latest if: ${{ github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@check-spelling-bot apply') }} concurrency: group: spelling-update-${{ github.event.issue.number }} cancel-in-progress: false steps: - name: apply spelling updates uses: check-spelling/check-spelling@main with: experimental_apply_changes_via_bot: 1 checkout: true ssh_key: "${{ secrets.CHECK_SPELLING }}"onedrive-2.5.9/.github/workflows/testbuild.yaml000066400000000000000000000014731510276244300216330ustar00rootroot00000000000000name: Test Build on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest steps: - name: Check out code from GitHub uses: actions/checkout@v3 with: submodules: recursive fetch-depth: 0 - name: Update Image run: | sudo apt-get clean sudo apt-get update -y - name: Install build-essential run: sudo apt install -y build-essential - name: Install build-dependencies run: sudo apt install -y libcurl4-openssl-dev libsqlite3-dev pkg-config git curl ldc libdbus-1-dev - name: Configure run: ./configure - name: Compile run: make clean; make; - name: Install run: sudo make install - name: Run run: onedrive --versiononedrive-2.5.9/.gitignore000066400000000000000000000006461510276244300153440ustar00rootroot00000000000000.* onedrive onedrive.1 onedrive.o version Makefile config.log config.status autom4te.cache/ contrib/pacman/PKGBUILD contrib/spec/onedrive.spec contrib/systemd/onedrive.service contrib/systemd/onedrive@.service # Ignore everything in the .github folder .github/* # Allow actions/spelling in .github !.github/actions/spelling/ # Ensure spellcheck.yaml in .github is not ignored !.github/actions/spelling/spellcheck.yaml onedrive-2.5.9/LICENSE000066400000000000000000001045151510276244300143610ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . onedrive-2.5.9/Makefile.in000066400000000000000000000150631510276244300154200ustar00rootroot00000000000000package = @PACKAGE_NAME@ version = @PACKAGE_VERSION@ prefix = @prefix@ # we don't use @exec_prefix@ because it usually contains '${prefix}' literally # but we use @prefix@/bin/onedrive in the systemd unit files which are generated # from the configure script. # Thus, set exec_prefix unconditionally to prefix # Alternative approach would be add dep on sed, and do manual generation in the Makefile. # exec_prefix = @exec_prefix@ exec_prefix = @prefix@ datarootdir = @datarootdir@ datadir = @datadir@ srcdir = @srcdir@ bindir = @bindir@ mandir = @mandir@ sysconfdir = @sysconfdir@ docdir = $(datadir)/doc/$(package) VPATH = @srcdir@ INSTALL = @INSTALL@ # Icon install locations (system-wide hicolor theme) ICON_THEMEDIR = $(datadir)/icons/hicolor ICON_PLACES_DIR = $(ICON_THEMEDIR)/scalable/places ICON_SOURCE_SVG = contrib/images/onedrive.svg ICON_TARGET_SVG = onedrive.svg NOTIFICATIONS = @NOTIFICATIONS@ HAVE_SYSTEMD = @HAVE_SYSTEMD@ systemduserunitdir = @systemduserunitdir@ systemdsystemunitdir = @systemdsystemunitdir@ all_libs = @curl_LIBS@ @sqlite_LIBS@ @dbus_LIBS@ @notify_LIBS@ @bsd_inotify_LIBS@ @dynamic_linker_LIBS@ COMPLETIONS = @COMPLETIONS@ BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@ ZSH_COMPLETION_DIR = @ZSH_COMPLETION_DIR@ FISH_COMPLETION_DIR = @FISH_COMPLETION_DIR@ DEBUG = @DEBUG@ DC = @DC@ DCFLAGS = @DCFLAGS@ DEBUG_DCFLAGS = @DEBUG_DCFLAGS@ RELEASE_DCFLAGS = @RELEASE_DCFLAGS@ VERSION_DCFLAG = @VERSION_DCFLAG@ LINKER_DCFLAG = @LINKER_DCFLAG@ OUTPUT_DCFLAG = @OUTPUT_DCFLAG@ WERROR_DCFLAG = @WERROR_DCFLAG@ DCFLAGS += $(WERROR_DCFLAG) ifeq ($(DEBUG),yes) DCFLAGS += $(DEBUG_DCFLAGS) else DCFLAGS += $(RELEASE_DCFLAGS) endif ifeq ($(NOTIFICATIONS),yes) GUI_NOTIFICATIONS = $(addprefix $(VERSION_DCFLAG)=,NoPragma NoGdk Notifications) endif system_unit_files = contrib/systemd/onedrive@.service user_unit_files = contrib/systemd/onedrive.service DOCFILES = readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md ifneq ("$(wildcard /etc/redhat-release)","") RHEL = $(shell cat /etc/redhat-release | grep -E "(Red Hat Enterprise Linux|CentOS|AlmaLinux)" | wc -l) RHEL_VERSION = $(shell rpm --eval "%{rhel}") else RHEL = 0 RHEL_VERSION = 0 endif SOURCES = \ src/main.d \ src/config.d \ src/log.d \ src/util.d \ src/qxor.d \ src/curlEngine.d \ src/onedrive.d \ src/webhook.d \ src/sync.d \ src/itemdb.d \ src/sqlite.d \ src/clientSideFiltering.d \ src/monitor.d \ src/arsd/cgi.d \ src/xattr.d \ src/intune.d \ src/socketio.d \ src/curlWebsockets.d ifeq ($(NOTIFICATIONS),yes) SOURCES += src/notifications/notify.d src/notifications/dnotify.d endif all: onedrive clean: rm -f onedrive onedrive.o version rm -rf autom4te.cache rm -f config.log config.status # Remove files generated via ./configure distclean: clean rm -f Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 $(system_unit_files) $(user_unit_files) onedrive: $(SOURCES) if [ -f .git/HEAD ] ; then \ git describe --tags > version ; \ else \ echo $(version) > version ; \ fi $(DC) -J. $(GUI_NOTIFICATIONS) $(DCFLAGS) $^ $(addprefix $(LINKER_DCFLAG),$(all_libs)) $(OUTPUT_DCFLAG)$@ install: all mkdir -p $(DESTDIR)$(bindir) $(INSTALL) onedrive $(DESTDIR)$(bindir)/onedrive mkdir -p $(DESTDIR)$(mandir)/man1 $(INSTALL) -m 0644 onedrive.1 $(DESTDIR)$(mandir)/man1/onedrive.1 mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d $(INSTALL) -m 0644 contrib/logrotate/onedrive.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive mkdir -p $(DESTDIR)$(docdir) for file in $(DOCFILES); do \ $(INSTALL) -m 0644 $$file $(DESTDIR)$(docdir); \ done ifeq ($(HAVE_SYSTEMD),yes) mkdir -p $(DESTDIR)$(systemduserunitdir) mkdir -p $(DESTDIR)$(systemdsystemunitdir) ifeq ($(RHEL),1) $(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir) $(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemdsystemunitdir) else $(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir) $(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemduserunitdir) endif else ifeq ($(RHEL_VERSION),6) $(INSTALL) contrib/init.d/onedrive.init $(DESTDIR)/etc/init.d/onedrive $(INSTALL) contrib/init.d/onedrive_service.sh $(DESTDIR)$(bindir)/onedrive_service.sh endif endif ifeq ($(COMPLETIONS),yes) mkdir -p $(DESTDIR)$(ZSH_COMPLETION_DIR) $(INSTALL) -m 0644 contrib/completions/complete.zsh $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive mkdir -p $(DESTDIR)$(BASH_COMPLETION_DIR) $(INSTALL) -m 0644 contrib/completions/complete.bash $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive mkdir -p $(DESTDIR)$(FISH_COMPLETION_DIR) $(INSTALL) -m 0644 contrib/completions/complete.fish $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish endif # --- OneDrive folder icon (hicolor) --- mkdir -p $(DESTDIR)$(ICON_PLACES_DIR) $(INSTALL) -m 0644 $(ICON_SOURCE_SVG) $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG) # Refresh icon cache only when installing to the live system (not during staged DESTDIR installs) # and only if the theme directory is a proper theme (has index.theme) if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \ && [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \ gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \ fi uninstall: rm -f $(DESTDIR)$(bindir)/onedrive rm -f $(DESTDIR)$(mandir)/man1/onedrive.1 rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive ifeq ($(HAVE_SYSTEMD),yes) ifeq ($(RHEL),1) rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service else rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service rm -f $(DESTDIR)$(systemduserunitdir)/onedrive*.service endif else ifeq ($(RHEL_VERSION),6) rm -f $(DESTDIR)/etc/init.d/onedrive rm -f $(DESTDIR)$(bindir)/onedrive_service.sh endif endif for i in $(DOCFILES) ; do rm -f $(DESTDIR)$(docdir)/$$i ; done ifeq ($(COMPLETIONS),yes) rm -f $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive rm -f $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish endif # --- OneDrive folder icon (hicolor) --- rm -f $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG) # Refresh icon cache if removing from the live system and index.theme exists if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \ && [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \ gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \ fi onedrive-2.5.9/aclocal.m4000066400000000000000000000252401510276244300152110ustar00rootroot00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR onedrive-2.5.9/changelog.md000066400000000000000000002357041510276244300156320ustar00rootroot00000000000000# Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## 2.5.9 - 2025-11-06 ### Fixed * Fix Bug: Fix very high CPU & memory utilisation with 2.5.8 when using --upload-only (#3515) (CRITICAL BUGFIX) * Fix Bug: Unexpected deletion of empty nested folders during first sync with 'sync_list' and --resync (#3513) (CRITICAL BUGFIX) ### Updated * Updated documentation ## 2.5.8 - 2025-11-05 ### Added * Implement Feature Request: Add that dotfiles in sync_list should be synced even when skip_dotfiles = "true" (#3456) * Implement Feature Request: Add websocket notification support (#3413) * Implement Feature Request: Add --download-file feature (#3459) * Implement Feature Request: Add option to remove source folders when using --upload-only --remove-source-files (#3473) * Implement Feature Request: Add support for AlmaLinux (#3485) * Implement Feature Request: Add ONEDRIVE_THREADS Docker option (#3494) * Implement Feature Request: Implement Desktop Manager Integration for GNOME and KDE (#3500) ### Changed * Changed how the file path is computed when there are 'skip_dir' entries to be consistent (#3484) * Changed checkJSONAgainstClientSideFiltering() to avoid multiple calls to computeItemPath() (#3489) ### Fixed * Fix Bug: Ensure driveId target is cached for modified file uploads (#3454) * Fix Bug: Ensure that 'use_intune_sso' and 'use_device_auth' cannot be used together (#3453) * Fix Bug: Force DNS Timeout when forcing a libcurl fresh connection (#3468) * Fix Bug: Fix WebSocket connection failure on libcurl 8.12.x by forcing HTTP/1.1 and disabling ALPN/NPN (#3482) * Fix Bug: Fix application crash after deleting file locally (#3481) * Fix Bug: Fix missing user information when syncing shared files (#3483) * Fix Bug: Fix Shared Folder data being deleted due to 'skip_dir' entry of '.*' (#3476) * Fix Bug: Fix that if using 'sync_list' only add new JSON items early to allow applyPotentiallyChangedItem() to operate as expected (#3505) * Fix Bug: When using --dry-run use tracked renamed directories to avoid falsely indicating local data is new and uploading as new data (#3503) * Fix Bug: Fix the fetching of maximum open files to be more POSIX compliant (#3508) * Fix Bug: Fix the Handling of WebSocket 'echo' from a local change (#3509) ### Updated * Updated documentation ## 2.5.7 - 2025-09-23 ### Added * Implement Feature Request: Show GUI notification when sync suspends due to 'large delete' threshold (#3388) * Implement Feature Request: Implement resumable downloads (#3354) ### Changed * Removed the auto configuration of using a larger fragment size (#3370) * Removed the OpenSSL Test (#3420) ### Fixed * Fix Bug: Catch unhandled OneDriveError exception due to libcurl failing to access the system CA certificate bundle (#3322) * Fix Bug: 'items-dryrun.sqlite3' gets erroneously created when running a 'no sync' operation (#3325) * Fix Bug: Handle online folder deletion|creation with same name that causes 'id' to change (#3332) * Fix Bug: Reduce I/O pressure on SQLite DB Operations (#3334) * Fix Bug: Handle a 409 online folder creation response with a re-query of the API (#3335) * Fix Bug: Fix systemd issue with ExecStartPre statement to be more OS independent (#3348) * Fix Bug: When using --upload-only do not try and update the local file timestamp post upload (#3349) * Fix Bug: Add missing 'config' options to --display-config (#3353) * Fix Bug: Fix that a failed file download can lead to online deletion (#3351) * Fix Bug: Update searchDriveItemForFile() to handle specific 404 response when file cannot be found (#3365) * Fix Bug: Fix that resync state remains true post first successful full sync (#3368) * Fix Bug: Fix that long running big upload (250GB+) fails because of an expired access token (#3361) * Fix Bug: Handle inconsistent OneDrive Personal driveId casing across multiple Microsoft Graph API Endpoints (#3347) * Fix Bug: Update Microsoft OneNote handling for 'OneNote_RecycleBin' objects (#3350) * Fix Bug: Handle invalid JSON response when querying parental details (#3379) * Fix Bug: Fix foreign key issue when performing a --resync due to a missed conversion of driveId to lowercase values and path is covered by 'sync_list' entries (#3383) * Fix Bug: Ensure 'sync_list' inclusion rules are correctly evaluated (#3381) * Fix Bug: Fix issue of trying to create the root folder online (#3403) * Fix Bug: Fix resumable downloads so that the curl engine offset point is reset post successful download (#3406) * Fix Bug: Fix application crash when a file is created and deleted quickly (#3405) * Fix Bug: Fix the support of relocated shared folders for OneDrive Personal (#3411) * Fix Bug: Fix infinite loop after a failed network connection due to changed curl messaging (#3412) * Fix Bug: Fix computePath() to track the parental path anchor when a Shared Folder is relocated with a deeper path (#3417) * Fix Bug: Fix SharePoint Shared Library DB Tie creation (#3419) * Fix Bug: Update safeBackup() function to ensure that the 'safeBackup' path addition is only added once and ignore directories (#3445) ### Updated * Updated OAuth2 Interactive Authorisation Flow prompts to remove any ambiguity on what actions a user needs to take (#3323) * Updated onedrive.spec.in to correct missing dependencies (#3329) * Updated minimum compiler version details (#3330) * Updated documentation and function for how 'threads' is used (#3352) * Updated logging output for upsert() function (#3333) * Updated curl 8.13.x and 8.14.0 to known bad curl versions (#3356) * Updated logging output when processing online deletion events (#3373) * Updated logging output and use of grandparent identifiers when using --dry-run (#3377) * Updated GitHub Action versions for building Docker containers (#3378) * Updated how the ETA values are calculated to avoid negative values (#3386) * Updated Debian Dockerfile to use upstream gosu (#3402) * Updated Debian Dockerfile to use 'bookworm' (#3402) * Updated documentation ## 2.5.6 - 2025-06-05 ### Added * Enhancement: Add gdc support to enable Gentoo compilation * Enhancement: Add a notification to user regarding number of objects received from OneDrive API * Enhancement: Update 'skip_file' documentation and option validation * Enhancement: Add a new configuration option 'force_session_upload' to support editors and applications using atomic save operations * Enhancement: Added 2 functions to check for the presence of required remoteItem elements to create a Shared Folder DB entries * Implement Feature Request: Add local recycle bin or trash folder option * Implement Feature Request: Add configurable upload delay to support Obsidian * Implement Feature Request: Add validation of bools in config file * Implement Feature Request: Add native support for authentication via Intune dbus interface * Implement Feature Request: Implement OAuth2 Device Authorisation Flow ### Changed * Change logging output level for JSON elements that contain URL encoding * Change 'configure.ac' to use a static date value as Debian 'reproducible' build process forces a future date to rebuild any code to determine reproducibility ### Fixed * Fix Regression: Fixed regression in handling Microsoft OneNote package folders being created in error * Fix Regression: Fix OneNote file MimeType detection * Fix Regression: Fix supporting Personal Shared Folders that have been renamed * Fix Bug: Correct the logging output for 'skip_file' exclusions * Fix Bug: Validate raw JSON from Graph API for 15 character driveId API bug * Fix Bug: Fix JSON exception on webhook subscription renewal due to 308 redirect * Fix Bug: Update 'sync_list' line parsing to correctly escape characters for regex parsing * Fix Bug: Fix that an empty folder or folder with Microsoft OneNote files are deleted online when content is shared from a SharePoint Library Document Root * Fix Bug: Fix that empty 'skip_file' forces resync indefinitely * Fix Bug: Fix that 'sync_list' rule segment|depth check fails in some scenarios and implement a better applicable mechanism check * Fix Bug: Resolve crash when getpwuid() breaks when there is a glibc version mismatch * Fix Bug: Resolve crash when opening file fails when computing file hash * Fix Bug: Add check for invalid exclusion 'sync_list' exclusion rules * Fix Bug: Fix uploading of modified files when using --upload-only & --remove-source-files * Fix Bug: Fix local path calculation for Relocated OneDrive Business Shared Folders * Fix Bug: Fix 'sync_list' anywhere rule online directory creation * Fix Bug: Fix online path creation to ensure parental path structure is created in a consistent manner * Fix Bug: Fix handling of POSIX check for existing online items * Fix Bug: Fix args printing in dockerfile entrypoint * Fix Bug: Fix the testing of parental structure for 'sync_list' inclusion when adding inotify watches * Fix Bug: Fix failure to handle API 403 response when file fragment upload fails * Fix Bug: Fix application notification output to be consistent when skipping integrity checks * Fix Bug: Fix how local timestamps are modified * Fix Bug: Fix how online remaining free space is calculated and consumed internally for free space tracking * Fix Bug: Fix logic of determining if a file has valid integrity when using --disable-upload-validation * Fix Bug: Format the OneDrive change into a consumable object for the database earlier to use values in application logging * Fix Bug: Fix upload session offset handling to prevent desynchronisation on large files * Fix Bug: Fix implementation of 'write_xattr_data' to support FreeBSD * Fix Bug: Update hash functions to ensure file is closed if opened * Fix Bug: Dont blindly run safeBackup() if the online timestamp is newer * Fix Bug: Only set xattr values when not using --dry-run * Fix Bug: Fix UTC conversion for existing file timestamp post file download * Fix Bug: Fix that 'check_nosync' and 'skip_size' configuration options when changed, were not triggering a --resync correctly * Fix Bug: Ensure file is closed before renaming to improve compatibility with GCS buckets and network filesystems * Fix Bug: If a file fails to download, path fails to exist. Check path existence before setting xattr values ### Updated * Updated .gitignore to ignore files created during configure to be consistent with other files generated from .in templates * Updated bash,fish and zsh completion files to align with application options * Updated 'config' file to align to application options with applicable descriptions * Updated testbuild runner * Updated Fedora Docker OS version to Fedora 42 * Updated Ubuntu 24.10 curl version 8.9.1 to known bad curl versions and document the bugs associated with it * Updated Makefile to pass libraries after source files in compiler invocation * Updated 'configure.ac' to support more basename formats for DC * Update how threads are set based on available CPUs * Update setLocalPathTimestamp logging output * Update when to perform thread check and set as early as possible * Updated documentation ## 2.5.5 - 2025-03-17 ### Added * Implement Feature Request: Implement 'transfer_order' configuration option to allow the user to determine what order files are transferred in * Implement Feature Request: Implement 'disable_permission_set' configuration option to not set directory and file permissions * Implement Feature Request: Implement 'write_xattr_data' configuration option to add information about file creator/last editor as extended file attributes * Enhancement: Add support for --share-password option when --create-share-link is called * Enhancement: Add support 'localizedMessage' error messages in application output if this is provided in the JSON response from Microsoft Graph API ### Changed * Changed curl debug logging to --debug-https as this is more relevant * Comprehensively overhauled how OneDrive Personal Shared Folders are handled due to major OneDrive API backend platform user migration and major differences in API response output * Comprehensively changed OneDrive Personal 'driveId' value checking due to major OneDrive API backend platform user migration and major differences in API response output ### Fixed * Fix Bug: Fix path calculation for Client Side Filtering evaluations for Personal Accounts * Fix Bug: Fix path calculation for Client Side Filtering evaluations for Business Accounts * Fix Bug: Only perform path calculation if this is actually required * Fix Bug: Fix check for 'globbing' and 'wildcard' rules, that the number of segments before the first wildcard character need to match before the actual rule can be applied * Fix Bug: When using 'sync_list' , ignore specific exclusion to scan that path for new data, which may be actually included by an include rule, but the parent path is excluded * Fix Bug: When removing a OneDrive Personal Shared Folder, remove the actual link, not the remote user folder * Fix Bug: Fix 'Unsupported platform' for inotify watches by using the correct predefined version definition for Linux. ### Updated * Updated Fedora Docker OS version to Fedora 41 * Updated Alpine Docker OS version to Alpine 3.21 * Updated documentation ## 2.5.4 - 2025-02-03 ### Added * Implement Feature Request: Support Permanent Delete on OneDrive * Implement Feature Request: Support the moving of Shared Folder Links to other folders (Business Accounts only) * Enhancement: Added due to ongoing Ubuntu issues with 'curl' and 'libcurl', updated the documentation to include all relevant curl bugs and affected versions * Enhancement: Added quota status messages for nearing | critical | exceeded based on OneDrive Account API response * Enhancement: Added Docker variable to implement a sync once option * Enhancement: Added configuration option 'create_new_file_version' to force create new versions if that is the desire * Enhancement: Added support for adding SharePoint Libraries as Shared Folder Links * Enhancement: Added code and documentation changes to support FreeBSD * Enhancement: Added a check for the 'sea8cc6beffdb43d7976fbc7da445c639' string in the Microsoft OneDrive Personal Account Root ID response that denotes that the account cannot access Microsoft OneDrive at this point in time * Enhancement: Added './' sync_list rule check as this does not align to the documentation and these rules will not get matched correctly. ### Changed * Changed how debug logging outputs HTTP response headers and when this occurs * Changed when the check for no --sync | --monitor occurs so that this fails faster to avoid setting up all the other components * Changed isValidUTF8 function to use 'validate' rather than individual character checking and enhance checks including length constraints * Changed --dry-run authentication message to remove ambiguity that --dry-run cannot be used to authenticate the application ### Fixed * Fix Regression: Fixed regression that sync_list does not traverse shared directories * Fix Regression: Fixed regression of --display-config use after fast failing if --sync or --monitor has not been used * Fix Regression: Fixed regression from v2.4.x in handling uploading new and modified content to OneDrive Business and SharePoint to not create new versions of files post upload which adds to user quota * Fix Regression: Add back file transfer metrics which was available in v2.4.x * Fix Regression: Add code to support using 'display_processing_time' for functional performance which was available in v2.4.x * Fix Bug: Fixed build issue for OpenBSD (however support for OpenBSD itself is still a work-in-progress) * Fix Bug: Fixed issue regarding parsing OpenSSL and when unable to be parsed, do not force the application to exit * Fix Bug: Fixed the import of 'sync_list' rules due to OneDriveGUI creating a blank empty file by default * Fix Bug: Fixed the display of 'sync_list' rules due to OneDriveGUI creating a blank empty file by default * Fix Bug: Fixed that Business Shared Items shortcuts are skipped as being incorrectly detected as Microsoft OneNote Notebook items * Fix Bug: Fixed space calculations due to using ulong variable type to ensure that if calculation is negative, value is negative * Fix Bug: Fixed issue when downloading a file, and this fails due to an API error (400, 401, 5xx), online file is then not deleted * Fix Bug: Fixed skip_dir logic when reverse traversing folder structure * Fix Bug: Fixed issue that when using 'sync_list' if a file is moved to a newly created online folder, whilst the folder is created database wise, ensure this folder exists on local disk * Fix Bug: Fixed path got deleted in handling of move & close_write event when using 'vim'. * Fix Bug: Fixed that the root Personal Shared Folder is not handled due to missing API data European Data Centres * Fix Bug: Fixed the the local timestamp is not set when using --disable-download-validation * Fix Bug: Fixed Upload|Download Loop for AIP Protected File in Monitor Mode * Fix Bug: Fixed --single-directory Shared Folder DB entry creation * Fix Bug: Fixed API Bug to ensure that OneDrive Personal Drive ID and Remote Drive ID values are 16 characters, padded by leading zeros if the provided JSON data has dropped these leading zeros * Fix Bug: Fixed testInternetReachability function so that this always returns a boolean value and not throw an exception ### Updated * Updated documentation ## 2.5.3 - 2024-11-16 ### Added * Implement Feature Request: Implement Docker ENV variable for --cleanup-local-files * Enhancement: Setup a specific SIGPIPE Signal handler for curl/openssl generated signals * Enhancement: Add Check Spelling GitHub Action * Enhancement: Add passive database checkpoints to optimise database operations * Enhancement: Ensure application notifies user of curl versions that contain HTTP/2 bugs that impact the operation of this client * Enhancement: Add OpenSSL version warning * Enhancement: Improve performance with reduced execution time and lower CPU/system resource usage ### Changed * Specifically use a 'mutex' to perform the lock on database actions * Update safeBackup to use a new filename format for easier identification: filename-hostname-safeBackup-number.file_extension * Allow no-sync operations to complete online account checks ### Fixed * Fix Regression: Fix regression for Docker 'sync_dir' use * Fix Bug: Fix that a 'sync_list' entry of '/' will cause a index [0] is out of bounds * Fix Bug: Fix that when creating a new folder online the application generates an exception if it is in a Shared Online Folder * Fix Bug: Fix application crash when session upload files contain zero data or are corrupt * Fix Bug: Fix that curl generates a SIGPIPE that causes application to exit due to upstream device killing idle TCP connection * Fix Bug: Fix that skip_dir is not flagging directories correctly causing deletion if parental path structure needs to be created for sync_list handling * Fix Bug: Fix application crash caused by unable to drop table * Fix Bug: Fix that skip_file in config does not override defaults * Fix Bug: Handle DB upgrades from v2.4.x without causing application crash * Fix Bug: Fix a database statement execution error occurred: NOT NULL constraint failed: item.type due to Microsoft OneNote items * Fix Bug: Fix Operation not permitted FileException Error when attempting to use setTimes() function * Fix Bug: Fix that files with no mime type cause sync to crash * Fix Bug: Fix that bypass_data_preservation operates as intended ### Updated * Fixed spelling errors across all documentation and code * Update Dockerfile-debian to fix that libcurl4 does not get applied despite being pulled in. Explicitly install it from Debian 12 Backports * Add Ubuntu 24.10 OpenSuSE Build Service details * Update Dockerfile-alpine - revert to Alpine 3.19 as application fails to run on Alpine 3.20 * Updated documentation ## 2.5.2 - 2024-09-29 ### Added * Added 15 second sleep to systemd services to allow d-bus daemon to start and be available if present ### Fixed * Fix Bug: Application crash unable to correctly process a timestamp that has fractional seconds * Fix Bug: Fixed application logging output of Personal Shared Folder incorrectly advising there is no free space ### Updated * Updated documentation ## 2.5.1 - 2024-09-27 (DO NOT USE. CONTAINS A MAJOR TIMESTAMP ISSUE BUG) ### Special Thankyou A special thankyou to @phlibi for assistance with diagnosing and troubleshooting the database timestamp issue ### Added * Implement Feature Request: Don't print the d-bus WARNING if disable_notifications is set on cmd line or in config ### Changed * Add --enable-debug to Docker files when building client application to allow for better diagnostics when issues occur * Update Debian Dockerfile to use 'curl' from backports so a more modern curl version is used ### Fixed * Fix Regression: Fix regression of extra quotation marks when using ONEDRIVE_SINGLE_DIRECTORY with Docker * Fix Regression: Fix regression that real-time synchronization is not occurring when using --monitor and sync_list * Fix Regression: Fix regression that --remove-source-files doesn’t work * Fix Bug: Application crash when run synchronize due to negative free space online * Fix Bug: Application crash when performing a URL decode * Fix Bug: Application crash when using sync_list and Personal Shared Folders the root folder fails to present the item id * Fix Bug: Application crash when attempting to read timestamp from database as invalid data was written ### Updated * Updated documentation (various) ## 2.5.0 - 2024-09-16 ### Special Thankyou A special thankyou to all those who helped with testing and providing feedback during the development of this major release. A big thankyou to: * @JC-comp * @Lyncredible * @rrodrigueznt * @bpozdena * @hskrieg * @robertschulze * @aothmane-control * @mozram * @LunCh-CECNL * @pkolmann * @tdcockers * @undefiened * @cyb3rko ### Notable Changes * This version introduces significant changes regarding how the integrity and validation of your data is determined and is not backwards compatible with v2.4.x. * OneDrive Business Shared Folder Sync has been 100% re-written in v2.5.0. If you are using this feature, please read the new documentation carefully. * The application function --download-only no longer automatically deletes local files. Please read the new documentation regarding this feature. ### Added * Implement Feature Request: Multi-threaded uploading/downloading of files * Implement Feature Request: Renaming/Relocation of OneDrive Business shared folders * Implement Feature Request: Support the syncing of individual business shared files * Implement Feature Request: Implement application output to detail upload|download failures at the end of a sync process * Implement Feature Request: Log when manual Authorization is required when using --auth-files * Implement Feature Request: Add cmdline parameter to display (human readable) quota status * Implement Feature Request: Add capability to disable 'fullscan_frequency' * Implement Feature Request: Ability to set --disable-download-validation from Docker environment variable * Implement Feature Request: Ability to set --sync-shared-files from Docker environment variable * Implement Feature Request: file sync (upload/download/delete) notifications ### Changed * Renamed various documentation files to align with document content * Implement buffered logging so that all logging from all upload & download activities are handled correctly * Replace polling monitor loop with blocking wait * Update how the application utilises curl to fix socket reuse * Various performance enhancements * Implement refactored OneDrive API logic * Enforcement of operational conflicts * Enforcement of application configuration defaults and minimums * Utilise threadsafe sqlite DB access methods * Various bugs and other issues identified during development and testing * Various code cleanup and optimisations ### Fixed * Fix Bug: Upload only not working with Business shared folders * Fix Bug: Business shared folders with same basename get merged * Fix Bug: --dry-run prevents authorization * Fix Bug: Log timestamps lacking trailing zeros, leading to poor log file output alignment * Fix Bug: Subscription ID already exists when using webhooks * Fix Bug: Not all files being downloaded when API data includes HTML ASCII Control Sequences * Fix Bug: --display-sync-status does not work when OneNote sections (.one files) are in your OneDrive * Fix Bug: vim backups when editing files cause edited file to be deleted rather than the edited file being uploaded * Fix Bug: skip_dir does not always work as intended for all directory entries * Fix Bug: Online date being changed in download-only mode * Fix Bug: Resolve that download_only = "true" and cleanup_local_files = "true" also deletes files present online * Fix Bug: Resolve that upload session are not canceled with resync option * Fix Bug: Local files should be safely backed up when the item is not in sync locally to prevent data loss when they are deleted online * Fix Bug: Files with newer timestamp are not chosen as version to be kept * Fix Bug: Synced file is removed when updated on the remote while being processed by onedrive * Fix Bug: Cannot select/filter within Personal Shared Folders * Fix Bug: HTML encoding requires to add filter entries twice * Fix Bug: Uploading files using fragments stuck at 0% * Fix Bug: Implement safeguard when sync_dir is missing and is re-created data is not deleted online * Fix Bug: Fix that --get-sharepoint-drive-id does not handle a SharePoint site with more than 200 entries * Fix Bug: Fix that 'sync_list' does not include files that should be included, when specified just as *.ext_type * Fix Bug: Fix 'sync_list' processing so that '.folder_name' is excluded but 'folder_name' is included ### Updated * Overhauled all documentation ## 2.4.25 - 2023-06-21 ### Fixed * Fixed that the application was reporting as v2.2.24 when in fact it was v2.4.24 (release tagging issue) * Fixed that the running version obsolete flag (due to above issue) was causing a false flag as being obsolete * Fixed that zero-byte files do not have a hash as reported by the OneDrive API thus should not generate an error message ### Updated * Update to Debian Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Alpine Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Fedora Docker file to resolve Docker image Operating System reported vulnerabilities * Updated documentation (various) ## 2.4.24 - 2023-06-20 ### Fixed * Fix for extra encoded quotation marks surrounding Docker environment variables * Fix webhook subscription creation for SharePoint Libraries * Fix that a HTTP 504 - Gateway Timeout causes local files to be deleted when using --download-only & --cleanup-local-files mode * Fix that folders are renamed despite using --dry-run * Fix deprecation warnings with dmd 2.103.0 * Fix error that the application is unable to perform a database vacuum: out of memory when exiting ### Removed * Remove sha1 from being used by the client as this is being deprecated by Microsoft in July 2023 * Complete the removal of crc32 elements ### Added * Added ONEDRIVE_SINGLE_DIRECTORY configuration capability to Docker * Added --get-file-link shell completion * Added configuration to allow HTTP session timeout(s) tuning via config (taken from v2.5.x) ### Updated * Update to Debian Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Alpine Docker file to resolve Docker image Operating System reported vulnerabilities * Update to Fedora Docker file to resolve Docker image Operating System reported vulnerabilities * Updated cgi.d to commit 680003a - last upstream change before requiring `core.d` dependency requirement * Updated documentation (various) ## 2.4.23 - 2023-01-06 ### Fixed * Fixed RHEL7, RHEL8 and RHEL9 Makefile and SPEC file compatibility ### Removed * Disable systemd 'PrivateUsers' due to issues with systemd running processes when option is enabled, causes local file deletes on RHEL based systems ### Updated * Update --get-O365-drive-id error handling to display a more a more appropriate error message if the API cannot be found * Update the GitHub version check to utilise the date a release was done, to allow 1 month grace period before generating obsolete version message * Update Alpine Dockerfile to use Alpine 3.17 and Golang 1.19 * Update handling of --source-directory and --destination-directory if one is empty or missing and if used with --synchronize or --monitor * Updated documentation (various) ## 2.4.22 - 2022-12-06 ### Fixed * Fix application crash when local file is changed to a symbolic link with non-existent target * Fix build error with dmd-2.101.0 * Fix build error with LDC 1.28.1 on Alpine * Fix issue of silent exit when unable to delete local files when using --cleanup-local-files * Fix application crash due to access permissions on configured path for sync_dir * Fix potential application crash when exiting due to failure state and unable to cleanly shutdown the database * Fix creation of parent empty directories when parent is excluded by sync_list ### Added * Added performance output details for key functions ### Changed * Switch Docker 'latest' to point at Debian builds rather than Fedora due to ongoing Fedora build failures * Align application logging events to actual application defaults for --monitor operations * Performance Improvement: Avoid duplicate costly path calculations and DB operations if not required * Disable non-working remaining sandboxing options within systemd service files * Performance Improvement: Only check 'sync_list' if this has been enabled and configured * Display 'Sync with OneDrive is complete' when using --synchronize * Change the order of processing between Microsoft OneDrive restrictions and limitations check and skip_file|skip_dir check ### Removed * Remove building Fedora ARMv7 builds due to ongoing build failures ### Updated * Update config change detection handling * Updated documentation (various) ## 2.4.21 - 2022-09-27 ### Fixed * Fix that the download progress bar doesn't always reach 100% when rate_limit is set * Fix --resync handling of database file removal * Fix Makefile to be consistent with permissions that are being used * Fix that logging output for skipped uploaded files is missing * Fix to allow non-sync tasks while sync is running * Fix where --resync is enforced for non-sync operations * Fix to resolve segfault when running 'onedrive --display-sync-status' when run as 2nd process * Fix DMD 2.100.2 depreciation warning ### Added * Add GitHub Action Test Build Workflow (replacing Travis CI) * Add option --display-running-config to display the running configuration as used at application startup * Add 'config' option to request readonly access in oauth authorization step * Add option --cleanup-local-files to cleanup local files regardless of sync state when using --download-only * Add option --with-editing-perms to create a read-write shareable link when used with --create-share-link ### Changed * Change the exit code of the application to 126 when a --resync is required ### Updated * Updated --get-O365-drive-id implementation for data access * Update what application options require an argument * Update application logging output for error messages to remove certain \n prefix when logging to a file * Update onedrive.spec.in to fix error building RPM * Update GUI notification handling for specific skipped scenarios * Updated documentation (various) ## 2.4.20 - 2022-07-20 ### Fixed * Fix 'foreign key constraint failed' when using OneDrive Business Shared Folders due to change to using /delta query * Fix various little spelling errors (checked with lintian during Debian packaging) * Fix handling of a custom configuration directory when using --confdir * Fix to ensure that any active http instance is shutdown before any application exit * Fix to enforce that --confdir must be a directory ### Added * Added 'force_http_11' configuration option to allow forcing HTTP/1.1 operations ### Changed * Increased thread sleep for better process I/O wait handling * Removed 'force_http_2' configuration option ### Updated * Update OneDrive API response handling for National Cloud Deployments * Updated to switch to using curl defaults for HTTP/2 operations * Updated documentation (various) ## 2.4.19 - 2022-06-15 ### Fixed * Update Business Shared Folders to use a /delta query * Update when DB is updated by OneDrive API data and update when file hash is required to be generated ### Added * Added ONEDRIVE_UPLOADONLY flag for Docker ### Updated * Updated GitHub workflows * Updated documentation (various) ## 2.4.18 - 2022-06-02 ### Fixed * Fixed various database related access issues stemming from running multiple instances of the application at the same time using the same configuration data * Fixed --display-config being impacted by --resync flag * Fixed installation permissions for onedrive man-pages file * Fixed that in some situations that users try --upload-only and --download-only together which is not possible * Fixed application crash if unable to read required hash files ### Added * Added Feature Request to add an override for skip_dir|skip_file through flag to force sync * Added a check to validate local filesystem available space before attempting file download * Added GitHub Actions to build Docker containers and push to DockerHub ### Updated * Updated all Docker build files to current distributions, using updated distribution LDC version * Updated logging output to logfiles when an actual sync process is occurring * Updated output of --display-config to be more relevant * Updated manpage to align with application configuration * Updated documentation and Docker files based on minimum compiler versions to dmd-2.088.0 and ldc-1.18.0 * Updated documentation (various) ## 2.4.17 - 2022-04-30 ### Fixed * Fix docker build, by add missing git package for Fedora builds * Fix application crash when attempting to sync a broken symbolic link * Fix Internet connect disruption retry handling and logging output * Fix local folder creation timestamp with timestamp from OneDrive * Fix logging output when download failed ### Added * Add additional logging specifically for delete event to denote in log output the source of a deletion event when running in --monitor mode ### Changed * Improve when the local database integrity check is performed and on what frequency the database integrity check is performed ### Updated * Remove application output ambiguity on how to access 'help' for the client * Update logging output when running in --monitor --verbose mode in regards to the inotify events * Updated documentation (various) ## 2.4.16 - 2022-03-10 ### Fixed * Update application file logging error handling * Explicitly set libcurl options * Fix that when a sync_list exclusion is matched, the item needs to be excluded when using --resync * Fix so that application can be compiled correctly on Android hosts * Fix the handling of 429 and 5xx responses when they are generated by OneDrive in a self-referencing circular pattern * Fix applying permissions to volume directories when running in rootless podman * Fix unhandled errors from OneDrive when initialising subscriptions fail ### Added * Enable GitHub Sponsors * Implement --resync-auth to enable CLI passing in of --rsync approval * Add function to check client version vs latest GitHub release * Add --reauth to allow easy re-authentication of the client * Implement --modified-by to display who last modified a file and when the modification was done * Implement feature request to mark partially-downloaded files as .partial during download * Add documentation for Podman support ### Changed * Document risk regarding using --resync and force user acceptance of usage risk to proceed * Use YAML for Bug Reports and Feature Requests * Update Dockerfiles to use more modern base Linux distribution ### Updated * Updated documentation (various) ## 2.4.15 - 2021-12-31 ### Fixed * Fix unable to upload to OneDrive Business Shared Folders due to OneDrive API restricting quota information * Update fixing edge case with OneDrive Personal Shared Folders and --resync --upload-only ### Added * Add SystemD hardening * Add --operation-timeout argument ### Changed * Updated minimum compiler versions to dmd-2.087.0 and ldc-1.17.0 ### Updated * Updated Dockerfile-alpine to use Alpine 3.14 * Updated documentation (various) ## 2.4.14 - 2021-11-24 ### Fixed * Support DMD 2.097.0 as compiler for Docker Builds * Fix getPathDetailsByDriveId query when using --dry-run and a nested path with --single-directory * Fix edge case when syncing OneDrive Personal Shared Folders * Catch unhandled API response errors when querying OneDrive Business Shared Folders * Catch unhandled API response errors when listing OneDrive Business Shared Folders * Fix error 'Key not found: remaining' with Business Shared Folders (OneDrive API change) * Fix overwriting local files with older versions from OneDrive when items.sqlite3 does not exist and --resync is not used ### Added * Added operation_timeout as a new configuration to assist in cases where operations take longer that 1h to complete * Add Real-Time syncing of remote updates via webhooks * Add --auth-response option and expose through entrypoint.sh for Docker * Add --disable-download-validation ### Changed * Always prompt for credentials for authentication rather than re-using cached browser details * Do not re-auth on --logout ### Updated * Updated documentation (various) ## 2.4.13 - 2021-7-14 ### Fixed * Support DMD 2.097.0 as compiler * Fix to handle OneDrive API Bad Request response when querying if file exists * Fix application crash and incorrect handling of --single-directory when syncing a OneDrive Business Shared Folder due to using 'Add Shortcut to My Files' * Fix application crash due to invalid UTF-8 sequence in the pathname for the application configuration * Fix error message when deleting a large number of files * Fix Docker build process to source GOSU keys from updated GPG key location * Fix application crash due to a conversion overflow when calculating file offset for session uploads * Fix Docker Alpine build failing due to filesystem permissions issue due to Docker build system and Alpine Linux 3.14 incompatibility * Fix that Business Shared Folders with parentheses are ignored ### Updated * Updated Lock Bot to run daily * Updated documentation (various) ## 2.4.12 - 2021-5-28 ### Fixed * Fix an unhandled Error 412 when uploading modified files to OneDrive Business Accounts * Fix 'sync_list' handling of inclusions when name is included in another folders name * Fix that options --upload-only & --remove-source-files are ignored on an upload session restore * Fix to add file check when adding item to database if using --upload-only --remove-source-files * Fix application crash when SharePoint displayName is being withheld ### Updated * Updated Lock Bot to use GitHub Actions * Updated documentation (various) ## 2.4.11 - 2021-4-07 ### Fixed * Fix support for '/*' regardless of location within sync_list file * Fix 429 response handling correctly check for 'retry-after' response header and use set value * Fix 'sync_list' path handling for sub item matching, so that items in parent are not implicitly matched when there is no wildcard present * Fix --get-O365-drive-id to use 'nextLink' value if present when searching for specific SharePoint site names * Fix OneDrive Business Shared Folder existing name conflict check * Fix incorrect error message 'Item cannot be deleted from OneDrive because it was not found in the local database' when item is actually present * Fix application crash when unable to rename folder structure due to unhandled file-system issue * Fix uploading documents to Shared Business Folders when the shared folder exists on a SharePoint site due to Microsoft Sharepoint 'enrichment' of files * Fix that a file record is kept in database when using --no-remote-delete & --remove-source-files ### Added * Added support in --get-O365-drive-id to provide the 'drive_id' for multiple 'document libraries' within a single Shared Library Site ### Removed * Removed the deprecated config option 'force_http_11' which was flagged as deprecated by PR #549 in v2.3.6 (June 2019) ### Updated * Updated error output of --get-O365-drive-id to provide more details why an error occurred if a SharePoint site lacks the details we need to perform the match * Updated Docker build files for Raspberry Pi to dedicated armhf & aarch64 Dockerfiles * Updated logging output when in --monitor mode, avoid outputting misleading logging when the new or modified item is a file, not a directory * Updated documentation (various) ## 2.4.10 - 2021-2-19 ### Fixed * Catch database assertion when item path cannot be calculated * Fix alpine Docker build so it uses the same golang alpine version * Search all distinct drive id's rather than just default drive id for --get-file-link * Use correct driveId value to query for changes when using --single-directory * Improve upload handling of files for SharePoint sites and detecting when SharePoint modifies the file post upload * Correctly handle '~' when present in 'log_dir' configuration option * Fix logging output when handing downloaded new files * Fix to use correct path offset for sync_list exclusion matching ### Added * Add upload speed metrics when files are uploaded and clarify that 'data to transfer' is what is needed to be downloaded from OneDrive * Add new config option to rate limit connection to OneDrive * Support new file maximum upload size of 250GB * Support sync_list matching full path root wildcard with exclusions to simplify sync_list configuration ### Updated * Rename Office365.md --> SharePoint-Shared-Libraries.md which better describes this document * Updated Dockerfile config for arm64 * Updated documentation (various) ## 2.4.9 - 2020-12-27 ### Fixed * Fix to handle case where API provided deltaLink generates a further API error * Fix application crash when unable to read a local file due to local file permissions * Fix application crash when calculating the path length due to invalid UTF characters in local path * Fix Docker build on Alpine due missing symbols due to using the edge version of ldc and ldc-runtime * Fix application crash with --get-O365-drive-id when API response is restricted ### Added * Add debug log output of the configured URL's which will be used throughout the application to remove any ambiguity as to using incorrect URL's when making API calls * Improve application startup when using --monitor when there is no network connection to the OneDrive API and only initialise application once OneDrive API is reachable * Add Docker environment variable to allow --logout for re-authentication ### Updated * Remove duplicate code for error output functions and enhance error logging output * Updated documentation ## 2.4.8 - 2020-11-30 ### Fixed * Fix to use config set option for 'remove_source_files' and 'skip_dir_strict_match' rather than ignore if set * Fix download failure and crash due to incorrect local filesystem permissions when using mounted external devices * Fix to not change permissions on pre-existing local directories * Fix logging output when authentication authorisation fails to not say authorisation was successful * Fix to check application_id before setting redirect URL when using specific Azure endpoints * Fix application crash in --monitor mode due to 'Failed to stat file' when setgid is used on a directory and data cannot be read ### Added * Added advanced-usage.md to document advanced client usage such as multi account configurations and Windows dual-boot ### Updated * Updated --verbose logging output for config options when set * Updated documentation (man page, USAGE.md, Office365.md, BusinessSharedFolders.md) ## 2.4.7 - 2020-11-09 ### Fixed * Fix debugging output for /delta changes available queries * Fix logging output for modification comparison source data * Fix Business Shared Folder handling to process only Shared Folders, not individually shared files * Fix cleanup dryrun shm and wal files if they exist * Fix --list-shared-folders to only show folders * Fix to check for the presence of .nosync when processing DB entries * Fix skip_dir matching when using --resync * Fix uploading data to shared business folders when using --upload-only * Fix to merge contents of SQLite WAL file into main database file on sync completion * Fix to check if localModifiedTime is >= than item.mtime to avoid re-upload for equal modified time * Fix to correctly set config directory permissions at first start ### Added * Added environment variable to allow easy HTTPS debug in docker * Added environment variable to allow download-only mode in Docker * Implement Feature: Allow config to specify a tenant id for non-multi-tenant applications * Implement Feature: Adding support for authentication with single tenant custom applications * Implement Feature: Configure specific File and Folder Permissions ### Updated * Updated documentation (readme.md, install.md, usage.md, bug_report.md) ## 2.4.6 - 2020-10-04 ### Fixed * Fix flagging of remaining free space when value is being restricted * Fix --single-directory path handling when path does not exist locally * Fix checking for 'Icon' path as no longer listed by Microsoft as an invalid file or folder name * Fix removing child items on OneDrive when parent item responds with access denied * Fix to handle deletion events for files when inotify events are missing * Fix uninitialised value error as reported by valgrind * Fix to handle deletion events for directories when inotify events are missing ### Added * Implement Feature: Create shareable link * Implement Feature: Support wildcard within sync_list entries * Implement Feature: Support negative patterns in sync_list for fine grained exclusions * Implement Feature: Multiple skip_dir & skip_file configuration rules * Add GUI notification to advise users when the client needs to be reauthenticated ### Updated * Updated documentation (readme.md, install.md, usage.md, bug_report.md) ## 2.4.5 - 2020-08-13 ### Fixed * Fixed fish auto completions installation destination ## 2.4.4 - 2020-08-11 ### Fixed * Fix 'skip_dir' & 'skip_file' pattern matching to ensure correct matching is performed * Fix 'skip_dir' & 'skip_file' so that each directive is only used against directories or files as required in --monitor * Fix client hand when attempting to sync a Unix pipe file * Fix --single-directory & 'sync_list' performance * Fix erroneous 'return' statements which could prematurely end processing all changes returned from OneDrive * Fix segfault when attempting to perform a comparison on an inotify event when determining if event path is directory or file * Fix handling of Shared Folders to ensure these are checked against 'skip_dir' entries * Fix 'Skipping uploading this new file as parent path is not in the database' when uploading to a Personal Shared Folder * Fix how available free space is tracked when uploading files to OneDrive and Shared Folders * Fix --single-directory handling of parent path matching if path is being seen for first time ### Added * Added Fish auto completions ### Updated * Increase maximum individual file size to 100GB due to Microsoft file limit increase * Update Docker build files and align version of compiler across all Docker builds * Update Docker documentation * Update NixOS build information * Update the 'Processing XXXX' output to display the full path * Update logging output when a sync starts and completes when using --monitor * Update Office 365 / SharePoint site search query and response if query return zero match ## 2.4.3 - 2020-06-29 ### Fixed * Check if symbolic link is relative to location path * When using output logfile, fix inconsistent output spacing * Perform initial sync at startup in monitor mode * Handle a 'race' condition to process inotify events generated whilst performing DB or filesystem walk * Fix segfault when moving folder outside the sync directory when using --monitor on Arch Linux ### Added * Added additional inotify event debugging * Added support for loading system configs if there's no user config * Added Ubuntu installation details to include installing the client from a PPA * Added openSUSE installation details to include installing the client from a package * Added support for comments in sync_list file * Implement recursive deletion when Retention Policy is enabled on OneDrive Business Accounts * Implement support for National cloud deployments * Implement OneDrive Business Shared Folders Support ### Updated * Updated documentation files (various) * Updated log output messaging when a full scan has been set or triggered * Updated buildNormalizedPath complexity to simplify code * Updated to only process OneDrive Personal Shared Folders only if account type is 'personal' ## 2.4.2 - 2020-05-27 ### Fixed * Fixed the catching of an unhandled exception when inotify throws an error * Fixed an uncaught '100 Continue' response when files are being uploaded * Fixed progress bar for uploads to be more accurate regarding percentage complete * Fixed handling of database query enforcement if item is from a shared folder * Fixed compiler depreciation of std.digest.digest * Fixed checking & loading of configuration file sequence * Fixed multiple issues reported by Valgrind * Fixed double scan at application startup when using --monitor & --resync together * Fixed when renaming a file locally, ensure that the target filename is valid before attempting to upload to OneDrive * Fixed so that if a file is modified locally and --resync is used, rename the local file for data preservation to prevent local data loss ### Added * Implement 'bypass_data_preservation' enhancement ### Changed * Changed the monitor interval default to 300 seconds ### Updated * Updated the handling of out-of-space message when OneDrive is out of space * Updated debug logging for retry wait times ## 2.4.1 - 2020-05-02 ### Fixed * Fixed the handling of renaming files to a name starting with a dot when skip_dotfiles = true * Fixed the handling of parentheses from path or file names, when doing comparison with regex * Fixed the handling of renaming dotfiles to another dotfile when skip_dotfile=true in monitor mode * Fixed the handling of --dry-run and --resync together correctly as current database may be corrupt * Fixed building on Alpine Linux under Docker * Fixed the handling of --single-directory for --dry-run and --resync scenarios * Fixed the handling of .nosync directive when downloading new files into existing directories that is (was) in sync * Fixed the handling of zero-byte modified files for OneDrive Business * Fixed skip_dotfiles handling of .folders when in monitor mode to prevent monitoring * Fixed the handling of '.folder' -> 'folder' move when skip_dotfiles is enabled * Fixed the handling of folders that cannot be read (permission error) if parent should be skipped * Fixed the handling of moving folders from skipped directory to non-skipped directory via OneDrive web interface * Fixed building on CentOS Linux under Docker * Fixed Codacy reported issues: double quote to prevent globbing and word splitting * Fixed an assertion when attempting to compute complex path comparison from shared folders * Fixed the handling of .folders when being skipped via skip_dir ### Added * Implement Feature: Implement the ability to set --resync as a config option, default is false ### Updated * Update error logging to be consistent when initialising fails * Update error logging output to handle HTML error response reasoning if present * Update link to new Microsoft documentation * Update logging output to differentiate between OneNote objects and other unsupported objects * Update RHEL/CentOS spec file example * Update known-issues.md regarding 'SSL_ERROR_SYSCALL, errno 104' * Update progress bar to be more accurate when downloading large files * Updated #658 and #865 handling of when to trigger a directory walk when changes occur on OneDrive * Updated handling of when a full scan is required due to utilising sync_list * Updated handling of when OneDrive service throws a 429 or 504 response to retry original request after a delay ## 2.4.0 - 2020-03-22 ### Fixed * Fixed how the application handles 429 response codes from OneDrive (critical update) * Fixed building on Alpine Linux under Docker * Fixed how the 'username' is determined from the running process for logfile naming * Fixed file handling when a failed download has occurred due to exiting via CTRL-C * Fixed an unhandled exception when OneDrive throws an error response on initialising * Fixed the handling of moving files into a skipped .folder when skip_dotfiles = true * Fixed the regex parsing of response URI to avoid potentially generating a bad request to OneDrive, leading to a 'AADSTS9002313: Invalid request. Request is malformed or invalid.' response. ### Added * Added a Dockerfile for building on Raspberry Pi / ARM platforms * Implement Feature: warning on big deletes to safeguard data on OneDrive * Implement Feature: delete local files after sync * Implement Feature: perform skip_dir explicit match only * Implement Feature: provide config file option for specifying the Client Identifier ### Changed * Updated the 'Client Identifier' to a new Application ID ### Updated * Updated relevant documentation (README.md, USAGE.md) to add new feature details and clarify existing information * Update completions to include the --force-http-2 option * Update to always log when a file is skipped due to the item being invalid * Update application output when just authorising application to make information clearer * Update logging output when using sync_list to be clearer as to what is actually being processed and why ## 2.3.13 - 2019-12-31 ### Fixed * Change the sync list override flag to false as default when not using sync_list * Fix --dry-run output when using --upload-only & --no-remote-delete and deleting local files ### Added * Add a verbose log entry when a monitor sync loop with OneDrive starts & completes ### Changed * Remove logAndNotify for 'processing X changes' as it is excessive for each change bundle to inform the desktop of the number of changes the client is processing ### Updated * Updated INSTALL.md with Ubuntu 16.x i386 build instructions to reflect working configuration on legacy hardware * Updated INSTALL.md with details of Linux packages * Updated INSTALL.md build instructions for CentOS platforms ## 2.3.12 - 2019-12-04 ### Fixed * Retry session upload fragment when transient errors occur to prevent silent upload failure * Update Microsoft restriction and limitations about windows naming files to include '~' for folder names * Docker guide fixes, add multiple account setup instructions * Check database for excluded sync_list items previously in scope * Catch DNS resolution error * Fix where an item now out of scope should be flagged for local delete * Fix rebuilding of onedrive, but ensure version is properly updated * Update Ubuntu i386 build instructions to use DMD using preferred method ### Added * Add debug message to when a message is sent to dbus or notification daemon * Add i386 instructions for legacy low memory platforms using LDC ## 2.3.11 - 2019-11-05 ### Fixed * Fix typo in the documentation regarding invalid config when upgrading from 'skilion' codebase * Fix handling of skip_dir, skip_file & sync_list config options * Fix typo in the documentation regarding sync_list * Fix log output to be consistent with sync_list exclusion * Fix 'Processing X changes' output to be more reflective of actual activity when using sync_list * Remove unused and unexported SED variable in Makefile.in * Handle curl exceptions and timeouts better with backoff/retry logic * Update skip_dir pattern matching when using wildcards * Fix when a full rescan is performed when using sync_list * Fix 'Key not found: name' when computing skip_dir path * Fix call from --monitor to observe --no-remote-delete * Fix unhandled exception when monitor initialisation failure occurs due to too many open local files * Fix unhandled 412 error response from OneDrive API when moving files right after upload * Fix --monitor when used with --download-only. This fixes a regression introduced in 12947d1. * Fix if --single-directory is being used, and we are using --monitor, only set inotify watches on the single directory ### Changed * Move JSON logging output from error messages to debug output ## 2.3.10 - 2019-10-01 ### Fixed * Fix searching for 'name' when deleting a synced item, if the OneDrive API does not return the expected details in the API call * Fix abnormal termination when no Internet connection * Fix downloading of files from OneDrive Personal Shared Folders when the OneDrive API responds with unexpected additional path data * Fix logging of 'initialisation' of client to actually when the attempt to initialise is performed * Fix when using a sync_list file, using deltaLink will actually 'miss' changes (moves & deletes) on OneDrive as using sync_list discards changes * Fix OneDrive API status code 500 handling when uploading files as error message is not correct * Fix crash when resume_upload file is not a valid JSON * Fix crash when a file system exception is generated when attempting to update the file date & time and this fails ### Added * If there is a case-insensitive match error, also return the remote name from the response * Make user-agent string a configuration option & add to config file * Set default User-Agent to 'OneDrive Client for Linux v{version}' ### Changed * Make verbose logging output optional on Docker * Enable --resync & debug client output via environment variables on Docker ## 2.3.9 - 2019-09-01 ### Fixed * Catch a 403 Forbidden exception when querying Sharepoint Library Names * Fix unhandled error exceptions that cause application to exit / crash when uploading files * Fix JSON object validation for queries made against OneDrive where a JSON response is expected and where that response is to be used and expected to be valid * Fix handling of 5xx responses from OneDrive when uploading via a session ### Added * Detect the need for --resync when config changes either via config file or cli override ### Changed * Change minimum required version of LDC to v1.12.0 ### Removed * Remove redundant logging output due to change in how errors are reported from OneDrive ## 2.3.8 - 2019-08-04 ### Fixed * Fix unable to download all files when OneDrive fails to return file level details used to validate file integrity * Included the flag "-m" to create the home directory when creating the user * Fix entrypoint.sh to work with "sudo docker run" * Fix docker build error on stretch * Fix hidden directories in 'root' from having prefix removed * Fix Sharepoint Document Library handling for .txt & .csv files * Fix logging for init.d service * Fix OneDrive response missing required 'id' element when uploading images * Fix 'Unexpected character '<'. (Line 1:1)' when OneDrive has an exception error * Fix error when creating the sync dir fails when there is no permission to create the sync dir ### Added * Add explicit check for hashes to be returned in cases where OneDrive API fails to provide them despite requested to do so * Add comparison with sha1 if OneDrive provides that rather than quickXor * Add selinux configuration details for a sync folder outside of the home folder * Add date tag on docker.hub * Add back CentOS 6 install & uninstall to Makefile * Add a check to handle moving items out of sync_list sync scope & delete locally if true * Implement --get-file-link which will return the weburl of a file which has been synced to OneDrive ### Changed * Change unauthorized-api exit code to 3 * Update LDC to v1.16.0 for Travis CI testing * Use replace function for modified Sharepoint Document Library files rather than delete and upload as new file, preserving file history * Update Sharepoint modified file handling for files > 4Mb in size ### Removed * Remove -d shorthand for --download-only to avoid confusion with other GNU applications where -d stands for 'debug' ## 2.3.7 - 2019-07-03 ### Fixed * Fix not all files being downloaded due to OneDrive query failure * False DB update which potentially could had lead to false data loss on OneDrive ## 2.3.6 - 2019-07-03 (DO NOT USE) ### Fixed * Fix JSONValue object validation * Fix building without git being available * Fix some spelling/grammatical errors * Fix OneDrive error response on creating upload session ### Added * Add download size & hash check to ensure downloaded files are valid and not corrupt * Added --force-http-2 to use HTTP/2 if desired ### Changed * Deprecated --force-http-1.1 (enabled by default) due to OneDrive inconsistent behavior with HTTP/2 protocol ## 2.3.5 - 2019-06-19 ### Fixed * Handle a directory in the sync_dir when no permission to access * Get rid of forced root necessity during installation * Fix broken autoconf code for --enable-XXX options * Fix so that skip_size check should only be used if configured * Fix a OneDrive Internal Error exception occurring before attempting to download a file ### Added * Check for supported version of D compiler ## 2.3.4 - 2019-06-13 ### Fixed * Fix 'Local files not deleted' when using bad 'skip_file' entry * Fix --dry-run logging output for faking downloading new files * Fix install unit files to correct location on RHEL/CentOS 7 * Fix up unit file removal on all platforms * Fix setting times on a file by adding a check to see if the file was actually downloaded before attempting to set the times on the file * Fix an unhandled curl exception when OneDrive throws an internal timeout error * Check timestamp to ensure that latest timestamp is used when comparing OneDrive changes * Fix handling responses where cTag JSON elements are missing * Fix Docker entrypoint.sh failures when GID is defined but not UID ### Added * Add autoconf based build system * Add an encoding validation check before any path length checks are performed as if the path contains any invalid UTF-8 sequences * Implement --sync-root-files to sync all files in the OneDrive root when using a sync_list file that would normally exclude these files from being synced * Implement skip_size feature request * Implement feature request to support file based OneDrive authorization (request | response) ### Updated * Better handle initialisation issues when OneDrive / MS Graph is experiencing problems that generate 401 & 5xx error codes * Enhance error message when unable to connect to Microsoft OneDrive service when the local CA SSL certificate(s) have issues * Update Dockerfile to correctly build on Docker Hub * Rework directory layout and re-factor MD files for readability ## 2.3.3 - 2019-04-16 ### Fixed * Fix --upload-only check for Sharepoint uploads * Fix check to ensure item root we flag as 'root' actually is OneDrive account 'root' * Handle object error response from OneDrive when uploading to OneDrive Business * Fix handling of some OneDrive accounts not providing 'quota' details * Fix 'resume_upload' handling in the event of bad OneDrive response ### Added * Add debugging for --get-O365-drive-id function * Add shell (bash,zsh) completion support * Add config options for command line switches to allow for better config handling in docker containers ### Updated * Implement more meaningful 5xx error responses * Update onedrive.logrotate indentations and comments * Update 'min_notif_changes' to 'min_notify_changes' ## 2.3.2 - 2019-04-02 ### Fixed * Reduce scanning the entire local system in monitor mode for local changes * Resolve file creation loop when working directly in the synced folder and Microsoft Sharepoint ### Added * Add 'monitor_fullscan_frequency' config option to set the frequency of performing a full disk scan when in monitor mode ### Updated * Update default 'skip_file' to include tmp and lock files generated by LibreOffice * Update database version due to changing defaults of 'skip_file' which will force a rebuild and use of new skip_file default regex ## 2.3.1 - 2019-03-26 ### Fixed * Resolve 'make install' issue where rebuild of application would occur due to 'version' being flagged as .PHONY * Update readme build instructions to include 'make clean;' before build to ensure that 'version' is cleanly removed and can be updated correctly * Update Debian Travis CI build URL's ## 2.3.0 - 2019-03-25 ### Fixed * Resolve application crash if no 'size' value is returned when uploading a new file * Resolve application crash if a 5xx error is returned when uploading a new file * Resolve not 'refreshing' version file when rebuilding * Resolve unexpected application processing by preventing use of --synchronize & --monitor together * Resolve high CPU usage when performing DB reads * Update error logging around directory case-insensitive match * Update Travis CI and ARM dependencies for LDC 1.14.0 * Update Makefile due to build failure if building from release archive file * Update logging as to why a OneDrive object was skipped ### Added * Implement config option 'skip_dir' ## 2.2.6 - 2019-03-12 ### Fixed * Resolve application crash when unable to delete remote folders when business retention policies are enabled * Resolve deprecation warning: loop index implicitly converted from size_t to int * Resolve warnings regarding 'bashisms' * Resolve handling of notification failure is dbus server has not started or available * Resolve handling of response JSON to ensure that 'id' key element is always checked for * Resolve excessive & needless logging in monitor mode * Resolve compiling with LDC on Alpine as musl lacks some standard interfaces * Resolve notification issues when offline and cannot act on changes * Resolve Docker entrypoint.sh to accept command line arguments * Resolve to create a new upload session on reinit * Resolve where on OneDrive query failure, default root and drive id is used if a response is not returned * Resolve Key not found: nextExpectedRanges when attempting session uploads and incorrect response is returned * Resolve application crash when re-using an authentication URI twice after previous --logout * Resolve creating a folder on a shared personal folder appears successful but returns a JSON error * Resolve to treat mv of new file as upload of mv target * Update Debian i386 build dependencies * Update handling of --get-O365-drive-id to print out all 'site names' that match the explicit search entry rather than just the last match * Update Docker readme & documentation * Update handling of validating local file permissions for new file uploads ### Added * Add support for install & uninstall on RHEL / CentOS 6.x * Add support for when notifications are enabled, display the number of OneDrive changes to process if any are found * Add 'config' option 'min_notif_changes' for minimum number of changes to notify on, default = 5 * Add additional Docker container builds utilising a smaller OS footprint * Add configurable interval of logging in monitor mode * Implement new CLI option --skip-dot-files to skip .files and .folders if option is used * Implement new CLI option --check-for-nosync to ignore folder when special file (.nosync) present * Implement new CLI option --dry-run ## 2.2.5 - 2019-01-16 ### Fixed * Update handling of HTTP 412 - Precondition Failed errors * Update --display-config to display sync_list if configured * Add a check for 'id' key on metadata update to prevent 'std.json.JSONException@std/json.d(494): Key not found: id' * Update handling of 'remote' folder designation as 'root' items * Ensure that remote deletes are handled correctly * Handle 'Item not found' exception when unable to query OneDrive 'root' for changes * Add handling for JSON response error when OneDrive API returns a 404 due to OneDrive API regression * Fix items highlighted by codacy review ### Added * Add --force-http-1.1 flag to downgrade any HTTP/2 curl operations to HTTP 1.1 protocol * Support building with ldc2 and usage of pkg-config for lib finding ## 2.2.4 - 2018-12-28 ### Fixed * Resolve JSONException when supplying --get-O365-drive-id option with a string containing spaces * Resolve 'sync_dir' not read from 'config' file when run in Docker container * Resolve logic where potentially a 'default' ~/OneDrive sync_dir could be set despite 'config' file configured for an alternate * Make sure sqlite checkpointing works by properly finalizing statements * Update logic handling of --single-directory to prevent inadvertent local data loss * Resolve signal handling and database shutdown on SIGINT and SIGTERM * Update man page * Implement better help output formatting ### Added * Add debug handling for sync_dir operations * Add debug handling for homePath calculation * Add debug handling for configDirBase calculation * Add debug handling if syncDir is created * Implement Feature Request: Add status command or switch ## 2.2.3 - 2018-12-20 ### Fixed * Fix syncdir option is ignored ## 2.2.2 - 2018-12-20 ### Fixed * Handle short lived files in monitor mode * Provide better log messages, less noise on temporary timeouts * Deal with items that disappear during upload * Deal with deleted move targets * Reinitialize sync engine after three failed attempts * Fix activation of dmd for docker builds * Fix to check displayName rather than description for --get-O365-drive-id * Fix checking of config file keys for validity * Fix exception handling when missing parameter from usage option ### Added * Notification support via libnotify * Add very verbose (debug) mode by double -v -v * Implement option --display-config ## 2.2.1 - 2018-12-04 ### Fixed * Gracefully handle connection errors in monitor mode * Fix renaming of files when syncing * Installation of doc files, addition of man page * Adjust timeout values for libcurl * Continue in monitor mode when sync timed out * Fix unreachable statements * Update Makefile to better support packaging * Allow starting offline in monitor mode ### Added * Implement --get-O365-drive-id to get correct SharePoint Shared Library (#248) * Docker buildfiles for onedrive service (#262) ## 2.2.0 - 2018-11-24 ### Fixed * Updated client to output additional logging when debugging * Resolve database assertion failure due to authentication * Resolve unable to create folders on shared OneDrive Personal accounts ### Added * Implement feature request to Sync from Microsoft SharePoint * Implement feature request to specify a logging directory if logging is enabled ### Changed * Change '--download' to '--download-only' to align with '--upload-only' * Change logging so that logging to a separate file is no longer the default ## 2.1.6 - 2018-11-15 ### Fixed * Updated HTTP/2 transport handling when using curl 7.62.0 for session uploads ### Added * Added PKGBUILD for makepkg for building packages under Arch Linux ## 2.1.5 - 2018-11-11 ### Fixed * Resolve 'Key not found: path' when syncing from some shared folders due to OneDrive API change * Resolve to only upload changes on remote folder if the item is in the database - dont assert if false * Resolve files will not download or upload when using curl 7.62.0 due to HTTP/2 being set as default for all curl operations * Resolve to handle HTTP request returned status code 412 (Precondition Failed) for session uploads to OneDrive Personal Accounts * Resolve unable to remove '~/.config/onedrive/resume_upload: No such file or directory' if there is a session upload error and the resume file does not get created * Resolve handling of response codes when using 2 different systems when using '--upload-only' but the same OneDrive account and uploading the same filename to the same location ### Updated * Updated Travis CI building on LDC v1.11.0 for ARMHF builds * Updated Makefile to use 'install -D -m 644' rather than 'cp -raf' * Updated default config to be aligned to code defaults ## 2.1.4 - 2018-10-10 ### Fixed * Resolve syncing of OneDrive Personal Shared Folders due to OneDrive API change * Resolve incorrect systemd installation location(s) in Makefile ## 2.1.3 - 2018-10-04 ### Fixed * Resolve File download fails if the file is marked as malware in OneDrive * Resolve high CPU usage when running in monitor mode * Resolve how default path is set when running under systemd on headless systems * Resolve incorrectly nested configDir in X11 systems * Resolve Key not found: driveType * Resolve to validate filename length before download to conform with Linux FS limits * Resolve file handling to look for HTML ASCII codes which will cause uploads to fail * Resolve Key not found: expirationDateTime on session resume ### Added * Update Travis CI building to test build on ARM64 ## 2.1.2 - 2018-08-27 ### Fixed * Resolve skipping of symlinks in monitor mode * Resolve Gateway Timeout - JSONValue is not an object * Resolve systemd/user is not supported on CentOS / RHEL * Resolve HTTP request returned status code 429 (Too Many Requests) * Resolve handling of maximum path length calculation * Resolve 'The parent item is not in the local database' * Resolve Correctly handle file case sensitivity issues in same folder * Update unit files documentation link ## 2.1.1 - 2018-08-14 ### Fixed * Fix handling no remote delete of remote directories when using --no-remote-delete * Fix handling of no permission to access a local file / corrupt local file * Fix application crash when unable to access login.microsoft.com upon application startup ### Added * Build instructions for openSUSE Leap 15.0 ## 2.1.0 - 2018-08-10 ### Fixed * Fix handling of database exit scenarios when there is zero disk space left on drive where the items database resides * Fix handling of incorrect database permissions * Fix handling of different database versions to automatically re-create tables if version mis-match * Fix handling timeout when accessing the Microsoft OneDrive Service * Fix localFileModifiedTime to not use fraction seconds ### Added * Implement Feature: Add a progress bar for large uploads & downloads * Implement Feature: Make checkinterval for monitor configurable * Implement Feature: Upload Only Option that does not perform remote delete * Implement Feature: Add ability to skip symlinks * Add dependency, ebuild and build instructions for Gentoo distributions ### Changed * Build instructions for x86, x86_64 and ARM32 platforms * Travis CI files to automate building on x32, x64 and ARM32 architectures * Travis CI files to test built application against valid, invalid and problem files from previous issues ## 2.0.2 - 2018-07-18 ### Fixed * Fix systemd service install for builds with DESTDIR defined * Fix 'HTTP 412 - Precondition Failed' error handling * Gracefully handle OneDrive account password change * Update logic handling of --upload-only and --local-first ## 2.0.1 - 2018-07-11 ### Fixed * Resolve computeQuickXorHash generates a different hash when files are > 64Kb ## 2.0.0 - 2018-07-10 ### Fixed * Resolve conflict resolution issue during syncing - the client does not handle conflicts very well & keeps on adding the hostname to files * Resolve skilion #356 by adding additional check for 409 response from OneDrive * Resolve multiple versions of file shown on website after single upload * Resolve to gracefully fail when 'onedrive' process cannot get exclusive database lock * Resolve 'Key not found: fileSystemInfo' when then item is a remote item (OneDrive Personal) * Resolve skip_file config entry needs to be checked for any characters to escape * Resolve Microsoft Naming Convention not being followed correctly * Resolve Error when trying to upload a file with weird non printable characters present * Resolve Crash if file is locked by online editing (status code 423) * Resolve compilation issue with dmd-2.081.0 * Resolve skip_file configuration doesn't handle spaces or specified directory paths ### Added * Implement Feature: Add a flag to detect when the sync-folder is missing * Implement Travis CI for code testing ### Changed * Update Makefile to use DESTDIR variables * Update OneDrive Business maximum path length from 256 to 400 * Update OneDrive Business allowed characters for files and folders * Update sync_dir handling to use the absolute path for setting parameter to something other than ~/OneDrive via config file or command line * Update Fedora build instructions ## 1.1.2 - 2018-05-17 ### Fixed * Fix 4xx errors including (412 pre-condition, 409 conflict) * Fix Key not found: lastModifiedDateTime (OneDrive API change) * Fix configuration directory not found when run via init.d * Fix skilion Issues #73, #121, #132, #224, #257, #294, #295, #297, #298, #300, #306, #315, #320, #329, #334, #337, #341 ### Added * Add logging - log client activities to a file (/var/log/onedrive/%username%.onedrive.log or ~/onedrive.log) * Add https debugging as a flag * Add `--synchronize` to prevent from syncing when just blindly running the application * Add individual folder sync * Add sync from local directory first rather than download first then upload * Add upload long path check * Add upload only * Add check for max upload file size before attempting upload * Add systemd unit files for single & multi user configuration * Add init.d file for older init.d based services * Add Microsoft naming conventions and namespace validation for items that will be uploaded * Add remaining free space counter at client initialisation to avoid out of space upload issue * Add large file upload size check to align to OneDrive file size limitations * Add upload file size validation & retry if does not match * Add graceful handling of some fatal errors (OneDrive 5xx error handling) ## Unreleased - 2018-02-19 ### Fixed * Crash when the delta link is expired ### Changed * Disabled buffering on stdout ## 1.1.1 - 2018-01-20 ### Fixed * Wrong regex for parsing authentication uri ## 1.1.0 - 2018-01-19 ### Added * Support for shared folders (OneDrive Personal only) * `--download` option to only download changes * `DC` variable in Makefile to chose the compiler ### Changed * Print logs on stdout instead of stderr * Improve log messages ## 1.0.1 - 2017-08-01 ### Added * `--syncdir` option ### Changed * `--version` output simplified * Updated README ### Fixed * Fix crash caused by remotely deleted and recreated directories ## 1.0.0 - 2017-07-14 ### Added * `--version` option onedrive-2.5.9/config000066400000000000000000000231051510276244300145370ustar00rootroot00000000000000# Configuration for OneDrive Linux Client # This file contains the list of supported configuration fields with their default values. # All values need to be enclosed in quotes # When changing a config option below, remove the '#' from the start of the config line # For a more detailed explanation of all config options below see docs/application-config-options.md or the man page. ## This is the config option for application id that used to identify itself to Microsoft OneDrive. #application_id = "d50ca740-c83f-4d1b-b616-12c519384f0c" ## This is the config option to change the Microsoft Azure Authentication Endpoint that the client uses to conform with data and security requirements that requires data to reside within the geographic borders of that country. #azure_ad_endpoint = "" ## This config option allows the locking of the client to a specific single tenant and will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". #azure_tenant_id = "" ## This config option allows the disabling of preserving local data by renaming the local file in the event of data conflict. If this is enabled, you will experience data loss on your local data as the local file will be over-written with data from OneDrive online. Use with care and caution. #bypass_data_preservation = "false" ## This config option is useful to prevent application startup & ongoing use in 'Monitor Mode' if the configured 'sync_dir' is a separate disk that is being mounted by your system. #check_nomount = "false" ## This config option is useful to prevent the sync of a *local* directory to Microsoft OneDrive. It will *not* check for this file online to prevent the download of directories to your local system. #check_nosync = "false" ## This config option defines the number of children in a path that is locally removed which will be classified as a 'big data delete' to safeguard large data removals - which are typically accidental local delete events. #classify_as_big_delete = "1000" ## This config option provides the capability to cleanup local files and folders if they are removed online. #cleanup_local_files = "false" ## This configuration setting manages the TCP connection timeout duration in seconds for HTTPS connections to Microsoft OneDrive when using the curl library. #connect_timeout = "10" ## This setting controls how the application handles the Microsoft SharePoint feature which modifies all PDF, MS Office & HTML files post upload, effectively breaking the integrity of your data online. #create_new_file_version = "false" ## This setting controls the timeout duration, in seconds, for when data is not received on an active connection to Microsoft OneDrive over HTTPS. #data_timeout = "60" ## This setting controls whether the curl library is configured to output additional data to assist with diagnosing HTTPS issues and problems. #debug_https = "false" ## This setting controls whether 'inotify' events should be delayed or not. #delay_inotify_processing = "false" ## This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive. #disable_download_validation = "false" ## This setting controls whether GUI notifications are sent from the client to your display manager session. #disable_notifications = "false" ## This setting controls whether the application will set the permissions on files and directories using the values of 'sync_dir_permissions' and 'sync_file_permissions'. #disable_permission_set = "false" ## This option determines whether the client will conduct integrity validation on files uploaded to Microsoft OneDrive. #disable_upload_validation = "false" ## This option will include the running config of the application at application startup. #display_running_config = "false" ## This option will display file transfer metrics when enabled. #display_transfer_metrics = "false" ## This setting controls the libcurl DNS cache value. #dns_timeout = "60" ## This setting forces the client to only download data from Microsoft OneDrive and replicate that data locally. #download_only = "false" ## This setting controls the specific drive identifier the client will use when syncing with Microsoft OneDrive. #drive_id = "" ## This setting controls the application capability to test your application configuration without actually performing any real activity. #dry_run = "false" ## This setting controls the application logging all actions to a separate file. #enable_logging = "false" ## This setting controls the file fragment size when uploading large files to Microsoft OneDrive. #file_fragment_size = "10" ## This setting controls the application HTTP protocol version, downgrading to HTTP/1.1 when enabled. #force_http_11 = "false" ## This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the local timestamp of the file #force_session_upload = "false" ## This setting controls the application IP protocol used when communicating with Microsoft OneDrive. #ip_protocol_version = "0" ## This setting controls what the application considers the 'source of truth' for your data. #local_first = "false" ## This setting controls the custom application log path when 'enable_logging' has been enabled. #log_dir = "" ## This configuration option controls the number of seconds a cURL engine is considered stale and destroyed after last use. #max_curl_idle = "120" ## This configuration option controls how often a full scan of your data is performed in monitor mode. #monitor_fullscan_frequency = "12" ## This setting determines how often the sync loop runs in --monitor mode. #monitor_interval = "300" ## This configuration option controls suppression of frequent monitor log messages. #monitor_log_frequency = "12" ## This configuration option controls whether local deletes are replicated to OneDrive when using --upload-only. #no_remote_delete = "false" ## This setting controls whether the client logs GUI notifications when file actions occur. #notify_file_actions = "false" ## This configuration controls the maximum amount of time a file operation is allowed to take. #operation_timeout = "3600" ## Permanently delete online items when removed locally. Bypasses OneDrive recycle bin. #permanent_delete = "false" ## This setting limits the per-thread bandwidth used by the client. #rate_limit = "0" ## This configuration option controls whether the client operates in read-only mode. #read_only_auth_scope = "false" ## This configuration option allows you to specify the 'Recycle Bin' path for the application. This is only used if 'use_recycle_bin' is enabled. #recycle_bin_path = "/path/to/desired/location/" ## This option removes the local file after a successful upload to OneDrive. #remove_source_files = "false" ## This configuration controls whether a full resync is performed at application startup. #resync = "false" ## This option approves use of --resync, useful in automated environments. #resync_auth = "false" ## This option controls which directories are excluded from sync. #skip_dir = "" ## When enabled, skip_dir matches must be strict, full path matches only. #skip_dir_strict_match = "false" ## When enabled, skip dotfiles and dot folders from sync. #skip_dotfiles = "false" ## This setting controls which files are skipped during sync. #skip_file = "~*|.~*|*.tmp|*.swp|*.partial" ## Skip syncing files larger than this size in MB. #skip_size = "0" ## Skip symbolic links during sync. #skip_symlinks = "false" ## Reserve this much free disk space (in MB) to avoid disk full issues. #space_reservation = "50" ## Sync OneDrive Business shared folders that are shortcuts in 'My Files'. These will be stored in a local folder called 'Files Shared With Me'. #sync_business_shared_items = "false" ## Local directory to sync with OneDrive. #sync_dir = "~/OneDrive" ## Permissions to apply to created local directories. #sync_dir_permissions = "700" ## Permissions to apply to created local files. #sync_file_permissions = "600" ## Sync all root files in sync_dir when using sync_list. #sync_root_files = "false" ## Number of threads to use for upload/download. #threads = "8" ## File transfer ordering between client and OneDrive. #transfer_order = "default" ## Only upload changes to OneDrive, do not download from cloud. #upload_only = "false" ## Authenticate using the Microsoft OAuth2 Device Authorisation Flow #use_device_auth = "true" ## Single Sign-On (SSO) via Intune using the Microsoft Identity Device Broker #use_intune_sso = "true" ## This configuration option controls the application function to move online deleted files to a 'Recycle Bin' on your system. #use_recycle_bin = "false" ## Custom User-Agent string for requests to OneDrive. If you change this, you will get throttled by the Microsoft Graph API. Change with caution. #user_agent = "ISV|abraunegg|OneDrive Client for Linux/vX.Y.Z-A-bcdefghi" ## Enable webhook-based remote update notifications in monitor mode. #webhook_enabled = "false" ## Time in seconds before webhook subscription expires. #webhook_expiration_interval = "600" ## IP address to listen on for incoming webhook updates. #webhook_listening_host = "0.0.0.0" ## TCP port to listen on for incoming webhook updates. #webhook_listening_port = "8888" ## Public webhook URL for Microsoft to send notifications to. #webhook_public_url = "" ## Frequency (in seconds) to renew webhook subscription. #webhook_renewal_interval = "300" ## Frequency (in seconds) to retry a failed webhook subscription renewal. #webhook_retry_interval = "60" ## Write xattr metadata fields (createdBy, lastModifiedBy) to synced files. #write_xattr_data = "false" onedrive-2.5.9/configure000077500000000000000000003435341510276244300152710ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for onedrive v2.5.9. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/abraunegg/onedrive about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='onedrive' PACKAGE_TARNAME='onedrive' PACKAGE_VERSION='v2.5.9' PACKAGE_STRING='onedrive v2.5.9' PACKAGE_BUGREPORT='https://github.com/abraunegg/onedrive' PACKAGE_URL='' ac_unique_file="src/main.d" ac_subst_vars='LTLIBOBJS LIBOBJS DEBUG FISH_COMPLETION_DIR ZSH_COMPLETION_DIR BASH_COMPLETION_DIR bashcompdir COMPLETIONS dynamic_linker_LIBS bsd_inotify_LIBS NOTIFICATIONS notify_LIBS notify_CFLAGS HAVE_SYSTEMD systemduserunitdir systemdsystemunitdir enable_dbus dbus_LIBS dbus_CFLAGS sqlite_LIBS sqlite_CFLAGS curl_LIBS curl_CFLAGS WERROR_DCFLAG OUTPUT_DCFLAG LINKER_DCFLAG VERSION_DCFLAG RELEASE_DCFLAGS DEBUG_DCFLAGS PACKAGE_DATE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM DCFLAGS DC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_version_check with_systemdsystemunitdir with_systemduserunitdir enable_notifications enable_completions with_bash_completion_dir with_zsh_completion_dir with_fish_completion_dir enable_debug ' ac_precious_vars='build_alias host_alias target_alias DC DCFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR curl_CFLAGS curl_LIBS sqlite_CFLAGS sqlite_LIBS dbus_CFLAGS dbus_LIBS notify_CFLAGS notify_LIBS bashcompdir' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures onedrive v2.5.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/onedrive] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of onedrive v2.5.9:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-version-check Disable checks of compiler version during configure time --enable-notifications Enable desktop notifications via libnotify --enable-completions Install shell completions for bash, zsh, and fish --enable-debug Pass debug option to the compiler Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-systemdsystemunitdir=DIR Directory for systemd system service files --with-systemduserunitdir=DIR Directory for systemd user service files --with-bash-completion-dir=DIR Directory for bash completion files --with-zsh-completion-dir=DIR Directory for zsh completion files --with-fish-completion-dir=DIR Directory for fish completion files Some influential environment variables: DC D compiler executable DCFLAGS flags for D compiler PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path curl_CFLAGS C compiler flags for curl, overriding pkg-config curl_LIBS linker flags for curl, overriding pkg-config sqlite_CFLAGS C compiler flags for sqlite, overriding pkg-config sqlite_LIBS linker flags for sqlite, overriding pkg-config dbus_CFLAGS C compiler flags for dbus, overriding pkg-config dbus_LIBS linker flags for dbus, overriding pkg-config notify_CFLAGS C compiler flags for notify, overriding pkg-config notify_LIBS linker flags for notify, overriding pkg-config bashcompdir value of completionsdir for bash-completion, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF onedrive configure v2.5.9 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by onedrive $as_me v2.5.9, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi PACKAGE_DATE="November 2025" for ac_prog in dmd ldmd2 ldc2 gdmd gdc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DC"; then ac_cv_prog_DC="$DC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DC=$ac_cv_prog_DC if test -n "$DC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DC" >&5 $as_echo "$DC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DC" && break done test -n "$DC" || DC="NOT_FOUND" DC_TYPE= case $(basename $DC) in *ldc2*) DC_TYPE=ldc ;; *gdc*) DC_TYPE=gdc ;; *dmd*) DC_TYPE=dmd ;; NOT_FOUND) as_fn_error 1 "Could not find any compatible D compiler" "$LINENO" 5 esac vercomp () { IFS=. read -r a0 a1 a2 aa <' $bb then return 1 else return 0 fi fi fi fi } DO_VERSION_CHECK=1 # Check whether --enable-version-check was given. if test "${enable_version_check+set}" = set; then : enableval=$enable_version_check; fi if test "x$enable_version_check" = "xno"; then : DO_VERSION_CHECK=0 fi if test "$DO_VERSION_CHECK" = "1"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of D compiler" >&5 $as_echo_n "checking version of D compiler... " >&6; } # check for valid versions case $(basename $DC) in *ldmd2*|*ldc2*) # LDC - the LLVM D compiler (1.12.0): ... VERSION=`$DC --version` # remove everything up to first ( VERSION=${VERSION#* (} # remove everything after ): VERSION=${VERSION%%):*} # now version should be something like L.M.N MINVERSION=1.20.1 ;; *gdmd*|*gdc*) # Both gdmd and gdc print the same version information VERSION=`${DC} --version | head -n1` # Some examples of output: # gdc (Gentoo 14.2.1_p20250301 p8) 14.2.1 20250301 # gcc (GCC) 14.2.1 20250207 # Arch # gdc (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7) # gdc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 VERSION=${VERSION#gdc } # VERSION=(...) VER DATE ... VERSION=${VERSION#*) } # VERSION=VER DATE ... VERSION=${VERSION%% *} MINVERSION=15 ;; *dmd*) # DMD64 D Compiler v2.085.1\n... VERSION=`$DC --version | tr '\n' ' '` VERSION=${VERSION#*Compiler v} VERSION=${VERSION%% *} # now version should be something like L.M.N MINVERSION=2.091.1 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VERSION" >&5 $as_echo "$VERSION" >&6; } vercomp $MINVERSION $VERSION if test $? = 1 then as_fn_error 1 "Compiler version insufficient, current compiler version $VERSION, minimum version $MINVERSION" "$LINENO" 5 fi #echo "MINVERSION=$MINVERSION VERSION=$VERSION" fi case "$DC_TYPE" in dmd) DEBUG_DCFLAGS="-g -debug -gs" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; ldc) DEBUG_DCFLAGS="-g -d-debug -gc" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-d-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; gdc) DEBUG_DCFLAGS="-g -fdebug" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-fversion LINKER_DCFLAG=-Wl, OUTPUT_DCFLAG=-o WERROR_DCFLAG=-Werror ;; esac pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl" >&5 $as_echo_n "checking for curl... " >&6; } if test -n "$curl_CFLAGS"; then pkg_cv_curl_CFLAGS="$curl_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_curl_CFLAGS=`$PKG_CONFIG --cflags "libcurl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$curl_LIBS"; then pkg_cv_curl_LIBS="$curl_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_curl_LIBS=`$PKG_CONFIG --libs "libcurl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then curl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl" 2>&1` else curl_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$curl_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libcurl) were not met: $curl_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables curl_CFLAGS and curl_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables curl_CFLAGS and curl_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else curl_CFLAGS=$pkg_cv_curl_CFLAGS curl_LIBS=$pkg_cv_curl_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite" >&5 $as_echo_n "checking for sqlite... " >&6; } if test -n "$sqlite_CFLAGS"; then pkg_cv_sqlite_CFLAGS="$sqlite_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite_CFLAGS=`$PKG_CONFIG --cflags "sqlite3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sqlite_LIBS"; then pkg_cv_sqlite_LIBS="$sqlite_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite_LIBS=`$PKG_CONFIG --libs "sqlite3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sqlite_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sqlite3" 2>&1` else sqlite_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sqlite3" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sqlite_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sqlite3) were not met: $sqlite_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sqlite_CFLAGS and sqlite_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sqlite_CFLAGS and sqlite_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sqlite_CFLAGS=$pkg_cv_sqlite_CFLAGS sqlite_LIBS=$pkg_cv_sqlite_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable dbus support" >&5 $as_echo_n "checking whether to enable dbus support... " >&6; } case "$(uname -s)" in Linux) enable_dbus=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (on Linux)" >&5 $as_echo "yes (on Linux)" >&6; } pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbus" >&5 $as_echo_n "checking for dbus... " >&6; } if test -n "$dbus_CFLAGS"; then pkg_cv_dbus_CFLAGS="$dbus_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_dbus_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$dbus_LIBS"; then pkg_cv_dbus_LIBS="$dbus_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_dbus_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then dbus_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "dbus-1 >= 1.0" 2>&1` else dbus_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "dbus-1 >= 1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$dbus_PKG_ERRORS" >&5 as_fn_error $? "dbus-1 development files not found. Please install dbus-devel (Red Hat), libdbus-1-dev (Debian) or dbus (Arch | Manjaro)" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "dbus-1 development files not found. Please install dbus-devel (Red Hat), libdbus-1-dev (Debian) or dbus (Arch | Manjaro)" "$LINENO" 5 else dbus_CFLAGS=$pkg_cv_dbus_CFLAGS dbus_LIBS=$pkg_cv_dbus_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_DBUS 1" >>confdefs.h fi ;; *) enable_dbus=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (not on Linux)" >&5 $as_echo "no (not on Linux)" >&6; } ;; esac # Check whether --with-systemdsystemunitdir was given. if test "${with_systemdsystemunitdir+set}" = set; then : withval=$with_systemdsystemunitdir; else with_systemdsystemunitdir=auto fi if test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"; then : def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) if test "x$def_systemdsystemunitdir" = "x"; then : if test "x$with_systemdsystemunitdir" = "xyes"; then : as_fn_error $? "systemd support requested but pkg-config unable to query systemd package" "$LINENO" 5 fi with_systemdsystemunitdir=no else with_systemdsystemunitdir="$def_systemdsystemunitdir" fi fi if test "x$with_systemdsystemunitdir" != "xno"; then : systemdsystemunitdir=$with_systemdsystemunitdir fi # Check whether --with-systemduserunitdir was given. if test "${with_systemduserunitdir+set}" = set; then : withval=$with_systemduserunitdir; else with_systemduserunitdir=auto fi if test "x$with_systemduserunitdir" = "xyes" -o "x$with_systemduserunitdir" = "xauto"; then : def_systemduserunitdir=$($PKG_CONFIG --variable=systemduserunitdir systemd) if test "x$def_systemduserunitdir" = "x"; then : if test "x$with_systemduserunitdir" = "xyes"; then : as_fn_error $? "systemd support requested but pkg-config unable to query systemd package" "$LINENO" 5 fi with_systemduserunitdir=no else with_systemduserunitdir="$def_systemduserunitdir" fi fi if test "x$with_systemduserunitdir" != "xno"; then : systemduserunitdir=$with_systemduserunitdir fi if test "x$with_systemduserunitdir" != "xno" -a "x$with_systemdsystemunitdir" != "xno"; then : havesystemd=yes else havesystemd=no fi HAVE_SYSTEMD=$havesystemd # Check whether --enable-notifications was given. if test "${enable_notifications+set}" = set; then : enableval=$enable_notifications; fi if test "x$enable_notifications" = "xyes"; then : enable_notifications=yes else enable_notifications=no fi if test "x$enable_notifications" = "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for notify" >&5 $as_echo_n "checking for notify... " >&6; } if test -n "$notify_CFLAGS"; then pkg_cv_notify_CFLAGS="$notify_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_notify_CFLAGS=`$PKG_CONFIG --cflags "libnotify" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$notify_LIBS"; then pkg_cv_notify_LIBS="$notify_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_notify_LIBS=`$PKG_CONFIG --libs "libnotify" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then notify_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify" 2>&1` else notify_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$notify_PKG_ERRORS" >&5 enable_notifications=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } enable_notifications=no else notify_CFLAGS=$pkg_cv_notify_CFLAGS notify_LIBS=$pkg_cv_notify_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi else notify_LIBS="" fi NOTIFICATIONS=$enable_notifications # Conditionally set bsd_inotify_LIBS based on the platform case "$(uname -s)" in Linux) bsd_inotify_LIBS="" ;; FreeBSD) bsd_inotify_LIBS="-L/usr/local/lib -linotify" ;; OpenBSD) bsd_inotify_LIBS="-L/usr/local/lib/inotify -linotify" ;; *) bsd_inotify_LIBS="" ;; esac # Conditionally set dynamic_linker_LIBS based on the platform case "$(uname -s)" in Linux) dynamic_linker_LIBS="-ldl" ;; *) dynamic_linker_LIBS="" ;; esac # Check whether --enable-completions was given. if test "${enable_completions+set}" = set; then : enableval=$enable_completions; fi if test "x$enable_completions" = "xyes"; then : enable_completions=yes else enable_completions=no fi COMPLETIONS=$enable_completions if test "x$enable_completions" = "xyes"; then : # Check whether --with-bash-completion-dir was given. if test "${with_bash_completion_dir+set}" = set; then : withval=$with_bash_completion_dir; else with_bash_completion_dir=auto fi if test "x$with_bash_completion_dir" = "xyes" -o "x$with_bash_completion_dir" = "xauto"; then : if test -n "$bashcompdir"; then pkg_cv_bashcompdir="$bashcompdir" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bash-completion\""; } >&5 ($PKG_CONFIG --exists --print-errors "bash-completion") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_bashcompdir=`$PKG_CONFIG --variable="completionsdir" "bash-completion" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi bashcompdir=$pkg_cv_bashcompdir if test "x$bashcompdir" = x""; then : bashcompdir="${sysconfdir}/bash_completion.d" fi with_bash_completion_dir=$bashcompdir fi BASH_COMPLETION_DIR=$with_bash_completion_dir # Check whether --with-zsh-completion-dir was given. if test "${with_zsh_completion_dir+set}" = set; then : withval=$with_zsh_completion_dir; else with_zsh_completion_dir=auto fi if test "x$with_zsh_completion_dir" = "xyes" -o "x$with_zsh_completion_dir" = "xauto"; then : with_zsh_completion_dir="/usr/local/share/zsh/site-functions" fi ZSH_COMPLETION_DIR=$with_zsh_completion_dir # Check whether --with-fish-completion-dir was given. if test "${with_fish_completion_dir+set}" = set; then : withval=$with_fish_completion_dir; else with_fish_completion_dir=auto fi if test "x$with_fish_completion_dir" = "xyes" -o "x$with_fish_completion_dir" = "xauto"; then : with_fish_completion_dir="/usr/local/share/fish/completions" fi FISH_COMPLETION_DIR=$with_fish_completion_dir fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; fi if test "x$enable_debug" = "xyes"; then : DEBUG=yes else DEBUG=no fi ac_config_files="$ac_config_files Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 contrib/systemd/onedrive.service contrib/systemd/onedrive@.service" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by onedrive $as_me v2.5.9, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ onedrive config.status v2.5.9 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "contrib/pacman/PKGBUILD") CONFIG_FILES="$CONFIG_FILES contrib/pacman/PKGBUILD" ;; "contrib/spec/onedrive.spec") CONFIG_FILES="$CONFIG_FILES contrib/spec/onedrive.spec" ;; "onedrive.1") CONFIG_FILES="$CONFIG_FILES onedrive.1" ;; "contrib/systemd/onedrive.service") CONFIG_FILES="$CONFIG_FILES contrib/systemd/onedrive.service" ;; "contrib/systemd/onedrive@.service") CONFIG_FILES="$CONFIG_FILES contrib/systemd/onedrive@.service" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi onedrive-2.5.9/configure.ac000066400000000000000000000275361510276244300156510ustar00rootroot00000000000000dnl configure.ac for OneDrive Linux Client dnl Copyright 2019 Norbert Preining dnl Licensed GPL v3 or later dnl How to make a release dnl - increase the version number in the AC_INIT call below dnl - change PACKAGE_DATE to 'Month YYYY' to ensure man page has the correct date dnl - run autoconf which generates configure dnl - commit the changed files (configure.ac, configure) dnl - tag the release AC_PREREQ([2.69]) AC_INIT([onedrive],[v2.5.9], [https://github.com/abraunegg/onedrive], [onedrive]) AC_CONFIG_SRCDIR([src/main.d]) AC_ARG_VAR([DC], [D compiler executable]) AC_ARG_VAR([DCFLAGS], [flags for D compiler]) dnl necessary programs: install, pkg-config AC_PROG_INSTALL PKG_PROG_PKG_CONFIG PACKAGE_DATE="November 2025" AC_SUBST([PACKAGE_DATE]) dnl Determine D compiler dnl we check for dmd, dmd2, and ldc2 in this order dnl furthermore, we set DC_TYPE to either dmd or ldc and export this into the dnl Makefile so that we can adjust command line arguments AC_CHECK_PROGS([DC], [dmd ldmd2 ldc2 gdmd gdc], NOT_FOUND) DC_TYPE= case $(basename $DC) in *ldc2*) DC_TYPE=ldc ;; *gdc*) DC_TYPE=gdc ;; *dmd*) DC_TYPE=dmd ;; NOT_FOUND) AC_MSG_ERROR(Could not find any compatible D compiler, 1) esac dnl dash/POSIX version of version comparison vercomp () { IFS=. read -r a0 a1 a2 aa <' $bb then return 1 else return 0 fi fi fi fi } DO_VERSION_CHECK=1 AC_ARG_ENABLE(version-check, AS_HELP_STRING([--disable-version-check], [Disable checks of compiler version during configure time])) AS_IF([test "x$enable_version_check" = "xno"], DO_VERSION_CHECK=0,) AS_IF([test "$DO_VERSION_CHECK" = "1"], [ dnl do the version check AC_MSG_CHECKING([version of D compiler]) # check for valid versions case $(basename $DC) in *ldmd2*|*ldc2*) # LDC - the LLVM D compiler (1.12.0): ... VERSION=`$DC --version` # remove everything up to first ( VERSION=${VERSION#* (} # remove everything after ): VERSION=${VERSION%%):*} # now version should be something like L.M.N MINVERSION=1.20.1 ;; *gdmd*|*gdc*) # Both gdmd and gdc print the same version information VERSION=`${DC} --version | head -n1` # Some examples of output: # gdc (Gentoo 14.2.1_p20250301 p8) 14.2.1 20250301 # gcc (GCC) 14.2.1 20250207 # Arch # gdc (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7) # gdc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 VERSION=${VERSION#gdc } # VERSION=(...) VER DATE ... VERSION=${VERSION#*) } # VERSION=VER DATE ... VERSION=${VERSION%% *} MINVERSION=15 ;; *dmd*) # DMD64 D Compiler v2.085.1\n... VERSION=`$DC --version | tr '\n' ' '` VERSION=${VERSION#*Compiler v} VERSION=${VERSION%% *} # now version should be something like L.M.N MINVERSION=2.091.1 ;; esac AC_MSG_RESULT([$VERSION]) vercomp $MINVERSION $VERSION if test $? = 1 then AC_MSG_ERROR([Compiler version insufficient, current compiler version $VERSION, minimum version $MINVERSION], 1) fi #echo "MINVERSION=$MINVERSION VERSION=$VERSION" ]) dnl In case the environment variable DCFLAGS is set, we export it to the dnl generated Makefile at configure run: AC_SUBST([DCFLAGS]) dnl Default flags for each compiler case "$DC_TYPE" in dmd) DEBUG_DCFLAGS="-g -debug -gs" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; ldc) DEBUG_DCFLAGS="-g -d-debug -gc" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-d-version LINKER_DCFLAG=-L OUTPUT_DCFLAG=-of WERROR_DCFLAG=-w ;; gdc) DEBUG_DCFLAGS="-g -fdebug" RELEASE_DCFLAGS=-O VERSION_DCFLAG=-fversion LINKER_DCFLAG=-Wl, OUTPUT_DCFLAG=-o WERROR_DCFLAG=-Werror ;; esac AC_SUBST([DEBUG_DCFLAGS]) AC_SUBST([RELEASE_DCFLAGS]) AC_SUBST([VERSION_DCFLAG]) AC_SUBST([LINKER_DCFLAG]) AC_SUBST([OUTPUT_DCFLAG]) AC_SUBST([WERROR_DCFLAG]) dnl Check for required modules: curl, sqlite and dbus if required PKG_CHECK_MODULES([curl],[libcurl]) PKG_CHECK_MODULES([sqlite],[sqlite3]) AC_MSG_CHECKING([whether to enable dbus support]) case "$(uname -s)" in Linux) enable_dbus=yes AC_MSG_RESULT([yes (on Linux)]) PKG_CHECK_MODULES([dbus], [dbus-1 >= 1.0], [AC_DEFINE([HAVE_DBUS], [1], [Define if you have dbus-1])] , [AC_MSG_ERROR([dbus-1 development files not found. Please install dbus-devel (Red Hat), libdbus-1-dev (Debian) or dbus (Arch | Manjaro)])] ) ;; *) enable_dbus=no AC_MSG_RESULT([no (not on Linux)]) ;; esac AC_SUBST([enable_dbus]) dnl dnl systemd and unit file directories dnl This is a bit tricky, because we want to allow for dnl --with-systemdsystemunitdir=auto dnl as well as =/path/to/dir dnl The first step is that we check whether the --with options is passed to configure run dnl if yes, we don't do anything (the ,, at the end of the next line), and if not, we dnl set with_systemdsystemunitdir=auto, meaning we will try pkg-config to find the correct dnl value. AC_ARG_WITH([systemdsystemunitdir], [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd system service files])],, [with_systemdsystemunitdir=auto]) dnl If no value is passed in (or auto/yes is passed in), then we try to find the correct dnl value via pkg-config and put it into $def_systemdsystemunitdir AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [ dnl true part, so try to determine with pkg-config def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) dnl if we cannot find it via pkg-config, *and* the user explicitly passed it in with, dnl we warn, and in all cases we unset (set to no) the respective variable AS_IF([test "x$def_systemdsystemunitdir" = "x"], [ dnl we couldn't find the default value via pkg-config AS_IF([test "x$with_systemdsystemunitdir" = "xyes"], [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])]) with_systemdsystemunitdir=no ], [ dnl pkg-config found the value, use it with_systemdsystemunitdir="$def_systemdsystemunitdir" ] ) ] ) dnl finally, if we found a value, put it into the generated Makefile AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])]) dnl Now do the same as above for systemduserunitdir! AC_ARG_WITH([systemduserunitdir], [AS_HELP_STRING([--with-systemduserunitdir=DIR], [Directory for systemd user service files])],, [with_systemduserunitdir=auto]) AS_IF([test "x$with_systemduserunitdir" = "xyes" -o "x$with_systemduserunitdir" = "xauto"], [ def_systemduserunitdir=$($PKG_CONFIG --variable=systemduserunitdir systemd) AS_IF([test "x$def_systemduserunitdir" = "x"], [ AS_IF([test "x$with_systemduserunitdir" = "xyes"], [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])]) with_systemduserunitdir=no ], [ with_systemduserunitdir="$def_systemduserunitdir" ] ) ] ) AS_IF([test "x$with_systemduserunitdir" != "xno"], [AC_SUBST([systemduserunitdir], [$with_systemduserunitdir])]) dnl We enable systemd integration only if we have found both user/system unit dirs AS_IF([test "x$with_systemduserunitdir" != "xno" -a "x$with_systemdsystemunitdir" != "xno"], [havesystemd=yes], [havesystemd=no]) AC_SUBST([HAVE_SYSTEMD], $havesystemd) dnl dnl Notification support dnl only check for libnotify if --enable-notifications is given AC_ARG_ENABLE(notifications, AS_HELP_STRING([--enable-notifications], [Enable desktop notifications via libnotify])) AS_IF([test "x$enable_notifications" = "xyes"], [enable_notifications=yes], [enable_notifications=no]) dnl if --enable-notifications was given, check for libnotify, and disable if not found dnl otherwise substitute the notifu AS_IF([test "x$enable_notifications" = "xyes"], [PKG_CHECK_MODULES(notify,libnotify,,enable_notifications=no)], [AC_SUBST([notify_LIBS],"")]) AC_SUBST([NOTIFICATIONS],$enable_notifications) dnl dnl iNotify Support # Conditionally set bsd_inotify_LIBS based on the platform case "$(uname -s)" in Linux) bsd_inotify_LIBS="" ;; FreeBSD) bsd_inotify_LIBS="-L/usr/local/lib -linotify" ;; OpenBSD) bsd_inotify_LIBS="-L/usr/local/lib/inotify -linotify" ;; *) bsd_inotify_LIBS="" ;; esac AC_SUBST([bsd_inotify_LIBS]) dnl dnl Dynamic Linker Support # Conditionally set dynamic_linker_LIBS based on the platform case "$(uname -s)" in Linux) dynamic_linker_LIBS="-ldl" ;; *) dynamic_linker_LIBS="" ;; esac AC_SUBST([dynamic_linker_LIBS]) dnl dnl Completion support dnl First determine whether completions are requested, pass that to Makefile AC_ARG_ENABLE([completions], AS_HELP_STRING([--enable-completions], [Install shell completions for bash, zsh, and fish])) AS_IF([test "x$enable_completions" = "xyes"], [enable_completions=yes], [enable_completions=no]) AC_SUBST([COMPLETIONS],$enable_completions) dnl if completions are enabled, search for the bash/zsh completion directory in the dnl similar way as we did for the systemd directories AS_IF([test "x$enable_completions" = "xyes"],[ AC_ARG_WITH([bash-completion-dir], [AS_HELP_STRING([--with-bash-completion-dir=DIR], [Directory for bash completion files])], , [with_bash_completion_dir=auto]) AS_IF([test "x$with_bash_completion_dir" = "xyes" -o "x$with_bash_completion_dir" = "xauto"], [ PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], , bashcompdir="${sysconfdir}/bash_completion.d") with_bash_completion_dir=$bashcompdir ]) AC_SUBST([BASH_COMPLETION_DIR], $with_bash_completion_dir) AC_ARG_WITH([zsh-completion-dir], [AS_HELP_STRING([--with-zsh-completion-dir=DIR], [Directory for zsh completion files])],, [with_zsh_completion_dir=auto]) AS_IF([test "x$with_zsh_completion_dir" = "xyes" -o "x$with_zsh_completion_dir" = "xauto"], [ with_zsh_completion_dir="/usr/local/share/zsh/site-functions" ]) AC_SUBST([ZSH_COMPLETION_DIR], $with_zsh_completion_dir) AC_ARG_WITH([fish-completion-dir], [AS_HELP_STRING([--with-fish-completion-dir=DIR], [Directory for fish completion files])],, [with_fish_completion_dir=auto]) AS_IF([test "x$with_fish_completion_dir" = "xyes" -o "x$with_fish_completion_dir" = "xauto"], [ with_fish_completion_dir="/usr/local/share/fish/completions" ]) AC_SUBST([FISH_COMPLETION_DIR], $with_fish_completion_dir) ]) dnl dnl Debug support AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Pass debug option to the compiler])) AS_IF([test "x$enable_debug" = "xyes"], AC_SUBST([DEBUG],yes), AC_SUBST([DEBUG],no)) dnl generate necessary files AC_CONFIG_FILES([ Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 contrib/systemd/onedrive.service contrib/systemd/onedrive@.service ]) AC_OUTPUT onedrive-2.5.9/contrib/000077500000000000000000000000001510276244300150065ustar00rootroot00000000000000onedrive-2.5.9/contrib/completions/000077500000000000000000000000001510276244300173425ustar00rootroot00000000000000onedrive-2.5.9/contrib/completions/complete.bash000066400000000000000000000041631510276244300220150ustar00rootroot00000000000000# BASH completion code for OneDrive Linux Client # (c) 2019 Norbert Preining # License: GPLv3+ (as with the rest of the OneDrive Linux client project) _onedrive() { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} options='--check-for-nomount --check-for-nosync --cleanup-local-files --debug-https --disable-notifications --display-config --display-quota --display-sync-status --disable-download-validation --disable-upload-validation --display-running-config --download-only --dry-run --enable-logging --force --force-http-11 --force-sync --list-shared-items --local-first --logout -m --monitor --no-remote-delete --print-access-token --reauth --remove-source-files --resync --resync-auth --skip-dir-strict-match --skip-dot-files --skip-symlinks -s --sync --sync-root-files --sync-shared-files --upload-only -v+ --verbose --version -h --help --with-editing-perms' argopts='--auth-files --auth-response --classify-as-big-delete --confdir --create-directory --create-share-link --destination-directory --get-O365-drive-id --get-file-link --get-sharepoint-drive-id --log-dir --modified-by --monitor-fullscan-frequency --monitor-interval --monitor-log-frequency --remove-directory --share-password --single-directory --skip-dir --skip-file --skip-size --source-directory --space-reservation --syncdir' # Loop on the arguments to manage conflicting options for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do #exclude some mutually exclusive options [[ ${COMP_WORDS[i]} == '--sync' ]] && options=${options/--monitor} [[ ${COMP_WORDS[i]} == '--monitor' ]] && options=${options/--sync} done case "$prev" in --confdir|--syncdir) _filedir return 0 ;; --get-file-link) if command -v sed &> /dev/null; then pushd "$(onedrive --display-config | sed -n "/sync_dir/s/.*= //p")" &> /dev/null _filedir popd &> /dev/null fi return 0 ;; --create-directory|--get-O365-drive-id|--remove-directory|--single-directory|--source-directory) return 0 ;; *) COMPREPLY=( $( compgen -W "$options $argopts" -- "$cur")) return 0 ;; esac # notreached return 0 } complete -F _onedrive onedrive onedrive-2.5.9/contrib/completions/complete.fish000066400000000000000000000112341510276244300220260ustar00rootroot00000000000000# FISH completions for OneDrive Linux Client # License: GPLv3+ (as with the rest of the OneDrive Linux client project) complete -c onedrive -f complete -c onedrive -l auth-files -d "Authenticate using input/output files" complete -c onedrive -l auth-response -d "Authenticate using the response URL" complete -c onedrive -l check-for-nomount -d "Skip sync if .nosync found in sync dir root" complete -c onedrive -l check-for-nosync -d "Skip directories containing .nosync" complete -c onedrive -l classify-as-big-delete -d "Classify as big delete when children exceed number" complete -c onedrive -l cleanup-local-files -d "Cleanup local files when using --download-only" complete -c onedrive -l confdir -d "Directory for configuration files" complete -c onedrive -l create-directory -d "Create directory on OneDrive" complete -c onedrive -l create-share-link -d "Create a shareable link for a file" complete -c onedrive -l debug-https -d "Debug HTTPS communication" complete -c onedrive -l destination-directory -d "Target directory for move/rename operations" complete -c onedrive -l disable-download-validation -d "Disable validation of downloaded files" complete -c onedrive -l disable-notifications -d "Disable desktop notifications in monitor mode" complete -c onedrive -l disable-upload-validation -d "Disable validation of uploaded files" complete -c onedrive -l display-config -d "Display current config" complete -c onedrive -l display-quota -d "Display OneDrive quota" complete -c onedrive -l display-running-config -d "Display config used at startup" complete -c onedrive -l display-sync-status -d "Show current sync status" complete -c onedrive -l download-only -d "Only download remote changes" complete -c onedrive -l dry-run -d "Simulate sync without making changes" complete -c onedrive -l enable-logging -d "Enable logging to a file" complete -c onedrive -l force -d "Force delete on big delete detection" complete -c onedrive -l force-http-11 -d "Force HTTP 1.1 usage" complete -c onedrive -l force-sync -d "Force sync of specified folder" complete -c onedrive -l get-O365-drive-id -d "Get Drive ID for O365 SharePoint (deprecated)" complete -c onedrive -l get-file-link -d "Get shareable link for a file" complete -c onedrive -l get-sharepoint-drive-id -d "Get Drive ID for SharePoint" complete -c onedrive -l help -d "Show help message" complete -c onedrive -l list-shared-items -d "List shared OneDrive items" complete -c onedrive -l local-first -d "Prefer local changes during sync" complete -c onedrive -l log-dir -d "Directory for logs" complete -c onedrive -l logout -d "Logout current session" complete -c onedrive -l modified-by -d "Show who last modified a file" complete -c onedrive -l monitor -d "Run in monitor mode" complete -c onedrive -l monitor-fullscan-frequency -d "Full scan every N runs" complete -c onedrive -l monitor-interval -d "Sync interval in monitor mode" complete -c onedrive -l monitor-log-frequency -d "Log status every N seconds in monitor mode" complete -c onedrive -l no-remote-delete -d "Don't delete remote files in --upload-only" complete -c onedrive -l print-access-token -d "Show access token" complete -c onedrive -l reauth -d "Reauthenticate client" complete -c onedrive -l remove-directory -d "Delete remote directory" complete -c onedrive -l remove-source-files -d "Remove uploaded local files" complete -c onedrive -l resync -d "Perform full resync" complete -c onedrive -l resync-auth -d "Confirm resync action" complete -c onedrive -l share-password -d "Password-protect shared link" complete -c onedrive -l single-directory -d "Sync a single local directory" complete -c onedrive -l skip-dir -d "Skip matching directories" complete -c onedrive -l skip-dir-strict-match -d "Strict matching for skipped dirs" complete -c onedrive -l skip-dot-files -d "Skip hidden files and folders" complete -c onedrive -l skip-file -d "Skip matching files" complete -c onedrive -l skip-size -d "Skip files above given size" complete -c onedrive -l skip-symlinks -d "Ignore symlinks" complete -c onedrive -l source-directory -d "Source path for move/rename" complete -c onedrive -l space-reservation -d "Reserve disk space (MB)" complete -c onedrive -l sync -d "Start sync operation" complete -c onedrive -l sync-root-files -d "Sync root files with sync_list" complete -c onedrive -l sync-shared-files -d "Sync shared business files" complete -c onedrive -l syncdir -d "Local sync directory" complete -c onedrive -l synchronize -d "Deprecated alias for --sync" complete -c onedrive -l upload-only -d "Only upload local changes" complete -c onedrive -l verbose -d "Increase verbosity" complete -c onedrive -l version -d "Show version" complete -c onedrive -l with-editing-perms -d "Create read-write shared link" onedrive-2.5.9/contrib/completions/complete.zsh000066400000000000000000000116761510276244300217130ustar00rootroot00000000000000#compdef onedrive # # ZSH completion code for OneDrive Linux Client # (c) 2019 Norbert Preining # License: GPLv3+ (as with the rest of the OneDrive Linux client project) local -a all_opts all_opts=( '--auth-files[Perform authentication via file exchange]:auth files:' '--auth-response[Perform authentication via response URL]:auth response:' '--check-for-nomount[Check for the presence of .nosync in the syncdir root. If found, do not perform sync.]' '--check-for-nosync[Check for the presence of .nosync in each directory. If found, skip directory from sync.]' '--classify-as-big-delete[Number of children removed to trigger big delete logic]:threshold:' '--cleanup-local-files[Remove local files when using --download-only]' '--confdir[Set the directory used to store the configuration files]:config directory:_files -/' '--create-directory[Create a directory on OneDrive - no sync will be performed.]:directory name:' '--create-share-link[Create a shareable link for a file]:file name:' '--debug-https[Debug OneDrive HTTPS communication.]' '--destination-directory[Destination directory for renamed or move on OneDrive - no sync will be performed.]:directory name:' '--disable-download-validation[Disable download validation when downloading from OneDrive]' '--disable-notifications[Do not use desktop notifications in monitor mode.]' '--disable-upload-validation[Disable upload validation when uploading to OneDrive]' '--display-config[Display what options the client will use as currently configured - no sync will be performed.]' '--display-quota[Display the quota status of the client - no sync will be performed.]' '--display-running-config[Display options configured on application startup.]' '--display-sync-status[Display the sync status of the client - no sync will be performed.]' '--download-only[Only download remote changes]' '--dry-run[Perform a trial sync with no changes made]' '--enable-logging[Enable client activity to a separate log file]' '--force[Force the deletion of data when a '\''big delete'\'' is detected]' '--force-http-11[Force the use of HTTP 1.1 for all operations]' '--force-sync[Force a synchronization of a specific folder]' '--get-O365-drive-id[Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library]:site URL:' '--get-file-link[Display the file link of a synced file]:file name:' '--get-sharepoint-drive-id[Query and return the SharePoint Drive ID]:site URL:' '--list-shared-items[List OneDrive Business Shared Items]' '--local-first[Synchronize from the local directory source first, before downloading changes from OneDrive.]' '--log-dir[Directory where logging output is saved]:log directory:_files -/' '--logout[Logout the current user]' '--modified-by[Display the last modified-by details]:file or directory:' '--monitor[Keep monitoring for local and remote changes]' '--monitor-fullscan-frequency[Sync runs before full local scan]:N:' '--monitor-interval[Seconds between syncs when idle in monitor mode]:seconds:' '--monitor-log-frequency[Frequency of logging in monitor mode]:seconds:' '--no-remote-delete[Do not delete remote files when using --upload-only]' '--print-access-token[Print the access token, useful for debugging]' '--reauth[Reauthenticate the client with OneDrive]' '--remove-directory[Remove a directory on OneDrive - no sync will be performed.]:directory name:' '--remove-source-files[Remove source file after upload when using --upload-only]' '--resync[Forget the last saved state, perform a full sync]' '--resync-auth[Approve the use of performing a --resync action]' '--share-password[Password to protect share link]:password:' '--single-directory[Sync a single local directory within the OneDrive root]:source directory:_files -/' '--skip-dir[Skip any directories matching this pattern]:pattern:' '--skip-dir-strict-match[Strict matching for --skip-dir]' '--skip-dot-files[Skip dot files and folders from syncing]' '--skip-file[Skip any files matching this pattern]:pattern:' '--skip-size[Skip new files larger than this size (in MB)]:MB:' '--skip-symlinks[Skip syncing of symlinks]' '--source-directory[Source directory to rename or move on OneDrive]:source directory:' '--space-reservation[Disk space (MB) to reserve]:MB:' '--sync[Perform a synchronisation with Microsoft OneDrive]' '--sync-root-files[Sync all files in sync_dir root when using sync_list.]' '--sync-shared-files[Sync OneDrive Business Shared Files to the local filesystem]' '--syncdir[Specify the local directory used for synchronisation to OneDrive]:sync directory:_files -/' '--synchronize[Perform a synchronisation (deprecated)]' '--upload-only[Only upload to OneDrive, do not sync changes from OneDrive locally]' '--verbose[Print more details, useful for debugging (repeat for extra debugging)]' '--version[Print the version and exit]' '--with-editing-perms[Create a read-write shareable link for a file]' ) _arguments -S "$all_opts[@]" && return 0 onedrive-2.5.9/contrib/docker/000077500000000000000000000000001510276244300162555ustar00rootroot00000000000000onedrive-2.5.9/contrib/docker/Dockerfile000066400000000000000000000017021510276244300202470ustar00rootroot00000000000000# -*-Dockerfile-*- ARG FEDORA_VERSION=42 ARG DEBIAN_VERSION=bullseye ARG GO_VERSION=1.22 ARG GOSU_VERSION=1.17 FROM golang:${GO_VERSION}-${DEBIAN_VERSION} AS builder-gosu ARG GOSU_VERSION RUN go install -ldflags "-s -w" github.com/tianon/gosu@${GOSU_VERSION} FROM fedora:${FEDORA_VERSION} AS builder-onedrive RUN dnf install -y ldc pkgconf libcurl-devel sqlite-devel dbus-devel git awk ENV PKG_CONFIG=/usr/bin/pkgconf COPY . /usr/src/onedrive WORKDIR /usr/src/onedrive RUN ./configure --enable-debug\ && make clean \ && make \ && make install FROM fedora:${FEDORA_VERSION} RUN dnf clean all \ && dnf -y update RUN dnf install -y libcurl sqlite ldc-libs dbus-libs \ && dnf clean all \ && mkdir -p /onedrive/conf /onedrive/data COPY --from=builder-gosu /go/bin/gosu /usr/local/bin/ COPY --from=builder-onedrive /usr/local/bin/onedrive /usr/local/bin/ COPY contrib/docker/entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] onedrive-2.5.9/contrib/docker/Dockerfile-alpine000066400000000000000000000017661510276244300215270ustar00rootroot00000000000000# -*-Dockerfile-*- ARG ALPINE_VERSION=3.21 ARG GO_VERSION=1.22 ARG GOSU_VERSION=1.17 FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder-gosu ARG GOSU_VERSION RUN go install -ldflags "-s -w" github.com/tianon/gosu@${GOSU_VERSION} FROM alpine:${ALPINE_VERSION} AS builder-onedrive RUN apk add --update --no-cache alpine-sdk gnupg xz curl-dev sqlite-dev dbus-dev binutils-gold autoconf automake ldc COPY . /usr/src/onedrive WORKDIR /usr/src/onedrive RUN autoreconf -fiv \ && ./configure --enable-debug\ && make clean \ && make \ && make install FROM alpine:${ALPINE_VERSION} RUN apk add --upgrade apk-tools \ && apk upgrade --available RUN apk add --update --no-cache bash libcurl libgcc shadow sqlite-libs ldc-runtime dbus-libs \ && mkdir -p /onedrive/conf /onedrive/data COPY --from=builder-gosu /go/bin/gosu /usr/local/bin/ COPY --from=builder-onedrive /usr/local/bin/onedrive /usr/local/bin/ COPY contrib/docker/entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]onedrive-2.5.9/contrib/docker/Dockerfile-debian000066400000000000000000000037551510276244300215010ustar00rootroot00000000000000# -*-Dockerfile-*- ARG DEBIAN_VERSION=bookworm FROM debian:${DEBIAN_VERSION} AS builder-onedrive # Add backports repository and update before initial DEBIAN_FRONTEND installation RUN apt-get clean \ && echo "deb http://deb.debian.org/debian bookworm-backports main" > /etc/apt/sources.list.d/debian-12-backports.list \ && apt-get update \ && apt-get upgrade -y \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential curl ca-certificates libcurl4-openssl-dev libsqlite3-dev libxml2-dev libdbus-1-dev pkg-config git ldc \ # Install|update curl from backports && apt-get install -t bookworm-backports -y curl \ && rm -rf /var/lib/apt/lists/* COPY . /usr/src/onedrive WORKDIR /usr/src/onedrive RUN ./configure --enable-debug\ && make clean \ && make \ && make install FROM debian:${DEBIAN_VERSION}-slim # Add backports repository and update after DEBIAN_FRONTEND installation RUN apt-get clean \ && echo "deb http://deb.debian.org/debian bookworm-backports main" > /etc/apt/sources.list.d/debian-12-backports.list \ && apt-get update \ && apt-get upgrade -y \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libsqlite3-0 ca-certificates libphobos2-ldc-shared100 libdbus-1-3 \ # Install|update curl and libcurl4 from backports && apt-get install -t bookworm-backports -y curl libcurl4 \ && rm -rf /var/lib/apt/lists/* \ # Fix bug with ssl on armhf: https://serverfault.com/a/1045189 && /usr/bin/c_rehash \ && mkdir -p /onedrive/conf /onedrive/data # Install gosu v1.17 from trusted upstream source (built against Go 1.18.2) RUN set -eux; \ arch="$(dpkg --print-architecture)"; \ curl -fsSL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.17/gosu-${arch}"; \ chmod +x /usr/local/bin/gosu; \ gosu nobody true COPY --from=builder-onedrive /usr/local/bin/onedrive /usr/local/bin/ COPY contrib/docker/entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] onedrive-2.5.9/contrib/docker/entrypoint.sh000077500000000000000000000161671510276244300210420ustar00rootroot00000000000000#!/bin/bash -eu set +H -euo pipefail : ${ONEDRIVE_UID:=$(stat /onedrive/data -c '%u')} : ${ONEDRIVE_GID:=$(stat /onedrive/data -c '%g')} # Create new group using target GID if ! odgroup="$(getent group "$ONEDRIVE_GID")"; then odgroup='onedrive' groupadd "${odgroup}" -g "$ONEDRIVE_GID" else odgroup=${odgroup%%:*} fi # Create new user using target UID if ! oduser="$(getent passwd "$ONEDRIVE_UID")"; then oduser='onedrive' useradd -m "${oduser}" -u "$ONEDRIVE_UID" -g "$ONEDRIVE_GID" else oduser="${oduser%%:*}" usermod -g "${odgroup}" "${oduser}" fi # Root privilege check # Containers should not be run as 'root', but allow via environment variable override if [ "${ONEDRIVE_RUNAS_ROOT:=0}" == "1" ]; then echo "# Running container as root due to environment variable override" oduser='root' odgroup='root' else grep -qv root <( groups "${oduser}" ) || { echo 'ROOT level privileges prohibited!'; exit 1; } echo "# Running container as user: ${oduser}" fi # Default parameters ARGS=(--confdir /onedrive/conf --syncdir /onedrive/data) echo "# Base Args: ${ARGS[@]}" # Tell client to use Standalone Mode, based on an environment variable. Otherwise Monitor Mode is used. if [ "${ONEDRIVE_SYNC_ONCE:=0}" == "1" ]; then echo "# We run in Standalone Mode" echo "# Adding --sync" ARGS=(--sync ${ARGS[@]}) else echo "# We run in Monitor Mode" echo "# Adding --monitor" ARGS=(--monitor ${ARGS[@]}) fi # Make Verbose output optional, based on an environment variable if [ "${ONEDRIVE_VERBOSE:=0}" == "1" ]; then echo "# We are being verbose" echo "# Adding --verbose" ARGS=(--verbose ${ARGS[@]}) fi # Tell client to perform debug output, based on an environment variable if [ "${ONEDRIVE_DEBUG:=0}" == "1" ]; then echo "# We are performing debug output" echo "# Adding --verbose --verbose" ARGS=(--verbose --verbose ${ARGS[@]}) fi # Tell client to perform HTTPS debug output, based on an environment variable if [ "${ONEDRIVE_DEBUG_HTTPS:=0}" == "1" ]; then echo "# We are performing HTTPS debug output" echo "# Adding --debug-https" ARGS=(--debug-https ${ARGS[@]}) fi # Tell client to perform a resync based on environment variable if [ "${ONEDRIVE_RESYNC:=0}" == "1" ]; then echo "# We are performing a --resync" echo "# Adding --resync --resync-auth" ARGS=(--resync --resync-auth ${ARGS[@]}) fi # Tell client to sync in download-only mode based on environment variable if [ "${ONEDRIVE_DOWNLOADONLY:=0}" == "1" ]; then echo "# We are synchronizing in download-only mode" echo "# Adding --download-only" ARGS=(--download-only ${ARGS[@]}) fi # Tell client to clean up local files when in download-only mode based on environment variable if [ "${ONEDRIVE_CLEANUPLOCAL:=0}" == "1" ]; then echo "# We are cleaning up local files that are not present online" echo "# Adding --cleanup-local-files" ARGS=(--cleanup-local-files ${ARGS[@]}) fi # Tell client to sync in upload-only mode based on environment variable if [ "${ONEDRIVE_UPLOADONLY:=0}" == "1" ]; then echo "# We are synchronizing in upload-only mode" echo "# Adding --upload-only" ARGS=(--upload-only ${ARGS[@]}) fi # Tell client to sync in no-remote-delete mode based on environment variable if [ "${ONEDRIVE_NOREMOTEDELETE:=0}" == "1" ]; then echo "# We are synchronizing in no-remote-delete mode" echo "# Adding --no-remote-delete" ARGS=(--no-remote-delete ${ARGS[@]}) fi # Tell client to logout based on environment variable if [ "${ONEDRIVE_LOGOUT:=0}" == "1" ]; then echo "# We are logging out" echo "# Adding --logout" ARGS=(--logout ${ARGS[@]}) fi # Tell client to re-authenticate based on environment variable if [ "${ONEDRIVE_REAUTH:=0}" == "1" ]; then echo "# We are logging out to perform a reauthentication" echo "# Adding --reauth" ARGS=(--reauth ${ARGS[@]}) fi # Tell client to utilize auth files at the provided locations based on environment variable if [ -n "${ONEDRIVE_AUTHFILES:=""}" ]; then echo "# We are using auth files to perform authentication" echo "# Adding --auth-files ARG" ARGS=(--auth-files ${ONEDRIVE_AUTHFILES} ${ARGS[@]}) fi # Tell client to utilize provided auth response based on environment variable if [ -n "${ONEDRIVE_AUTHRESPONSE:=""}" ]; then echo "# We are providing the auth response directly to perform authentication" echo "# Adding --auth-response ARG" ARGS=(--auth-response \"${ONEDRIVE_AUTHRESPONSE}\" ${ARGS[@]}) fi # Tell client to print the running configuration at application startup if [ "${ONEDRIVE_DISPLAY_CONFIG:=0}" == "1" ]; then echo "# We are printing the application running configuration at application startup" echo "# Adding --display-running-config" ARGS=(--display-running-config ${ARGS[@]}) fi # Tell client to use sync single dir option if [ -n "${ONEDRIVE_SINGLE_DIRECTORY:=""}" ]; then echo "# We are synchronizing in single-directory mode" echo "# Adding --single-directory ARG" ARGS=(--single-directory \"${ONEDRIVE_SINGLE_DIRECTORY}\" ${ARGS[@]}) fi # Tell client run in dry-run mode if [ "${ONEDRIVE_DRYRUN:=0}" == "1" ]; then echo "# We are running in dry-run mode" echo "# Adding --dry-run" ARGS=(--dry-run ${ARGS[@]}) fi # Tell client to disable download validation if [ "${ONEDRIVE_DISABLE_DOWNLOAD_VALIDATION:=0}" == "1" ]; then echo "# We are disabling the download integrity checks performed by this client" echo "# Adding --disable-download-validation" ARGS=(--disable-download-validation ${ARGS[@]}) fi # Tell client to disable upload validation if [ "${ONEDRIVE_DISABLE_UPLOAD_VALIDATION:=0}" == "1" ]; then echo "# We are disabling the upload integrity checks performed by this client" echo "# Adding --disable-upload-validation" ARGS=(--disable-upload-validation ${ARGS[@]}) fi # Tell client to download OneDrive Business Shared Files if 'sync_business_shared_items' option has been enabled in the configuration files if [ "${ONEDRIVE_SYNC_SHARED_FILES:=0}" == "1" ]; then echo "# We are attempting to sync OneDrive Business Shared Files if 'sync_business_shared_items' has been enabled in the config file" echo "# Adding --sync-shared-files" ARGS=(--sync-shared-files ${ARGS[@]}) fi # Tell client to use a different value for file fragment size for large file uploads if [ -n "${ONEDRIVE_FILE_FRAGMENT_SIZE:=""}" ]; then echo "# We are specifying the file fragment size for large file uploads (in MB)" echo "# Adding --file-fragment-size ARG" ARGS=(--file-fragment-size ${ONEDRIVE_FILE_FRAGMENT_SIZE} ${ARGS[@]}) fi # Tell client to use a specific threads value for parallel operations if [ -n "${ONEDRIVE_THREADS:=""}" ]; then echo "# We are specifying a thread value for the number of worker threads used for parallel upload and download operations" echo "# Adding --threads ARG" ARGS=(--threads ${ONEDRIVE_THREADS} ${ARGS[@]}) fi if [ ${#} -gt 0 ]; then ARGS=("${@}") fi # Only switch user if not running as target uid (ie. Docker) if [ "$ONEDRIVE_UID" = "$(id -u)" ]; then echo "# Launching 'onedrive' as ${oduser}" /usr/local/bin/onedrive "${ARGS[@]}" else echo "# Changing ownership permissions on /onedrive/data and /onedrive/conf to ${oduser}:${odgroup}" chown "${oduser}:${odgroup}" /onedrive/data /onedrive/conf echo "# Launching 'onedrive' as ${oduser} via gosu" exec gosu "${oduser}" /usr/local/bin/onedrive "${ARGS[@]}" fionedrive-2.5.9/contrib/docker/hooks/000077500000000000000000000000001510276244300174005ustar00rootroot00000000000000onedrive-2.5.9/contrib/docker/hooks/post_push000077500000000000000000000002171510276244300213520ustar00rootroot00000000000000#!/bin/bash BUILD_DATE=`date "+%Y%m%d%H%M"` docker tag ${IMAGE_NAME} "${IMAGE_NAME}-${BUILD_DATE}" docker push "${IMAGE_NAME}-${BUILD_DATE}" onedrive-2.5.9/contrib/images/000077500000000000000000000000001510276244300162535ustar00rootroot00000000000000onedrive-2.5.9/contrib/images/onedrive.svg000066400000000000000000000200171510276244300206070ustar00rootroot00000000000000 onedrive-2.5.9/contrib/init.d/000077500000000000000000000000001510276244300161735ustar00rootroot00000000000000onedrive-2.5.9/contrib/init.d/onedrive.init000066400000000000000000000026041510276244300206750ustar00rootroot00000000000000#!/bin/sh # # chkconfig: 2345 20 80 # description: Starts and stops OneDrive Free Client # # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 1 fi # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 APP_NAME="OneDrive Free Client" STOP_TIMEOUT=${STOP_TIMEOUT-5} RETVAL=0 start() { export PATH=/usr/local/bin/:$PATH echo -n "Starting $APP_NAME: " daemon --user root onedrive_service.sh RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/onedrive || \ RETVAL=1 return $RETVAL } stop() { echo -n "Shutting down $APP_NAME: " killproc onedrive RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/onedrive ${pidfile} } restart() { stop start } rhstatus() { status onedrive return $? } # Allow status as non-root. if [ "$1" = status ]; then rhstatus exit $? fi case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) rhstatus ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 2 esac exit $? onedrive-2.5.9/contrib/init.d/onedrive_service.sh000066400000000000000000000002761510276244300220670ustar00rootroot00000000000000#!/bin/bash # This script is to assist in starting the onedrive client when using init.d APP_OPTIONS="--monitor --verbose --enable-logging" onedrive "$APP_OPTIONS" > /dev/null 2>&1 & exit 0 onedrive-2.5.9/contrib/logrotate/000077500000000000000000000000001510276244300170065ustar00rootroot00000000000000onedrive-2.5.9/contrib/logrotate/onedrive.logrotate000066400000000000000000000010721510276244300225430ustar00rootroot00000000000000# Any OneDrive Client logs configured for here /var/log/onedrive/*log { # What user / group should logrotate use? # Logrotate 3.8.9 or greater required otherwise: # "unknown option 'su' -- ignoring line" is generated su root users # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # compress the log files compress # missing files OK missingok } onedrive-2.5.9/contrib/pacman/000077500000000000000000000000001510276244300162455ustar00rootroot00000000000000onedrive-2.5.9/contrib/pacman/PKGBUILD.in000066400000000000000000000014751510276244300200050ustar00rootroot00000000000000pkgname=onedrive pkgver=@PACKAGE_VERSION@ pkgrel=1 # Patch-level (increment this when a patch is applied) pkgdesc="OneDrive Client for Linux" license=("GPL3") url="https://github.com/abraunegg/onedrive/" arch=("i686" "x86_64") depends=("curl" "gcc-libs" "glibc" "sqlite") makedepends=("dmd" "git" "tar" "make") source=("https://github.com/abraunegg/onedrive/archive/v$pkgver.tar.gz") sha256sums=('SKIP') # Use SKIP or actual checksum prepare() { cd "$srcdir" tar -xzf "$pkgname-$pkgver.tar.gz" --one-top-level="$pkgname-$pkgver" --strip-components 1 } build() { cd "$srcdir/$pkgname-$pkgver" git init git add . git commit --allow-empty-message -m "" git tag "v$pkgver" make PREFIX=/usr onedrive } package() { cd "$srcdir/$pkgname-$pkgver" make PREFIX=/usr DESTDIR="$pkgdir" install } onedrive-2.5.9/contrib/spec/000077500000000000000000000000001510276244300157405ustar00rootroot00000000000000onedrive-2.5.9/contrib/spec/onedrive.spec.in000066400000000000000000000212741510276244300210420ustar00rootroot00000000000000# Platform-specific default compiler selection %if 0%{?fedora} || 0%{?rhel} || 0%{?centos} %global default_dcompiler ldc %else %global default_dcompiler dmd %endif # Allow manual override: rpmbuild --define 'dcompiler dmd' %{!?dcompiler: %global dcompiler %{default_dcompiler}} # Compiler version constraints %global dmd_minver 2.091.1 %global ldc_minver 1.20.1 # Conditional BuildRequires %if "%{dcompiler}" == "dmd" BuildRequires: dmd >= %{dmd_minver} %else %if "%{dcompiler}" == "ldc" BuildRequires: ldc >= %{ldc_minver} %else %error Unsupported D compiler selected: %{dcompiler} %endif %endif # Systemd logic %if 0%{?fedora} || 0%{?rhel} >= 7 %global with_systemd 1 %else %global with_systemd 0 %endif %if 0%{?rhel} >= 7 %global rhel_unitdir 1 %else %global rhel_unitdir 0 %endif Name: onedrive Version: 2.5.9 Release: 1%{?dist} Summary: OneDrive Client for Linux Group: System Environment/Network License: GPLv3 URL: https://github.com/abraunegg/onedrive Source0: v%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: sqlite-devel >= 3.7.15 BuildRequires: libcurl-devel BuildRequires: dbus-devel Requires: sqlite >= 3.7.15 Requires: libcurl Requires: dbus %if 0%{?with_systemd} Requires(post): systemd Requires(preun): systemd Requires(postun): systemd %else Requires(post): chkconfig Requires(preun): chkconfig Requires(preun): initscripts Requires(postun): initscripts %endif %define debug_package %{nil} %description Free client for Microsoft OneDrive on Linux. Supports personal, business, SharePoint, and shared folders. Built-in client-side filtering, delta sync, webhook support, and more. %prep %setup -q %build %configure --enable-debug --enable-notifications make %install %make_install PREFIX="%{buildroot}" %if 0%{?with_systemd} %if 0%{?rhel_unitdir} # RHEL/CentOS: system unit only install -D -m 0644 contrib/systemd/onedrive.service %{buildroot}%{_unitdir}/onedrive.service install -D -m 0644 contrib/systemd/onedrive@.service %{buildroot}%{_unitdir}/onedrive@.service %else # Fedora: install both system and user units install -D -m 0644 contrib/systemd/onedrive@.service %{buildroot}%{_unitdir}/onedrive@.service install -D -m 0644 contrib/systemd/onedrive.service %{buildroot}%{_userunitdir}/onedrive.service %endif %endif %clean %files %doc readme.md LICENSE changelog.md docs/*.md config %config %{_sysconfdir}/logrotate.d/onedrive %{_mandir}/man1/%{name}.1.gz %{_bindir}/%{name} %if 0%{?with_systemd} %if 0%{?rhel_unitdir} %{_unitdir}/%{name}.service %{_unitdir}/%{name}@.service %else %{_unitdir}/%{name}@.service %{_userunitdir}/%{name}.service %endif %else %{_bindir}/onedrive_service.sh /etc/init.d/onedrive %endif %changelog %changelog * Thu Jun 05 2025 - 2.5.6-1 - Release v2.5.6 with new features, bug fixes, and enhancements * Mon Mar 17 2025 - 2.5.5-1 - Release v2.5.5 with new features, bug fixes, and enhancements * Mon Feb 03 2025 - 2.5.4-1 - Release v2.5.4 with new features, bug fixes, and enhancements * Sat Nov 16 2024 - 2.5.3-1 - Release v2.5.3 with new features, bug fixes, and enhancements * Sun Sep 29 2024 - 2.5.2-1 - Release v2.5.2 with new features, bug fixes, and enhancements * Fri Sep 27 2024 - 2.5.1-1 - Release v2.5.1 with new features, bug fixes, and enhancements * Mon Sep 16 2024 - 2.5.0-1 - Release v2.5.0 with new features, bug fixes, and enhancements * Wed Jun 21 2023 - 2.4.25-1 - Release v2.4.25 with new features, bug fixes, and enhancements * Tue Jun 20 2023 - 2.4.24-1 - Release v2.4.24 with new features, bug fixes, and enhancements * Fri Jan 06 2023 - 2.4.23-1 - Release v2.4.23 with new features, bug fixes, and enhancements * Tue Dec 06 2022 - 2.4.22-1 - Release v2.4.22 with new features, bug fixes, and enhancements * Tue Sep 27 2022 - 2.4.21-1 - Release v2.4.21 with new features, bug fixes, and enhancements * Wed Jul 20 2022 - 2.4.20-1 - Release v2.4.20 with new features, bug fixes, and enhancements * Wed Jun 15 2022 - 2.4.19-1 - Release v2.4.19 with new features, bug fixes, and enhancements * Thu Jun 02 2022 - 2.4.18-1 - Release v2.4.18 with new features, bug fixes, and enhancements * Sat Apr 30 2022 - 2.4.17-1 - Release v2.4.17 with new features, bug fixes, and enhancements * Thu Mar 10 2022 - 2.4.16-1 - Release v2.4.16 with new features, bug fixes, and enhancements * Fri Dec 31 2021 - 2.4.15-1 - Release v2.4.15 with new features, bug fixes, and enhancements * Wed Nov 24 2021 - 2.4.14-1 - Release v2.4.14 with new features, bug fixes, and enhancements * Sun Dec 27 2020 - 2.4.9-1 - Release v2.4.9 with new features, bug fixes, and enhancements * Mon Nov 30 2020 - 2.4.8-1 - Release v2.4.8 with new features, bug fixes, and enhancements * Mon Nov 09 2020 - 2.4.7-1 - Release v2.4.7 with new features, bug fixes, and enhancements * Sun Oct 04 2020 - 2.4.6-1 - Release v2.4.6 with new features, bug fixes, and enhancements * Thu Aug 13 2020 - 2.4.5-1 - Release v2.4.5 with new features, bug fixes, and enhancements * Tue Aug 11 2020 - 2.4.4-1 - Release v2.4.4 with new features, bug fixes, and enhancements * Mon Jun 29 2020 - 2.4.3-1 - Release v2.4.3 with new features, bug fixes, and enhancements * Wed May 27 2020 - 2.4.2-1 - Release v2.4.2 with new features, bug fixes, and enhancements * Sat May 02 2020 - 2.4.1-1 - Release v2.4.1 with new features, bug fixes, and enhancements * Sun Mar 22 2020 - 2.4.0-1 - Release v2.4.0 with new features, bug fixes, and enhancements * Tue Dec 31 2019 - 2.3.13-1 - Release v2.3.13 with new features, bug fixes, and enhancements * Wed Dec 04 2019 - 2.3.12-1 - Release v2.3.12 with new features, bug fixes, and enhancements * Tue Nov 05 2019 - 2.3.11-1 - Release v2.3.11 with new features, bug fixes, and enhancements * Tue Oct 01 2019 - 2.3.10-1 - Release v2.3.10 with new features, bug fixes, and enhancements * Sun Sep 01 2019 - 2.3.9-1 - Release v2.3.9 with new features, bug fixes, and enhancements * Sun Aug 04 2019 - 2.3.8-1 - Release v2.3.8 with new features, bug fixes, and enhancements * Wed Jul 03 2019 - 2.3.7-1 - Release v2.3.7 with new features, bug fixes, and enhancements * Wed Jul 03 2019 - 2.3.6-1 - Release v2.3.6 with new features, bug fixes, and enhancements * Wed Jun 19 2019 - 2.3.5-1 - Release v2.3.5 with new features, bug fixes, and enhancements * Thu Jun 13 2019 - 2.3.4-1 - Release v2.3.4 with new features, bug fixes, and enhancements * Tue Apr 16 2019 - 2.3.3-1 - Release v2.3.3 with new features, bug fixes, and enhancements * Tue Apr 02 2019 - 2.3.2-1 - Release v2.3.2 with new features, bug fixes, and enhancements * Tue Mar 26 2019 - 2.3.1-1 - Release v2.3.1 with new features, bug fixes, and enhancements * Mon Mar 25 2019 - 2.3.0-1 - Release v2.3.0 with new features, bug fixes, and enhancements * Tue Mar 12 2019 - 2.2.6-1 - Release v2.2.6 with new features, bug fixes, and enhancements * Wed Jan 16 2019 - 2.2.5-1 - Release v2.2.5 with new features, bug fixes, and enhancements * Fri Dec 28 2018 - 2.2.4-1 - Release v2.2.4 with new features, bug fixes, and enhancements * Thu Dec 20 2018 - 2.2.3-1 - Release v2.2.3 with new features, bug fixes, and enhancements * Thu Dec 20 2018 - 2.2.2-1 - Release v2.2.2 with new features, bug fixes, and enhancements * Tue Dec 04 2018 - 2.2.1-1 - Release v2.2.1 with new features, bug fixes, and enhancements * Sat Nov 24 2018 - 2.2.0-1 - Release v2.2.0 with new features, bug fixes, and enhancements * Thu Nov 15 2018 - 2.1.6-1 - Release v2.1.6 with new features, bug fixes, and enhancements * Sun Nov 11 2018 - 2.1.5-1 - Release v2.1.5 with new features, bug fixes, and enhancements * Wed Oct 10 2018 - 2.1.4-1 - Release v2.1.4 with new features, bug fixes, and enhancements * Thu Oct 04 2018 - 2.1.3-1 - Release v2.1.3 with new features, bug fixes, and enhancements * Mon Aug 27 2018 - 2.1.2-1 - Release v2.1.2 with new features, bug fixes, and enhancements * Tue Aug 14 2018 - 2.1.1-1 - Release v2.1.1 with new features, bug fixes, and enhancements * Fri Aug 10 2018 - 2.1.0-1 - Release v2.1.0 with new features, bug fixes, and enhancements * Wed Jul 18 2018 - 2.0.2-1 - Release v2.0.2 with new features, bug fixes, and enhancements * Wed Jul 11 2018 - 2.0.1-1 - Release v2.0.1 with new features, bug fixes, and enhancements * Tue Jul 10 2018 - 2.0.0-1 - Release v2.0.0 with new features, bug fixes, and enhancements * Thu May 17 2018 - 1.1.2-1 - Release v1.1.2 with new features, bug fixes, and enhancements * Sat Jan 20 2018 - 1.1.1-1 - Release v1.1.1 with new features, bug fixes, and enhancements * Fri Jan 19 2018 - 1.1.0-1 - Release v1.1.0 with new features, bug fixes, and enhancements * Tue Aug 01 2017 - 1.0.1-1 - Release v1.0.1 with new features, bug fixes, and enhancements * Fri Jul 14 2017 - 1.0.0-1 - Release v1.0.0 with new features, bug fixes, and enhancementsonedrive-2.5.9/contrib/systemd/000077500000000000000000000000001510276244300164765ustar00rootroot00000000000000onedrive-2.5.9/contrib/systemd/onedrive.service.in000066400000000000000000000016221510276244300223010ustar00rootroot00000000000000[Unit] Description=OneDrive Client for Linux Documentation=https://github.com/abraunegg/onedrive After=network-online.target Wants=network-online.target [Service] # Commented out hardenings are disabled because they may not work out of the box on your distribution # If you know what you are doing please try to enable them. ProtectSystem=full #PrivateUsers=true #PrivateDevices=true ProtectHostname=true #ProtectClock=true ProtectKernelTunables=true #ProtectKernelModules=true #ProtectKernelLogs=true ProtectControlGroups=true RestrictRealtime=true ExecStartPre=/bin/sh -c 'sleep 15' ExecStart=@prefix@/bin/onedrive --monitor Restart=on-failure RestartSec=3 # Do not restart the service if a --resync is required which is done via a 126 exit code RestartPreventExitStatus=126 # Time to wait for the service to stop gracefully before forcefully terminating it TimeoutStopSec=90 [Install] WantedBy=default.targetonedrive-2.5.9/contrib/systemd/onedrive@.service.in000066400000000000000000000017131510276244300224020ustar00rootroot00000000000000[Unit] Description=OneDrive Client for Linux running for %i Documentation=https://github.com/abraunegg/onedrive After=network-online.target Wants=network-online.target [Service] # Commented out hardenings are disabled because they may not work out of the box on your distribution # If you know what you are doing please try to enable them. ProtectSystem=full #PrivateDevices=true ProtectHostname=true #ProtectClock=true ProtectKernelTunables=true #ProtectKernelModules=true #ProtectKernelLogs=true ProtectControlGroups=true RestrictRealtime=true ExecStartPre=/bin/sh -c 'sleep 15' ExecStart=@prefix@/bin/onedrive --monitor --confdir=/home/%i/.config/onedrive User=%i Group=users Restart=on-failure RestartSec=3 # Do not restart the service if a --resync is required which is done via a 126 exit code RestartPreventExitStatus=126 # Time to wait for the service to stop gracefully before forcefully terminating it TimeoutStopSec=90 [Install] WantedBy=multi-user.target onedrive-2.5.9/docs/000077500000000000000000000000001510276244300142765ustar00rootroot00000000000000onedrive-2.5.9/docs/advanced-usage.md000066400000000000000000000457301510276244300175000ustar00rootroot00000000000000# Advanced Configuration of the OneDrive Free Client This document covers the following scenarios: * [Configuring the client to use multiple OneDrive accounts / configurations](#configuring-the-client-to-use-multiple-onedrive-accounts--configurations) * [Configuring the client to use multiple OneDrive accounts / configurations using Docker](#configuring-the-client-to-use-multiple-onedrive-accounts--configurations-using-docker) * [Configuring the client for use in dual-boot (Windows / Linux) situations](#configuring-the-client-for-use-in-dual-boot-windows--linux-situations) * [Configuring the client for use when 'sync_dir' is a mounted directory](#configuring-the-client-for-use-when-sync_dir-is-a-mounted-directory) * [Upload data from the local ~/OneDrive folder to a specific location on OneDrive](#upload-data-from-the-local-onedrive-folder-to-a-specific-location-on-onedrive) ## Configuring the client to use multiple OneDrive accounts / configurations Essentially, each OneDrive account or SharePoint Shared Library which you require to be synced needs to have its own and unique configuration, local sync directory and service files. To do this, the following steps are needed: 1. Create a unique configuration folder for each onedrive client configuration that you need 2. Copy to this folder a copy of the default configuration file 3. Update the default configuration file as required, changing the required minimum config options and any additional options as needed to support your multi-account configuration 4. Authenticate the client using the new configuration directory 5. Test the configuration using '--display-config' and '--dry-run' 6. Sync the OneDrive account data as required using `--synchronize` or `--monitor` 7. Configure a unique systemd service file for this account configuration ### 1. Create a unique configuration folder for each onedrive client configuration that you need Make the configuration folder as required for this new configuration, for example: ```text mkdir ~/.config/my-new-config ``` ### 2. Copy to this folder a copy of the default configuration file Copy to this folder a copy of the default configuration file by downloading this file from GitHub and saving this file in the directory created above: ```text wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/my-new-config/config ``` ### 3. Update the default configuration file The following config options *must* be updated to ensure that individual account data is not cross populated with other OneDrive accounts or other configurations: * sync_dir Other options that may require to be updated, depending on the OneDrive account that is being configured: * drive_id * application_id * sync_business_shared_folders * skip_dir * skip_file * Creation of a 'sync_list' file if required * Creation of a 'business_shared_folders' file if required ### 4. Authenticate the client Authenticate the client using the specific configuration file: ```text onedrive --confdir="~/.config/my-new-config" ``` You will be asked to open a specific URL by using your web browser where you will have to login into your Microsoft Account and give the application the permission to access your files. After giving permission to the application, you will be redirected to a blank page. Copy the URI of the blank page into the application. ```text [user@hostname ~]$ onedrive --confdir="~/.config/my-new-config" Configuration file successfully loaded Configuring Global Azure AD Endpoints Authorize this app visiting: https://..... Enter the response uri: ``` ### 5. Display and Test the configuration Test the configuration using '--display-config' and '--dry-run'. By doing so, this allows you to test any configuration that you have currently made, enabling you to fix this configuration before using the configuration. #### Display the configuration ```text onedrive --confdir="~/.config/my-new-config" --display-config ``` #### Test the configuration by performing a dry-run ```text onedrive --confdir="~/.config/my-new-config" --synchronize --verbose --dry-run ``` If both of these operate as per your expectation, the configuration of this client setup is complete and validated. If not, amend your configuration as required. ### 6. Sync the OneDrive account data as required Sync the data for the new account configuration as required: ```text onedrive --confdir="~/.config/my-new-config" --synchronize --verbose ``` or ```text onedrive --confdir="~/.config/my-new-config" --monitor --verbose ``` * `--synchronize` does a one-time sync * `--monitor` keeps the application running and monitoring for changes both local and remote ### 7. Automatic syncing of new OneDrive configuration In order to automatically start syncing your OneDrive accounts, you will need to create a service file for each account. From the applicable 'systemd folder' where the applicable systemd service file exists: * RHEL / CentOS: `/usr/lib/systemd/system` * Others: `/usr/lib/systemd/user` and `/lib/systemd/system` ### Step1: Create a new systemd service file #### Red Hat Enterprise Linux, CentOS Linux Copy the required service file to a new name: ```text sudo cp /usr/lib/systemd/system/onedrive.service /usr/lib/systemd/system/onedrive-my-new-config ``` or ```text sudo cp /usr/lib/systemd/system/onedrive@.service /usr/lib/systemd/system/onedrive-my-new-config@.service ``` #### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora Copy the required service file to a new name: ```text sudo cp /usr/lib/systemd/user/onedrive.service /usr/lib/systemd/user/onedrive-my-new-config.service ``` or ```text sudo cp /lib/systemd/system/onedrive@.service /lib/systemd/system/onedrive-my-new-config@.service ``` ### Step 2: Edit new systemd service file Edit the new systemd file, updating the line beginning with `ExecStart` so that the confdir mirrors the one you used above: ```text ExecStart=/usr/local/bin/onedrive --monitor --confdir="/full/path/to/config/dir" ``` Example: ```text ExecStart=/usr/local/bin/onedrive --monitor --confdir="/home/myusername/.config/my-new-config" ``` > [!IMPORTANT] > When running the client manually, `--confdir="~/.config/......` is acceptable. In a systemd configuration file, the full path must be used. The `~` must be manually expanded when editing your systemd file. ### Step 3: Enable the new systemd service Once the file is correctly edited, you can enable the new systemd service using the following commands. #### Red Hat Enterprise Linux, CentOS Linux ```text systemctl enable onedrive-my-new-config systemctl start onedrive-my-new-config ``` #### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text systemctl --user enable onedrive-my-new-config systemctl --user start onedrive-my-new-config ``` or ```text systemctl --user enable onedrive-my-new-config@myusername.service systemctl --user start onedrive-my-new-config@myusername.service ``` ### Step 4: Viewing systemd status and logs for the custom service #### Viewing systemd service status - Red Hat Enterprise Linux, CentOS Linux ```text systemctl status onedrive-my-new-config ``` #### Viewing systemd service status - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text systemctl --user status onedrive-my-new-config ``` #### Viewing journalctl systemd logs - Red Hat Enterprise Linux, CentOS Linux ```text journalctl --unit=onedrive-my-new-config -f ``` #### Viewing journalctl systemd logs - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora ```text journalctl --user --unit=onedrive-my-new-config -f ``` ### Step 5: (Optional) Run custom systemd service at boot without user login In some cases it may be desirable for the systemd service to start without having to login as your 'user' All the systemd steps above that utilise the `--user` option, will run the systemd service as your particular user. As such, the systemd service will not start unless you actually login to your system. To avoid this issue, you need to reconfigure your 'user' account so that the systemd services you have created will startup without you having to login to your system: ```text loginctl enable-linger ``` Example: ```text alex@ubuntu-headless:~$ loginctl enable-linger alex ``` Repeat these steps for each OneDrive new account that you wish to use. ## Configuring the client to use multiple OneDrive accounts / configurations using Docker In some situations it may be desirable to run multiple Docker containers at the same time, each with their own configuration. To run the Docker container successfully, it needs two unique Docker volumes to operate: * Your configuration Docker volumes * Your data Docker volume When running multiple Docker containers, this is no different - each Docker container must have it's own configuration and data volume. ### High level steps: 1. Create the required unique Docker volumes for the configuration volume 2. Create the required unique local path used for the Docker data volume 3. Start the multiple Docker containers with the required configuration for each container #### Create the required unique Docker volumes for the configuration volume Create the required unique Docker volumes for the configuration volume(s): ```text docker volume create onedrive_conf_sharepoint_site1 docker volume create onedrive_conf_sharepoint_site2 docker volume create onedrive_conf_sharepoint_site3 ... docker volume create onedrive_conf_sharepoint_site50 ``` #### Create the required unique local path used for the Docker data volume Create the required unique local path used for the Docker data volume ```text mkdir -p /use/full/local/path/no/tilde/SharePointSite1 mkdir -p /use/full/local/path/no/tilde/SharePointSite2 mkdir -p /use/full/local/path/no/tilde/SharePointSite3 ... mkdir -p /use/full/local/path/no/tilde/SharePointSite50 ``` #### Start the Docker container with the required configuration (example) ```text docker run -it --name onedrive -v onedrive_conf_sharepoint_site1:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite1:/onedrive/data" driveone/onedrive:latest docker run -it --name onedrive -v onedrive_conf_sharepoint_site2:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite2:/onedrive/data" driveone/onedrive:latest docker run -it --name onedrive -v onedrive_conf_sharepoint_site3:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite3:/onedrive/data" driveone/onedrive:latest ... docker run -it --name onedrive -v onedrive_conf_sharepoint_site50:/onedrive/conf -v "/use/full/local/path/no/tilde/SharePointSite50:/onedrive/data" driveone/onedrive:latest ``` > [!TIP] > To avoid 're-authenticating' and 'authorising' each individual Docker container, if all the Docker containers are using the 'same' OneDrive credentials, you can reuse the 'refresh_token' from one Docker container to another by copying this file to the configuration Docker volume of each Docker container. > > If the account credentials are different .. you will need to re-authenticate each Docker container individually. ## Configuring the client for use in dual-boot (Windows / Linux) situations When dual booting Windows and Linux, depending on the Windows OneDrive account configuration, the 'Files On-Demand' option may be enabled when running OneDrive within your Windows environment. When this option is enabled in Windows, if you are sharing this location between your Windows and Linux systems, all files will be a 0 byte link, and cannot be used under Linux. To fix the problem of windows turning all files (that should be kept offline) into links, you have to uncheck a specific option in the onedrive settings window. The option in question is `Save space and download files as you use them`. To find this setting, open the onedrive pop-up window from the taskbar, click "Help & Settings" > "Settings". This opens a new window. Go to the tab "Settings" and look for the section "Files On-Demand". After unchecking the option and clicking "OK", the Windows OneDrive client should restart itself and start actually downloading your files so they will truly be available on your disk when offline. These files will then be fully accessible under Linux and the Linux OneDrive client. | OneDrive Personal | Onedrive Business
SharePoint | |---|---| | ![Uncheck-Personal](./images/personal-files-on-demand.png) | ![Uncheck-Business](./images/business-files-on-demand.png) | ### Accessing Windows OneDrive Files from Linux (Dual-Boot Setup) When dual-booting between Windows and Linux, accessing OneDrive-synced folders stored on an NTFS partition can be problematic. This is primarily due to Microsoft OneDrive's use of reparse points when the Files On-Demand feature is enabled in Windows. These reparse points can render files inaccessible from Linux, even after disabling Files On-Demand, because the reparse metadata may persist. #### Solution: Use the ntfs-3g-onedrive Plugin The ['ntfs-3g-onedrive'](https://github.com/gbrielgustavo/ntfs-3g-onedrive) plugin is designed to address this issue. It modifies the behavior of the ntfs-3g driver to correctly handle OneDrive's reparse points, allowing you to access your OneDrive files from Linux. > [!IMPORTANT] > The configuration and installation of the 'ntfs-3g-onedrive' driver update on your platform is beyond the scope of this documentation and repository. > > For assistance please seek support via the ['ntfs-3g'](https://github.com/tuxera/ntfs-3g) GitHub project. ## Configuring the client for use when 'sync_dir' is a mounted directory In some environments, your setup might be that your configured 'sync_dir' is pointing to another mounted file system - a NFS|CIFS location, an external drive (USB stick, eSATA etc). As such, you configure your 'sync_dir' as follows: ```text sync_dir = "/path/to/mountpoint/OneDrive" ``` The issue here is - how does the client react if the mount point gets removed - network loss, device removal? The client has zero knowledge of any event that causes a mountpoint to become unavailable, thus, the client (if you are running as a service) will assume that you deleted the files, thus, will go ahead and delete all your files on OneDrive. This is most certainly an undesirable action. There are a few options here which you can configure in your 'config' file to assist you to prevent this sort of item from occurring: 1. classify_as_big_delete 2. check_nomount 3. check_nosync > [!NOTE] > Before making any change to your configuration, stop any sync process & stop any onedrive systemd service from running. ### classify_as_big_delete By default, this uses a value of 1000 files|folders. An undesirable unmount if you have more than 1000 files, this default level will prevent the client from executing the online delete. Modify this value up or down as desired ### check_nomount & check_nosync When configuring the OneDrive client to use a directory on a mounted volume (e.g., external disk, USB device, network share), it is essential to guard against accidental sync deletion if the mount point becomes unavailable. If a mount is lost or not yet available at the time of sync, the 'sync_dir' may appear empty, leading the client to delete the corresponding online content. To safely prevent this, enable the following configuration options: ``` check_nomount = "true" check_nosync = "true" ``` These settings instruct the client to: * Check for the presence of a `.nosync` file in the 'sync_dir' before syncing * Halt syncing immediately if the file is detected, assuming the mount has failed or not available #### How the `.nosync` file works 1. The `.nosync` file is placed on the local filesystem, in the exact directory that will later be covered by the mounted volume. 2. Once the external device is mounted, that directory (and the `.nosync` file) becomes hidden by the mount. 3. If the mount disappears or fails, the `.nosync` file becomes visible again. 4. The OneDrive client detects this and stops syncing, preventing accidental deletions due to the mount being unavailable. #### Scenario 1: 'sync_dir' points directly to a mounted path ``` sync_dir = "/mnt/external/path/to/users/data/location/OneDrive" check_nomount = "true" check_nosync = "true" ``` **Step 1:** Before mounting the device, prepare the `.nosync` file ``` sudo mkdir -p /mnt/external/path/to/users/data/location/OneDrive sudo touch /mnt/external/path/to/users/data/location/OneDrive/.nosync ``` **Step 2:** Test the 'onedrive' Client ``` onedrive -s ``` with the output ``` ... Configuring Global Azure AD Endpoints ERROR: .nosync file found in directory mount point. Aborting application startup process to safeguard data. Attempting to perform a database vacuum to optimise database ... ``` **Step 3:** Mount your device (e.g., via systemd, fstab, or manually) ``` sudo mount /dev/sdX1 /mnt/external ``` **Result:** The OneDrive client will now treat `/mnt/external/path/to/users/data/location/OneDrive` as the sync_dir. If the mount is ever lost, the `.nosync` file becomes visible again, and syncing is halted. #### Scenario 2: 'sync_dir' is a symbolic link to a mounted directory ``` sync_dir = "~/OneDrive" check_nomount = "true" check_nosync = "true" ``` and ``` $ ls -l ~/OneDrive lrwxrwxrwx 1 user user 29 Jul 25 14:44 OneDrive -> /mnt/external/path/to/users/data/location/OneDrive ``` **Step 1:** Before mounting the device, prepare the `.nosync` file ``` sudo mkdir -p /mnt/external/path/to/users/data/location/OneDrive sudo touch /mnt/external/path/to/users/data/location/OneDrive/.nosync ``` **Step 2:** Test the 'onedrive' Client ``` onedrive -s ``` with the output ``` ... Configuring Global Azure AD Endpoints ERROR: .nosync file found in directory mount point. Aborting application startup process to safeguard data. Attempting to perform a database vacuum to optimise database ... ``` **Step 3:** Mount your device (e.g., via systemd, fstab, or manually) ``` sudo mount /dev/sdX1 /mnt/external ``` **Result:** Your symlinked `~/OneDrive` path will now point into the mounted filesystem. If the mount goes missing, the `.nosync` file reappears via the symlink, and the client halts syncing automatically. ## Upload data from the local ~/OneDrive folder to a specific location on OneDrive In some environments, you may not want your local ~/OneDrive folder to be uploaded directly to the root of your OneDrive account online. Unfortunately, the OneDrive API lacks any facility to perform a re-direction of data during upload. The workaround for this is to structure your local filesystem and reconfigure your client to achieve the desired goal. ### High level steps: 1. Create a new folder, for example `/opt/OneDrive` 2. Configure your application config 'sync_dir' to look at this folder 3. Inside `/opt/OneDrive` create the folder you wish to sync the data online to, for example: `/opt/OneDrive/RemoteOnlineDestination` 4. Configure the application to only sync `/opt/OneDrive/RemoteDestination` via 'sync_list' 5. Symbolically link `~/OneDrive` -> `/opt/OneDrive/RemoteOnlineDestination` ### Outcome: * Your `~/OneDrive` will look / feel as per normal * The data will be stored online under `/RemoteOnlineDestination` ### Testing: * Validate your configuration with `onedrive --display-config` * Test your configuration with `onedrive --dry-run` onedrive-2.5.9/docs/application-config-options.md000066400000000000000000002305741510276244300220720ustar00rootroot00000000000000# Application Configuration Options for the OneDrive Client for Linux ## Application Version Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. ## Table of Contents - [Configuration File Options](#configuration-file-options) - [application_id](#application_id) - [azure_ad_endpoint](#azure_ad_endpoint) - [azure_tenant_id](#azure_tenant_id) - [bypass_data_preservation](#bypass_data_preservation) - [check_nomount](#check_nomount) - [check_nosync](#check_nosync) - [classify_as_big_delete](#classify_as_big_delete) - [cleanup_local_files](#cleanup_local_files) - [connect_timeout](#connect_timeout) - [create_new_file_version](#create_new_file_version) - [data_timeout](#data_timeout) - [debug_https](#debug_https) - [delay_inotify_processing](#delay_inotify_processing) - [disable_download_validation](#disable_download_validation) - [disable_notifications](#disable_notifications) - [disable_permission_set](#disable_permission_set) - [disable_upload_validation](#disable_upload_validation) - [disable_websocket_support](#disable_websocket_support) - [display_manager_integration](#display_manager_integration) - [display_running_config](#display_running_config) - [display_transfer_metrics](#display_transfer_metrics) - [dns_timeout](#dns_timeout) - [download_only](#download_only) - [drive_id](#drive_id) - [dry_run](#dry_run) - [enable_logging](#enable_logging) - [file_fragment_size](#file_fragment_size) - [force_http_11](#force_http_11) - [force_session_upload](#force_session_upload) - [inotify_delay](#inotify_delay) - [ip_protocol_version](#ip_protocol_version) - [local_first](#local_first) - [log_dir](#log_dir) - [max_curl_idle](#max_curl_idle) - [monitor_fullscan_frequency](#monitor_fullscan_frequency) - [monitor_interval](#monitor_interval) - [monitor_log_frequency](#monitor_log_frequency) - [no_remote_delete](#no_remote_delete) - [notify_file_actions](#notify_file_actions) - [operation_timeout](#operation_timeout) - [permanent_delete](#permanent_delete) - [rate_limit](#rate_limit) - [read_only_auth_scope](#read_only_auth_scope) - [recycle_bin_path](#recycle_bin_path) - [remove_source_files](#remove_source_files) - [resync](#resync) - [resync_auth](#resync_auth) - [skip_dir](#skip_dir) - [skip_dir_strict_match](#skip_dir_strict_match) - [skip_dotfiles](#skip_dotfiles) - [skip_file](#skip_file) - [skip_size](#skip_size) - [skip_symlinks](#skip_symlinks) - [space_reservation](#space_reservation) - [sync_business_shared_items](#sync_business_shared_items) - [sync_dir](#sync_dir) - [sync_dir_permissions](#sync_dir_permissions) - [sync_file_permissions](#sync_file_permissions) - [sync_root_files](#sync_root_files) - [threads](#threads) - [transfer_order](#transfer_order) - [upload_only](#upload_only) - [use_device_auth](#use_device_auth) - [use_intune_sso](#use_intune_sso) - [use_recycle_bin](#use_recycle_bin) - [user_agent](#user_agent) - [webhook_enabled](#webhook_enabled) - [webhook_expiration_interval](#webhook_expiration_interval) - [webhook_listening_host](#webhook_listening_host) - [webhook_listening_port](#webhook_listening_port) - [webhook_public_url](#webhook_public_url) - [webhook_renewal_interval](#webhook_renewal_interval) - [write_xattr_data](#write_xattr_data) - [Command Line Interface (CLI) Only Options](#command-line-interface-cli-only-options) - [CLI Option: --auth-files](#cli-option---auth-files) - [CLI Option: --auth-response](#cli-option---auth-response) - [CLI Option: --confdir](#cli-option---confdir) - [CLI Option: --create-directory](#cli-option---create-directory) - [CLI Option: --create-share-link](#cli-option---create-share-link) - [CLI Option: --destination-directory](#cli-option---destination-directory) - [CLI Option: --display-config](#cli-option---display-config) - [CLI Option: --display-sync-status](#cli-option---display-sync-status) - [CLI Option: --display-quota](#cli-option---display-quota) - [CLI Option: --download-file](#cli-option---download-file) - [CLI Option: --force](#cli-option---force) - [CLI Option: --force-sync](#cli-option---force-sync) - [CLI Option: --get-file-link](#cli-option---get-file-link) - [CLI Option: --get-sharepoint-drive-id](#cli-option---get-sharepoint-drive-id) - [CLI Option: --list-shared-items](#cli-option---list-shared-items) - [CLI Option: --logout](#cli-option---logout) - [CLI Option: --modified-by](#cli-option---modified-by) - [CLI Option: --monitor | -m](#cli-option---monitor--m) - [CLI Option: --print-access-token](#cli-option---print-access-token) - [CLI Option: --reauth](#cli-option---reauth) - [CLI Option: --remove-directory](#cli-option---remove-directory) - [CLI Option: --share-password](#cli-option---share-password) - [CLI Option: --single-directory](#cli-option---single-directory) - [CLI Option: --source-directory](#cli-option---source-directory) - [CLI Option: --sync | -s](#cli-option---sync--s) - [CLI Option: --sync-shared-files](#cli-option---sync-shared-files) - [CLI Option: --verbose | -v+](#cli-option---verbose--v) - [CLI Option: --with-editing-perms](#cli-option---with-editing-perms) - [Deprecated Configuration File and CLI Options](#deprecated-configuration-file-and-cli-options) - [force_http_2](#force_http_2) - [min_notify_changes](#min_notify_changes) - [CLI Option: --synchronize](#cli-option---synchronize) ## Configuration File Options ### application_id _**Description:**_ This is the config option for application id that used to identify itself to Microsoft OneDrive. In some circumstances, it may be desirable to use your own application id. To do this, you must register a new application with Microsoft Azure via https://portal.azure.com/, then use your new application id with this config option. You can find instructions for configuring your own app registration in [national-cloud-deployments.md](national-cloud-deployments.md) even if you don't necessarily configure it for a national cloud environment. _**Value Type:**_ String _**Default Value:**_ d50ca740-c83f-4d1b-b616-12c519384f0c _**Config Example:**_ `application_id = "d50ca740-c83f-4d1b-b616-12c519384f0c"` ### azure_ad_endpoint _**Description:**_ This is the config option to change the Microsoft Azure Authentication Endpoint that the client uses to conform with data and security requirements that requires data to reside within the geographic borders of that country. _**Value Type:**_ String _**Default Value:**_ *Empty* - not required for normal operation _**Valid Values:**_ USL4, USL5, DE, CN _**Config Example:**_ `azure_ad_endpoint = "DE"` ### azure_tenant_id _**Description:**_ This config option allows the locking of the client to a specific single tenant and will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". The tenant id may be the GUID Directory ID or the fully qualified tenant name. _**Value Type:**_ String _**Default Value:**_ *Empty* - not required for normal operation _**Config Example:**_ `azure_tenant_id = "example.onmicrosoft.us"` or `azure_tenant_id = "0c4be462-a1ab-499b-99e0-da08ce52a2cc"` > [!IMPORTANT] > Must be configured if 'azure_ad_endpoint' is configured. ### bypass_data_preservation _**Description:**_ This config option allows the disabling of preserving local data by renaming the local file in the event of data conflict. If this is enabled, you will experience data loss on your local data as the local file will be over-written with data from OneDrive online. Use with care and caution. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `bypass_data_preservation = "false"` or `bypass_data_preservation = "true"` ### check_nomount _**Description:**_ This config option is useful to prevent application startup & ongoing use in 'Monitor Mode' if the configured 'sync_dir' is a separate disk that is being mounted by your system. This option will check for the presence of a `.nosync` file in your mount point, and if present, abort any sync process to preserve data. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `check_nomount = "false"` or `check_nomount = "true"` _**CLI Option:**_ `--check-for-nomount` > [!TIP] > Create a `.nosync` file in your mount point *before* you mount your disk so that this `.nosync` file visible, in your mount point if your disk is unmounted at any point to preserve your data when you enable this option. ### check_nosync _**Description:**_ This config option is useful to prevent the sync of a *local* directory to Microsoft OneDrive. It will *not* check for this file online to prevent the download of directories to your local system. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `check_nosync = "false"` or `check_nosync = "true"` _**CLI Option Use:**_ `--check-for-nosync` > [!IMPORTANT] > Create a `.nosync` file in any *local* directory that you wish to not sync to Microsoft OneDrive when you enable this option. ### classify_as_big_delete _**Description:**_ This config option defines the number of children in a path that is locally removed which will be classified as a 'big data delete' to safeguard large data removals - which are typically accidental local delete events. _**Value Type:**_ Integer _**Default Value:**_ 1000 _**Config Example:**_ `classify_as_big_delete = "2000"` _**CLI Option Use:**_ `--classify-as-big-delete 2000` > [!NOTE] > If this option is triggered, you will need to add `--force` to force a sync to occur. ### cleanup_local_files _**Description:**_ This config option provides the capability to cleanup local files and folders if they are removed online. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `cleanup_local_files = "false"` or `cleanup_local_files = "true"` _**CLI Option Use:**_ `--cleanup-local-files` > [!IMPORTANT] > This configuration option can only be used with `--download-only`. It cannot be used with any other application option. ### connect_timeout _**Description:**_ This configuration setting manages the TCP connection timeout duration in seconds for HTTPS connections to Microsoft OneDrive when using the curl library (CURLOPT_CONNECTTIMEOUT). _**Value Type:**_ Integer _**Default Value:**_ 10 _**Config Example:**_ `connect_timeout = "15"` ### create_new_file_version _**Description:**_ This setting controls how the application handles the Microsoft SharePoint *feature* which modifies all PDF, MS Office & HTML files post upload, effectively breaking the integrity of your data online. By default, when the application determines that this *feature* has modified your file post upload, the now online modified file will be downloaded. When this option is enabled, rather than downloading the file, a new online file version is created which negates the download of the modified file. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `create_new_file_version = "false"` or `create_new_file_version = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > If you enable 'disable_upload_validation' via `disable_upload_validation = "true"` there is zero facility to determine if a file was modified post upload. As such, the application will default to the state that the upload integrity check has failed. When `create_new_file_version = "false"` your uploaded file will be downloaded *regardless* of the online modification state. > [!WARNING] > When this option is set to 'true', new file versions will be created online which will count towards your Microsoft OneDrive Quota. ### data_timeout _**Description:**_ This setting controls the timeout duration, in seconds, for when data is not received on an active connection to Microsoft OneDrive over HTTPS when using the curl library, before that connection is timeout out. _**Value Type:**_ Integer _**Default Value:**_ 60 _**Config Example:**_ `data_timeout = "300"` ### debug_https _**Description:**_ This setting controls whether the curl library is configured to output additional data to assist with diagnosing HTTPS issues and problems. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `debug_https = "false"` or `debug_https = "true"` _**CLI Option Use:**_ `--debug-https` > [!WARNING] > Whilst this option can be used at any time, it is advisable that you only use this option when advised as this will output your `Authorization: bearer` - which is your authentication token to Microsoft OneDrive. ### delay_inotify_processing _**Description:**_ This setting controls whether 'inotify' events should be delayed or not. This option should only ever be enabled when attempting to reduce the impact of editors like Obsidian which constantly write change to disk in an atomic fashion. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `delay_inotify_processing = "false"` or `delay_inotify_processing = "true"` > [!NOTE] > If you enable this option you *must* also enable 'force_session_upload' to ensure that your data uploads are done in a manner that editors, like Obsidian expect. ### disable_download_validation _**Description:**_ This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive. Sometimes, when downloading files, particularly from SharePoint, there is a discrepancy between the file size reported by the OneDrive API and the byte count received from the SharePoint HTTP Server for the same file. Enable this option to disable the integrity checks performed by this client. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_download_validation = "false"` or `disable_download_validation = "true"` _**CLI Option Use:**_ `--disable-download-validation` > [!CAUTION] > If you're downloading data from SharePoint or OneDrive Business Shared Folders, you might find it necessary to activate this option. It's important to note that any issues encountered aren't due to a problem with this client; instead, they should be regarded as issues with the Microsoft OneDrive technology stack. Enabling this option disables all download integrity checks. > [!CAUTION] > If you are using OneDrive Business Accounts and your organisation implements Azure Information Protection, these AIP files will report as one size & hash online, but when downloaded, will report a totally different size and hash. > > By default these files will fail integrity checking and be deleted, meaning that AIP files will not reside on your platform. > > When you enable this option, the AIP files will download to your platform, however, if there are any other genuine download failures where the size and hash are different, these too will be retained locally meaning you may experience data integrity loss. Use this option with extreme caution. ### disable_notifications _**Description:**_ This setting controls whether GUI notifications are sent from the client to your display manager session. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_notifications = "false"` or `disable_notifications = "true"` _**CLI Option Use:**_ `--disable-notifications` ### disable_permission_set _**Description:**_ This setting controls whether the application will set the permissions on files and directories using the values of 'sync_dir_permissions' and 'sync_file_permissions'. When this option is enabled, file system permission inheritance will be used to assign the permissions for your data. This option may be useful if the file system configured does not allow setting of POSIX permissions. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_permission_set = "false"` or `disable_permission_set = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### disable_upload_validation _**Description:**_ This option determines whether the client will conduct integrity validation on files uploaded to Microsoft OneDrive. Sometimes, when uploading files, particularly to SharePoint, SharePoint will modify your file post upload by adding new data to your file which breaks the integrity checking of the upload performed by this client. Enable this option to disable the integrity checks performed by this client. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_upload_validation = "false"` or `disable_upload_validation = "true"` _**CLI Option Use:**_ `--disable-upload-validation` > [!CAUTION] > If you're uploading data to SharePoint or OneDrive Business Shared Folders, you might find it necessary to activate this option. It's important to note that any issues encountered aren't due to a problem with this client; instead, they should be regarded as issues with the Microsoft OneDrive technology stack. Enabling this option disables all upload integrity checks. ### disable_websocket_support _**Description:**_ This option disables the built-in WebSocket support that leverages RFC6455 to communicate with the Microsoft Graph API Service, providing near real-time notifications of online changes. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `disable_websocket_support = "false"` or `disable_websocket_support = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### display_manager_integration _**Description:**_ Controls whether the client integrates the configured 'sync_dir' with the desktop’s file manager (e.g. Nautilus for GNOME, Dolphin for KDE), adding it as a “special place” in the sidebar and setting a custom OneDrive folder icon where supported. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `display_manager_integration = "false"` or `display_manager_integration = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### display_running_config _**Description:**_ This option will include the running config of the application at application startup. This may be desirable to enable when running in containerised environments so that any application logging that is occurring, will have the application configuration being consumed at startup, written out to any applicable log file. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `display_running_config = "false"` or `display_running_config = "true"` _**CLI Option Use:**_ `--display-running-config` ### display_transfer_metrics _**Description:**_ This option will display file transfer metrics when enabled. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `display_transfer_metrics = "false"` or `display_transfer_metrics = "true"` _**Output Example:**_ `Transfer Metrics - File: path/to/file.data | Size: 35768 Bytes | Duration: 2.27 Seconds | Speed: 0.02 Mbps (approx)` _**CLI Option Use:**_ *None - this is a config file option only* ### dns_timeout _**Description:**_ This setting controls the libcurl DNS cache value. By default, libcurl caches this info for 60 seconds. This libcurl DNS cache timeout is entirely speculative that a name resolves to the same address for a small amount of time into the future as libcurl does not use DNS TTL properties. We recommend users not to tamper with this option unless strictly necessary. _**Value Type:**_ Integer _**Default Value:**_ 60 _**Config Example:**_ `dns_timeout = "90"` ### download_only _**Description:**_ This setting forces the client to only download data from Microsoft OneDrive and replicate that data locally. No changes made locally will be uploaded to Microsoft OneDrive when using this option. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `download_only = "false"` or `download_only = "true"` _**CLI Option Use:**_ `--download-only` > [!IMPORTANT] > When using this option, the default mode of operation is to not clean up local files that have been deleted online. This ensures that the local data is an *archive* of what was stored online. To cleanup local files use `--cleanup-local-files`. ### drive_id _**Description:**_ This setting controls the specific drive identifier the client will use when syncing with Microsoft OneDrive. _**Value Type:**_ String _**Default Value:**_ *None* _**Config Example:**_ `drive_id = "b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB"` > [!NOTE] > This option is typically only used when configuring the client to sync a specific SharePoint Library. If this configuration option is specified in your config file, a value must be specified otherwise the application will exit citing a fatal error has occurred. ### dry_run _**Description:**_ This setting controls the application capability to test your application configuration without actually performing any actual activity (download, upload, move, delete, folder creation). _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `dry_run = "false"` or `dry_run = "true"` _**CLI Option Use:**_ `--dry-run` ### enable_logging _**Description:**_ This setting controls the application logging all actions to a separate file. By default, all log files will be written to `/var/log/onedrive`, however this can changed by using the 'log_dir' config option _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `enable_logging = "false"` or `enable_logging = "true"` _**CLI Option Use:**_ `--enable-logging` > [!IMPORTANT] > Additional configuration is potentially required to configure the default log directory. Refer to the [Enabling the Client Activity Log](./usage.md#enabling-the-client-activity-log) section in usage.md for details ### file_fragment_size _**Description:**_ This option controls the fragment size when uploading large files to Microsoft OneDrive. The value specified is in MB. _**Value Type:**_ Integer _**Default Value:**_ 10 _**Minimum Value:**_ 10 _**Maximum Value:**_ 60 _**Config Example:**_ `file_fragment_size = "25"` _**CLI Option Use:**_ `--file-fragment-size = '25'` > [!NOTE] > Microsoft OneDrive requires that the file fragment size be an exact multiple of 320 KiB. The default value is an exact multiple of this required value. Additional exact multiple options are: > 15, 20, 25, 30, 35, 40, 45, 50, 55 ### force_http_11 _**Description:**_ This setting controls the application HTTP protocol version. By default, the application will use libcurl defaults for which HTTP protocol version will be used to interact with Microsoft OneDrive. Use this setting to downgrade libcurl to only use HTTP/1.1. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `force_http_11 = "false"` or `force_http_11 = "true"` _**CLI Option Use:**_ `--force-http-11` ### force_session_upload _**Description:**_ This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the local timestamp of the file. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `force_session_upload = "false"` or `force_session_upload = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### inotify_delay _**Description:**_ This option specifies the number of seconds 'inotify' events are paused before they are processed by this client. This value is used to overcome aggressive write applications such as Obsidian which write each keystroke in an atomic manner to the local disk. Due to this atomic write, each 'save' causes the existing file to be deleted and replaced with a new file, which this client sees as multiple constant 'inotify' events. _**Value Type:**_ Integer _**Default Value:**_ 5 _**Maximum Value:**_ 15 _**Config Example:**_ `inotify_delay = "10"` _**CLI Option Use:**_ *None - this is a config file option only* > [!NOTE] > This option is only used if 'delay_inotify_processing' is enabled, otherwise this option is ignored. ### ip_protocol_version _**Description:**_ This setting controls the application IP protocol that should be used when communicating with Microsoft OneDrive. The default is to use IPv4 and IPv6 networks for communicating to Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ 0 _**Valid Values:**_ 0 = IPv4 + IPv6, 1 = IPv4 Only, 2 = IPv6 Only _**Config Example:**_ `ip_protocol_version = "0"` or `ip_protocol_version = "1"` or `ip_protocol_version = "2"` > [!IMPORTANT] > In some environments where IPv4 and IPv6 are configured at the same time, this causes resolution and routing issues to Microsoft OneDrive. If this is the case, it is advisable to change 'ip_protocol_version' to match your environment. ### local_first _**Description:**_ This setting controls what the application considers the 'source of truth' for your data. By default, what is stored online will be considered as the 'source of truth' when syncing to your local machine. When using this option, your local data will be considered the 'source of truth'. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `local_first = "false"` or `local_first = "true"` _**CLI Option Use:**_ `--local-first` ### log_dir _**Description:**_ This setting controls the custom application log path when 'enable_logging' has been enabled. By default, all log files will be written to `/var/log/onedrive`. _**Value Type:**_ String _**Default Value:**_ *None* _**Config Example:**_ `log_dir = "~/logs/"` _**CLI Option Use:**_ `--log-dir "~/logs/"` ### max_curl_idle _**Description:**_ This configuration option controls the number of seconds that elapse after a cURL engine was last used before it is considered stale and destroyed. Evidence suggests that some upstream network devices ignore the cURL keep-alive setting and forcibly close the active TCP connection when idle. _**Value Type:**_ Integer _**Default Value:**_ 120 _**Config Example:**_ `max_curl_idle = "120"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > It is strongly recommended not to modify this setting without conducting thorough network testing. Changing this option may lead to unexpected behaviour or connectivity issues, especially if upstream network devices handle idle connections in non-standard ways. ### monitor_fullscan_frequency _**Description:**_ This configuration option controls the number of 'monitor_interval' iterations between when a full scan of your data is performed to ensure data integrity and consistency. _**Value Type:**_ Integer _**Default Value:**_ 12 _**Config Example:**_ `monitor_fullscan_frequency = "24"` _**CLI Option Use:**_ `--monitor-fullscan-frequency '24'` > [!NOTE] > By default without configuration, 'monitor_fullscan_frequency' is set to 12. In this default state, this means that a full scan is performed every 'monitor_interval' x 'monitor_fullscan_frequency' = 3600 seconds. This setting is only applicable when running in `--monitor` mode. Setting this configuration option to '0' will *disable* the full scan of your data online. ### monitor_interval _**Description:**_ This configuration setting determines how often the synchronisation loops run in --monitor mode, measured in seconds. When this time period elapses, the client will check for online changes in Microsoft OneDrive, conduct integrity checks on local data and scan the local 'sync_dir' to identify any new content that hasn't been uploaded yet. _**Value Type:**_ Integer _**Default Value:**_ 300 _**Config Example:**_ `monitor_interval = "600"` _**CLI Option Use:**_ `--monitor-interval '600'` > [!NOTE] > A minimum value of 300 is enforced for this configuration setting. ### monitor_log_frequency _**Description:**_ This configuration option controls the suppression of frequently printed log items to the system console when using `--monitor` mode. The aim of this configuration item is to reduce the log output when near zero sync activity is occurring. _**Value Type:**_ Integer _**Default Value:**_ 12 _**Config Example:**_ `monitor_log_frequency = "24"` _**CLI Option Use:**_ `--monitor-log-frequency '24'` _**Usage Example:**_ By default, at application start-up when using `--monitor` mode, the following will be logged to indicate that the application has correctly started and has performed all the initial processing steps: ```text Reading configuration file: /home/user/.config/onedrive/config Configuration file successfully loaded Configuring Global Azure AD Endpoints Sync Engine Initialised with new Onedrive API instance All application operations will be performed in: /home/user/OneDrive OneDrive synchronisation interval (seconds): 300 Initialising filesystem inotify monitoring ... Performing initial synchronisation to ensure consistent local state ... Starting a sync with Microsoft OneDrive Fetching items from the OneDrive API for Drive ID: b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB .. Processing changes and items received from Microsoft OneDrive ... Performing a database consistency and integrity check on locally stored data ... Scanning the local file system '~/OneDrive' for new data to upload ... Performing a final true-up scan of online data from Microsoft OneDrive Fetching items from the OneDrive API for Drive ID: b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB .. Processing changes and items received from Microsoft OneDrive ... Sync with Microsoft OneDrive is complete ``` Then, based on 'monitor_log_frequency', the following output will be logged until the suppression loop value is reached: ```text Starting a sync with Microsoft OneDrive Syncing changes from Microsoft OneDrive ... Sync with Microsoft OneDrive is complete ``` > [!NOTE] > The additional log output `Performing a database consistency and integrity check on locally stored data ...` will only be displayed when this activity is occurring which is triggered by 'monitor_fullscan_frequency'. > [!NOTE] > If verbose application output is being used (`--verbose`), then this configuration setting has zero effect, as application verbose output takes priority over application output suppression. ### no_remote_delete _**Description:**_ This configuration option controls whether local file and folder deletes are actioned on Microsoft OneDrive. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `local_first = "false"` or `local_first = "true"` _**CLI Option Use:**_ `--no-remote-delete` > [!IMPORTANT] > This configuration option can *only* be used in conjunction with `--upload-only` ### notify_file_actions _**Description:**_ This configuration option controls whether the client will log via GUI notifications successful actions that the client performs. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `notify_file_actions = "true"` > [!NOTE] > GUI Notification Support must be compiled in first, otherwise this option will have zero effect and will not be used. ### operation_timeout _**Description:**_ This configuration option controls the maximum amount of time (seconds) a file operation is allowed to take. This includes DNS resolution, connecting, data transfer, etc. We recommend users not to tamper with this option unless strictly necessary. This option controls the CURLOPT_TIMEOUT setting of libcurl. _**Value Type:**_ Integer _**Default Value:**_ 3600 _**Config Example:**_ `operation_timeout = "3600"` ### permanent_delete _**Description:**_ Permanently delete an item online when it is removed locally. When using this method, they're permanently removed and aren't sent to the Microsoft OneDrive Recycle Bin. Therefore, permanently deleted drive items can't be restored afterward. Online data loss MAY occur in this scenario. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `permanent_delete = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > The Microsoft OneDrive API for this capability is also very narrow: > | Account Type | Config Option is Supported | > |:-------------|:----------------:| > | Personal | ❌ | > | Business | ✔ | > | SharePoint | ✔ | > | Microsoft Cloud Germany | ✔ | > | Microsoft Cloud for US Government | ❌ | > | Azure and Office365 operated by VNET in China | ❌ | > > When using this config option against an unsupported Personal Accounts the following message will be generated: > ``` > WARNING: The application is configured to permanently delete files online; however, this action is not supported by Microsoft OneDrive Personal Accounts. > ``` > > When using this config option against a supported account the following message will be generated: > ``` > WARNING: Application has been configured to permanently remove files online rather than send to the recycle bin. Permanently deleted items can't be restored. > WARNING: Online data loss MAY occur in this scenario. > ``` > ### rate_limit _**Description:**_ This configuration option controls the bandwidth used by the application, per thread, when interacting with Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ 0 (unlimited, use available bandwidth per thread) _**Valid Values:**_ Valid tested values for this configuration option are as follows: * 131072 = 128 KB/s - absolute minimum for basic application operations to prevent timeouts * 262144 = 256 KB/s * 524288 = 512 KB/s * 1048576 = 1 MB/s * 10485760 = 10 MB/s * 104857600 = 100 MB/s _**Config Example:**_ `rate_limit = "131072"` ### read_only_auth_scope _**Description:**_ This configuration option controls whether the OneDrive Client for Linux operates in a totally in read-only operation. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `read_only_auth_scope = "false"` or `read_only_auth_scope = "true"` > [!IMPORTANT] > When using 'read_only_auth_scope' you also will need to remove your existing application access consent otherwise old authentication consent will be valid and will be used. This will mean the application will technically have the consent to upload data until you revoke this consent. ### recycle_bin_path _**Description:**_ This configuration option allows you to specify the 'Recycle Bin' path for the application. _**Value Type:**_ String _**Default Value:**_ *None* however the application will use `~/.local/share/Trash` as the pre-defined default so that files will be placed in the correct location for your user profile. _**CLI Option Use:**_ *None - this is a config file option only* _**Config Example:**_ `recycle_bin_path = "/path/to/desired/location/"` ### remove_source_files _**Description:**_ This configuration option controls whether the OneDrive Client for Linux removes the local file post successful transfer to Microsoft OneDrive. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `remove_source_files = "false"` or `remove_source_files = "true"` _**CLI Option Use:**_ `--remove-source-files` > [!IMPORTANT] > This configuration option can *only* be used in conjunction with `--upload-only` ### remove_source_folders _**Description:**_ This configuration option controls whether the OneDrive Client for Linux removes the local directory structure post successful file transfer to Microsoft OneDrive. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `remove_source_folders = "false"` or `remove_source_folders = "true"` _**CLI Option Use:**_ `--remove-source-folders` > [!IMPORTANT] > This configuration option can *only* be used in conjunction with `--upload-only --remove-source-files` > [!IMPORTANT] > The directory structure will only be removed if it is empty. ### resync _**Description:**_ This configuration option controls whether the known local sync state with Microsoft OneDrive is removed at application startup. When this option is used, a full scan of your data online is performed to ensure that the local sync state is correctly built back up. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `resync = "false"` or `resync = "true"` _**CLI Option Use:**_ `--resync` > [!CAUTION] > It's highly recommended to use this option only if the application prompts you to do so. Don't blindly use this option as a default option. If you alter any of the subsequent configuration items, you will be required to execute a `--resync` to make sure your client is syncing your data with the updated configuration: > * drive_id > * sync_dir > * skip_file > * skip_dir > * skip_dotfiles > * skip_symlinks > * sync_business_shared_items > * Creating, Modifying or Deleting the 'sync_list' file ### resync_auth _**Description:**_ This configuration option controls the approval of performing a 'resync' which can be beneficial in automated environments. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `resync_auth = "false"` or `resync_auth = "true"` _**CLI Option Use:**_ `--resync-auth` > [!TIP] > In certain automated environments (assuming you know what you're doing due to using automation), to avoid the 'proceed with acknowledgement' resync requirement, this option allows you to automatically acknowledge the resync prompt. ### skip_dir _**Description:**_ This configuration option controls whether the application skips certain directories from being synced. Directories can be specified in 2 ways: * As a single entry. This will search the respective path for this entry and skip all instances where this directory is present, where ever it may exist. * As a full path entry. This will skip the explicit path as set. > [!IMPORTANT] > Entries for 'skip_dir' are *relative* to your 'sync_dir' path. _**Value Type:**_ String _**Default Value:**_ *Empty* - not required for normal operation _**Config Example:**_ Patterns are case insensitive. `*` and `?` [wildcards characters](https://technet.microsoft.com/en-us/library/bb490639.aspx) are supported. Use `|` to separate multiple patterns. ```text skip_dir = "Desktop|Documents/IISExpress|Documents/SQL Server Management Studio|Documents/Visual Studio*|Documents/WindowsPowerShell|.Rproj-user" ``` The 'skip_dir' option can also be specified multiple times within your config file, for example: ```text skip_dir = "SkipThisDirectoryAnywhere" skip_dir = ".SkipThisOtherDirectoryAnywhere" skip_dir = "/Explicit/Path/To/A/Directory" skip_dir = "/Another/Explicit/Path/To/Different/Directory" ``` This will be interpreted the same as: ```text skip_dir = "SkipThisDirectoryAnywhere|.SkipThisOtherDirectoryAnywhere|/Explicit/Path/To/A/Directory|/Another/Explicit/Path/To/Different/Directory" ``` _**CLI Option Use:**_ `--skip-dir 'SkipThisDirectoryAnywhere|.SkipThisOtherDirectoryAnywhere|/Explicit/Path/To/A/Directory|/Another/Explicit/Path/To/Different/Directory'` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. If using the config file and CLI option is used, the CLI option will *replace* the config file entries. After changing or modifying this option, you will be required to perform a resync. ### skip_dir_strict_match _**Description:**_ This configuration option controls whether the application performs strict directory matching when checking 'skip_dir' items. When enabled, the 'skip_dir' item must be a full path match to the path to be skipped. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `skip_dir_strict_match = "false"` or `skip_dir_strict_match = "true"` _**CLI Option Use:**_ `--skip-dir-strict-match` ### skip_dotfiles _**Description:**_ This configuration option controls whether the application will skip all .files and .folders when performing sync operations. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `skip_dotfiles = "false"` or `skip_dotfiles = "true"` _**CLI Option Use:**_ `--skip-dot-files` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. ### skip_file _**Description:**_ This configuration option controls whether the application skips certain files from being synced. _**Value Type:**_ String _**Default Value:**_ `~*|.~*|*.tmp|*.swp|*.partial` By default, the following files will be skipped: | Skip File Pattern | Meaning | Why this should be skipped | |:------------------|:---------------------------|:---------------------------| | `~*` | Files that start with `~` | Temporary or backup files. Typically auto-created by various programs during editing sessions. These are not intended to be saved permanently. Example: Emacs, Vim, and others create such files. | | `.~*` | Files that start with `.~` | Hidden lock or temp files, especially from LibreOffice and OpenOffice. (E.g., `.~lock.MyFile.docx#`) These are only used to prevent multiple users editing the same file simultaneously. | | `*.tmp` | Files ending in `.tmp` | Generic temporary files created by applications like browsers, editors, installers. They represent intermediate data and are usually auto-deleted after a session. | | `*.swp` | Files ending in `.swp` | Vim (and vi) swap files. Created to protect against crash recovery during text editing. Should not be synced because they are transient. | | `*.partial` | Files ending in `.partial` | Partially downloaded files. Common in browsers (like Firefox `.partial` download files), background downloaders and this client. Incomplete by nature. Syncing them causes broken files online. | The following suggested skip file patterns are not included in the default configuration but could also be considered for skipping: | Skip File Pattern | Meaning | Why this should be skipped | |:------------------|:---------------------------|:---------------------------| | `*.bak` | Files ending in `.bak` | Backup files created by many text editors, IDEs, or applications. These are automatic backups made to preserve earlier versions of files before editing changes are saved. They are not intended for syncing — they are redundant copies of existing or previous files. | > [!IMPORTANT] > If you define your own 'skip_file' configuration, the default settings listed above will be *overridden*. It is strongly recommended that you explicitly include the default 'skip_file' rules alongside your custom entries to ensure temporary and/or transient files are still correctly skipped. _**Config Example:**_ Patterns are case insensitive. `*` and `?` [wildcards characters](https://technet.microsoft.com/en-us/library/bb490639.aspx) are supported. Use `|` to separate multiple patterns. Files can be skipped in the following fashion: * Specify a wildcard, eg: '*.txt' (skip all txt files) * Explicitly specify the filename and it's full path relative to your sync_dir, eg: '/path/to/file/filename.ext' * Explicitly specify the filename only and skip every instance of this filename, eg: 'filename.ext' ```text skip_file = "~*|/Documents/OneNote*|/Documents/config.xlaunch|myfile.ext|/Documents/keepass.kdbx" ``` > [!IMPORTANT] > Entries for 'skip_file' are *relative* to your 'sync_dir' path. The 'skip_file' option can be specified multiple times within your config file, for example: ```text # Defaults - always keep skip_file = "~*|.~*|*.tmp|*.swp|*.partial" # Custom 'skip_file' additions skip_file = "*.blah" skip_file = "never_sync.file" skip_file = "/Documents/keepass.kdbx" ``` This will be interpreted the same as: ```text skip_file = "~*|.~*|*.tmp|*.swp|*.partial|*.blah|never_sync.file|/Documents/keepass.kdbx" ``` _**CLI Option Use:**_ `--skip-file '~*|.~*|*.tmp|*.swp|*.partial|*.blah|never_sync.file|/Documents/keepass.kdbx'` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. If using the config file and CLI option is used, the CLI option will *replace* the config file entries. After changing or modifying this option, you will be required to perform a resync. ### skip_size _**Description:**_ This configuration option controls whether the application skips syncing certain files larger than the specified size. The value specified is in MB. _**Value Type:**_ Integer _**Default Value:**_ 0 (all files, regardless of size, are synced) _**Config Example:**_ `skip_size = "50"` _**CLI Option Use:**_ `--skip-size '50'` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. ### skip_symlinks _**Description:**_ This configuration option controls whether the application will skip all symbolic links when performing sync operations. Microsoft OneDrive has no concept or understanding of symbolic links, and attempting to upload a symbolic link to Microsoft OneDrive generates a platform API error. All data (files and folders) that are uploaded to OneDrive must be whole files or actual directories. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `skip_symlinks = "false"` or `skip_symlinks = "true"` _**CLI Option Use:**_ `--skip-symlinks` > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. ### space_reservation _**Description:**_ This configuration option controls how much local disk space should be reserved, to prevent the application from filling up your entire disk due to misconfiguration _**Value Type:**_ Integer _**Default Value:**_ 50 MB (expressed as Bytes when using `--display-config`) _**Config Example:**_ `space_reservation = "100"` _**CLI Option Use:**_ `--space-reservation '100'` ### sync_business_shared_items _**Description:**_ This configuration option controls whether OneDrive Business | Office 365 Shared Folders, when added as a 'shortcut' to your 'My Files', will be synced to your local system. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `sync_business_shared_items = "false"` or `sync_business_shared_items = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!NOTE] > This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. > [!CAUTION] > This option is *not* backwards compatible with any v2.4.x application version. If you are enabling this option on *any* system running v2.5.x application version, all your application versions being used *everywhere* must be v2.5.x codebase. ### sync_dir _**Description:**_ This configuration option determines the location on your local filesystem where your data from Microsoft OneDrive will be saved. _**Value Type:**_ String _**Default Value:**_ `~/OneDrive` _**Config Example:**_ `sync_dir = "~/MyDirToSync"` _**CLI Option Use:**_ `--syncdir '~/MyDirToSync'` > [!CAUTION] > After changing this option, you will be required to perform a resync. Do not change or modify this option without fully understanding the implications of doing so. ### sync_dir_permissions _**Description:**_ This configuration option defines the directory permissions applied when a new directory is created locally during the process of syncing your data from Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ `700` - This provides the following permissions: `drwx------` _**Config Example:**_ `sync_dir_permissions = "700"` > [!IMPORTANT] > Use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. You will need to manually update all existing directory permissions if you modify this value. ### sync_file_permissions _**Description:**_ This configuration option defines the file permissions applied when a new file is created locally during the process of syncing your data from Microsoft OneDrive. _**Value Type:**_ Integer _**Default Value:**_ `600` - This provides the following permissions: `-rw-------` _**Config Example:**_ `sync_file_permissions = "600"` > [!IMPORTANT] > Use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. You will need to manually update all existing directory permissions if you modify this value. ### sync_root_files _**Description:**_ This configuration option manages the synchronisation of files located in the 'sync_dir' root when using a 'sync_list.' It enables you to sync all these files by default, eliminating the need to repeatedly modify your 'sync_list' and initiate resynchronisation. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `sync_root_files = "false"` or `sync_root_files = "true"` _**CLI Option Use:**_ `--sync-root-files` > [!IMPORTANT] > Although it's not mandatory, it's recommended that after enabling this option, you perform a `--resync`. This ensures that any previously excluded content is now included in your sync process. ### threads _**Description:**_ This configuration option controls the number of worker threads used for parallel upload and download operations when transferring files between your local system and Microsoft OneDrive. Each thread handles a discrete portion of the workload, improving performance when used appropriately. All non-transfer operations, such as folder listings (`/children`), delta queries (`/delta`), and metadata requests are processed serially on a single thread. _**Value Type:**_ Integer _**Default Value:**_ `8` _**Maximum Value:**_ `16` _**Config Example:**_ `threads = "16"` _**CLI Option Use:**_ `--threads '16'` > [!NOTE] > The default value of `8` threads is based on the average number of physical CPU cores found in consumer and workstation-grade Intel and AMD processors released from approximately 2012 through 2025. This includes laptops, desktops, and server-grade CPUs where 4–8 physical cores are typical. > > In extensive testing, configuring the application with more than `16` threads — regardless of available physical CPU cores — frequently caused the Microsoft OneDrive service to become blocked due to excessive API request volume. > [!NOTE] > The threads setting only affects file transfer operations. All API operations outside of upload/download operations are single-threaded. > > This option allows the alignment to Microsoft’s [Graph API guidance](https://learn.microsoft.com/en-us/graph/throttling) which recommends limiting concurrent requests to 5–10. The default of `8` provides a safe and performant baseline. > [!IMPORTANT] > For optimal performance and application stability, the number of threads should not exceed the number of **physical CPU cores** available to the system. Setting the thread count too high can result in **CPU contention**, increased **context switching**, and **reduced throughput** due to over-scheduling. > > If running inside a container or virtual machine, ensure that the container/VM has sufficient allocated CPU cores before increasing this setting. > [!IMPORTANT] > If the configured `threads` value (default or manual) exceeds the number of available CPU cores, the application will issue a warning similar to the following: > > ``` > WARNING: Configured 'threads = 8' exceeds available CPU cores (CPU_COUNT). > This may lead to reduced performance, CPU contention, and instability. For best results, set 'threads' no higher than the number of physical CPU cores. > ``` > > If this warning message appears during application startup, you **must** review and adjust your threads setting to match the number of physical CPU cores on your system to avoid degraded performance or instability. > [!IMPORTANT] > The application fully implements Microsoft’s throttling requirements for handling 429 and 503 response codes by: > * Handles 429 and 503 responses using exponential backoff > * Respects Retry-After headers provided by the API for the required back off period > * Limits concurrency to the recommended limits > > If you receive this application output: >``` >Handling a Microsoft Graph API HTTP 429 Response Code (Too Many Requests) - Internal Thread ID: AbCdEfGhIjKlMnOp >``` > Reduce your configured 'threads' value or raise a support ticket with Microsoft > [!WARNING] > Increasing or keeping the thread count beyond the default or available physical CPU cores will also result in higher **system resource utilisation**, particularly in terms of CPU load and local TCP port consumption. On lower-spec systems or in constrained environments, this may lead to **network saturation**, **unpredictable behaviour**, **increase in throttling behaviour by Microsoft** or **application crashes** due to resource exhaustion. ### transfer_order _**Description:**_ This configuration option controls the transfer order of files between your local system and Microsoft OneDrive. _**Value Type:**_ String _**Default Value:**_ `default` _**Config Example:**_ #### Transfer by size, smallest first ``` transfer_order = "size_asc" ``` #### Transfer by size, largest first ``` transfer_order = "size_dsc" ``` #### Transfer by file name sorted A to Z ``` transfer_order = "name_asc" ``` #### Transfer by file name sorted Z to A ``` transfer_order = "name_dsc" ``` ### upload_only _**Description:**_ This setting forces the client to only upload data to Microsoft OneDrive and replicate the locate state online. By default, this will also remove content online, that has been removed locally. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `upload_only = "false"` or `upload_only = "true"` _**CLI Option Use:**_ `--upload-only` > [!IMPORTANT] > To ensure that data deleted locally remains accessible online, you can use the 'no_remote_delete' option. If you want to delete the data from your local storage after a successful upload to Microsoft OneDrive, you can use the 'remove_source_files' option. ### use_device_auth _**Description:**_ Enable this option to authenticate using the Microsoft OAuth2 Device Authorisation Flow (`device_code` grant). This flow allows the client to initiate a sign-in process without launching a web browser directly — ideal for headless systems or remote sessions. A short code and URL will be provided for the user to complete authentication via a separate browser-enabled device. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `use_device_auth = "false"` or `use_device_auth = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!IMPORTANT] > This option is fully supported for Microsoft Entra ID (Work/School) accounts. For personal Microsoft accounts (e.g., @outlook.com or @hotmail.com), this method of authentication is not supported. Please use the interactive interactive authentication method (default) to authenticate this application. ### use_intune_sso _**Description:**_ Enable this option to authenticate using Intune Single Sign-On (SSO) via the Microsoft Identity Device Broker over D-Bus. This method is suitable for environments where the system is Intune-enrolled and allows seamless token retrieval without requiring browser interaction. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `use_intune_sso = "false"` or `use_intune_sso = "true"` _**CLI Option Use:**_ *None - this is a config file option only* > [!NOTE] > The installation and configuration of Intune for your platform is beyond the scope of this documentation. ### use_recycle_bin _**Description:**_ This configuration option controls the application function to move online deleted files to a 'Recycle Bin' on your system. This allows you to review online deleted data manually before this is purged from your actual system. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `use_recycle_bin = "false"` or `use_recycle_bin = "true"` _**CLI Option Use:**_ *None - this is a config file option only* ### user_agent _**Description:**_ This configuration option controls the 'User-Agent' request header that is presented to Microsoft Graph API when accessing the Microsoft OneDrive service. This string lets servers and network peers identify the application, operating system, vendor, and/or version of the application making the request. We recommend users not to tamper with this option unless strictly necessary. _**Value Type:**_ String _**Default Value:**_ `ISV|abraunegg|OneDrive Client for Linux/vX.Y.Z-A-bcdefghi` _**Config Example:**_ `user_agent = "ISV|CompanyName|AppName/Version"` > [!IMPORTANT] > The default 'user_agent' value conforms to specific Microsoft requirements to identify as an ISV that complies with OneDrive traffic decoration requirements. Changing this value potentially will impact how Microsoft see's your client, thus your traffic may get throttled. For further information please read: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online ### webhook_enabled _**Description:**_ This configuration option controls the application feature 'webhooks' to allow you to subscribe to remote updates as published by Microsoft OneDrive. This option only operates when the client is using 'Monitor Mode'. _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ The following is the minimum working example that needs to be added to your 'config' file to enable 'webhooks' successfully: ```text webhook_enabled = "true" webhook_public_url = "https:///webhooks/onedrive" ``` > [!NOTE] > Setting `webhook_enabled = "true"` enables the webhook feature in 'monitor' mode. The onedrive process will listen for incoming updates at a configurable endpoint, which defaults to `0.0.0.0:8888`. > [!IMPORTANT] > A valid HTTPS certificate is required for your public-facing URL if using nginx. Self signed certificates will be rejected. Consider using https://letsencrypt.org/ to utilise free SSL certificates for your public-facing URL. > [!TIP] > If you receive this application error: `Subscription validation request failed. Response must exactly match validationToken query parameter.` the most likely cause for this error will be your nginx configuration. > > To resolve this configuration issue, potentially investigate adding the following 'proxy' configuration options to your nginx configuration file: > ```text > server { > listen 443; > server_name ; > location /webhooks/onedrive { > proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; > proxy_set_header X-Original-Request-URI $request_uri; > proxy_read_timeout 300s; > proxy_connect_timeout 75s; > proxy_buffering off; > proxy_http_version 1.1; > proxy_pass http://127.0.0.1:8888; > } > } > ``` > For any further nginx configuration assistance, please refer to: https://docs.nginx.com/ ### webhook_expiration_interval _**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription expires. The value is expressed in the number of seconds before expiry. _**Value Type:**_ Integer _**Default Value:**_ 600 _**Config Example:**_ `webhook_expiration_interval = "1200"` ### webhook_listening_host _**Description:**_ This configuration option controls the host address that this client binds to, when the webhook feature is enabled. _**Value Type:**_ String _**Default Value:**_ 0.0.0.0 _**Config Example:**_ `webhook_listening_host = ""` - this will use the default value. `webhook_listening_host = "192.168.3.4"` - this will bind the client to use the IP address 192.168.3.4. > [!NOTE] > Use in conjunction with 'webhook_listening_port' to change the webhook listening endpoint. ### webhook_listening_port _**Description:**_ This configuration option controls the TCP port that this client listens on, when the webhook feature is enabled. _**Value Type:**_ Integer _**Default Value:**_ 8888 _**Config Example:**_ `webhook_listening_port = "9999"` > [!NOTE] > Use in conjunction with 'webhook_listening_host' to change the webhook listening endpoint. ### webhook_public_url _**Description:**_ This configuration option controls the URL that Microsoft will send subscription notifications to. This must be a valid Internet accessible URL. _**Value Type:**_ String _**Default Value:**_ *empty* _**Config Example:**_ ```text webhook_public_url = "https:///webhooks/onedrive" ``` ### webhook_renewal_interval _**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription is renewed. The value is expressed in the number of seconds before renewal. _**Value Type:**_ Integer _**Default Value:**_ 300 _**Config Example:**_ `webhook_renewal_interval = "600"` ### webhook_retry_interval _**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription is retried when creating or renewing a subscription failed. The value is expressed in the number of seconds before retry. _**Value Type:**_ Integer _**Default Value:**_ 60 _**Config Example:**_ `webhook_retry_interval = "120"` ### write_xattr_data _**Description:**_ This setting enables writing xattr values detailing the 'createdBy' and 'lastModifiedBy' information provided by the OneDrive API _**Value Type:**_ Boolean _**Default Value:**_ False _**Config Example:**_ `write_xattr_data = "false"` or `write_xattr_data = "true"` _**CLI Option Use:**_ *None - this is a config file option only* _**xattr Data Example:**_ ``` user.onedrive.createdBy="Account Display Name" user.onedrive.lastModifiedBy="Account Display Name" ``` ## Command Line Interface (CLI) Only Options ### CLI Option: --auth-files _**Description:**_ This CLI option allows the user to perform application authentication not via an interactive dialog but via specific files that the application uses to read the authentication data from. _**Usage Example:**_ `onedrive --auth-files authUrl:responseUrl` > [!IMPORTANT] > The authorisation URL is written to the specified 'authUrl' file, then onedrive waits for the file 'responseUrl' to be present, and reads the authentication response from that file. Example: > > ```text > onedrive --auth-files '~/onedrive-auth-url:~/onedrive-response-url' > Reading configuration file: /home/alex/.config/onedrive/config > Configuration file successfully loaded > Configuring Global Azure AD Endpoints > Client requires authentication before proceeding. Waiting for --auth-files elements to be available. > ``` > At this point, the client has written the file `~/onedrive-auth-url` which contains the authentication URL that needs to be visited to perform the authentication process. The client will now wait and watch for the presence of the file `~/onedrive-response-url`. > > Visit the authentication URL, and then create a new file called `~/onedrive-response-url` with the response URI. Once this has been done, the application will acknowledge the presence of this file, read the contents, and authenticate the application. > ```text > Sync Engine Initialised with new Onedrive API instance > > --sync or --monitor switches missing from your command line input. Please add one (not both) of these switches to your command line or use 'onedrive --help' for further assistance. > > No OneDrive sync will be performed without one of these two arguments being present. > ``` ### CLI Option: --auth-response _**Description:**_ This CLI option allows the user to perform application authentication not via an interactive dialog but via providing the authentication response URI directly. _**Usage Example:**_ `onedrive --auth-response https://login.microsoftonline.com/common/oauth2/nativeclient?code=` > [!TIP] > Typically, unless the application client identifier has been modified, authentication scopes are being modified or a specific Azure Tenant is being specified, the authentication URL will most likely be as follows: > ```text > https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=d50ca740-c83f-4d1b-b616-12c519384f0c&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient > ``` > With this URL being known, it is possible ahead of time to request an authentication token by visiting this URL, and performing the authentication access request. ### CLI Option: --confdir _**Description:**_ This CLI option allows the user to specify where all the application configuration and relevant components are stored. _**Usage Example:**_ `onedrive --confdir '~/.config/onedrive-business/'` > [!IMPORTANT] > If using this option, it must be specified each and every time the application is used. If this is omitted, the application default configuration directory will be used. ### CLI Option: --create-directory _**Description:**_ This CLI option allows the user to create the specified directory path on Microsoft OneDrive without performing a sync. _**Usage Example:**_ `onedrive --create-directory 'path/of/new/folder/structure/to/create/'` > [!IMPORTANT] > The specified path to create is relative to your configured 'sync_dir'. ### CLI Option: --create-share-link _**Description:**_ This CLI option enables the creation of a shareable file link that can be provided to users to access the file that is stored on Microsoft OneDrive. By default, the permissions for the file will be 'read-only'. _**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt'` > [!IMPORTANT] > If writable access to the file is required, you must add `--with-editing-perms` to your command. See below for details. ### CLI Option: --destination-directory _**Description:**_ This CLI option specifies the 'destination' portion of moving a file or folder online, without performing a sync operation. _**Usage Example:**_ `onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination'` > [!IMPORTANT] > All specified paths are relative to your configured 'sync_dir'. ### CLI Option: --display-config _**Description:**_ This CLI option will display the effective application configuration _**Usage Example:**_ `onedrive --display-config` ### CLI Option: --display-sync-status _**Description:**_ This CLI option will display the sync status of the configured 'sync_dir' _**Usage Example:**_ `onedrive --display-sync-status` > [!TIP] > This option can also use the `--single-directory` option to determine the sync status of a specific directory within the configured 'sync_dir' ### CLI Option: ---display-quota _**Description:**_ This CLI option will display the quota status of the account drive id or the configured 'drive_id' value _**Usage Example:**_ `onedrive --display-quota` ### CLI Option: --download-file _**Description:**_ This CLI option will download a single file based on the online path. No sync will be performed. _**Usage Example:**_ `onedrive --download-file 'path/to/your/file/online'` ### CLI Option: --force _**Description:**_ This CLI option enables the force the deletion of data when a 'big delete' is detected. _**Usage Example:**_ `onedrive --sync --verbose --force` > [!IMPORTANT] > This option should only be used exclusively in cases where you've initiated a 'big delete' and genuinely intend to remove all the data that is set to be deleted online. ### CLI Option: --force-sync _**Description:**_ This CLI option enables the syncing of a specific directory, using the Client Side Filtering application defaults, overriding any user application configuration. _**Usage Example:**_ `onedrive --sync --verbose --force-sync --single-directory 'Data' > [!NOTE] > When this option is used, you will be presented with the following warning and risk acceptance: > ```text > WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --synch --single-directory --force-sync being used > > The use of --force-sync will reconfigure the application to use defaults. This may have untold and unknown future impacts. > By proceeding in using this option you accept any impacts including any data loss that may occur as a result of using --force-sync. > > Are you sure you wish to proceed with --force-sync [Y/N] > ``` > To proceed with this sync task, you must risk accept the actions you are taking. If you have any concerns, first use `--dry-run` and evaluate the outcome before proceeding with the actual action. ### CLI Option: --get-file-link _**Description:**_ This CLI option queries the OneDrive API and return's the WebURL for the given local file. _**Usage Example:**_ `onedrive --get-file-link 'relative/path/to/your/file.txt'` > [!IMPORTANT] > The path that you should use *must* be relative to your 'sync_dir' ### CLI Option: --get-sharepoint-drive-id _**Description:**_ This CLI option queries the OneDrive API and return's the Office 365 Drive ID for a given Office 365 SharePoint Shared Library that can then be used with 'drive_id' to sync a specific SharePoint Library. _**Usage Example:**_ `onedrive --get-sharepoint-drive-id '*'` or `onedrive --get-sharepoint-drive-id 'PointPublishing Hub Site'` ### CLI Option: --list-shared-items _**Description:**_ This CLI option lists all OneDrive Business Shared items with your account. The resulting list shows shared files and folders that you can configure this client to sync. _**Usage Example:**_ `onedrive --list-shared-items` _**Example Output:**_ ``` ... Listing available OneDrive Business Shared Items: ----------------------------------------------------------------------------------- Shared File: large_document_shared.docx Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: no_download_access.docx Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: online_access_only.txt Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: read_only.txt Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: qewrqwerwqer.txt Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: dummy_file_to_share.docx Shared By: testuser2 testuser2 (testuser2@domain.tld) ----------------------------------------------------------------------------------- Shared Folder: Sub Folder 2 Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared File: file to share.docx Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- Shared Folder: Top Folder Shared By: test user (testuser@domain.tld) ----------------------------------------------------------------------------------- ... ``` ### CLI Option: --logout _**Description:**_ This CLI option removes this clients authentication status with Microsoft OneDrive. Any further application use will require the application to be re-authenticated with Microsoft OneDrive. _**Usage Example:**_ `onedrive --logout` ### CLI Option: --modified-by _**Description:**_ This CLI option queries the OneDrive API and return's the last modified details for the given local file. _**Usage Example:**_ `onedrive --modified-by 'relative/path/to/your/file.txt'` > [!IMPORTANT] > The path that you should use *must* be relative to your 'sync_dir' ### CLI Option: --monitor | -m _**Description:**_ This CLI option controls the 'Monitor Mode' operational aspect of the client. When this option is used, the client will perform on-going syncs of data between Microsoft OneDrive and your local system. Local changes will be uploaded in near-realtime, whilst online changes will be downloaded on the next sync process. The frequency of these checks is governed by the 'monitor_interval' value. _**Usage Example:**_ `onedrive --monitor` or `onedrive -m` ### CLI Option: --print-access-token _**Description:**_ Print the current access token being used to access Microsoft OneDrive. _**Usage Example:**_ `onedrive --verbose --verbose --debug-https --print-access-token` > [!CAUTION] > Do not use this option if you do not know why you are wanting to use it. Be highly cautious of exposing this object. Change your password if you feel that you have inadvertently exposed this token. ### CLI Option: --reauth _**Description:**_ This CLI option controls the ability to re-authenticate your client with Microsoft OneDrive. _**Usage Example:**_ `onedrive --reauth` ### CLI Option: --remove-directory _**Description:**_ This CLI option allows the user to remove the specified directory path on Microsoft OneDrive without performing a sync. _**Usage Example:**_ `onedrive --remove-directory 'path/of/new/folder/structure/to/remove/'` > [!IMPORTANT] > The specified path to remove is relative to your configured 'sync_dir'. ### CLI Option: --share-password _**Description:**_ This CLI option enables the creation of a shareable file link that can only be accessed by providing the valid password. This option can only be used in conjunction with `--create-share-link` _**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt' --share-password 'valid password'` ### CLI Option: --single-directory _**Description:**_ This CLI option controls the applications ability to sync a specific single directory. _**Usage Example:**_ `onedrive --sync --single-directory 'Data'` > [!IMPORTANT] > The path specified is relative to your configured 'sync_dir' path. If the physical local path 'Folder' to sync is `~/OneDrive/Data/Folder` then the command would be `--single-directory 'Data/Folder'`. ### CLI Option: --source-directory _**Description:**_ This CLI option specifies the 'source' portion of moving a file or folder online, without performing a sync operation. _**Usage Example:**_ `onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination'` > [!IMPORTANT] > All specified paths are relative to your configured 'sync_dir'. ### CLI Option: --sync | -s _**Description:**_ This CLI option controls the 'Standalone Mode' operational aspect of the client. When this option is used, the client will perform a one-time sync of data between Microsoft OneDrive and your local system. _**Usage Example:**_ `onedrive --sync` or `onedrive -s` ### CLI Option: --sync-shared-files _**Description:**_ Sync OneDrive Business Shared Files to the local filesystem. _**Usage Example:**_ `onedrive --sync --sync-shared-files` > [!IMPORTANT] > To use this option you must first enable 'sync_business_shared_items' within your application configuration. Please read 'business-shared-items.md' for more information regarding this option. ### CLI Option: --verbose | -v+ _**Description:**_ This CLI option controls the verbosity of the application output. Use the option once, to have normal verbose output, use twice to have debug level application output. _**Usage Example:**_ `onedrive --sync --verbose` or `onedrive --monitor --verbose` ### CLI Option: --with-editing-perms _**Description:**_ This CLI option enables the creation of a writable shareable file link that can be provided to users to access the file that is stored on Microsoft OneDrive. This option can only be used in conjunction with `--create-share-link` _**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt' --with-editing-perms` > [!IMPORTANT] > Placement of `--with-editing-perms` is critical. It *must* be placed after the file path as per the example above. ## Deprecated Configuration File and CLI Options The following configuration options are no longer supported: ### force_http_2 _**Description:**_ Force the use of HTTP/2 for all operations where applicable _**Deprecated Config Example:**_ `force_http_2 = "true"` _**Deprecated CLI Option:**_ `--force-http-2` _**Reason for depreciation:**_ HTTP/2 will be used by default where possible, when the OneDrive API platform does not downgrade the connection to HTTP/1.1, thus this configuration option is no longer required. ### min_notify_changes _**Description:**_ Minimum number of pending incoming changes necessary to trigger a GUI desktop notification. _**Deprecated Config Example:**_ `min_notify_changes = "50"` _**Deprecated CLI Option:**_ `--min-notify-changes '50'` _**Reason for depreciation:**_ Application has been totally re-written. When this item was introduced, it was done so to reduce spamming of all events to the GUI desktop. ### CLI Option: --synchronize _**Description:**_ Perform a synchronisation with Microsoft OneDrive _**Deprecated CLI Option:**_ `--synchronize` _**Reason for depreciation:**_ `--synchronize` has been deprecated in favour of `--sync` or `-s` onedrive-2.5.9/docs/application-security.md000066400000000000000000000150661510276244300210000ustar00rootroot00000000000000# OneDrive Client for Linux Application Security This document details the following information: * Why is this application an 'unverified publisher'? * Application Security and Permission Scopes * How to change Permission Scopes * How to review your existing application access consent ## Why is this application an 'unverified publisher'? Publisher Verification, as per the Microsoft [process](https://learn.microsoft.com/en-us/azure/active-directory/develop/publisher-verification-overview) has actually been configured, and, actually has been verified! ### Verified Publisher Configuration Evidence As per the image below, the Azure portal shows that the 'Publisher Domain' has actually been verified: ![confirmed_verified_publisher](./images/confirmed_verified_publisher.jpg) * The 'Publisher Domain' is: https://abraunegg.github.io/ * The required 'Microsoft Identity Association' is: https://abraunegg.github.io/.well-known/microsoft-identity-association.json ## Application Security and Permission Scopes There are 2 main components regarding security for this application: * Azure Application Permissions * User Authentication Permissions Keeping this in mind, security options should follow the security principal of 'least privilege': > The principle that a security architecture should be designed so that each entity > is granted the minimum system resources and authorizations that the entity needs > to perform its function. Reference: [https://csrc.nist.gov/glossary/term/least_privilege](https://csrc.nist.gov/glossary/term/least_privilege) As such, the following API permissions are used by default: ### Default Azure Application Permissions | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.Read | Delegated | Have read-only access to user files | No | | Files.Read.All | Delegated | Have read-only access to all files user can access | No | | Sites.Read.All | Delegated | Have read-only access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | ![default_authentication_scopes](./images/default_authentication_scopes.jpg) ### Default User Authentication Permissions When a user authenticates with Microsoft OneDrive, additional account permissions are provided by service to give the user specific access to their data. These are delegated permissions provided by the platform: | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.ReadWrite | Delegated | Have full access to user files | No | | Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | | Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | When these delegated API permissions are combined, these provide the effective authentication scope for the OneDrive Client for Linux to access your data. The resulting effective 'default' permissions will be: | API / Permissions name | Type | Description | Admin consent required | |---|---|---|---| | Files.ReadWrite | Delegated | Have full access to user files | No | | Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | | Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | | offline_access | Delegated | Maintain access to data you have given it access to | No | These 'default' permissions will allow the OneDrive Client for Linux to read, write and delete data associated with your OneDrive Account. ## How are the Authentication Scopes used? When using the OneDrive Client for Linux, the above authentication scopes will be presented to the Microsoft Authentication Service (login.microsoftonline.com), where the service will validate the request and provide an applicable token to access Microsoft OneDrive with. This can be illustrated as the following: ![Linux Authentication to Microsoft OneDrive](./puml/onedrive_linux_authentication.png) This is similar to the Microsoft Windows OneDrive Client: ![Windows Authentication to Microsoft OneDrive](./puml/onedrive_windows_authentication.png) In a business setting, IT staff who need to authorise the use of the OneDrive Client for Linux in their environment can be assured of its safety. The primary concern for IT staff should be securing the device running the OneDrive Client for Linux. Unlike in a corporate environment where Windows devices are secured through Active Directory and Group Policy Objects (GPOs) to protect corporate data on the device, it is beyond the responsibility of this client to manage security on Linux devices. ## Configuring read-only access to your OneDrive data In some situations, it may be desirable to configure the OneDrive Client for Linux totally in read-only operation. To change the application to 'read-only' access, add the following to your configuration file: ```text read_only_auth_scope = "true" ``` This will change the user authentication scope request to use read-only access. > [!IMPORTANT] > When changing this value, you *must* re-authenticate the client using the `--reauth` option to utilise the change in authentication scopes. When using read-only authentication scopes, the uploading of any data or local change to OneDrive will fail with the following error: ``` 2022-Aug-06 13:16:45.3349625 ERROR: Microsoft OneDrive API returned an error with the following message: 2022-Aug-06 13:16:45.3351661 Error Message: HTTP request returned status code 403 (Forbidden) 2022-Aug-06 13:16:45.3352467 Error Reason: Access denied 2022-Aug-06 13:16:45.3352838 Error Timestamp: 2022-06-12T13:16:45 2022-Aug-06 13:16:45.3353171 API Request ID: ``` As such, it is also advisable for you to add the following to your configuration file so that 'uploads' are prevented: ```text download_only = "true" ``` > [!IMPORTANT] > Additionally when using 'read_only_auth_scope' you also will need to remove your existing application access consent otherwise old authentication consent will be valid and will be used. This will mean the application will technically have the consent to upload data. See below on how to remove your prior application consent. ## Reviewing your existing application access consent To review your existing application access consent, you need to access the following URL: https://account.live.com/consent/Manage From here, you are able to review what applications have been given what access to your data, and remove application access as required. onedrive-2.5.9/docs/build-rpm-howto.md000066400000000000000000001625621510276244300176650ustar00rootroot00000000000000# RPM Package Build Process The instructions below have been tested on the following systems: * CentOS Stream release 9 These instructions should also be applicable for RedHat & Fedora platforms, or any other RedHat RPM based distribution. ## Prepare Package Development Environment ### Install Development Dependencies Install the following dependencies on your build system: ```text sudo yum groupinstall -y 'Development Tools' sudo yum install -y libcurl-devel sudo yum install -y sqlite-devel sudo yum install -y libnotify-devel sudo yum install -y dbus-devel sudo yum install -y wget mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} ``` ### Install DMD Compiler for Linux Install the latest DMD Compiler for Linux from https://dlang.org/download.html using the Fedora/CentOS x86_64 link. Illustrated below is the installation using the minimum supported compiler. You should always install the latest version of the compiler for your platform when manually building an RPM. ```text sudo yum install -y https://downloads.dlang.org/releases/2.x/2.091.1/dmd-2.091.1-0.fedora.x86_64.rpm ``` ## Build RPM from spec file using the DMD Compiler Build the RPM from the provided spec file: ```text wget https://github.com/abraunegg/onedrive/archive/refs/tags/v2.5.6.tar.gz -O ~/rpmbuild/SOURCES/v2.5.6.tar.gz wget https://raw.githubusercontent.com/abraunegg/onedrive/master/contrib/spec/onedrive.spec.in -O ~/rpmbuild/SPECS/onedrive.spec rpmbuild -ba ~/rpmbuild/SPECS/onedrive.spec --define 'dcompiler dmd' ``` ### RPM Build Example Results Below are example output results of building, installing and running the RPM package on the respective platforms: #### CentOS Stream release 9 RPM Build Process ```text setting SOURCE_DATE_EPOCH=1749081600 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.ZhVuOR + umask 022 + cd /home/alex/rpmbuild/BUILD + cd /home/alex/rpmbuild/BUILD + rm -rf onedrive-2.5.6 + /usr/bin/tar -xof - + /usr/bin/gzip -dc /home/alex/rpmbuild/SOURCES/v2.5.6.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd onedrive-2.5.6 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.b9tkxJ + umask 022 + cd /home/alex/rpmbuild/BUILD + cd onedrive-2.5.6 + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib64/gfortran/modules' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib64/gfortran/modules' + export FCFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + '[' '-flto=auto -ffat-lto-objectsx' '!=' x ']' ++ find . -type f -name configure -print + for file in $(find . -type f -name configure -print) + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\) = /__attribute__ ((used)) char (*f) () = /g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\);/__attribute__ ((used)) char (*f) ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \$2 \(\);/__attribute__ ((used)) char \$2 ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed --in-place=.backup '1{$!N;$!N};$!N;s/int x = 1;\nint y = 0;\nint z;\nint nan;/volatile int x = 1; volatile int y = 0; volatile int z, nan;/;P;D' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed --in-place=.backup 's#^lt_cv_sys_global_symbol_to_cdecl=.*#lt_cv_sys_global_symbol_to_cdecl="sed -n -e '\''s/^T .* \\(.*\\)$/extern int \\1();/p'\'' -e '\''s/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\''"#' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + '[' 1 = 1 ']' +++ dirname ./configure ++ find . -name config.guess -o -name config.sub + '[' 1 = 1 ']' + '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']' ++ find . -name ltmain.sh + ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-debug --enable-notifications configure: WARNING: unrecognized options: --disable-dependency-tracking checking for a BSD-compatible install... /usr/bin/install -c checking for x86_64-redhat-linux-gnu-pkg-config... /usr/bin/x86_64-redhat-linux-gnu-pkg-config checking pkg-config is at least version 0.9.0... yes checking for dmd... dmd checking version of D compiler... 2.091.1 checking for curl... yes checking for sqlite... yes checking whether to enable dbus support... yes (on Linux) checking for dbus... yes checking for notify... yes configure: creating ./config.status config.status: creating Makefile config.status: creating contrib/pacman/PKGBUILD config.status: creating contrib/spec/onedrive.spec config.status: creating onedrive.1 config.status: creating contrib/systemd/onedrive.service config.status: creating contrib/systemd/onedrive@.service configure: WARNING: unrecognized options: --disable-dependency-tracking + make if [ -f .git/HEAD ] ; then \ git describe --tags > version ; \ else \ echo v2.5.6 > version ; \ fi dmd -J. -version=NoPragma -version=NoGdk -version=Notifications -w -g -debug -gs src/main.d src/config.d src/log.d src/util.d src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d src/xattr.d src/intune.d src/notifications/notify.d src/notifications/dnotify.d -L-lcurl -L-lsqlite3 -L-ldbus-1 -L-lnotify -L-lgdk_pixbuf-2.0 -L-lgio-2.0 -L-lgobject-2.0 -L-lglib-2.0 -L-ldl -ofonedrive + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.Pwy2mS + umask 022 + cd /home/alex/rpmbuild/BUILD + '[' /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 '!=' / ']' + rm -rf /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 ++ dirname /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 + mkdir -p /home/alex/rpmbuild/BUILDROOT + mkdir /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 + cd onedrive-2.5.6 + /usr/bin/make install DESTDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 'INSTALL=/usr/bin/install -p' PREFIX=/home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/bin /usr/bin/install -p onedrive /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/bin/onedrive mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/man/man1 /usr/bin/install -p -m 0644 onedrive.1 /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/man/man1/onedrive.1 mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/etc/logrotate.d /usr/bin/install -p -m 0644 contrib/logrotate/onedrive.logrotate /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/etc/logrotate.d/onedrive mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive for file in readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md; do \ /usr/bin/install -p -m 0644 $file /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive; \ done mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/user mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system /usr/bin/install -p -m 0644 contrib/systemd/onedrive@.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system /usr/bin/install -p -m 0644 contrib/systemd/onedrive.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system + install -D -m 0644 contrib/systemd/onedrive.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system/onedrive.service + install -D -m 0644 contrib/systemd/onedrive@.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/lib/systemd/system/onedrive@.service + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 + /usr/lib/rpm/brp-python-hardlink + /usr/lib/rpm/redhat/brp-mangle-shebangs Processing files: onedrive-2.5.6-1.el9.x86_64 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.2YAn9k + umask 022 + cd /home/alex/rpmbuild/BUILD + cd onedrive-2.5.6 + DOCDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + export LC_ALL=C + LC_ALL=C + export DOCDIR + /usr/bin/mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr readme.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr LICENSE /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr changelog.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/build-rpm-howto.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/known-issues.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/webhooks.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + cp -pr config /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64/usr/share/doc/onedrive + RPM_EC=0 ++ jobs -p + exit 0 Provides: config(onedrive) = 2.5.6-1.el9 onedrive = 2.5.6-1.el9 onedrive(x86-64) = 2.5.6-1.el9 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd Requires: ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.32)(64bit) libc.so.6(GLIBC_2.33)(64bit) libc.so.6(GLIBC_2.34)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.6)(64bit) libc.so.6(GLIBC_2.7)(64bit) libc.so.6(GLIBC_2.8)(64bit) libc.so.6(GLIBC_2.9)(64bit) libcurl.so.4()(64bit) libdbus-1.so.3()(64bit) libdbus-1.so.3(LIBDBUS_1_3)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libgdk_pixbuf-2.0.so.0()(64bit) libgio-2.0.so.0()(64bit) libglib-2.0.so.0()(64bit) libgobject-2.0.so.0()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnotify.so.4()(64bit) libsqlite3.so.0()(64bit) rtld(GNU_HASH) Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/alex/rpmbuild/BUILDROOT/onedrive-2.5.6-1.el9.x86_64 Wrote: /home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm Wrote: /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.5.6-1.el9.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tGKXPN + umask 022 + cd /home/alex/rpmbuild/BUILD + cd onedrive-2.5.6 + RPM_EC=0 ++ jobs -p + exit 0 ``` #### CentOS Stream release 9 RPM Package Install Process ```text [alex@centos9stream ~]$ sudo yum -y install /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.5.6-1.el9.x86_64.rpm [sudo] password for alex: Last metadata expiration check: 1:21:53 ago on Tue 10 Jun 2025 06:41:27. Dependencies resolved. ========================================================================================================================================================================================== Package Architecture Version Repository Size ========================================================================================================================================================================================== Installing: onedrive x86_64 2.5.6-1.el9 @commandline 1.6 M Transaction Summary ========================================================================================================================================================================================== Install 1 Package Total size: 1.6 M Installed size: 8.3 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : onedrive-2.5.6-1.el9.x86_64 1/1 Running scriptlet: onedrive-2.5.6-1.el9.x86_64 1/1 Verifying : onedrive-2.5.6-1.el9.x86_64 1/1 Installed: onedrive-2.5.6-1.el9.x86_64 Complete! [alex@centos9stream ~]$ [alex@centos9stream ~]$ onedrive --version onedrive v2.5.6 [alex@centos9stream ~]$ onedrive --display-config WARNING: Configured 'threads = 8' exceeds available CPU cores (1). Capping to 'threads' to 1. Application version = onedrive v2.5.6 Compiled with = DMD 2091 Curl version = libcurl/7.76.1 OpenSSL/3.5.0 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.1 (+libidn2/2.3.0) libssh/0.10.4/openssl/zlib nghttp2/1.43.0 User Application Config path = /home/alex/.config/onedrive System Application Config path = /etc/onedrive Applicable Application 'config' location = /home/alex/.config/onedrive/config Configuration file found in config location = false - using application defaults Applicable 'sync_list' location = /home/alex/.config/onedrive/sync_list Applicable 'items.sqlite3' location = /home/alex/.config/onedrive/items.sqlite3 Config option 'drive_id' = Config option 'sync_dir' = ~/OneDrive Config option 'use_intune_sso' = false Config option 'use_device_auth' = false Config option 'enable_logging' = false Config option 'log_dir' = /var/log/onedrive Config option 'disable_notifications' = false Config option 'skip_dir' = Config option 'skip_dir_strict_match' = false Config option 'skip_file' = ~*|.~*|*.tmp|*.swp|*.partial Config option 'skip_dotfiles' = false Config option 'skip_symlinks' = false Config option 'monitor_interval' = 300 Config option 'monitor_log_frequency' = 12 Config option 'monitor_fullscan_frequency' = 12 Config option 'read_only_auth_scope' = false Config option 'dry_run' = false Config option 'upload_only' = false Config option 'download_only' = false Config option 'local_first' = false Config option 'check_nosync' = false Config option 'check_nomount' = false Config option 'resync' = false Config option 'resync_auth' = false Config option 'cleanup_local_files' = false Config option 'disable_permission_set' = false Config option 'transfer_order' = default Config option 'classify_as_big_delete' = 1000 Config option 'disable_upload_validation' = false Config option 'disable_download_validation' = false Config option 'bypass_data_preservation' = false Config option 'no_remote_delete' = false Config option 'remove_source_files' = false Config option 'sync_dir_permissions' = 700 Config option 'sync_file_permissions' = 600 Config option 'space_reservation' = 52428800 Config option 'permanent_delete' = false Config option 'write_xattr_data' = false Config option 'application_id' = d50ca740-c83f-4d1b-b616-12c519384f0c Config option 'azure_ad_endpoint' = Config option 'azure_tenant_id' = Config option 'user_agent' = ISV|abraunegg|OneDrive Client for Linux/v2.5.6 Config option 'force_http_11' = false Config option 'debug_https' = false Config option 'rate_limit' = 0 Config option 'operation_timeout' = 3600 Config option 'dns_timeout' = 60 Config option 'connect_timeout' = 10 Config option 'data_timeout' = 60 Config option 'ip_protocol_version' = 0 Config option 'threads' = 1 Config option 'max_curl_idle' = 120 Environment var 'XDG_RUNTIME_DIR' = true Environment var 'DBUS_SESSION_BUS_ADDRESS' = true Config option 'notify_file_actions' = false Config option 'use_recycle_bin' = false Config option 'recycle_bin_path' = /home/alex/.local/share/Trash/ Selective sync 'sync_list' configured = false Config option 'sync_business_shared_items' = false Config option 'webhook_enabled' = false ``` ## Build RPM from SRPM using mock ### Install mock on your platform Use the following installation instructions to install 'mock' on your platform: ```text sudo yum install epel-release sudo yum install mock sudo yum install -y wget mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} ``` ### Configure mock Add your user to the mock group: ```text sudo usermod -a -G mock $USER ``` > [!NOTE] > Log out and back in for the group membership changes to take effect. ### Build a Source RPM (SRPM) file Build the SRPM from the provided spec file: ```text wget https://github.com/abraunegg/onedrive/archive/refs/tags/v2.5.6.tar.gz -O ~/rpmbuild/SOURCES/v2.5.6.tar.gz wget https://raw.githubusercontent.com/abraunegg/onedrive/master/contrib/spec/onedrive.spec.in -O ~/rpmbuild/SPECS/onedrive.spec rpmbuild -bs ~/rpmbuild/SPECS/onedrive.spec ``` > [!NOTE] > This will build a SRPM to the following location: `/home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm` > > This SRPM will be used in the examples below: ### Build Fedora 42 RPM using mock ```text [alex@centos9stream ~]$ mock -r fedora-42-x86_64 /home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm INFO: mock.py version 6.2 starting (python version = 3.9.21, NVR = mock-6.2-1.el9), args: /usr/libexec/mock/mock -r fedora-42-x86_64 /home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm Start(bootstrap): init plugins INFO: selinux enabled Finish(bootstrap): init plugins Start: init plugins INFO: selinux enabled Finish: init plugins INFO: Signal handler active Start: run INFO: Start(/home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm) Config(fedora-42-x86_64) Start: clean chroot Finish: clean chroot Mock Version: 6.2 INFO: Mock Version: 6.2 Start(bootstrap): chroot init INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata INFO: Package manager dnf5 detected and used (fallback) Finish(bootstrap): chroot init Start: chroot init INFO: calling preinit hooks INFO: enabled root cache Start: unpacking root cache Finish: unpacking root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Package manager dnf5 detected and used (direct choice) INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-4.20.1-1.fc42.x86_64 rpm-sequoia-1.7.0-5.fc42.x86_64 dnf5-5.2.13.1-1.fc42.x86_64 dnf5-plugins-5.2.13.1-1.fc42.x86_64 Start: dnf5 update Updating and loading repositories: updates 100% | 5.5 KiB/s | 5.6 KiB | 00m01s fedora 100% | 5.8 KiB/s | 4.2 KiB | 00m01s Repositories loaded. Nothing to do. Finish: dnf5 update Finish: chroot init Start: build phase for onedrive-2.5.6-1.el9.src.rpm Start: build setup for onedrive-2.5.6-1.el9.src.rpm Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1749081600 Wrote: /builddir/build/SRPMS/onedrive-2.5.6-1.fc42.src.rpm Updating and loading repositories: updates 100% | 16.5 KiB/s | 5.6 KiB | 00m00s fedora 100% | 8.3 KiB/s | 4.2 KiB | 00m01s Repositories loaded. Package Arch Version Repository Size Installing: dbus-devel x86_64 1:1.16.0-3.fc42 fedora 131.7 KiB ldc x86_64 1:1.40.0-3.fc42 fedora 27.3 MiB libcurl-devel x86_64 8.11.1-4.fc42 fedora 1.3 MiB sqlite-devel x86_64 3.47.2-2.fc42 fedora 673.4 KiB Installing dependencies: annobin-docs noarch 12.94-1.fc42 updates 98.9 KiB annobin-plugin-gcc x86_64 12.94-1.fc42 updates 993.5 KiB brotli x86_64 1.1.0-6.fc42 fedora 31.6 KiB brotli-devel x86_64 1.1.0-6.fc42 fedora 65.6 KiB cmake-filesystem x86_64 3.31.6-2.fc42 fedora 0.0 B cpp x86_64 15.1.1-2.fc42 updates 37.9 MiB dbus-libs x86_64 1:1.16.0-3.fc42 fedora 349.5 KiB gcc x86_64 15.1.1-2.fc42 updates 111.1 MiB gcc-plugin-annobin x86_64 15.1.1-2.fc42 updates 57.1 KiB glibc-devel x86_64 2.41-5.fc42 updates 2.3 MiB kernel-headers x86_64 6.14.3-300.fc42 updates 6.5 MiB keyutils-libs-devel x86_64 1.6.3-5.fc42 fedora 48.2 KiB krb5-devel x86_64 1.21.3-6.fc42 updates 705.9 KiB ldc-libs x86_64 1:1.40.0-3.fc42 fedora 11.6 MiB libcom_err-devel x86_64 1.47.2-3.fc42 fedora 16.7 KiB libedit x86_64 3.1-55.20250104cvs.fc42 fedora 244.1 KiB libidn2-devel x86_64 2.3.8-1.fc42 fedora 149.1 KiB libkadm5 x86_64 1.21.3-6.fc42 updates 213.9 KiB libmpc x86_64 1.3.1-7.fc42 fedora 164.5 KiB libnghttp2-devel x86_64 1.64.0-3.fc42 fedora 295.4 KiB libpsl-devel x86_64 0.21.5-5.fc42 fedora 110.3 KiB libselinux-devel x86_64 3.8-2.fc42 updates 126.8 KiB libsepol-devel x86_64 3.8-1.fc42 fedora 120.8 KiB libssh-devel x86_64 0.11.1-4.fc42 fedora 178.0 KiB libverto-devel x86_64 0.3.2-10.fc42 fedora 25.7 KiB libxcrypt-devel x86_64 4.4.38-7.fc42 updates 30.8 KiB llvm19-filesystem x86_64 19.1.7-13.fc42 updates 0.0 B llvm19-libs x86_64 19.1.7-13.fc42 updates 124.0 MiB make x86_64 1:4.4.1-10.fc42 fedora 1.8 MiB openssl-devel x86_64 1:3.2.4-3.fc42 fedora 4.3 MiB pcre2-devel x86_64 10.45-1.fc42 fedora 2.1 MiB pcre2-utf16 x86_64 10.45-1.fc42 fedora 626.3 KiB pcre2-utf32 x86_64 10.45-1.fc42 fedora 598.2 KiB publicsuffix-list noarch 20250116-1.fc42 fedora 329.8 KiB sqlite x86_64 3.47.2-2.fc42 fedora 1.8 MiB systemd-devel x86_64 257.6-1.fc42 updates 612.3 KiB systemd-rpm-macros noarch 257.6-1.fc42 updates 10.7 KiB xml-common noarch 0.6.3-66.fc42 fedora 78.4 KiB zlib-ng-compat-devel x86_64 2.2.4-3.fc42 fedora 107.0 KiB Transaction Summary: Installing: 43 packages Total size of inbound packages is 103 MiB. Need to download 0 B. After this operation, 339 MiB extra will be used (install 339 MiB, remove 0 B). [ 1/43] ldc-1:1.40.0-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 2/43] dbus-devel-1:1.16.0-3.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 3/43] libcurl-devel-0:8.11.1-4.fc42.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 4/43] sqlite-devel-0:3.47.2-2.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 5/43] ldc-libs-1:1.40.0-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 6/43] cmake-filesystem-0:3.31.6-2.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 7/43] dbus-libs-1:1.16.0-3.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 8/43] xml-common-0:0.6.3-66.fc42.noar 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 9/43] sqlite-0:3.47.2-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [10/43] krb5-devel-0:1.21.3-6.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [11/43] libkadm5-0:1.21.3-6.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [12/43] brotli-devel-0:1.1.0-6.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [13/43] brotli-0:1.1.0-6.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [14/43] libidn2-devel-0:2.3.8-1.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [15/43] libnghttp2-devel-0:1.64.0-3.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [16/43] libpsl-devel-0:0.21.5-5.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [17/43] publicsuffix-list-0:20250116-1. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [18/43] libssh-devel-0:0.11.1-4.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [19/43] openssl-devel-1:3.2.4-3.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [20/43] zlib-ng-compat-devel-0:2.2.4-3. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [21/43] gcc-0:15.1.1-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [22/43] cpp-0:15.1.1-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [23/43] libmpc-0:1.3.1-7.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [24/43] make-1:4.4.1-10.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [25/43] llvm19-libs-0:19.1.7-13.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [26/43] llvm19-filesystem-0:19.1.7-13.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [27/43] libedit-0:3.1-55.20250104cvs.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [28/43] systemd-devel-0:257.6-1.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [29/43] libselinux-devel-0:3.8-2.fc42.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [30/43] libsepol-devel-0:3.8-1.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [31/43] keyutils-libs-devel-0:1.6.3-5.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [32/43] libcom_err-devel-0:1.47.2-3.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [33/43] libverto-devel-0:0.3.2-10.fc42. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [34/43] glibc-devel-0:2.41-5.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [35/43] pcre2-devel-0:10.45-1.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [36/43] pcre2-utf16-0:10.45-1.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [37/43] pcre2-utf32-0:10.45-1.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [38/43] kernel-headers-0:6.14.3-300.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [39/43] libxcrypt-devel-0:4.4.38-7.fc42 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [40/43] gcc-plugin-annobin-0:15.1.1-2.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [41/43] systemd-rpm-macros-0:257.6-1.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [42/43] annobin-plugin-gcc-0:12.94-1.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [43/43] annobin-docs-0:12.94-1.fc42.noa 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded -------------------------------------------------------------------------------- [43/43] Total 100% | 0.0 B/s | 0.0 B | 00m00s Running transaction [ 1/45] Verify package files 100% | 29.0 B/s | 43.0 B | 00m01s [ 2/45] Prepare transaction 100% | 154.0 B/s | 43.0 B | 00m00s [ 3/45] Installing cmake-filesystem-0:3 100% | 583.8 KiB/s | 7.6 KiB | 00m00s [ 4/45] Installing libmpc-0:1.3.1-7.fc4 100% | 23.2 MiB/s | 166.1 KiB | 00m00s [ 5/45] Installing cpp-0:15.1.1-2.fc42. 100% | 120.6 MiB/s | 37.9 MiB | 00m00s [ 6/45] Installing libssh-devel-0:0.11. 100% | 19.6 MiB/s | 180.5 KiB | 00m00s [ 7/45] Installing zlib-ng-compat-devel 100% | 15.1 MiB/s | 108.5 KiB | 00m00s [ 8/45] Installing annobin-docs-0:12.94 100% | 10.9 MiB/s | 100.0 KiB | 00m00s [ 9/45] Installing kernel-headers-0:6.1 100% | 36.6 MiB/s | 6.7 MiB | 00m00s [10/45] Installing libxcrypt-devel-0:4. 100% | 2.9 MiB/s | 33.1 KiB | 00m00s [11/45] Installing glibc-devel-0:2.41-5 100% | 15.3 MiB/s | 2.3 MiB | 00m00s [12/45] Installing pcre2-utf32-0:10.45- 100% | 18.3 MiB/s | 599.1 KiB | 00m00s [13/45] Installing pcre2-utf16-0:10.45- 100% | 30.6 MiB/s | 627.1 KiB | 00m00s [14/45] Installing pcre2-devel-0:10.45- 100% | 33.8 MiB/s | 2.1 MiB | 00m00s [15/45] Installing libverto-devel-0:0.3 100% | 5.1 MiB/s | 26.4 KiB | 00m00s [16/45] Installing libcom_err-devel-0:1 100% | 761.4 KiB/s | 18.3 KiB | 00m00s [17/45] Installing keyutils-libs-devel- 100% | 5.4 MiB/s | 55.2 KiB | 00m00s [18/45] Installing libsepol-devel-0:3.8 100% | 9.6 MiB/s | 128.3 KiB | 00m00s [19/45] Installing libselinux-devel-0:3 100% | 4.2 MiB/s | 161.6 KiB | 00m00s [20/45] Installing systemd-devel-0:257. 100% | 6.2 MiB/s | 744.1 KiB | 00m00s [21/45] Installing libedit-0:3.1-55.202 100% | 30.0 MiB/s | 245.8 KiB | 00m00s [22/45] Installing llvm19-filesystem-0: 100% | 264.6 KiB/s | 1.1 KiB | 00m00s [23/45] Installing llvm19-libs-0:19.1.7 100% | 137.8 MiB/s | 124.0 MiB | 00m01s [24/45] Installing make-1:4.4.1-10.fc42 100% | 37.5 MiB/s | 1.8 MiB | 00m00s [25/45] Installing gcc-0:15.1.1-2.fc42. 100% | 131.7 MiB/s | 111.2 MiB | 00m01s [26/45] Installing openssl-devel-1:3.2. 100% | 9.0 MiB/s | 5.2 MiB | 00m01s [27/45] Installing publicsuffix-list-0: 100% | 53.8 MiB/s | 330.8 KiB | 00m00s [28/45] Installing libpsl-devel-0:0.21. 100% | 13.9 MiB/s | 113.6 KiB | 00m00s [29/45] Installing libnghttp2-devel-0:1 100% | 48.3 MiB/s | 296.5 KiB | 00m00s [30/45] Installing libidn2-devel-0:2.3. 100% | 11.8 MiB/s | 156.7 KiB | 00m00s [31/45] Installing brotli-0:1.1.0-6.fc4 100% | 1.3 MiB/s | 32.3 KiB | 00m00s [32/45] Installing brotli-devel-0:1.1.0 100% | 8.3 MiB/s | 68.0 KiB | 00m00s [33/45] Installing libkadm5-0:1.21.3-6. 100% | 26.4 MiB/s | 215.9 KiB | 00m00s [34/45] Installing krb5-devel-0:1.21.3- 100% | 18.4 MiB/s | 715.2 KiB | 00m00s [35/45] Installing sqlite-0:3.47.2-2.fc 100% | 41.5 MiB/s | 1.8 MiB | 00m00s [36/45] Installing xml-common-0:0.6.3-6 100% | 9.9 MiB/s | 81.1 KiB | 00m00s [37/45] Installing dbus-libs-1:1.16.0-3 100% | 42.8 MiB/s | 350.6 KiB | 00m00s [38/45] Installing ldc-libs-1:1.40.0-3. 100% | 85.7 MiB/s | 11.6 MiB | 00m00s [39/45] Installing ldc-1:1.40.0-3.fc42. 100% | 83.0 MiB/s | 27.5 MiB | 00m00s [40/45] Installing dbus-devel-1:1.16.0- 100% | 13.3 MiB/s | 136.5 KiB | 00m00s [41/45] Installing sqlite-devel-0:3.47. 100% | 54.9 MiB/s | 674.1 KiB | 00m00s [42/45] Installing libcurl-devel-0:8.11 100% | 3.2 MiB/s | 1.4 MiB | 00m00s [43/45] Installing gcc-plugin-annobin-0 100% | 1.1 MiB/s | 58.8 KiB | 00m00s [44/45] Installing annobin-plugin-gcc-0 100% | 14.1 MiB/s | 995.1 KiB | 00m00s [45/45] Installing systemd-rpm-macros-0 100% | 2.9 KiB/s | 11.3 KiB | 00m04s Complete! Finish: build setup for onedrive-2.5.6-1.el9.src.rpm Start: rpmbuild onedrive-2.5.6-1.el9.src.rpm Start: Outputting list of installed packages Finish: Outputting list of installed packages Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1749081600 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.ApSQdT Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.u4DE7z + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + cd /builddir/build/BUILD/onedrive-2.5.6-build + rm -rf onedrive-2.5.6 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/v2.5.6.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd onedrive-2.5.6 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.XgQE0g + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd onedrive-2.5.6 + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + '[' '-flto=auto -ffat-lto-objectsx' '!=' x ']' ++ find . -type f -name configure -print + for file in $(find . -type f -name configure -print) + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\) = /__attribute__ ((used)) char (*f) () = /g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \(\*f\) \(\);/__attribute__ ((used)) char (*f) ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup 's/^char \$2 \(\);/__attribute__ ((used)) char \$2 ();/g' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed --in-place=.backup '1{$!N;$!N};$!N;s/int x = 1;\nint y = 0;\nint z;\nint nan;/volatile int x = 1; volatile int y = 0; volatile int z, nan;/;P;D' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + /usr/bin/sed -r --in-place=.backup '/lt_cv_sys_global_symbol_to_cdecl=/s#(".*"|'\''.*'\'')#"sed -n -e '\''s/^T .* \\(.*\\)$/extern int \\1();/p'\'' -e '\''s/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\''"#' ./configure + diff -u ./configure.backup ./configure + mv ./configure.backup ./configure + '[' 1 = 1 ']' +++ dirname ./configure ++ find . -name config.guess -o -name config.sub + '[' 1 = 1 ']' + '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']' ++ find . -name ltmain.sh ++ grep -q runstatedir=DIR ./configure + ./configure --build=x86_64-redhat-linux --host=x86_64-redhat-linux --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/bin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-debug --enable-notifications configure: WARNING: unrecognized options: --disable-dependency-tracking checking for a BSD-compatible install... /usr/bin/install -c checking for x86_64-redhat-linux-pkg-config... no checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for dmd... no checking for ldmd2... ldmd2 checking version of D compiler... 1.40.0 checking for curl... yes checking for sqlite... yes checking whether to enable dbus support... yes (on Linux) checking for dbus... yes checking for notify... no configure: creating ./config.status config.status: creating Makefile config.status: creating contrib/pacman/PKGBUILD config.status: creating contrib/spec/onedrive.spec config.status: creating onedrive.1 config.status: creating contrib/systemd/onedrive.service config.status: creating contrib/systemd/onedrive@.service configure: WARNING: unrecognized options: --disable-dependency-tracking + make if [ -f .git/HEAD ] ; then \ git describe --tags > version ; \ else \ echo v2.5.6 > version ; \ fi ldmd2 -J. -w -g -debug -gs src/main.d src/config.d src/log.d src/util.d src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d src/xattr.d src/intune.d -L-lcurl -L-lsqlite3 -L-L/usr/lib64/pkgconfig/../../lib64 -L-ldbus-1 -L-ldl -ofonedrive + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.jDHAO4 + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + '[' /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT ++ dirname /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT + mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build + mkdir /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd onedrive-2.5.6 + /usr/bin/make install DESTDIR=/builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT 'INSTALL=/usr/bin/install -p' PREFIX=/builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/bin /usr/bin/install -p onedrive /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/bin/onedrive mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/man/man1 /usr/bin/install -p -m 0644 onedrive.1 /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/man/man1/onedrive.1 mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/etc/logrotate.d /usr/bin/install -p -m 0644 contrib/logrotate/onedrive.logrotate /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/etc/logrotate.d/onedrive mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive for file in readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md; do \ /usr/bin/install -p -m 0644 $file /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive; \ done + install -D -m 0644 contrib/systemd/onedrive@.service /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/lib/systemd/system/onedrive@.service + install -D -m 0644 contrib/systemd/onedrive.service /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/lib/systemd/user/onedrive.service + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs + /usr/lib/rpm/brp-remove-la-files + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j1 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-determinism --brp -j1 /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT Scanned 14 directories and 26 files, processed 1 inodes, 0 modified (0 replaced + 0 rewritten), 0 unsupported format, 0 errors Reading /builddir/build/BUILD/onedrive-2.5.6-build/SPECPARTS/rpm-debuginfo.specpart Processing files: onedrive-2.5.6-1.fc42.x86_64 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.2lS8Ty + umask 022 + cd /builddir/build/BUILD/onedrive-2.5.6-build + cd onedrive-2.5.6 + DOCDIR=/builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/readme.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/LICENSE /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/changelog.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/advanced-usage.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/application-config-options.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/application-security.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/build-rpm-howto.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/business-shared-items.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/client-architecture.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/contributing.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/docker.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/install.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/known-issues.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/national-cloud-deployments.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/podman.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/privacy-policy.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/sharepoint-libraries.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/terms-of-service.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/ubuntu-package-install.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/usage.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/docs/webhooks.md /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + cp -pr /builddir/build/BUILD/onedrive-2.5.6-build/onedrive-2.5.6/config /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT/usr/share/doc/onedrive + RPM_EC=0 ++ jobs -p + exit 0 Provides: config(onedrive) = 2.5.6-1.fc42 onedrive = 2.5.6-1.fc42 onedrive(x86-64) = 2.5.6-1.fc42 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd Requires: ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.33)(64bit) libc.so.6(GLIBC_2.34)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libc.so.6(GLIBC_2.8)(64bit) libcurl.so.4()(64bit) libdbus-1.so.3()(64bit) libdbus-1.so.3(LIBDBUS_1_3)(64bit) libdruntime-ldc-shared.so.110()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libphobos2-ldc-shared.so.110()(64bit) libsqlite3.so.0()(64bit) rtld(GNU_HASH) Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILD/onedrive-2.5.6-build/BUILDROOT Wrote: /builddir/build/RPMS/onedrive-2.5.6-1.fc42.x86_64.rpm Finish: rpmbuild onedrive-2.5.6-1.el9.src.rpm Finish: build phase for onedrive-2.5.6-1.el9.src.rpm INFO: Done(/home/alex/rpmbuild/SRPMS/onedrive-2.5.6-1.el9.src.rpm) Config(fedora-42-x86_64) 0 minutes 54 seconds INFO: Results and/or logs in: /var/lib/mock/fedora-42-x86_64/result Finish: run ``` onedrive-2.5.9/docs/business-shared-items.md000066400000000000000000000420331510276244300210400ustar00rootroot00000000000000# How to sync OneDrive Business Shared Items > [!CAUTION] > Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. > [!CAUTION] > This feature has been 100% re-written from v2.5.0 onwards and is not backwards compatible with v2.4.x client versions. If enabling this feature, you must upgrade to v2.5.0 or above on all systems that are running this client. > > An additional pre-requisite before using this capability in v2.5.0 and above is for you to revert any v2.4.x Shared Business Folder configuration you may be currently using, including, but not limited to: > * Removing `sync_business_shared_folders = "true|false"` from your 'config' file > * Removing the 'business_shared_folders' file > * Removing any local data | shared folder data from your configured 'sync_dir' to ensure that there are no conflicts or issues. > * Removing any configuration online that might be related to using this feature prior to v2.5.0 ## Process Overview Syncing OneDrive Business Shared Folders requires additional configuration for your 'onedrive' client: 1. From the OneDrive web interface, review the 'Shared' objects that have been shared with you. 2. Select the applicable folder, and click the 'Add shortcut to My files', which will then add this to your 'My files' folder 3. Update your OneDrive Client for Linux 'config' file to enable the feature by adding `sync_business_shared_items = "true"`. Adding this option will trigger a `--resync` requirement. 4. Test the configuration using '--dry-run' 5. Remove the use of '--dry-run' and sync the OneDrive Business Shared folders as required ### Enable syncing of OneDrive Business Shared Items via config file ```text sync_business_shared_items = "true" ``` ### Disable syncing of OneDrive Business Shared Items via config file ```text sync_business_shared_items = "false" ``` ## Syncing OneDrive Business Shared Folders Use the following steps to add a OneDrive Business Shared Folder to your account: 1. Login to Microsoft OneDrive online, and navigate to 'Shared' from the left hand side pane ![objects_shared_with_me](./images/objects_shared_with_me.png) 2. Select the respective folder you wish to sync, and click the 'Add shortcut to My files' at the top of the page ![add_shared_folder](./images/add_shared_folder.png) 3. The final result online will look like this: ![shared_folder_added](./images/shared_folder_added.png) When using Microsoft Windows, this shared folder will appear as the following: ![windows_view_shared_folders](./images/windows_view_shared_folders.png) 4. Sync your data using `onedrive --sync --verbose`. If you have just enabled the `sync_business_shared_items = "true"` configuration option, you will be required to perform a resync. During the sync, the selected shared folder will be downloaded: ``` ... Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 4 Finished processing /delta JSON response from the OneDrive API Processing 3 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Creating local directory: ./my_shared_folder Quota information is restricted or not available for this drive. Syncing this OneDrive Business Shared Folder: my_shared_folder Fetching /delta response from the OneDrive API for Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 6 Finished processing /delta JSON response from the OneDrive API Processing 6 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Creating local directory: ./my_shared_folder/asdf Creating local directory: ./my_shared_folder/original_data Number of items to download from OneDrive: 3 Downloading file: my_shared_folder/my_folder/file_one.txt ... done Downloading file: my_shared_folder/my_folder/file_two.txt ... done Downloading file: my_shared_folder/original_data/file1.data ... done Performing a database consistency and integrity check on locally stored data ... ``` When this is viewed locally, on Linux, this shared folder is seen as the following: ![linux_shared_folder_view](./images/linux_shared_folder_view.png) Any shared folder you add can utilise any 'client side filtering' rules that you have created. ## Syncing OneDrive Business Shared Files There are two methods to support the syncing OneDrive Business Shared Files with the OneDrive Application 1. Add a 'shortcut' to your 'My Files' for the file, which creates a URL shortcut to the file which can be followed when using a Linux Window Manager (Gnome, KDE etc) and the link will open up in a browser. Microsoft Windows only supports this option. 2. Use `--sync-shared-files` option to sync all files shared with you to your local disk. If you use this method, you can utilise any 'client side filtering' rules that you have created to filter out files you do not want locally. This option will create a new folder locally, with sub-folders named after the person who shared the data with you. ### Syncing OneDrive Business Shared Files using Option 1 1. As per the above method for adding folders, select the shared file, then select to 'Add shortcut' to the file ![add_shared_file_shortcut](./images/add_shared_file_shortcut.png) 2. The final result online will look like this: ![add_shared_file_shortcut_added](./images/online_shared_file_link.png) When using Microsoft Windows, this shared file will appear as the following: ![windows_view_shared_file_link](./images/windows_view_shared_file_link.png) 3. Sync your data using `onedrive --sync --verbose`. If you have just enabled the `sync_business_shared_items = "true"` configuration option, you will be required to perform a resync. ``` ... All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 Downloading file: ./file to share.docx.url ... done Syncing this OneDrive Business Shared Folder: my_shared_folder Fetching /delta response from the OneDrive API for Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 0 Finished processing /delta JSON response from the OneDrive API No additional changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive Quota information is restricted or not available for this drive. Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Quota information is restricted or not available for this drive. ... ``` When this is viewed locally, on Linux, this shared folder is seen as the following: ![linux_view_shared_file_link](./images/linux_view_shared_file_link.png) Any shared file link you add can utilise any 'client side filtering' rules that you have created. ### Syncing OneDrive Business Shared Files using Option 2 > [!IMPORTANT] > When using option 2, all files that have been shared with you will be downloaded by default. To reduce this, first use `--list-shared-items` to list all shared items with your account, then use 'client side filtering' rules such as 'sync_list' configuration to selectively sync all the files to your local system. 1. Review all items that have been shared with you by using `onedrive --list-shared-items`. This should display output similar to the following: ``` ... Listing available OneDrive Business Shared Items: ----------------------------------------------------------------------------------- Shared File: large_document_shared.docx Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: no_download_access.docx Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: online_access_only.txt Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: read_only.txt Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: qewrqwerwqer.txt Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: dummy_file_to_share.docx Shared By: testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: Sub Folder 2 Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared File: file to share.docx Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: Top Folder Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: my_shared_folder Shared By: testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- Shared Folder: Jenkins Shared By: test user (testuser@mynasau3.onmicrosoft.com) ----------------------------------------------------------------------------------- ... ``` 2. If applicable, add entries to a 'sync_list' file, to only sync the shared files that are of importance to you. 3. Run the command `onedrive --sync --verbose --sync-shared-files` to sync the shared files to your local file system. This will create a new local folder called 'Files Shared With Me', and will contain sub-directories named after the entity account that has shared the file with you. In that folder will reside the shared file: ``` ... Finished processing /delta JSON response from the OneDrive API No additional changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive Syncing this OneDrive Business Shared Folder: my_shared_folder Fetching /delta response from the OneDrive API for Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 0 Finished processing /delta JSON response from the OneDrive API No additional changes or items that can be applied were discovered while processing the data received from Microsoft OneDrive Quota information is restricted or not available for this drive. Creating the OneDrive Business Shared Files Local Directory: /home/alex/OneDrive/Files Shared With Me Checking for any applicable OneDrive Business Shared Files which need to be synced locally Creating the OneDrive Business Shared File Users Local Directory: /home/alex/OneDrive/Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com) Creating the OneDrive Business Shared File Users Local Directory: /home/alex/OneDrive/Files Shared With Me/testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com) Number of items to download from OneDrive: 7 Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/file to share.docx ... done OneDrive returned a 'HTTP 403 - Forbidden' - gracefully handling error Unable to download this file as this was shared as read-only without download permission: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/no_download_access.docx ERROR: File failed to download. Increase logging verbosity to determine why. Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/no_download_access.docx ... failed! Downloading file: Files Shared With Me/testuser2 testuser2 (testuser2@mynasau3.onmicrosoft.com)/dummy_file_to_share.docx ... done Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 0% | ETA --:--:-- Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/online_access_only.txt ... done Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/read_only.txt ... done Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/qewrqwerwqer.txt ... done Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 5% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 10% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 15% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 20% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 25% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 30% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 35% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 40% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 45% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 50% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 55% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 60% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 65% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 70% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 75% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 80% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 85% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 90% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 95% | ETA 00:00:00 Downloading: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... 100% | DONE in 00:00:00 Quota information is restricted or not available for this drive. Downloading file: Files Shared With Me/test user (testuser@mynasau3.onmicrosoft.com)/large_document_shared.docx ... done Quota information is restricted or not available for this drive. Quota information is restricted or not available for this drive. Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!BhWyqa7K_kqXqHtSIlsqjR5iJogxpWxDradnpVGTU2VxBOJh82Y6S4he4rdnGPBT Quota information is restricted or not available for this drive. ... ``` When this is viewed locally, on Linux, this 'Files Shared With Me' and content is seen as the following: ![files_shared_with_me_folder](./images/files_shared_with_me_folder.png) Unfortunately there is no Microsoft Windows equivalent for this capability. ## Known Issues Shared folders, shared with you from people outside of your 'organisation' are unable to be synced. This is due to the Microsoft Graph API not presenting these folders. Shared folders that match this scenario, when you view 'Shared' via OneDrive online, will have a 'world' symbol as per below: ![shared_with_me](./images/shared_with_me.JPG) This issue is being tracked by: [#966](https://github.com/abraunegg/onedrive/issues/966) onedrive-2.5.9/docs/client-architecture.md000066400000000000000000000674661510276244300206010ustar00rootroot00000000000000# OneDrive Client for Linux Application Architecture ## How does the client work at a high level? The client utilises the 'libcurl' library to communicate with Microsoft OneDrive via the Microsoft Graph API. The diagram below shows this high level interaction with the Microsoft and GitHub API services online: ![client_use_of_libcurl](./puml/client_use_of_libcurl.png) Depending on your operational environment, it is possible to 'tweak' the following options which will modify how libcurl operates with it's interaction with Microsoft OneDrive services: * Downgrade all HTTPS operations to use HTTP1.1 (Config Option: `force_http_11`) * Control how long a specific transfer should take before it is considered too slow and aborted (Config Option: `operation_timeout`) * Control libcurl handling of DNS Cache Timeout (Config Option: `dns_timeout`) * Control the maximum time allowed for the connection to be established (Config Option: `connect_timeout`) * Control the timeout for activity on an established HTTPS connection (Config Option: `data_timeout`) * Control what IP protocol version should be used when communicating with OneDrive (Config Option: `ip_protocol_version`) * Control what User Agent is presented to Microsoft services (Config Option: `user_agent`) > [!IMPORTANT] > The default 'user_agent' value conforms to specific Microsoft requirements to identify as an ISV that complies with OneDrive traffic decoration requirements. Changing this value potentially will impact how Microsoft see's your client, thus your traffic may get throttled. For further information please read: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online Diving a little deeper into how the client operates, the diagram below outlines at a high level the operational workflow of the OneDrive Client for Linux, demonstrating how it interacts with the OneDrive API to maintain synchronisation, manage local and cloud data integrity, and ensure that user data is accurately mirrored between the local filesystem and OneDrive cloud storage. ![High Level Application Sequence](./puml/high_level_operational_process.png) The application operational processes have several high level key stages: 1. **Access Token Validation:** Initially, the client validates its access and the existing access token, refreshing it if necessary. This step ensures that the client has the required permissions to interact with the OneDrive API. 2. **Query Microsoft OneDrive API:** The client queries the /delta API endpoint of Microsoft OneDrive, which returns JSON responses. The /delta endpoint is particularly used for syncing changes, helping the client to identify any updates in the OneDrive storage. 3. **Process JSON Responses:** The client processes each JSON response to determine if it represents a 'root' or 'deleted' item. Items not marked as 'root' or 'deleted' are temporarily stored for further processing. For 'root' or 'deleted' items, the client processes them immediately, otherwise, the client evaluates the items against client-side filtering rules to decide whether to discard them or to process and save them in the local database cache for actions like creating directories or downloading files. 4. **Local Cache Database Processing for Data Integrity:** The client processes its local cache database to check for data integrity and differences compared to the OneDrive storage. If differences are found, such as a file or folder change including deletions, the client uploads these changes to OneDrive. Responses from the API, including item metadata, are saved to the local cache database. 5. **Local Filesystem Scanning:** The client scans the local filesystem for new files or folders. Each new item is checked against client-side filtering rules. If an item passes the filtering, it is uploaded to OneDrive. Otherwise, it is discarded if it doesn't meet the filtering criteria. 6. **Final Data True-Up:** Lastly, the client queries the /delta link for a final true-up, processing any further online JSON changes if required. This ensures that the local and OneDrive storages are fully synchronised. ## What are the operational modes of the client? There are 2 main operational modes that the client can utilise: 1. Standalone sync mode that performs a single sync action against Microsoft OneDrive. This method is used when you utilise `--sync`. 2. Ongoing sync mode that continuously syncs your data with Microsoft OneDrive and utilises 'inotify' to watch for local system changes. This method is used when you utilise `--monitor`. By default, both sync modes (`--sync` and `--monitor`)treat the data stored online in Microsoft OneDrive as the 'source-of-truth'. This means the client will first examine your OneDrive account for any changes (additions, modifications, deletions) and apply those changes to your local file system. After this, any local changes are uploaded, and finally, a second check ensures your local state matches the online state. This mirrors the behaviour of the Microsoft OneDrive Client for Windows. ![Default Sync Flow Process](./puml/default_sync_flow.png) When using the client with the `--local-first` option, the sync flow is reversed. The client treats your local files as the 'source-of-truth'. Local changes are processed first and pushed to Microsoft OneDrive online. Only after local changes have been uploaded will the client check for any remote changes (this includes online additions, modifications and deletions) and apply those to your local system as needed, ensuring the final local state is consistent with that what is now online. ![Local First Sync Flow Process](./puml/local_first_sync_process.png) > [!IMPORTANT] > When using `--sync --local-first`, a locally deleted file will only be deleted online if it was already in sync with its online counterpart. > * If the file was never synced, the client cannot know that the corresponding online file should be removed. In this case, the online file may be downloaded again > * Using `--resync` makes this behaviour more likely because it wipes all local knowledge of what was previously synced, so local deletions will not be recognised > > When using `--monitor --local-first`, file system watches (via inotify) will detect local deletions. This event will automatically trigger removal of the online file, and if exists and matches the local data, the file online will be removed. > [!IMPORTANT] > Please be aware that if you designate a network mount point (such as NFS, Windows Network Share, or Samba Network Share) as your `sync_dir`, this setup inherently lacks 'inotify' support. Support for 'inotify' is essential for real-time tracking of file changes, which means that the client's 'Monitor Mode' cannot immediately detect changes in files located on these network shares. Instead, synchronisation between your local filesystem and Microsoft OneDrive will occur at intervals specified by the `monitor_interval` setting. This limitation regarding 'inotify' support on network mount points like NFS or Samba is beyond the control of this client. ## OneDrive Client for Linux High Level Activity Flows The diagrams below show the high level process flow and decision making when running the application ### Main functional activity flows ![Main Activity](./puml/main_activity_flows.png) ### Processing a potentially new local item ![applyPotentiallyNewLocalItem](./puml/applyPotentiallyNewLocalItem.png) ### Processing a potentially changed local item ![applyPotentiallyChangedItem](./puml/applyPotentiallyChangedItem.png) ### Download a file from Microsoft OneDrive ![downloadFile](./puml/downloadFile.png) ### Upload a modified file to Microsoft OneDrive ![uploadModifiedFile](./puml/uploadModifiedFile.png) ### Upload a new local file to Microsoft OneDrive ![uploadFile](./puml/uploadFile.png) ### Determining if an 'item' is synchronised between Microsoft OneDrive and the local file system ![Item Sync Determination](./puml/is_item_in_sync.png) ### Determining if an 'item' is excluded due to 'Client Side Filtering' rules By default, the OneDrive Client for Linux will sync all files and folders between Microsoft OneDrive and the local filesystem. Client Side Filtering in the context of this client refers to user-configured rules that determine what files and directories the client should upload or download from Microsoft OneDrive. These rules are crucial for optimising synchronisation, especially when dealing with large numbers of files or specific file types. The OneDrive Client for Linux offers several configuration options to facilitate this: * **skip_dir:** This option allows the user to specify directories that should not be synchronised with OneDrive. It's particularly useful for omitting large or irrelevant directories from the sync process. * **skip_dotfiles:** Dotfiles, usually configuration files or scripts, can be excluded from the sync. This is useful for users who prefer to keep these files local. * **skip_file:** Specific files can be excluded from synchronisation using this option. It provides flexibility in selecting which files are essential for cloud storage. * **skip_symlinks:** Symlinks often point to files outside the OneDrive directory or to locations that are not relevant for cloud storage. This option prevents them from being included in the sync. This exclusion process can be illustrated by the following activity diagram. A 'true' return value means that the path being evaluated needs to be excluded: ![Client Side Filtering Determination](./puml/client_side_filtering_rules.png) ## Understanding how the client processes online state When you see `Fetching items from the OneDrive API for Drive ID:` or `Generating a /delta response from the OneDrive API for this Drive ID:` the client isn’t stuck—it’s working through paged change sets from Microsoft Graph using your current delta token, reconciling them with the local database, and safely scheduling work. Microsoft Graph returns paged results and signals either `@odata.nextLink` (more pages to fetch) or `@odata.deltaLink` (caught up; keep this token for next time) - the client follows those links until it reaches a stable point. Page sizing and paging behaviour are controlled by the Microsoft Graph API service. ### What a typical cycle looks like 1. **Fetching online state** * **Application Output:** `Fetching items from the OneDrive API for Drive ID: …` or `Generating a /delta response from the OneDrive API for this Drive ID:` * The client requests the next page of changes using your current delta token. 2. **Processing received items** * **Application Output:** `Processing N applicable changes and items received from Microsoft OneDrive` * Each item received is classified (add/update/delete/excluded), matched against local state, and queued for action. 3. **Execute required actions** * Download new or modified files, Delete local data that has been deleted online, Create new local directories 4. **Database Integrity** * **Application Output:** `Performing a database consistency and integrity check on locally stored data` * Integrity pass to prevent state corruption 5. **Local scan for new local data** * **Application Output:** `Scanning the local file system '…' for new data to upload` * Traverse local filesystem, honouring client side filtering rules 6. **True-Up** * **Application Output:** `Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process` * Final scan of online to ensure that everything is in the state it is meant to be ### Why first runs or --resync take longer A first run (or a deliberate `--resync`) must enumerate the entire tree to establish a known-good baseline; subsequent incremental runs are much faster because the delta token limits work to just the changes since last time. ### What affects performance the most * **Item count & Online structure:** Many folders and files dominate metadata work leading to more metadata churn * **Network** Latency and throughput directly affect how quickly we can iterate Microsoft Graph API responses and transfer content. * **Local Disk & filesystem:** SSDs perform metadata and DB work far faster than spinning disks or remote mounts. Your filesystem type (e.g., ext4, XFS, ZFS) matters and should be tuned appropriately. * **File Indexing:** Disable File Indexing (Tracker, Baloo, Searchmonkey, Pinot and others) as these are adding latency and disk I/O to your operations slowing down your performance. * **CPU & memory:** Classification and hashing are CPU-bound; insufficient RAM or swap can slow DB and traversal work. ## Delta Response vs Generated Delta Response By default, the client uses Microsoft Graph’s `/delta` to retrieve changes efficiently. In a few situations, however, using `/delta` would be wrong or unsafe for your intent. In those cases the client generates a delta by walking the relevant online subtree and synthesising the current state before reconciling it locally. This is intentionally slower but correct. ### When the client deliberately generates a delta * Some national cloud deployments where a needed delta endpoint/feature isn’t available. Capabilities differ by resource and cloud; when a required delta isn’t available, we walk the tree and synthesise the change set. * The use of `--single-directory` scope. A naïve drive-level /delta can include changes outside your intended scope. Generating a delta ensures only the in-scope subtree is considered. * The use of `--download-only --cleanup-local-files`. Raw /delta may replay online delete/replace churn that would remove valid local files you intend to keep. Generated delta captures the current online state and intentionally ignores those intermediate events to protect local data. * The use of 'Shared Folders'. Calling `/delta` on a shared path can be rooted at the owner’s drive, so your filters may not match what you see as “the shared folder”. Generated delta walks the shared subtree and normalises paths so the queue reflects what’s truly shared with you. ## File conflict handling - default operational modes When using the default operational modes (`--sync` or `--monitor`) the client application is conforming to how the Microsoft Windows OneDrive client operates in terms of resolving conflicts for files. When using `--resync` this conflict resolution can differ slightly, as, when using `--resync` you are *deleting* the known application state, thus, the application has zero reference as to what was previously in sync with the local file system. Due to this factor, when using `--resync` the online source is always going to be considered accurate and the source-of-truth, regardless of the local file state, local file timestamp or local file hash. When a difference in local file hash is detected, the file will be renamed to prevent local data loss. > [!IMPORTANT] > In v2.5.3 and above, when a local file is renamed due to conflict handling, this will be in the following format pattern to allow easier identification: > > **filename-hostname-safeBackup-number.file_extension** > > For example: > ``` > -rw-------. 1 alex alex 53402 Sep 21 08:25 file5.data > -rw-------. 1 alex alex 53423 Nov 13 18:18 file5-onedrive-client-dev-safeBackup-0001.data > -rw-------. 1 alex alex 53422 Nov 13 18:19 file5-onedrive-client-dev-safeBackup-0002.data > ``` > > In client versions v2.5.2 and below, the renamed file have the following naming convention: > > **filename-hostname-number.file_extension** > > resulting in backup filenames of the following format: > ``` > -rw-------. 1 alex alex 53402 Sep 21 08:25 file5.data > -rw-------. 1 alex alex 53432 Nov 14 05:22 file5-onedrive-client-dev-2.data > -rw-------. 1 alex alex 53435 Nov 14 05:24 file5-onedrive-client-dev-3.data > -rw-------. 1 alex alex 53419 Nov 14 05:22 file5-onedrive-client-dev.data > ``` > > [!CAUTION] > The creation of backup files when there is a conflict to avoid local data loss can be disabled. > > To do this, utilise the configuration option **'bypass_data_preservation'** > ``` > bypass_data_preservation = "true" > ``` > > If enable this option, you may experience data loss on your local data as the existing local file will be over-written with data from OneDrive online. Use with extreme care and caution. > [!TIP] > If you wish to avoid having these backup files from being uploaded to your online OneDrive account, you can utilise the configuration option **'skip_file'** to skip these files from being uploaded. > > For example: > ``` > skip_file = "~*|.~*|*.tmp|*.swp|*.partial|*-safeBackup-*" > ``` > This example retails the application defaults for 'skip_file' and adds an entry to skip any 'safeBackup' generated file. ### Default Operational Modes - Conflict Handling #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync` 3. Modify file online 4. Modify file locally with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync` ![conflict_handling_default](./puml/conflict_handling_default.png) #### Evidence of Conflict Handling ``` ... Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 The local file to replace (./1.txt) has been modified locally since the last download. Renaming it to avoid potential local data loss. The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: ./1.txt -> ./1-onedrive-client-dev.txt Downloading file ./1.txt ... done Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Processing α ... The file has not changed Processing เอกสาร The directory has not changed Processing 1.txt The file has not changed Scanning the local file system '~/OneDrive' for new data to upload ... New items to upload to OneDrive: 1 Total New Data to Upload: 52 Bytes Uploading new file ./1-onedrive-client-dev.txt ... done. Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ### Default Operational Modes - Conflict Handling with --resync #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync` 3. Modify file online 4. Modify file locally with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync --resync` ![conflict_handling_default_resync](./puml/conflict_handling_default_resync.png) #### Evidence of Conflict Handling ``` ... Deleting the saved application sync status ... Using IPv4 and IPv6 (if configured) for all network operations Checking Application Version ... ... Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 14 Finished processing /delta JSON response from the OneDrive API Processing 13 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Local file time discrepancy detected: ./1.txt This local file has a different modified time 2024-Feb-19 19:32:55Z (UTC) when compared to remote modified time 2024-Feb-19 19:32:36Z (UTC) The local file has a different hash when compared to remote file hash Local item does not exist in local database - replacing with file from OneDrive - failed download? The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: ./1.txt -> ./1-onedrive-client-dev.txt Number of items to download from OneDrive: 1 Downloading file ./1.txt ... done Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Processing α ... Processing เอกสาร The directory has not changed Processing 1.txt The file has not changed Scanning the local file system '~/OneDrive' for new data to upload ... New items to upload to OneDrive: 1 Total New Data to Upload: 52 Bytes Uploading new file ./1-onedrive-client-dev.txt ... done. Performing a last examination of the most recent online data within Microsoft OneDrive to complete the reconciliation process Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 2 Finished processing /delta JSON response from the OneDrive API Processing 1 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ## File conflict handling - local-first operational mode When using `--local-first` as your operational parameter the client application is now using your local filesystem data as the 'source-of-truth' as to what should be stored online. However - Microsoft OneDrive itself, has *zero* acknowledgement of this concept, thus, conflict handling needs to be aligned to how Microsoft OneDrive on other platforms operate, that is, rename the local offending file. Additionally, when using `--resync` you are *deleting* the known application state, thus, the application has zero reference as to what was previously in sync with the local file system. Due to this factor, when using `--resync` the online source is always going to be considered accurate and the source-of-truth, regardless of the local file state, file timestamp or file hash or use of `--local-first`. ### Local First Operational Modes - Conflict Handling #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first` 3. Modify file locally with different data|contents 4. Modify file online with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first` ![conflict_handling_local-first_default](./puml/conflict_handling_local-first_default.png) #### Evidence of Conflict Handling ``` Reading configuration file: /home/alex/.config/onedrive/config ... Using IPv4 and IPv6 (if configured) for all network operations Checking Application Version ... ... Sync Engine Initialised with new Onedrive API instance All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Processing α The directory has not changed ... The file has not changed Processing เอกสาร The directory has not changed Processing 1.txt Local file time discrepancy detected: 1.txt The file content has changed locally and has a newer timestamp, thus needs to be uploaded to OneDrive Changed local items to upload to OneDrive: 1 The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: 1.txt -> 1-onedrive-client-dev.txt Uploading new file 1-onedrive-client-dev.txt ... done. Scanning the local file system '~/OneDrive' for new data to upload ... Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 3 Finished processing /delta JSON response from the OneDrive API Processing 2 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 Downloading file ./1.txt ... done Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ### Local First Operational Modes - Conflict Handling with --resync #### Scenario 1. Create a local file 2. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first` 3. Modify file locally with different data|contents 4. Modify file online with different data|contents 5. Perform a sync with Microsoft OneDrive using `onedrive --sync --local-first --resync` ![conflict_handling_local-first_resync](./puml/conflict_handling_local-first_resync.png) #### Evidence of Conflict Handling ``` ... The usage of --resync will delete your local 'onedrive' client state, thus no record of your current 'sync status' will exist. This has the potential to overwrite local versions of files with perhaps older versions of documents downloaded from OneDrive, resulting in local data loss. If in doubt, backup your local data before using --resync Are you sure you wish to proceed with --resync? [Y/N] y Deleting the saved application sync status ... Using IPv4 and IPv6 (if configured) for all network operations ... Sync Engine Initialised with new Onedrive API instance All application operations will be performed in the configured local 'sync_dir' directory: /home/alex/OneDrive Performing a database consistency and integrity check on locally stored data Processing DB entries for this Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing ~/OneDrive The directory has not changed Scanning the local file system '~/OneDrive' for new data to upload Skipping item - excluded by sync_list config: ./random_25k_files OneDrive Client requested to create this directory online: ./α The requested directory to create was found on OneDrive - skipping creating the directory: ./α ... New items to upload to OneDrive: 9 Total New Data to Upload: 49 KB ... The file we are attempting to upload as a new file already exists on Microsoft OneDrive: ./1.txt Skipping uploading this item as a new file, will upload as a modified file (online file already exists): ./1.txt The local item is out-of-sync with OneDrive, renaming to preserve existing file and prevent local data loss: ./1.txt -> ./1-onedrive-client-dev.txt Uploading new file ./1-onedrive-client-dev.txt ... done. Fetching /delta response from the OneDrive API for Drive ID: b!bO8V7s9SSk6r7mWHpIjURotN33W1W2tEv3OXV_oFIdQimEdOHR-1So7CqeT1MfHA Processing API Response Bundle: 1 - Quantity of 'changes|items' in this bundle to process: 15 Finished processing /delta JSON response from the OneDrive API Processing 14 applicable changes and items received from Microsoft OneDrive Processing OneDrive JSON item batch [1/1] to ensure consistent local state Number of items to download from OneDrive: 1 Downloading file ./1.txt ... done Sync with Microsoft OneDrive is complete Waiting for all internal threads to complete before exiting application ``` ## Client Functional Component Architecture Relationships The diagram below shows the main functional relationship of application code components, and how these relate to each relevant code module within this application: ![Functional Code Components](./puml/code_functional_component_relationships.png) ## Database Schema The diagram below shows the database schema that is used within the application ![Database Schema](./puml/database_schema.png) onedrive-2.5.9/docs/contributing.md000066400000000000000000000155251510276244300173370ustar00rootroot00000000000000# OneDrive Client for Linux: Coding Style Guidelines ## Introduction This document outlines the coding style guidelines for code contributions for the OneDrive Client for Linux. These guidelines are intended to ensure the codebase remains clean, well-organised, and accessible to all contributors, new and experienced alike. ## Code Layout > [!NOTE] > When developing any code contribution, please utilise either Microsoft Visual Studio Code or Notepad++. ### Indentation Most of the codebase utilises tabs for space indentation, with 4 spaces to a tab. Please keep to this convention. ### Line Length Try and keep line lengths to a reasonable length. Do not constrain yourself to short line lengths such as 80 characters. This means when the code is being displayed in the code editor, lines are correctly displayed when using screen resolutions of 1920x1080 and above. If you wish to use shorter line lengths (80 characters for example), please do not follow this sort of example: ```code ... void functionName( string somevar, bool someOtherVar, cost(char) anotherVar=null ){ .... ``` ### Coding Style | Braces Please use 1TBS (One True Brace Style) which is a variation of the K&R (Kernighan & Ritchie) style. This approach is intended to improve readability and maintain consistency throughout the code. When using this coding style, even when the code of the `if`, `else`, `for`, or function definition contains only one statement, braces are used to enclose it. ```code // What this if statement is doing if (condition) { // The condition was true ..... } else { // The condition was false ..... } // Loop 10 times to do something for (int i = 0; i < 10; i++) { // Loop body } // This function is to do this void functionExample() { // Function body } ``` ## Naming Conventions ### Variables and Functions Please use `camelCase` for variable and function names. ### Classes and Interfaces Please use `PascalCase` for classes, interfaces, and structs. ### Constants Use uppercase with underscores between words. ## Documentation ### Language and Spelling To maintain consistency across the project's documentation, comments, and code, all written text must adhere to British English spelling conventions, not American English. This requirement applies to all aspects of the codebase, including variable names, comments, and documentation. For example, use "specialise" instead of "specialize", "colour" instead of "color", and "organise" instead of "organize". This standard ensures that the project maintains a cohesive and consistent linguistic style. ### Code Comments Please comment code at all levels. Use `//` for all line comments. Detail why a statement is needed, or what is expected to happen so future readers or contributors can read through the intent of the code with clarity. If fixing a 'bug', please add a link to the GitHub issue being addressed as a comment, for example: ```code ... // Before discarding change - does this ID still exist on OneDrive - as in IS this // potentially a --single-directory sync and the user 'moved' the file out of the 'sync-dir' to another OneDrive folder // This is a corner edge case - https://github.com/skilion/onedrive/issues/341 // What is the original local path for this ID in the database? Does it match 'syncFolderChildPath' if (itemdb.idInLocalDatabase(driveId, item["id"].str)){ // item is in the database string originalLocalPath = computeItemPath(driveId, item["id"].str); ... ``` All code should be clearly commented. ### Application Logging Output If making changes to any application logging output, please first discuss this either via direct communication or email. For reference, below are the available application logging output functions and examples: ```code // most used addLogEntry("Basic 'info' message", ["info"]); .... or just use addLogEntry("Basic 'info' message"); addLogEntry("Basic 'verbose' message", ["verbose"]); addLogEntry("Basic 'debug' message", ["debug"]); // GUI notify only addLogEntry("Basic 'notify' ONLY message and displayed in GUI if notifications are enabled", ["notify"]); // info and notify addLogEntry("Basic 'info and notify' message and displayed in GUI if notifications are enabled", ["info", "notify"]); // log file only addLogEntry("Information sent to the log file only, and only if logging to a file is enabled", ["logFileOnly"]); // Console only (session based upload|download) addLogEntry("Basic 'Console only with new line' message", ["consoleOnly"]); // Console only with no new line addLogEntry("Basic 'Console only with no new line' message", ["consoleOnlyNoNewLine"]); ``` ### Documentation Updates If the code changes any of the functionality that is documented, it is expected that any PR submission will also include updating the respective section of user documentation and/or man page as part of the code submission. ## Development Testing Whilst there are more modern D compilers available, ensuring client build compatibility with older platforms is a key requirement. The issue stems from Debian and Ubuntu LTS versions - such as Ubuntu 20.04. It's [ldc package](https://packages.ubuntu.com/focal/ldc) is only v1.20.1 , thus, this is the minimum version that all compilation needs to be tested against. The reason LDC v1.20.1 must be used, is that this is the version that is used to compile the packages presented at [OpenSuSE Build Service ](https://build.opensuse.org/package/show/home:npreining:debian-ubuntu-onedrive/onedrive) - which is where most Debian and Ubuntu users will install the client from. It is assumed here that you know how to download and install the correct LDC compiler for your platform. ## Submitting a PR When submitting a PR, please provide your testing evidence in the PR submission of what has been fixed, in the format of: ### Without PR ``` Application output that is doing whatever | or illustration of issue | illustration of bug ``` ### With PR ``` Application output that is doing whatever | or illustration of issue being fixed | illustration of bug being fixed ``` Please also include validation of compilation using the minimum LDC package version. To assist with your testing validation against the minimum LDC compiler version, a script as per below could assist you with this validation: ```bash #!/bin/bash PR= rm -rf ./onedrive-pr${PR} git clone https://github.com/abraunegg/onedrive.git onedrive-pr${PR} cd onedrive-pr${PR} git fetch origin pull/${PR}/head:pr${PR} git checkout pr${PR} # MIN LDC Version to compile # MIN Version for ARM / Compiling with LDC source ~/dlang/ldc-1.20.1/activate # Compile code with specific LDC version ./configure --enable-debug --enable-notifications; make clean; make; deactivate ./onedrive --version ``` ## References * D Language Official Style Guide: https://dlang.org/dstyle.html * British English spelling conventions: https://www.collinsdictionary.com/ onedrive-2.5.9/docs/docker.md000066400000000000000000000613031510276244300160720ustar00rootroot00000000000000# Run the OneDrive Client for Linux under Docker This client can be run as a Docker container, with 3 available container base options for you to choose from: | Container Base | Docker Tag | Description | i686 | x86_64 | ARMHF | AARCH64 | |----------------|-------------|----------------------------------------------------------------|:------:|:------:|:-----:|:-------:| | Alpine Linux | edge-alpine | Docker container based on Alpine 3.21 using 'master' |❌|✔|❌|✔| | Alpine Linux | alpine | Docker container based on Alpine 3.21 using latest release |❌|✔|❌|✔| | Debian | debian | Docker container based on Debian Stable using latest release |✔|✔|✔|✔| | Debian | edge | Docker container based on Debian Stable using 'master' |✔|✔|✔|✔| | Debian | edge-debian | Docker container based on Debian Stable using 'master' |✔|✔|✔|✔| | Debian | latest | Docker container based on Debian Stable using latest release |✔|✔|✔|✔| | Fedora | edge-fedora | Docker container based on Fedora 42 using 'master' |❌|✔|❌|✔| | Fedora | fedora | Docker container based on Fedora 42 using latest release |❌|✔|❌|✔| These containers offer a simple monitoring-mode service for the OneDrive Client for Linux. The instructions below have been validated on: * Fedora 40 The instructions below will utilise the 'edge' tag, however this can be substituted for any of the other docker tags such as 'latest' from the table above if desired. The 'edge' Docker Container will align closer to all documentation and features, where as 'latest' is the release version from a static point in time. The 'latest' tag however may contain bugs and/or issues that will have been fixed, and those fixes are contained in 'edge'. Additionally there are specific version release tags for each release. Refer to https://hub.docker.com/r/driveone/onedrive/tags for any other Docker tags you may be interested in. > [!NOTE] > The below instructions for docker has been tested and validated when logging into the system as an unprivileged user (non 'root' user). ## High Level Configuration Steps 1. Install 'docker' as per your distribution platform's instructions if not already installed. 2. Configure 'docker' to allow non-privileged users to run Docker commands 3. Disable 'SELinux' as per your distribution platform's instructions 4. Test 'docker' by running a test container without using `sudo` 5. Prepare the required docker volumes to store the configuration and data 6. Run the 'onedrive' container and perform authorisation 7. Running the 'onedrive' container under 'docker' ## Configuration Steps ### 1. Install 'docker' on your platform Install Docker for your system using the official instructions found at https://docs.docker.com/engine/install/. > [!CAUTION] > If you are using Ubuntu or any distribution based on Ubuntu, do not install Docker from your distribution's repositories, as they may contain obsolete versions. Instead, you must install Docker using the packages provided directly by Docker. ### 2. Configure 'docker' to allow non-privileged users to run Docker commands Read https://docs.docker.com/engine/install/linux-postinstall/ to configure the 'docker' user group with your user account to allow your non 'root' user to run 'docker' commands. ### 3. Disable SELinux on your platform In order to run the Docker container, SELinux must be disabled. Without doing this, when the application is authenticated in the steps below, the following error will be presented: ```text ERROR: The local file system returned an error with the following message: Error Message: /onedrive/conf/refresh_token: Permission denied The database cannot be opened. Please check the permissions of ~/.config/onedrive/items.sqlite3 ``` The only known work-around for the above problem at present is to disable SELinux. Please refer to your distribution platform's instructions on how to perform this step. * Fedora: https://docs.fedoraproject.org/en-US/quick-docs/selinux-changing-states-and-modes/#_disabling_selinux * Red Hat Enterprise Linux: https://access.redhat.com/solutions/3176 Post disabling SELinux and reboot your system, confirm that `getenforce` returns `Disabled`: ```text $ getenforce Disabled ``` If you are still experiencing permission issues despite disabling SELinux, please read https://www.redhat.com/sysadmin/container-permission-denied-errors ### 4. Test 'docker' on your platform Ensure that 'docker' is running as a system service, and is enabled to be activated on system reboot: ```bash sudo systemctl enable --now docker ``` Test that 'docker' is operational for your 'non-root' user, as per below: ```bash [alex@fedora-40-docker-host ~]$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 719385e32844: Pull complete Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ [alex@fedora-40-docker-host ~]$ ``` ### 5. Configure the required docker volumes The 'onedrive' Docker container requires 2 docker volumes to operate: * Config Volume * Data Volume The first volume is the configuration volume that stores all the applicable application configuration + current runtime state. In a non-containerised environment, this normally resides in `~/.config/onedrive` - in a containerised environment this is stored in the volume tagged as `/onedrive/conf` The second volume is the data volume, where all your data from Microsoft OneDrive is stored locally. This volume is mapped to an actual directory point on your local filesystem and this is stored in the volume tagged as `/onedrive/data` #### 5.1 Prepare the 'config' volume Create the 'config' volume with the following command: ```bash docker volume create onedrive_conf ``` This will create a docker volume labeled `onedrive_conf`, where all configuration of your onedrive account will be stored. You can add a custom config file in this location at a later point in time if required. #### 5.2 Prepare the 'data' volume Create the 'data' volume with the following command: ```bash docker volume create onedrive_data ``` This will create a docker volume labeled `onedrive_data` and will map to a path on your local filesystem. This is where your data from Microsoft OneDrive will be stored. Keep in mind that: * The owner of this specified folder must not be root * The owner of this specified folder must have permissions for its parent directory * Docker will attempt to change the permissions of the volume to the user the container is configured to run as > [!IMPORTANT] > Issues occur when this target folder is a mounted folder of an external system (NAS, SMB mount, USB Drive etc) as the 'mount' itself is owed by 'root'. If this is your use case, you *must* ensure your normal user can mount your desired target without having the target mounted by 'root'. If you do not fix this, your Docker container will fail to start with the following error message: > ```bash > ROOT level privileges prohibited! > ``` ### 6. First run of Docker container under docker and performing authorisation The 'onedrive' client within the container first needs to be authorised with your Microsoft account. This is achieved by initially running docker in interactive mode. Run the docker image with the commands below and make sure to change the value of `ONEDRIVE_DATA_DIR` to the actual onedrive data directory on your filesystem that you wish to use (e.g. `export ONEDRIVE_DATA_DIR="/home/abraunegg/OneDrive"`). > [!IMPORTANT] > The 'target' folder of `ONEDRIVE_DATA_DIR` must exist before running the docker container. The script below will create 'ONEDRIVE_DATA_DIR' so that it exists locally for the docker volume mapping to occur. It is also a requirement that the container be run using a non-root uid and gid, you must insert a non-root UID and GID (e.g.` export ONEDRIVE_UID=1000` and export `ONEDRIVE_GID=1000`). The script below will use `id` to evaluate your system environment to use the correct values. ```bash export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" export ONEDRIVE_UID=`id -u` export ONEDRIVE_GID=`id -g` mkdir -p ${ONEDRIVE_DATA_DIR} docker run -it --name onedrive -v onedrive_conf:/onedrive/conf \ -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" \ -e "ONEDRIVE_UID=${ONEDRIVE_UID}" \ -e "ONEDRIVE_GID=${ONEDRIVE_GID}" \ driveone/onedrive:edge ``` When the Docker container successfully starts: * You will be asked to open a specific link using your web browser * Login to your Microsoft Account and give the application the permission * After giving the permission, you will be redirected to a blank page * Copy the URI of the blank page into the application prompt to authorise the application Once the 'onedrive' application is authorised, the client will automatically start monitoring your `ONEDRIVE_DATA_DIR` for data changes to be uploaded to OneDrive. Files stored on OneDrive will be downloaded to this location. If the client is working as expected, you can detach from the container with Ctrl+p, Ctrl+q. ### 7. Running the 'onedrive' container under 'docker' #### 7.1 Check if the monitor service is running ```bash docker ps -f name=onedrive ``` #### 7.2 Show 'onedrive' runtime logs ```bash docker logs onedrive ``` #### 7.3 Stop running 'onedrive' container ```bash docker stop onedrive ``` #### 7.4 Start 'onedrive' container ```bash docker start onedrive ``` #### 7.5 Remove 'onedrive' container ```bash docker rm -f onedrive ``` ### Customising OneDrive Runtime Behaviour in Docker When running the OneDrive client inside Docker, the container **always starts** via `entrypoint.sh`, which ensures that the following arguments are added automatically: ``` --confdir /onedrive/conf --syncdir /onedrive/data ``` This design guarantees that: * Your configuration files persist in the `/onedrive/conf` volume. * Your synchronised data persists in the `/onedrive/data` volume. * The container behaves consistently across hosts, upgrades, and architectures. Because these arguments are always supplied, any `sync_dir` or `confdir` values defined in the configuration file are **overridden at runtime by design**. This avoids confusion and ensures predictable behaviour. These specific paths are the bind-mounts between container and host and should **not be changed manually**. ### Supported ways to customise runtime behaviour There are **two supported mechanisms** for adjusting how the client runs inside Docker: 1. **Docker environment variables** Many client options are exposed as environment variables in a reproducible way. For example: ```shell -e ONEDRIVE_DOWNLOADONLY=1 -e ONEDRIVE_SYNC_ONCE=1 -e ONEDRIVE_VERBOSE=1 ``` See the full list here: 👉 [Supported Docker environment variables](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md#supported-docker-environment-variables) 2. **Configuration file inside `/onedrive/conf`** For permanent or advanced options not covered by environment variables, you can create or edit the client configuration file in the mounted config directory. Documentation: 👉 [Editing the running configuration and using a config file](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md#editing-the-running-configuration-and-using-a-config-file) > [!IMPORTANT] > **Do not manually add `--syncdir` or `--confdir`** when overriding the container command. > > If you do: > > * You bypass the `entrypoint.sh` logic that manages UID/GID mapping, privilege dropping, and environment translation. > * You risk syncing data to the wrong location (`~/OneDrive` inside the container) or creating incorrect file ownership on the host. > > Instead: > > * Use existing **Docker environment variables** for controling specific application functionality. > * Use a **config file** and or 'sync_list' file inside `/onedrive/conf` for advanced configuration. ### How to use Docker-compose You can utilise `docker-compose` if available on your platform if you are able to use docker compose schemas > 3. In the following example it is assumed you have a `ONEDRIVE_DATA_DIR` environment variable and have already created the `onedrive_conf` volume. You can also use docker bind mounts for the configuration folder, e.g. `export ONEDRIVE_CONF="${HOME}/OneDriveConfig"`. ``` version: "3" services: onedrive: image: driveone/onedrive:edge restart: unless-stopped environment: - ONEDRIVE_UID=${PUID} - ONEDRIVE_GID=${PGID} volumes: - onedrive_conf:/onedrive/conf - ${ONEDRIVE_DATA_DIR}:/onedrive/data ``` > [!IMPORTANT] > Before you run the container using your compose file you must first authenticate the client following [step 6](https://github.com/abraunegg/onedrive/blob/master/docs/docker.md#6-first-run-of-docker-container-under-docker-and-performing-authorisation) above. > Failure to perform this step before running your container using your compose file will see your container detail that an invalid response uri was entered. ### Editing the running configuration and using a 'config' file The 'onedrive' client should run in default configuration, however you can change this default configuration by placing a custom config file in the `onedrive_conf` docker volume. First download the default config from [here](https://raw.githubusercontent.com/abraunegg/onedrive/master/config) Then put it into your onedrive_conf volume path, which can be found with: ```bash docker volume inspect onedrive_conf ``` Or you can map your own config folder to the config volume. Make sure to copy all files from the docker volume into your mapped folder first. The detailed document for the config can be found here: [Application Configuration Options for the OneDrive Client for Linux](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md) ### Syncing multiple accounts There are many ways to do this, the easiest is probably to do the following: 1. Create a second docker config volume (replace `Work` with your desired name): `docker volume create onedrive_conf_Work` 2. And start a second docker monitor container (again replace `Work` with your desired name): ``` export ONEDRIVE_DATA_DIR_WORK="/home/abraunegg/OneDriveWork" mkdir -p ${ONEDRIVE_DATA_DIR_WORK} docker run -it --restart unless-stopped --name onedrive_Work -v onedrive_conf_Work:/onedrive/conf -v "${ONEDRIVE_DATA_DIR_WORK}:/onedrive/data" driveone/onedrive:edge ``` ### Run or update the Docker container with one script If you are experienced with docker and onedrive, you can use the following script: ```bash # Update ONEDRIVE_DATA_DIR with correct OneDrive directory path ONEDRIVE_DATA_DIR="${HOME}/OneDrive" # Create directory if non-existent mkdir -p ${ONEDRIVE_DATA_DIR} firstRun='-d' docker pull driveone/onedrive:edge docker inspect onedrive_conf > /dev/null 2>&1 || { docker volume create onedrive_conf; firstRun='-it'; } docker inspect onedrive > /dev/null 2>&1 && docker rm -f onedrive docker run $firstRun --restart unless-stopped --name onedrive -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` ## Supported Docker Environment Variables | Variable | Purpose | Sample Value | | ---------------- | --------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------:| | ONEDRIVE_UID | UserID (UID) to run as | 1000 | | ONEDRIVE_GID | GroupID (GID) to run as | 1000 | | ONEDRIVE_VERBOSE | Controls "--verbose" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DEBUG | Controls "--verbose --verbose" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DEBUG_HTTPS | Controls "--debug-https" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_RESYNC | Controls "--resync" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_DOWNLOADONLY | Controls "--download-only" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_CLEANUPLOCAL | Controls "--cleanup-local-files" to cleanup local files and folders if they are removed online. Default is 0 | 1 | | ONEDRIVE_UPLOADONLY | Controls "--upload-only" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_NOREMOTEDELETE | Controls "--no-remote-delete" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_LOGOUT | Controls "--logout" switch. Default is 0 | 1 | | ONEDRIVE_REAUTH | Controls "--reauth" switch. Default is 0 | 1 | | ONEDRIVE_AUTHFILES | Controls "--auth-files" option. Default is "" | Please read [CLI Option: --auth-files](./application-config-options.md#cli-option---auth-files) | | ONEDRIVE_AUTHRESPONSE | Controls "--auth-response" option. Default is "" | Please read [CLI Option: --auth-response](./application-config-options.md#cli-option---auth-response) | | ONEDRIVE_DISPLAY_CONFIG | Controls "--display-running-config" switch on onedrive sync. Default is 0 | 1 | | ONEDRIVE_SINGLE_DIRECTORY | Controls "--single-directory" option. Default = "" | "mydir" | | ONEDRIVE_DRYRUN | Controls "--dry-run" option. Default is 0 | 1 | | ONEDRIVE_DISABLE_DOWNLOAD_VALIDATION | Controls "--disable-download-validation" option. Default is 0 | 1 | | ONEDRIVE_DISABLE_UPLOAD_VALIDATION | Controls "--disable-upload-validation" option. Default is 0 | 1 | | ONEDRIVE_SYNC_SHARED_FILES | Controls "--sync-shared-files" option. Default is 0 | 1 | | ONEDRIVE_RUNAS_ROOT | Controls if the Docker container should be run as the 'root' user instead of 'onedrive' user. Default is 0 | 1 | | ONEDRIVE_SYNC_ONCE | Controls if the Docker container should be run in Standalone Mode. It will use Monitor Mode otherwise. Default is 0 | 1 | | ONEDRIVE_FILE_FRAGMENT_SIZE | Controls the fragment size when uploading large files to Microsoft OneDrive. The value specified is in MB. Default is 10, Limit is 60 | 25 | | ONEDRIVE_THREADS | Controls the value for the number of worker threads used for parallel upload and download operations. Default is 8, Limit is 16 | 4 | ### Environment Variables Usage Examples **Verbose Output:** ```bash docker container run -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Debug Output:** ```bash docker container run -e ONEDRIVE_DEBUG=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --resync:** ```bash docker container run -e ONEDRIVE_RESYNC=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --resync and --verbose:** ```bash docker container run -e ONEDRIVE_RESYNC=1 -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --logout:** ```bash docker container run -it -e ONEDRIVE_LOGOUT=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a --logout and re-authenticate:** ```bash docker container run -it -e ONEDRIVE_REAUTH=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a sync using ONEDRIVE_SINGLE_DIRECTORY:** ```bash docker container run -e ONEDRIVE_SINGLE_DIRECTORY="path/which/needs/to/be/synced" -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` **Perform a sync specifying UID and GID:** ```bash docker container run -e ONEDRIVE_UID=9999 -e ONEDRIVE_GID=9999 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge ``` > [!IMPORTANT] > Is using a Docker Environment Variable that requires you to specify a 'path' (ONEDRIVE_AUTHFILES, ONEDRIVE_AUTHRESPONSE, ONEDRIVE_SINGLE_DIRECTORY), the placement of quotes around the path is critically important. > > Please ensure you are formatting the option correctly: >``` > -e OPTION="path/which/needs/to/be/synced" >``` > Please also ensure that the path specified complies with the actual application usage argument. Please read the relevant config option advice in the [CLI Option Documentation](./application-config-options.md) ## Building a custom Docker image ### Build Environment Requirements * Build environment must have at least 1GB of memory & 2GB swap space You can validate your build environment memory status with the following command: ```text cat /proc/meminfo | grep -E 'MemFree|Swap' ``` This should result in the following similar output: ```text MemFree: 3704644 kB SwapCached: 0 kB SwapTotal: 8117244 kB SwapFree: 8117244 kB ``` If you do not have enough swap space, you can use the following script to dynamically allocate a swapfile for building the Docker container: ```bash cd /var sudo fallocate -l 1.5G swapfile sudo chmod 600 swapfile sudo mkswap swapfile sudo swapon swapfile # make swap permanent sudo nano /etc/fstab # add "/swapfile swap swap defaults 0 0" at the end of file # check it has been assigned swapon -s free -h ``` If you are running a Raspberry Pi, you will need to edit your system configuration to increase your swapfile: * Modify the file `/etc/dphys-swapfile` and edit the `CONF_SWAPSIZE`, for example: `CONF_SWAPSIZE=2048`. > [!IMPORTANT] > A reboot of your Raspberry Pi is required to make this change effective. ### Building and running a custom Docker image You can also build your own image instead of pulling the one from [hub.docker.com](https://hub.docker.com/r/driveone/onedrive): ```bash git clone https://github.com/abraunegg/onedrive cd onedrive docker build . -t local-onedrive -f contrib/docker/Dockerfile docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive:latest ``` There are alternate, smaller images available by using `Dockerfile-debian` or `Dockerfile-alpine`. These [multi-stage builder pattern](https://docs.docker.com/develop/develop-images/multistage-build/) Dockerfiles require Docker version at least 17.05. ### How to build and run a custom Docker image based on Debian ``` bash docker build . -t local-onedrive-debian -f contrib/docker/Dockerfile-debian docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-debian:latest ``` ### How to build and run a custom Docker image based on Alpine Linux ``` bash docker build . -t local-onedrive-alpine -f contrib/docker/Dockerfile-alpine docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-alpine:latest ``` ### How to build and run a custom Docker image for ARMHF (Raspberry Pi) Compatible with: * Raspberry Pi * Raspberry Pi 2 * Raspberry Pi Zero * Raspberry Pi 3 * Raspberry Pi 4 ``` bash docker build . -t local-onedrive-armhf -f contrib/docker/Dockerfile-debian docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-armhf:latest ``` ### How to build and run a custom Docker image for AARCH64 Platforms ``` bash docker build . -t local-onedrive-aarch64 -f contrib/docker/Dockerfile-debian docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-aarch64:latest ``` ### How to support double-byte languages In some geographic regions, you may need to change and/or update the locale specification of the Docker container to better support the local language used for your local filesystem. To do this, follow the example below: ``` FROM driveone/onedrive ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get install -y locales RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \ locale-gen ja_JP.UTF-8 && \ dpkg-reconfigure locales && \ /usr/sbin/update-locale LANG=ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ``` The above example changes the Docker container to support Japanese. To support your local language, change `ja_JP.UTF-8` to the required entry. onedrive-2.5.9/docs/images/000077500000000000000000000000001510276244300155435ustar00rootroot00000000000000onedrive-2.5.9/docs/images/SharedLibraries.jpg000066400000000000000000000417461510276244300213240ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex5959 2020:11:29 10:02:472020:11:29 10:02:47Alex http://ns.adobe.com/xap/1.0/ 2020-11-29T10:02:47.593Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************W" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?͏z/G_(3O͏z/G_( ?6?l̢4TyE2c}Q=(O͏z/G_( ?6?l̢4TyE2c}Q=(O͏z/G_( ?6?l̢4TyE2c}Q=(O͏z/SKnZZGZG=yE>bG=ZMԣXk[SYWji ՙyŇ5:.ZxAn]FFvMv;确7~%Ҽ/Zw6C*x]T,DGPH5+NRܾ.ӞR~o1gq5,jX>=ںprSaeesug,1!T3L@OR@#Pz):Y]W+.kCM2wS`06 <%$QX5Gni k:*3uԫ|],x^5kyK {+මo, c%NICr}HMcOi_]R_5mZL 2XyT7ّIUc v("oIIau7Prռ'mqgc>ofV̶)ܜBQI 9#^ug%@2 F(QIr(0((((((-#[f֖-?ր4b (9*أoΏGߝ!bտ:>~tJ([Q@W}Q sCAGN^~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:E]~([ TU߱Gߝbտ:ZZGZQW,aXw8hQLAEP Ïm(>V3))m`x|7u+ yyo43t27M7) Uaֵdu η|@wE00#af%@浨 ›^e+*{mqgsR22:uhG+i{-xG$f7Krq>bH%I<~ʟEbFx^.&EnX 2O9裥N+oeq]1bm;HB8r;G=GSڬjΡg^|BNz ~rwnvt[V-^;Y:;-g+0db|cpv:\ڢssm <,™Jpv[ִu+9mA#h|Cm hX,،@  }jKkK⿼ԬǕq,걾FFF(CEXF#Q<Ѐp"97glEPEPEPEPEPEPEPV-b ( KfxE.x]cީ)',@ uP mHd@jp%` $>TϔV+{KMՖq\-U*9g$cnyt=M},r:^xu.\i$;X{Xψ-n [nEv#8*H=8(iokGq3fqK[yS[VhI_8 3Y闺Dbf 1IJyQ 6I4[lݶK{*[c!By$d}Mԣ?gV0Am4HlUSi%֣Oִ^X.dBְA,gK1j;o &x:dSBW ~RWkXZ4-rI3|ݖv%qD/Kus~#ԵMB8`s].[!QL8`焘jzqˋ})Qc}YN{+xo,EEw#jS٥Vq# #=Ns[x5}6ORZ߶&4Fx.f6۷ctW7j[mq́m7#D4;HpI矩'ėZEyz-VxU QI\е/oGmEq񻾓fW5춿o*¯:ƇFB=Ns[:w"lntFXxs$WUFy oQ\xOZkB;ӞĦXeܹ r (+=OVmIa W@ywͽ1`uW3'l`U9s<v8 [W-ygm5>s B0pHؑ@EQEQEQEQEQEUo*X/€'))1-B j:m&Vb"I* @e]%},r3,~ߟQϳϷJm׭598Kǟ"a弻 n<K6r y~9OMF`XђAR3H| ֑Ϧi*Kg,pdhŠ}n74 4/#5^zlMWnu 5ݜo]RPwlc^+o տS%ͽεצۭGy<" c$p,%} Qv{;[tO-pܼ##?u4Qu*JРZHU '[< o]k2[O$7Ж*NI <몢nr0x h 7u2EX$E cӭn@д+]5n$I'S8gv ѢQEQEQEQEQEQEUo*X/€')(E+3$-Ө@w`2rZ߉Ì ̯2}4WW]oP%N@k`~?*:8?#>+=ࢊ((((((((((Uzm_OESQE!lu3@k]_Gϗ|y.I.٧{yk dqWr w5յ/?B3vb&չѐ 6-ƣj,-8FJ!y9/k-31/&TXT+}Z{q<qoyBꮜ*FNcVƿwj7W$kh%t[1KpPڰM(j~$ףоѨ3BگM.ya @vna4k1tTYdTPZF'ըl$-N(pJOt' f7+i%<gCIV]մFUf'R 8,t;bMIhG#Bdf%}dK? iL@mG +d}КL=#Z*r*?#'9ͫY [$4G2:*im.; l]<2Ȗi6g,<`ԳxMxfgYFi_~#hFsic͂\Y,n/&X8w۝ 7/ n YD5MȬr>RA6H.I$yYc$]n6qlh_=2j(Q@Q@Q@X/«Ջo(z(( 呞MOwcfBI'\cQFQpcL~Ze(.”#-F4 SzR+ǣir>Zz'?r|QESpYL~gi*Ί((((((((((([Uŷ~=QLAEP ʾvۜgf~×y?˜c֫P>ѵFPv[&CZZ6ueCm:bhNcbvl?}B$.u:/H4cHj?` }<ߜg>Y]&ڝkohMFylk&z~"UxFSPD(wdkVUZҮ or!Hf|[[-XxC43ǩdIe@p{siV0^j6g$Ik#KҼk&Ү&ZP,~n8llɦmQ; cw|}߻|OU݊uWzΗaڕ<7ndzӡt-e>#ef_Jš4X9vV>fz}ܞJOCkgk%J\##|zׯ_޿n{O)CO^TR[ W!94zq[jVFitf c Yv:XSԖT7fp"0&O(?11rjƋ.8[ Zk6[IR ~fʉ!8hv1_#K+`e%ëb85-dxjK=6C8Ygo`c8k^PQE ((((*ŷ~^[@EQHFz8 5X7wbS?)gpHmW'Y֟Oz|˻mzEP ((((((((((Uzm_OESQEBK#9ctK~?krx[Eq 5ÑV,tgc+h9zbק>SZ4-r;51mmv̠6v(yK9#&l;vfQNt"*NlH0 vCz ^6-ii6ҟ.9r##<mmpz+[(Ɲ-.nRI6ܦqq"g;GfrNrvj?v#%CE(C"!l4p:+$ֵxfc>fp>ltl=[1-2:;6;z)_+}fktw%ԖO퉉&)gn:ugK5^]6KH*7B~Bp3Z kkED{T+=© PQ@Q@Q@Q@Q@X/«Ջo(z(( }Yh;[4UW:ɐc瞾MXNB%ZYYJvAWj_Ͷj9k%Rv,@?  ʓU;!vI$Nz֭74ᕯٙ)Fp%RxyEڭ ;Ay?X ( ( ( ( ( m_WPQE1!~ERQEQEc6]M7. 9渺0 #8 NўMEa9$6hS[hזts*?.s G]YKymk|Y#<8zs-]Iv<{//tcqs @2 EYM1^ZAjm;.URM У'[UK[Nom$eF N:F]5wO˜ Ùw,Tu}6-n"k: m1&26.̻tVcuK1)so&`o5`p~oܜqIg +ϒy| N ڎI ?jQT4Ȧ)uDguqFx#$McصGݳYԦMir>e{\EUSE}luJq~ujO`) (*ŷ~^[@EQEP) (+:EM}O$Oр\F w *+(ooFɨrV$Ia=Oe-pj{ 2/~Ÿ$#oPI:ŠUkv?twi:iגmu4ͫAz Ego֝wjk F18]JiTk!kAȒ1{7`|4o%=q5SZE^3#2vaЌrxvRڵIu9OH =oQ5XCN]ou_ #ثo?}*^ׯk FZ{K@jd.0YwVۻ+>C9WKh<ˆ# "dm<xkq)_^O֗B;(EQEQEQEQEQEQEQEQEQEQEQEQEb ( 袊b (?onedrive-2.5.9/docs/images/add_shared_file_shortcut.png000066400000000000000000001063671510276244300232760ustar00rootroot00000000000000PNG  IHDRqB6sRGBgAMA a pHYsodIDATx^m}yp/׻q:cmkmx/|k*m#6ezX >DeX"=N!@֚(:`$ab8W̮̬'gMstt+jjS[a;Kyj=X=ȩ@rd[jӪSgږi;ܟvX_rj+lSB 65:_S[Um-S)MOryItLm4W]s*E{t.wڋm=mBu+6M.쪶|ݛߢ]8Uզ*KBX˩M5/ 9b.T%D]or[av8mL2eZi_Cm%7 Jn봇yjm;ZɅm/VUj]rkw9%7׃ T7 6nVUFzqB{yaU-AKm3^*]iRY4-_gc1],h/t]8UwJFu&?j[Le_m[Um*W]NmJniVvJ^ڃڪjSJ{ [rS>詭MUT]NmU%o.bANmmj˾jVU=.ir=mjT:ҥdjJz+4]^Nn;V-ϦnXN 9V%QɅ_b**m۪jSУNVU. 9bXv8ZT쉵Oe]éqkU/ю9/ycP=ȩM 7ڪjSTU=.l)S7uVn %^\875;YyˋzڶNr[v~Q{Knh/BAd*iמ T㺸 S[a 5]Nmm}/h7MXE/egE;>>4=W͔)SLcm/tz(aX*VU~ڣ4UՎV¯VUvfᬚ{0b 5SJߖG.^ֽΟ{'(VغU4wI_YPs/ϛ]S,Ưbx̤|; `E(!P +XJـtO͙]S,|(0P2rm3c(-^0y;s^2ZyS%IMX0ˠԢzu jnu{~ǯ_&J j&{0 74bBa{5?&c'沓S[%_ڢֵ4^H-ciзڱ!_(K, +Yg"Yw&d}95}S]re@)vͮn l?꽔1T&PJgO_??{Y͝{M-ҍɲVRś*E+Sۣ$WdM7<͡_7_ _-x73}3xʴcJy+|l~{S>em7w 87qW\~xY5}s2uiEkx7vsg& ' InG_hv}rܦ6cA5{~QEs"QYuj76ޓlwdՊÛjgQ0}g?c:w{u U =d&=X@IB3(ԑH)5)'S7XrWidcp.]?>.o? ɼHHuU7+ǝyɼPjM-^k=.- Asy˽»V;PyrGMg"7TʅI:P J| _?{.xzlk<{ ߧf_\m ApG_ 5.KM~G=FI7<n^{迯q#UŹ1L\`:1$,'~^}-˷XCտuvuUdfr~_v(e~{4_Nz۲c7a7d$%;SRv-%7OmǶtFa{Cyc{M\'kͿ1w~DžH_IOdIDkZ5Qk;w GO{.kGx\oזfSmNoW7gY23*Ѷ _7}ۇ߷9m^~Ip/%aҿkԁi;\l۰$\LG*0Ɔ"v fdyQ$1_II[ y܃O|+%i'=$@.هJױu$wS׬>9^wz:s'!{^wwe9g?VDoV]}~sY>~ misgoលڰmwG~lcwivsG܅˙M}K^æٟ},Eϟ=wp=o1=-8W6c(yUS}I}oWGǍݪ$"4{u/8 '\~a"|m*}C6H֜[2A5'7k{imjC_z)=J~`|7:{`\qDmFT=GSSzLo_U۹f HPi;;Iޤd~箿a|fA,(_?l:f u͕2Nh M:!KY0qAS£ܼ15@II:tjF=n$ϨY=ſSk1]Ou~ƕ\\yܢ璪"ɏTMkhs9egmۉZ?wN%m'KnۊS5_zM_m+*CT*n=JRwc(I?/C'.ѩ_6 W/t{7Wz/݊c7e=Nutj#jNk&o"}f#|Y}Kk*e]7]t\Z[,o_ߌfߗM,T[W䜯}uA$boתo= o^~B! ~Wר(Da`%xJA@S(IFr,gߥRqN}<(IO+y>աSM/Nz}@5鯓kR^˲5ncx C\s?j 'UmC6%<<R=E?oku~59XcWsv(>}~൩_Wǚ۶͗=^~k\PPhݺǒyvy߁R/T,*SK:rK{&fR/sᄀ olwjruɹ p %)z* ^-:2?\?6 CD5iVxq?FXPP$pqۇQkkԡC|pݰ]T obA̳J,d1%[:2O?=dWu $Mnhч,>?f6y5k/8\^;Psw%*T{wTPn}97!Ǘu4.a;QoSWp~.ϻ=% =ܸ.ws us1©+)6ATJ!%ҿ\7 /<r~Z/'ɹJs 6F!{>.&}0h+o#7Cװ/ ]>Z2o"yS'=o(q_9o&bo(v̦V{;wNXPPPhbbz9o J•^bB7豽l"Af[N>Y r|-ρ^y>r#8Z2Lk\u٤3w})?+y.?;ß =A\_nP.O#ܗ9o{嵯9AKg?,nS-rM^s1~wnbqmF+\sߕ<qym^;(xm[}rO:.;1W^# H e_OA[]?y/0,_Qbze:t-cx\Y}ނ?|P79L޼7mEf9fdμNmPsgK U j#}I뼶7x1-7׈}<$7ۋGaj:b{^Ө/cVZm[{n{{{V(TPu&c9d٧X ir =A@JTJmeHʞo|m bDHרk&2LrzBR5]3Ϊώ޲C\Uffg->џ%Jj?s++c&ywjN5ɚ],(_\ש6RPA$t]ԺV u|kAL] ]G_?CC Sv;5ΛEXЪr{kԽnPݳ׿^e:djo?XPP^>\2j HfP|G=BP0V:}F8Pda`*1v8+UU v֍}w_=v~x[| ;&K~=u#V }ڽ;Ojj9̨-dž:;6U{X)Zd11_yc(ٿy%J x =b5t1JJiPX A O+J X1.^ PtJ0b8C?=`t˜*lMXIES䎡tC0XӤNz(]8롴x&+oIC%(J_9N%fL>MQrhCI=N}Ĭ=`R5е).=.K/@ :P(;w0b7Ro6EQ+\kS P:wZ8}Fͫ'g'xc*A׷zWoz7(Zkн&c@R:6>rӴKoz`sՙsꕹt`NS0qސڞrzUꫯ+W .Q%ע\rm5jWW=l/% Ο4;N?}IPQވʍ|x˗ko\<嚔kSQVchV0IRJ??vY5?=:quŗԉ'y#|^r*7BnZ /FZk6[ Nz(Id{)9sV2ꥣԋ/Q/x$Yv0J0Iz9h *'ת\rڞJJ__yTEdpn;:T:Qu$c+]8A~u7R6LS7~Na>hCI*KɎ$}KN{*yzϽ?wX=w:t9u٤:x0.TL ynWقv#\v85j-fRO=zOgSO>c~%O$5| k:Lqkד한ڪjSEQ~?t5m5mR:R*סR҉Y= KK=|R2Y~(X^Ӷpj۲#Xl`u[o. T ۣP=g/'UQSDB=\O?\rm?sX=#u/Գf9}fM=Ng:j3eקmôߟ_iں-SI /z*ɘJ'Ov ,_;z%0 ANmUkyjm;Zlrj+lS녂vS[a:ٶÇzs^P`i߾'#0z}[t'ldGmLfӮ/i??Gii%[dvVҽΞ7ӹ|-935<ն5ۃڪjS:W\ 6S[Um:]Ю3=Yr C¥'ԱN*DW䚖I\s5/5 ^ɩ6EQ5mw55c(]ɏ{Tն=z=.J||0XK2M)VGrzf{S[vr;`s5.ʺڶګlڪjtY1ҀIB%kIz)_0zANIҫhnzEi\L7=]^hOmu|4ۯl26pzAU<-MUim5mwoP~m$ǒ'ΝWgϞUgΜ(ӧ+/fggձcԡC| er ˵,״\r˵.׼\ EQEQnT5Huv*Οyo`hh~[[믿⢾0kYik]y{L.^+y~Jx#Pm1XI1|,ⶄI/_60Pz7իW[Jo{u߬֯_խeJrm5N覇3f&LT(͙5kz-.ա>GՒ`&Pm$괋2| 0z:vwVoޥ>ZfuW'0+sKw6lؠ=j4s]w-!~{r#Pm l /7%S(---/(¢nϩz.Y҃U_͛7}CjfnFB}JϢ@ Fa&P0c(ec5#)֖I0(PTs[CIs%~>_AQCH /M(=p^^FvYǑ̓^L?H܀)(rOJ.F*C)Jmy](aᑜ ~b!lStdVǐ>XNJP:{=`z$<cOQ(rEۺdzd̓lX J-3;NmϣH[Ou7m( m$qå04rveAO@Iv?f \yrrr#PmCiMm% od$) D(H* drL{2B%%VJۨN;6%P6mb?,ة(Ho@ +@ 51`C$k7J2OB' 4 ,s?fua@[f %g Fc&SPqy![6]43jz:ꐙѽX;%V7=C JR㛽^;uu߫o Ղ@ z -S%m|NB+0jDb %@jՌ@ ePc#5C)&PF7%V=1zm3@iAMߴV]{f5&׮U;LF0JuoTݳ[ [Ս_kZ3Uz 7֊7krihدi5C=&9LCIzɴi;6]RR]^25%@ oJM[Mj6u;ymP;O*,ۢ66sh]S;xxZMnڙ;J@C(a0Rc&P 5kkջ>W]5K %`(5Upy*{Zuͭ vL$7j@ɼn罧kSNGcF:"P1c(Ta %CiuGk֮S?@iQsz\Ϛenu N/\7mO_UWަ&6ת~5$tϼ z}0*?nM7oW.Pַ~򓟘0lhm6uugF=^w&k5n['P{|Qy+߮ޛlaqߩ6t;(-H뷨(ͨm]_TͅW)7]GI֩nْl3nzq#&պ=ju%`(5U(J--_1iߨJ/&ޚUӲ6 Oo=uPvw>Q7ܺMz:ת wͨ3MW j-j}dž?6ZiZ4V{ےs}>gmW>0x?^0\zuPmfjxURrx׷LTSqdX@Wzc(SmT@)a~GF(n懕s fN'N~x쯯c[s=gdd,u^Jx#Pjn>[ꚵR[6 fqz~Hn*?~QWtw|O&4 ߑ^Qz(MMMiw]|Y}U0s* :J>{83 @ݮnpJ jө P;Mwmp*K?~\}̽?'?Ic(5J2'z98/ڦnp=i7\1ɿ!IIg֏T2o*XFT}5jFz#˿Kj?) "ZlWQԵX}Mu{ϙ;Epd$G>/T*uTt?gd4uO1wܫ{0qClp}yXJvldjL%]9w? ڄڲoV-_TWP(t;l/_ 0 P(@M8]K{Wӽ%|s4o>"cKݾZs;ޤ_>=#Jړn -..&!u3w9 ת-up LԌLj* Ch̤ t4aŬfBm{zA->o,=֩c&s۝_IE"PRS}-?3n5F;[E3VJ{|FnF>:Ψg-_PGަ6?ݮ˟:7c]YޱUGN=KYT { |tVydKr>rS,PgtcgϪ?? ~0iUuLo"GmY5}(]n%?3vMI(NK[mw~wxOo %]$ӰtUJ#_r.S8bRN.l@)!ԆMsԉ'K/dZ@;^]mj#~j>~tݦr̪1>P"܇I+%I*(U\eiudCm۶]v0iM%Tz'k`XTue-'}m-f (s-438w0Rw?0 @ oJ6*V{N@ @Wޚ(h#P#j0PS@ F0` wͯL-?2tr vlJ@ oJ-P(@ eQ1m%mJx#Pm{( J0FڪC)6%`(C C7%V;RU)AJΝS?S /5,%VJ Iww:x?Cϛ9hr vlJmĄ_{^RXқK_pYѣGՆ ߿,{W59?#Pm1 g;{LP*ۮ]͛M'adCICO|z@)|\@%VJ ` *P S:vY#_=ƑeH"(=N ` *PWm%F›~WZ2>>d|lP®ng~,@)vx cWw׳ YOֿX6mBڪC) ۧ>Ǒ//Up# e\Jy qrȀIVLoB.s\tחr"ٟ].ω{>@ Jz)}H=8&vmСCjǎfbt lp"ukWupn0c2YGu.##%'W1 cuU.{J1iH `D~6783<&''k*q̗I;pW?YOz sp{:=.'캖,r7!mc4( (ɛ(j4KLΝ?O>ɓ'Çͯ$(|@Ժ^{5_1rE/|-c$(M%4=F,y7y\9XҶ;n\̋#F\r-5-׶\rk^ EQEQC =>炪Т. D±Y rCrױcM/]^y0zڕkXe-8h1l6@iaaAO&PCxj{$ګ)Pzt^5uji'.E˗ٳguG]Z. {(TwN? 힑daDŽZi&i[+JR6Pzԕ+Wԅ zcv 4ZkJz'Puz(8g% %۞:uJsWtv 1TPIn6e^]>*#=fggM)'ת\r5,ײ\rm@^UC),CR=v[ ʗG"T"*#=d'N/ #FZkV]q7WJm#o qɓ'̜AYP7UkښP'l1)[gbG6/77& o!9F6y];V76*9u&L0P ?&9w:}t9&7r )kQI6kUYvÏ(JAN koS:T:v%3k&pCd3D/@ݗLz0) cNy3@%8W,N%ցMzaQ3硓8< X6P{T%=׃ ^~e}K/#G_|Q /@Q2kQI6m$׬\r In6Pci@={ۇkXKZ@ ?yd_z)8!T$h7+_`c`lo {)ٱl$VWn`WBQkQI6m䎝D$Fc(IaJ>H#fP|+Xz6&P*x,do_ǠE0D>f`p@I$flty}*l$%){5(ע\rm0IYw줰wb pzmv(E{ϤaG<%aG@I[ƄrA#vE{~=Jo2.,I_%(Lךl$צ[&; 1Z@^{d%˫}ڱ7(Cɕ/89:( ЀA7E|Va%)){5(ע\rmڏIRͩ]׫;LJO0!k<~5~*΍.ۯWmm$*>V.1Y7=<0S56hJ^AH(h(%t=i2;X eyV~YѾJQ(ئsyJa$`XX0ْ[Sf?#Ira(B #6]g?({Y yvN9ɇ|P*;d== NheZ3ۆ޹5/"q~\Ҽ,y]Ccj浾\U 1:Cz(A}D0\Q{sj%7\rR5]{tUF}i˻IԡsS ~P1_o4co^$\߮;\rM][=~7~;փ'@)< qNrM֛>FsCl{1r}Eu\^k-xo.k=|+1ZȽ!roVmYbdxݢF/ ϔdʍhι%PQkQ"]Ku6Pcg땿> 0| P=eJE%.vJQpU1}ػ o4+ބCl*Sn}R9('tǞD,dpǭ!PQyqk:z}̺N  %[=Pj@ R5 oȕՙHo4܄J͓uP&<ϴߤ~1RKwmݢL+W}J.P*c:}J) r&A6jh1J={<{uY?yQ>V'c,Pʂ +)8ӽbQuAd1۶GR\m* c$De=GymfVdHaiF$P5N@I4z@0a %4C8jL W0R|LvlJ0C 0c(-UTp pj+i@鮭[Ғi5#ҽQfΨQk'r?}jMj46i10CC K=uꔺ#P`\=²=v)Rsv[ ʗ T"P`\PJK1c@9w[*g?'ۦ乌m#>߲o/4-sJԝn '0 Ԩ Q*'94F;ȱsU&xTϹcd< WZ~tx$"Kl>mP=ꌑT5%PβJўFi0 Ķl9e_ZKZ@)nz.fv9v<"z9 :+ݏ=P/CsZ%6X@,zH |i/7hI{dA5rM$xi"'疴{}MyyK/Xs֏!_J rC1"aJ)8?^|>hjNڸ^m9gV:i[c9,Svn}8]_~Sۥ6&F~xl< 5P?QY6u}mUjy%aB$+ Dv_{֤aY`&:yN/4J?/YX7M9 XǙ3_z˜`;g??{t8&HQ8Y@žXc*@ǮGnܨ6nܥb{=&~J}FuJg+ 1:m(EBw&I8Tyz{9Vg {ȱ|  /fjkF)z(!թ:C\/]~"me+ >Q$NʽLL&z?< Í]jt N,IbLz[8*nR9@a s?^kfu ;u| ㊄uegkS3eJ%([T}=1~rpA}}zn0_awC bN?`h޼I]w!Ѯ=uPR/Μ~T~H/s'+ AzgJIo2F487~oGƁRcUv^s<9͙O4)g-bۻZK_5^2㯼 >7ϩ>/J#>A%a +72ϻA o4+ܨ&Pwl[Mq<2cv#~Q(% 9wwJ#*|-`'zp޵^m%;v^@ Ç1D3w?6wX-Od޺u̟jJ( f*ލdxY\Lٰ# Trݧ{vw:Byd({]z 5>rײe֕u _W^r⯼ Z\\R<~ԡҥKKznmQ0A+Yw3߻h' Û'묷LxiۿIygnNrJ9Cj~. Ux~{~SJ#*(zdYu\(MΩڲR^C1VS$ܱszG}t:1wQ ׫J(~3QeBEɅ~ʘ$Oϡ9O]S~",g@Ǒ{帑`_nk _Ck̻΂V~?wu_W5k@ çJvV[$%/\_KW^;s|"P@DmCV~j wQYnD_MUi5(_y+{  Jc=kf$Gp|hXҏ?@[JH{{;EXמ3[7CD鿇ԸJE. *gCp8f֕B)Xvsá4٥vUM*%7D CxJԝP {B^~d(Qe=أf}O:LYAWR.q>{ł@I+J ?ȴCV~j Frsٶ4%2eҏ[mm#=Qoϒ@;:%_y+(` nJJvRJJS%Jh$CiIu1*d+Ҿ䶓 JJ c(CV؎a /^((((Zs%aC `|PT&P_-Po(/P@#74| )%E%4Jhd͕QgJ0ԥ6j1|@ `|u7M0+ohJa;RJJzt^5uO->m0Cə@鮭[Ғi5#ҽQf ,֪}9I5c0M7M'`0 LWk$PdSN{JZ1njC"d+lGRE@9Iw V`\CVMԜ N IfdokĎ:0sBM tK! @PDZ áxp$kw_>#!\ĂDM%/w}1?%y.@)=܊nZsY}jPШJ~M'y6(19VǁR㋜G@sq`ZsFq? JoRțf$$P#@#n,78-cy$,̰5Pه==ƪ@)Qu<^{#L&@IJ{ !8$FuIȲQ8X@qa\.EC8g)蠨}nRS#稗m_-n(܏p̤6R,0S<[Yn4u 4Ƒִ VK_^t:@"v5neM~ }<>:E4NdM:CcOHN"=fV\O'Sιy  ݶn0%M sHod]+'Yfo}< ]Gr3a=\cop=!Q,vNT6Ynyw,yem癭k3}=u\Wu5`"~x}b?H{5J'o}aGO̫\_߸i^[7W ܏&4$Pǹsæ,sjuFl? O:%܄e޾E,pfMorve7z>x8=ķ鱡Pȯ{e7׻}"[5ȫQ]g0᯼ vUzueCzO>YYn4yX,z&3 LBf~Flxٍ1 3mϱĎ [J) b|k:"Pmyk4}=PCq䵓b ,$<{c{{(ۏ<^[PPX›9aLn6sDQ 7`Xn;-8[WS~_1Ɏ?ȍ ct^8e]| / K D^/>z Dz5螇-_+JRܐ}{\8|F}gԦ{wTݺ)5}[WW)%a̕>}ػ o4+ 6b7<hc78r(8^x#f>v܄w`qƢ`ąk]eAFd}ueX(-v+1©k&~~'utҒ^n[TnD0 7s~PJn$7IDnBu w&ym&U3+n޽mppXbDw\.}ɲ8Pz -WkX~PC=w?wݣN]ꠇ0pCnmPŸxD;E~ od]/H]QMmM09;k*ُ{>sm9}9ٟw.c )s |-];Q:YbՕGg[5]kNʾ 0|JN#T՘Iy %)/i~Z^Wܙaj(d%~]wT*(WS u%WiҞ<J"q~aQY6u R;ocٻ6⟁j~dFэb >|CC(Vw>((0l{(jC >>AlHL޺`p\(%˹wsn8>îٿIłxHATz(uh%P {B^V'c,Pʂ +)8ӽbQuAdJz(٪6Rnc{, s(P?d+l'E0C DPڑb %ՋJh16T5FRQN WI%[ugm%JI(/P@#1vT"P_P@#ݏ%Px"EQEQEQEQ=H~ H)*dy@ `|u?RRJ1H~ 1l(/z(PJJJh$?RRUc$vє@ `|PռM0ꏡd+lG@ `|1ɏ#U4-%EݻWMS O=c(S[j ںE---V3*ݻ5??o挾MkĎ}jMjGԒBmO:+z:kEH)R=v[ ʗ"T"P`PռMT NEP#(DG*_oyȶ[Y%[a;REc*"PjgLÜg}d,];@ՁRA"7j(aU[Pji%7_? v"2v <JG#tVP pj+l'EβJ:Rw%K΍[?~5cΒGz`*ۏfYbV7챀0J 3u,D?7&`'C%|ӌ?jSRf17 Y6]+"R˂4 5:CnHiTȾ@Jg{ƍT(aY4 t`ĭ {IUdESv(XЙ  ǡC7]H' 碷RSE5%S%=l5o@c{d[kkc{]Jy%\'PlkKK^GX"@_'%˦ HuTv?[_׵ :15s0+XP#EvTc'+U7n“[i7ܸ{nvK$KgM/\'9:ʯWS+NJ 0w@I'=7Vc(D% T4n:eye#61poÀ'1=)bTvC7:Fu^bۻGHV0|JvREc(1unݰTQ}v$FWߨyZ}sp{x,os&(j\:T SA􎝭WuõCĂƲ &A ]ykK{@EnJ}7qwRԮ^$I2 v@=vFd}uK_ c(S[a;)z(C0lbRz&띛pyfS}J~cXO֊PtlpGnrQ;Y5&kJ~ s;k^. z(D%sK I\bn$*Y쭷u*w4eE9}7Gkr ιx~I_Gho]]~Ty=l{˂׿V0|քꎙT4R;J`PռME"Tɿzr1pEQ. d)z(3@IfM2Ey94⟁h1Z"P4%MCP*j(3@TΆ4`qz4>6  d`9w@::CilnKX0)>~ӢrvR)T(`,c^OAx R;(I/tbzQ_Rzl0&*H[JM?CnQKKKޕ+W>%(1No>9YH~Du F[5a"c&MWSg#GQ5{^#oqBNS(}eA bA:P  FR2%=l5o@i 8mJ QyYO Q0o^&hY>6Rnc{, s(P?c(٪jG@ `|1z(9U4fR6jCV~9*CjZRJ1ȚXc&M WI%[Jx %[UH(/P@#Y%Lj3kCV~9*C) ۑ@ŋEQEQEQEQTPFHc&S%UCV6*CVU;RJ1ЈC)1ڌ0ZP_N0P vc(=R1)*dy@ `|d)%JhDVјIUmP-z(/_Mң{;W}ji'Puc|I5#3ՄZI[&oږe>wLdgfr65.ϩC~i|B'1.fM 9'=dtrcp *CVU;RJ/աұc̜A F% r+D8a@JT:qY_3=vJ!'#D+|1>oߑ b J{<k_׬ѱ\/#az%,( ×l"9NB!7:ȹ}׺Gvۧl+_'ǐ^GY8U?wc`\1*3)lM >5G! ,m/A4Y ak'FUɺ2Vױs4+(9NXsNe!RرqԢrv(zy68D^g&.z(<7Iב}9nV36Xr{l&{Nr~1ܠ zy~h"Pc(S[a;RJ ,PҡP BtR禴 ɇ+zn,?PJ{@%Bٷ/? 9J4Hp ;n\gNڸ^_cnF_XSK,+ه0C D*e!iTxJ>* WP* y41HmR$\ؓ-N W6]+"ROEdҡVYT#Pr)}qe7nTwFc^`Ge:*~P*#]4%PjgRh傐x3\@ V#(ACwRN{ *ztl@^Geר\/2u=Vlo59fr]+x %[aFCAR rvQxVݤGDpGqW?&/\'.NN^רʲוFφz; WHäzpm+1ZJ b*nc7]yI{FNq }g7qJXFkiz6*~6&}kGVјIahJvM,s-zTw]guMΩ፮Q %3rr{x豙͹{$cרyF;v^6~PZiCV~9==Y,iΒœA ]'rPҢ}9fxp1M]`Ipe] VUF@2^\+>c(S[a;RPj@ `L;7ͦ C;WI$=瑛d,kMm ځR_g)pů PjJA,PJK I\bn$*Y쭷u*w4eE9}7Gk7@I[d,uT|_ c,x{IkkGT4FRUhJv0+dyJ͋JE b|]/mTJvR; kf$s]C@)h@ C%A#P`1*3)lM T *gCp8fx ˅R2; vsá4N67?Xe,JnJu?iCV~9R;C)q zP* H~ɱ tgx/ Pj| )v-P _t ã ]UaMTF=>~1RKwmݢL+W}J.P*c:}J) r&A6jhz 1E(Qe=أf}-7NQ `%,ҽrA7;(UJZA(Pj@(8mSi#!J6/ d> ˤm3˷'F {lO6z%wuJJ5@ `|1c(U4fR.(=l(c(H(/P@#z 1v)*dy@ `|5CF(/P@#z XHU)jCV~9j>R؎TUӟ/0rm ~S?UQl鍷ko REQEQEQEQZz 1vݩ(I$aQ b'GQEQEQEQE _Pռm:a ((((FTlD$(((񫁍$c&)vBEQEQEQEQpC),;RUh*((((ƳZP_.RE_s((((j>R؎CLd((((ᯁT%v2EQEQEQEQCh]wJDQEQEQEQ5UCV6EQEQEQEQV1jEQEQEQEQc(QEQEQEQEQJ ]4%P((((jCV~j ~G}׷C99/EQEQEQEQ0U1vVk_R,G،Jw}nS}wY?ZvmRۯ|&WG7:fWVݾ'((((P$l{Ĭڲ#'| j(_ϫǖ*%(((c(N J4JGG(QEQEQEQUJz(j^@oKoKWRoTt5'b  p,z~Q7S:z,%@)d~* eaUX6Ps+Op+fv%z38€(((X5CF :P[m9sX̟vͽN~s+KiV}cNkV?%^k=;˃Hm)(jkdPVwn=:y!^{圚tl+io_?Lϓm8JJR_ no*/tH[:h^{(J{@I*EQEGM{-}V>xd2߾k]ooT=u wT@)9Ν/wG\xMQT՝b˚TW/=RIU %I[=f-Gf?)-&^UYLt5 x7V*u(QEQEE+(N^K6TjS55KQVwnUw]OR`cSw[QϼN\|R$4طg˸>@:J(?'O:Ϫw;Jx&IɶؾV,,Su EQEQ[򱲹 k]At'_VnIn9YC 7Wfu+c\̯?zwy?Rf׫^STE}L l$q\>FQ+Hi/q+(׬eh]ˑcg·% c(ըO>Uk/IN->W?9q>]ӋoRJEQJꙿV&ᖿVO4Ey9Otٙݗ N2uU\]R{}D9_-J}cRnManus*DQTr=kɿ^5_WPoÏ>~޸Iύ 1jGޒQP(LJ?͠nHkϬ_TƇԋ'/3.gu/}rC%%(Z%5s Uۀ. Sأ1?i7y`{vtI].C$ent8d aTM vܠTn,PJoPn lpC+} %E]a5^ l[/[O#)7$fjqqIm/WzRJ.-em*(QEQ,JKO)EsǏ˺8àRn(mςtwCV jiDQT]gew:׫UJ~oMnGD _JR2 R48+t5~T=w?wݣN]ꠇEQEQ+RM.iẻx\5=$r+7qs8fKn@ [f(%%E5޵ {Mο~ ʻm@JvYp~؟JChvtP|lM:=dY "/i~Z^WܙEQEQRWU_esn]9Fa۳mʞN+ϪܹQ?zV=||}⷟U'Z{SEQ,UCV %)m$aq$43.Z2Y˞I nyJJ;g_ H˺REQ3/|_}ߥѺY}#c,uQGvݔ=NoېItzGQEQUPkԠ%[Hr(\Ѷ/u+ɭ{?Fe `yAP}wXj(/@DQEQC];x[cp%(Z1+Ϫ;EXמ3%%(((c(U4fR.{TTt@TΆ4`qf]c`p\(K:Ci-}l@δҁ6`,(!R(}v}(((P_NԝP {B^yn ϼCЮMi!x>Xґk z`@y! @I!-yCtv&% \%RG 0b4`DWYY]U=3W9==]_dlryE Kn/ww$yJWxMˑ0H?ښ]ZT[Tߢ*TI!ˑ~_Y f_,_rO[r<|rv<Ҏr=--7B#,#w{OCndMXr5˭K)k#s{BMr[gk"ɠQnM$!5#۪ikleq nkRwh"}y_&f}i&N٭fkR'ݵ&u퓵5rKZzk:HFt֤`[fk0 5H ^՗_gG[>iY5:RekIP?Jci|AiϹ$iiiii}NcŶ4pmjVYP?ʭI~$OZ>[> $A5hd P֤OG lM>~7j&U}BNۑ(u~[vm&eܺTޗ{ۋ+y./'_^qno*"VBa&~?nO۪ﭽXߢ*TI!K5mZ>H6.7_\3}m<^ﳽPO;~Qnwԧք嫳vA_FhHJ)$5bUQnM;ICٚTW%۪僵K~V#\.}5Yk}?UȋPϖ &Ny5r.p}ZZ&]x%卜Z5F?ie'6JKt#oUF&ťiHL0[>!mz6;A~[5j9!ei5V֏fX_ΣVY뼬7gωϊ3bau1b!jU!﫶:cG[Z ^Y;hu>)ffMkR_{y=pON?Y>k妟^&fyzguH;O{;}kyhi-/,>BOy;}ky姼~rndMXr5^7}~nON,UeJZK 3%_Z5-YhꬽZUZ.TA¢|>= nFnjɏ ZϝקT7VSKM̱e [ g ) }=ϖu[@:raőW-d_vHK!ʿz b#Q[/!ο .]Ohޜ[~[y?-n壶.^X-gօ%q:"ZQ#diV*ˢkK-9ʕ}@sCxx뭷i͹sn9tJGhU-smɯ..ֹiq hch#-YܒI`0sneH[='W:zKι% \/,Y[hmh#ϫ[Sl(`-j?U̹|Q,,-GPJ6U>#`---Yܚ}MB{W-nqBLLλŞ5eh;Ej  F9X(E9t[=.[Sຢ&ŭtVK<&v̌>QlqHx0 Yb{0 bi[q-D8޻A\ N1΍}?Vl7ݹSE ޭ[=ח~Wg;o7u7/Ilz7.Ol7ܵ[ ~hYؐ|?6$ߏ@ eTZznt6qEZ|l[Nq욾9tߞs+[-u{ܗUI2˭ܲxMb#Xp@lƹGħn$7.p-;6o,o\WUWpaK<&Kyar{!3aGstV*S7wVVJ2w)0dSӑ]ۑ疬;ZL'w{re&LI4QQ>̎$jhpڙwx0WŁm3b;_]IT{=Uua%WҤCy ͖窷Nte1coWš/$o6~\k_ هd  ۂob5'xqs7[cnqCOï1㶳ľ#~w-=Tɏ^|?n{,DXZTs~&}N~V1?RO/_,8]Lg1Yp[Y2XĮr}#3J[O>8rS2gu'Z>VOv?dǬ/k'=fя͌FLf/ Br[YIӎ|;%v+Pؒ ۔_ &?_gk^6gK7]кjAz]^oھ_ϓ7^2}Ra~gx>ICws|-=ЏϹumYۻMܦjw&=&w/a/7T_O )jb1tsSۖۧ?v \C>Ǧn[$MjtF-M3pc"fuߞOl]fGf>wj8#9 &s*Goqq~Vc.+8~>G2۵qϻo[_8O[}Y7T/T2џUk>~[6CxNY|2ϫ3'c>c$v_"yNv24V0L!&4IxB!S<}(qJۅ';r}{cnfZn,Xs?M(-nɾ|\R؇>G;Qx̾>/$GlYYq?O| f}ynEn,61kWruIn^5/aw^βw~t׷ˎ΅lky}PDzQ}ߒ߾p|z՟[~O%8 cGn7?żi1[(__C/jgyh]Q/\H٤x_ζu|sZaKkE蘘b㍷-$ D ;li(Kֶc*%FTA %#S~7Ic:>7ܦxkPqS–~ۏ؏`C<\}񐘱9_~nFoXb,_7>i1} /B\m+ ħA, HQQ(uuXq/9MU-tt(n M%`9w},{kBU.ƾŴ#s+M|ͱ?8֫uݾk^ww~kaWFy|c\mќem$a0B0d+tέK\YSˌӑ[f-3r9fwM Y%/ _K$*.u;j/cG:#f"o,c=CMĬ}_:Ħ6LxT$Gސ7@=yC⬫~Fn.mx3jo܇\oܺr] %Fs+lt69޷SkXlzeѹsbߜ|{I:r5knsCrI> Or6,LĊ'^dCۋ)\ Fe,cY.-nEckB?:BTV>ɔ[f-Be'S%NYuvsyE4_{6e|}Mk~ ^7kF<}#~?Ccu ʷ+n}˶l:gƷ->_KO8?Wjsq2#=q_7}XTB=7//ߌ,E%G/6)%7j{L!Έ{n좰rT!qߜ6=Xso> LHgyٖ:v]/܊os3_m+qg4JVxqm=,]~LaP?c꽤˷->}<ُq3kBB[gX;62 [pO==~|ՅT?R/[VpMCs5Y0cNͺdӽņe-}t?q3Z$M[2ĜG{XL;3no2 8]x_|/l+/^*_M~G.o3>ߪmsvkZ˶7}e^8?1{_K,=W[&z|NΜ[eZeέ)vBsn5Q u[ܵIl{޽_|dt#V 55fhVLaEqŭ7*>wFTMbrX'&p:Y}hQDt-.F#-=3Y*,>e86R,Fg %%/濛NVbyF&1pQt\Yu~x5tx49NDZkV9Ⱥ3nҏwwyvC!eqKbd5zέK5Vڲ:ٜ[Zr9m6&c;o&Mƍ6Jz/na*·?^0g}1D~T{ı^V#1ŐZ"Y?1y,h`MQ$Q=r P,u#k7KܺΕZr{N~͜[%.v7r X0!`1r c9ґ[[ȭ--g--+ޜ[K[s@;:r4Ϲ5`+Gmsnz7i u Kȭ˗.s*ΩuŹV?:8K%:Y1?7gi m䖜Pތ:z:+O?VU?Ҧ#.KKUq¹˯ .Sȭ.3gx)U&`sntjRKy1{zN17;O[2f,n]81wkv^z>% rd,@#[9K[GGϞ9>878yU/ӳ|D u,n[gϞ/Q5+' Ͽry}z@\Ŝ[Wۃ:}&.g5Qν57=5'N8)^~eqWϋQݾ,dD 2rK&8zk*p'~uV}DQŗ^|I#~:l52S?ʭI>$On/_~7Hy+^.Ӿߚ[Odr$5yG}&U}2<fkR'>0 IU_ܒ'wU?`Fm~ZJޒ.9ˉg^?#_W#N^=-^=qJr8 ҋ/_yI%⸴&yc}ն^nbn0Z{/noя&~\ekI1".[>)W5/o71󬗾߶]NK:/쯥iil4Em;[&f.U#dK57;'NM\'O\rN.W^9^ٚT,rkҶK5}&~ˑ~''K5mZ>)Ś6IU4 5}&~~_֤O!4}5QhMmS1VU{x{g{+{kI\<$Ν Ω\̂b~.SyK~tQNWucٞ=nMV<'k{k_rV}OĉH n/'_rO[?r<׏.mg#,?nۚˏ{g}oyey5~`Gnd.,u\ZZ[><(wٚ}2'NiMW#.[OdgkR'Dj&U}B!4chM6UH@?QYtKť/("K^9#^7t~&_U[5akW˯[IUZekI1s~'ՙlM~9͎|k5מ?NyǡmWe䖉% \fy3.rs:gU+~ pW?ʭI~0 5}&U}qp^۴&U}rV,D]&~3_ekIVgkI_֤O!dm5iZ5g^'_-%e9²bZZ_Υi.X_c5}&U59\~ob~I+m7ÜoӚTI1~'9wٚTIy=fkgf-&m~NWК4fuGn-so–ɕJ.ϟΝgϞ%B!B!I9Z9J/ .& z-qu-?rbyYq{qj-9*~?ޚXNZxⒸ|>-pGn-0|έ[9N?yGV}έ.2ܒ9jUf}9jKUD`:r%[oSrFb QYurͬȭsSsnQTZ~?ޚYjDȭ>-Ϲ5`+GaZ[hcUܢ6Ԝ[rU6gV9jc}MS@Ŝ[6s c˛sooO,7}6S@]ŭE1}DŽ(Ჾ͘'&EKMX},&n}7M_8 ScFV꼶}`haZL&!y{rP9eE?ԮVwlV -G_~d8ġ$w[ߑvoNVaNw} ݷI]>/=Ǧw-Q̹]zϤ qz -(r;\cBl=tRLTA?wziܜX\}44#[Ûs7ǖ諶no뢸uǴ86qbiw޹Q6퇳zy< ?)nRwUqbRmsskz;=[ЧnNޗm[{J^Rc\9.?w[^7#wu&&Gw{ϫg#eyR#ٲW_ޫwxvŭ~X?=>L{~׌kCb7%וb;mO?6)_#nKݲ*_'cduY/ŭE☼ye8ބŭ{̫bys|cNpV}q1JtKM֏Lvܦ^=]=]lJyL,^)nX%Vű=.<,_N]r[6Q#6wLhw}n޵[rF7-͈Wg fn^Q].};v$`d?eov˺V#\7{ħ{d0z|H]%O\3e{;Fz}:+7#+Ք:wlz0N*ܪj(:P~[ j/cߏ/biiI|#?%'o:< >}8q'Hwܓ1ڢ6q\~Ty6O{.~_ޗkKj賸555%ooI]|Y|Gշ`]y>ǓsS`=VkE8בb_-Hī*>яy}K?g?+^b1Vo▼%QQ;_ؿ[lrPBqzT|sOH셯,bS 6cfF1bF(}W|uij̧\?9HS _\{b[߳IܠeG:[W.;^S}dcS ݆uQzUO&2`.fQ \JQUԨM{ 5ܩo<-;Ws,?.幽e_0}H~ҽ(OG4+n*]ܲo]Z^^Tϣ\5>yvڧ/}yRǦI#̸b-nGn؊뮸%N'_7 &gryA[r5Blfd_c iN~~O@~;nW6nHrѪ)YǞWg=V-_X-y$tQ+M/1=-u[~QYp\Ss*{ꉫ7ʉ_ǟؙnVܒ?/“)n;wNٟXTL)lK>s#=Jλ7쬘}vZl{5[ŭj~5cvG 6~+&)om'7)la*ܒieq+q/Y/DsXAf8W?q|6/l[v(GSN'N=,7M[~{V/rL^~#{8Ҷ7m7n9kHFfV2_V_HS/ձȖ1/[U=_8wk2ݻwVMeg׮$֑~GV(>]csߊ^A{ss J^|E1`(s Xw]}{ u*n91͹eFdn)nhB~!@;Wަ> F`|;rb.[ K9)v>X#0n*[9*k~6s c˛so@_F[9~6*ܒi)n #VZαUӖvsn`:sj)n ڐέe2seϡMh7r[~Kq mldɌ?HKq m0Ɩk+-|^n)n~V!B!B(zVl,BҮ[uc%?Gbʯmzu̟JM}k+ͻ9zFבֿ]ࢸuDLm/uzys-bډz*`/f]ޜ[f,7#9?`,r:udf1uTwoѼu_z5/oMp Q[ Ԫjzq<',b[w[7Cq9JȪXvbaz`>>g@;oݗ_mBU_.oLH.n-U[fŭ:r"FnE[ [?/JcoD[M?|-=j~kqKsB*R~!kVzL{TT KzUjzдĊͭkkq];ʊw.[e#t1)[gVJQ%U2Klz[뵸ujUϞ{Fc*ԾU( YQTBE)L5*n5`;疗Z d}u,#r]o#clϒsuF K>tDUWm}[h|䖙#?`Kq mldɌh)n~2#"}[h#sKo庱>-nVd.--Q{έ --[~-[h9}u~)n[Hhڨ=V--[fg:Ps-/7#JqkiiB!B!Bs c90Vg-[h[.6sڈι5v-323r =9VͩUݗ--1؜[~ڈιiuKq mt;3R3r 9}u~ۧ6ܑ[#n)nlέh)nvsnXUH[O:$Ѓ3g`Ԝs+ޚXUP[)VVVtYz`baaA2fvLɽדӢUT>rHz*nՠssso}Sk-ЅlέAF^m)nco}kEq tݜ[UaVd \OַaQL1!VhFl}8.J{'e5[vImtj^gnj^[bYsn ޗ_緻}[uΪɓ'-]K[n*-^m??)4`{uUޗ,:=ٛᝃ,7ǵVceFVZ[Ԗ=+t?ݑ\E@q._'%MIyT?2s]Xڠgfs(pLE?Wš v99_<3rFng>\[_"O]TBΑ]Hum.ݏy%-?:|\OޟTyT~~yqX=g烽6 -ȭYk#֖PQ6t,W}W^LQS_l/=&bX^p!v瓎G.1DQwl]6k\49[-Qf_ZE,$bRvᚭkp0$.>m_;*; [rU|şٺ*n1X Ζy?v29ssn #Ϝ[~?2rysDLo0 ZeC(snsl˯M<2r>[rCY ȇyq+y MlX(I=a] ޞԟ.LN*҅[vA+nս`͹eF`[[ m?++HEF7܊"[?/JcG('Rjz99ҶjN~V;C+nbURQ=B/d TJ\RUXң>vhV&<]Oŭv+++ޕ+W>R(nŤl[)YT F"T=jZ,CÜ[CrjUϞ{^cy|V1hBQ5*bUHaQql-?f$߯ٮQE%#wdA'-!?ܖK?~2ŧ|dF`eۨ}s Ө%5`X[[Mx?R@ȭ#jM}[h902#Іs+#oH --ܪ9Uk)n *s*fD߯R@zέo}u~{j)ntV͑V&~? -[[snWU[[hCϹϑfUUv!B!B*dJ@̹U>3R@%vR@D-Z"sn`l 66[+\[yߌrUEq mt?疉œ[&`snuR@ȭshՙS6soM~Tz!1 |P,9csnTܺoN{ H͹lSqK%뛪@jC:wJ67#~q -ŭz̶o~~-~ 걷5ӧO[(i&Nbdlv1#o\ke&nBl?zi_.Kw{zú;-ۦfvX%9e}>כ'_|VET/c:ك&;=}:9{{>؏[> a-r[uΪɓ'-]KBvF"_ɋJ^y",WZr o?XaGbWR_ھ7ٟ)BS L Yj*&m乙}ɯ+:OV~C ee=}/g0lV[~-ŭvا42좌Zlgˢ,ŝ|dz…#o gɺU$p&_ud[gvApΩ't~i?VUkPjVhԓebU.#ҽob'4rKfu侬QZwLSns+fvs.ELz9[QKCs+Rj*E&U`2TRzXEnkP@*T V(xmFH9f$Yʻt?j+ ݏ([v,HprȱEGeQ|ɗZy>֮!̹eR\ȭv(n[ * U]E+eo2RĻv#t?"5HqKm?+tד.LN~˟vV.;rT]ܨxmG3AJ [OznsX9䈪P[ͳz#P-T ]#$oߕӹtDG5d87xʟQڠ7uce#eV;FM(T.F^ f{]ku M<ٿ-Q瘁q=E 9p!k?]՝h5T 삖Wܪ{P7V;C RMe#ŭ_ϋRؑ?#)Je04Cs+Rjgh-Y̱ A*أGH[1?T KzUjz0֐ܷkXYYѽ\ٗBql$.&e XJɢR^0 QS0cM? Z+[~9Sq'H.=޽ ZbPYqK+/JZE5j*TĪ.n)TV9\诧QE%#wdA'-!?ܖK?~2ŧ|dF`eۨ}s Ө%5`X0IOq m -Oq md#S6sBq m aέxKq m -6"snTŜ\F9L~ *2))n[}&Iڈ̹͜ZU--|-5'a-tisn۵RZZZ"B!B![~[h#2Pࢸ6Ϲeb-t9L.Fxέ.[@ڈ̹[~Kq m4soM~@:skϹlM>-sk902'c9Х2-sk8--~VIs+C׿6PzAx[뵸u߮beeEv/-1!&&{'b1]"OLOE1}DŽ~Xw2#nMz-nՠssso}S9*fZd]zske(spQjl+ [7z+pZ;b%([`4TϹeWͩŜ[a]$S:}uTU,nbXMx%a7/|Yy,|,Sܒُwɽf\v,%˲WVKsn])n557; \'OԷt0rV Hb23NqNaogCokkn+Hն5I(n5wj{?zn/n>ryTc%$~hdW`ྍV>`t0rkVwgZ*@%ߜu} R5 Tv9U#uus-sn, E Y!Sqt,n9ŦWQ*ȭ@ Fn*?fW-Liap@KIE((UQr?QRҷEG8vzq1Uk=)8SGw['#L䈪[@ "ܯ_V%a֓ \– V;4;Rґa6IHiQ-4ѴgU/rȮb#J-u[WU~vBū:_U.pQG5V,`m@sS=I_5VoZ[-4QQr>JhLqKUj&yG>ϵ~lU/>r~M' k6[&uT:=,~zAآ2{:,JQXM%E&ukp.^husVq?;zr^9UQr^+=N_7{?QzS=rmkGH|8{2{]_~.[I_PQ(B4pqe–χTH%ۮVh{%۪_gj~kL#oSq}^<ثO<>xSjn% J]d^:麡Vz\vq.c#35*2sP=' )(nIٱd!9U`-H\멸/=%pV|[;|A__wInw_|Y WW)[)~AY^j>rK/QʋiNJUx2vQ2ԾrL[X#`q'byyEy3u)y2{]X-TrAF^.pŭqr.}˥/g;JFZ.nկz}SV. X>ޜ[I=d?y^Mũ%u^%e+}\K.ŲQ^ɞKYY+y>8d[8 f<.-Oȭ+*Gފ[r~Kk9ʕ_?{Y֣[&~?I՜Zk[qn߸.[GT? {'[62i_ŭUY6u=rKx("۠ԍŭ((n0Voέ$k? BX|;뭛Eq [kGܧ3!)5">obBvߞ0.ToOOG tEMH.n-U|-Hl.[u?++HEF7܊dA/R%FZuIn>Xgʊ[j_yQJ*(QS"VuqK0\ϹjN-ӏ뵸5TQȝ뤅!YoGH9ҏL)F.<X6j%-\4*nI?2iާ6sBq mt0rk|-Hl.[h[[Ϲ&>-ܺ⍬}F9Sc--[&Fsn@(nFn R@ܪ˄`V!B!B*9'aFn]FV>Z[h8rR5Z[h9L)n2P@6GnT܊)n Fn`lu?ߚ$F6rJZ[h8rRwXKq mԘsˤ}[h[&U@(n#k)n[&~?؜[z-n=y萘C>(Ϝ{X߆0rˤ|۵S^3‚eXfI1=vjQL1!&&&E1#znj^6o-|V9ZddjPr۹9qI-LɉɞBq _6rJ`dU-ŭ̶o~c/ȑZrV-Qq䖉[Vsui}Kv +B[x1G>Ң=g}owL'ghE K} G6_:~h;_",n7! ylOj׏M52~Vs|]suI}KB]HNyaVq*S 3 Q)׉ CY(0rKXiNsxF QYaߑuU|\u2BqPηkt :QUZrzEŭc_]qQ(SۅO~G l+"!ȭZ[t[Xi\ܒ¨w 7u O-?9BOd8ŤDT|Ծ㖎Q8xqKg]%z䖉OcnVw:ݧ_myaeՋ[VFKH(vqpku7%ˬ? GFnQ!2)._ŭwD?xVrAt[0K *v!Hd9Ta*ZJbdBT.UY~FV ^deʋ[ce-&6PڼYl2҇yu[B49˷o;ok,Q@Oף]vk?VU[^g|,X*ܦs~[~4XZ0U~/MdP[tQ/*du–d69#$Xu#[7on+GБ] ԠU_^Hfn;/ﲊ]ɺs?]gןm~ 4b-bέWu"뿜]㣎/PX `A3Z乴v/^FG{.Z*Ju.Fq`5_*6d#dUURwXKq+:5(){7r)K͏-֑r2HsC.b.꼏E!sF4M.bqm/Q9%Jbjs9:25b(@{ᵟ_ϩzyu(Sck%p#8Tcmg_?fQo#zfeRwyz*n_׏? ~~lQ}}jng_UqK[E!s1[(IGvօX裆a-[~ p%9YsFIg9pő~*[Gˏʊi1*TJKzŢ 짼}"7l9֢snTYOŭg1nxEqeQ=ϩeҿ3 \c'д.BE yqf_. h>B}HA g9-F+Z?P8S)H =n矗_t:9ċWU<_2r9zdŃ*nAS[cO;ֱGnK] BYBͺ Q#BUb \׾9i ^`ϝpB| Q▤Gr_s.P,++}*3_'x%邸Wv*z=j_E#L~[U88YoRxq}Eܵb&})g:.\_(n/BjbK2[t.F,eaz^u ϋb'ZQWŭ~CBzE"_uq+ f~T?t_ECeR\['"WĞGON= \A..pQXEɅ;bɺ0Uj%yQ+_0(8m[SWmrS2u]8){N&vYERy.y )m(ܢ؏zIַ۾'cJM/֢snd=d?y^Mũ%u^!"V^q/ElhP3KŹPu.R~ UF_3t9 v"YP 3bV▽nsOCS(DY(~)Xŏ+n9Z0V_kaZN,r6:^_(n…ZO䅳s ڰ!I% N֨B?I9vFבֿ]Z-B ?.መ} 4gX-֨#L._ŭUY6u=rK72Ir9E9sG"V(|yu3벸剞\r-0*#]Ss"Idn' & s88E!8d k9d7EtUwda8E=+3~qfVþtY#q2e*bŊ[VwQT=r$9eέQ/nINA*T Q({t[W"w׷5H*B%z)*.ym_rlGR~-X` aIq9ŭZܒX#h[L_(RK >vh1Yȑ%_] m}슏yǣȭ[~kYŭv+++ޕ+W>T(nхlx"ŋ[}8[ۮj)s]ҜK+Fn>Z>FZuIn :edWH\/T,ɷWPA/7(]q.UrPm} >caouהW(*l Rnq˿i)缭"װ%M FL[&uS@2Bq m0Vȭت30[&F9Bq m0ֆl$,8Yd9~6j2~h?IU?[h90#L~ 9~60rˤu~-5[o}]y[ɲWV !B!Bz̹%YUFBwB!B!lFRɂ5Jcsh5ZSܒ-9")lB!B!75Fn]^o["B!B![&~FdqKαUF 8!B!B!>!B!BȠ)2V|[eB!B!$!2).ŭq["x҄B!B!ȴsoM~ fB2&B!B!Dfܪ:iB!B!Bd6d#dU%9c--B!B!&5Fn]^OqB!B!I9L~P"B!B!mœ[B!B!dlSeͱc--B!B!&CeR\Nq/<$^-F?$?eq }=K}\B!B!o-Z/n-/ĕo^>]Ƥw_<\ -B!B!0Vȿb~UƤu5GlP"B!BzɆl$,8Yd?6V~Vqkkׅ%}\ڦ Xey??!Qqs,G>#sGQJG&&>*۪F6uMGȑQαv9!yy}7هg~~6fYr[UdO<&Vq؏׷N!B!eRwy~ŭ+osWϼ!O?"ernhm*`O)zO qNO(w^C!!2).%?Z( }JőyU6mWO9 [ITz/[E((ۯڧ^zdVIq)QEtNo~U7GG[BV3˿}x|pyqbA'8ğ c׹W?%kЪJ.mz{2+u>\OOsگF{xk,W!}{=SuR%~sGqK:~sלko~^LEzV#惡ےwhm_DWJ I煢tBs_,%c9ׅ&oTd؏_~U7-x!E SN Gwy8~(~7,lWi_Va|\6oCw_wCVˋI [ud~鶳⡯Y?3ɺ hW ݂|^JWifŬ9.Ky!Y|gV|/oߜ–x}/䶗i/$: !(n{C_ 2#_;!|oڽ_.;Q[f=5zK>%]%zx qb*DGPZ乴v/^FG{. EJ_ƿUj&UɆl$,8Yd?6VUnGqKN ~6+nyRz`^g7;;b֑[:aD~DO~sDB!F%4 鲅S/`:+?Rw7jK]k/rI|rˡ\ZiȤ}#}j;B,Qp}[)+>Uۯw 2J)l?ά8pP]OEq_SEzZ js.Eo`?-~e9y,?eZLsnH?K},1ɗ^y6/p [2;Ps Bt)Խȋ/Bœ'>)*G& \ā]w e%д. Iř}f]E)$0j#~kc9%IA΋!ٮxGх繥*~ I =nɏ^~ɬC^u[s+?~(\57VtB/,>3"^]\)lt:w%CkC@!QXS|_>BΖ?[(l#qr+p]J.s 'RgBLu!ح Jls~~9/x ϝpUn+>Ž#TqhqKm(WU5Vpy QBje'rź0#yQ+S~Pº|۪ sΥ&U{. Y;ed׬DRy.y )mXprVvJoבld}?~2M/Yo-H_ŭ+oIOXu6r>cIdkc?tB!iq#/f򋨅Oϋ|)I&/\my -}Z/_Rq.Tݤ.R~ U=~JiXPV8ɺbYǷBijsOCc^euCsyz+bǏuUxYOYssnȏbU\rnWG4dHm!B:}*9^ngx;[Ŗ^& G_ms'~S~}ÿ'~Cl`xQJB gBYِ'kTЪm,nQXcr-Y 7>Z&ueO*ׇԆamǭGK)oxkާ<0@BYYx+w NW1*W=i)x;U"Bhj2~▉%%=K_VzqK?^sXZﱰ׾J7肔[s|y缭"OVF!B!2b1rˤ}[B!B!MsF(nB!B!6a-B!B!2)2!B!Bi!2).E!B!Bڤ9~ um]Ŋ>qB!B!BV}έ7]eW8!B!B!TdZU,nu^RߒC'N!B!BH[&u9E!B!BIsnՈ)nu5B)pB!B!7>uFpB!B!f)2.nr,rɿK.E."!B!B-Pq 9~ ̹4!I% N֨*ُ͡մk)n#L.ߧ6sF(n *2-r[h[~k6s ckC6JQUCi?R@5Fn]^Oq ms-[[ő[&~?[~?R@CeR\Nqk.&I1cF\3;&ʴsoM~ kw/}U\Z_k[!Ŝ[=byo-G-06d#dU%9c/n Xey??!i}]޿v3*bbB*V^>)n};1gm1#۽c-)ny^!f~CBy{rRCNq+-HŤbm'&B Xe -h0-&}3)nsˤZ/n] ܟE$?iqĝI>(YIw.n"vaRuQ%_3Z-h1< XjIENDB`onedrive-2.5.9/docs/images/application_registration.jpg000066400000000000000000002015301510276244300233430ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex1515 2020:06:02 09:20:592020:06:02 09:20:59Alex http://ns.adobe.com/xap/1.0/ 2020-06-02T09:20:59.151Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************}<" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F+:ǦXaĒBNH\#.R'.XۢIrStIEjuk zY[I4fA i6sӞ4t%WEs.,vjI !xX) A*ck\ۯبwLpz`՝wWFWCS wn[^O'۳g9Jҝ'RgRk;Z+5d_blLl^e ~m!lҖWռV[_-W+!ӎkI^_ׯ35}J{Mn3,DgoNvWeYgd.%Yٳ]|[N)BFMڛW k :z]Fݼ$0ٍc8횒}J9&ۖ .0;Hg:(簧%|^?ԯ5)ԭc*9S&Uq Sx cQ} \YHR[Ye#ۤ$ GjڜCu }h& i* vg ӲYO=(rAwIru!,D_OO:J+}gTE[O}+FYYp껳.}F{rzvή- $5C) 9 `Q[E tzʶGQTu3Z'pG;ccc}*( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 7y2 S08<}MME4M'^[iyWv۹ R:Uk]OE#oř$ˎVJrJɉ-ݢz}M G 0N8Vt#mAs$L#Ң9"B"T](nbOO&Fxbrp:aRQPXAjƒt'sպ)i=+ [}ZO6LUzd+W=WVWd[yYB(ĈVO#zܢ;}nm!Er:#! yY\-t.2HY9a׮qWԥn15MNʄL c-]t,݁[hS7N0e 3WuW؅F m XGo.'F%eN[q_'9<$,%Nd˙ё9!ԆO~~i>gjNKT"V9q q!n'4bEZ'YRd47ka<2E:‡搁~.PҮ&/$s>p~o5j1u &HV8h2ɪ_%w:ԾTr6Bo(0zQ;UNK)<ϖ'xWPǖZ72socn Hlz6+OkN|F'kamcjv?)O{[y;K+ r=)ڿftǎSi?< +v"Gz7"rstޟl?E̡d]$l^~|?7Se{  0= ~5/UiڽHnIN:8Nh᷉^MkH,\j:5א0A28 |Iuugo,f@1s|q C#,܎8jQ^/gQ#м]yo-MeErǧ2|1$cԤ+mGUP1K6O"=f~S&嶣޽ĻVRŎ1]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|IѯڞAqUֺ݇(_ m4TAYFntQCc"g>&.sQ]i!YA=Fz}9(twt? 11b06mYѼoK#E,}&姶C}ݝpY~55 M<}yecpf r4`OJ>Y^|CK˹̌lY$㌜[^àA].&DczO? iMRIf<[c,- SD~j5mWᥞhWnKltHrrvq6j#Pz+gWеMI3g qQ@c[⏇|E6VvHA Il3d$?|]}6ڍjbw8uwP?|]}6ڍjbw8uKC:|&7%Žwgsӿ~+<\-K8n㑣PFd-1P\I[~֮<=oow_~׏`sվW]X[]pmpV Mnj8c_S~֞Oݫ"R{vއֽzxO]mgE?E-mY# ǎf24˶m}y5Q@-xoz3eaAb;ٯ6FBq,I89Mw:w7-s0 18=k8&_x7QG[Y-8L|Ú[?OZ[Na 1\aB<Du[bL[;pzәsU%m^U'IuEp |9~kq}qom|pk(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((sUlzv*@g>Mt`PTA Xue(FmRJQE|9sv-m2kHEy9# InbkUྂNݚKy"*1,dNM#WP0RPyC@(kq!HIb9 8jEǞ(9%DyI0 hTpL #$I!jJ(p =h_ӓ>d*̲B%mFA$chcOL D,702?:}^46iTNzuaQEQEQQ:ѫ .ـ8'8p;wK,pBh(I=:E`H*FAEwu 7Os *9[xYQ#PIIEUQk9' w ( r3uZ(*+m|=rǠ%eI)$bHRPE2Ig*G0DncSJ}QEQET0q,FCc߆=jj(jv]%"I$Jnw_`GcWmQ7ҙv7 3 R+@rdZ(%O-DNrTqH ` \Hw8A6~O<%S%(ZyR0Kbp=DO*F)v,N=QP\^Io{@D7drix{Zԡ{\K"F1@V%զkmu$RMw pKM2X9#^Eyƫgi;l 60105حI.gy7'#{dgܢv˽.h$Tb샕ʕ9#S7 8m5[tvqBq]CwI W2ڻ ]=@^VkQERA1„1?#\w2A2Fz{WQ@%A'ҿR)bOVb]~ Gl #V%7,F$ӗѐ,Xmt;s]ޖ/5+[g5{n4wB7YXp9'yoӾ߫\ǭ:b/DvvٕmCcm{dCA=9& 'h|?~!̴" P>ܜ'5TP[. /m~j:{,wXKlBxR:-ޱ)Kvv0CqHZc;@@^.[lO퉗Q^<JF1rݑ<<'M-343^l)r3]Gq 1^xytmvI5o!A(_$瓎+Vi7ֶ}c jRw(pIG98^8m- X5Ku U5pxSӁI-qpq9fo||5V^JCu5h0=M!W>K;FGE8ueqCoj6w*ЮlJ,y`sn;uaiSpOLC0f$tF5P_УZJڤrݼݼAh"Pqئ4}K3\} "x` }]mX("0uoD#2)hC]A>u@Z[֖5kaq;9۰ 8r8 b |Zm$LKNbǠ@>:iuwnw nNZ"v.'e3_˩S%C!$ ;a~2c^+|Z]Z[hX1cPEPEPEPEPEP\Iڮ&lΘ#Qf^1]uS]#MMU4Vk]Jо3zķmXdOo!N@ ۯZU Ij亖-)A'1Civײ^[鶑]J8]d'j|5O?Eq$=_=x 'oo5It5`#Bٖ\.*Kx'm"O[^h^[dJpR"ݕ6v: ༰M,cS$b [5ˌq a{CRh⑶l' N,1YO45ۛҥA@x<[kimchV[61 DQTz.[YpI8-BF6C\TqG83+;pvH (3QFPSkĿl[~o9;k7kic"F_B=:uoivp>]K@1 au>zX$$E/ʄ(|?N}^Ki$dzi(3RJ0z`sŢP_}gܭKQ##%y]D V&NݖypP nŸ3V~7&)ۤ9,SLO}j^%ҫ*TOFJ=؁OA@R+PAR2=ih((((((((((((((((((((((((((((((((((((((((((((((((Fw"m-ūdcp~+8;}3]iucxole$̻Е6v7'Sh;ũ JQK'/^r{mErz'Mm3_4.b珺zU|;0׵).4[RZW{dO݄d<| H8@@ֱA l$ ;@'RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\o \&HXlwnCEq^$-I?ԤL~Z0f`/a{a7q[[.qv]Cǔ`7nϰjRkTKxm- n/$j(:n%:`Mis98'Y *MVtYkNf%;B7FKSu!NҦ[08{u  Fȑd)b[i+:+GԤԯ5WV"ч3m'Q_Er njAmii َ7w:hpnv_KN.uqtcͲц:kEsV6.-֛2HY Xk6o{o$\A)p/"pA$1Ҁ;+UPNcp@Y6FdVRKq5c[gH,|ꁁ ?{@:+u˯BnuY^[6L2FYr:ǥckOhښe]7wv;mLg=ހ;j+MWU0jpVhD,BT$%x [ڭCX46?kI Aّܳs7[RZH9'kC&U ˷?1ק+_$da:,m'˗W\(sCյ{(qdRqTe0rwҨϫZZ[,vA,rP@C(N;(˿^km&h`hHq;L]U&ha{仴;1&3+)bK W qwڮ{nykKki1eOl[ޯxְ ֲOXN )X>B3sȠ,I6WO<^Mn$Co-vLju{5լB+hd,ada~Q\U56-L)$P#`;8=_5$fuM/31StTW5)]T\Eje-0ؤ"NA&kgMd+'ҥ[ e0sr 8|kut-77KܠFIę okDWw 7w2DRۇΡI!qj@>V{Ď;]u%QYyO/y%Ff)^bCan62yZPUdž˘2%%yZ8&dgmͼ+~VRooݬ,xTE])q+2n|3^q+; ab8^8Ђj-OҢ+hVi 0ۂ8峜v.,ຖIymms^7^\%KfU6ܯ_WP$\Ip>W3e#f(e@%NI?Oa,<p\5L% qm=}\r p'0se0]1i/tI}Ŀ ҿi'#ՋsO̫s+hr[$U'"jRi 舍#RBp*FA 2˷a̻~e?:W $z>__4k:رGm&{ d{{}z5XI"܌ Nǀ3ےh]?e>%NI?:W $zGf3=pY|껊y[w;q9/W,5D-*Ho#n9h]a̻~di/tI}Ŀ ҿi'#Zι5vFfy%{)PL* r*{Oi7HˈiChٔ BzZ9es.ߘߴ:W $z>__4͞io'H6AȨU _}26!_99=R;Q̻~˷E'JG|K@+=-tAl]gx$BC'Wnᴝqjkzu3EpظU,pg_ i_+(]?*I4>XdS:ytU2>SڨxWQODoDwWI(I|>P;w_j7-OH%?"U~?Pѵv1ek1 TV`HQI0y9΄ך<ֳp ݸ9tĿҿW'$Qo[J\G*ru-BHycTf&Yr< c q9lQҧ Ly%dKo[J\GټKAm+rE9W̬-Gsi[[<")-1*TL&r 9E]Z\/0Dq$[AD 9$uu_ i_+(7-OHw9W|7qiuatGlO, u)K"$%}eX\i3y2b9~S)7>_ i_+(7-OHw9W̗RPzIIɇDn-ԅq[PKo+p3fR9 zΏټKAm+rEf/r*l;);UN1V$:^uڅm9-YdI|lϧZ7-OH%?"U ]2s Nԥb pZhXM4æyɺ}ʅOvz1o[J\GټKAm+rEAʻc<7QOk$MdUP1#+袶%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊+%?"xW 9Ww͊Ͻ{Y]=LѨ>j}FĿҿW'$Qo[J\S*q"f6v{=2G}O2揳xW 䊗Mn FTBp]s#sJI=M:( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((q׊xkmXGNťϕR2)9px2Tttx'継q.OW+o8=ϫi76^u$1;lG I#UEa~,Қ:<1o@U2:0i'2EZ]iRBn/6`@b*3xPjVjS\̓Cn+Ⴣs׎޽bk^,lQ#+~B^3{SHf!4SelɒF1wip& 7(YmiS ʧLq\s^-u6KXkkb24YJ[ gW]P]X_7)cFGq> AZks.%VGNӌa~Wn|7x3X= ,̩nNx&Un!UWE y Ԕi>OI#KyDNYa&%vO sҽ6HFxJkGFGebfr]AI'Ҳ42SP_(o,ᾇ>H9+K#gkԨ*4[tKMDV{F% @2 8K bC$\Tl޾C|=z^EqюַP 9L/Nk2\YZIe-鼬@, Hkh>Vi+7^F%*wy[fv3; 1°&]2 eݹw)N9J (/tY"O[m:] qjEC>Gct'Lc1c4VNe d }Eqj>%[jSvOxKC'0n70aې Ǧk|9siiw1\OC~'[R'rziCfOypֱI ޟ&PIv23!届MijaPni^XYȉɓ3}6+<=? o6]ldh BC x5ҵo^no.RH';$ IҊΗ{幇c12~@Ikn((((((((((((((((((((((((((((((((((77^A6:3QcU+;j`xJyZ_LBO2(_3SkJ*SkI[%IK%byC2rr{t0>杬r!X#@naFYacS\ }+ |@O>ZAjbV285꯬xkA$7x}IDN?9Ew¸ҍGm/OVPSm}'}w-|۷wyy{c-R-R}w-|۷wyy{ckv]o:ifmdٿly;: ł֚\a]Æm3wgq˷gyJ A3flt#g: SD`͵,O> U>n=vZ±M[=Βw4Pʷ[ʅ)H;-t&{}B() M(?x9al%HG'ǦNW "䲶:9$}+ ~F-5r#ML4ʻBcR9nWӼKqɦKtmr̬G6m÷9`:o7R6ZMn:R3y҅Lr򎼂~qmCMXaxm ULnRkW_BZMmd3$FӻZe$l /k`X8}A|z/ϋkbT$}q|znYtI2;>vpyӊԵkcXw,p Ioۘn,(]0? {: @")XNK+c>aӒGңu/n%>v/9l~5xtT{9}鑊*pC|=Wk)V鮟H-̌\OxcfA67qGZZO5 HOZjݘ9q!a ss.:#%mlJ䏴73վOM֜yDE3+ eltg:rHV$~'NҒI^Mu则$8VwgjS 5Jq®18LmvW"ϛ}w-|۷wyy{cJ.NF8']6FK,G3;I]8׌Q̻~a/|+yLrY[>}w-|۷wyy{cmZe32oiF i`3O}1E52Qҭa+V[k֕dw`'^r;9o9%#uΔ,f&3Fϔu/k`X8}A|zxiq9[Dq&7q;Nn=TǶk3 Z2 A~%qPJgsG2>W#2_ĩHC|=[xitADS2V@6|ç$P vYis/d򡐠o,Y={Y^kQhi\FHn :/)p03˰r~nmdgڛnu9Ƥg  36:y*=w׺fqƵwEZDpp.p*y1oQKk1p-ܑ+M=$x]1rKG@$mb|zqd>-RR(V1;EKuģ}4+k~\a:"OvÒ_:{: @")XNK+c>aӒGңu/n%>v/9l~5j(]?nan$EV8'30NN-;Ÿtcm* tnHv pI`x$NeI3?g  36:y)Kf'hog7cy˦G_5Y}wٍN2utGrDH%̊gz̻3?yl%HG'ǦNW "䲶:9$})~m%&⸹dU8sz7/#o_To]L(O9Ɯ`gx+֎e9_?Ծͻ얾~lSmێ=Ԍt`11fB6| bxoW =UTinP ^>=Q.-$,rbY`[XzqG2_;%3ml 73~O]փ%mlJ䏴73վOMֹmk\խmoZ8mBo`B Rj>5avtƗQ`T@9;}#s.ߘrK_?NyDE3+ eltg:rHT~nmdgڛnu9ƲiJ ~l9}ڬ#rB9ƀjڅXR2ݜ9IM;LPwg LT|lGvu9 LIH$LF z6G?K5sZi>TmlʆR ( t({}NfF;wky^^ӵB*=^yΕ=ɾ tzl2H=U^=V}LHZ"\86:y3܆Et+mhn!i1gGEo T= ;_Zk ,'*d1]Z< Qi6:ٛY  m.{t=}L4Ӵxx Zdޡ\cćӵQѬmn4|Sub$dPh-$H0+w>s6Ngx]H,dI[4BNzw E'Ԛ 9 I I x$y=i_wf.tuIMf..!%#%rAcVM3K.53mw1b=zU GN+z/+T'9g6gZV{fxq)O)`U&i^Ky@ ƶ 7$X6'}j4O*+-5DzxbÎsOL-Z|_~$}=S54S+ypp}: ({_pZu0c-uZ.t:?(>i+G 0\㚩e.-4Wqw< pQʖ4Q}L+x4}.I/-~ЇqIr dgHI7zsLUI}2[kwZ}lt{)kuiՑUJr=)[djB6+u=}鎢/+T'1KiZuXTD$e ă$9cCNQ x,Ndm j({_pZuu9t!NJJ A61"#rjJӡ[ˋ0$yY#۳ɮ=}NvGoOqyo?ۦ3̠} 㼳 [^JζK, xmrB{i_wTӼ7ݵβloLM юHfoUČdc֩4DIc#bm suTQ OlF`Y{=4GVPptU#qLZc|B8;~X3tQxZu0,,t[tQ[o̐3C8a-om&ץKD0Ic4v $\r8tQxNsJ,-H6T(8(eJ<^k̺tI-_gyl۸Cz㓞/}NcSE|ۉIcǾZncPes/[_>(m#ЁXxWEwWQ:Dr꤁)22M~ |>T&+ =}+No3ȓ ev8]>ٮRtu˛f2<+ FXheq37ab)!qk>=[}FK{u_ݫ<\2 "0p=F:TZy53k%?}Cr|+*P~ހ5m5{\FFN|qci.o6*m,c U$zӾ*hڽͭvZssFܭ`^ޟXʡ w%Ѕp>_6@q?.ҭma7yd>e1a0I55yy7[5/B{k FޜH.mHF'-3g *Ԛ^lf/!(2+edn#94Kto%\JqʲKl1#ȫ:VLa+SXZO$B ES^2Ay3W6\}}+Ə2 :LX]j>,o\dTxIΒI(Xg)diڶ%Ώb[Y"e!1!N9:=OQw|--丵c 34p˿Rrvrź=]MqZlBdy'OaV$$0Ucm'Xv Gϵr~(kcKҞ}]]b#! LI\d@ ~#YQh\~yd'y$8{ogvcylPVahbΔZ |+,uPE,>(ҧXPE6` ȅwH*=Y.Y^I,-nZKHw vbG(j}gEԮnfeKh+- Wb*Leր&+ݽh9#+[[*8aսO\]#y<`A$Tlbxb=DBKCw- Д H798ӥhjzi g([yԭk1U}Ecs^A } !۲ARFF2O5j_iPD\Ga.pOJH8/_ _4۴Οgk͍HYN?;]5PݵI6se.G݈z0:x׻>iu5kIqҨ!wl.T69۝܎9Z:}ƁaO&7%Y$[x.:sȧڭŢ-d0q:oٳn1ިhkm5ՍY<2\vFJ2H H/#\Cİ$8-S =;u;Kmms -Hh:NK_&$L*cEُ]NT!%=,ykTz4忏ne*s^&ASW9men;Sӌ}y&[}sܪTe/<` 6 joU{&Dh$n"AA<۠ů4V(gdiD:PH=8&]v$6E#Dir@\2+P2 a>[˲q3Z76%o$iNIcpX@!Pkv-8%褫0P3)^{$qx|CYDB# FB vڲеYu8͜om23Ancrzqҫ9+N &7k!c1;ag29Ft<6G }W=8U/5ۦL:j ] @wg+y5WlROYm!DˀOn%5,o.L H3Ɏ$`.1(wJ${k__ZDyC #`S$xW);G/;]nI圶VLg<H*/u&]mސR%Q) ,w3cF`_gߋ6E ) F~tFX"G='/{I~p1'Xc[T kk~N:o3ߎ4uhm {ľJ q8<iq4pq0ĎqiBV9)`yr*͞Y[ն՝sGwR4r'w+tnӗGLQLq!O/nx=8FiW7eFk|@`ݔWnᱸϧknĆh n^Es79}-ło[+JF8$=MHLK"R>c7,Oԓ|O_C!f>r ?\եMٴ+k(7X'€3XxR[OK?hErxǜ^xealͼ6X u#YگӒ(-8]݋uS94mZ[;=l&Iy5 ,FˀO"Α%ka.-^0Ӭf4@Xγ'o8<'4nYIHͬcD9SYw,KdXftY"vr li۞zֺֻ% -k][,@d OC(R\6lYG۴7''hT0 G6XՑ>#2 OQU.~4[S`ltzɷ%4eqle: YP9T^{& vm`ed;>dW\֍$K-@+#: AR Vn᫛! 7LE~l~Sf/.|Eo5ݰ(љ$e8F* Z F++%Ie*8Pؤ'#֢EΤ0ܻLҼ  9#1YZ߇}S[ 1'Y 6Icq*>K,~H>hY+ g3\N[Ȩcv&7 +lgMnVYMeX`gdQI 3Mj t[-!,r|E%6n<1Q4MCi<٬ ]L.4Ko,-$w BblzI|Ouq\{` 2ag-d\߂nڵ[Yj\Ňp%a=kY4mxKo-âX0,)@'@.2 DP 펧 =v).UZGn\'ڢ3B[3Ƞ*)Dhi+=L&1^c0.ł[vX-0+cx#IXك"(K.#jV:YFXhМ "MYOKt{aq;$&&UF` c?7PJM>+:gI1Qy|I  Y,mda!N YzͭziO$= , eDkO]xcQ#=4SI} pYS P曪}{^ ?j((((((((((((((((((((((((((((((((((((((+BѬioxQ B-z'8֊]:`WGnd$k1F'c'!~~nlK&li3:\i[/cX]  40WwEy慧\oEdc]j)cH4,XYarJ Nr{C-.}KT㷙.Dr'꿈tTPKc.. L "*qܒئej/,z-;Uo|\6YsEp#CDiMͩF6R :em999eh+ MOFX T2)md.@WLJ[hƕ[Ѽ$aeĮ~SKK}v{ EvY+pd+Xx&(^<=5fuYq9ku(W3ش: z\22iƆ2a{v`󁃏E8#VeaJgjA9@>Cgim?)=>1C&/{AyF66Q@N4{a|ity-]#S庌18=zHF B qiϻѥ^d`vbd`^psB}?\xymh74Ynnu\3 FN O֎̑}dV 10g=sRrϕ~hs$tW-ΡgfZ]\M-Η̦iY 8QqkRg+K[m#g0228xw9\q%w71Ysp" `2NHC/ .mn4c:{6``ݻv=Njks )%fhǙG@s$@ kO5; +8n+>m\.Dd$@1m?fl@<NF; ྲྀMnSi;=~kY%݄lHWW8$5c}e_fmH:ܜO JX5Q؂} -WYc =K8c.B6n*Q\Ưt{]NQgr؅.PO< `uMsVDĺdVx0W-!uc.^xj?Cn5xB srKܧ_*U.|8殒ĕ[I8?:ןRo-KU pJ!dF=j-7\uRE0$3;IJDXݢFNGZV]]Za_9n"v6'9;u0O պOm*M rIVGsKSG$&2F@#<'<sOYV7WQgHK]fcp1Px-ڹdb;J+=cB׭TkɭykuU71cpjڰe # ָmkX/q\(H2kgܰe2~DG€7((((((((((((((((((((((((((((((((((((((((*ݍķqVdé<{Պ(:A5;fwkg62A2 vim-n-sr%[۩nw/s+1 { i}pC3[XevXUKX66 庞sZPLҦʩ%F:9'vȰMڡ?&Xcasٲ+fɏA-`:5I=f+"y*9#Tddd@ZYvl&((((((((((((((((((((((((((((((((((((((((((k{im*nْ7m ZZh].-$[hu?wqHϽ5|Qa%nBݼE^6q+<5+V\wTKm*ȹFTQǭirOefv˺xu2D=Ysk+ Ֆ0ͮ`?ˎq`G>86_l}g6c;t9sZ44D{ٌt܌*S/u.;p';;9ApGҀ4.`K)99֦UӠb翵e̢GMKئom7'<.ݤ`|d1j+ ?[4k1"pf 0J0籠 MkK{kJtA#E z1%eY\LCp9߃=} qz}x_FӛMK['d2&H%6༯Z_fblZX ?&W9m:ޕp-oʶ7%.~^y?Dc_X[[dwFNށx<{VހdGvG ] #'{Ѽ|I?uT22Yv)VJ 91:gZtYMFeXހdIy?Hmb4Hsu3Ti?_ˣ ZO"[Mـ˞qTR[˫G]N8vІ 0)._>l 2kU!YS,$C-)mgnmd{j.:g4[KgÛ} H;OR=PnoO6"y+$z͝wSꗶ6v̲]L0{⤽-l#reI#Dhۼ seW5}_%VZܶ'K}!0R O9}ZP|.:ughѰ"2PO@J@ fMtZtvrHQx>u%+=іH$ @M1bHR@xo-x],PzxxLL6eԥ~Fl2*澚B鐼M!TL~oɼpF>+C8"rjS ` yXL䌅@KEUTK(dhK6 FO ZƘgߨ/B3:47͞\6mtBy?2LN7zK:Ԑ]l[)T̒I6GsҀ7]?L0J\"eoO'Tkۻc}o2S-ڌ#FR%xݐsm{^Emqmylr4s\5 H#$pAy&NT|yW2\"&yXW?עKqTӯn]e"M09x5J@-ZuH^3@MN.MG8!G^p䊂Siom+*bOʸei1,; 2WGۻ]F[BmR[YLs# :95&3jQ}gtZjv'P7'U0'x jZwuimtSY-8?!<玄^iwZ6_h#2*# -1 ,noʎcbv# {V$dI'M9CD+Ԃr@ʒF ȨA]r{C ђK< H$j>6~ g^xͺF=98ojǭisjXEY ZkeLݗ9֖S!ڛp~44FM》AMZK%v޸J+XfR9 q88vM iˣ&)t-zq={m ké]܆bb9s>Zwsmp@y.RRyX-c1}̍(v;N3:nO.{WQyQKh.]q8<ރi%XmbH{'X7}F8@he_Yçk< 9r}zVusg +܀P*gzbt.RL=%NcfF,_<ϥfà[>W]>8Ŝ4E+0L*~lzPce>/ἷ̡\c*:-Zj+pbXBGP?/Y6;KKBP3PCcۜ㊥zvcciձ#`/((]æ9 -kKԭ};RH'WRAqS-e- #0xs7v:-Ȋmi(~]cMSNPa+WD9!9=Aڒ-kKP K}'S& >sO/H~Ɨv)Г!olm^zZ6V ڬsEu!R \>AP#m.Z&xK۝ಌ15~kJkxۧ )9gw\ sXzv 1i2zVPcuH-)oiwz|qg̸uhrcMg{k%֟s ռrh$ۂ85jZF}Ccu$̖X XnKŸo3ZY\Kt5!qu9A3;B&0ր6袊((5SPM^m8+“36bc!*psxoM'+ "1ê')A\*oww >f^it)!"^\2I5z5x|BjQgH0O_,>zcmzw ٣e%AL=??o7󳁷n~u>BLZd k9.d%rZݒWaA X'$C4d{Tis|ҍ˷y=*G LJ 4#92) ƒ@Ey]~lu12>.xdr %LsEz 0K3đ,H9' n/!\5Lms *yC&$էVoEcFcZ2O}IWzڹ.b4A{k&F0pßqS52I2Wr% 6q'8X%ŽM1lf4Oe䌍>5G9蠓浫 5Eu"+{nC>°ͬx.ҖQ%ƞ1!ӤXbIB}$U#%!@@ŭSl2/ujz%YW:6bJ#2Zyk"1a'Xv6Qif rSK7 ]10$/-CKi@^7KKp98 l<zvSZG&AhB9=B+$ p``alպ଴Xl/ #첮'(U)-ᴷZ_\K,c#y>`\|m@p cr@iH$[h.W'+-tLW"XhDX`1ٷ@A8kf:qwZY.-٥ަ0@"dw4W m{E>GܼU#mWa063%Uq/e0`Bnߢ%ѭ1Hr +_XҌڜ+oot{36g`JGn~Rd%VV PEq?5ޤl\I#s0DZ5}j%J,KrisE!b>P vϒ26wGʶHO%Qc avfh;+]14[&Ƹ HeQk[iHM>XCo˷3eݐH@xRamAd8Bk,>c|,pvEPEPEP]CK{qoX_BpA3S[[Agm1J8@t((((((( :3vW,f%ٞ:U;QEQEQEQEQE2hbḍ%@U2 EQEQEQEQEQEQEQEQEQEQEQEVe,u{M>O;3+N(()$YEE`9`:d'Q@Q@Q@Q@Q@Q@Q@Cg6#;HFI1ԓSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECs\opdxUrA75X?;іt/.j7/a? 3y̗Z60_/Jo':mpOTcX}Þ]oE?U{ou+V>jʌʣw2  u5Kao%͊#FE6"F)$C '4{Ia."Qj7GIuMOgZZZ@\+`)l s^ ];I{hnn3]F""mVRĖ ryGv7{ou(^~5_D"p4qLd7Idr8=;?j7^uڻ[č إcqׂz'݇<"Qj7k:LjLJoVKy4[xd۹3q5s5>pr`Vr7sGvIj7/a? ei!NΜ΢%t;*R =Zɽ{jv^g.smy6 #>8 {Ia.Wj7/a? gueβdDrZwrg+~>~RinRK]2Cm@RX|ۉt{Iyw6W_rE?U R/"HhB ntk[KIg]di,cqqʶuOyw6W_rE?UuuYtA~,B ^nr.FgqyHgQ|=be[;ouÞ]E?U{ou+(jSjYjvr=sD%22{X^*M>Io#ƺeɸ,زEp:z=s^~5_?W_rPpFFpihÞ]E?U{ou+bk1oaC$ċs68ʃ 'vV^~5_?W_rGnD]#A1,(K YA4nӡR[3,Yʣd2IɣOyw(x|47ş4Z_iYTsOpM[GI< 1QAPSIm}OB?~7ߐOpô1z.oƗ]_̾DE/V tV+لhkU9Sl1A;O?? g:XMsg=FmFDY[q Nў=֦{.^۪4B"v|va[i=oc?XZֹfoӧ..aP]v3uZ+eu,f629DDeF;@>ԯw%^RQﺀ,a[i=oc?Xơ@q" nb6Nijd1Nؔd,ڴW[y\$yMEmGU^4cz.;OKD}ݽċtN1]=c3GM]uŭB W RI0&;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? gFô1z.h ;O?? g{zIb-H}=X}9"v'.r.ikOpHI*R7Gb:+;S_%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@cxKlU[2TcmNUn!Y>jzԒ|ޛ9V Tzmٛkvppcu`r }G нMxo+iv'5[ED+%̪RK q54>;aYKJ嘜=$_xo+hC/i_EC}φuopK舾ȖTX 1x8=W5I7Dۣ ІpyU WG^ҿ ?&C-No+ &F?4kO^Ï~^ KKtM"߱s ! нMwwѬ.#nZ,62♧h IG;$j8RK1csϵA^ҿ ?&D<7BQ4Z-X;{CjM Q2 CM" {D7k=ҹU$X`Fj_D<7BQ4! GIksw9yF,Nr39o?j۬]̶688"{J(? WGhww{_yvNIB7`břH<'D{w[YHt܂IP. o^3۽C^ҿ ?&D<7BQ4Z-Ou鷑ܤUFY]XH* G*EC'lb Y"Y>/m+˻yln'#AI^ҿ ?&D<7BQ4Z=Ooiۤ6]Wv, ĒjZ٣ݭbXc6׳BJ/Vxg4! нMZ=ѹnyQ4|@<}MCiYKlxcxcvÓ݆j"{J(? WGhww{_yEc! нMw GKil]Ks",o0@I!Ku dvɩ нMxo+h;Z=4C[$r?WI`3CH7YZXAȎ(h.1]JJނ41@΋$R)WF Pj: "k){`Q@O RIkٿ" ^TXesGʫ;z˳:gcg9jG_X2hd }&>t;o==j }5η>w*|m I%'#q4G_X2hd {;#C,[=F{#Vxږ͢'X&y>Ps,I 8]{EE'Q@O:(R'fwI 469O\К0]>ѧܑL&^,{!; G#/,??€ Nnkfe .$EXlI\ n =VxSkLd$l @O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?aEg="({EE'P@O @4Vw#/,??G_X2hYhd ?a#$XaAƐıĊ*C G#/,??€ LG KZ5RIӬl-m7 @Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@onedrive-2.5.9/docs/images/application_registration_done.jpg000066400000000000000000002204171510276244300243550ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex1313 2020:06:02 09:29:272020:06:02 09:29:27Alex http://ns.adobe.com/xap/1.0/ 2020-06-02T09:29:27.129Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************-&" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((n-Gf[ 6&9Kﴊ6ֵ&G=G2ⴧk6Tg;$w0OO1G|E@3RRtOu)C)xy)\c=]<*BA1x={UrKDiI* =[Z i42HY!'FQsoٕ\O5.l`&.rdmq[yG<~?g}_ ?e'>"^)?>-v E$w$/#rwf8=*"^)?iI)Z>rºmʹ48)'S|@pApLS@%FJaz\c4sWa//2Q/Lb^0J<;);c@3G$:~my[4vwthގx*9%!iI(OO1UtI>Isܛbh_s珦HE.aXY3&G<~?gk>"^)?iI*ڽ%+w'^]Kqsi 8x!G<~?g|E@3R>/2VsWa/?iI(OO1ZQ_$d_ ?e'>"^)?kQG<~?g/Lbzg EUrKFO|E@3R>/2VsWa/?iI(Ե혬5+X;U!B=͒_JoڢOeaxF$)1ݠO)mXoHM:wᶝgw~3om g L[Jw8.2 : +UEeksrnb1 ţ^(`H*FA-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d>F\Vf]>ڝ匲Bb* ҴZFsOFӦկ-)Vfyr?ݴӠyd4$=OMO?dݯ?̿y+?֮GD5 $du{˔C 9ʷ= 4cɩ߻_3G$~?WR‘Z,B+.c/DۻۜqPC.9\ZMFZݵnocNkKMO?dݯ?̿y+?̒m6uGXoBppqGN)M_hϑxY;zړMO?dݯ?̿y+?̒WXr[̹;2ǽ6M[hPoݣ݃Acɩ߻_3G= 4rGA/Фm?̻YHie`F[}C&~>Fx54/UPE^QQ&NRӗnSt#Bq 2ѷ*ONƚ ka U?q.QEQEH÷I o#VY9'J*.Y)v&Q拏slyؗ_݌kRCT7u*,H<֥J$eN$͙ZMEm4"o.fXle#r~oJ5vwE|# ,q~9BXp8㞮79+O !2B-Op=uZ0Dl8WKU͵ŝjXgC3Iǜc`WoEqz+$Imnm֮B$`! Z-[{hvhWq8c<(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Tjk ^KM70p0B~utʬbEJiڦ(Ty_PI_&;aw0?wU΋ɣZM >7AU+h{R(R$TTK[ieAʓblh}oMT4PjSZiZWUFHD.߀PI)7ڦ(TCEM >7AP@}oMT4PjS 7ڦ(TCEM >7AP@}oMT4PjS 7ڦ(TCEM >7AP@}oMT4PQLC$dr>55cƏ4:/?ۿ7m3L?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>551fxDi#=2;fX/z_SQ@?Kh,ޗ?8#2O"ƃg`MR$6X}=)gcƏME!?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55cƏMECX/z_SQ@?Kh,ޗ?P?e>55d?e>4Cympm" 0=~4}?Kjj(ez_GcƦ!,ޗ?X/񩨠~4}?KjG8]c84tGuVN `g^( ?Kh,ޗ?P?e>55cƏM Hn" +g3SS[CX/z_SQHd?e>55cƏMECX/񢦢2++譨Vtg̑z*y[<OY_K xؖms=+ʃ)DFC'2y8>ul j^([N|˒FU>V?g]MMwᛵd%ݤZ4޼1ls\Yj֙:F{-8ʊL{3OΡ{w5Īl59ʞ^eKd9iEp__xjI4>,BYKbm)Kg[X"Wx02f7 lnwEpT?&cj[JlN!S<]1PGmsԓ(((((((((( z(sZwڟ&TIxB!:*.=MH"wLq9 v{GfkӠ$ro(qzBP.34A)L κ;:dvvT,XrsT.<3\[4io¶mn?AV3iOaOnU-_R&{_S1|3:M&g2 h?tWZ O⵱qVyF H8<~tVKUҔh%(?t%1:W/'Se%A{㕟fA%q8=I<1KA,h2hrzQcip*~SӞAkJ-yslbݤ8aǜ zdQRknuIoxL(w9Zu"ZXZbT+cqYڮݶЍWrh業j7w;v*#"=?NUHt:K{ XWlV(( E\BCjL0D 9 ʥBpS@>oxln.|NS~YZŠMz<:Yӥh`GynPp rus I4R Xzz{}+O{K[ hmcU=r`M:)'tg<96ږ5^cg513QW7TO߯5A9!Dq=o!ې9Qb%FMuȸò% m^PU C:}euxzC`#HgZivAXR H9.09OkXm.rz{uW-r:q5vkx% 0FU\wVuzY7Z\F6ĥ qNNH<ԆѡHZl6@shY{4o#,7vr9Ϩ"˥ܔK.AXx=Gx'm:nCN8*q qKeaA@ ,{o\n!1)2U@9P y?iZ}[XZ3w8UY@<}WZ~^2Tg}_F'5K?5Ėy$cPIA*v篵ZD_j6]yP"7 qѻҴR[ k## PzXxTIV 8#U].+>lWKK'6S;cp67g~\ZV:ֶ72y2L#$_jA[os+nK>cmqyo rsN=)hd˧Z=1B)HϪ`~ njB8{}F8M]b7`lB[ROk-YUf-āʝ.>@^s]'}R v qӦy6K kYrL:Q~^?'noʆ[N펫%f"?XpyGUig+r>^}U/K;vmI%2( --(ܻ(f=X>'Tt] cMs79Y'ՁvBWT4DXM>Imb9SQz#d:No|XZu&wΐv\5+Y<-cKgvqsWҺ]S?`ݛRc֭:lqG l5;T`rrZusN\lybQE%~e0qJM,?Meo,|c3 cf)el~?SGai ʐy$`u$4[N-}&m%"'E~ӧmid^8ۯTh;[in'mDݰN'oah,?M>)RxRXC)2ȠPL\Gn* \d}es550O0 P̪Ǹn N\d}es55ah,?MMECX>?SSQ@~P?es55ah,?MMECX>?SSQ@~P?es55ah,?MMEQEQYZ~iha.˻N$w~~Ef]Lw #VUHU8ټKAw%-&U.` p69$բ`^MR{Y5򙌠BNOyzd+,Α [iJmIjQXSxfKx'[+m.A$29nAm\$5 ;@VT%ҡH3đA# 7ʪNAe'0bKcpíiXk94+:7X!@͈ԝs1|GpῳQ 73>Vlv{4E`!Nce86PH7NpkOUSKeB = tV^*Fyx% 2 RNcKlS})+&u~μmIUA| 9@ +VZlifK[y& 3M[7WQYZqpXGmBP ' wokf`k岮!tIܽhŖKE=MD m~#RJXgEsm+ }bahH%$v@Bxu2#XwgzYV%/-n o&<ǒKi#V^pY@pq\[/ˠE66IdC%̊QNV5'rx +R׮m t;{1QG*в4˯x-"ٴH.2$EV2OO8ߢ"<ǰ ݳqxLiEfY_qR@r;ۢ[^Vu 9 X-&2pA;shE;;wgΨ a4QonFOdfjt__-˺k]H"%$e S~MN^iehRM ʅ|IzѢ((((((((((((((((((((((((((((((((((((((((((/ǑjWmKhor9Ƿ5QZRc7 WLcf?g# gs^==K=xqEiVkP:.cSiwW:mߙvYw$`#lwWrx#SլmBױ]5*\g Ļ H@#>Uy49o⾖JGp")c J:?QZ&xmJm1(8i7vW p%&nGvoy?{wtP_FFGj\ߵX*peQvG`Ŭp&DyΌ*|LJaw 7am^iuQjl!{x]^ fKG3I,D<ץӬt߈7WBitP]|C]EQEQEQEQEQEQEQEQEQEQEQE^RS}RksyHX 2^2x㣃Y5D[,\6#%Qx;~dcXY]ƾL`@!2Wֻ*(o\gb~k&fnIđ)Dꥎz]%Y{QKyGh1=Ԓ y#náVCwgYkbFEhx’`v#ֺJ( NmuX/'&ǜO,^9gsJtkK!GZ TǧE`E ׽m*][r+NBW̶<*ͻ28i$p8}=k9X7tX"Ϸc!ޑ/gZ}I{5ݯ qCa8=( &9_R$IT:,@-3sPMjVm5Z$7vJɻ0Fn訠 6;A7W!T %"EnI$g=Zo=O<33~Fv7gJI{?(.fO*=L=Fi|%?Q@oBַYܛL{6C!H`7iZEjlMaɚG!BHFv0[~/]nΕy~S^xhg{'l 4ѠliKFF3m@n_L_ۥޥL)GQϐW =烯DV艾.lW2>HA, x{j(>oŧ6Fk`T>g^+ry{ is![;xڋ N٭z(mWլa.NKHyAf@iEf_YȐYXKa9%0,yZ(izeaMQqqh4_!'5Cn9~ZjQ]Orx6p.>Xs㞦WA^k (12OUېFK*][+Z͵WP$n1ќ瓜5Q@F6yeuaai$_ΊK D8 Wk?Gq 1&Te,Gv$8WYErz+ a̭֑SaP$ev#Fe8׹FqH[g((((((((((((((((((((((((((((((((((((((((((((]w+Z;s{wBgж8>wFmn58V c$J<省!;ӋI˴ShdY$T26 n8?>d3Eq Mo"KV(4[\J&@dH*4^i"Q hlvb0߆qޤ(*8Y}|l>#"$<+*4] pHʟ@')#IeDy[ljsp=N?$FXBHAbp= (*8YdH MF <0Þ#j*79IQe>Z3ρ%Q@Q@Q@Q@W5: Pr02'vXu;p&DX dӑy <{q\MU-N[ukk Iv` r>}N+0%?af ]w`vW&/xE]ZPyxU "%3r: ➖w ]?~ss|ؑ>S1GNr\Fn5@yزF}:Jtm೸ϝWtQEQEQEQEQU]^ȋ6Wt+ jij * ]K,e w#V4k iu퍎q*89>6Sm5^(- F=v0 Szz1gxT2h pHk1M}cB&{Q]n!Ah I-Ʊ{ue˦z=6w ɼ7wW)tVqGw4:yO'8*k{>y$vܔG%cLS;PgEssjZ]kS]Ǩ >H- *oٮgk<$"hW~Q@=\UZt"CiFVmʭ.IڻJ=zV gѮ6k1W͓d>Chqj0.W(^ adw=y ֋enǪ=y6DP vK}NG+ԇnBd(n+&[oɩ_Mim#Dtۥ BcݱA^@A4ԭ,`XH徹&B,*`1e ) Ȭѝ8}pk"خg-ry8JҴi~4A]fsFcdUpzdɣ)"WVF|IyTiPnA3aimi t %iff'-6~bIPMEpk yaH;+(eQ%8zmioK$.qح: q8y#KT/H ԁSIwxYԗR [Gȑ0vB!rO-%մisxη̪UO73ր; +ubY< p%im$a:I+͕ [5՜!o*E R:A8=9Ͷyu=uk%۸XIEkE=՗;/h5P N>\9>-.--4,Ar sVRΠMmm71#c, FK`sUFѯ!{ y3KuKh 0\dp}duv= rScv%2M[mOITY_RوU9Lj ุd,Z/I3pO^'((((F:6ݴ|!rL*VKQX]xU:?*F=4m١ ةrT;:VJK 6+i(G?94:4X-QmIh BOR|["}|I o܇ƛcmf$o ǻ3Z ( ( ( ( a&YHfU(8@=Rѭu;H/-؂D$C ^VQY63Zž\pIlhR0aZP H?+ǿn/AҖDҵ }CL6VI'We+8#'P$)dmѳ(%8$~5R=JR}F-2/d9{Q#c%zk7WV:}C znX[đF3E NOޟETt/n-gSq$*EQo֗W6}G7 M-tP I[uV=w#:zU(,,:ĂWP Q=C6csoqŝ+,|7uf[Zkm>pUQª601V袀*Aڄ\ Mq*IӽL֖4#rx>3?ZiM6SͶ93rӽOcYiFgogsıLt4PMmKd;מj"~ lP= +RdEq CqK2:V>}sak5ݸ7B$_[*Aڄ\ Mq*IӽL$r"A$wzi ccZ[Z9%R6\9>DB'gnۜ>O(IBM2ͯXnZLn8w,T zO ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( NmۙbK8>Z`G:Gb GN?겪I{!urxYm>@>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVvEt Pl;d \49gI( \pHMcbz }(\ӭmkQñ^ `~$g_: QC,J m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| >m>oAGނV_[ϼ_)<y(a̅%| )<QÙEG$N핞H:(_ H(>/M'Gɿ$hziڭ&R;BujO?~Iyo?L{1kCŸ31ĒM[>/M'Gɿ$hz*?~Iyo?ߒ4}_O&'<7Mg& >/M'Gɿ$hz*?~Iyo?ߒ4}_O&'<7Mg& >/M'Gɿ$hz*?~Iyo?ߒ4}_O&'<7MImwLxEQE U,Uv!T}w,6y$cŠ-Ι˽:ԁ5ߙ`'s]TpիaR:=&߉bLN"q+b% 8YHI^;QR0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ej^$(l.>%R( i P@'k񭽔u|{F>Va<=Q+k؀IԀ$ xizdMRCy)2'=^UݐB5#P89UKK~Ɲx]}6d۟<]EpȎmR8)W Tp:;+m{R]q[x ƄS.<9ugIӒQ7;^DD ;Nŏ@s ;Sy$ 7s$ s̉IseI% (R{[yYc$l"2A`v4W5MAͦQnOeDT߿ KpGc@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@?ER?EZb>_63^eYew⫄m͛x8#5%坾e-+5RHp¸TKֺeCql#0Cs^J;]7]/H_9hQٟyoM{)}⻇M߆t ibL%sI+YdFGPH#Ҽ~"8VVIF[s$^%Z0NFœkcBΟqkzgG.# AL~ڋ+U0a~c_N8`n*W RiΛS3c$pX鹚5k&sڋ42=Ҳ;Fg<[wXӯf64OWk͸8Ci:sI_F¦U^x ޙk61gntA!`'L Q^]>^m7J$ۂsnݏuoV՝<)DIqQff-1WD֖ZwY aPEijrj0i֑J1%@Wp\ j½5M?k{HA,l6we _y$FF9ҮO嶸O>}R6{GJ6cqrn.,a2J垩3tltovVPn-[ıO|(4@ud}i5ծġe0` jks|+c[˓!U挨'屐9u10=VV<<f$TWۤeu 9t{tuV=H`Ͻ R ;EWWsLe*2F=y鑜kȱQ8J0O?yz`D0#hQ1&@!t;Qlדbkk04R$!>U* gk.y+lFw.Iʏ=uu{XX<^K;^O9\[^Z=ݼSȻ^P20*x"9k ^Rcin"!ܨcA,\񊭨뚞"O3ͺI.¶F 箵,,R4X¨ 8~B.Ҭku+ P`C}0L1K\D]r>#X]|T3Ih$+`9ݾ][ƌ#` zj&͖/h=@rUn-V|7Ҥ1d0xb\ ^I26U!po#h<|´5oKn[9M(OO:c lm'x&H3F`sFstEk7ssm "Cm?FNw)* jY+3CR],xxBA t]e-Mϔy>Ҁ2,k֮`Lm e,‡||Vw#f^:A T7Ǿ-kkv:nikxyrYܴѕx׵-VMI+b498B/EG;P?/5#HNq2C!&cBYKyşH?QOy({7gh$e0o;v4t5l7屓#d[@XC(Z^>Qڀ0u{/]ۢ,HR!XNPYF{w10EFb8y]`cȏʏiD6߻/4}7Pӭ.ď+619847u8\핣R9Cִoa~2"2}rC~O'eK.ذyc ҕ-[ i]%@Lts:t7s)YLg6@1麍ݞb mn-3F_9]Fy }t aީtLҴl-m.NgUS Sր1//5“Zck4iy_x 9vqj[\\/d g(s 1] >=Nb7 `)Z]/ 퍵N7IaWVPr9l|Aj[AYZ^2܉ZxDrr<ÏSڤl'ONKɣFc#: 2Q8tuYTDd c^MZ{u Ek ~Pݧ5<>P*Er/ iW-cp|u^k%-SM0#+ĻG KFH ۚEb%m TFGS߽-Iug[J(]$ykRk?Ꚕ`Ym|~dH79ޯZ>Ѧij3%C|9|k{KyYH"rC@wm9\=*#MOL$ Mc\|pzQ bve!  1/JӵWocL)U>[2$v8SZd , 9-G-ͻ@`l`rrr:ryL}M*i֋$\@ɞ9ϽYkx\xcb*TC%SVPo6%f;fGp"OzEeb8 8S]C eGqJj@J(˄H99qJ&6XLӽԍdPWp;adھT{5P`Wp=JڷtXO'Zª$xN/gkka9IaVd<8ҫB;nZ+p((((((((((((((((((UlZ)FEbNF2V3?m~^XE4UQ>nRҧx"Xjfl`ʹd\ -ciVvl#TD]4T#to&JK2ζLO}MZ[KuƘA!Tz¥3?Y@66>w$VȪ 9UgjVPm"g 1095,VA'6\I$n$b:((((((((((((gƢ!|cG7"Ոi܎oQGޢ ̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (Q̂̎oQGޢddtTCz<s #Q7'ޢ!E,<y (AfGEI7oQG2 2:*O!ECz9YRy (=dĖ^ӖJd(7αH;pOhڍ7?& Ib n@Q\ ;[H|[;4d0[Vc)9"@{)u6՛AfotI.bC \ utmv4܋M[3h I :y5%qo_loTЬ1YYF` q~6-jޭ}zK͛hlEX w t4I"EI+"p#%dee9 B p6W7ԦYñ\+^VtOq]SԮᾺ]eNiBYɋyi7);Iʀz79\\$z,ʺD]]#A((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:Ƌ{Yjq9*}A*'u%g <9%u,G1}S"ӏ|YEu*ΣȧJՠ1WHʂW=p{fՙolm#K +dr$ժ+3B4c#YMA_/+n1L ,B2yyc\5&bw VklIA|տOU jv*={TPK}#M0ZiBcqB9pOӓU>hdbG\`qZP74}>՚(I`#.uqmqu5>$+4?2JEBlJ'`҃[((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()M-,͵d}Cwj #깪mW*6\l,7up>ڴ+дI{۶O?tx?^SNX.Go17~UUd1|:79;ZX|7 [띒ǥn#6U%"0n2A=C9.!Hicm0z |AyWZc4 v4%@ހnv8O 3I]VeԮ-ʠLx7 uwtֺ#ά r &A-o&7E&0K#."~gw^ZiQZCnb"ܡ ̛S&:+ҥ5]k@oX⽍( oouY<\B1O#֡>FjROq5EAeai%k gl0F<)fF[eu@8Ң)ϤiZb:u*VHt㊊-E͵0lqHҴh shmƝi-ͨ FW4۽;>Oˏi!V򑎼պ(.kk?"ѷ[u žOOZv=AZ͹cR}psV((((((([f?hw/@.w}ݹ;w{o]MW4]WOP.-]Fmi,^OuBծՓo+#1_j:^x61Cjs1*܂C#SY&xAid c,b\ڟvj77; +` g *ƝK2-8%a@[e;R[[u \1T|sj6vf0q7 I}:KiPiKt# 0~`)Y%{ ;pdOj|!YgL7aqm$-ʡdU' q5߆-?H}F1qvې4">Hϵw-ns`_1 t;,WJ?*x+ÚLG" ߻'I$5mX7[ڸ{{[ۀFm׭S.m'SXf%ZPbq#ֲ<0~Z+]>;Wew`( NmN=>ͽD٤09^88=?XhC{#ȃDH߀z:LkZ<{cԑ*#sϥS>ӛN,e3K+p vh'VGltk$.Z,W/+9LN:]b+k@o˒.V"1%r;C/6}ɛɿG`Cm+lzWtBh}H/M̛˕R3?OL(}ជ5{Khg@ʹ?*H8lIlj[\Wv:`4i]qvucsV|imGGQUo$Dqެju/k."ES*FFz)|ME\K.=zBk2FzFkJþ'n! ]g/6`ʝQ@5{[OLAi\6A zb4((((((* #ha iՍN>s͸>=jkDQ% EoJm؋ 0qkd(Rw} MZK(cOdNU唶vytW!jZťjrjrBʕǿWnu;MZQXH\,/+GuۆzҀ:=[Nmktw̮~S{[S->;1G 4i7"r{GJm%`I#TfVB>T=`/^j.65ji"hcE!6<9O=1Һ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((G4MISq@QPEyǕy|gUt=.,mI0Cd3qMG-ӭ"xU_ ƮQ@imEod[P-x}SQEQEQEQEQEQEQEQEQESe8ci&upQ^Z)k;gU NMERQEQE!`x4S|toCїQEQEQEQEQEQEQHIc:.O oR8 VlzǙ^WjI{[v-ddwb[k u'$0A^l+,~)j35aaMzMjn65}23JIgQ6(((((((((((((((((((((((((((((((((((F\NAXhVD!s#{ފڝNDՌSi"m#LM)#8"THbau.]OvVwPBrnį@pǵuƚ4#yd;+__e[wLZK݉dnNs?s8hoZsiv101}؝T`'ڻJ){u/ ~gxweZfq{,q?J] I \pqi֖~6A"[q  8s4ik'ٵ Nc/$S+KwfV݁I[#'fj),EZ_1=Z_!xQ('ErAEPEPEPEPA84V/u9p"[o/\^ݩ6K'esN𸴺r Ho*zRԡ6 ɹKE\H]Ĝarqs^hڢL"&d⭯u=ʍWQjȚ~Z(mo CUc x̽խ?MN{S  `J+ӛN .mQG_8#J.H-$sMh3^{.V}6)&(i"1u[y4hgYtk2+8@wq,> huzE|h~f3p('&xn{iRhdH2uiu++/u 9"H|q.WpHۅ: /I8"Xb1 :0 y";J+:uuokAzElHD\ auPOڶ=67Jj,&b+&A>CA ;@:J( ( ( ( ( ( ( ( ( ]Nf(]|/%񦮳F7$~=p^epݐZ/גV&D?$cst=7RoL5o}ȿ+}O%(G+C*n\w}kW?畣&.-v޸=Gֺ:&㺴& !k)yc/I|aXy)EsEKUQE 6S]8P# -+P~ zN6g p~>)Q 1uM>6}>2z(#I WxwVbh~Y/#qWIoG#W twi:<^Fv0q̟wJip{r=]'mG/xGs=1ֵNhW#PAE hq@he}Q'̋OOsƼ5m&?KxgB5lWZjizy7-S ;o좺mLxͩ-{8Z{Ț(3) I773- \H SI &ݑ#AWj4+ɯP L! {RYVo/wwRJq]]A4)8ں/q Hw,k1 ju2B|y<=RY[o89?JɭNLky'b ώ5u"\M}QhU'ᶹ|V^sm\\FՍa|γ:I"$yy϶I-{l!c=wɽe`c hZNr{QEhzNO[VBC*cx^~? /L׿eY.NvFIקҪ*,֭vǩj?4?+웯K '>ճkqxM7D(W z}k/P%r@^ܷ}euV/!6W],=;sb13kיEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET2I\nF i!U@9PzKdF"F2 "I $1hT2F+jsSMo^5!)4SҢ7\rL2݅WYZUYj(ўt]˷ :贽> ;{ʐvnFIIfel38Nǁ=_o/?22NO#<8 Գ -32 H~PNrGs}\j'V4e,P31pAG/bH4Kы*KRy$8&6dSo@ `:E}נ*3'=݆]C3Mz.z:+s5M!E nĚu[;wR3G#izoٮv*\11ړ_e\j}cRɒTk~yq,]2#ֺԯb576r蛣 I鴱##nfKM l$ Ѐ0G&:ugnaBIv^ T&Ԓ=6-M؋].PTw@<[FK+fo<Π33*:}0oiQ@ۢD*y@OOSR1*hBK'>FJœǩ_[HJ6-1R~Nqؚޯ i7׏ 7ڇ]zepi֑ZB?@Ki3Ek6e%9{t)zc=>k _0o5+xmZ8d*ƌuf :>)ծω-=ԖSܽHD6B OںilVE6m >p>qQ.-^c8|qmcӷ鷺9KR[=&{׸kٜ<^Z*X!F=TdaIg{4}Zɩm]6p$m-bTD$@<2=:zN Eڣ܂'eA>oƇZ*SV|ʚ47].t" F `)Su>PYiE6>\\TڔFN1IQPXQEQEQEQEQEQEƂ'9^$i#* \획d3m LvC,vWbI<1񴑣m (%8$~5rY ෻@#d`NEQR(c+T AS `x㚞K+I|6G.g }G'j惤j14+2ygGw#3~4m1u?ӭ͟j/gm΅^y\Clsrۣ,GGU(&v&iG!( uŸQxm2-H1i|SaXJWgjEQEQEQEQEQEQEQEQEQExhv{{`;lt4VN̪ҧZ<­߁4­߁5Q]_Oil,oRK,X\һ(zVwuҠi+QX?|Y-.e?4icpB\1sW?넕<%7|2/i$Z E4#?CK4ՃX5Р<oxս^4KӚQ^UbS\u֣w%ė7fcMzݿ"bMnk,CH*1aQ#N@Ju HPFF y`S\[5 |No"ѩ]]rAoPItaU$}Qx'DojAF7/݌,`{ްK}v", n-|E |:DnWx/sZ4x5u/%bnvuN~g5;Ro 6_Zj!9>n2?H& *ORd;T_f?}Q_ |QEQEA-Q-OQQ;}*e'5J5[{&pUԩ א? XuHSd[1u+ "s~>*N&' ONǐ_-]6$@Jvyl3^bfy1n𮦊Ҷ>j~{GFOi Š(((((((((((((((((((((((((((((((((+@u[4XݑUb6 V1ɧZsG-ȅUڮAGzV9H"ibrvQ.K۞NqBj:nPwmRpOѬl&47up8vjӍW:U%ng9>թ}pk(tXJ._v:m# ٺW~Rӌۼ5}=嵗s\o*țda s}+H{K6l֠Ф bM,Z l)|+fj:}&{k}0q^^i> 5,uEʋd1A{dSijj8Xf%|:uW{<:%VBy"Vs[^WhnSYy_u# +:jsms}%ŭ԰Iq1T=}+_DSTPԚ/l>Cˆ"&ӿ#hO,PK.٬grA*0SrG:ulgkMLWemERxAPWVփ\ u@Q@Q@Q@Q@Q@Q@Q@Q@Q@6IR%#`U{'Vk37$Mj26=`֕m>wcր.QEQEWx?Xlέ8gO&!hj 'z`*y_6&QRI)C4{I)?@KmVA%jj#4֕<t=(&wLehr[2PK'w*JZ4Q\IYQH`@#d{gy'RQ@}俕#Z[xQ+EMEs^(VnM'nfmpyy;W‚y\tWM^7),l$"Fݫ٨aYM%(X(@$*rI\^໎k2}_\z~us:ǚѲF}+֣=7qFz<,~*OReF=Z= f GJͿGt=:?&o0f%zq^oqݴs۸)r+xyig"KrJ(#luah 8oF 밞Im0uGxdjJ}C) dx"of\Lj.嶆8-+~h$,̓߆3޽ju|jV[?~[v9kM)7Jp}ߠXҷϤh'͹n y 7xbBXp;v+ kh0Õ7<Ԕ_EoQ^A4T~8,-Ii%Y 3a^r>4L.bI8 shqWP>IMc^ji0,$ Ԩ89aOOD :y\__jZD0rhJ<ώ\} *t*kO6V4=wU1|%+_i\w1=pN8#Ƽ#W_>vqkN 5^igGkEW}(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE&/ĒO/Aup"`C6!fqt W$mO٩N6Zm-'դhekIg @b/xOX&5_*(H@=H|T/tm,0wV 98^&},sjW%EmaF\`sg?_zlO}e5Y3{q܅#=W.nZ--(!m*wq5WtA۷nnyj)<47W]C%e5R"BYU*FA9QI/f'nB[sfwlldWjsh7Q\6}3"s"n䞧>q"&IʞI"1RpCgʗ#K 5yt K+ k{˩bOV[mV&y.,˜vFKdAɧϦ^G5ޓ{\cΎ̌@`*_}9V;dv,w?NErw?i^%{/,/mZQ)]x}9#a՝ScFg X=GP~=ٌ) {,,|VL,Ojst6XX4VR7)brNrsE_K3y._//?7S]DN{Y}ʱGCWjo.7Km6B=*q˖ ((((((((g^0]tny0}s]5y)Gf1I?x>1ӍJWVˊ*t1"B(oL5bc7+2ʞ=1^Bۣq8j1UpTi+8IU%*Gonuw\Y>F،CX|?E8`5X @60.q#iEr :Kfʪqv,s`ƷijfaD@QЩUݟ$#Muvm$)"[FTQ9B~OzmOM׬QObȖdf7 L`z(((((((((((( ȫה5keI1+ Nj1 YH^'mz|3 t?VUmN>N Ekw~<еO hn2jZRlT]^r3T5Zh0ʽ~\s\Gi-#%X 2+'R"iRO$ݳ~Ҭ)Fv,J~=+gu4B]?!E(>U/WM'vd$cFU~gӴɤg}YY1=M%PEP^k^dJ;iqqoJ҆($.3j?G&𳷗ެ/<axSZu'G؞r>+TɳP$d׎9[~i}|nms$!r (=kxWv,Q:( ]V>vE:qMꭢ t)2bB "ִyiekF3FҼ{M靈{.2ʏJÚ<|ݰiP>UOSq+_?:(丆&,pTխ;RhZCR,oPqVMԒHqCy-ܐwp:Oq[iuO%] )O n%hcHD@Te̮hisW,%gi5% A 9)h(GuE˰QhWW\z1Ȏky|Tϩ]ay"!X+": W_H| ?԰d2r[8j,*oSKo[Q=|;VHo09e4Ty8'TQE|qEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP3Rp'dzEqktXK?#,;j #dl7ҥվrpI3jJ >o12忈a[C%#\ qr3C7@2zsV\QnRI&JAv!A*2qYhږpvBy|ˀK#F$x!±`dc=xCX-Rx.6`)/?u ‹{Z ꥷUu'"X O,mzOZM,[iP,[H#!v=N,Z hKJ1RDqKd oK1?ȧo%!QJAySkJײ_ {)m+m300a!8TqӚXwɞT0}u=k~ūӓw (4 ( ( ( ( ( ( ( ( ( ( [[yI&)>:W{TQvs6A jXU$ǩilE jZ+(ѧj`Gsm崖p<Y"+x"t*խ [(hXԓ@n"a3n8JFUK;h%X 1 өSQ@lG7$T_4[yR~n eQ'\ ( ( ( ( ( ( ( ( ( ( ( ( (ἵh$ )T)t" #d=bE3cH'*S+jhuÎGB:i'(QW_z/GkEw5Tf_ʀ1}.Y屻Ex uM+$Wf_ʬAfoSڶZTՑÉJm2 LM#G9 c$jVMF0vAER(wۼwM1@ ܼe U=lCs?"ҞuouaNx g4WE:k{5\:f v>UtGkB33u$W_z/Z4V238kw~UrV/}jJ*K ( (1nj[)%I(ʱԢ1OԖ+..)0m!sViqe3Gd-Ն3#`% j7NnVj/Bk=[1W60 ¸=1;p<թo-,&2wp1s==kM6ohA\ c 09YK˄(#i;I=c KGiGc:h}6k?èZmg)Mޛ5}5~2c}j\;}}17-%t, PNp9;Xk c12@f~yxak_wNͫifojRc2lrp*Lt^{l.cd "n>\zUԷwryhuhYA'Ź;IZTڎ@tsnR (3A^Bj% j.__2:JOO#R(s(((((((++T t] KZyE41iY>"=uGX?ƶ4u;yrgn#Wj(#*6cQ:+ԼI>IĜխl75a{j訮s6MC\4N6n/#{%  Nj:]J;<[@ʐy$`u$y| 9:bjUlXX[iQXAv $''5bTLiSbc$j6܅8'}>h֦Сs=:UsgΕm4'99Xd-.YkFqp8OEW cgGc`z5H[;3i) l؎z\`zբ 66oM,X Pq=PEPEPEPEPEPEPEPEPEPEPEP;tq8+çyd> :T>nbK Fg9匓@Hw0Rl}OS6Cz&V pO~Y3a uHd2w*ͼ,e XsZެ]mmGuIGrK_jWgEKd;T )Su_ j-," m`rν{v2º=sm#n$Xۀ+0H@6ku[VeP'zqֲ,l\[C=}:e'Vv*( 7\va7 (>H >= tnN~n玞aj5ɲ:v/ q0A*&q{xWMoڔ!>=ЁTK$lY N9<9_hdΨg$E!99*Y;OC`Ȑ[LSyYpz:P%o?w8x$9MmP^Z}VDTK;%]@-e_-3nu^]KH+wٻ-\7;cשɦYxgK?aq3 po'jr~Q@֎7l. Hېplxemw@Z3oԔ#<Gk2!X7721&E! eY!*;qzu<#uwn_CwV۔I8!iz[RK}7K66>O*Li@g Vɷv{3ƣ9e:U[dxD$&N3\twŗ򾝩YO-lc یV)=(&@^[#CILZ53F^{ewE$v-I8KΙmܱ^3;E 8-ي {]T2Le=;jZ%=x.$q%*r:P9 & LM*A7rɌaǧNxfjZZAemhVhFi%/sUAֺk}N6h@vTڽ{n/dۼgvp1Ҁ35/jPGm7 og%ġȌgq*57qi5Hm|持 hXz>Mٖ;24_Nk0q8vsz4M8K-VbP"g((^ha[ǵ[p6.2$Q`rs1xTm-b]2G67W@s29ؼ|ΊUv` Ht`˕OjEƒNNAt/CrOocQ)Qy[L[H.ah^|Ȥff$d?}# \XX-#y-c%w+AeXާZ\70ƯzRWqXPr9χX:3M'qtIpv/ AxR hdR,P#s [KHQ* ی>YBs0pk{'ÿoU_1IJW!r[og B2*_ƱH*xM-ĚRG2x ܂91@㸴t.&ՄQǕ#'XQG'.˧qgikԒdt-P$܁V#8]BxՖK LӆbzlxŒdiCC gP '4{ڄP$+w "hVbx +IXJ[Nן;`J;:U_ YZivq;Gip.ga8`E [?+-Ԇ lvAӥeG9ז4w GM˹K\3);]EܶLE!#yWd`G ?U'$$i]y;qߦ}kBJGaX/ ph j}kֳQ[ Bd0ːs7b%ռRG$QMϚ2W&Nyi-".іvLBm拏 !Y-/,nVie[ e9uã)R@ s@i:xNH$[cWn)^&gd""%$\Bppsx&<Q̒˩Ff,@,Tg$#vwH'oVv hX|Ar1VAzn'Hn ufWV(*9YyKNK{4\ykN@'=*F=$޴71y$RZjH$77S ]:4ep9;qKw6B +DbbϴRI# Bo5]%)حd2 jt7w b$` `Gomk\%лiy |0{`P|`c+[o RIٳpzjhڝQQXT0*Tu) {սop>W-죷FbLUB~1#[{Aɉ_˙ns<~nbL">Z[H;fk5eRnd] 0G# sn׷`2(2$rG@qKy5+% {tE`Wb* H$< Sv- ke0ԴiڦJ:u t )1r矔 q[. ]Tb`^Օ3[nH @sڽQa~MSf`1߃j_ ]-jmmx}6,,kXo-dh' }F@d3𖱨jPcI$򛧙mA`p+h*'"m5FK%m4LY7YGB{N.}3điZƣi&T28ەW@eO`QPږjR=|qVe^hjrj3 m {p<ac{ח].. yIm rʻ?($Pڝiw`o%j"fܨJrCo-zUǕ{օgٽ鼐=46]Cpz/O{s5彦yo8";cH I'9zUMk4f[xn$H6w*8ݜ溏]ޕ3]ƚ%36F8OOP FOtm[B~Fm}I$噏rM^((((((?V՗KH^Oq' pX0<ӊyh1\-k%䐈3˂H@QAMclfE7(@`pAYȬuPW6Wځ7]T dқ] bT2y:[/GدLvr (E$P#A$ÜcԊx^审ԣh 6 ARx/ WGxM=aG)R+LzuqDj_mqG((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((g-#UF%˿?U.?Uk~=k-P$hƅcL.˽!&G5Vn\pA*FA 2 $`.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?TlߓTP.?U$BQ96!\~EQEQEW|au-.=!411`m19#^_ _=d^+"'BWMŻM_2W/j' _=d]ؕ?TM_47PG;:!!$7Rlu8+? hŨϦ诙?+? h_2Oڧn{S?ƏJEAO$?*:Ϧ诙?+? h_2Oڧn{S?ƏJEAO$?*:Ϧ诚g-%α̡U$Ҙ($1ªI>ibԵ{r3+y|Kh&hֵhCG>L_2OSп#>d_2O{S?ƏJ΃j3+OJEAO$ΥG}qx!0+~pO?+IrNF4zW=.( ((((((((((((((((((((((((((((((((((((((((((((((((((((((}t{^vH2՘ /Vcܐsφ﵇4XZˈ+3<˶[ T\ɪTMR]_GvlU d).3+xnMgIF?.=H>jsbiZUCa[09$$'js6xV\^A5DCmӡȪBC`vdYn.&,$ʉONqqZAe5yL$LOQ3:`V%]Аx&9k[mmM$"d۔lo0ޝ9.{ J4MČM(ֵ<14Q[$sFaeIzc\GtTkY&KX72*e =P6y՚gK&mk6fnF޹=)>./. 9ei`X.Sٸ7$yL L`Ów ֗o ư&fyd!>wbpǷ4=[dx㼙b%yAz 瞼1qjZeA5XGrn3 U:քzֵ!]3uNA&Đm'Dz1hZ9'n Hly94Ʊwd$۹Ea&ݪ<yVmFK[̌\ ea }9;֚5Fְl1`O9>?RKZ%MJxʧ# ق9gk>y ,J$Sv𭵴P'ݍ  ( ( ( ( ( ( ( (<iדWp:j\?͟ O6 tMb<>%^aS}woo5C8ıVAƺq]Xg'zʔ=7O-ZˋkXE[K\IaI8}+5 ^\!03O\q^-^V$%E' PTo[0-JZZߗxcF21-]/yGT^x_zv8/P\;:SO^:.Yqe_*းeeMFm ۉFG8zͭv"VPOMzbUJ7Dϥ!.(tw$[pA8#ӫj-pњHۙ?NrG(][QRoH"fctZ^ؾJ_r=6hZ[,텨s b ezUH3[y,t6/<ˉ2<+8s9 zC$fʡ _ȧ~]CzT:rˤϫ;MPrN9f~LO;N#;^i V6JRǘ}[uD"Ż,<=J>W/_Z{~ o iI[ƲV{%CGpzMoUͩInak(y:NpORkZ^?c+ɫ~sr~h?QE|QaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEVvqpcAI9;dz-Ȅ,b3ef2sv3Ҷ)ӳ&2QE"(((((((((((((( ׺mǨ[ݢ*"qkQVN*ɲ8Iݣ'OL8E<;@3 ֢2t(Sÿ??j(?*E<;@3 ?t+Z=Ox{*ʾ'OL8E<;@3 ֢kSʟSÿ??OL8µg2t(Sÿ??j(?*E<;@3 ?t+Z=Ox{*ʾ'OL8E<;@3 ֢kSʟSÿ??OL8µg2t*햛cV,D E'RrVmS] (((((((((((((((((((((((((((((((((((((((((((((((((((((((rEk| a ZЬOyC-DLX~쏨)rwds}WGcdA)nm#Vp=GjyBuxr}k8TesʨVtCn┻44,"Dn0%%FGqYxHdh-4Cq&1ר#9{XndMdg$ml~ h:dWF@-HzzB"v#̹eq:FXkIM0IhE5'mnN% /5Ē,BAʨf! |P Ci{\.1M7Q OHgrdkB6 fm.8 !}>\^Q$H Nep8YxgK?aq3 po'jr~Q@Zh6yw<0<1*2. `u㩡ԭf[ݡ]Fe`1Z0xcJC46qu,υ9UX(#;A^95qY5H.%e (8ls'cjZ`lU1K.D"/#6źIİM&sgo#o͹T֭uqpЫIs1bHt M/c=K- s_M(M+s/ی`c j֗7cAlex6565 2020:06:04 06:37:542020:06:04 06:37:54Alex http://ns.adobe.com/xap/1.0/ 2020-06-04T06:37:54.650Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(+$k%E(*H֢MO f OAB.!!&Eu9-Q@Q@T7HRm7 z՘4{h"52Ϸ^M%QNW31TA4* +]cOQ\FFzFKUuKF4{8de#?ji ՙiic{gIo;T0t*q=Uu-FJ]Esq(= 'M#Gsir7 s;OU`xavoY{U;rYZF=Yr}k~h/yo۳'Ἤڤ5.u%_kp%%ɥ7Oj d+"'|Jp0I\[Xqoywg:ܽw09; JSi'%[m#ʒ!9բ)Py>CfЭ7hZKrb6hHlRIexjz~OOXY΍3tUO&2|wc Mij^R:70CP8*A =7w"բ:ySmUPSpQ3()|Xxej #-wӎjbR6ic ż>n19t뎕S[zaK̘9ټs8jxN7` vn#+ޥwh&)^P-F\`&VT*9 1r,`6cR٪VZ^CnĒ (HI#ZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV!pAq'/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kG/TP?kEMEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErSTƣ[뷚uƖ@wi$*_]'Ē^ XE = Pq Xé|B'MB;calow=HCKI6289}ީ}]zugg41a!O!8Q 'ue,M Za;g׊g(їE}ZK7$bmv$d0˞M? \Y_cy`)3a@\ 98:PaԵ7"F74pF@^qu6''$c{9@q0 3z4 mo?>6Y]~I5ͬ h*+, t:8dhcI%T%W>^=> 6خ>5u6mݻ6NhL0ŏ@;+'-b5&KA ňZOs}y7@>Js9ѽO:(KA*J Fq}pAl+67= |۱v8z:0[_}|kCo79;ʙ$DѬ40v8±OyuiokyJ+aX1+\܍^-Ӫ++ $f;Zh! n_d $ZVPza^}jW/^i7PMjf2p `w 56LA"`=ϥI\t뷱Rfm4Q1H>d;UW8 W?s}yi\]5O&EI(7m$;?Q\nbHmۍB;WfBX(,3cbk+LXt{kC9b|(>;wu_Z$q d9 8\lwraox-(˂ zKmF NHr:LBWq@[j7O f}zro+H`df 5jzvvڋ4ZIUvTW%iw&.+ob=AK&PnU#kr zZK4:A 40dѨ咛9zPmEdxkx~׷+nnB~P f&WsK_<,Pn vR16v9=Zcp΅9fTfPpH\,jmaiބ<\1v=0G9{}GT`ԧWɄ8i |#o5MClk lib,|BQXմژ k7T_ԦVL~aހ:9T54N2"wU'+Um -aUg[vY @ۙeمw8ڊԺκ=HAysOSbAmv~ɔmf*Hh 5~!K/x)w|- HLb9@XoejܚjM|-EpWa[`ʑy7Qڤ^\ܖZ8H-YT)ڭS\[j۹K!Ťv*B(q=wȦxĐH#td`AErzzvwq!vr4ʒ]H-Ҵ' <ŗza_,y' +Ե-SMR}ylRlA)xs=k!-%eh9cIQd>Z3_'t[Q 3NM5z=*x=ZΊo\E,HBH AnF1!1((((((((((((((((((((( ?\k\!nFHC>&ZgzМ6!t+ zwӥH# #*IS:`a6qؿk`}.#g'ɕ6Єpr9 |3s][]\8 $R؍S $gfr1VDҥSTL}AʼcGk/ⲹYڤY$$dWeƫiܭwG rץKm ,Ah:==c YhLb9z%+ [X$&iaod]F@Ke00ȟO Jc i hq1O| ϰl>ِG"c`)qԼ*ڦ ,*PnM7,˜)=@NzlwsbxMع`Dǧ\g:C{82$b2|@uFDҬ~-2d&sz%楩6[1ě .aBXB3*A=Vo?ϙo:(P'"Žƭyh@*|p8+MBm %:A湻jVR&co YK5(Am\꫕>"tXV5]q:*TymqglQ-*!(`99-'>^Jԭ8It貾z;nֆ5k+{89Nn/ZSjek4GC{ڣʂ;n8<Ҁ:]cHY+(ng*Aw{^io1h#Uʀ0'ZL[{Hb Snbv. $r:XdeXyVf8A!h-4-&ie쭤qD2n99t!B,1*Rr@p WO^'ڢgxf /t`#d4Z53+'E<߭eO&ck}&=paK'Qq29$7#+ @_zl3i8+sI$`Yv 0# v'8='etgK0]?M.n ܻ`:un[OUKIT'˒٢@1s\K#e5-8 n\@2=qOk?blm1q"yÞz='M>8QU9@:)zvm?{ HLeԑ.v3\ů]f .&ʪ^Y|̻_i_:|[ǧ*%u#Gf@˻'xf *( o4R4CbvA 3 36 D\4ZeH#GD\ǒbq 7}bP3< ! T Ƿ^yek=m ռ~ߐx5ZMGMtM؆ - Yc5ӵfk}BU&Y]`3ASߜRWhso2 8I!\\PIqi7vkwOo ȭsnu衳{[&ffUB<19=6"ֵx M_ۼEo@3 VbH01Ӟ7:!1QJ$ޙiiVfL.$0n61ϰ}5\. SiQjr]ki" #!q|{q _iQK5S7P ʳ*niZv QLTʓ®msNlm4PWVֲ[_[so($S tqA9|;imk>a%ͼ/j!>a Ѣ"6#F^De“rx4ưuekXYUXSvP9wgnLnMtʤFgcigQkۺ_1e }*JEEgqh[`9F3:qt|Z{ܯX+NOJEPд{x/4+m`[te ֖ҳ2%.8S9<{EP@ C^Wm y] ~Gڴ̶F#R[i>u,RO&cgsq'p8FdEs CsK2HH4M*{Km2kLGn,`jWO,4oiVVPn-[DOSfD 8̡@qQ>'4(>5~Ť}bɶD<>5Z]Iv6XX G;[4P;}#M"`6  H8 qK>ik696B?tuV <=coe.`; DުžOJ1"45舠 }J Lӭ!yUy~4YhVCiv2dQH=At($lY0HpHը+ i,B(rOԒM>tM)3fo6t֝aiPiz}hV=vW(((((((((((((((((((((( Ri2{~srIv1=jΛOɢiIB3CkZ˶ޕfȷlh ;fIbWNsׯ4{MKobHlA :(&eV:3[)D^%*y*{$oZ^[;|%m@;32NzU(&U]1y Q.H#5`j&i(@^ I$P1vTPcz}$ᾚ9upǀ;ަSNgX6"E'lJ$OSzU(V垦k^[K5ԲGuʬHA;@⧲Ιgo<gi~a<0)NZPBx_L]:KsA#+_+/BYT<9, Iٚ[$fXf${zӢ3-6Hn#`p I!=t8tӶI5g7\5vƋšDV0yW-*J^M,)%q#9`A$#9|+%.$YeegP~|ERDZ1\Fa%neY̌w_ʢڔ)$,]!%yy=s9iQ@`(;8p)bv#kI XTW܂0;ZP(-^%ѸW`Ix\qStE,.w\+uS6F@=NǛšb6G'շ.ѭ[Ȅ3px*VNQr6R@+c5J_ R5$S۵ѭ.倕!Xx'Sk^ϛB'h]^UE2W;wc݀9<=$`!Gc1hĒ ''|֝ueq;nn'$a-e "#6Z_bM-5D..@%N+*؋9Qɍ  G@8V vڑ R@|s"OO<Ԣ Oo W$tUYDp=kQ@JKgHpְ!;ʇnG^~y?4,{\ ZM˜G=xJ((((((((((((((((((((((((((((((((((((((([ fnOKYYTVpa[i=oc?Tt ӣk&7Ρ?AUҸIVw]v3thYSim\^]eq{9{2jIt6 "I.ydJ'/'Ҁ5;O?? gFʸH{"O$%O;OѢ.2oneTG%*H{cY"tpYu)`zwi=oc?G]hYv3ta[-ږm -Ԓ/#tv#kb ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (3?__>JѬ ľ_kˬd,N\+ Q#GEK%D{S?q){CHUX` SHzZc9ӌE[k}?|pFߘu$WڝxS鷰[k3y/cˏG2#IhExeaT2ir٥={vB\``LT夒<]NUD/5eo7_Mq9$s7=JWYUo9F@Hۉ@҅^fY;OtF-zК^G٥In۱sHf5c[m:ܬv@ŕ11 9♪kkME?Fm8N GZ+>р4 [׏t]Od G>Nm=M5R )-#2:pH ֹx{L}CYʭ)V` @OSW u _1j'P˨#AuNUiqH[0MQO€; Zy\q#E* ){5zBCZ@&fgM2Am=6VUԼҢdDB੍ A=hkJԡ4ȯE\aO2Z{+oMȌsjl~lk iX#0ʈv*_$2qjW[UУHJKgʀ: :K* 0Ͽ5=yZh60Ǥq,vraTb)W$<`z58YOl:)d1r1q@tWj6SЯ5[Tb$E%dipO9zIqj-T}>i7 m(άaprlc@UQ}ZעJIm6ݪHs\ůu[*k_y c.L~C)֖w_-P2(Ed(=sj>.OEn%6f*sOj^݋7J $Evw rpk{ x^TMv{zHQ\&Uյ/6ا%*[|naR0H=sV=Ro }oU2K#KyPg6e Čz(u}=o-E *OB{3I*C,r<-EV`C^RV٣i'OOI%(lۦ}?'ɃaЮ_O_^e3H$!d"08 c'(:}sD׮u;76&%cFBz<_νZǭͧY\F}YaV \zgPUEcWSռ?_+"Y9 ۜvs$iOD.౓V6Ďz1biu]Km&eQٜp]X` 9qRo#k}m4x'*8gnG;g=qY4FKH9`qY^v-2STUkY x1?qG^k3:͞{hdoufzxXP{Erյ;]vmf{XnXMyB,Y # 9=8mGĚ:wiml[^AUݶf##lދZi"Y"85miIλ}w_K9/](_ ql/l}ItsU4٭XP@FİvW}j"k|mF%CB;GRz~խiW ׫ʶ6Dil x^=8㬵Kmj׺m]:ؽb!vJPrbˁ]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV& ֝e*Ie*HLrYFݪGFq8]G9ePtT.fhb_2;= G"?j׺\m3,E*g1 :Ma_քJ֧UEsڴ7khHJ(vYI!&$:vE{,v=>1}Y'd$t8yKfʊ[^xosmk0]c9$:Һt #Q! }N?:TRmF3i!h|MshmȲFB2W EJ\l֢y@gD>HbUF*8^ Pܝ6IlHBVnSy;^oUKFt4V,ڕk%mX9ʂ$>WAg5*{-"pHv؅r8sPԯh.o%g˜l7~U-c[؋I/gڷVA~u%ҶjdبIVf\]Ykd.3 [SZuoC?DfFt}3*UR\N|L*6{[>ڮo|yzT߻mB:oI޺ ȥײ*޲Il~6M]kT6AST6A\i5Q@#KHtvKQ[75-QEQմ5HDH"2x:xurۛ`nszϡ5Eb-&Os3Gqt{xf߹OO }}Q/iTK.-KbXm$v':sxzkYTW}GN+V—mk >ZջF]|;rLdֵZZ$2\tsTP3RRQa=Ŝ2"]˃9vQEki^;bP_( Oؾ-u5Gq$3܇$`$Ӭ<15 c-& *" gkn4Xu<yV60qA ҩZxF BQ[Ke"D^휓Ec~K05N+DQA ާ'eBW5kx[bb Fi#-ךۢ9 'Q(ŝT!*A;դ ^݋ ɂ426л]`6=Z\jz关h*r8^هP׉Eu^}J$!Aǘ8%8( nmcڀc$I(<#!#g~-KlTՊyWc)lҳ89:cW_EcXr;k/ou N0,f0bUV4U q𵕌Z4qK; 6s) ;LViu,DQ+Fa@% sv8/+)mRԚ $o!70xfn @]@ıO1L;K*Gl/lky4yU**AV6:7ww& Ɋy0@QB(P2rrjo{漣:u-| L1Т1G1\PLgs7+sb?![TQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z[_[W07G2Stur"? 9MiQT$.nᰳEX- UJHc2IӬZ۠$P 'wU(pb>kpu3*yk$p*\ch g4sI>V|'ɞN8=B~}2YZ m O0VN1ҥDXTB"T`;KEMVAQ\Ayn]G*Vh6Cj2eYY[jq*gT WGOkӭ͎Z@2}JܞH)ǣEqiЧ%R6 І m?>&(ii@yj+of({ƚ^i%1Kwݣ6@Tq܊jMIi1$Moyq,JUI9 $tٵ8lE0^pTl0:. 6beĐ\&(Aٌ28\0'FrhF[ޓ-?hx34]7)F1r3uۻhp>i"1fٔ ۰ljew~cKQ&J\qd5j-? Y4hVexyL.:ڀ"%Cku GN01w-%}%lEnd6_qFJm#W|#M$ 4V]N#x T.owS ![y9 ^uE[[.Sk| -=2. Q|= _Uխn#1G3F8;dc' cG57V}"; ;VgL۾ЭAW>^c}0ID*Sn1v(ng7wۜڱuvm4aky6'w.X>6Ekjv:ƌ-m[kZ$t,0uV*A6*φ]k/l((BCm2OA@:=;-9+ ,6U$IR iOwEi.mNhDJF79Ƞe9ִf.!zaT#rW,*z+_ j#:N6[;o/my-p7n랝 v0K/d m sq,q<`@l{(((((((((((((((((((((((((((((((((((((((((((((((((((((m?>m?>&(ii@yj+of()x`2Xn*0 d~bEPEPEPEPEdEtKfbɼLmcl# tQEQEQEQEShG$VxCW=2;Sh˙7#'d$ԔQEFn!"ʞyM-q\8 (((C (縆T%#Q:(.!i!TibǘdddvI@Q@Q@Q@Q@Q@')#IeDy[ljsp=N?> ( (//mtG.a<{rO'X2R AK@Q@Q@Q@ O%r:FGqC\ŒTƒOOZ()OM*#J# lp (QES&+xk(R#UP:OANV dzEG~5_P{{ismꤎ7"[K$M/͍@#e*2zO~+^X]C+BZC&uĞj)Ehܪqa@$;.F. $'a󳟛; O&{ڴ`1h^h>0MVcctW&!X$Ree{P#ͷHDx.+pqx1GLѤ 6Xoe;S$6`4]/O{+ 6BK *J{ K6M"@F$2{da@\RKyQy\N< HR:zUM{Y )ͷʤjʸ9yt6RPbb[UAu o, m2)E,q\=qwv֫Py!}<[ V8 琄1@#jkZ-fYn"!U[.>R%AO'Z:&y%ޙg=xm-kR01Vbma(< m @wap6]MrXu9dG='2y=|퓁zYZvУEX(|p8 2c&ŏhqNUqj-Zשwq&#KK3~`rKvX^kVji\I,qBd90{Wiٵ[+k7bY#3Q\hZEݼ6zU۾ccoU`q@Qu-YuG+a$ЮBq/n c$k^$y-ry~lH{X>vIӎMta_4/g٬ i-awcgIvMojdlcw~xuc7 N'$#۷Íޤ56c(ir@Cc@QV-]*[+]2I2nP0s5$mo|VYl gL{GAcêkho,1ew,wrFQ@ elȮ[$H{+tT-\1xH=*V΂AsEnFV&Qz sm崖p<Y"+x"8;CPү˝Fk{Vm >a=nI{+}6UmFI>,kh^Q&ݻy6q]HM=J[9+ t\`|3 iYZGNIN>^y9xJPj5xJmU$axIF6~La Erwn =k}/OK,myB %hT9\d=*Om+hviX|w<qPꚍqnx'+UPք.\ 65[vphB5&(UTk4 nlt;i%tFry$2sޟki++ [a\C rÁ}Mr[+[G#MԢ=GOMxUr8g5඾ӮgD;!ՂP~RhǧfxWX"M-* XIې|$yں t$P( Ȭ-!0m`ۡ)U}(nMA/R*)UwB.9bxh;li$1I Z2"F9cWrv,K(b 2AoS֪[xwE3=ܐgQ|AlpyV cPoH)TEuAgI;_Xo#ru3a(dp/_'f!fiV58 e>?E%KiqF ˻zwsؘ)/9m '͹w/ˎLZǕ.KqjTZ\(We$8 ~^hM=+""!{u[oiRj/YQS/>|gaѴk/-H}O 2X y4hJ{y-o2FOoy5zx T,zډ%hD(Sն䏺:v^h,mm&bTQ^ZFjڎew9bUr}rN[a.eY12Fb8AަnQppDQ7,]0;y'~kb9#r(a #S$Ҵ^[ gD d!IH=h Fi>ݫkkmi4𵐆6D{[ s:iڤG&A >PF@l«\euŚcm+F#P8o[K؅Iź۶$/yvKd"5Bu65wTA<]~ly5/d4[H-4 :*eG'U mkiY\^uݎZL՚5+i\b8FPo͹Fq4}t̚hb# 6~PI<]L:FmM[^1-p* i:SNkt(XKA `d?@lޭocIͨy\Bݗ2vApOfKAjak ?ڞiQ.ҿ{xtW*iM&`{6"'9Lc9Ú6hx6_E~|(I,@!£^{EwL7~o0|r ]W0#'ڻ;7y"hY#27#d:t$S$Ѵɖeӭ^AS |z8sU4Ffӵ''tP 1.v9 p3V5W\7V:=bkud,r R矼8_oXZAo 1[`8V"AhO +{OY8FTf9$0 =Msj>zu}  e2DdGl?yTqW%[bMק.΃*@D;3W혆yc@*^6WRI[ހ* =E<ֱ~4 G K+ꚴ_jzQ2Z(oգ'滹,me63[E%0:Bҧ1ڢ4 :$p0**@Oh&KemUcS7&䎜F3\vqK4vG`izF Z~kkAエ{f]F溆"w%fUPTwLzU;~XuIVv`C#o~x#M 'So #q巪$6s 6[ Pr3ӽ657e%K,qcln;|`1۽AfjmkV]Jh4 jef[/[NJtO?Znϵ+ߌ5 xwD--u+j&>1?Z$kseio$i5k(nۼ8qm[W/ﭾ Ks@+/FC'_ *-BpdSx}2N|e|=w>j-$0ܫ,k9UQG泞y.ۥ]!ݰX$mqwfVg??́[s#:zTAp,8>oڀ1FRNrf2x"7}¨Yws1 R?֙|tfR]\]MwrHmU K;'ڝuWױ^wQԞ[uwA@\- t+k_dPB䧙@]ml/l]^餓7*DŅ =~`@=wGF΢M7uϐccc'SJn$HT;8]I#>Q[q}w;]BvkjĻb tZ\_ͤg]̂FU$d }7P{k: x]YA'ޤӬ! ,q*tAt;@\kzjSB` c݀A#$9߂P.KkcЫ[$qpȬY)lJZ}Lӭn)+ꃎt}#Mf YuꚕoKWMO  p>nkFRtkk;zd$0]*<`c溋M IYlt+i&exm qih]i*5 PCn yǯ4eޝ.oc(&fS¨S.AsZz 5[Id"M6<8#[Mp9ύp|"; 7x[:{8Os*ڵı,[>^ݑ:CM!;x_!ma (̀S"m3M8:84@  MA-ZiV0pcE>cr{+e19{V<?}P8@ǁXOaBF4f8c[i $Iov54<#Iv9PJloai%$zт.v׍>ȾXCwo\AI4)trI͇j8RH dc%:u}.-7[5p_9FW :Veoqeo ~V6x;nk :KeD6,h p^jŽy󓩛 8C |76FA=c0kw:/ƥbl!2y ,: vRXYk=<4`{Ggupiu198QQ`HϽr:N+œP{{崖d */cI~ZYB]rs7eGB/vrpO=ct Ҭu+5۠@zldim-d%hPE8Gp=p"O t"leF{+KNY.um:ijP3v(loCiVg.W\ j[JM,ًk{uqp;g(e|M=R-Bb!ӠuTLN6sZ[YGOfclGp~TmnH'mOjuO&ٽnX̧ՈO_Z5_V]~+dK;H ,fH.H*!"YZ^\_is,ߥNbrF"&0N32O=+Q4=>(m\>\I9# yj=w %eF63(RN+k{9OH/m--ȶpҋ9LӅRjڍj2B-ൄdo5Ubwg Sua9X煃3nXrFU۞vx{;s1D*HGBk09UZ*I/g3e.&᳆Y/^"r<7786/ɫK n4py;ʳGFf͙1Ҙ=j&14s3na̋61mҕ]?[{]xNR[s,*1>pG>umwv c}r@ c=LcY`.Y#3c32[R![,d, bIM'RV[;솩umُ;ᐈ&?>޳m+=[г0nhoni7H{pG t~ OdXϋvI[gC;==ΗgvgXe0SuhFJr+[ vEۻ$wS'$֮4g,%IgfLg`͑ȴz^0Oq#FBAp3j))yoa穩s֟"*43*moT^ K)F+*9Ǫ^_^25X}S#y oݎzw[J1!eiFGOJoimq,]YYD#.!wf5i&ReNM_?Պ cwp"Lvǜ8㎞=sB2o0fG;g@vt/ H$den $cMM2#X,*nxIO*cV* -ZJNnIZi^̶YUO,.Tߗ}NV-&Pʓ çI#;H| XtLG_W7a{[C[DF 1 z0~,oHJH>FPT8 o&?ȣɏy+>Zu=¬b3ZKw0 8_#{朷,WB.y15ELX6~(MFq[6ƪIPK6NQ],͛yF#k/'onqNhKɏy(ck|OP#4[eB̜c dc=K>ΰ/#<^teT%@;I4"&?Ȭiwx9!6` .'##':/Y^-ה[2\ZȯQ1"5<"&?Ȭfgb;[J" 0SM_v)ҭV#3* ّP} _&?ȣɏy*_R[Ye Zy$U(@$*_wI"$f bZ4"&?ȮCB_]i^[RdǦİe!(qnKh-ew#/SI /&?ȣɏy+>{qO ȑ̡sf8v3VhDZ`|ȹU'ʼnck|<"K90B_;Sn8ۜsӚiGRBRFvAsZ<y15Eeikd,o<%󉙱vo#n1Eϊ{[{y3ĐK+R|\=5|"&?Ȭ7ĚVt`ӮĨ' *z7 +H8'%Cܬ\x|y'evK~4<y15Ee&Xy$k!e%od`?핦\DHHD ]F<@LG_VI^ݴcnYDh #'u+ѵ+m쮝7M;,T d9<y15EgZKkKy2]X+HT#“n}'XHt͌"ʣ(̠62;4"&?Ȭ|Mgm#[o$쫗)lp&s}.%1S *)(C  i15ELU[XX.&BYeuR@Vsk QvY$M,ź[%XX㸨^q@?_Q<77VtZAm.9imQ;!K(xj15ELX1nV:E4k Jʤ#Hjp2zsSKk=|J폲KMxFq!I /&?ȣɏy+Ӽcgj2YC%֒m+>Q9㡭koO>98B;(% $P&?ȣɏy+1MfI\Ƒ%1a|fGqZ14P$9iiI;ck|<"SS\B.$]EF 9]cRqT񮔺MMtm-#үpv|O.@@LG_T:uj:t$ `ѰG*3ɏy(ck|uK W]_wg4Iu 98JjYMg_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_SQE {T {PQEM-#@75-EmԴQEWh2 B:Ƌ?c –+ :κ0Uѩ-ωQ8Ϝ m-s_[Kk?׶𻼾6䑙ݵI&A5<@~_MJT46 ^l7,b?cby%eGHr0+vo,ﰵx%e$xdwtTWLs66j4;3& ̫p1HA' Ꚇ6fQ $3gk9"Yg+a ce~Ta["'eV;p8OK'5s~xE ϥtP7_u=\soł2cP"ҼT,o>Ⱥ1ۑy̙݌]7zbKrMt26ƥ>aq î+JC,tqn֦N{|m!Dܯ= tTP7?gQ%{k6:ucRs\ ! &B,!#@x}9X Ԃvћ'Ү_Xj7BYL3-ԭ:Fמ7Z? Z% Hm B*nփn,1TVFl[m(bmb!@Y $|@^=!A-22d,izg=F9,4]_˱E[V b1T9 3+9; MModXƪ8ܯZ÷o!}>o~0qKe}JYa%c3*: m#'xhR=#PѬ4X&t-Lqnb}ܩ8Rh|zd7g+Z%~ϽUm˟sӭt4P1qea{A L#[?#mъ4,Mݦ<$~VA~KEs]m}̇f7?ws!-y!Ʃ=)'8ך(cO5h0O ddPTHf;gUiGqsڴE# ݐ(39d/'хŔ/ ,mU.~ONCQγ=pC4r,4&=Iv h=NNƊ} eW m;T!ҭj:sqȿ:+\=xz騠 SLվuo68#Y#TqPg}"XiZe 1ZNUahi' 9ɮ.eVM+Oʪ"xکYxwW(Q%I%>o+) rq``|'z筢9m+wgŨ{6eG)Tc!NG85ZO_͡'bIUXU2 RI#8f=G^ʊ4 OLM[Q=Χ< oBu<{4v Fp8Z(UժOm$(EktTfف88;Ia߇g"bOKb!&h jܦn WXe2 # Exkj=mn4_T_-I!$aJt״RFDL$n]d0=Ad!7W-lT6vmco BrrpMM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ci5Ci5Q@#KHtvKQ[75-QE!PxZu*us+öWqiq%e<T:-?Zu*_+/ei{uzq# V _WOJj1k|oc{{3M?܎ i&`3Nހ.yiW9NmZ ,p'\gQW6..-XPȎ@Ga$`硪iHx~WME `z>Xە: _ʏ-?c[:7ZklrZݙfQY`8 y*O\jˤirMqj,Ar3  -?Zu*-CO>T񬋑3O@ QW3]zg~zSDPt}=5ōȄ˦[@,@.1pyH@_ʏ-?V;mcLɘ08ܻYH$#}[iSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSiSi:QE {T {PQEM-#@75-EmԴQEV?9o \S=b!IA$o]e8$pz(ax@vӿ??ZE*;fn 2,ZNU@ _5aflm[k\cCNWO\ǎjRYIuw%MJ[-&鎧-OX,4l!ߐ">_3ykOG_ʹ Y6e lKg(]aD"Mw]Gu5n#n#8xQJOɑ#xu .$12G/WszPAWOT4F{帊;[Y5Tyi6Cghkٞ <*ɀgI9.ShKvx$I FGWOT, BK;I%He 0YJb 5M{Oъh<-(QHE`P-?Zu*|I=ob}"\9DC^;M%A/qv9ۻ>WOX>]gd9[ۈD$N݆p޵uNJ^(f؉m#ފ 1'=ϖ_ʏ-?bj*M7N8H10R3a ASV5dfUvmn݁ -?Zu*Mj ^K]V -b[h8澎Ub*7@ W!1'K.|BQ@]Օܓߜx`ϠXqg-y%/$$Fn%g8=~+хڼs4 *\4prA^Pfh:lZUق& {< r19xBB6㮢1/!rE-$d/ߏ\ \ǣ_@f c6][TzJIQk9/ Iakz#ң 0@o8'۠s5渊;,5ʚL0TcaF7$9YEs^Γuk^euyB:l!zX3g3T<',ZeY5"-ā1+dI xO_Esz_,F<:六]L'n(Q79}9ne⻱/aS|2R J-1U4Mj3>]c/_aMR3&?a}q#X) AnqgҴ[F-t*8J勴ɴqlp:V+{wn,4H߳4Qy-۹ͲĠ|@]}h坱Ԋ5+,B\dzU{_m=s^ lĶ>̓$g##gaEr.iң$}9V@ݳNjëo i֯m3Jֻ<ܻNYnv: (%PKr5+I x#³_OldvÚ׈g)Rg&Cq6ʢ"s1Q@~/O!X:tx\c|Q <3[hݮ^Cmܩ*I) .SErv=* ,0m\<ض2aúa:mu< wumYWtPv{*( JvZiXnRb *6wXxKX{MLCqw MJC$A(7k]_0xm Dl[UK

"YYj:$G ڛdBOE`GIi:aVxmus6ߖI.5K^ow,rAotҬѕ`l7d(ZC#)eU$Wy&VFUb@R3gc]C,g-yRɏk BGl'tP$3=)Rv۱"ͤM[mj.c`9w-#>Q@{3Kdm%D&{; ,y= f=Fm6[ mtk[{]:_1m>o.Y’=I&*(&5/Kot MH&( QTgi9pզ DZgUVYzc*(е[N HiIְ5fu A>ׯ|=s,C¦K0p݇Lf*(Hn6 jQ@q)ZO{[De3Hb qһl^,Φ\Qgq:U}05ӭ>:eq0?*/.QRe%_!B+_3u-Tqm;+?TRviF0V~Nk]'NM@ߥ7[ N*W!'RL =r;լBMۯKWcV28JƤ!W'i9sI+)QRPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET6AST6A@QER?4MGmԵ3REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPǺ}MPǺ}MEPHt0vKU6NG! qF.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(S_F.:?€-U1u=?bz(Ci=?  1@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE{%^0*i(7Һ)'IΕ᠖ȁS(3jυ!e_ݦ.|Ѿ82:eN*KxAom{\J֯'9FHϿhS/fQ&!JǗ@灒I/dukBf61\ݼ*˄bU+(#:+SΩ]kz\^yE|Ih* 1N*ݝ׉+=N{H Z\4id$pf;֕r [?x.X!PI:!0'2r}IѬmRh!L.F I"x?(kKrHcy}jĚz[jMuؖ/;b{1۳chA;+{kwjkU"cbSFy.lm5.~1,* ;MB..pJM Ѿ85Z_m丳լn!rI2NGEQ#ykj3prGYGc-ƗqowvkiI8Ozעdl,Ľ(] Z|r@h'\җP jvb~nٌۜ/QXWtz {I|ܮT1BN3ڮ[kzUZgp UK=[Nf-?P y<>Zƙc{ioupq NIҀ.QUbusy~%_3~\Lm_MMUt-VrJ&sjES]_M}Q-Z4e2LG8P'494tMpHcyZӢ˭Vd;8ۏQٓu3֟_cmm5ݿxV/ƀ-\ߍ4_Uhno4[uC #W\it>G:!kI\iQU tm]oEWծX$21 ʹTv9Bs@V&eӯwƲ@"1­H.)'j]llw% E|0G J*}Aync(qƬEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP5{ SN=Uv`sՙ)<3ڬ:m #s}q]j5Էv+srZmêHr*9Fϟ}uh?l]megL \WqbxkZ䠃Xn5t3H43r۷܆P{F@nnp-=}3W:m#7d1oa+toS=~lJd X~Nkb-nt95 8hV|]x`txz N!"c!"ʒ].WvP=x]j5ٖ].s/tQloK;Y$Q6['1'dEqˈTkar= [\Z]jWZC[}%6i6L>fYw`rxQUGPT}6K2Yc.4pdmW'p(X"PĒpA<f@mhw pA "/.{*@pyn4r%V^b6ؠ\n E(6T{{Sk%s96%"᳌ȣimJc6H|66IFSl{Xp;(tilnF[T-t!PtBuӏΪV֭Қ5u Xl6x utP6cOi6Ir3"(8n"&Y}alȸ:*(n&}# oX˹lpL8l<2bW!ҵ-2K)`]˼XAq8}+PӛO}&VOMt &{nb C䌊Э ]b$Ҳ4 1yl[a$9Z=x,x(1^=d s=1;iSeS3?@oZq%ݮdlH_9bX!@xq啚J+x-g#]YePrN=}+9domRSތY3.EYNKmp%n)3"R7|{}kcEH*ª=)h ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (+i{qePZ1+&O3^uV|M{HaeR ~;}9T(ƭHݜK^̫{VWo,LTW7MRmS,^Ky V? .1jV8fEVvJqRF|]kZ%zU 8[#.m"J^zgh8=kR{/6$/s>5(ma>UO*JQ$Y 6\ssۥvW[iGMԗ:ڊ6K2s`/=wSg?f}+T{FWDF<6}ހ=6n&OoLr]Xj\8 @¤O:ŖyeᇞIyb`6ۜt2suEssmaK{h&7^fAyA`qpI~iW/5 <V83mY;Z+~xh5dks>/S`vJݰ} Zh^KmF}ڑt:HAx0Afӣo3SHHXO IӚ~${> ]Kk۝n~|F 8zǚi^ִ k6d=:/e Kd3;}@U%[>KAq ,¢`@9c㩭x:2_/HxӨ/'bpFrN8OMG;6ĩkf}KnuUCi˪ 1E.hf_47j?t 먭,մs0heWܣbySw? _N1 5Rw9\%q+hA}KBҞ+}kMW[s;FM)KY}i}n&7p%`S9~lTV2~C/VS{G$g@T(`ϋdkKGT|&A*Ɓ2}cRb6zR{ƺWHYv`}{c隷6.}}V 9l캴7K2y <{r%j[fk[Bw3nrgW!&njR}<S6 Qq`{UtqJo,7Db Y0 Q@׆eNR]CSﮐFϜ(8fq=.P{%֡]p$B/ubrh pRH$}P ]#P/-gT !X(\.>v7ګ%H tPUB0$5ج֎GaݴiAn$&8-]4XPS*ymgtb/A*IM> 5mmJmg *!UE8& dFʈҶ0z / |9Y$=펟-p^VqeQFS޺>h^romYnnrL븢9Szf6-jڕVynjF۔T1|U.@ʫ6P)k8ᎏV׺)a+QW(~JOHu+e+EA"l)pw'uiYhmԐM!x߅WSLxP`@`pG"6kmOX[\kiF /w\)#wƻ (ឋ>ڋjB .Ԛ`ŜwQWHo h:,ծ.n$$Ӥ~c~e @}:ڂx-kf Ulcn5ILOyr<9]cmP⺪(o,KHZ ԏ3VGkSڨ?o]Amu!19>WiQ\[Zsym47Lc?Mj`{Iwv%aDZڊ#ڣ_Fǧ2JTęqYzgM/LLR.ˈ쫫ch5>w:ιwkpѲ5rQ_-u}OZPGqޕ]@ 3| ֊Ŵ n5mGII/U"f4ڈ( ktuMV; ^kH t!7%j쨠5O zfi 0aB 1VAq}ii\SHsdd=|?v ܑMm$YqdCLSWK()9Q0ʪW Qs]! AP=BEo&o$3iS\0;F@G'}-6+N2 RPI`H\`#q޺q kq4fu@a)$G\>ƤN펝ʹ2J>-ǎZMkI%XCHX> (6a:e.\/cPkdx/M\3bDqp3ں (|.햐^Khq# UrBjh (2A*H,A%unJC ܒF#q sG .|f'(J(I()Pچ,^GWskoyk%Oo"x@ЃQ M)44m Js'Ҁ9;+kzYplS'y ͤgjwЮr!]5c)RwYG+=8)#[HrID0#8TrdZuЍ]< es|du=z3jTuXf;|ojdЯG@5t4S:}~BqoqՈd$YENIrhz^C,3Q[]bND`OOZ؜_}gܗ2oZ(9/6KL7c8f9{:1Z#b.%3r @MqvZ 2 bglEy<08m+hviX|w<%kk \?3S+tu>8"J66KF͑ ~\F$A{cƥUQ`?,4GۿyxqBڣ#%*ѳ:Y5 4ӪLP ] 1@zO,iufѭ8U偖ܸ[E{|D-.ЦM$.N8k-y{-_-D`lf9=}i &(#bĢ9'~R-|)%cmm;ckWZVa ڕ2 +<3!qq]ۡBF4ЄjqASմ/`F1sn̚qeix`2Q^(;z,-BAkҭ:h?.1oP[7tVZ6zvih1*-q ҦEIGZ%}_TQPhStg^p@Xo嶸ҥ&זN.<̼lau[hZEz]7YDq[ami`T@Bg>9GdR_>1ʱCnǿ4g/&֚M0FP!*_'vFQ8WUqy&FH tE9ysfcQ#FX :[JE.Jyssk.[4+%SiaUmI6y8LAΛfoL 612q6A-m4 "f] 7@<7&%k^D. srA)w8xSMvx֗vfA1;WSaX6I%viڸH.n%Hs(I8TI GE2uuaϞ8CB ʤ|2 O>kZ^_iCqc!6L8 *G_jܴ 9,t+kk$ܠ`q:EmR#UNT pNG D/oCGg>1@QXjƠmڥŌ$nnFQx;ANQ{]By>3 k.zUԖhllōکMG-n(F(yR*.*3)pw_cԄpi](ě%@Ӑ溛 ڍݙR۫A(Gg+E)c %a )3O0Ἰon%ZMb{E= r['wJk RG&m-+E,70Az5l:}.خ^2F9XLt{0ҬmᄾM's=jKڋ"ei14@88}i4|ėr lCxijle!T Һ4>&U_,g >'eًK6H%@rϵSdR(TE[ Ux$VUK]UV.ͩDqqoB9b8nG#Uy.@,@Z=#MT}N-:/]v(Hw@CR{.m4EFLg$+uő]h\=43>O,75Go 6a8@T)gjjе z`tJ])n5cwg K+Xҙ̐dl 8|+<_y}7mu{ִP 4K*$$LV(cD@dž&m;hqi n2#Ó2yTfԬcRsm>un^RyaL۱vT1=0Dn$3*m3jbZ*-!Q̊1s9<䭵]Y-F,'4 q[a%@ j7VZvI-]rQSM^>mueU o7|*;)Trxj[h'eiFPʥ 3ހ8F/M֒nϝ$pH^H̐Ğ8"[Zj"ϫͪ3^̑)LF;}u in^"Z>D8ʏAUk-IӑSO,d2n8ϥsk4*Ύ{t%2" zz+_j^tѮnIR5E`Q7szv.aq$:mҳtX015~'X1_0u'$܂~ns$f&XTW2A  #✾YhӰyaqBˌ=M^}>]8IiٔͳD {:mیcڀ9{mF KoOsGMPŜ>rQȧqmu_k. [v["$?]c4Rii6/59 OX}$kiU "@cJ.=ATԡZnD+q 9*_sk(x<3jTuXf;|z)t}2}N-Fm:KFخ29>2:HN53ڝ@.w/gq_;}6-BXZDPs7g`ߜct" >('@$ p q{M5ƕc,dGFh؝Ŕ'GzN-Mgoyn K":Eq^gN:ŋIߝ*LʊO lgvTmGWekXiLK| 6tRJ-+O/vyjʞ\J08MC>csLmnE7"hSc"cUU @: ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( xtyZOp #oUmGNlPM2Bd= ?Vk-@\OO-4sHT؆O;95mwSR#DH\Hbo 5t|++u+100wq1LҖ[ȖI4ZйwW Ԝ zk4/c*& $p%z=;jjay~. ukO4{L^fnҺ 0UIV*s`ϐ:ss{>mZK~I(u%d EZ_ oX$'eg8ğ=ޔiyQI+}Uv* A@V%oJIX4 =(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ VzY9c m`5#%{)E-((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4{Xgm\B .$0I Y؜N9{TV/<g)+xQ+pAAsu߄m&}.th,W}2,ŝH$~I%dhֵ4ZeX[fE̐<0#)|#t:歨_ibybd'UC^N2xC/lĶۼ-eUz1"2J=p4KI9.mAR6vNWqI988tEK5pzzQկm|C2ĈGX'x A [i$m%WHao$p7ޤ׳i:}/, ۼ@FEnww jseyʅ^rͨR$K: cs@i.u-r4Y.")!Ǖǝ1@8+CQ5_6yuSqnaE*ʥ.ďa;[ҭHԼi *M+nAdÓ d`C4ΡϺfBv%W?.XNQ[#X'B /#H-gjT׊-E%r O8= ?^k,5b+I *AR F5t17yIbı u9@{ul1t"Ӓ9®$ǽt^ڭ!lG]}T6mh閣V6E5ԑ.8G#;+c晥oacihk!dfݕAa{(kz֙ungsmg )?#ϦEόr¡0-%1L&cpy WQw_k-"G΀F.Km>R)g7-)9.2R(YjH@d Mh_XzΫ[\ilqlXoӞ:;(llHaNx ۩tB7C>hX [H ⸈5̲D,Ģ.VBcī'g8ր1<0Z71G|RHY cbdq8s׉K[[[sw8% ,ȫLIr7[=0:׵o>Ca-w[ HJd;gk t%w4; 1)de{ ̯4s3on]@-oxcU%Awjm-BGFo8".V퀞NB$+8uhZw!Y<Ffc 4jIM^{Ix*4CN:b_E8W+vTrHR QӴ{834b&{gr.l׋/ĒZ[K%[sed˶^X uNZ65p aAsR3vw6㑣o:ܱy([A\os*W,eF2,24Jql.y>1ֵx M_ۼEo@3 VbH01Ӟg騷ziGU̫ĸˌVxaGHX՘@TZmͼpMm8Ͳ 6vsH=F84EZE|CE{FTİ'x[s[3\,sc,Ѭl}\_>ぷ.ϧIc%$ HBۋ[q vBMlHĞcNo'ҧӚM^c$Lćc5F ק=NksW!kY+$,Q~_mhkFˍb) Eu]ȣwUк]!n#r uG4=m"rG,QX!I$lKQ[[pDd)S,#=Y$MK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@To[NҮ.@L+"q `w,:5njbjB[vYXnNASb ;MXEggw},D+؏Le ``Ʃ=iP0F/6Lrs|F<'¦=WPKՙyBMDwuo_ Et+vP`8% u( /^\m4lp闲yv䴤/60'I r>3l9ۏƝe,e̖ReHP3QxF9,1 DHe\ 'bcB_4m'Lk"{n77Igh`D@sX&mmKPgnO*PgF n>+Wn,-=,Hx4Ț1=71yw/w\[` Z} gվywrɶqv@=~=徉 f%MްHmڪ82+@K/5q((f6G̀Dͤח)kc #GN<Ԛ ]on.<4xE(й =Nyyywgiqj<}?)*9 ̻X[[]8 ]AbWĒ0xC#l6i/Մb0Cƅ' x.!aZ 9_v+?MĶl>͘V6z[beynCXO̤]=NH ]Ni4rp-ȚQ[%U>Cv7zY>&B<ȭ9/4:+}zÑ_5X+d p8 X7ywFknȱ$,PڛkOsr#\{Hld ^dk,L:Mj-&X?7`1d$cs}ҽyK/yo k5t*p V9PD.]sshfR8}hQP€rOMm!x14ilPC 8# 4O][[+y )p.J#5&xBOI/.d%y +JH*O3<_. |vIR8uܫU\wqUY"p#$*9|QXMqh[i%ղEy?6py>R7:0A=QU~P5znymq >^N@-r.5~_fdޡ ^fռ>Нo,}SUMq%Ş{lOo!` ) v+//~H,%U%ed,w6\tZVӡ^$yaSsӞxt~KIK\Aj [\0`c`͌`qOb9,"ԯg>!Jrm 4GromaV+Tp@Dݸ8^?*λGiak ͥOvJFXm(` r1IK '5.Yrp1@n;wKyoXG 2 ѵumF )h2œ<ȶ w{+Z-]Hwc`ʨ ;澏UbD:HrvOG5'-n59tkyXHE$x(<)MBƚ> 4_ho]DYde);pjxMŭ6R =/FmC:֥SE=ޙ,px!ua#'6Qol`6cY e,yR<@SiEsi$0۹݀IJ|Q}i1]jM_zOтlтG^kbHPI%FQ&đ1GpAAVt7!]sSi|(@ހ mR]'+{庖;T):}WS{ AN5fo;@ Npzt5domCd*PGp}ƧGki`q$FFTHzP 52Y,mZ)I 'ҵ/][մ)I< k`d@ҳDŽXn~/Bzy.f T^xjiri,HIgp8axk:{y>ж[E{Q+8<>l :Vsw-Ůk hʶvU'*0GTp.R˧1lbɳE^ '94,i+Iuq{s1[taT;=zhz{i>Kw7V &XjR]eg r`ޏA!)Tk9vbt?\oYjv# w[4h DKg2u4x+sKe,3NU+ _,3|Sygikm_NkIW1-vH$pxIKR\M=eFU)*FjxjiVNe 8U|˴Rό-Ey5>̿`'rmpzG5+TFIm /H@v&N GejuVn_Т)?V$Qڝ߼8xt* [ˋ}>\-ÿS$|ڣךVgFb{y/B"JUm b%3[_Y}Deeї>6]6H^gv٭ʖIh5"]I<ԕpVNz)zV+ة+YmXϘqwJp˱Ry88f/ m$ -Y-$lD=:s*oFW{MN%q$M;=rh RV6iPXE5UU2 ?(8-G"V"krȑH]U)#Yx^+zڎ{zPɍJ\[q{h^8KE f(g>h?@KEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUuB-2ɮ'0D0 Hp$H Y!!%Ǘ"ЉSra 8:oJ#?oyߺmvwsP$$4!XR4GN6 E>3XX&_A;Jey6v 2@i! q"\O;U@xր!Ӽ[=΅\M^KAûh2e$c-Zo--m,'#)ڊ*co,OP2x8T֧ciaZ.a6$LI @w ^9x}texr c>{s1@5k,4Bě0,@C-6ؠn d Pi7^}>Irlk? j^!\i3A&š!i}a5Mj:TXQ`a{4!XcTGp۲$x]8M5^iw$6 DRn$7a۞Ͼ`lqLF1lI;M |?YP}ntm_ڪn~2wv-O< mqk<KG8\la U)|QWRET/S.2| gȭjaHm鴱}~HY{=1VQ\i/kmxGK;yfyז{n;s!Y,wxΪd`ĶrAyk3,qgz"Oq<;PwFPG8d{ɮDK$GHp2v9['} B t|]s0ۿ  ⟪jk=𪗖XUJģ}p:V~XtT\l8ލ\gi4>X[O8y%F9ҋP_w+oM~CbjKwֶA>Ј B~lǖ' n1kr!{ +>߃xzEQleO U_wA:ԍNeQM? ɻvM Xt*O$g/~_%~%@")n^Fw`{PhέKque% RS a<`TI]%GA> ]GmV}܌#~5wJbeyb=@J-GqIo ᰙ@"eQ&$yj/WtjJ9`hA=kh幉D8l8|;1ޫN;ݎZYRyeQ{f'P``?ZպefxǿoCyu6VdEā3'Җ]"K{mgp\z~`2ik"hSFB#w\37G:=Zk"t' q5BIֺ] ԥx'"CIOPBJ6WJUfڥp A44wWZ!1[- *sT,<2}PǢF#2'ϟA*Q6˿r,k}nc)Mh;HG|gz[OE~3mayYT&O%#`a=A9. 򥦙o%l&<ɳ׏֩6% {we^:ʒAYQ y<1Z}r+yw$m6[{.ALY0yG&rF /qJY 帒/;Ɩ9qQYSaR ;~=G pǾ\<g(T2+,m89#T[Ks+Ȇ(p,x$tcCAusv\edj¨Jy'_v[y`[Q ;4ֆG`w9`)~1mkEAm {8gy@ .G^A9t) ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((onedrive-2.5.9/docs/images/authentication_scopes.jpg000066400000000000000000002536621510276244300226560ustar00rootroot00000000000000JFIF``ExifMM*;JiP  >Alex2929 2022:08:06 07:59:082022:08:06 07:59:08Alex http://ns.adobe.com/xap/1.0/ 2022-08-06T07:59:08.290Alex C   '!%"."%()+,+ /3/*2'*+*C  ***************************************************Z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?F(((l$1(3=I"5KL,/&_HѢ((Ǎ(_`6[8b9Y`dUѲz(QY~#oe,UZ Ӓ0z@iEQEQTcL#WյKngXX?4K}}hv2ۿ(V-ߌ4?L+}Ulݣޗ^1cmPEPEPECwwoag-o Y*I&|;ŐO7vyr0 ?Q@QEQUf-౞+L6*%U''j_Zu(3$N$sL;=kKtťo@>4n((*9IeHaK<0UEI'(J+:ڽίa ^ 4(~pu=Eh3*!g`$-^P-L݉ 5"8`32*hZ6|',x("z+`q+,q^~5lPEPEo=*ėZ [;Hijا;~{Q@Q@Q@Q@Q@]oPk$bF1Pn+b *ZڵƛۮIeiU9zn *WYKw]̥i@:\OK㷂%$UAI ˱F\}3\o'#"+{cM] -g+D/ .і'=Q@Q@Q@Q@o\sd2\2;O@T {k%is ]DH POEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEKѥH;ŷyrRr?S)F vBm%vhRXRM `zs^e OBu)5MvK}YXsuwv%159ۡǸ)VJ*'' ,SmE篭V|[GmkG,[$UD(JdgoB>g4].^]~i_8皿OO _x~tON-nmAsU_g;\^:t->캔6˺Hq_og5RzƇM?PԵ;0cЀOg- k=KQ|TLEx̶x/O3wg[ X躄+}JYW$䃎b_/d{mF+$fǶIώ$iAz޷fi{u5]S6mg[C$V0Gg"na0֦YxԒ1:KX ~gG, ziVk- FQk y ,('+~V¯>.t^y^* 9`B3ö>$GM[MJt m,{pq&wi=ߊznI4ַ-b5bc;( 8$~Z+CyDl5X%<5Cˤ6Pv'cGoAU}t?]]x?@@Ԯ"2ڣ\$Σ3j]̹奈MSPKحd휀9ӡKPo߆/Hl"۫<QU^OkI?Tt[:Hm}aC}Vlso/$6C߂^%]H|}SL,-[Q[݋@ʣqa3,\H$$qys.9t5sK9HuS.u+Ǚ|p[#'h^Ek OAX>3hQZR̶_ZAUo x?Xru;4^KBC0 }+E^/,z]M+8F K ΊǹJ%# _йߒkwt j6G29dlzCu :J4sapA cVyzsWk0|1߉ő\Aa}QXZH%TݏV.>;{K]!ڽeKy{7|As[%>.j:V<wz`fR%ҪB.j]N[mcIYRSrYn3kZ \Nw-|w2[my/Ĉg!xO|[9H9|K{³V>\w=k;K *u[{7$bY+~AOrT`q]֗'-?TG_}#Ե`T=~x>LH|U8mPyXD^1qc~$4|gi# C?|1N1AxxLӌԫs;[ߩ+O~ ;(hxdc8+Iec{gK;e$ۑϸ?x| 嵲`VtVol+xZH"7)q9T ?5|߉G8f~+l*dh> K—]w;TPAXy*Lj8|?̚MavTΎ-?we7dg`սI&_5+ ̲ϬxkY5R LdIdVO$ԥS^ER'e]ᧃilЭDDlk)cAMbűzɸ>?ro1nsZ>}M&R-22Pr7*x+gG'}CXwXxUn{mneo2are1޼>5Ѽ;[x3%;J#o^5[y~?:+ƺuu{NkIotq׶1"ڝzK- BkiF +#^FpďJ$nᴚmv6v4qې~pqTOj">+uKIytn=Q#ޞO--;ƏxFҥno-{uP#'#`,NUX9sbXIbwIt@~φn" Y%ʼRDs;HZL֡Zd^2fJ\e\aYqtѿ5؃G얰qc zd}W.&M{I#d[oU A{ɠGOm2]B$;9Vr#v^ դo]ڽ̿jB ۿ, +q(-c\k[+K\/^4f<}ݜvMJOzziu|1Ufp A\ :eٟOxB6o1G\FI@u+xLEJ3Co?]_mjmDžgF v .J`gڥƯ圶n($O|OP=RLH6D8u<2xc@2i渑"5,;U$dsqKUu PA(><͛7cޖ&%E #Vufݞ^v޻sK 1[@ƑEHB: }Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@StE {A3F5rN*J z}30=bBƜM)-.q o4 "tLT9WHT> Т&:dQE"((((((((((((((((Wh2inYmPeNUc5ECiYq:J}2jj(p(((((((((((+5]SG5K _6MSu/ =6ikQEVnyXiOiCU7 O'sq洨?~SּD>%*8HN3]PEPEPEP_im[x2g p:Q?a^CXԥm͕QI|̆Mw( ( ( ڔ>Ls2ļ ]%ut ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( uXز{bܨUL2jgC#Eﵝ5?!/a)5f;(WvGc-#`MGk[ַ 嗦TFxzYZF"E A{ OwWv6q{q+Lgx.-&x\e$+}ԔSE A{ O(;G$:/?%?ƭ }>'6R9ՇSPw$:/?%?ƏHt_ JK6[YwqEm!M$18=SEwm;*qG(z0c@?!/a)4C^Sj^@ٳyci0yU X~u5gC^ShEճyjѮa,&A]q;G$:/?%?ƴh Ht_ JѢ3!/a)4C^SkFE A{ O(;G$:/?%?ƴh Ht_ JXԬo^XC*>5fC4hcFy*3=hhCN(++_;M5/$ɷ,r烜0H5QcvjYm<: S<*Cb@@ϭXҵ /]ưڸINTd2G#;^J{]ZսKU]CSm~ӪA/s*ƹ=XPK nI:78 fhMET-,ly >Tq2h;TnfsVRO67)@ECȓ)S hj( +5Asc$qVU$<* x"m 2.S^2&h؁ǡz&#limgCEu PVninQ$| )99=+sB)ORMQ0;XuP誖ڥ՝H%#;CqV[ (dv8P2NGomuq4IHiw _Q@(Ӭ˂%ﴜ'kV |ۙV52 Քu5x:0YNAEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVt3ם5hL_xn)aDhm_ZBA>@j]i1$عvƀY ڶS[*(r T1~yjXmo# M6q'$Τi<]?ZHSwd""CiquçKo?oqp>0 `n5 fNvO_ ,U`URpspsu_ۖnZ+OV&jj_!Ԛ5UXjM{%_#o,;oow\p3c* qnZ+OQi<]?OкZitJ{CitD_H<\ wn F펙l]7)g3H+`?1!H5i<]?H՛)V0AӧkGs)n4o&$68v V<IآĐC=ۇELp0ZGmmDQZ; &ܴW.7t? mE'YҦ%ɃO?0=1WK}VQQh h|m{UOTe : FLoĖfK7O՛N FX"l$VEco#WyൖFno{K{-JY!`6AUX$z CK>eEq3Ks'Ulq9$=&vpWtMZ Nkh%ۮHۖ#pb?Z=n"qybRxef5eڄBTA9)p`.ԯuC=6HĊ l$1]1ZckƴF8 3kQ[[m:8o&6|HO8͓]4^E4 qŅEFPnF8SYқS6ӄ/ UЮf=$\m.%%d]#H` We-K0 7']|[Y\,U4&'T9.`bA9sX?keuqm{wornLBxr  0 9W yapbXY&2:6໎y}2sP U$WHoa6mv(̅9 =*yModKyP'ύr%eTXdTo  D1Y_w= vMK2:'\?w6T|`z]_u<[Zk'@jU7#nx%ycr3Kts-\bb"Ip{nq]M/ÅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Vn=Vkm+XE,[]$Bq?:Ң(Z\"X %,(9fU!IFr2-Q@Q@ZPMŌlBG>dr9H*QEQUu JJMT>bGio*zZdmo$B'7ECiu 7vAJoj6izs5glrwfU H 1ߚ#tحlmZ|u <=h@.妶nc0${v7^1xsވ=?mC'V[1m]&iI3275RVm/5 mMmnf[X$2*䁕]sÚjjopyP]#3S([u45WڮsgbpJ{x2ѕTl$rI9ηr4{(M^O>lq) +kƕw<3Dl`X$D7+SGi-js-)n1!9I^kFӓ}?ok~z_-u>QN3sp Ij؞EYbԮ5 % V AV DR1GJuׇ4۷y#9.fYX\C#>QV>K[k,rřfbK1Lx5HnQQؠ j+3{NTtFUԤ@6m#r8I-+wլDqnaJo2̹ʎG'PFIe[iZ\B/m\F7uXvOiXζc7-0z *kDSŪY<6lVEB9zk{k}fvW0H7$z@MEg[E{M^{x\" ,9{r;Ki&Kj3p=PgL*cZR[V4b>;YL7012Ҁ&K:=[|-5B 9'%Fzt ֭)1HW0GO:Q_yz϶{dzŬn#yFEb@ XI{J.t𱔺j`3899(Z>&Ѕ7ZӅ?dlaF ulF%I}I 'kEd>%|?[jE<ĻUՈIb]sImR; pUXv:\EEsu7oKIepԓEK,V6N-\&'9ӢO/Pi[o?~1աjhd1*G w$22h\vwzufqzFnXӬAe|#1۵QV<rn4ԢZju76k̯_qޟ&gH% Qy x^=84bDZ6uKc=͵ฒm|ɂue^ =*zƛ5ŜZVxu/eT}h\ U;-_MԦ;PTuvF@qxEO7jY7 r0d8EQ]oJk{5~l *`ʹ r=*[JJ7:录!Lh 2 6FMsI8T%bp9 s BHDbXnnPp:q(H5ԭgN љ}' 5dF dͫX8䎙@4VN; 2_i/G?=VR꛶ݞgB%.ൌ< XO` hFMsIJ]R]R4۶AxNX!hmF6GZEeS ҝwMeG=sqgjmR\m H§g(|Cv6`cr9z.eek=Ϋ{ago/9(=+ր4hig֩e%*:q'|C֝>=\VpdTϜcfOtQ@hW]-#xHs44 x8*،8!2 G(ڽW)s A6.Q *#]j}[[CnB$*,D/QT$֬Fo:]Jʑ=R }iƙ}y=isslq<0ή yEb/4uEyn.cV[slp?g1z$)]gO!29y64-%nl a%aa d`F#"Ԥ4GtH"v<3 嵝\Ek¢Rǀ*" bf,#tH"¶pO *k8|ˈ7GL>S i#T:.ҞI97x@V|m3\0pKUOBAztN&MsXlub;qB(JOquoc$` @+vue|K/yFg'Һ#~ލ:->Kw5*U_-q2`.5.ڋJz@'U6dGOQUf*;,8 K,QGRI 'tob\b9BpO 47擧2ڳm'D'vv'Ǯ>][NRN;tV2dNH4n׋dcBmz㡪4;LTYDyWn mQUg>d R0lpt9$c"].Me5#7#F/Y-_Xկ6 7 ld^^=ni$'`\d]ܧ͑kF sI mRib3F9 P?2k#O(͹yc|zr('tXYu{iL1;\ 8(y`x׼ISͷI᳒RI)bONP4j* kKq5VŒ85!dt\'9:׭ܿEQ}oJ+yd; 0$T;[ y9~̡cR@@ESш&M[ϴ A0\`ϧWo+ޜ,-.M~[?Cgx J+>Mb;[[Y4t0U?X`d=N}sI;5K4KGp#pI EP]-n.5K( [H9=6p-.Ѯ;{;u 4h P+xLV6mT\8t'9k:eqE}0VN,U zzQ.]7vKYD9 䁏qY(ikP7 l 6hmcZ ڐHa'lcf\S$z⤗\-RfTH^C;UIs@n_u6侵SKN,9 <㱧Xj\7Ic6~YsxCG}+#].X$Vm"ƒVWӣԡӥdLW^NBg$pyc@y(((($!+D򤱶p`ppy( ( ( ( ( ( ( ( ( ( ( ( ( ( (1ZヂK>- JeX, 1s=9>]?Wo3tWCO[&AfzSqO2nsk{ෞalZ=$zqQD6Əٵi]i3ʇd*8;vj։qZiAYGK3Xʱέ:㹢w^G)hdK4m̑;x HE)d*$`&s`;_𓋘Ud1`g˒68Q+$Iq 9$sx .%hy~֯gEցr .Ч#9'8ڮMkͫa8y B~9;y^ktH$v1HT{ 4Pܸ+ ciO?~Ĝ9vhvL`xTBc29i E$cR{ZXw8[VL3oIc)lXW#jịK H2;c0H a cz?Ju;[[o+?{S@cXq%_X"YP8U{kd/#4G qr4BCg,w+#3lv]s'-LԢ,u fL{ P7peAq5QK{%.4;[Mf֖X䳙ԕ}ā{OhڍizDj ,X[Mֻ,湔1Hci/RI'[A <U3Ge\N2@zʽIZM&I bm\H n$l 9klbT84$}p8r;l՚tīr" lK]ʦe X  eG#s~+e^ZEwc$bqnBSd'vM^+d/`@^G[N 4=Gx\_ۋwz^Vgc|cƥX6kk[{5yPI dC–9'à6kɬWM%B,ImuɿuY-㱞i9͕?3'q#GF<6vT>WcWg?wckή!L[ݜX\[6a8;_C->8ev v ? O_r [Y]q/C qfi [km#dw,AP&gԜ{bHRWӿ;il~J*/wosI.>aK="KYH\~GV8,^u2,HQ0 uTGݵ~? ]ߛrZφ.lϡ`]; at]SRf5;(K  ǿ+9n_d0y@8ԠPGCҍw]?4SʺG7^n߼l(%F*Q 0{U3&K#|L [F.ጌ:OQ3I;fPJ6= Bi-CNCYmྴk+-h?")-ǘcO{4"K .|uwzWWLFF,O v*Fcv'V`~᫛Csa-[Y+y?/~GywPavy+ţ(9.!wbT RTS]0H18PII玹czGMwT(#5yo$18iz.kߤWl-1&%ٶUrp{*vw^={JD%o4#*v\gfriX]Aqf^j` y**cXg# vQ:m}BKmI,fxxE,AMA?<8:U喛g,1-CP0%8hs8|9YR5H I| X+g҅Û+ F]֒0RTH#bYj7Q_^ϣPI}kg5\CB>cyR2{_ M>vQEmv4 wn .@8꾉,Zf]M-Ƥ.`6OH LL18=e|1GPWӣ7n۸XCw[oqƏC}1K7:}ݰwka2I+2 ˜8zCiw Z;[gkj ٜ6ռ/Ղ /#[v>V8;ּ7sr#k;^hZZQwHw9һ*)i%ndMfwcHK`̿^2*=GI-n ߶=i5CCo0JfS dc{:)_!vM0{2-]FAfn3J5M9'T:H.7ْ&ӉBb,NsGVsKWR98Rg3dsYVo}|% f{Ubya Fyoe)y$[M>Kv_@,"i,09QZ/-䵚 ACM71w$[ldA{v漏KSmMz*t%%m3}Y6Zfk-UH§FX>)#E6 }j,Z f\&I Kb"I\{9@Tɷo4[m$iqzFv#pBT`vU6ؖk9cllwNK ~\zFG d̟d]̤sQHqn.b!:(?tȻC * 7mKSlI<:}+/oO3 ]gKx. ~`ci|z<75q簉M+|gq_E79u 0io5,e 1֝=dӭn~ǩ =܍ O mQ5QB[84VWT:h [G*ME7V >ٚDWӯ,V('hhv IH'uS/dtp6avuw2\l#k~oߊ-K+]B[&{@$"vA'E.o]:폈 &(aUI9; g3Sݫ驥4TJȾUx,rv#ug}{$MVyF#1~p*7UѮ-oN-Ioխ!" |ĐouR r28ҊKD 3EOG[[㶅b/T1 t2÷7$CF(l)gWˍRL*g6D;+~+-|.}IN)%s~^_Emka}){HlQ$aA\T>DpvvAF9V^ 9կ[* <kBѫ=1Y^%ϧ[K{ `><.ή:$L~~MI/B͡ΉfHr\*0H3iZieK1T.)צ:7m.[ҍ֭l4 K$㜯maדRFPmһ4dq]e13Z6ֱ\XHE7 */ 7ޟ/z-ߑgivm/u;p8!@/>.;FL![k6Q#eT1<]N_-ʗPJg1**u ZJR鰅Yw;o*v83O4ucgҡo \_gw Hݖ&|ےAa?Ł]e`nY/E:j?mO2?q䃑9ާo (Q@Q@Q@Q@Q@Q@GA|wI8 _GZ?L= ejG³@lnKmy~DU$rN1ֽ:[ύ5? .[{i#o0E|p H$sǻSinncN <yRg=0;)k]Ǟ闧O-WIhoR?+a6`m `n=.OZsLR͗)hCwj >Z[Ao+>  ]w+oo&n sj+9kZpkM}WY`]*k.c_$e8lG<`R/AnŚu([ sxD7XGB$t;LNVw|}<>b)19zuץGF O̺k-wwj[*&ў`$a7pyox;bwD>qsHZ~}˖Y ykQN`?_qq#z_w,[mx]#Sk>_e J-q"is /&@d!;IQz-#TZhym-CҴˋ[uǶht0aTJиzT%MMݬEu^?DlRAӭm4xZE#N sӾsR[[gi X\d 'isy1m$OpatNĵHXpr67 >'"<8-KYɡO+,͕ٛ!X;c;6;}ԗc5(+A0/lxȓ(UM#KoMn\f y'x-ߟƊbw=*->^pڄش)0E-6d(9`W = Ʈl FWi+o- Z;q M/ mv~V29L]Y68Q2aMZ%Q a:Mf dfbݸ{8Tw_gN-)5x*y, eEWO%P_3ⶳx~oy1O{HS01!X2ho4c.Y8_n@I9ފk$)aԿ_83BH.ZR3o;| 8l4?EeI#A2-͸ݿ0hiM42J1iEVEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE^=GE}&\AiaC0q(Ks+LӮpΗ2# *<4C5ޫm=Xiߪj"lg$-y⍁ks]\_]^i\b) FďCUcosv0i|%gth ˑ:ߘ_#;+k+u~sJTmL$8<1=9؛Ϸ76 fۊ\5_Kl9Utkq{y'o(&mRVko?19ITVe2_ʶ[FH2Ī<ՇkF=4>Y|AlbkG|D$9Cw7zMHȌU(HƈVq6Xp}8 bKY2UKWqd6`BtnO5 C_]NK8$ vq kcU>\1Hq.BnywD%9$apFG~[_V!5.N1=J'UA ]zSjw7QXG$l87وRE? ;4-RBf}/~)="EٿOEAȿ7vo@P}/~(d_ݛ?PTl߇ >f="EٿOEAȿ7vo@P}/~(d_ݛ?PTl߇ >f="EٿOEAȿ7"eߍ}Q@Q@Q@}/W9袛m$cA4czAsX^ ݕ1lJbHVOժ) Κyl~mdW8UK+[66D10p=@*z(R\]2K#> '$~U3ꚅ㷔`۫vw̬sr:c(Ή^j1jzecʹHr6'[̰Iy Dw wn< E;=?!_VVCHR H O)'Zɷc7`"ֿtuU}Ǒ y)$mc89$\}ljYFs,FS%hm7)cɨź:C3O83JФ?d.ny\Jڢk?%0j i)-*cӾ W.5rUZI!t}0{'9GK]íJ*[j{5ۛY`' IU(((((((@@kzƧs 1eS-[ H\H4zŴ/۴h[N1ZM_wVo izʢMyi,` $sQŭ--6Cq眰b1m>usZ'ǚZNY4vN~ %KAw޸$ps[sx[?Q-k$Hed#V sw r3/"o}iItN+Gxܰ \I!rpx2 @Gsf Tu]yG9G[Esx&ݭo>ťs|LJY1~}%;8]4y| snd_)9YU }I=:Z+񭆡uji{ ͍Ѩh,va7f iZ_sg%\ġdH.'##6Y,."` a˱c;qcZ[1O53F7"'18)¾:Z+񝵅:Z-&Hȸ,oه8<oZ,SHm-nsz);?G]Es7muso1su `k>H/[}:O:T,ƹOJW]Gf֊iZ}ܘ!6ݖ6YGsI8O/(mye=5ѩO1P+w0 UuZ\H# &*gk2AMiR((^&0kZisiWsDlRG4$KgtoEssMX.H8˵S~XA rqR'k{ӌq2\ߑbi ]vvh-x+:)~GAdB|c_Ex+{5Kt/\$t2h/SDz[l4k׻]J++IDbHiR6zk}EpW%VQC#BlS $*a-OA_qQ\ň~ne6 f#_6)6398h ΠI-q \v:(Z^ot#4/kbmY8I\s=s$:oh_sIURwqg{WEE>mx.j4VC-ɒTLee i$,r@52;hM딍.2xfֶOں3΃hpMgpG3>ld#pN~Lt uo^VZjY.fFV,8?tu9㳢W3'[)52b 73E-&6Gemtfmyb6U mN;*cZhru=j ۻ- g̪ oW Wn-/,.;i"{:MjDl(Z Qig[kGkoeԮ1smRѼq+mQm,+mLib R}86_uSZuk4w#F-K*^TQL((((((k63jz%卵ѳg Ǹ`29ǽ]vwG3t7To [M*[21AF#Ny)|;3Úc[fcl'CcJ4CyYe pOld1lCiV x(vP0*۽69;ᾉc tV3\Z{m9e;$m$Z<{y$O;OVp@`'@WiE. gYwxٲN'f ӎiǃ?u ?l-NDLǷ^zWQE;&}#XSRGO έ,@_Cc$l:_4T14f8|u<ֻ*m~!~).k7b~c|?g( ڌ@_Sm$%>an185O0|/z<ג+Ko${'98秢vtZ7ڍ}Tv8+AW?n'cg1\d݌)twwI<{qyYNmBDvD~id\׏%֣ڄז[Sy#?7%-WYE;#DOlxk?D%76 3[]Z%;8&m[NKƐF''x(hr^:_UQ~W]xzqΞMk^#R,na"CRqzآOA_y]&Kn6YOj6B4#d*]uGs|/E~e{K]}mKf ۩iXx&K;KCq$Ơy&M7ݜc묢/@͜Tm8eK 0h}  sVYZ\hlڵAD._)` ' WEQ +GXݛwuN?:Ң ( ( ( ( (kƇΰ|D&d8y#UNFH忾컲''Ζ=מ.hxy0AֽgGWWlԢB?ÑUӔZRS5dWS]3KA ekQNm?\JI;0b0#8fttV-&*奼y6‡'xQx]JO.u{H$)ʫɂtx慫4M訬6%-Æ]A+)$`)o *6jCѐ=YrrqJWv:*+Ėw*2- dO Ŵ[3V˹K g 0#r^`Wcɏy(ck|}A{y(n{y15ELOX跚{FuT398鞜ӌ\iniy15ELPGqwqlH1̬2`aTfMn <y15E>C<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELO<y15E>g_Q<(LG_Sy15ELTc|A.F%h~tk;[h4er='qڀ4"T/Um7R4oلc3rTQEV'tsxv)CISۢ-Eݫ8EmE$;j P1HXæi6mX=p՚*Q8B*1Zwңۓwc:=η7gw <ɔ(ueIYCZ݋[7]C} ePq"UR '$mrCYA`׿ډ~,#"/NvG&&xKI%pJ{ ƺ(Z;o@i  HC4vM]> Qf4%I8>b2ět$3#G};WEE++[lwO9֫xM;ZܵHҠ AUICyoTICngVq-q9 Wb0&;O*i> tNFӸg'gž,:qO$:b2ʡ`y㬢1pzݺI-؜$=mqQH((((((((( ]K@{5&.4 'LxY?>us$gg?'kuꨮN32j+ [D]P*)RDy#SA2YYc#KfW7wPkMO=M։y4L1Ky%iguƱ(fVvIxN #Ԧ:ܒjp\ExG`d#9>TQ_/?!:j^or{7%UgFR)$(a 0g^iB>sj"r:hif(=b+8֔UnlFX5th&x"O?z('y:-5ΘcNYl k܄IXb]ˢȌ(eaVzPPU +ov>d{ү5YH\QӐ>kGO 4o2{VػX7IS >ywVq8˛1t,WI-y#]d$+j+)˙q* ((((((((((((((((((((((((((((((((((((((((((((((((((((i=.Bl6 +Oxm:$*>n;k8c8*((ROj3 {泫QR=Q4-Q\syXFzk65Eї+w +?W!ak}mqoVk+Jrd,A?vW$q5VQ7RFvbNUHIw>&--k ]#EQ՚0Gf y j+6_CffYG8RUXjxFͮyaV028sPϿlY:K= 7Ʌ 0b ckKL-5xK=B1$DBK@((((((dE6i>߱S@}}abϬ?T YOu(b0^ʍOϬ?QOgu &yjBH]vj͍zoye%CdgߚErT>i>߱Gm?*zǶwcy䷊A$ܣX}*J# Jtinh}abϬ?TT6}}ab5l׻&HKVQWOF=jվŴP,o6eqz}hnrϬ?QOl7JHdHBpOR u5c>i>߱Gm?*z) 6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}abz_$ s,>}ڀ4Ifڲ6:rp2h`6i>߱Gm?*)5}6-F>]B/n|6:$^yUH= Qxeծmc=¢G#'l m?( ~Ewiim% 4_A?7Q֛&E}oe.fW*UsGOO>i>߱Y^-SVirf0w2qʰV״tl˶AdGKc6}}ab5լ^"Ќ>9Y7gnz6}}ab5h[MS q q'#vlO>i>߱Pɬ06_Nyeq! zz/mdKYdI?/= 6}}abm;WүoFm2Ȫބ8i>߱Ut6]FUQ#DI=/e4m\5><O>i>߱QjTo}_7og8Ba]"18$w^ ~aXة%("2M"G]j+F9仼-<,%9bO}(~i>߱Gm?* ̺AxBJ(r{!𩆧`u cy?g<S#րO>i>߱Xrxg&c }DFcn22ĎX sSN{fuT$JWm?( ~C>=\VpdTϜcfOtQWim?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱U5v@e1I0j%۟O8go0nq}}abϬ?TZvkFi|kYPЕ'PaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~U_e"\E~wTV~)ѯoUٖʲjO(">LIzP3PiC'#EZ((  eDM2a 2z{r+^+  sJI3/\ӮL$΅fϗ.U'Yѵz[--|)WR7~lqQ]&g5rm?Rk7,D>BI8=6Q qti#fWh2Fsں)NO \CmƉc{k#I`gd*8 ssJ[̶R d&HǾv6w+)tr:G=)tʹk=ٝ^Fs_!K;(wx.L\X[mo$6q]2L@ Jaw4Qհ?PQi]=Ɂ/ '9lvހW1/ut{8-J=M!}E3U6rK`@'N>2K[C ,-fpXr*oHʰPrJ|#H-.%u[co4gXڻ bmH=vI]IK uĖ#Xʧ|2W=sTn%zҭhӥwطZ pAsQCpZG \,38г61_ji ,`!rUU*06:[Q(((((((((jIu[y8*@պ)gp0֣J[Aq"9c=S0:p]HsXx^Y[:gofڱ~̣r ǰ}EtC8?08򜾓ewh؊yAi?_rZhnQ4x. P0T1 >\8//xc/vv m\#cMEA:1n_ (M((((((((%]im5"EZuI<#w/cIsoCU~R$Q~sK[]FJI+Cm3HKljx ( ( ( ( ( ( ( ( (+.f-"+No v\S`Ҵhg(I3BJO]sVmmc8 a#B`*Z((+}h>\Xny?0\0<)N\ά>MWKՔ2G˨LJ {zWGkj*Z?2_ڶ]u}ZCgl,mR't!Tgo׃B|S|@#$,Q$+ D`G stV'$Q[7̩r 6wM= p'MO4&wrYc}|#{$JW@jQYZWtjo/My&BI$,8dqTZ텦JaQʤ&OBgҘ4VUtD[#K]Xeʒ`3//eq4qI|_ H<:\ +Kmٵ1+3n#tlF*i>߱S@}}abϬ?T YOu(b0^ʍOϬ?QOgu &yjBH]vj͍zoye%CdgߚErT>i>߱Gm?*zǶwcy䷊A$ܣX}*J# Jtinh}abϬ?TT6}}ab5l׻&HKVQWOF=jվŴP,o6eqz}hnrϬ?QOl7JHdHBpOR u5c>i>߱Gm?*Zpتz eQ™olK g7=zm(I.e{~i>߱Gm?*z* ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}abz_$ s,>}ڀ4Ifڲ6:rp2h`6i>߱Gm?*)5}6-F>]B/n|6:$^yUH= Qxeծmc=¢G#'l m?( ~Ewiim% 4_A?7Q֛&E}oe.fW*UsGOO>i>߱Y^-SVirf0w2qʰV״tl˶AdGKc6}}ab5լ^"Ќ>9Y7gnz6}}ab5h[MS q q'#vlO>i>߱Pɬ06_Nyeq! zz/mdKYdI?/= 6}}abm;WүoFm2Ȫބ8i>߱Ut6]FUQ#DI=/e4m\5><O>i>߱QjTo}_7og8Ba]"18$w^ ~aXاq 2 1wF I<YrxLL BP6=ȤFNFAW{Pm?( ~fxB@Lp=U<`hq-(;-G#Λ,p: ;d;v:Ϭ?QOWO}o/nlq,];SiNkw0esz6"OϬ?QOUeV[J%! AQ#x5^=sIRF!6w:6}}abA95}B.~Ҟ[6ppVn ;@-<@'~taXأ6TEZ!7֫= ߆jCik%ԬU-1$I6}}abum;GYk[Y,3,j[2 i/53NCQ->uO4.O'ր% ~aXبƭPP7wO9|о3{⢇5Ο=c- rGјY ~aXت V̶bš7)r3ִ(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO붺7)IEP| .ygh?ys;6}}abӵ3X5K䍶Zβ>85r ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z/%B(ĭxӸ⢳Ngukz̷.UGd;PϬ?TA9bHbMԭ5:6a=y*QEΏz/(} ]E_:'+>s[]Yڥ<>#Yp R^xYM;x{;qm$&;j꛰(#Ώz/(} 78rBo6r`.wd|;dQ}X7sN#Bu_-CItWG=yE4M][g3!m~o~ [{(*Wn xxIhvw!cqe*2 d*p$3gxB:?Щ*^aiͅcg썼I;/L|vG=yE6)tG_PyEt@G=yE>g_QG=)tG_PyEt@(((]h@DE2J5ni Җ\Hdtbqm/ΰY6md_s(ܿwFrq3Q].O%B|N `0=bXn&z%팺n,S[&4f'+#<裥Ds>ӮỺSW j&T>޼S/4B)uK,Z aI4ѬQ#m,@*1ǾkhqiαmqkF#2Dl`3sW4 OOom` m*X. {8'tQޟp6>%Q o~{H1FX.ORW#է͠-y[/SE!t?EGKӫk%rBfےJ<@;03`〰iڊ76K26H1Y@\ n;G@zLOzqi$D1..nFs1YGZm\ tka4m+1bs&® k/[E[åsai#bm8^)`ٻ!skJuwDp^3=}&w=kcN=iw-xon:+3P59.+mO&y;RliE;^8_᭼=cؚ2^f;T6'85H&P߼-4` fTB%$kXOWsV <5yoFj.H2A >׶6vP \Im悒d+qNVwwqV:䗺mjNU7W_fzWݸmom,U]y nGVpo]4q0ِggGIȻ/RDsU<]m֎~k9G%0i,EhH<7n-5i#_-lKm0w` 73QB0zl^6h?ٍXd r'tki. r&m'km9Hdu=3*p@ɠ75hOLt@X5ԪQpֲvd׭-$Mϛ\{Y@ZݫݕК֢.fY'wP-cvf UiSܽ]C!˯-C2#ZڢWYIkIɆ8R|,xd56K,xӍ4J) (Q@Q@Q@Q@Q@Q@Q@Q@QE1 ǝITaXة>i>߱Gm?*z(Ϭ?QO6}}ab4nWugj@p2O*$. ,n;Fo,$ 5qrKrm?( ~I ${'䍎A<gG=}ADaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=s kf%exM6ՐɴgG[O>i>߱QIj0{piI"ʮrGj(ƛ-smCցn9>`d'΀4i>߱Gm?*+cLKi.N IT2 5*+{)u;4P@$OB=(Ϭ?QOͲn|RK4𼑓Uj&C&.e&6]'>p::\<aXأ6b(n&aɻ>slaXأ6=fZ宯q} ʒX`eP3F9RAO>i>߱Yv~.uIn;Ox9'[a suf- 7#;I᱌l?GП6}}abciTN\FvHI݌rGP5swHenIo|y 8i>߱T_mZ}SQӭ<9]Q PX&xNBɼH+=1m?( ~W״:mBU 1\GNG't(tu u9,b\alϰϬ?QOpM7[_9|ҿ ㎸G4f[]^)s>~~^A뎔k6}}abkzu&א=DeBJ}899UzE6a̳]F纃:Pm?( ~LΨق,OzE4ۋk{i5=w*2N{fm?( ~dpX9 ۱p3GhK>hYʣ_Ϭ?QOs]۫ʍQL ~aXب]>{+[YEytCj!ITiHQҀ$ ~aXبb{ l |r߱Gm?*kKK{JyQ"uVfo'$ýK{uHr(iU o,`pprރ ~aXتZs]GqS`mSt&ls9(m?( ~Fu]9uAd-Lu%O^KyEBH%IKO>i>߱YzotSG RVi,d9PI @ W'Gj^[_Gucqͼ)4.z84aXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~T]$"Ѩ>_n~ I< Eͼgݹ_ƀO>i>߱QiƙFiF]gYBBT@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6V=MpbViwqQYFVOf[*#2zGm?*H1$y@AVƝ 0`LrFppx`OG#aH-g;܀l y26MLͿG[_֠?e&OɣɓyhS?&&OɠQOdm|1L=̷FX!hlۖSg=lhsKD:1n5cAZ?ʑ"o0.G*RzZ(*Tsj/`+2Š((((((((%]im5"EZuI<#w/cIsog?,1ysK=KZgs1m_sҽ ;ymZ[[/)|dži@n3烊zݏ5]^-WZR3h!ؒF&S"p^O9(w*~ oMPjn][a4dsSwN+FO6!-O81q)=Uw8 m\3\6Wd\Z-N"ߐv<)nb51"96Ly# 5=NCk)'frrfM[)"*(pZ+A^q%?d,Y9&ͬ%J1~I|{ w__iVW7pʸDӳŢ)gsu눖{D,F''$n\u/?ڝ.̶ҥMع60Ӻշܘ8DE-m$s> \<~kF+2 ^xWE\^[X-{y«ǟAZSnwB/bb){q"HYJʲJ$5=GP#>^Cl-ML"?'28wR*ua`ᶶ:\Yrb!%YwtZz5{h.썴v/bd[Æ븖ykMkia>4%oKsBnkySj`1_ &QG8[e0`pPzyNEcLlmT'N.,c1ҕhn_1NoCm"[ۛܙٙKB6*%rJ8$eբޮEPEPEPEPEPEPEPEPEPng-ƘbHyu=ya7qTɪi$O9Ip0ϟ!*?){j( 󹃥yyqKfx%ap@<Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@NMAv7;g)iZ}3ocmw$!P%'9tPVVYF0ơUG-PEPExI=>qF^5 f'AJҝ9T,HN<:+ ދp$c >` _+5 (2Gi[*ZWs:USE=WZ|VCuqup Ds %9辔îc .bK,&~Fإp0rÎFyj+F[72y0O.)W}Pˍg II LC FBv r>R"Ԣ*ݺ(,o"!]Ii fsȇar29r&Ҿ=M*KHdcv=/YӮF,˾IY@u\oljQX׈G3=ʛ n9!l/RJF1T$"yeXOZ<íc V=D@۳tjo®EPEPEPEPEPEPEPEPEP%)Dcm?*z(Ϭ?QO6}}abo.ᰲN<maXأ6=%ү-\HbyW#x6mnζ}dX)*I ~aXة"1j[ܑB#3Gq8NpRQWfm?( ~OEH>i>߱Gm?*:ͼڣتJ#{ Q랒ݏnmVWKm~}sO<"m?( ~,7Qy=dE$3u A" ~aXب]R "VFE mw1 { G}[X3 VGnn2T0yJ{!9%g6}}abdaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TPaXأ6=m?( ~OEAO>i>߱S@}}abϬ?TK䁮eGԗOP&6VC&G]NMlm?( ~E&Ũç˨Z٧Q$*G0xOlڵͶ wZTVhd́: ~aXب2X#m-8&P':zdC\ U= rà i>߱Gm?+6źbJ .BLӦsFN9VԚz|v"lpp,}}abϬ?T>ܢUG+&ޯQ}}abϬ?Tco|K$&(Q@i>߱Gm?+3{ Vwec. ߕ{CKc2\EKsoE'~Q)B /Ϭ?QOY/ ԭ-nHC4)'*SƧ`u cy?g<S#րO>i>߱Y߉4)RkfXhRYTr8i>߱L4EM>d&l 52=U45E$]hӨ L۱ ~i>߱Gm?+'K/i>߱Xz-兎c-յݍhb>`I 88VSkB]oLԬPb{&xTXd@HeϬ?QOMkJ,eԬG1NF`*9' zӠtBk kY-fei#(9GZ6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXت޻kZq|DZ5I'V~ ۷8i>߱Gm?*-;X5M#QHk(SJW(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}abǯ]."Jm?w;*+?wVirYD{FOQ_ ~IC&$=v(4JXӡfL @"PEP\׉|'&[jZ~l/mǸ$WLuZS*r扝JqY[/;뛗^Fy$WhZLZm"@oaĒIɭ +jغQ hhѓV&ckV6:f{]A*av?vsN ?ʴ%rCk=sg@O[ErunqZsXƖKa6y@* `1eso UC>c:\&F|Ҟ^ݧ`G=EtAe߄-B-R n **$SD}KNtȮ^[Nv5Y81[PV[[&'>]bc R|81>siMoii&3>CV-60z^rڗnOS.l⻉mRE OD1gG{-<$wl+Sio RR{Wp8`{SE @zJ62ZZÔ)w2V~@gaK/_Z] d$]P7d̻ԆL m$aw__iVW7pʸD~?#Uuyd ڑjKm$DhPIެBz5[KEW .Xx8Q][uً;;B0^ZQ l 8+j( ¸M"/X?ux&G ,U>Ar#:h{Ov}%H?I,책TO+KG<@$vUЬRDdܬ7g89#U_V1tKSmMz*t%%m3}Z=\F?Ү"1H*N9>E%VjCihjbkm+#%y^Hd[7"w=;g<RF1An;k8c8*((Gusg5aqB.rQ]LTʣjQ^iugBK1ze9פC' I "Oɏ}P°[|hm- h).ͯ-!h؞"*0 >YEPmoOI"k[y1t;#qU|WjWiogvή8p`lQXnI5:Q3Kaqw_li}qHfSygjEQEQEQEQEQEQEQEQEQEQEQE`ly$AGO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~aXة>i>߱Gm?*z(Ϭ?QO6}}ab ~IC&$=v(@Q@r>2ub3!]4N]EiN.daE7N{>ǘ=sWMVUmIPThZW&k.EYdd~ +Zb-K ۅzux:d%t+6|rG 9h2x--Yg 2&ʄ@F0y9㤢S3^Mney0.SnG*<돺R O6 LIdTr9?qSEF%6i0AwF+n(uf%CK'=P[G5HD@cH ͕H;Qⲵ(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE\5 tW 6NҮ,LT8MwTWxVV{I6&:ʽ7I$sp?\Ԧ3V\z4VGG \$9 i[)]P/\ }<w=b:6͚+$xJt4, #TFWkRj%M֟{5{SuMi./(!|}2(aW1 ԞE+ ,VC"f' |S \Ҙ+g1x*a y^4t+İ_xFKk{h#{iU[v2PMmPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\?=jn0H 'WqEiN.dcZkGG]3ssiyĹ7(vt Y_G}e؎GEkW:hʎgg{[+nsX15S7qy r}q]M-G1bQP<@|d]0ɜrG\zGo[nL dm9ɜp8WeE K隍$ ,yc6=6~:ۢ{+QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ϊCw^iAv\>FL1V\,z+sNZvkk$}dzJLhx;WS%ݎ/nu;ٖTnH隕=A$;a|Ip26y-K{Tu-m(ismĬ軶7b13UljӯēkHop0z3Ӑ)V#$gX>1{{4Kt0\!nOx.k6:{u]#FD[m kgT>m>}T 9=h_ןEœYmavwcgͻv1޴=r zkx. 5H3'k|6tu/nԚ׺nDB#ҵ| e{iͩ$-=҉$}@ޠ4-~O!-6k騢(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*9.`4q3p*J(Z?QO ֟}~ uCn>i?PGۭ?*z(Z?QO ֟}~ uCn>i?PGۭ?*z(Z?QO ֟}~ uCn>i?PGۭ?*z(Z?QO ֟$S6|RLuEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERX'-p6m\=m jL}VQ qDXR5 0J|?|mI11f%QHw\47i%͜+'қ+G:~eŜěH'ϭg^hWz$@["+;{+&fOczҎY4z-gX O1\y=~4Ʊ8 41 Ynz`.dhKYYBf`V ~ƽkhm,`+k&FYY[k29=3ȕ׉񧋽2RAy X#I"o?^M[NTMկ]j)Jg r9q\jrߦ&|3K#9̸ Nsq0i"֌ZCyqu#ٛW7+!Rh?΂z\qG-k[i++nH$#8:UiIӺ} :׭sFuggksap,,䷇Qhh@s(*&I|jΑiI[l-U$Ey=鹂 +[[o\`STLl{6za֪ [NQ3jQm1"rwgsXj4.q)c1,j#/67lkM/P4b̞}ٖL,I@ͷ<xMK[RlÂۍ#vC6:V.2X#m-8&P':z;xzOPLAOnX<{e-CCI[ᶚW-(2˹LrWvFF)#ZhQȥ]-VS؅nJ͢b (Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((]:EWU8&G0r0d`_ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 72[bte\'J\׍.%m\9]s~EiJQωQG_.aZyR$\);#n9wD#ı[\ Mi\ox!'`ٟ)/\hͣ嬂=(ib-%bIM,F`ßVVm]ȕO:{MGV ,ܣ[?h:aZ\ܘD!Ì$2F:kT#he3b`2A;p]CAv%K1 +|pw6=Wto%u;/;1CrF99*{]Nxm Gpd p=k"C5anc2ӑUoVK&[mYmVVK!(sf?@092puoMZZ]R$3,WqS; +y罽܁4ʨn$g#=tw܋F!,9̬Sy@\ ZjQY2)r[5G/#ǡ=! jukEƩe7 ig'N>M/Yu >)n4dV99q'2\:ka.gikھd' q͘`:w{[=w[Cwr0R<Ю30(z`ij(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPM46UWGYXd0=A('KFݓhYBt8HU@ ;R@Q@Q@ XbYep 袀 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?onedrive-2.5.9/docs/images/authorise_client_after_paste_hashed_out.png000066400000000000000000035377241510276244300264170ustar00rootroot00000000000000PNG  IHDR}5{sRGBgAMA a pHYsodIDATx^xչʽ{/rQi[Զwm/j+iUUJ@{4wcHgfWrIgΜ9s|)7ܔrSnM)7ܔrSnM)7ܔrS9;|K@.0?^U^\%w?¡џ\W?7Ous:n92+s, 񨲒v#!Q*&[kr5X%0Y7[g&R[q@syxEe|G1ߚ5p3rx\>kM7,y\ebK.LOב\_[w7܊*^2/(r.^v78%Úfjef~8%u庒sɦ,B،nz[foPb JDm N5P]íԥ@CD 35W * bA++4k>OUeLJ sF`$C'Qg򭅩wj*t>2&6JT/powq>L!M˓ lOx|3l `r59yk[zӲjnm xՂj(WYV<28(u&Wa6$ӬrOf*0Yv&v_j!v4PR"/7+ʛ@EbLERjQV)*fA]!{FȬ$@β| xÐY +_i_iv4;YI)q[q$-ϥł +kVL0Y"JT}ZA./C؂Хi13xtɃ)F0Z^ d$S{ )^bbNP 9t7S&L1Q!Ex S(A)ެ-' O[ef`(SZ 3WnC(l'AiMQR69B!6Җ Ua5YaKVa˗۸4@a/at_{wT I' 1ST-YlKYBC؜&]&SRB~PqCX8r+B 8JS-Oi b  [if l0 ÂhJ+[nflSq]K wƷpTی%DR?u_–eAaZKc ,%QiHP钔FʒdBa4{*xuDu5^]LWVQUT5M yUJ^y9U[\SM]/y軧=/~߂.>KtDŹ]E??__ʼ#__[׶kFGiU?R=/ tyںm=P/!oidW=-;4 hٺzqxGMΦ];< 2Dk`ǞvyѾǟxgn}#}f(iЎyΰwo,x1S $@x:dw{+}Q~'ǟ{)`g7sOm=c{nٹlG ohepg Pӏmh]ʾAD/o0<5#p>Z t>hAݭv?_<,Ex)TOCzF%z gP@dID<ē@O3l{m?Ծu?dOt?$·|1hnʻl@@7ݏ>==63{?O_/C7^y?~v<νڷo׾; fv=}+s }O>MO?o/]|GE#f'&=;Ĺt pܙ|W{྽{?~7NzΝ=|7ǎ}O?=ƫN{w/opO}LMpOw/ܑ콣ο߽{oQޅ߿vṏ><߾{>tpCXe?} }yNtw/|poߏ}Ў`Y&/+Mk}sLŞtglŤDED]n4O?ylR` }O$/Es?VJSl-|xaCMœkRG„w?Q'"|q#ίDTLD+yJˀ{q|ƿm|w=~o N;s3Ν{W9gϜ8{Gϼ}w ;o9O9u?mۂ+?yh+cf[H Ȍ HLCn$$ )1:KL H l >;ν.59"#.Pt+U"[kV.Z~ܕ筚> `9.,7t"'Iȹ`A2i9P `B^^ Tu]Fi4Km>?`6&h>;KR3Ib7KY*< 'yY?UI1"c؄.*2ObDϑQi1Q"&2@4nzJD K7p z@>~V䧮r{S|~?9'JDTi7oMqYZbn-"2c` 3 Ϲ*3܁҂ڊk>0g\ܞGfp n/  |@xx, "*3撖Jo'+ݷbdZ{^ގ8&a%I+%ɫm|ekfX;wպ[7g:p++?e(5׃YOIU86^MaэuQtʼnDE]+]LAX6)]Y K+D%wPZwA $^),\HVB @P1 %_'㉊#EOa':Li %]mQQ-rYȈ6!rmU9"ChmedlWmJ^ר* Ng&:ARarRQ2P.$ IdS*%  zɦT26{n|513Vn]+P@Aaay#M}g#>H wi2L,@g.ҡE-4&'2x)d*R y:.L."i:TqBD R& Œ0"-.Qp1x4 "DKŚ8&^Dbn΍&^x:^-$'# o3!מDT{xlog2e=; vmu68Me͡6URX׷.l[]}U=5 ttC=*z!apyd'P? P]{<t?;wv=Q88g~@n؅."!'2m߱mN2Y n2qpyhmr@ێZFw5m6Pjutv[-e617Nl-m=ݽUS޵jZT#ݥz{CMC#ãL)ZGw@tعm܍ر h0w@lL{Zidgjc`j P-L?֯R  6 >?{}O?Ǐ~/ǣ?݅u74wσ^{w=л큾wv hЗ=P7}}benvuO~˃O|䁓0>x-4/(~8q*< &q=xw>|xIQtK/8[GypiHouWNW~__};1k|$o8F7P91&ѝ#;D`LJC2!:SluWY%TqܳwgWQ%yroS=}s.wO)mwq.g׎@~ 9hZGr[Fr&6;)QGhALBhn#u- #9cLgFZe{{!0m{\zt \'9u;ξ}yGϝ9xĹ;JT,b,Zo+7…[F̕Z)*#Yl&1q& @Bܡq\Z$o GZȃBrY[5m篾Ŧqj$BV\f$FHϒ"1󼖥.ǟ A EKUթ^UZ'(+$1"gLTXYmǻdy<@U^o%Pg$!I@{|x|8R$/֝p[@CQ3?jb$4,+g,Z9}S C }mhý~)t-bglNMX^SHZdF& F)$iHk 3"Il17g6O` y&@zXq)'߅9Ȭ.d.\+OKlgRZ3GE SY9*+LN ,2}Æ^fU31~>/u,<\(>qxy@Gx}8T?@A?lSYIR@Co@R;C;޺HSؖLHCm7K><A}~;CI~J=D~1+;,> 4Y\}&i̡tٔA)7aj &7C)n 5L[L76:sz2zLXX"S.Qg,J2|zV`^ Z;=ʖvqs-$iI:$n\)7 ^hwhY/㔔aW/v=e򔱼q]%TV`ǔ&,]IJGT ַZ:e`e u,3Y.btɀpDDCtO(*ܲԬ4KA6'7AV9H|DY i Ro( d׈"CgfpV#IZ"2[yjL(LoX`ߺ ~e9wkoJnoV-ܦ)fnݐMRI [E!VUoSrQAɩjY.ƼABar|H$& vN˕.'c nQa)SVIg9t$"C۱HNHHG5 vz+]Ic@:'Ĥ)ئd3uIVj5|:N᪒3 R2G,cTIBu0#V$D,AD[:^*DxE86AT8W%5"mH+NjbJiؚzpX*^I BevxȘNΐW"/c !cBV8RFؘɗ'r^"2Ԛ )MMz<p{Xeؘ  (v%8rbnC`?7_Fxء7axI_8q y˱£bc8c;ou⍷gT#UpaLZnF:m=]i݊>XqnA;C1umt@V Tn{wzg^~G=BӵG}އ 2ֿhx-Tww>d~14N8#oMadB-Ɖ#ou ~Dݷބ!11< q8(LHcM< W~Q8] W0:RqkG?qQCc U;Z´ F.=)-Cw!" <ߎ?;9Q%$ȅl33:ҝ0󱳧zNy->tٳGyoS?~j`{}#}kœ+u1i %He@f&޺3TN$=0"M Awוb-D { 8:VwJ'5&l٦sWNzµp%kg4k9!gQ#e R0b24s&DlDf>QLL-,b1>H4//k^/^QwXR">I|I3ڌ bx@r/5E5IbHLugRb p՛.[3oi,l ${\w#hU/e~UB- ,|e'($ HScj+g+)r њ9hT<Æ3qCf2|Uʼ\;{ ?EdR<ʔEo\~•7_W+Sj4s4vRm#& N/fldef,.a`M**M傲23^nCR^p00O @]ȧĒR34+[d@Dvi(}0mb9` /' ʅAOZgND)e_l."hݙ̰Y>BnvnFϐW٠F@P23&7-W֋Zm;KCHhnD u#=5hD>O,+W/I ŌG\ W/Tj+4ʅrg5{4-mHwF3l;%-m`9chݙp{b[6f'Y"AfS()`gg$a%eRor~q)Ji:"UItطta3P ё9IphR*y_ds S~2̫;Tr؎20jDÐR+5g u,2ўۚN~|Lٲ˦MZH$6ծ7F9ޠ D(PF+* '"oVPMJn )R—*INp'UO |[b>?K& y|~#9.WH$*˜6߿"fMs5J`hu<+]$GUmvJՑ):^gZ$:&PGeV6z5\'"YײHAȒ9R[,gI"&OgғD<>MOHHǦktM\:Vh[D:ZU "CHlMG826]iʭBIP !U$t -#x*ZV: L 5&Bl `(D$W@_+ugE[SDt"YARP*Qi3i%>V?YJ$QB]J n !e7]qbi甔*:{^g~/zcу?~0<&G<=2)#׉Gż9oA׏=p׎=t_Ʈg[[RCitf[~uCЎws{IckYK#59kj̶U @ICkM/ZĞ~F^ zeϢTL.5K*ߙO> G啐$CFh!Pi&<֝Vd'Qpx,-40h18j8^А2)ֳu+-Xbz"B# A \5@Un//.]a}oɶ֝q{ZߪpVBiRIhEQXúFfd9}n!#(p%^ъ3,scE.vnY@s)[xʹefLch82nif\nd&xTU .p8++3su.[;syk.ِ8_/;)P >/ P~/R^?U ̏B`o $Jn'Vh\dׅ֝Q49DEqAPx-j&}~L;$ ZP#Zt|he7mmuB2/U=R=SČLҔCK]P2NjCsd GLS1S.jK;m6Ik^][(/f$feѺZT^aX3RjKŲyRBrX@*_]=])ijV*i$s D!n#9PqHfK2-VnDߊÓ7*YP4JAiNM)lL-~ղJqY WOP 42U'.HVA)$,0Q(Oŧ)cTq|tE\:jqp ǀ*.Ul"obԈtYa66M.BʊTZNWhlJ|*!]W !qH&3pJ$;Gv|ND#i@*-/)K*.唸qKKb]Z)-&ҁ_>#?+&:KppR^Gԡ&£bK:ځӺ3tg|C:7ѥ-\[ xۼ-uƲ&guCaUCauWQzW]sZw0]@)`GOvVtnȽ``moP0vImtG@hǎ;vܹvGG##mv8q!"(vᦡ!SvUcUh0lh0@5Ppg7𴅊ۜ\T]8k54PMP("鹦!,Ih4mΞ^6a_[ahuO?\2v]7406upIChwCG` @Dtᑉ4 5#rf;^ߏtggB`:@ 6BPEnwoyɎ];{ 6¶wJoݎt@N]VBsv2xIhEONϱ h}ȑWFcv_;rd̴ 2<xФ|y% e9ˇ|uaZGCnx؁W ?L;:#/AҐ#p7?r*px{ DB~>::TyM:ჯ?_?~o?vVRAY/k{qRv}tmwunwv :h)Q3D['%"F3(M`2^;licog_ԗ7`r5~+HhfkܖԓП9)QG8yo@)?-وAj;>u`;;wkt習|쩣g>.B9ٷ=sɣϾ'^{ 6YThզflć3%E+Ѥ& a0n12 "!`Z$)Z)R'hݙY M(32f7$FJ`%&o\d WOG&V\zs毜`լe毋_z *p{ٚDZ!V\%.s9)t~˫LѺrG`1iϳIr.gdKƵV+ nMlf M|d,ۂ X70%a(LCdjh 5HHt;*6.1k6_jƆs8 +eeT ))O,vٹXj-s -yDNnŴv˄F"SȼmhKٰҰLmFhl9)P<((K ݠyYRw 07p 9<c_1sRq%F%n\PNfBg ) zz5:C"#>s& 1ObI |FG: v7SB4I>]m&y_^YXW@qh $B%G>T hm:Hxyݏdh ]a|ҘYrHc63вS(-CfFXbh:0\i3qtEeT&E!vZĭRݲ֐VH U%UXU- '<_9Qjd,QɕK%JRjH2W"Y)kj6 S**YYVx-$B!`JHLH뒔&.gHs7&HIdx7M EJ!G$??U{[wN)HVZbA7ЛRMqnKqRZ2)`3 =)ydk@af*b:Z)T Ɣ"Y_;>h5t}NSI'JuIJVizun]m\5O>D/]1߾qEIDH&)Iƪ$2v$%FQ59 t 6-eѻ"Z\)V®}ib~\wK%%,5 *>Ǎ_0F!_M(9[qʙWׯ?sۜUm^2<5h԰2TƯD5G"A\(6M(4Jʁ 4S&5XHVdt '#æF 7É(Bhn*wuz`Ujl+o)mDkfHCjh)ij/mJۙ]_wɾhisն o;P>F @qx$ 4 Oax~h~xZBG뇶"cH^78e!{]}>@noG;ޖ6!}]]j4AWA?8Lw iFhϞa_{[AeECtS_?֫G?vcM_=v͊#?=aA== _;z4`-F1wWxCp:x^+  A׏LRxßb#gּOVV݄Z"c49gay,zuNN2 t}bJqFH X^ެ"+ȶjH+&der2(_gY#U7Z3k1[fSʼ@9?ZKQꡌ歉̂1~Vav\(hɳ~ ,E!Y簰Tm-yΥ,9ўd;y.nrb7On^nQSȲL٘)k6mLZd͌%kIZNy 0BĈedی̌UXȂڐ iR񕪵3LmY [3ḷ.,@*HO ࡐ ďDY, ^h3m| %7ų8 -ksxz4X22~K$6Cg$haue= 3@f ЀоtcД$1FRmk3)mۘSxȆIn #/Hˑ }8V=>(H 𣞀va )'= 8}ˬR`gN9{erPa諤1H^Z nrrnz9UYoiMG;%搬9$mem!1`HnύIQi{ۺB=Y6Ewk,%jjM$Xm "bRT]!/IgmnH[CҺzߏy=>/QrCb&1Yob%'b+e I5 qM؊+7mo1񕛉#g'g@I׳ek rF!Fe|f_iҼEeSeXj@J[m+l gVXlVj`3OF2LcGv$6qk l_X_׿$IY[|F%V/ˋ[? 'cMT9 WbW,شLqtd œ"_\~0faJ܂b N.^_} ע3%-D,LObѕ0>p<5k6._[ _Eª-֮gX=vgzֆu1K$,dkҸ.E1q6mf&gD {}[X96[XKPIӗdw_}3w^fۂ/Y0{ќK笋ظMH/Kw*\K¦ï2R0Cp% s%rbU2nFR\B['V.暲y-= CvrTE5<'gĞO=oc^ekGzr'<ޠ@(nLV.˗k֡uW(jZSVf OMFUZJŕrWY.urɝi$ΊpG''(* Bz+*3DB4 X&pg"wv:w#*QѾ|ZQP*~Ii<ЬhUEyC֡аstm=P4Pٔ|/AxCgN oo|8t7Q5A+<)2yL Q9"GN L@ 8ӻ$H=Ya4;@7`R#f~")\jEg-X3}ުiWOjU3f/X`yV'.q.]fMfӦbǃ&G/kE6$` y9 7X.p:&Fr$uENy ?]Úmr)Iad߬+-՘!hSp #4Gtg@hfRi(b6\u'$I-7J\@v>/-[O%w]ܬBҚCh2cYih5;@20QLd^ x1M,Lb-,;+/Q%TvfM2gly!XU13ع\&PY-7܌R-PJ-&27ix —`ʬK3cfm]n\7'sRruhm9&R^UJ:92I`/yo(e^>Z-/v]|%'XƜ4= 4Z ΔB GdFM t}ROȍƊedbL!c2 8q!)p&~`1$ Iy(̪?@"yxRAkˡKp߇b^4??AD}ɥ^^ /*:\\g2[l(>!{ӻjcO<䓏<̃O,)2TTCO?OBՁOCMFC& ˜$J푽>wߣuyz/}}tN4>9ޯc&ѽ?Ǟn}/@#{=>uƃO={'0>wK=w][N7wxn߮G//˯_/+0F_/(~9!_WdD%Gq߫/_yp˿ɯ><£Ͼ{w<ȓ{w?3Ͼ>CZGt =XnO=v> {?@|_'eф@[Cm\Fw=ES2pw=u=~̱3ou[μ߽=X,9D 3izv#2#. }$h21'՝Eh4  QytHzVZr3Wø-[K%.YxK6F-YrʵsΞ&X^ԨljPֈ**GkEXqʼJ^eU (tlfL/99髧)O3,eK\/)1^GBVi;N٦7).%ѧשe&LdF7xXwgn-ʂ [Y [8}} .G+yǗ+O*͆-[%+3b )YExVe%d\n! =6#7sfȆsڒhflIoikco+ul*ʧ H@k؀o%6mؼp/Z.3pvJaTh6tu;3+efLja Xq-5D;d5d]7߼~ys5fe0(X'y n*&- k$KloQY, ЂVDC*jNZb^/X\$r8BcĘ(FF 1d0D38&ֳz@D Nna)7M 7$z|2B8F p4\O_DQ.7V'Ms2??XB ĠK_ Ds}^d夯/{2];1kU3R [e!$zCBj39Y2rd~"XέOiu[;-ⶐSޑ ;;啔_ku:{!Y[+-!ny6UKДVU+vuUb||F\L\/w$Ԧ ˑɑ2U9 l!6ZO~O-vΟqzxn~nIDE|'7>7o~Ƿz|Q17[Q1!Aܺ5ѧ?da'3?[3`0n>A>S:E?|??H @?G`Bs;MʗcNʟ1)5ϟ]q̃ʋU8_?LkJDg(i(9KB'2Hb`vQ8*$Gރ]Dc !sPс4e/\jnܸap 票90BTn"Q)0DÐmT QFW i_DvOo}͏oޢ tO!O?A.O>:qLw]E&T@ JO".*^M$DE^h ~4~~3gOW7PRQci5ۛ!r:sC#ayJwq qcg@>}̩9ޱw>p7O>[Wo/Ȭ\#6hYdulw QB.sHl74 -wB"Ӧ A\f&f |yO@b7_>n椅UɚT|IRhF0hiol757k$Ui~ )<@ s WTdX+L%0Sr~<݂٪իfZScX۩ȹ! QKdWR&=RfȾ|E!Wd:NIf _%aYbm|?#SO ăDVl?.iB |ʒ` 3&3aJMhEDf__;#LE)Y;;g1sܴ5i.`p auv̔Euزf-^5m]\tBHqVt-Gj[R&<̖9v^{䀜TbV ĕ[,0oXb\@f1iAҔ$}sb 8U_(w؁*FA(cnV]:F-y{~/ꊠYJr ,29-f } R 1c:;ے*$]D+R@2YC֥iS^^ϥbd b]ŠYżbFz̔d |OP ܏xG/|E(Aw AOyg)]9ɬ"JrS9j+Z.5rk, Jme~"W2/ T44BҶ.Ys]tv;BiK]Mm]=]ѝC8fZ-i+xiRD^"U,|>!퉐"”)-,N>ywOzڵW?z+ׯ\vo:7ӿsʍWo׮@Хz<W\B%&~ֵ7醈Ez굫4vWٞH\pZ۹te(㍛n~| W^_q׮\|ҥ /_ ʸ|2]KPi\rd\A&Oh>t07WOʕks'W…n\Nͫ?:ݻ uk7шu I?d|׮^΂SC]qM8(+WtAA3[õ&%v܀Y+^W.@4xV7I/]|r+Wnݼ^m}[Ѥ$R>K S70t0BLGk=A;`7'*&W_+uG%h+/uKГ3zb\%:&>`ơςsЉ2P4@|3g2ôX@s'gv'e|ٝq/†L ||sfN_ $F2\ (8pP4t "E/3Ӡ&CPVwBnFC_fkIލe`fI}^? o f7 L$aڂ ŏ^9k_ѥK|:j5n~+W?x@2x`Ko,(‡&T=Mh}usQًp7* l׮޺r&gD9U!m`nS_~P^h4c8';{ tOgO9v8gO;'νs4dߝ=tw>phlh)iV.,Ep ytɉ5ҳBpgp ("|-ID9B3Z$'5Qʗ[bf'+jk-TzzV ́Riw[vWn_WN{AXH y WQ[믢\5ǭ%Sc dnX[>_tv'MBΆp{H#|A\!Q#>^*qs|[m/Edr2 B2-@乨A.R+-|!/rK}|HKI?KɅ-@.U0B7YXsql̞b-H7:(-7*_&=ͯ{TpR6<򦐢C)kI;:%.Y}cj[:E=t3/wtP6g֐%$oTW h+""l;]{qpr 0k6.ƫ)?n~<n?FO:~1O;&zm2Ѩ)zۧ~?޸yM{G腋 ?$\KGH̅>[l|t? ([>Dp…  `0 MNT&.G|Tĥ|;/\Ӈ?/pOgC@ ʥ5X|Y.B LBPP1@R҅=.^ORtNin:tW_Wu7aP*C$hX?qrDE]1ta#6~}TS'=ֻhgNN{ԩ?C ySQU(Q8R"23.2Ewk |r+i);Kס#֌r(4@1\JǕ[2 <2+ͥT.xy1#&C٪o5ZS_g^OGvOGά6Cm22<-u@U8l^%%\Ue2/s~ ê- +x[$xߩ d*WrU:0GFAY9&0wƙ7^%y89_,9m/;ck\pFs(3qSnt6djj 3MX?gM&n! N2(&rsŤڰ '%?ksܘof+gWniβӗƙIJhQ3[aE72q 5@d3)B& 3zѮ&ZСԼ (ضHF VزTnh5s+˖.Yf`8J [*$ SN@tAy\OBFV/DYw9  P~|/\VAB/YPFqT~ ƋTi_9-c3l'1sמs%~K2gVgS l'5%KL6Dr6*0p4$aǭ |~AY_><י9:;e#28Z+ah̉F;E!j^!s `)l[!]!*ֶʛ:mvige%nqK{zk8-f;%c-$n?H.ju(Ss bi\9 ^/9ɜ2xƥ7?A.kp/Dbԅ8G@q?P|]W_;uk78~'sYЇ'A=C/] ^ 0EMvŋвP]vR*ڢG1HE3<$~4!d؋XmExA M:nh'mxvʕ[/AA!a%-csDGFMї/_@hy <_~5G׮hC9t(NW^g'r7 AٸaMT)v`~{`z,f,F |\o1b4Yτ0V"!<F\8FXΗp_5>㘳71dcNpC.> @AN"G$8Hd/6>29]Anb C(,3GW!z b+/pu.K;8yuR&5Fs7-}l2NpWlLH஗̈́ӈn .~hϽׯzܸ 77aׯn1(o.LI41m]80;[;sܹc9Ω=uݓGϞsuș';}ӇϞ<α7_CCUuYHe',ҝΌj4@f92EBgZUDjzB烖`8HzgD6sLJ|a2WM˵Fi&8jniRߜE`Vn07ZJܦmܾ.GOWV{YS[Fu+H+dMN%MӤjaRU *MW/Z-֥%\O3HAe_ԝ+rvBm#5Ȱj 'U9tÖ9bfm4{} 13c6ܸquW Dz˵yl18s.n& F(,H_K H̤L [y23" "Q;BQHyE"V^!lK.Ljqs7oyN7Z%tͬek-];'&q1FJPYr)GoV0r+FDwC5 E" 4SN٨&;UxHM!erצ!;dӦƻM):/9Z.ڲHlq\ղ٬e[Veq)xtq(XPbw;.sː \+-/hS 6~?s–1ٱL.,.0'I 0 !IdHM\4gs\퇪&L9,-3C42FCL[ǥzR[(ЋPWLo'9Xv!CK}ʳ!s1#7s&Jmdܲ2#<$o+),1o-Yŋy.hnx2g4dˍ2%uNfR:qEIҡ8K2b|&XCuK;A.)nMmtiYBJ[;%Ma[MJ7%4`Z2+3KK){>gW.ݸqz ҏ;r?UNq0?59s=?M~rY֭>Ef(?On) pO?A>^0fs#djy>p[[tOd^rtY De#mqE@AQ"C Gh7?~~g`{o%N% gѸ0Žn7޸vꥋ].0%;ZIKRP"Z@]ԏ.A:u˗PFRKǟѝqrWό,1 >iCD[s/#Ny2tm|YQ:@T0Lgar7!i&D1@H3fCtL*hƮN}~%h(..K;$6.:drz=bEf"wsQ"L`..*Vt+1!Д| /10I Z Ĺtypwt_MΦ_ТaE2JdL U.*DP'#*ZTW W0D25!*{}!34j#fd՛\|UmYu=m᜶lvFS8Y-v>uGϾX|>r퓿;{wZV1svl@p(.FRЖ֝iaf+̇hwFvhˣnNCj$e KkȪ_Vz` 50^EjPB7 jm6BrA֨\flu&:ۻl![W)6 -Mwvf$:DTڔNCͭA|!kqFwX<ݰ<36,)b&4)z P5p ڂ#1#beKѪmTm\h_ Lw gŤLi%d3ҋ5vRc4DDr^qMmv;L^5syCz}\p?K9\e/7J @b=z2WP\hDƻr}@ XQ0~&u Fsa^kQt>m@8>+`7*oqXaڼ~ }A>)wsQ"n.wsQF_.qҿ C}~O$] E 2nv0(*f6U؍GXÔޖn|㉊D!*ڷ&4mB~汓}NsSVc_V ZLΎz*G}玜9sGkN!syLHwF"Z -;Ӛ#6J#,2FF& 3 wA RZ DKhMbhbAk)ju:z2ƨjfYP7dz:3;ՆSaNi ).5ѡC*SkWr;.C%O91VU-X2S|zlŢ7,+[$6 Y>7HJ B](M 7rW󕉴菇gT Q0v30[- [HRXJaqF"OH]5wcu[o [6wҐd囲L̐rps.a%Yކ+LI̤}`H6BH!̣Hn)s;@"IyưU 6tJffLIaLl+l\E٘DpfHFɷbiWo` թ䶫ZRdۡ1ۖo2:%*= qr|ryϞ=-~ƿ'ԕ 4[W[Y])bAR?ޙsJ/-敹Bߟ >Q?㣊ː5bd/+AGToDbGD-]Lw>0NԈ^I  ˭\d$n*A``O0](bE&2UG1sQV+ rEƊ ~:m㛃y(2n˓~)vsJ^ DvN/u9lRy#0ja-J.J=bUZCYXZb*q'vzz!qkKމhCZ[4#Z)6QkYTlVQ,3Þ9E6'.6q&XOA)v,әZy+Z!TɾN$[ W.ZWYIu ;Җ1msCޅ8uɚ;!Is=S.oL\~* AZAӓMen*t-}Ce1orEbtOt)p"w=u0N)7ܔrSnM)_v@З]kmjAp^h${WQ)ѳg"};O~5w-9*%3ǪIB='=#t&Bҧz-:'iSIҫB_clSyucDۺs:p|MwLjsLΚ$>~}\/.L(7d ZFfs=u4[B̑ڬ59#>KCޙA+PR]>ҝUܐׁ4h^JnL/6cWW.Z2CbflŒ3Kg'v.ܸp9+7Sb;HdtgviPn´6D(\X1ϰ,JIކN2 ci!͹\]B5$EѝVJ ff.^sηIsKu^^ij9(ȕ҂KDFVfF7nl)lU 3SifdX#TFw9TJCR:5@XJ.m5Pʠ:jɋ$dR Kaͽ3ok}Icϙ/I,_6Wq[]R5$3؝XJ} s2(rNYZJyq+ƵvXOq6Zljqvzg;CL$9zE<tWa:=_DmPB?]OAmgdRȧ>r9ZjLs ?t's.Q&}}sϽ{Gx~=^iť*M(uY!BF%5Z؈Kzg7/]ݡxFO֝LND&Ja;w&HJe֕P+pp3-l6Vܬm4(6ڭMѶᚬ ۮܝUnKZۮdߩFZsRjCEu( S+ZTT+c, Y%3iOX:zfy4]$A-cƲXDE+h+ZLCdbzu-2gM܌\1] hƊimx P`glJEAd:Zw6;Lfdd|sQN"ywݹ. "<׉;\DCp:<$C JamJ9Zt#J\0Fn'w$B.3rlF22]ZGMtv%MTs7y!ln5ժ$+DI%) %lc'7I7,-M̟4>iy3fOK;=a3EkV/W^f_Ǐ+LKtKenrN7Q\Fb⻊qg KMgݑ2!3Sh8=&zy}iзGY,}"K@sBWDS[1[>U`{9>/֝i"h'|弢21Yz@Ws4620/W˽bk^DDX Sk;ͭ!$7a[S*oLmhJkhL R ^U2 qlLs}Ay]}C<&sP:(x@ t)5qugN)7ܔrSnM)7MM]v΁fcmҝ[sZGrF(ҝ{{o=3ox睷ysΝ}׎Vd6aǵhe+&7R=GeRT")3fđ[X%ҳhn U1 A8t/%Dw6j{r__Q]]U\KyPfOgVKB[I1 fqAI-s ڇ˳FBuM%N5nTDB: ңTHmU)n|3i#n#nEө37\~sbaBUlY+HqfZ x,&H/!?&r+E%RcҊIȌLREimƆl҂, ҦQ;[%h-;B dv!"s8#O;3˜s+.+&JG1DSķ+G>G/ F )!t]Jf ifܒ,1r#fӓAMtkn տ۩:U B ~n5;w%U!JSBAbAZآ]gH ݰh6{I=-~ sfͤL^4GnRsrpwUbYJ)W U"(*&٥Y&0B+h+f@K7 c|rfL^0 Z$fd1DNq.g̪y$sRh"ikN0o>DF(S29., V ?H(}^"Ñ^gv 3=@f\X*ۖ\xn.gk|ipLf_kMi–vQcKZcsZSszm XN@ A[ ~E I(.egg (g3 ݙњ;rWiDŽ|S:Fw{K~A<&nJwrSnM)7ܔrS טξzCPۓYgmZZGrFsC=P2;Sy[g(ٷνw:?{ϼ`M#,d=B9rCH'& 35W$qe[ST ZPǖ0}ANg)Ѻ3Rh94?>m9,*֝>]umNC}nMR^S- ]rTsU֔ zkF8&K4\."s-ߜ۔XZ #;svTlY=ZllQڕdHEtjYF ))ZȐPm Mrtky[EuJ%Htb+@Ije%&^x~[4 Qg m"'J60qϰa"YaVLjHC3c#|gY}kw/i♾~-d]܍7*Et/N>mOhFw><)yM)7ܔrSnMo|\~ch2tz-}ֆ~9[;&9ιgҙ?uIs;o9;w tՔjR +]zp箉]K$7 4-[RRl@&Ll>gj+!R$&bԀI=BDXv[fj &E%FdBWj Yi^Ueik髫>/_\]+knki..֕lnL&wc^j[At:3v8b窬l$@mݹ.YIt]HDB3e>9 :d^^lK+.1 'dhqW>WXY32ŀhhMQt_AwF怑yh:d3&_2Uqf>Z;*+-:#HpW %Ϩ}iJ 8* x+"wםhCg8c9IHQ; 'frل̑ >P(!N7@ [JK WmY73(Os$NRҢ?T>9ᶫy*~s% ]KTO(Ja ũ4Nq*!ܚCƤMF&;@t+]Y$ccHz&s][.IN'YRwQYN@p!܄)5D!0Y60ֲ3@HwLЀְK{/`[Vnt{EM*nVue٦N@Bm!sFe7!gmf3gfϜws{@ Wr qn$b?H_6PXB(P}@ LVl p#PE^hBJMP2%l|l)c' J.`%2\ul"xD@E\ ƯMw*{=X+8p8|ko[> *lJN-GEؽ㜿c/Ad xh 0?R*ʺ>-:|ƛ\^scv7;7lز?@-;o<96͞q/B3'Ϟy3=7y7lv\?ڱsϮG\] JRRRs⓲EV& 35%2=,4N@AYԵ\JZ@E98('3K$(]<׬AǬ_I֠;p[;:}}}}]0<nyJҕžڍ=}c}{CpM_R(+mjn i868ݰqYJ=%TjabFwy 11ȠCk(֍fS=e'>lo";nC|2""/Naq`?hG+w?oڲ>lF,\n-4qL."9s(_>G,:/!ĉ @L%A)3f-O?H_|1\*p`aˈ; >< tcX` @1ƍGHx=~89"Y҈# Sl)š護oB#Fx jA]q<&2X0xst:>W[)l9BSFZ@&N)\jv  _mx#3{8po ](KawoFoj٠;P`+a}w>+ <wWGN:y3G΀g&O:un􉧟6bd]ymC6J$e,LɊ[8'nqN̢优*@*+KWѫVk=kU(noc$R)ѹf)>̆eXs%Vpb6OT.!T踮ATнֿ~چ[7Fw7 ~lqql]Ӂ ~UK]U]dnlc=}U;!g6#@ffPPl0[-wl,1S6#(z "%gg yd;D&U(K:T6):A;wa`@8XfijB͢yהys]6n-+L|0d༗5CuQY m5-֕/Mݠma[gf^6x^)/L5DE2^BЩwȫdUPJGURZk~NpS0i omdK'E71FY&w˯8#ͷ _V@"AoN"oj[b=Z+\MZx@Z|(*EX{=s[L5 FŁƽUJ܌˜s/)z}Þ UBeMWkz%5rYD|)oPȓ+3q=|x~}A?oy)#ܹsy駟BPp]l & qvo_|_X3?e :`p7?#9P+̂iY!uH Mc?я~Cc3(@(71 #P%4(!<(. :8p'|vfff  T!@Yȑ#[nˇ:}4P=-X :tPpn[`R=;G /`3R%x!Q}(sY@)ygx뭷`:90E؀8po/_",ygGw90 3<)`'}࣏?䯟o}I w yW&ΰ\ԑG&:6uWٙ?L?o[n۽wڝ;Wlչt/SS$wVUIY,θ*)셩 Sr$g-,X(K5TZ*:˗+WQkzn/Y)n(_gsqf@'m:*t{9D4,7="5e`zUgzkC;w4nnoWovG7 Zq)k+,+ 6cnM~o]Co=o衇_\>?| P=e_w|w{x9|nCDsy9$#(P"1`6A7x^~Bl ؀[B_;CsK{-tprdd^6P ,p/8R\/o߾ȁC/n|2Y\ `ւAΟ;4x7)  □:(PV믿` &SNA&\؍w[o?0# C :kā8p?U6;Z!A|ww٩ 6(?GygÏ>?g~}ͷƖ㝿r.ĩEeb|zԑ 8~vѩɣ3SǦ'LL:1=1Ǚ߶s=޵b۶ʕ3GK$\ -&ܢѕQ4VhU)d){^C^-^JF|zWm.B" I`H6 :f[sb+u^Fe|u2Kz- ۂ#B;;;;77[qE2n oh:Xc6eAII^gP_xrhmPo`g}GiwqGj&0KXS<`dq.2K̠2JͲnjF]NJe*Đ*aQ8^"(:3ɆKF5l|gDGe ׸E(;MA.S74%,e M믿_#G~_8}|_*gϞO~H}]vݻg?m޼nm`rg¤t<}`@ Rz*`}5 #¤0nP `a*29㏿k _~7[J<h& U xan|*ccc'`Zn'`ݸ,"w0d%x#_F79>ı3g&N`srz<~[ ݿnxoo]mf"LXJmTL UjAXD)"$c*V$H> W-_Z-]F޹L)7~ࣴn%ԺHPDjE2ZDG5O" 9 q]ھ5sspצkvolسɿk_8>6牲xydnYVZP2mA0K5 ~󈬥YyQ 6]gD'SiZ]WwMz5e1 "Q"C./QD MňXx<~BAqtZof>>?[ouxx駟Y 7pС nܹs`8}Ç<E?OW_Fvc=sNZٳ'OĠ z{}s=հ̠w}7v |{;Ï>hǎP;,o喛n A&_ȇ6ʃ>^C_^ၿouA񩧞Yڴi4C`=AoqzzASwA$@x /pqȑ#aL /WsA  ?!x|G1.~xC L Sٳg n޼z0.|q%~I SxaA`.FGGa^wQp݁CCC~aCss8pwl;Undd{ 1>oSRT;oXoڼMz}l북޾uw;c;kΧ͜ɩ#g& =>=9>y䉙3 }eb<:q7G|[ x,[Nt2\T[*M+4GR1$%":]ϗtٱDFumTKӵRj\z$ji^$//,gr+%yUH eXSZ+Xa2Rgv]ITRfkk6m mش!uShƝ{ׇF׆zBׅօv@= }{z򊐤$()HVˁСuM= 34[Ӱݺ%H &gÄ.d$mE[/WjK7 2Xң].CPQg]~{A:`68w5`:ۅ'-'lO[KmҞFL@ >J!P7/ȹ,HgI-|*d`P6oA".H)"%,-+BZ;UֱD3Z-\R.AXZbsƒP|ӆ1j*X\P:ES1LLT4EF3dIT@ŕŦe]rU|zw^{ g}v7O?Ŵ,x9ru]SO-F. |}?!{[no޽{ao7t&.ԩSPts΁okA |Ν;O> 9ǎK z'G0Lhaǎs~`s'?OQ ]@k۽{71`]j诼o[ax pbb y* t={Zñxت?}뭷?k㡇1MW Çɟ޾}#<h uG t({Aw)Lt\L('(F CE탫00^dB)8p8_U`3o+)a v`oMс)>hk7|ݖ}^3{;3<:)P.k2u; ƠL`MLOόOO=sf| 4ȑ_8yӯ:~o^x's`- ,kٲeD8T6L6MJ6[2[V:3 mfo'4J\!Rw#o'ꛅ:[)_WY^VR^]XJeVKFa5fįjWلzXdNZRjb-sbW',D%mKk5l\οw톆B67]:>>9 J_h__` :<ѵHڭmv/$+ Hfzqpmh_@_}YؘFjI2b I~|K?f Zj9XH"(ӊE5Z' s/.+y(0?켡B)GH K\A#@Y ~FziA {wB*HbJZ"on#ídjle­t Jr EHY|IֹZYe$iz)%!'jdMs^66C&񠑆-:SoI6Dٳ5VȕrRخɫdS! "cP:(t g.9,ʠ%JKH6?m3"!g^RSdX7Wk" N),r&̒:tyv'5]"y@pv(LxԹ%7XPoR ź *DYNgW09eTV9͓匒'7`A"Vc=Z,n\t ZAΡG mC92h2V- f1LCljxLU좘ܨԂ>f?xq'?ő sr~'/ _ܺu+l_c=fKw}7ڵ_,O<ā ܹs###G*Pͣ>:9" >۷osa{P`h05 c_G 4&,X0vHA07.[ u@S_;?|ALX{?a m޼X{K/`r8pOl aRT׷{lxxDZأer0 r2~C7ܸn㵫{z;t΀?~n/=}?7ܸmp$Էlb*qwd*{5+tښ-˄z+&M!l6I=^bg[eD>,iF%$RmU%0%?*(̩sBQWUyŒ*qOWN r}X]-V+d](0Dmg*ZDô.1yoX][n B z{zQ0}kօ/sյU~ ,)^e,um큦tvwm660#FɐQ,K7_xa %za8k*UlP@D|sXEYޙQ*i&/a\!Z$Vq4 WCgruԋIh"hG;ChGGUQU-zI0qL70M:F;P~k j#P EE׹F].(MgƘ|9Im od@,0ҠS RIіD{VR*wYMZQB&guȫ t)xKUZA{FЦ)UjfaaAfT^a.^O(K=iS)5ll!$iѻEZH$`\NB5sޠMZ)qZbt]!G,ZγxTc{ImX 4"VPpz`TJ~@7YjqARNTbƂř123bSs㳊sJRE5ER}*ԺizDk hh-V9$jD^DXPX[*V5"D/Tjs%LB%`2˅i%RQH^ROV l8 _r-={#ާ~@/bvyy?30.~?a񎏏ر_U?^xСCO޻w/= >(8]_C?~M7`#G@Tw;SvzgAavc;{`=Ѝ7kK&039P 6Wazxfۡw O>yvލmh|r)fAk.L_}UP:S ?/KBӟ`1|9h &ZnfLCFK/A00Wɏ_P -H)4 ځ.qرc3P:èaȘƓC;yghGH AG[oDA;0IfW;Ch[o=p 7paX7n=f``c{~7C׮ݰ~õ[ {eѨ?~g:۪MuC FQy݁{C[7 {G''OOӧg:ud̕yO:6y׈Mxg$S'N8 '^:qW{ůn֑V\ݫY#^X#Z\F[WڱEj7BjDN%jx 4^dlPjƦW8joK2"^baբJ2LAJJ:/-rҊS ʒsʓ 2J ErՕK2Jj\8 .tc*ڍ 74lnSph[h@x Pw i]K=NYsME) JCu ʱ^h'4:eeFf(2睍yAfy!wfo5KtB03#o⼅tA`ne?:I5:N˖ b@#AInW^yM6wl΅K߈w6999<<;C/>c9{]H=s׿a8B&?^z S`-ܹsPZxW[o7 '[o0{~w }]p[~={TÐwSawM7O~h toa#!F}vL|8O= ( رcL,x_[ny|fO'!̠D)~kxKf_o;=vg'x (0*0#,B;G:4 z)XHqwn?~w^J!,:3/cvp ӧyp 8p[ lSlGa ;𾾾a )@)؀%<>8Gw7-[7^Go~+/|vi3/:O~We|ӧOLbAG/Ǧ|]9xSgOM9uţ/<^\^|typ*բUkkkeLC"URegNd YZXl t*TRz(+ Bb4Ō')iEq9əe3JJʏI+J(N̫(%Gg&VURyB RV:IKPټ̼۾Ͻes`i@hVk,C|q@O`7pg׆k~}.'k+ŠMj>~]}=~|0fJL,7F0K-mq1s&T*NFEg,_;8Z.aiݍDt0+ K hToŞF>tYЬQ{hgT&zA+[šv:N5RMSfF!Et)D9)p@nWRjc,>9o깼sf0I:xsZ\}Qښ:aZ"nV a%ѽv? !dEԦ[D:;kKjt}ڿO< ԅ~CG0{xp3Կ׫c&„$89h6OU3pq0o09065t-"N:}v|&رc0)y衇~fbôC?g?@Plf R2,!qP]ë6o7C Vü?@x;= ``N`f#ȁn$#KDZJ /l. 9 o&NAakXcP980[8p>` Uؑ ؑיq|PfP jyx\3(0e˖x?cOlڼoobgk^'|lj(陣O^ٸߺscV92w>eB/'s@N:2uɣ(4Os8yS/>~Ͻ7~у}nUv--'֬tV+VKI[oB̢֢T\+5JJZ(Il)lKQ;S&F6*JUV)*!+csE'\0-7.53*%HRr* u6JiΣ=+Ψ7px]}k7m/7S €GwÝkwM_kZ~#1bxx,7ygq?śpM5Q(%뚄aX_wZ 8c/^y@{D& faYj&0ngB`i{i6~7.I 3vP& VijgZo;#fBHhD;CP ,HˊK Uі越r yg4óx*ݨR IQXKz\ /Y&dUmҪQ\*AXrLD.l!jYY+v9U }G} C =뚴J2Oم*H@bcyg- h5:q(p ?I8Z7dfAUTcMQ=>!OoOMM6rFsgFE6),k_|SO=k׮`399yСo8pC#0{cnF(;n?ŽjΝ<_zttp{9h?vm;v}hG ~7x ӧO*wqxMȹ[7c}{3<~xll 4#G\뮻@0i E~33GۃPpq*B& .F yW0>q`oFw^݃Ça@ ` &v۶m?=?CS{z }A@_t+  "K;_Iu7+GY{ԱfN9:55>3ut+^zyǟ>pou k{VWVu3VRV;jtۘT㮩jh16!ԻlXx`&F V_)"|YdKu^R2DUQU8(^&HK+OFc$,)[\-.*v^AKڍ#;wnkسտwC` עAiDupmy0$+ KWZNǍ[ X]2S$Cj@ay <<7,Y^˫)^qMbnLJib8OiP }Y"Z0"R;D&mt7 -Dc v|t  -bW6anS5MIɆ&.ij4~(ޙ71R&`*X预 t$ɎѧZ*sQf)&1e"HQ6)5֕RR ^Q+쒱AkD D(wVt,: 3^Y+5,YI **\DH 4C=K<"10X2h4I͝t{(JX+իB1Ukg{uEneJbNtvbJUqRZxdw=G|~y%zXSŸ`bG\破HnF% W'FT$WK S99) ŋrc&fGf%3:Hj"-5CU!DuA bPb*rxn7xpA 駟)|]wա/ٲ@;Ck`3<#o!ǠkK(zW{_z뭯 `699 M۠(z뭷_" /pQ<.o B>LMM=sxr^zW^y E'O>jT#O>$<^p>I| 0?ԂQ10~F裏8fȑ#6!<~x~'yꩧ5zsCG0RtǏ`^uh /"_78&|k?T Wϰ)<4xeo_טO3P8 f333@;SNA?ĭ"03LΉmǙe`uxg Pk`n h+ρ8p{ؔ~6I3ޯ !F}l6Op6 Xo>?xO>_%/ >w>:}kwe:qt {XY~."33gΧN>5>sɹɣ ɳ3g03>y/_]?wXekpMzje2IUi"A6jCTu&TEj7_o5f&2Ez_ԫ: 7 JCQk3 n7Bs wF ZPQlКMFɳ왋-l֑CYyBja$ՔkIO07VfWtgC!j X޹M.he|D4˄MR JU&lZU.*R]ST(V=h9{"t^G=HX6z_8 o&ívq@qǟ=EHt¬yq)0x$9d1H/eF@llrP}y# *'rR"Z`ZTP2DakURf./ι&9?̖TvSogy̙3N:vӧA?q$|8y$7n|ꩧ>c#B; ^ 0*_w@>O`r2⋗X 7x]wbKaF ){ B#Xef ˂"GرaZT|LqG4f`i r9p>A)gb 9 <LP Ǿpy 2p".@42.PN?KgׂRvСC㐏K!cT8po n)lkS(WaP:!0xGJ~@SgNe|zU hoM1+Md3W뎕SGϞ>69ylbf``ǧ"{zf:q̑WSqC;`4NJnT [׹z;Ogku*EuTl|v5NZ+1+j2C2&e0H*MpʥV-ZPg(K2J32 T%VD%N&)mvju`p@xϖ}B8soh7;C>"Axh]5kú6-)h6 oKC{uvŠI2lpJHـUSr22b2Kr+s8YNbAQT܄+$ I[(;Xy PtS J5`ѭOXbQZQ(7@)˴^j7~rRZ7c=!* `{ά?( f*Dׇh{J7kD%Yv,-ڗ`R͌(fmw\Ҹ'JjBZaBQX$Lyg|‡7l;~;wn޼yxxxdd۷o߱c[p xmr}=2 .@ 7q?я~tM{<~~ "L_GLwbp&sLqH&(r#1DhHG0Ʊ{SAKС1-@VlK ".>5Wz7ncȒ%+L m4NM)IכZHVWiB"d hV2 4׸UA--m4V! B0Us unSKiuz01//5?=4z_'cII4AD_e˨m[Ã{5Zkط}'p7K7n웍9<D62 -^nav?60?ӰwGyCPt,03fĄ%fVBfjEdqUVtZfljq ȋC2f p1K)Li=(il7R(t2fx-H " эȌ Cf+MmSffأ; iKQh$`74nFOzp/^vVo0 Dx+F03&binJa:8ꚴ膼^b(ن72(It1K:OY-ڤz.K:dgEo^Tpwe &ȗT5J[60,KrRe-͋ȏk=B}HE,C:e z/ UPQ(Ú}AAtJ: ͌3@Y)6mAMIFY*&[R2_Qt {t?B0\ 1iQXLˌJΈJ/Z]ƫ+3E%z'YպIVg\@u- h :S$"uXiU/Ɋjnq0!e.x6XEAJf2 >ZDDmY/#57>!saJA\~uZ%'7u1tZ7KFwnD!5 qJ;rJ]lkY0E¬wwf;|pG_wz(xw90) 8pﱷ#K` Cȇ!a#8ek\'oβV;m᝷ jyÒ XTVc$±Η 2_.s|3W2RsfB#3Mŷse-]6MY/S㢥vaPTj4f]}y<b RBžϊ5b.O@UWeV&U/ XJSZkl۷l qt]Ӂ}=ў+(3:<_cktAHR7+ ZJn8agiħILԀ7(3{Q2d5ϕ~tEEUZXuMvfLb&Άnlz(S"6b='v ^CMLS3܂"i` K@($t+n׷H-~Zr*'vZ8 "؃ϳ r70f:B֘wFE@ h%(h&MtC3/f[yhG,TUUe-Te4$c*laL Fz"0I w^).dX2̩q>Z=F%jWw@mY&tY$suPR(R~g-HˋJMH͋B][#}F|z)kL;$-v% %:y5VQ8,9%?&$Εy8Z:`i@ HB%,K\:Qe,JɌsb iRcMY*POG-Zf}Y"Z:'cpRHC%żҸ*KjmDSOk"VzDq04C^1BbhMe>/mqn쨤DQM%’h]BH K?A;:Yc'ajDU(3&Q1uog_XZ+KJV*g\#_,:L\/o;s8px}[v^ߚm\]JѩG&OA?:}ى#g^!e=N_JU뭡*X u.ΞkPoygJDq~ EXfCgBk dN[%F@<Ajڋx@ͳ2x)GtQP+FQ\i2R)l7 1 mA/BvīEW)󣪲*ӣsIl~+oqFu::˚oJ3ƴTfo15jCT ޹}w551XBF9"A|dy=7޿puO #:@H.R2]Jkj=mA2{<`Yx:@CLclg!Fܔ*3SJKlIIex쒸;P૝MX ΍-ω-taEQ|qBaV>5ʑЛVfd)9i2zhP{z &ZX@'F"c23=T&5x IDxgt!&{wl2K)Z7H$E S ㊄i5f[^HqJzT:D5aD Rw8p{;a);[2Ƿ9su!+e [w^Kkg&gM:ụO={n=tܶ{d5vFbQFPxge@ϒΈbγ,3μ4FDjP 4v.YZ _k|f56ګ(_cRZZ@k|U6K fEb޴ֳsl}XO}-c(d|rKd??.oM>D[YsʃLaXR@Enɾ5CkÇzBVyV1&Lc $Cf3.۪%V\Y1WeU')tS9QdgL:|Jw&5^7ͭDc;lߐwn[P(Bp;DqFqdDD*> uHvUNHe(4,YvuNbZUrΚ91"#2K:+D]qZQLlU YQ2RscnQ?prr& ʞ3"Á÷o~'V_{|W/8p??OUͷ^g[ɹ~ؿ~oM/:ز$ϕt*'_S.暿JN9=>=qtrɳѧ;n޳ah]GRg[S#48GaTg:V8pvI^{7{?9p8p'~띷u0X÷ag;8//(g<1ybfS'_g\uk֘BZyZKR;_ثjeSLevic j߁Xwh_@o`op_h wFX_E`Cr77zA\yjj@sw` `z,Gt*f={~:o@2ɖETv|jvEiZsP.s|Ĥ@71by>%؎`D)*AxzCѽuuDA{iTy u=JDuEEQ(]JQ[TİY s;d !t o!55ڜP[0DKUoT7PJ2XazdMb8.nj7R6dRS c3JZ~MfvtAIR0PԔ4(+VJ+S-Q1Ukk&E2lAFa|IZ)U˫jKjE] "LU JIW-Y#ZRKtARa.nuԊ(xKj "Ef2oQ?*Z-J S5z+E'NtfİT0r܌A`؈J275/.8/+P`ZL9B(@V\;~'O|W??o;#"Ĥ3,Bw8p{[w8lp2>=1~1䙣OO9yvf|j?:9gk}]]`Xb*Bmc;ϗJTo)BҘ*UIuW̵ͧܳ]< \G7GdǿoM=>m@z]<ZI `o@_`_hto8HAxKHgV3Ln1Qa,[d.HO:1kAVERzJH| V9hF:NۈVQ -DZP j&@mtM"visb:#^CѭHKS*B4x:QDddd_-ˌv%4WS we#VLԐIooSFf,W;q_E%LfV Y.hE!xaiuH5xg ,7,$e-LΉK̍(TejEv !z;E .b sR0:/iz/'~HZ%NiG(Od4W霒ؒܘʌ܄DA(ٗH5$]mL:Pҫ0?a*fi%6ieWpIK[$QrQW `b#C(] A Q$Ny~g'+㢪cy+ k: {E2<בּS<&? !('ͯ3HP:HPj,BI120.7Oc${-[G}ikҏ?8p8p=Gz7Vntl;srtr╩N87u$'NO:13}FO̜9rݶq`@[U&n|jB먮5eR :m^V.szׯk<]G/aA1gPw7X96go] K.硾Ft z]jq f|yy,-ff$Y_[+IeT_~URnHYr0Z"WiFAU2qMyV 7fQmc&"L#RDjD^;_ U/yi;Qa#;kT_S}$c+#CPa18N1J;XSj#3vF1%5VU#j q|Lf1&,&ef$fƤW0 _bnth7潑\E~aZ1RnSD9@LI"l5pMw|M엕iKksًq8yz"=FgI$GӢ#_Wi8p+|)l?}uNߙ;Wѩ#(鉣SgN8>u$(SS'΂#'Ϝ>=w޴s$r!tvWY/f@C(R[jG)R;z.o=}k{BF;{#3N]l BREY9]P[]ܷĵ7ij`/#2l~3on3҈w62[D7SMWdŔFdW$UfL縈Ǽ@e.lRϬ"jj%Pxh60ei&Rj OeTZ'_yQ,U*OmG%"RkҙjZкun޶֢v{ZWzF 4Eљzcs`q5.VB{ёJ8(+Yfۭ{l]݀U$7J  x8"j ;2TNܨ셕T+s5,w9DP9j'@[VjbHs o$M(%[Q#"B7 inB3K(~exgRGu]#%9 ˲(:Q%[Ma;(4E`÷9[x8p(p @ >ZαrcP}Çwܸ8ޙ92}+e|>yGֵn%%f;epVlj[Z*Zckm < j꒸W;ϲstJX 5f倉a'wU;\F{F  uĆѵw [̝:APVZAٿw'xJ{.q_;,X"HzEʌ옢Lq 4t0;"AI&iMBm!Py˄<2_!/U #1x m='.%Ժ|iF~5   F*~5h#NZyV)ؤT'ؠddT0zL MFf :%$,92_^@, agUs؅\`AFTTzYY(AWb[53d%Қ2S~PunZ5b'ldIZ_#` VR Z6Ά¯ XYP$9|c8p-_dQ8p}jmFۺu#㝻߃w‘teT"c3L8~n߾?cȠil|JitBJiԘjZki-|1W+ AVYAh 8Mbkѭ1;LNbOetMX_p_p__@_XOxl@8=C}M;ڊz)j-ׅG{BBֆv5[ ;Gge"ݬu1Tv|nvlNE{gL7cޙi5VI:|^#W h#]aibE}}APZ/bU./[ \hLy&Y2hfMUDě5dke-3O^-X?bn505ZQBؤ],cy/BP/)++IZYH,V:`a1xdHuYQGxgz/LH|KHEٙUe(HlܨY 650 w>Y:le66tY2d33+D-FOM,wa.hEkfg(+x ~LXV}MJ؂BH*EI.PeU$dWܴGHKn#2b4*s1zJQD3;sb.Kp9p!ߥG8pw>6x磓H@g9r3ȱS N8:}ɗ籇|ځkᠦޥp)FUjZkҘ&"ǟ//+$B:chUKVh F&v٥ $-V5u7uzذs戠;{ׯm]o,5AYIPZv{{W t't.ʘw27?"Cf2SEGeŤ:Gyg-άZ@ y3F:Ho3aE!qfƃyo Z7F[:1 QFdd-d,42 4]FjHL$$K*klNnιN $ެzR$ȼL&Y*lQP:-](761/XBdjFD" ւ}Y3/:l>R.,LMoANӭwx݊mW6^0;ܳ<`%&YoA>;%ZA!u).9!u\L:޹ μv93+r^"yv(+j*JDi1d\_Q mтآ$~U6-/ՕDmY)SP&7ViRK\g,.5zzeefH kIkAֹZ콂ỉȗ ׿O>}|38p`>[Aw<=G'π2sxgϜ>:u̙gQW&NG^ѯۼs{hY{CWQkfTUim|+lga\.9Bs6rY0R2mVoo !bͲouƽ惽z3X86t/w) JBb?Sآ^ Z4̽ݧ0Q&-x9AQ^\WquRntrn\Ae**e)KD1_;C>8FEi睛ZPԎv*ԉBmыDA$trK<'5Ś`$^AEbvբ܍*b,HL41(;IQ䅎5Als+VGQ(ߌw Z$f@-N-K.XQ"wƧAA_"wfCs@ Գw&M>%t>Ưge\-)XQiv:tXՕ _{c͹s9(V@A@jD `1ـID,q͌SU4-Ā{ժk>T[+_Wyn묽f_s 7 Bw,w+RUި'vwx+ӍY);םod3ۏa 0 0 0 0 _%?pybu灢O}xN~28>|;rԉ3>q⣋'~~]Zemeՙّ܈5o45'ߘ[d..!Eg9L͍q68fxOhzrژyf;vsuT*=εotS5'8uWPۘƵƹֹ`UuջCۣK_r|Zݹ+̳'Ƙyc%9{<[B >̥Ԡ"_Y%:gM՝ЬthlշڪEPůu~3;Te]8oogȟ19e^kwȵ3uF^WOut,7edtƨi]!bt˵,T_sT0'ψƤQgOH7H!ήO}Y W"( RzX=\A mNK'΋Ɯ8:wsEUe*{o7P ^9-ErCeH;km莸n8XK7-O7_iYaiK#> ʺ5vZ͍s1%dN3'¦ESM;fdˆG'v3~7\7ƍfؑS UE \ۂN[Rx_ӯY2IVKmfo_ruazpyaaa0c'o+Ϭ0 !_|gOםǕ/>qS9y/O?~'[n԰ne><-Y!Cn05'b%zeEgb ӃsL #I3Gψ϶dtG\=!KOA-M};mh8Y~l>pgekƌKj r ;j-svVb=vpe,]tԹg&8..u'< U0-ڧe׻j vZVt t|bjnYCsRzzhYs o%X2g.fqˆ#f^fsS#J=aUq BjWر>}i)cFW.ޑUߗ`Lzq3>AS2Μ6%36K!ԗ"U\ܢe9<<ZYWhٙtXs܈H̵+:dXۿ獵}6T&o$KG}й;hy+Uw&&C\uYe23 fu\MݹM՝S[SLx< j#Ƥ9%ܒ6D,!SJ&MyMop}fvȿX~쑳4gN~p.Ϟ{'oom޷ҶeMBk0f囼בՑ;ם9LB8Ssc @QRVx#711fkk&N[0s^+\Sv;K.+%cvfɯbGnWWRwU@=X΁R[nŖ5oɒ 9O[m%r@{Ug 5Uշx w\wE=GwuFTݹ+\JmL*ʧ4_Uݹ5ВҖ24+|!fN#ƥQSr55jI 9¶}_DrǠ;=^s>r t4sg?s# ٳ/^ӧ_}qΕk׭^^Z)OS}h#1 ~ї,17/l rF|A(I8GϞwԸ/:%6{Ԅ I[Kmk=zY}UC}OFsM:tTə;65l_3ָV:פ-TQ{xsΚ+s!7TCi?w#8v{δ$_kg`bϜԕS`-KbkN[lWq9|g[SmԶjZl5GSxYf{f(G G]r֬z&8-ΪfWa3TnF8z}ܪ~S}lYeP?߹FW͟!;'~H+՝#ia玐se^~Xд%&l2D];aϖkMyY%Tq9T1C!4cXfO,>3A}Y{1R9KsJjZٞ[}V[WK,A{U%ڥ'̥VWQA(UwUdIt.Tf1?oMu$mU۫uT^A:t;vDZ=y?*xSٞc\ahS5Kae&VSn5 *^RoQ/;JgS#9%bJUY-a[jȖF)9ϔ2ɮ)q ӜKW[ϲlɳOW1#rDQSf72†`+@ Ir5YB;ǥ)3fΈ3yAIwu :.tp|9t!$0@$Rwց}ȿ?77~SD8? `'MZnB e KaW84zIp|EY^hA 748tt 3 c %M/BRCV??Ã]E\KŊ~pŪ8X0pYBA4! J-DVEDVg,8g.]:gTVpx.t 3r׉\YE _ "J" bZ@oЕ=D l",@Dt\ ; Q" ХItDg+£+fN ]c%gB _ Sr'9#>CK@B9zP+@A,JOKi 5DP8CryP#D DO'""r(RBKB=ʐVQpǜF+ D.A0.hm r'҄. ADP ]p@p 9?΄Gg:`p8p}@P(8"R Yat(%B"r)}[4i @״MMuA!B~,MH׸4)Kl:(pe3"+g'g"(8O ~ Qw:/]UA. qBe@~)gݟ/SF +3HlB 9~_p vVnUyO{R+u]5sl΃_O֝?86h ~x;6tm]q S0-HFir*('儗fnjT_aOa/ꏂ7S|TG}1Wh|E\kƘyKngΘ\6kzҸinwڃU;oPu+;k6:r76[Y6q-u-v-Xu[UCMlz7\{C֬ԺsO̽gnZ:7sgy #gL [ib+7pk_ TUSMJUͭfWcТ3ԝZUqn5o:6Z`nju7;hm״8\*{/vhugy1l&; \n V}aڵ1љ#kN3;w=7bΛ3ǏkH⳨t'Nt˱.25kug):;ץj9=';hjo+0s̹&)S>g5p+ZX, t\΁2U|:E 5U['κ:+-[P%gsr̔1k\~,tNV}p h0Z%Dq[_* 'RZ4VrwZ@p~q Y4K4I/ti?Ay D3"BA(̜5" . >(?ș.A.i%yp+t.Rx h.\oei*p8%%A"%*]~A"+% hDDr) PUpR N3d"juYpgC.:Q(EJpUN+D s`K D~@D@D'D؄.@"l)ԨV\]x3l 28# MD䒳@I85 t@RuBqZSq0cХo OA' tѠtipN!{@K`)(RS4+_5S#(r ) ."Qr 膠s U"BAD6΢Jť0@x(CTGW(Y-": \B~G8,<¬j^YU@> Db"zd!P@A " 1DV.AYBMp)tL+&S΂sf-KWS k{W;*Uz?S 8 8gQ| V`At?u|2>tsњ-vVm]vlRݹyߝ+a;5ʟ{|cP?Z /g>{nصvu޲ k(3JLToQ0[e_o7M|/j F_C}W`+1F qs'L:s?aFь%s&XuhݶC큍w۫8iP>󆚃kBl>Y߷zSyN]ڢ*ڴYKۋwphcwU50`O O;wCkgwz'gu%_8o3/;b__l :*^zVU9KG}^ߢM!EgϨ;7:[5 Fk&K}|p^iU4JmU2kԪ՝; [jW8cf1??}dQ9=pΨ[>v\g[9>8edlƘ,s{cC*6mK&۲,Ԝ6Ը ZřQ;͵TGNq9ΰ.R'[_-XX2R(r3X}%.U#Sh#X+=挹6.TX>~`UE_g-ڗ/?ȽO\޺$;ϱS8%;];7Iի٦eʗ΂)7|2--*V֤))fN?̡^֎"!ߒ2-R*)+3-ۣ;ckSL->"293Ʀ&5f9:~-ug:Z3T| oF DAe26 _Ȩ;w jWtb  ;vݻW_8*vJ?)^x_tmfU))V@A!R8i.Z/?މ f\DPNQ+]@op)݁ gXfmBiU5 :R)q~ @Y\ED 4 Vpt"A^/ .Ő ]x"n"l\,  h".<u|86@D؅N.RQDUU@4 APĊ 9fD.ΥGiY"?ĺqN\@ԭ = 3 O 34 3  Q4D*J@\9 gL9s A"t'BљJ6jEt"&)p]I/:!"r) #@ 80+0놸&dȥh3WZ.e8~ o$8" "%g:zЌ H,s !r }w"å.s)> @ Sp]?`@\MJ+9Rzt,8F.AJ؈?9VS E'gaKݨP.qEiRVpx% p*r)i@ 3 tᑳ:XŋG!EV\Aά +lsI%YvXU455h|8p[nַoCI:痰 "ڵkc=&.ZK臟}VD\JAm uoUaw=Uzݹam-uqYYsO/w gKڗ7ԥ*C?>:wN|O|ۭ+oPpϵH |A72F_ĒW` ^qdo荙)ّyƩf6awؒ f$Txo]Y|`} : ހVwV_>^{ۆmrڌ%eٵ%oj:^U*s{v팥O .7+qF<;%"G&8fO]0`OHUiWPU\wP(6kͪvlk49]C]wެ^snqrsѤ Эk-βFg(xqRwVM6_-P II&U;`VȎw}UtcVeƐstcjX,i}czܨ&,&L8r-Rwn5PsH#=lt2"o`S\b(TLe|cjk߷M5}l\v -7՘-^ ws];h<꯮ܒfhM3/˴֧lI%QSRԜbu)U} ڜoJRJJgҪLmֆ 3Fƍ6Mv.JV;:OPy9*į(l[' h~]bBkgϲRamcǎgy54替/$-} өS뮻sKKKoo/C, dYpMPg}W__UVٳ4!HvUx 8?Mvw,Vݮ..z( 8cd3q@h: ✅\6D~6UhA [C$JK"!JDiC>z: VhBK"?D+QND$"EPK 8CC(=bWԉ0Ȣ EpJ)DEQg"B4 i@: y+&:04€,"t#:9JV2闳(T.,Q"u9Q I+D\("@GA N X Đ@"RMp JPRW.M(FD),Y0s<"PD DM@7咳HbWpD`z83kQM)"8CЃu0H:g&۾ E痠It" P8, bQx(0D~9FP& Q\sB "Jet@hG'~`&r0 ؅pJL q& "f:'g&V` PDq"" "IbP Y8KSO a)ġJ@q*ѩH+@=U  2">pBAD.Mxh| "V.E!WDpB(: .8hz у(}D~AD P=\apA`f{&VNKDIA? cG~?~|֭iiisrr9oذweud+**gmOl~%"4\ tEn*~K]Uwo<:p םBU֝?s)9tgO}p g?=er Eϙt]FRoIƨ^ߩqVo:WPރ^_ rշoho.3f,)nzc74PwruE=e97lۃ <^k|􆜻";ّjwD O9>5a)To[;e.{zInԛ[d)˭u&{cVkq8uYSok5[m^dUeVWA_j-OIu@#PbsJI9gr%-9nč9J}xRQp\M gD&WΟ1˸0;jQk[fhԋqY:iheUU=܃]R4=+C}]AGVD~n&:@zNLwXp)Ǘ7|̙3䒾ۿo׏c~fqCdAoŢ(q~!D.uA`f]Vt<&t(ʹsx i V\@mFKtB8 Fᗾ@m gۿoDN2p4!f8Dh| ?08z(ʹaqdn&"0@ q8\JYp?ĉ =MsYs40!V``8&0s  ̜#BB&4r)49@\qR H$" ĥ0p@ "q(`t@!gDD1{O(@_8@(@`|)"|G@%O۷0irlļqeIqSoϼeeɡvyڷ5t_umCݡ Rw>n66l g%դ-q-XZ^txcE{#=Y=!W/!g9vEܻî!k[Ե=W,7eDޔѦQ SmT_Yz/qnhK%9uhbGĚ_a6-NkWWwRd6BsյVmfGMz igA=P^ ֋˟Qw9TԞWʈN5Z3G̙.m|7~KP)zz '&^7mT[r̈́'?mkĽkmK74M;KypY}^C՝ Ncs1V4f,wq#=u$իJAugdWkf%OJuK3zWԕ[`Ov̞x-z,%nhpZsM2[ґoZh>c٦Jm;38|romw'sw ~;vo 8ϱ,תzy!f9ҚfhM7|

>oN)J%E59-~2ҙ#3'X56J:D|Hﯩ,Ny]zuWWHk1ϚU5+~D\[_n) #6t0tnO:H W 2p'1l`lXر;;ַ4ͧlb]pbtƍes%+Wvmlt@J|54JP 1rMO~.\ 4"% Z.Vt:#A /2[￟(aIvpD9;Ga; ti`)o6!6"l +p8/4F0qÙ&;G\%gpNP8K9D/zGd^M O<}]xD㶸$g.9 LL&?ǎزe( Nl @+V @ycB2XN`Z'y|IS9 _" BB4J0A:+8@+8r juܹsoN8?S{ÀII ZLO&}!a`fv> ጬr)ȑ#o61\ܝP\0@:ϟ?o~*  LD 1*'hL7n"ܸu={rC, !.U$C`>[(?~8h_#=: ?msi %㶶i&#SQ%gÇa O G yA9t}dƑ>?wE|>0~; h¤E-뮻@0*iݼyO?-BG?с8cZW_ݿ?) ccgPM)aQ"~gב XDw`ww7)A(hBALCĜ5+ |@HnMR. Qs &zHHt'P8 gmii!Kohh ~dED!_+eD/_lٲ+We l߿j*n2W<8ًqMOOg,h<;02f@:rU 8qy333giL}Rq@d/ɍAu7ߴf7w\VVWYw搗ɏ ^ggO9ą]8z 玟;[?z޽mƍ7u4./gJ<WzęC9ΐ ypjnԠ`j ꋤ8QIho[d &/X:}wƔIےl4.;^ݷ;TPwxcV=W{8zP탮~p]-x;\n֏Wos;{324cT܉k݋9O;wFTQK}D}b9&oqm]yN訪;wn ϵ6gJ)FeLjAJ>EbmR3gAqMȴ.N_&ue74ݺĻmS]_Т:ګnnn/Hv=ZΨsD ED|<\L L^hr ;K΍i2[J̸$bJXScԨ))1ܬz9bIU+(/;S#9кڱl{'5p؜1 F/hd:[N[wg'׻\;3~ 7fހ3p.-Y={c?p=ؓƅ &&&ם&cC"{nb ,%쓭 @+Y=$"6PhU]_ }]%Rm ie̎@0+lّGa^^#ipxIr0g8QER;믿_|3[G ]OQ"P]GZ:uiI0ЀQ}GF铔 W_}-Q]DN}?hEpq7`+=P \.J`Xzuss3CɓL|D  gN`>;;}>lx"J4Y hB0dp_ p) _pB8  tfq 匠ChE P"} :gpA "=( Lw.̢EZ o& ^L+l4C'<@d{AygEx%QnqL_h{ }C=Ĥ{*Tߴsf#lO2pD~.yb9sFS%J`@?Bb3Vib bܹsO~tT!-bwg ф3 r@;7RR~{޽('|Ec C(Y#ZJM&=\҄Hd5aV"3DqXwy9ψ@:|݌QZo6 p6vO [)ZeX0(:lGO|d%`Ksz7~HxB0x:8}c=Ӈ܀ )9 `O"yJd0 pOVͻ_ *|f"%ӓYfB' ,A@h, dX!oܸ 7y8v 8IKK#dCsSSS~~>Ei"^Ғ)&cԇKG:thlRRR뮻$dUpO<$tٕ\آiSvDK7xspo񸬬';|L{yG6|; E9~y ij/Ww|}==+7,k[W] s󭹅v;șU`*ʲC`^/⍪WI_ؘ[`-4zcFWd^ZⴂӋgNΚ\18uܿO@љ6l^.5Ի6/,l v(9`G͞e݅=<-ޡEg+bW_KdKQ}67}tʬѓf{yc =_v;|bǼIsL=zʜ1Sfh"c”'LI`ѽ +j'8fZd[+R&O3"iuvkm7T`yJ;wd뉦sޜPwwqtGM,òe噖ǐ3gם̅aҰ%%b5D,)SUTwVEugjI*.Mʥ9q2⯱&I9YQ[)dٳw3]ypDXvd+0ij-kh.b4 @I(bOStE 9s3&LnD9`}E&\& ,9i%%%쾠'Eէ 1TUUŖ\sO~RXX"U8i4J9<$ݽ9ّz?VwY|{ߣm?e]p᭷bf!F,q=E'":a^z6lץ4aylQK=X ' ?3n3[oeOGy'wرo>.{gyfΝ݉*;g ڮ]Ϡ{nݺ&> dZ`˖-HgF A'ȍ7ވ"K]XNNN,aVb/s,!b3Gڐ=}'agFd ofFF٣;o"JJO|%4߿_^d&q @${/F |D9 lhbFI(>M ۋ ~`رcwu3KVP =2TP \ !8l; 2:d;nc%D${Y.tEX$4aCFGܻx"-xBṌ zL33l& @0B Ҍ-C t4cM&qa"gϞ%( T1͈CA$,Lj 6;88rgHG 󄈎[Ⓘs7@ѤS ܂32ܲoO:ꫯBG!M+Äi.kA,B!zDwĉt+Ĝ0҄uzz}'%p%ItG31A oI߉yC'>iD0!OI6rV82oܱ<1q!z8`W^b$"ƒC(AƋ{_:% y!ŋg͚UYYKfcH1_nd[mVh4y-\A4mnnYpUK=iOL@7]7\;][Zpy\VV p Ǵל/gOpGg>8{3玟Ο=zrok?~;O|C=7ݸeǪE5 w̙[l.䔸 2l[[ M/fPF5MԜWh g;N6:/~|Cʬ鷬(mM=u/;W9>PݿІ576lVlMmH_Z9mֵm߷`GaFoص+Rg1Kswsu;77<;67>?~u~wc ۷ d.sE5>Zw*Miz%ߴ8u؄i#f6ktNor^'XbQ֋ΗJ%h5'y0b13N8vR qߘx|4w _:QJ`%p\8zƬ]n lTwpcmCS-}U3X{pMٮj6r&ѫ.RWԹ#)ёkYiXa\iZ)Geeu-]ZS[3 mLJ$jZT95fIZ>䐉ԈUȆ%5ߒbJ7/rʰKKiH'ŏ]0jQ :s`=Pb.qdٽE_Y!љ֬93j7MaeO<=(SuIGGGzz:" 6N oAؾ8.illdPX峲g!aV: _-Hٳރ3[βcR)JD Ml^mx3@؜ % s۶m 4(++u^'M&)<|뭷b nO:@544($!dO_.\pb1\*--% sΜ9?8_[[v M؀n}Zyy9!"xrJqY<DU҃!DxtRWꡇ"I6 ,7W_}U믿N"C̹x"X.S&Vꩧ8ÔAp7ސ&f3 ~N~2o[+g0tPT%QB{ğ &CgoM&z*)~-.9?bG/ÇC[2SxZ\}7@B3ϠsG2R ~ VvۡC9RB!)Bێo R"t41(Ck7pM{*oRw~k]ׁoo םz;>߿1 r\VqV)8}\v󑳧;u?<}Οxy{]w˖/+o啹N;̕Qq%oO ~%PhUeh75y͹ѥb'3gH؂i & OߑS=RMi_GաCZ)p{:j:j;=Y߷8ڳγڹ1#iK[Wgy7bݹG(+lE\]#9SFf3{Bô_\UBWl[r-BsTPihP+Xlmh5on9׵j[Mֆ&G2{}lhv u(.KIόK5[x䂅#-)5ͶVkyڑWb 5>PwZ,1 F]4{:ҝ1"Uw&QHo}֘4;6slpp܄ySe՞}gX}nb{صo_ahpԻM ːnC;!ԜnjvM7sg<9-,uѣ>+vf,ًf/0s޸N1cֈE s ́2MI=ܙ]f+2XԬS獚=gsf_ե76m=4kR_Wuʃo8κ\5vȷ{ǝ]ǎ}{Ե9`_e^i^eYJɆVU8\ntҳiY-=--eY-ܒaN3S͋ckJ̒3i?-xYY;'Gs2G5%ߚb\R`ZRm34̛񍌙#͝<35m~F'U?9&/;dZ ,QsfĔo)txB9)~`tM7-^x͚5,vfp ~ӟj4 uV 9aO: f!2B*5"+_|M[DִP/>$w>ΪcLQY+ۭ*v;R5lkPlvܹk.L===ׯOKK D_7ayС_ Sg}bׇ1YO>%l><l:|0󋮱Xwdѷ5`F{}'u?ⲸgLT1Ff" F!F6\gf[4~:Vؓ?t GovbKF(v۶mDHdy_F֯zR2. 7h-|_ xf.Up[ hL@BNb@}z?  Ew> 6v`@G4'V 7[*IphG9 &1A9k\r!F!*h"m>;~b'trm<$ +C!&iB: =V{tM6 0`Dxa* ?',3QsI3!tB3$CFy.G!VieDN2Q[IB0J eᄂ*:sl޴1U7ZzcNtuo ڽe&1ܠeܬc+Ɲ\nh=9&9jڬ &,eRo+ם+q؝ޔ$9K̜7v3fŬab(wʝPƓSdm?otʢsuL:ԷWY>G}YuEl;AUw^a^anK7:e8Z mi82ͭܕR`KΖ5%lJ֎!#‘Φ)9ߜoI-b|{rqĩ3FGF8&oY1idXD;&ugAo̔5eDL9kɨP .\ti@@nn.LV*~Kv@j@lX>=6ϙ%lGP_\-466Xa1@κZָ&4 _%HTe#;AXl޽7p;v.\AU[N_U]9p@]]ݍ7޸y5kִwvvp޾}{KK tvbd.|:k6:kS|8/~G+`:D_H*8 M0@!P?gf@SG@gs(D(.m\[\vF9[GP-4{`6]BP"hb _lk@a֧Ph4 @$MMM36 sޛ=;DD&!V]ژrsp:Q60Xdz/^HQb BhgDh\z5qft(" 0ĝW1fdd`NjAAz贶Xx<V o y3gΔ22[ Mxib2] a{I$#aG[YY꫌U@793D`mm-s@1B'c,$Ց#GHz"2:ҿ4 :3.?sPp *p'd/,م2}p[SG&5S%~aіO2nlqi&tJL:I)2 \fo9oР\:N^āaz/Rb21G"Ee#=:vR8LC"zP?yW^yOa(  M>D>J8z8]^$!aUF3OxQFˆ0M09p(t5ц7x g!$L\"LtGL3, 0GrG9;y$|뭷yQbܥ{ N[ xމp#8XgNIg#厊g pOJ>XD!I׾TN0[oW8Ϡ 㮛 BbDqDa %n DmMKpfJ__~$B-;ĨX$$&D&iUp0 θA}"C]F?q@]<$yD91;j#R9.>=݁0 b}!Ȍ )D c4I@ƂG!}G}a B2 $?{$.\$ah(a]BjH% aV DE'AZ4 @ф%B@)xnD6D7BBD9dM8 _-f`][P0ܲe  &tY-0$GD"[2#@΋=pa,ۤ̓BW 2H-E&sm$rugIEcֶS`ٲe;v uYvt覛k6\qzj-5;Wee=>߿1 r |p gYg.>zO^y;./ 쵭#Ϊlkւ8&Vv7lMmV[}Y^s IKFK*-%5hɯ~.+u\U9՝}4҄cg&0č,3i}ڒ|OoVug;ސaY>1yM~; 1Gw,mKȵ&ҚfhJ35iuRqcjpָSk n.-Y gMF\ؙ'Oa\-敹ugP:%|ǟjLoAѾBlyX=VΟ`%yu9)[d VW |C\yC`ÝVeo;GU>B#ޔqm d7[--&z㲊n ll4{̕BkRD}9)T!fP~6%EKk䛒9 ͆")ߖ2:g™-ۿfҀ+d d6laKda9 l***Hc]8vsVFĮb=-;.`%Xc^"W1g'LaG\ w}7q6tVliU*V|@СCl,a5&h= 'hel[h`:r:W>6/Z:Nkgg'2؂tMpf?4ZjŊi Ge۶m(]m,0qGeggsߠ KKKW\@ȫl9q:"뮻K^,sxE`1G t :} bƮԣq[ lmmlBٴiSyy9.u iIg^iOFFHp裏vww7Ś5k\b"} Z7w^g4H4PrX{~IJHq%<ʽK߿_(d/![A/0#E@anCatЀ; t%C 4aVQN3 %#E@/t \(11ez$a8:Q*#]źPo#j ,#B\aT1Fchc F'7ID$30N(2G,JL F Nᶃej~ȹSGΟܩ/=r܇7 p'ᄑw}}}7tذuMۺܒ=3FA [hFʳ/2 ޼iJʖy9CSŦ-:t5}+XP{uߺ7wTo=WݹI+s볖VqTvևzKvƜ=Qq3Đkk59!oW腳]c)qB۬s͝r=x]aA*q~cc#KLU0!yOju3ΰT iUkzy9 Эֵ*//g/Ղ\:~F?cBg"Me3j``-׈~Ų={ Ag@ Ϧ !T1ogfۆNV)I1Ya,tKu*p Ug3&nTRIӄϲW^yEj[05Ha%=Łz +!"<=Bg .YI+tafqlDsYY/m۱cDzUVLiB9Poߎ/-b6c34#ΈsyX{a.\uwW/h@ׯ_OQ|Ќ4ΐs߾}"ז-[vI \:w\IIɭފ@"":u m6I0;wD[ ¸xo}[%1M`1m* T2CrfO+WO{[YPH2%d#@4#rmII?'QC(`DHCA#cL|N>aK:K-2#f< sψLЉ/&#<"1v!ugp|Y:H,0>toG}sMHロd@iK413]8q!~vщ "P=4.za, &;bKyb"}F h~p[4"2tDJ-MD(l.z޽;J@ᣏ>b3t= 83Cɝ:+͗8]"Аx$B5%+ؐI"F&.$gBVR4F"D0^$1!Jtp ABOVظ]SƐ1D mb/VʌxP]ye~3$VPc'4A!tb0G9OA!DV:j 2 D:1$8M~a%7pN0L2v)Bр sr$>z{p ;d;!`!HXOz$CBr4ITM'QNq+23qlsn/: M33j8nq:K0Mh2 >h?n&3!pDUfȽ 'qF|r 3S ȥpi1#UI8jb%AV0 ϸIXPP@jK_~e҃AT`h\aЇ dǎ`bpzr R8\tc ŁH#(҈2| tUy鲟W;oW햚Jyw?D*ǐ.|c9|xg]uϼw+?zwn;qo{7mY׾Uձ܂=1xC/Jɍ1?I^9%F*fEC^CpP3MlM}*W,ٷxCGj۫;۩m#ܹUek =y K+ Ѽ OX.Z<+ElBȮ~7Ė C*r\rGN=5kJsG'L5ykawK{[\XV8':slhʈq5fvD՛WW}cؽgkM75z/5_#ALi0ˬIq3FM3fy`_feֻIenRi+PPCSd CO|K][BmՏU֪3Vwޣ?HuXY*wG{GXebg,M^ysWĹ=ޜg>Ǵ,آ ۲ ˲ ǧ֝iM7#ԚaO39 ))ϒ"6@eْiu9%jNV߀1&囒Rܒ?/?s|n1]9 S}`[5Uh:Uz֫d٬grNc߼[=XfggV3RwRacܟ9c&+@"P^e qD"z (ICOړHBW=M ȒXD!Nfa>[F%\ qXg?NbHS\B PD#K'nS/1O}Yx8JF DF3s^kYKDLxK=5p<"Gq\qP}Oc\.IQyUX4HHrDp-fR4_ܠ !2 )3fÊ"FRJ@nKR)2Xb&%#Jb艃GX3J^f\7uT7fy`q@Uhx<$0'/V)> JPEBb~"*H01FA2P1ֹ%r  Ï D ih  1a"J `P0cf\2" f(Z:%u2^  #75dQ*55_v1? LR2,' n5_btI&ɓ'O6-111>>~,3H]A"V\J| 544455.bJ6HgR{O3 9㽈hN}\w]wugpo⸬'W9t(=9{3';ucxs; ~¹#gO}ps'?<|w}7qgnaϭv_׭m֕"y>S,NΉ@~RZB?/rț2"?64}DlȚsWyj͍+UP{pCM_GmG:kw62ԹU-,jIQ{Ku'rHYΪ B+ܘT3ojKG̘;by;/_fUY,ugU^v9l^u}ŶPQkqַm l^nE8S9e-VGC*@*(2LSgl7`/vzKŖ"^qsܙ]`Yd9iֈY 2'O\mSN#;c雳 K#3dž?u+iGkg4M{{Խo_inN3k9ʲ/;w6<:ܐn$_W9TW/q;/?&Š!N^&W˹~+Kmj7bsF %KW*>a꾎Cԏ 7ԪsW ]'߳]}E}dCîs-e5ܖf]Y}y1ܬZY2ĖqNXS# S)Q@^eEg!%FR%5ACR`~?qwX׬)F`-ҚWn%@- ;kfCYɓfi9uohߺG=0 ~pRzuKD'=iez V貴V:aOz q0`qժUUUUFHU 4 5{pP@Cll>555RTq9r ^eeCڗ`+b9lc{9L "؁zFP(,Ymgĉb]o_cV ӧ_rɊqfw &m$xt66)Џ,s)%$&_fZǒ,p{۴Pu? `iN.t %X O]+TvR=-(/ѣu3^lzYF6kkkRL?cDTիWwvvblwuqC]vOw xf:un8D! 8ۋ{ٽ{7Cx:D_}|ח/_NH paܓ&yp!JXg$ &gQ^j]̙K#+VطoJ3>adFV"JׄQ%7 #c)D~"8vd9`0f͚5_VVL7|g=2ܐЗ 0GXrecug@gR[nYl1\y%`}B֣#W;ߴJ]?D*ǐ.):R3đ'?8 jc/νw|Go[{whvڿ= ZåHE7!oƌ<{^nva<ԒZ2wR8aLd袩T&m1lvV_W4Pw>Yojgk:= += *xoOWTwZSzsS&3c3.%f;sUmW=/ -"O+={yj[Uި~cRר^vo6# M5 E45Zl MPxqJ9#fER|E&%"V{UOurgv̼2cܑ3GzfM*1qaM;Xip{LGT-zC7RQ(q1=4szИugsmml̰$̟8"~ĉǨs`_ug%\[In5WG!|O ;o"s[꽇6Q{@Ǵv qZk__Q=Mj{*:NH ][\OJKUl^1.KZqcHY?2M+4c=9ߤ鬽ڬ!z9jedY!srԒ6C^bG4Qi n֨q#=F)3< X#Bws(?}O Ŧ$3}' 6hecf9܆+p3{(RS6l]M3̦BLz!N<9pA-l&8B v H}C`g8pI.#& SOъ9'$$ 2F"V:Y+4O,O?!zrZJsWW{Wzi  JIYp=DFHaps86OPS(t8"o;J? B `G܈8Fk1HAb dr D۩<($PdRd "x؅k1e^>^?8$2;&&臎*&0_Џ܁J70!M KDV\ 7;LdH2޽p  Xpvww|0ӊQ4`frAzτ "gEfp@<9HqpOb(<8glWb4p&-L@HT^Y|fD8JnGܴ8aܻ` 8 n߾ ahH`40Ьv :Ȑ3E/3VF >3q&a$n'7PHnM d&R8B !Bg@0%D(~&Mt"ȸW<_d֓y$KM ^|>:VVP(w E%Ei"9/"zhB!|R8⯛ '@saZ|"ƃcSX~bYٷo+第,7?yB Ι&$: ׯ4a3^' ϗxH,923PwqO_|YsO8?_wq|uq;1|󧏞>\p*+s;zܑxr3GWҳ<;{wuڴcmêC y)ނXjn$5M3ԗ4Ƣ5iŎ%5хFĦOh^xk֨soSຒN݃}U6TwWVm?EL9Ud*RugFUxOص3,g6<}ts, Ξ<,CczJ}cs=˾﬊͵z4S梸FΜ3vQMéU;8N\LKo:_)Z|Sh{H-+<1mքI2Wڬ};U\W;g"o[SzpEmk+)YUv+ԯ>fhKZtVԆIT4ijTg x#!dvz9)g4LQSJJqkj%9lKwd-JL02i+aTʜK:3 lRgV86XoWUq+uy Tɓ>ō]9x_޷j`7KXB\-:':{ ָt#W0 FmmmW|p2[rsAZMf.%c-; lȺѣG<Ⱥ=EtMP 3{$vGNbO*}l3qbҜv.LvX7 -;Fʶ& a`Ӆzlb0cg?[h6XGDuCZA=-&^ 6z[ \_ҕs FWb^c)a@4^IAtVld_opPA8%l`+d_}p.!l9Fg`/Ď?`G}stJ1;[nt.c]ͭ޺'|$Rox B(C3k=gvl1:Np8 }C@$a@kh'сxVY0≈ .k%)N*R^ -lկ~N `&I`ÇiB9Za.sQ@/S`:~aA HN<)"8&uBHD@F q iK%3ޡ#0 PKi|#IT."a`H5 Dl$# 'xB+Z|rb_1;0tXI2FLwy&4#EtaF&4- "L1F~pf￟p3I|F:!'A@ b&k{ $gZ jD4agFn3)2 .!X`HpHO%%3Иmt"Hp 8IP'f q &إx] n RDQGIrqtҤ#h R"o 8Z/&Ne%B\SX`8'x{JJ`EaW, ? 3xL2 p"b ?GaaI:xXcD^1/la9#Y8`Y!)1qIAp#/tAfDBhr tD Ls1LC=("5.}&^`&t w~[ tCX.v5j?~"4Hd, ƮKg]LԦU4Gm8 &H`Ҁ9aAF0 C+k7Y%4Eb}oDUbWT @%4pM7_ d/uge˖|ǎ,fw^R.AvZA|4]5p,FJH HN2_d8 ԁOu5[b{+7R+םB+ɚ9>Qc98Ky_ܩ{̇|'ʛ=̷{u9xh{-z酕h~TА[V5-"g?6'7&4uLp v.ruUс Շ:W;\[^X_YԐte| A뎰+{c7M:~Dܽ!gOsGgsvjÂ#0glivf(KY{,wyw =疨xaۊnt69]mC/.4*)u1ݓ埗oK_aDRGh߬16NKYGTϻ/s鋁l{뛵.׀U2'פ0b"H@sVf3Fli%Yvq}}}Rǁ:)헯ؓ*K%: у8Kv>{yDG `ity_lS 5tC \'@@JG V nB'Jr a%~c P!C't.i]Mh'96Si(] Py /@&p I$tY#KI5\ꞈlŋo4zϺ~DĊH"& &]}ʻHQzu?/w BYBT}M!!]0"B\R24bEg%z&0XVd U(@M ! ,\w\:{E\J+Rj6Z.Q$;m2J|wAJ,+͗) E1!RR` 9u !]T!qML6h.zGDНጟ[ ` <u! A.+.[Cs9 !0 4Z60wco` k|;֭[bK/30mP^5 _=dgI!B/~]g)K YEAQQ%[*S XeggA؋/}lXu "xU@ԤUUUֲ52++ ~U$W7!cOpoTw>u™Ͽ{;'>̱c玽{'O?t}`=޽{:]sκW6W645]۰fU+׭i~yuKYYM^I'lW(0q輸UKws(E^4kP?YgEɚµµγ޽ٳhma[ٻ6g.Uf.W[N8bڬQq 'g@E{:eNϗ*[d)4-RK+7U;Fgqř`G.X:nQ7wT1g4]]jiCP_۸T+r@TE/l/Nm9efCc'%]2w\(~J|Oo~A=3!\xF4n\hθ1W՝w9#!wGuYzj];7Y=ֆ+ԝ9j C[̑l3yoL="~x{P#>ZbYwHU9ޫw6T5XlOuϞ:Kf 9UԒGEg>[޲?5;p15nyw62 -XfOW/;'ͩqugKrȴݔx+~kϔ  ':p]X ?EX.lvXhI需^<}켱S挝?76`JinyJ guJ߽//>zb3JKa" Qe#ۏ+pt`,.^v[,s }aGAO8cZ8ϧU_{5֖,w}чN>8q%+w'.ᗭ~;3ez-߿_} r7xO+םgcr voC1q腳G??=~S'_<{gN<Ï>~g߁s[uˁn{:p]{w4v_߶**cpQ## ckN]gIuE }վ*NUt>Z}aC޶5ʳ96-}門;quag*C~D]=k߶޹$oΤE3>wĹ癦dʬ>me_}-1>R5М[٧Bc*Kŵ…c_7od¼&LK71nYOJu^vvZ)ٮ}B}X2@ѹ%h5(usfb#g,Y֭C"Q_ x:S+NO6&4mtcRM>yN8TPZfUw i4SM1Мa&%LOhpJʩ>tP՝ ~ ~G@_l',0/Zߒiݍ6>;sMqpGu+4GwzwD3:reZ^GuLSce($Eէ+>δI1!j58:akĬ3s%r[QXʯv*myP=XJ[đ[jx_:9aޤ'M5:1nmh„Vrm[-Yƍ gUJ|u g!eeV(:> _!HTف݌Q愍g\Ti߼`ad:NUu|NOޜwU}+ަeZz9s^H!LI !eJBO,iTD@EQ!'zkAP">g׵^{?{_yȀ(#G<3O? /ZQlb(J>@UDEtd7a@L"eHO$DR! Å!Es"y@dK$'D11K"T-^HH;z`?#1 Ү!CT4 XL@/ 2_RHhM$>^2>uG{Ύmr׵d!rC N|OWn>u#!`E";N^ -<@c/1 R9uט׷ŴWdb>򿫕8әڨJ>5Ц!$s_:E_h21KDp!JLb0Da+<dj*}/ P*!G߄ VxBK1bb 9%FKUS )uQ i *.J׈F;pKZ=/˝'w¿|pԡWOzU9|8uTq^=}SOzK?~駟G?^|=g~uաCOo~%.Zu,_rɒڊsWŕ&)KS6-7u]yҚ}ڇ~g%ttXӴpO_ohLo1{S@Yn wުj?^䳵y|头+sK*C, PqDRTg%XJqjsY(s%;1ieTSTm(V.Vn@VܬC p(g }fv#atax_i7]ۂmA{_6wvn;fզM 'L@7}Sm3vîJ-Kk<.]0e2uo 'Ho91=aZҘQ 3Gg;7 +W ˣ"a|Yjq)S$Tf\[hyi]nٲWіAr9*hyTm;ȼ}ڢBRZar;D$c.s̐>#` N97h{6joI4uqcSM9 eJFhlzsjeujcAXo+mOM;9>u\\ԔцqUsV;go.͹!`̼gذr}֚w~>&ϻ;[.0ira&Ƿ.Ҍ"[o?C]4 ?^/OSz!bCpYs0J \Kb5>hz5o KhZL(z0G 1ϖL[h!P$3$8b@Lb$5Bk(:I -Ͽ7IB?= 7m*6$V.rʵjyy/IRV Rh&R೅A9D7ܤ\wi; 1Ƀg?}d#N=x3p3Ξ9T#=|؁S^9qȫ'=#~sk?{g~G~ƫ,^rykZb•6CF QʒGo)}MsNn];ֶ[~ʺힹ-9pڸŦ?hWj8K 9{C~r ~rʴI+RҮJ=6Ӟ\X)QV\rPb15?:0*=ks8G5Yfl^e}/nu;u*ewwܾvb˚|" : kPκEGN9ܔVͺ)7\}~gޕIJyHɾDE@<11\FT1NTB~.O2H%Û(6PFVNuM [B/ ;@jBW1-\4/AAⅦ !yb@z,~ ?0jيuf”iJ9m!©txΖ;Гyʍ\̄=)j!mk˭+6U{וW.Fy/X5B Ζ6fak& لB .fc.Ϡ!;hT "\1:k괉cƎu'gs v$T"&wHL o- HB@KǀVV HR-1Jx hK^KhJ 3* GdfxĨ%b<>Тֈhg_0tSf 1pah#S" (-&>do.i!ڥZ<1&xd |n_"^bpVtA*YCdg K oWnhZwc,?-ow>pSЇ_9xF\jVRÁSJ:w)D e QM|tpסՠ:sk~gO#ym[o^VV:銪IYUޝvlٶ{mm{ZwUw_w-VU8Z][3j3[3ە6} 5VMֳm 9eaw'a+$O0se`Tsͪ^Lv? G8OU9K NXzdZ\mQNZjeu{i㳒I"i2m?:WSIGRfool(5/2@s !dC`C 1C 1yx~mj 1/sV[]vm~r(w܋CaC#CTX6%D5!z~O8yc/?𷷷7tL'->*3i'k]]-˪wmݶgmN鼷 b_w[[3uɕc[m(4][򻂑ǜWG_ж5`ڶۂʯ /з̞R8*#ibLO:.WG(R{IQ\YR(k~ !e;ĴztZC睙>c)¤qW-Jۓӑ92e?nTu$۶s{byCx0wv;9 '̜TjeU{9үLMbnUQs6m} w:#Hm+5^_bSjmL']b4Ձb!b!>`'wŜ1ov{6"È5|DPJ Qba_Ga |çN9˯~'}'wWZ\:8}?u|)7^[u}=mwVkv߹n+9g5SjNH6PUn8:^s_n;R˂Բ1I)Sf2WV6_U=l+qh~*z9qFE~0U)Siƒ>}hOh_ꤱ zw?;aϲ2.}b0qwȴY}/2.qtuJп|ajޑH5}B 9SlEs V,ᣝ΄sEVSlru[mXo͹)׷虿mowCOvnTˑ桰G9;9:iݶcq­b~nVRʗ>60X5LC=}Oxg_'"}BUʸ[U~O{ π/ZȬ63uҌI3p~i-ФPRg"(^Ql+wn 4xUn>_|1ƪ aU0Z]Q\crO˘>(alYiSֹs=^wRf[aS2!7:8qVBW?XldPn7pιgm2s:mlanf|ҳ'ي_E*w.2Z<!CP:&0rʕƴׄvwi߳}g[:[Gwm"fWwuW6lo,!`PfYg\4,tyLn 򻂊9pZr aE]C5d+Ae]kgWΖ=;[n[Ӹ~gyڦkvu*W:D`<~3=~COW[pߐ֔^9mL[ iղ[AaC!`M˪7]ӤV\2aڤ-C~ʅ][U3?*'>nR|JRff~E^PNJkjpzcs^6rZZo\s<:84nT->۶O;;{r1ssP;o W/l匔IDATڣou,3'M61ÔV\a7x ;#%A:xNd5PoCJYi$]ҤQ/tgl_TyM;[zZk_|͑aOw%M}=m5M|U9K=%y^"q;ڳ|0tx4rH6䔛rÆ(8/w2*,aSk֌S&%KkT͖`UVeug&O@z謩c3'WVzέ!cK7l X[–2fEq=m~ݚbO=_C 1C 1C 1C 1,aHI%?{?"?u䕓_>qHS9;7D e QM|t6.GO8zԁWzCe@-'I?9k]sruMrFg˞-O *N}wtwjvv{FPت1KiKM[kVzvNX bC-eƴ ƸISR&Ϛ |N_&%X NgG/tqp;kD%RTc.Rߖ 3=}h]P„ıs7lvq}!MWoƞՐW;mjgyέ~9]%vWn繍yZ:ӬIq&ML5Z0STe+_m* sSO[4|tir{gӞ:vvT~W0,l;TzYy皦ko^Ry}wmq'k[m^̅,_8, 11ufr~^ѐ-6g:fMJK8%>afb%5rn*g"@}Ǿ>tm XfX]mrF]]-곳mow=uڷ/^+1ٟ8*4q|)Ww2 ޼1PV\ngL4&}Z WVe. T׸aS8TN[{HaɁ!{oȹ9ج\l@-e >>kzm>dͮ3eXtԸG lh[wU!rn#Hu!Tv>&?Rh_|d" 4 -*E5]A{w^>%|?'AT% [~W].9'z"g4_$̯e RdE֮Rp8Qu~/ Wz_{_Iywxx҃>xG))>SD qIrAc ld%I .K"HrAa=Nz \tsQ+"AO>(EjIqR߁ʬ"aUbs/5k 1j `2H>9*ۊ"Ӣ<]3>њ`ɩ\)~3;Bݗ"1 "%RwZ$ZHJ(Helb m7M$4N@iBKqY,㢽 y 6J DdS#.y!5BK<В*4J*yՒ ȫF_E9-1 &wT>޻P^})?{ T I%up@5(ij$94 ZqyxhSR4B-I+~Y@UPb2B\: "ےW<$@Hf^5HU<##GBdf-Z{xP YD԰Ȝګ$}z%ZgIId8 %?IJEʵ y(<@iRC 45>J*HbBRuL4" 7C<%U剌ZFA-F N%U*TBYD##j /sC i(؛oeU+mk]wc݆ΚOY >*bHt0ϰ` ~!w&S.ЩO/=cOп㜮< -W޸nyꝼvuVδ*N=]m:[wtnߵ֥])BZ$n 8BmtlF 39&O7jrʔYz Y|ci-3VUxyEVZk++AKEe;k Zk~#=C?m\qXIy:9Mx(O\vuzsOƍčn0oS~hν̾@Н3c7ֵ| ~2{iʸGMbJʔ|gQu~aPRg>+=:9ݔKіz%@ZJ+9mQSVln\P#ݬhvu6+u+w.VWoYU@$O(C9ܘa\5-9<6ӷ:rcrٔ6<9` ȓ}VrSNEg:u'NN4;ޚ᯶k͖tg1N:&-53}[wCu0aGoG.oko0lB-:u7͑`Sk`j[s\)S.3X Uv؃Qxmi:Uz!Qu^. 8 0OZiBk#c"'Q"H B$&@|rP/$ $^- Ws ft^HwwQC_.S_Z ZBH<+IRGd M[yZZ цS"?{F?ox.>%g-h9Z -9.R$yjV-R2_.Ш4 ,rZWpM"yB&9kM~%Ai ZMB pH*٤$ç ZA+02%sH(,IBSK"f:WyAdf?#.A^(y$沀 .rJ 4O ͓ ZZ< %INM$+^5JВaOB*Fy A;Y+yS/Naz[!>(_ϡYI#/8Zj;w'ڱ_EN?s'z=9M3V2ol.QktjӶSnPwөJRgmbuN8ub0a_q&(&~^y '~g^m5?-1;!qj|jLWhkCI⫲큀BOP98KkCkDzl,~*![`.6Z-T˴cq27ago@Mހ}@M{_ȱS>%7;ia^݀~sycȺ-3J-恠qGUgf#֖Ycˬ4Zs-I|mj!F);r,f)y %Zf ).b -B ]&(b:h !2(B-+$)#OINiCvW ic<⠓Sx]<2 $AHsњ^Jfn# x%RpaH=0yDR FhOӭϷ{wdi{|S=|{{8?Wy$V$]$ )(5PT"HW%4+A2|rP#*$k \Uz!W"%ŜEd"}^P<^<( eYb!^AjЊJ9'̋ U.+G!D ^%IAz5j@#$+} AKOJֵd%mh-P(jj h).Bh_b.M*4Blt*EZKJZ߇^HUҊF C 1;@|΃^Aw~WN,ufFDB_+rJ"##e;>}/>vɣg8}C|+qZ3Tv/ٺ]-!3u٦`Φ]-wkU2k)136Xz~] n8;*@6JKIȞ<},{-Tg כU*Z 쳡PTa,Yʼr{aV\?Iךgn*3΍>|^]έΜ^;;sϜ>{ɓ$Oϙ(֘U.ȯ8뭥fBI%$ÃrouX\k.56 O$;]>ƜxE(ynjkm!DOw֝]ͻW6{C><^1.Bqrϵɡ4f妜)7h ] llօ̹V]a)ҦL=#<̵ړ3F{P4i^uʌa@7_tPя ۃBckб%+/f82]uZGv=]kr&O|WlU mPS7I}z@.bNCB"?!s* i | ?hK;a@k1%#Z`%xj1RO%^Z{Ja ^:eyJ /pHC"ƆT+@PJHfU;vz_G&ahS0F4w`E/HB)C*/9\"!ލ)HNZVDj1BSO}MZHQ\\ȫ4 pd R\ªRPEQКjIZ %u}H>%WyؐT!R#b&ROTmj1BG"?k"ƹuAjFZ AT*6,WKк PHZTHY O & !<4l$F4\hb. 6Z#!> }dK{ߙ@NZddd<~S'TN=9}SG^}kg~wGW.ε{:#nsλ;[vv6^׶$VN^̺2?^)?!uY-N%͚:5evVNQ*, sY_cUJ%J]aUN~HWXl xݾWYڦޠX9a(\|RBm&{㝉cBt6e m垾縕>nh&eeVeIW5L.+w^B%yk AsݥkZ9\ nLM?nc'8eV_1PoWZ}AGSYTP-sy΍PZk)O"ZURȲ';'u+ M&m oY\~] Qf-D--Rj|{{`{Ƚ5YYl\[o+x#f-h~g=XrB>K9l)~g%90!}w6EsI&%'͜9+kǓ] ڒiWy__s]_{}a ǖ}K\A@`)rnۺJ,k,ewv=ə[ȮqYY5,WG43X1,v۾ez~Up*uWΚ45!T/ǀՄA)Ph4B-Ba^h i@(M%I1gjy;Y%z_wGjT8tVV Z ev/cjN ###AAQGΜ9ç9~k?zpdM w][cOOz'Q;mۧ[ww==mÍiᩓS',MVvnn8?dϛ_4 abFb\Bjz6>;W|UJ]q2<;/0<%΢*ń]l.VΗw %ʝ:N€a>)=*Oqu&uf*gmJn#a}#sjyҘ1ͳ/6;kWZapNGUsamj O<-qͥ5jPRiۃAw/[RPZk-Y6jۯOIHNR7Qm3nm]ղcM}]{F8ɠ߹m={׵ZPqceަ2BB尳Q ry[03A΃g{6܆Gn9+dȒ[)7mӜ&w.7f]>Ð>uf”)I3fNe{֚bkؐX6qm Lޠs `?;7%֥yn.qSig7sY5!s+ebFn%>x_xX\QRV+~;գV!-a/|#۷??U8f4j9_.+!{ c@̅PdPF*ѣGo;|衇/I~rJ MJLH!Dy!9?e~λD $" d_Z$E$9( H!>=HsڼyO< yjQJ Ϗ!ɏڠ(4|*RXCi)FnÙTyW?o?'39|M(uPrT׿`Z<5Me R1ÿ>w~硓r}8?uTpi:bK{qFM%\|J F-EȲZ1D5̩CO=zđ߾ҫOnYݔ9-0mnƠ}[oWή]pә0wޫu+~]Zvkٻ㶥jfO &M &o U8q*.ڐk߱0)yRY)))s텦KiQ;W +r s¹loy;_jWlJ[qw.QnvԚkMJytdt7k^Tc+5Aô)I k&Mtnݽ~C]kuiqcκ/duٖxMx=~6WnG)lMy^cEVz΄1S'ƏɹV+*)7+jCYWeUŽ@'TTPW\PnVz-A:k+)B̊3!5JW ծۮ޻]kzZF;7&20zٱgumZvo}wXl[Z`\M]ɍ8ݹ~g"qd r; % ̘͜1kʤiIsgϞE=e 9fIYZfZ-h(lBmAME=*=%kky%̝ye^}eg^0O'l+a57IQ.PpP:B/k_C&S)8 wAh 1R "HsG?M7OS3 I`|͈Nk1w ,믿1%@b˒%KWZze˖577͏5Sda"HMIϜ98={VOG-t~PVU E/\Ck+U0 : نRA#LV I:Y"(Q󓃶Dɧg֭%!YѣG h/_׿+Geؐz~2ϟD[v… |A3,v,|Vdܲe< D*IΒ$J>:H1w>pU }MG"'|Xùx͡/Qa0'!Q-w0fF_b8xv'~楓G~wܺ՘H~ KiPR/U~jOSXZO0kŪT=;tJ;Ϣj^k*sj%u&.-mrv_R\CrRM>붰k{k[sovl ؖ[fզNƏŏLxqV {_Զ$ϴc#:u.][Rm];I.c2\6u؍E'O4yIgԩVSI4MeJ07b}=vUWxk%uV_WUl:n)˚a9}#eT>}M n_Ѳ}ڦ]]8@r %쒳]wt=ٹ斲~niaqQ9ڬų_%hsJ"{Lݡd9f )g *MJª/1e;ϝ:sSfLvN(Tm;nٷe{оa 8zm!׶_9h?' llrr.-48r-N}7;tMN]-ٚՠsuZK;eʣ߾YBh[nے7X|9  ̀2 ?W$U#lQIAK$ԔAB*}5-F#뮪*wO"Bh4[ow!1b_Hk, IyVTTgϞȜG)7l/c奧p 8vΊ+3Ea '333;;[Ow0KJJƍwJp 63|,)/~ C!+,,{7/RܹaSO2K=MhiHb$Trm$|7,Ʋv]Xu\]SSiӦ!g$'șihۙwq]rm8"( @k₨ZUD6Xdee566brwww/Z5A'^БOƒVO$#HyW+ǖ?o}Ń{=Xhض\оGW=\7~~ソR=PΪ|qF5p 沉b[{bE2FRRRSS$ix=p)DkM)@KVرc=)*HP4U͚z}7|OzG .\~=lܸ{|eޘ,_$U*HBuVjy*֞,$E -cc8)~ϬGΌ`>juҖdWgZ)x$Ob$B)š_'Baؽ6,G!)~ #_/"I@ԼD $@{$vP_xᅯ~yz؀F5HSϋoĉ,WRƀ2(*͛~i2HLʒ&I]/{N񍣒Hă---rToh{9h-?iSHR{l`x 5]YvV$f8ԩS/so4ssʕJF+ ˂jC᳼)If4d2D@ryE&ǓV8>'OԋV!^Bf Eh!'zowC #)̩7kVn\?мn{Æ7ܴ|Y;73^>qk?sTw!0rFyTG;>sJa;5)F/;{{`Ҩ6-%.eY͎ {{WήhͻzZv]nӎ(j7Tp,0,,4xt5H9_]]1,η(r*Mܰa|2 YA}Vr9̘̞e;-+cf'NOjͺ.`Z(wh*ב"xxتw Îmcyݭkq:uZd!4z[N%ƚN跿|D337b_b@c`+~-Y ֦ٱ9٠$D"r G׿>o<9xZX;Û/~Ql(6sobQ}Б筄ȑ*xJKKÂ*bIMM~F6,8~@l=l6=1pM7aTQ!+k4ʼn*...= o2|eķm۶|r4\,ATm<@UUի:> T% {{)++{G~ӟ655ɟp`&߾}P+Eg{1/1橐x2h§4U}^"*'(,,&0.&?Ń'} DJpHU~SP*zm[y'?;eZz߃z͵{~*ӟ-[qFV<8Zu" ~ߍ_> jR K;vlh(f>L1vALAz# ΛS fӧOK$ QUXvZVf-^xiYb,Y14K'p"Ǒ1jnnpf֭LfdVJEX~^\pĉo|cpcSkKIL'9&`, ,`)+@NʆB!Hy|>hp D # ^bk0|H !!2P`!7r8pȈD,0okce).3h^(٢jOկ~^&S=da ʕ+zZ ,%%%=?/^dɒ-[@H*fYQQ|E2 >7BKC*"ɩ%%XX"9MW"fGG %}hmJRkd;/oapWfDy&wd:.|MXG"G_e= 5Hm!o+UsӺ~g8}>~cKoQՑ_q-I._nVH$UkS Qj_w&<c#gO{̱߾? R'&IW\mŷkurReww˞.9ܼkzBw+wvl~ʆ!GpڄPiSz/T , ''XrgKeUj}q0+ Ju%̼`f^ <'Y JEŖb*{|HsNRE}y'of=6n܈A"c6?\OJUǎۻw/;4{n_H}G֭[g6j5kllKR?M];_;F6oc%{hZxtM/tCCO~[o&a.>")?AiK0`mذz?SO=!ǦgIEDH@ĀGV[nKD ?w^I~Ν;iRSS\3}Ea"Ԅm{!ŋ_sJ~ʒQ 2ٵkk*b"i /Lj'U&bI'OdDXeUa"dMI;JBښO$@Q?ַXm4HOhxqxwZF_2 F2EDƬ(=z d A#s_|l|P*bF<_BSuc=/0ݴC0@5c:::PfPTe>"ʚIqa2 F^E2%>qD}}= IQl-[&GlH6j…NhB#!R>p.IE&Y"6VJG^,_7KpN}(++cD0<Yt̚:'fA0CD[n?s@a[Q`& ar 0Z|AdHC+JQ+skAh/\FYDYj|f N a"ydR jj1e?CaӸpBb! .A}|K^塗^89u 1gA/x%*5K Ϩ¿,߼/a~chF|(hMձczY5M{6U{v)g][wun'@.-:>82i*{򼾠#m 8Vgצ$fsB uR_d+\OYvA(+_q=9ygyCY`'Eǟ J ^}TR`/+JeyZgqDjTZoU6_X@|^Pc-[iwK%:ˤqɁ 3Nr2tV:kC>r˜I1I/1Tb:Km\k\rҹݩp{N|NIY?~+'&IHO78 庢ܢr]AX_UseY>P^lCV 8CE<#c)Wӥvպo]VsGWeOOn(]M;Νmm=m4ݸ _|5ey%ƅC;/Ng~칕̰1t)~gCfȒUnɑK9 sΞ2!iUF%_Z&^`^KoU~(2Z]?"l{cε^W7ϡk;wh˪^ߙ'{quO;hF A3yyybivl1/˫V +V1,1qd0͛nmm5[F 1왇zH l' ba]s5ИpS?ƍ=.aNNN{{;;~,> [a*a]UU'3ŞaGNqla^&؎$VE0 jkk6FCCzٸ/]腸1O͔b룆. Z3k-((VBl,ymllDl)ٶlR]]Cd5uX,p"1oTnn.k MV.F!abc0Y{eD```SHFhĪyG@~~>RE 5]c 3bOB2Fa/_aBU Q V<zmF6w~amOZZZ utmS< ] WIWrC1Z拴(-:l,YB4dvezw63V(<e.Pj@4pLtHXޤ,N.tyV,%%AGE]{1& K+ՍFM;_eǸT-(Zp1y)p,2 7ϧ] }fgzD5/893@2CU$ڎpTo}EڌkxE*gp ^~eJńnO<̂+?gmQd։ B? Dg)} `'8c8#p~w,6x/F],hN5:4Jߑ$4y7H |_A?]KM] ͡C^ghPQ,`2CFU;hS3 RYLP_-"ܞwq!'r௏񃼪O>{v{ #a~BW֓O>tzfSǕΞ=uU1ԑzZi#9p6͚^5u\hj&.\\gU{yv ~]=m{~7_[nHK*0zi֍a2kn({mUލ%)mrtvWuE0A9Yg# dy <9Mj0C|׌œ|0/ meFcq\Pmͫtx+yVwU"+ a5tyYyS3IS'W'_f.k&Ngɮέgvp¸P℆KʥktS7ߩus۝ha8i_ѫu^Ń33}⤱㮜4uL´Yf(b JW8 %J;*WcTBƨ]k,US3f$$='`uy-kCO*t&lռMR2j}YMoS֐?`R|垜%^rnBY ~g vV~Wed+7;g]q1~);`3ƔicG%\qE/O™=1`[aU_lW.6_lqnue9rZm9v}p~gw;ع;v vW^aʶ5!!-X su4b/hv{ÞLݻlb.\0??_[춱0H0$ʹSNaabݧ66 sK^e+[o~X2T.f x4G Fǩ=F8s iL cxs}g-+V1UaD 4DXSG"LX677cIC!{1l!YfQ` ̧, 3kʃH!^qM~H [s]N1prj3Eb ]@Wk 7~II1$R3}v"Ư}k[oMV8VXn :9kԉ2Pرch,icDLPCO<3D?l<9 0>hrسg\Iȶe EeDO"5ka;DnL*|AӉI/Qxx{DrZoD2\`,]T|B4v_LG2sY i矇IwmvE6f8XE=CeDȀ<"'+AU flk 4 2K: ,+jh ZDq|#$h4 5#|0*d~y"e2$t,wLU`AEI@ȁWgԆ6m$F:r3d$ %ah yVt顇RS> >lZ Q҉7TćS;k!ֆ2菚>8dƇ[_H|;|kĥW)g-ʳH!?OvL hhZP%D5`\nHiNZP-'ә"oER-Ipe0dw(?_JU|H:(@=| &tdaYpnhҗgHLhë0Ġ8բQ, BCLO*,Km*-2gę,L45=5( 4W4z 3Y_H`6fo 5'jo%2DE({0Xx1Z*:r^MNhU ʶM^w&^"$Cj'$0*kJ+hRhmǂD)GھޱR?W ACkCo¡h5p8Rd jD(7:RF2far*&i7$aLC 1 ygġ#gqð?k!{'tW:ӃExl`䫄C }J!Q-΄UGΞ"PɑWϜ<{n '+tEE薹ɛgbgˇ~S=K`m{vXٴ2`oԧWώJxMnzoqcwꏰmtoYIO>Mg*ϯ]_ienau[\a _3=Lo fxK|' He) g{YR]A=XWTx\!Wh).5 KEkiPXd.)ťzo[.J=#>!/qJ8al󴉝A6rs?* ]_ѵJBq-s7T ض=ek ,W+jvU׳rѳqB>".@`amXyb}yULNZ^_=C|W03f@DV? cǎliM c0Zfhd@ܹ9(U`cՠ~Bp҆`^ZwI#hðbje^:z(,a ~;ߑx(** Raal֭3gJHNCaSH r`&VL+غrM*:SPP IOQZS ˖6.F#mٲtt>#}☬Q?2zZͼIVh`x m6eFEQQ:#ģ0<|0Di%3`nF| Wt)/~Û1bMPdihٻ⻞~?i z,wur`D~[bʳ>lڴi``",\#ZG, F2K0YŰR4K HQ7P'ʩ9Q{Dʸ0quHYzH>,Gk@ڲ3)L wtZ$i׿u_U` Z{/vP=R\).zV__d(Q3㈢J*0;:b'~+_1 ,Ȑlэ7F ){dϋHOVaC'H=&*7!C{YaM7{S&VƏp}_m}~{5vKٍqcB'vet|C}Uut[ĹÕ;OY?c#` sSwVC>+'1.+´c3R:9kJ[?hYl[U 2FsaH˗>ld4(` as: j@ Y#P2(j#ٴ>,SDdw4\XHYsPo4J6E *OFQ~}}}׀|58rHs|YR:n/T(%?:‰x|vR dGP&f_F&"dڒT]C 1 uESj/2L}a[_PEmaGG)~gW.]`ܘ@i\}A,ϴcڭ̙̝PhsZGn%+d sk͹5GV9Ӗ?a╓τI38r Cֺ|g;mȠ+ /}j-jXVa.vu)5c]U5 r{Zk}{6v?-SmcWO뮵M.nr-aƐseiQrBnpm19g'wrޒ/t1F]:iGL[6nz]}!Ҫ!AQы=o 9 ܆vgn=ͮgwsZ٭ yjKv-Ǔؽ#5 F ԩS1c;c^bJSR  +Bʽѿe 1|CcOb-HG?X睵#ÀMmU:ն@e",aj-IĄvK_b&sB;Gy04ΩsT؇5!01~ayǏl~ꩧjjjD\k֬1$T!bÌaO h]%KB^oQQָxCb7߼j*Q'ET:4zS1h],C@zW\\@~+nGJX R3wڅҎw F12Xw)20뮻0M衦n#r u0JeɉI>? _20PTj`1lo$"0}PӧaiN;ŋᐲG&daa1BHLiEe*@w~`wM4-ԹaZZRneK3kL <僷&LY.mܸQॗ^b菩`I= $'9id믿I?l6m`AFԉϺ!8Ah&4cǸc(!10h5د 敉@wyB'vϞ=( 58) 9 NX337\-ˈ$zJm@]6<8O~}+_<,O~M@|WGtٳW;n XO)<$mٲe0aHԨ% իWD[!d":I06DF -tGyh _ 6"/LNhbXa/`OH~Q|EwJs"yC6gE#WN23sW'PEEPrS`ZA,3uW@R(QKbFF hmb!asT ~ÈpRXCph1ʑ:¡395BP\%*a7Q,o=<$ï<O࡟G"{S'Ѵ#G^?uwް58<~\Eq+7iӼEɸݭ;;vmٴUjuOO=] rrRW]2p6P~sZ|!V}vn+PdiJS:5Μ9RWy}~z[hl~VIMN~IxǟQΘV]@V^ ;_L_  ?-fx|ǟρLVPeYye޲켲< oj9>%%;~Ri¤ L36 t}Agþ}]mnJ(~?nLUހWZu]9\9.}0TYr+!Sߘ0 Y!SVȘ73u'ĩst9 SX[TSz9w&&?[2W*Mŕֲ4kɩYϔSIm挾}땁&fdڔd[$lI|ZmoWˎŕ75+;~ByyE^b!~s|"o<}]W$`I700kh`U!׻n:rS: M?0y(SK (.BgrF.-?(]<X%***G>3¼ 0Y+4{w? \_q=YXfۭ߸aKgN7MK[~]O[(w?,>(TJ'KwժU 2gÓxLq93a"$BFTHDS/" &WUP"$  K|DM[h%d.F@'?*IJ|&ќ>d3,׿5c FHd:w^P|۶m$ SEM!ITw#0)~g(իȢ0...FsHE2;d)f!" =/TU^UAU􈏑aE,6[!7. _|ԏd1GXa Qer0[U-4ͮF|AiȢjP ,SO6cc` d3T0HYBJl0E`Z/y541s"R#"9 /ꗂ#pUH0_IVKv[ 62(- % dffޢ d@ vJ]MH/H EVn)K7x|L=vDw qgb_,9g_24pSM#!{j͌K̳.ː>~ԉ'N=%=%Ǫ/,f%tVa#\x]A煌:SiZ dNJ?r2ǎw^7t;Zvt7n!DVByڪT2cMe׼c\]]^q~ŔR~PZ]ȐTY!4fB aCvH3ܘ[n!& ffō:ztʕWeȜȰ̸9`qHGA[* }̱߱Yh,2][`n\zաA5G١wd3Ym֜V mWzc&w'+cq٭m{.H\xXXe&smѢEl߷n݊m3Hlv1%Ϛ5kĊfsb9oY;+޻ロ؅k2K_"-^3F=D . 1g;\"^! ~9<X7 ~kbҥK].$1l1D]RR+}r|{IpCD E09ӰF- r8s^P ̙31ԩSSRRf̘z0%'`xA3(rVl*)U/dD\s]B(FIgaQ 'i*gX/F#<. M |bȃL:Ys`U080sY&e:0hB0=G?m& r&Y,Җ).H 32 "@*aj |`! +⩜VXy$Y2ң l-XGhP JK'E&s}`Y`a"(\p F\+yq%b!h/ K`iSYEz(P3dʏ*D #ʏz< #b#TKt` 6F 2 (M&,<⋬3rpAOӢP j!ߨӢKiQt 149 7xC^YhEDa-((׭Aߏ `X`^G HDli]ئ! 5bP6n>|83@$fNUzAO+VrttInC)" @Ȭb >}l$! 1C4Ե_W[uCm1.Qs]Q~d* JLJ|QՋ;_jik ] F5YчO~Wȫ9ǟITS57+*il Uiczu;WlӶcֽݭzZTp[W/ XZ3ۭ3go #y v)Ngq)g[;:=9)*8R,H]7-mVXmeysݾ.;r 9~p~0cwG;G7zNgo TyY9T&M?3ǝ8= W90[n V;4Nֵe.wnC=Ҭ  YJ,eLSrҴ &N7!nbf<0L+wV~uP=NG U)LN=sY&u귷n=,aWWN,CзszmYm_SV뾐cK]l^o\5,x*/晻 /ͩ9;#ì.3Ϯ0ߙȜŒsKLi2N[om ۷TFPU^e(+*~?d]yE~In'wBw}ǨG;%oږlmg7سZ6pZwf{wB!vld 0k!YNcgf[O=I0)|^O>I6Ja`a`aW uwl00> FA"dibxen@b?tfPQoz]w}K_zQ f9ղe*Fvr6/w]l@1aCjx ą֟"BqP ;G "!3׏c S5ݧ8+-"|q" R;0){nV$>C'A'OD> {?яgxC0fH<@ U~KA?3t@HG$j!)Hzg"q-JS? 4E54JFB@*D0k׮|+tDjI6!М{wz"HaC '߉!0pHTZ8 ]waFiVm/lK۝4{7x݇x/=8%UośJ;BT-)KsLo| <@T!cbFIG.KqqTO;M8TF2 !`HD0R+yAJjIm \ @1e˖ ,2a>tPxٳ[uɬ- ne4aaL ?FM /]]]Fjkw`u' [&0D&roN7!߈tsBΉ9'I^I-I$K*k4 G~V}8G:,:u3c&w j`.FcƇF7vn[ ,M<xb;,?གྷۊGKj<'ug(ृ  `.v7E aL?я2S&'> xm<`g(~?M\. 2|A_<5pOp#DJph0Ox0ixT.3MC_ |9Pq?c;K??(l+\~(a a~vgLt s1"׾51#fp#U/o=\^d ( ot w:\}a7?`I7n0~O`PϢJuc/664ہ"K,puGrû<B ' OJЯaXC}X%Ú ?zE12|p;wzĽ^Xfx\a(8 Ib'O# ;#l1, `J%vfX^x`PW @s n^pgu 댇Ł5Sw~U4 i?WA@aGa0sx Y`E8޸`3ntjE|8l_)aSFY[xgxn=t^Q#2Ӎ11sƨ yWbuqr'@Y kmROPf֨tbM=iVLӜ,b$ͪxRz֪6fL9QdY^\R G?P#sLin'8S.fCZ9-Fz`,\= v94@BfFg,ygL=cޙY:k"?1%;bTn؈&<ɜ)&4﬚2َhsYs\3#XTcŲ:AAZoVJ5J#21*ZgDf ,򳈸Kg/Dp|L| yYBل%ـ5ѣhh"Ƨs@ J$D")&<{񜇛8f[]]u#3M1әUo [GٟWKg˴FU5_B}N0N#35޹k J\*y=w:w3opMBYķJX`lRA!kzS/&xqJpJ5bVΔ(st3ʠbR͛ fI9o[TF\Q秸>3tW ьI磼3C:c٧D^/W*A(/%/||Q][>|oGj>׫7 < u̬ϡw6thz0#Wk]Xv= a3 Ü a?*===-_@.`X] ^-F8:UoJ܊k f(qt528 ϛ@_ 5Vl+}~B_wAolliWVV_# l@Æݡ? 6&Ƞ6U\{i:q}7}G`:r>s߽p44'AP ҢԔS%1scFŜ;wFOF_z_w {+]†BOQEfQ93o4+Lqm8*gY|(]Cm~0>2+s)Pam*gr }PUB.ͥhI e|1?$[sP>gyg5]nHy!-T34k !(pkwTsqָ؈sM4X\Q^ZӼ H UmrR$B37KE"*#%bdLg/&JIHv"[y%OX棼3Z Љ:QgEpc.ڢ.#/zPN,w;ӻD5zC&NjuLŨjmA2 v6F=:NN#{(Jp(VD(B 7{X0'!`>f# tf@ U:B/lgu%/&cnpQ` 4Ay,p_Fi_g>]0| [XwT +Uex*(ЊPUPzքb;3vy:071X?&B08>Z( 333y#,GfZhOx㫀XP3 B++*pSZ8B{6#8};ۇUsQ1Vlxo?E/?%/X2Ⱦ?u~/~7~GG?m kQ7_^OWx>Pœa*8CW.}。{1nB;>S<6KXG܊G; 833㥳| Ch'2%6bO&qֱX@+z;Fa* qZhq@1^hpp8/cJ6#c:OoZQF!Cu, A j|Q3t4&1>s>5T$e \AbڢxsSS5ĉbU=P(k5Hk4*RPE|.Xf*%hRC& ?]Mπ|]|<1!o6LiZp-E:VwPphU`7(q/\ʰ\2{a(Mg6ŏ~?g'>GND.o:?1|aO>G`NogkA/up 1 q֘&(;#`h1Bï__?̀XPQ[@ݡ ,P b<b- _4Fc;Tq_F0K}AS Xpއn &?P/Mx`at\_+tǂiF+<:vu쀍L< CUu|G3 nOc1-``:?h33Pg\;TAaAb}U V. UܝnGMXa>xz`pGƂhOFlU@O6ǁ/r3V2ݰSd'䓝2p~Cӊ`F;x\S% vvSqЃ07/ϸ :q+[7 he<܄&ǂ07o;ϬU{+MIJ;cyOx-肆}t߽w3_O~o|ggtt-1llg lx{}PnѲþ|PeU]&';Y@[5E`깘-^N(3⒤g"[SFլ%F,s3eJ5E1F.OleL˧-*;WQD)ֈ=jqkqPb :SNIlrbLdDȸ faM[B-D;2՛A҂,d|ȘӁ^CCVW]\CW 7zvT\MVhlY`"MI[(mɕ6M:aNԤ7Dψb~gFRD]V-xg+&#I#b.&z)ΌxUOo"toƤ2*@`YfB!ٙ/JN@C!̔(HO 3GyJZ-UR񫔂JNyg|O_g$3;41F/08nŃ`JLG.@ v[pGlwaMu1{wF(*.S%(.tPPG (ЊPb`Oi] F\2>h%6Ҿo [ A_]#=YP#XpvFL5\@h/ac#֡M`Ul*0:((`:;0:-x|\V_;O|(c80Y<2G%T`U梠3/)`Z3@%G:2VbK(hGgo?.?O~S_0O.779_ ZKI/aqT`C}]l}yY.lcxb{u|`7vPpIwEA <+%GNvPb[:wap+V6<S-t',Xo;_yZwy6>\M0A(ad$坱ky'7'>W]K`7iUzG}MseG+"}$%siw*kޛ^ vc9ws/x7B?SeYZnI9MT4-kVQ"LM*Y]J1*B&ȓWl*;_5liQ_em廳5,>H82PFi")aU,OxCƙ:#*J )`NeutjY>N1cE#+Xr)R:'1)'e}; L] DNB.ѵf"(jiYgcOx>TTNTCMB"DX?".(PEx)*QϏ^m~n׿ynfk!szuF[T([5o"-Dr&ii҉H3ܠDkb!\$93,XcpJb!G|K'(Co+r;C8oVϡDz O,< 䔉)Vu˚DV%׫i٧xIexJ:$ΘqDXjHQZX&*ռ*JɯT  )d{>{2 S'[+0,(pP(zOcF] +hUP: lcbg-L_tX&\`7<[f0µ` 62M fp0Fq `c#|p<3>q1n` С&\wGS`<>TK 쀛V AG=i {A~CF#>v`ԁ^U }gnt82aUPOC >0~-xd02%:w`7FUAjaJl|qڏ7KX5cBoǿ_? 77O~_~~ ' ahbf8;p+j*6b x1:Z%p7 ĭ4" ƍѱ,P G}:(|h[{`:<l4a0C1n"mF(q2P `#.qƎFC`ҽ^ Pp)'Bv a;L~lGsz2yl net\C[1C:,n.O/(SF0s03(xp0 ()As,3p5vf@8=f`FtUA@OviE=B<<v b |@F| V<ֱ?vu n` 2tXaF,xL:>K#vMuY`q5?D?K00yM=KAw@>=ȃ;?~ǻ`}_~ӿ^?ZPVg)\ʧZf|-W˥ΦU{Qeq\Li̋Ӧs xɺ9\W~qCɭ zeϿ6W>2ӧLz- K*fLzXY+9eTLmԌ QWJu,*&$6rҬh$3EvetiS&J!+jKji9WV } ͟ tܮY4p32"G:{62\Bz*bIh0z`!rmtȳHBŸ,k% $\rZUE?aD}RvJoFm @ZǷ1XJ_plniuJMYBy;nFDs-Z9w0FW r~olAGSAXPA쳔o96Pȕ$e=K'_̌x(3%W6hƌS9bޤ;Bfy(5,I3W o '>~E7I,D@CtuRD ECU*WT)Owx J2_.GPVÚ05bun=XhG8~ԟ k5>OgLӱ>d! #qxZo {CG;r)ԁQq,LXOldBFm l9jca`>o/p+.@w}Zbd+9dpa0Sa\% a/ k_oG gt#3(C0G093awp {>oq1 0voͣ DrǮzjK ^>ޢKXӱ}b#FXXގ;Z/WZcU>G܎ű{j&4*v %1 P(nn؀jĠi}kK[#ԍѱ l y8og(t#f,mucA街<(~ g} sep7Y.Ɨ,~ͳ&K¦H%޵;!w`l8&;*X\o>% U9X}bzTuVR(^N Z;cL9zʨ@)tieJ.Pm'bIi1ΎQ>BHc,C\]y&irOgMQ RM pB;|Itf0/IKPǜH& F:Kyճ&Yo 9ָsKgەfQّ'n [zJTM jE7 9 fjIZ9O_L1❑*[D:? Vw[+TМLt>sјQ$쭼W1ʍz_pǷ{z3(F43V /:GѬ۷PfgyA$9L9,hW% -BnSƙ!i&Vkq9"^~)b#xH1mɣ@{tE1iDYgljҤ1* y"Bf&OՔ޹$j(aP 8U*❕wf ,X` ,~M8wFy6F̃sޡ5ؒob90Z9YȞ+['K¦H%޵;o(o TBy6}W6v_q$0.jQBdbΪM2yFAQ'h)Lcq2"%`KoUt//uesvRg|X>V(1SsV JaQN[n6Y+ʅ2jQtHZtR *>JBW=,3q"H0 ]=E`޹גD-)T!޹ZͯR^%A&E~擿>X` ,X` ;~}y5fc%r`zrf-pz鷊wf;-G#d𙿵_ʝgx{yx{=O˟~q>v.7FxDQE̝*֪gˊuվl].[m]u{Bf9a;kN8u%W+WK;숔'Q 4Xv&*Ҁ:+HfWkzcơ2l tri!u˄<Ϙ`Fq1$Q,[ܣw :4#(U>DhR>-uU9M1JL'wрfH;3jL6fe狣#+ F FմQ1MGeƤ5g,~͊5Ŝ2E'oS/K -@HI%)+&11O4̤sϟ8u>x2PA g;\ ޙȵf2 ]<ʍ9_raPǽ^m\ 4 !A2찡Pp ^t{Ԓ|;jRūTIRI|eb^g ,X` ,X_??lv cά [O1>˽[Ln>?w{=7om~ah:hq\hJqu$+I$ qgۚmuGۚ}պp)g,'TgŎ¥zF`e^mC5>ί2ꬶb\u>YFN&Q9Tb9+ :JwPf/-9#IJI3d4!mEe#X#T e9AsRSu]i&i@6 M~PQfŜI`"٨pƬ4\ǟc ,X` ,X_O_[zK;GCآ%lY?w<޿ww[ v,[]5l:YMz7hj[/o:[Wmˮ%G뢫c 欟) 1Q/ϸR.tS&vzF_It(50}fk׺|[RsA|,Z:~kpptZ3} g~>\RBs(#*J+S qKc#*3z )zΨZ0NJzBΗPy"v%.֕v)rEMZZ-H*af1;f/xg/|B܋iB%G[5hiYoFst HBxg ]P(22K_ʎZYo7h')z| e(Pq]*-w_|jx1+-iQٓ+iֈF4qNyFQ JNRr1D;\"XEQÚa},$ˡ!GU%JeEfstL(Ϧ o<5l8,eQ91[KGǝm$K-y1yS#q/ĥ%]qΜC3WgZDo"@ !;s2WeJ8cM8Q5Tt=n~?1XE6ug㕡./&_#<\zlB;m_ІENȁ|yVҨ5i`@(5DtiFeGxgL=9s'NKN6: )bު6*LY 5kVNc&uwQ'p+5J JTH~@ŧ:8;Z\I޹AnI ,]KJ#<-{;>xw'?wܬZ,֖ ro"EdOgȜ]Ug|ӱn_t8Z-Kegےm~ٺֶ뎎&-/>wwwHsI4N(׷{׺} Vm=y^eO'6|hҦ1ɯXP~Pi:OdQl;ƋgI\)+P;GI i$+4vt f'>uPCAU鐺tD]:L &**ejsڈ(f\)Πdq֜r(k4l|zt9©M1|FΙUsYAx},$X%ty҅IP@j55QC(C!H9& D34 "X$\NjfȓOF\|BBt8h-ZGkjMJ}c HU M-&rm/x KibZrڢ2+G" ^(iYU8c&Q@-$EbtA>i @h Rʄ '_M<~}` ,X` ,W}1b]E'|Sˁj;6Iزr{wwփzt~o{ǿ݁wn;?;i<Ώw 8{pG[m{}?\Z5JZeeq f:CD%eJ/_W#+ns ̕7_u"yٶh]վl_)mA5wۺS-0EXcNƜ)O.7zQ `GrTѭL^UFP_ovy\ysF52Y39oze'QɲDI9Q܆t iCj U1sQw:P2A׬. 7ƨ!UY(ȯy $ .Ndy9"ȡLiblܥ ڨִEDtJΘ3VtsxgġI񦨓%"hY[ k kI~-IkdՔ!Xg3;EbxgH%KNâ򲤉Ig^J8B/>hE=l 6ȬŧQ5dR þk5 )b9$Fފw*шPAՉkuzxxjSejSY9Q;,X` ,X`7xgGeh7H8JpzrF[$lYcECqol?^@~{~{h݇[{&yokw{`{흝;{o|_>wy|Al_5(KU$\'*j}Efټvo:ږ< ˌg, %_jEeIż\{w֗uaZmw\8s`}W=+]n\m.k* *ݣHm*;]i|&(φzѪqbى$%qܦuk]ä}B5F);;c-xg$(lEF~uYKem$|3*Ods/qgcbc"WGuR9sVռ %f-t>w!ߛc=c0ǞdFEE6"Qd2Y1y&1$E"!f OʎxN9H9)[W/\c0g늲y9g,M["֔xS41]M _A'q!>W:e 8*Z 2ݥ𒙗MiJN˧r|ڦ1+4,nЁ{ Uȣ:<(D-tI;R܋)_"!)k=l"2+fQzqL|¤: Pb?)B#+OygZ@3; I?FѠ#괒:"IH5<.˶R5QRϟ~>X` ,X` X?-{+%yp{~~bSޕOܺޣ;nlo?޿ 3ll?߽R9{}wo__}W?ήRTIy̑!sg*| YJ?4Ma8;/$(9Gk"M٤5*hK9[z 'әERA#QH/GƜvE%Zf{IXQ<<]p;(/*H2^a."|i#}R,M=jRv力4R F'Ҡ%~BU!I$)'>zŌ/gz(3 ɗL vުiGMQU A2wD3#t3 vA5: N+STA4psI4Uf\NBdBTtbqyb ,X` ,XUj%;,meyeF>ؿw[w?u|xZmG˷n}s{޽ǿYٽ{`{{௾?}o7>ɍOUny =EBX{)hR^`oi]Aܭu $n>w޺d,ג6Cb%eI %^|>TpOw3o十ræp)TOlXmvev>FLj)UaT%fŧ"R AUk(Y9FGCZ+ȊQt`JMѕʧe~ei/_[L&^bSl't9WlzBx0ƙ9+9/&YbNOU$_ y&r@lhUTBg,Y- n)rsYKqN]s㝑|$ hrdV}`ҙ7̛mJvդY5X$o׋L4}A*u,&QKy'_8rvISڄ~H9R,AٳmUOZbeVXyZHgDC$hkVR*RTCj4Qwxb=EkzshMZ~ik(S2R.f$& Srt/\ >X` ,X` ;^0ZZw퓰eyo%88߹?Bk唻m~mbw߻x;{}xwݯm~?]=4zM-vN^U OrFFeʮUwNJcۉՆ  :iҙ |ug皫kױho]u jJK ӅI1 8>?܃RmduyickdCR_.S_k(]udLNRդ>1)1.Rdm'vCz(M.h#Z9P;eC(ɲ>B+FC~֟$ŦbJb^f]2歪9zB`.La%1#bAw_ğ*U1Q~rV5ko\,ot,{W]mM_Ǻ}قbZ޲HȂ2块kU_mVȿ[|eKY?/nw?9Dts{c ]kV~Uw|&oIwx4%'r ˈB*H%Q̘_H\IN܈WQJ1;7jMZQF\C,]biхp3ƌ4\$Giz̬+EՔO~ ) P|_~IaI )%% w6hDh'\K(T(]&qr2/Iy4~EQ*D$ ,X` ,X`;ey[6?ftw-2OQΥ* Z{ooq?g_?x_p{7n};{<`oU9Z}ѼXu:Z;Z}EO۲&]8btSZ}3- K۲uۺho[4L %|IIm«-et}Nb3i.Zf?j{Uu_i,\i*[muLpPAITfU1g%G4t")3)Qε ~cN<s~G38hG(}&KRMyUޫcń6,9r~K_HjWeO,䜙5f%J8cAԹ[qDZ;I^^ԨjO-pIy׊l"Q; Psg\{zsmbwSmsWY=~]{k=ܲNaq %KiE/T)λX7OO(Xw{6{ %VETgj[]MeނI+ܸE@oٔE=bRuIZFJԠ4j%MZIN;r^aZISsgđsӢ<Ҭ -;FYSfհQљ'~Mj_ET$EH6$hTuLI(QV@;Swnԉu`R$G~)^O]ز֟Jџ}>X` ,X` X?-˻;{; [{[{wwQBg/|jI&Jt+CM9ElқrrΆkӿo?ݽGn{$lΡLoۻ>xlܻ_|cpö@I^PpqeΔ7^s,W\ˮP2XjN9Ljm[_wl|Z5755%/7ϪXl._yj˵[;rζi>UOU+4^owfʨzڤ1*-9+9mV,i9nUٙD|Fb*2%/Q;CTŰ1sj4lG0$z~ш.R9Ɣ[bFjIs'xbY;Ԙbh}O[cϕ$\p[)~\ע Q!YEg,"~W (FHOL^ ]pO4~mlE9=>˯\߷JY;ҥt#kVc u( !2_29QJeouqqXLX/Xvd:}JO+PC%z\pt *Z.fKʮ gJI|Τb% ﬘7)flԄU=fV,E\ZR%݅b,ǘAMC:9\J }`OڤbCB%=!M:hL3Έ%?F/3t5-ᢛԤ7MA#H\*aJ3V,xœjo3Yk+|bȩ_l.[kw5{K)&X=mQ)ZtIœuzNބ97@AJ-5z D+Rr+ڄ(3 s'Xs.Ukzq[H5aXH:@[=o.I$OR%$5?4KATL MCHA :BfQbP 64Z ԒFQCԐe".,OI*2-ίJ:aϾUǂ ,X` ,Xx,5acxg&ޙ[%lY޵l=޿VJp{w>5EΞl)7 [3 7EM)S{m׵W?ߺ> ax绠<7F4~yӻk[o~ϫ._UڲT`̗&r ]-K wuO۲cӱl}._< :t,;]mKu{=@ʌlS)sܩ?~Zivz79?.GSfZס_kwۦ4&+uBQڍ9+5e", R SEMW95cHT 7eCQlP_Els9kiW gFd+gD:mdexHsisْKQ~~Z#o AVTw6xF, n>E r &'+'.2x^Tiֺuas =nLh#tuHԻuQpи5Bґ&ŧ"N$DiycFŴUPY\o6{сAksȗ_'1zJɹ+Uya 0۬/V :aND٨Q(7u5DkɌ'cH.?%<9gI *ZQN[ 7*P:լh~5χb q( x' ER%r:cY\O͍:w~RVJPG :q&I^):bN2ЦJR iAmzZ5YR5,X` ,X`ůGxAw[o-˻{;wsgݽ?o_=Qy~5j[m{ղd LMyt?UP6Е0ΰq#[;ֽ;㖱MboJ@:Uۮ#8ᗟ'ao-mKkk˛WuR.YW}4\{ʼvٳލ26 4X |L2J YmJstB;nV, ޙ.RLVjƢD-,QؖyIEff(< ekL*Fpr0FIi->IKIw=z[PPÀ_ LT[issL=-VC'E(괢)r%w69ł|"'WS 8 g.DK|Dή!sT׸ǴQ E:Qt܋EgLvx76zPt`t;@pujgB{b1ɛ-@EĿK1iVɛuOy&nN*o'a BԤܼ/N?*%'J%46pH6ḱXTrXU o0jBlr%)  )S8TD IRzw!ϘF4N-ljF>_ͿISd JӤ3ǕPIWղ Eqݧ?` ,X` ,_(yNl~gw-eyw2c<ۏwpշ?gPԕ" Kjk w%0AkiOUe 翱{kGȘw~ |[u`{oџ7&?R׷\*%-!M$pI岫yղhc{"0ᗟ'aBPuw"JѶXs4,9Yřc6]nF@pc 0]kn(-ZkW:\y_t)5gU/s(V1oUZiB`+l|"%Qz15l!kAkTS>h#3LTaA%_r%wG]jToY[ k ztz^FrMa߭(Y'QAI ,HSDNWzIVܤIfL|/ь[vNCTjnJЊ(q%) w$|{RE5*0Y-zM:iV8hR@[t2$+/'KSsrtYYL%SGUmށҺIyQݟ~o ,X` ,X`}C1y6W^ayB [w'(3[;vn>kg?IO+4ԕθۗUGq^flL%bgniW+߿C5&slJ4~}D;?O[ΆwjN;YJ3km_-;[<+.@wh~#Ds3rTm%o뢯}ݼbg+|WG&s э 9h;k̀* oVլI5oUTsI1mVfpD( =HԜKVɲ>D7Wa LxU٘9ɫ%qQgcFN2P44֕λMY|4|ȿU&uW),AIߣxg:1HAI4h%I )qSd/K.Mus5VѦ8zD;`TSJJv %$E/?'#P AUΡQO jJ@ZhiNVOD~jrv/]l˔4;[ߨ(j)VT4̕تgJjfu3?ܗ ,X` ,X`}Cy%;Kزkڃ;w/iI% @s:l|ݾY޸\u,z+IXU|-na{w y>˯qo2ckҗ,g+7]_w6/z:W4loYt]wu8ZBib3rCmz\.U_l,Uᥤ:Yb@#A6}RϮܲ*-gН|ٳ9r/՘g43fŬE9kU͙UΔbW& /^ROGs4Tb+9Nw.T)\M,>"LIYgVb?cUM[~3%Wےs}ѱX\\UɃnnn|O:We˪0sk}kVWTgȬttm0[k.-+!gibު\V$rڤiӪDgQDn1#Z{;C~ޣk屩e' Zl03(SF;ЄB$4|ŗ-]u ecDZG),bI"(r 9@l9S/<.( ag9GtisJNt̠3u)ѧ-I/Hb' $36˰Rvc0[ nŽx{=+q66k]zkw}TVCx[tݳVc+oM'Tj֤-VtJByft:nN'@kJج4dAHŞ#Μ=vmId$(&MYWU/U I>, h^U*D(44L øf0 AFMQ"U4P (FF昲q,2CK+c`زmm^*m\,i/i-oX(-P~ͳ ,X` ,X`y?qwn`_{x?T֤B]Skr~վhoj_uw[kiiq3O[/ɒVu/|k߸}{g!t>؃}|rlQX{=o_}}`CE~U"rYo۪cնl[q Oa:Ƴ40>Pz:WB[ߙPgNJcݺjLS2ET#%n*_qWntV{kx:F_DI6*+4~*ۯ PU:n;jg} Y]uflIbƦ(-8 +/XCFC*̺=LOW>sTɲg;!ߦ Se=m0g^%*t&'iP:kU?ͳA8fŌE9R' ds)sIki_Υ6#W֬:a^&2~oM"N<@ĕ&ĝ>5 5' zר9ѻfZg@rBWG`gir;a/U f ՜6&fRR݂,čZ :I'n !}(G L+:-m|"0^>$Ѥ4e4eiD)u|ZtˆSFUP_YAWSJPI"ܙ*}r IHOᝃ$QEUPWL֠ 7(5)AFLH ))Qs'.r3Usʣ4k^kΦŲ+ee %5%Փ?ed ,X` ,g ~G1,Q~gwoj%0\YpcyG}8dy;wwwm큀ۣBP@+=gr؅ݻ?x=wkbiB[.[f+qBdD׺گ[-kW5k1CL* 6>o޻WwQp/5 m+X$=޽gwnᄒ赇\kG%yFݭ=8}sD;+ʾ 6)U/,`50.̫IRx./']?{RyD<㊍5*f:M4c蠬=+=~ߍ+CU MM2<ݣΨQgvxc&t y9knxgjΪ2;YҌn Έ/!ҙ\O owPD3-wRGʴrY|]yϝ"Ο".e9͹˹bfFyj ?H (Q%%B<qfORqs5EP:4C6Ѡq,m'Qꀚ[-9q $$]Mcn| IDATٲn]r5Cyawn-+-yg6ޙ ,X` ,Xx,>n鿂yggwj?XYfpcyGvwApӁww~ ?!To! ˌhZQݹt|?g7l#ځ,yI aQxUŗ=EWa :L`AQWΖEmIwԞ,:[>?ڭ[wo=~wx"Lg$l[ NuA9@v4 0Gw>z[Gĝ*tf)E_ǪE:#yqo!,}7qbh0#D_.تI[R-˞}k}}A(q`(_Z A-ǣ2L6eLhB;cVI4*fI 9e͊tܤQՅlJWo*!)&. P(Ơ>$/h&L1gQgkR&9Lfjڢ*`sVrΪiP KOvBFئ6iD ZaVV JdX() g-i1rðXcYmUn*D{ww~{{@~w|K-#ڹ?Ul$(RՖcE8[RqrӱܰU U*sÿ_[_?}w!Ƚ7Y;Ou!>|f?^R30d)I + D>A~=yeES1rʅԜv{hݹ\ = k=!o~Pq+=ʌ*-oSꜫ4λP~b5zެԴE=g]gd_iI ԼLUPguP}dCg訂1SQ;;$%6RcNf,8dl,+QPBy5)%%>IlъZfA@68f ǂ"Bn[()fD9̔g#_>yRRATL\#kT׹scό=sw; Ū?;5i/!i1s/ Ͽ=$5+)ƋэXjD: JRּ3 %b%HεQjF3LOT7RDAܤԩ(]'&E~i1-x>'.! ӅV(0lF%i۾nnojo,X` ,X`o;.yƮ{ǗJ6+(Fl#yk!-mEsJ4?w}|ww|~/3EJ *eӁcΘrَ|<@i_|_~_׾k{s=+aۊͷwP28 ѠٽhOͮW <\]]ԓ,(~~NO2l੾ kaC[ߦA-[{ۗk%5ҢD=MXjȖ7 3L.ύz_p7\Agm#s˽|5/6p= 픦6Knz}a/͙fY5NTLKP15axi|bj^<*2&Ȋ!t~3C=qC&][Ke AaڐQd&qr0A0|,2fyf:xK缼fY/naqbU&J"G8B)7Wȑ&DF\LffQʒk +ԻkZzz 6q GtdIE452P8{1 P]r诼RUFyT uR0eU͕Ps6jڨi e {sISԉjAYە'%ylGcJje*N |2q¬FS'׉M AZN$ЫHqP- ta361 }ļ3:PPCxg: QG 5t/$?*xDTrBvlJV2g,9 \ssyӱhYt.y;VmMWAw.y6X` ,X`\%z4wvMoۢ; &ʕ\MEZrx <7z}J:bs?[ok,yՙ>2;tkuЙK5Ynʪ7J̪9 9cR̘sf5:ΨRTaR$*-#i]S1ͳ;#S QcysJ6f^5+fE)t(6;_:KݩzL5Q/N& 'TWwϳq܋'´buolfbtIZ-)S)T&[8F%IܹR-!^#nD'CDFRZ!LZ+eSy"ܞ.u) K~ӱn_uCs^kP›ngyg,X` ,X`7Gc4N~EbnZ5)̊qb:Pxyjvr4v``кJ*g2`Xn,*e3Ųi#9_)8J#)z񵊼BY;WSat#ѨD^Qw(!X@ *D -uњ AjKV3JAΔU#PHç3%l$u`ôkIBMM&RI994;UM6Sʹk׾h>2_̊kv6 ,X` ,X`}#+zFWX;;<{|`;߼/ۏm,f *wڿc~sXΩ;Ś`Ğ!q&sٺjCL3] {5gUwuw}FYj}Sk_>DCWP }VAwwݺՁk3eI){'7_q1M,2:3# B/׳3yg= ڮcݹVQJYԞLU%I)nt^ l#yr7ы"j{$ M"풧 V.z+]W{ʘ&R[zY% (RUVg"8BN(' D ).̅xAt1EY)u霣z1npM\zHkPsI/&稗Sa|Y3cT-XNJj1sFoPHxՙ2@2Se-7Ls&Q6kRM(k왒^XJv(53:rW9~^\t 3;u!zTU(SgWyUZ-RAJ B(ѱ3aFTjq %IM ЂZͱd_Fgd2TIyCht%%uΎ%Oǒ^WJ(%6 ,X` ,X` -w~Ȝw@Tŏߣ;lOw0{tGwFC1 ;[ۏwo޿` n#y{~7оhJ4QE QQeOjyӢɲ q@EgT]-UspJci?|o7wm݁[:8~J{o{;wQz[?L{_Ǯj + 2Gه(BUc<w7Sq81ZjgǷ\lsThZOPg-]:X\>Wf,94٬P j̨r n?:U&)7:PdՔv:s0gxAh.UKtCdiז i9Jf=i?o;_|2saAj֦*a&dYb9a;c=eKRɝe zW%((ޙgBn '_) r9zA6IFF<{1*'YX*1ui\Zט=apM:zFHa$ 3ggNT)F@tҨlwZ7wrĿ@\(~uVst"`\]\1MfłEuL;iRJcNN2bGrFQ5kT[s%?JLIZ(iNVսm95NU :1WdK/yG\OmW 4fǨj%'@JW H_ ): ABd3QM k5:-}ڡ^=$$n^'cFPVkR~ɜxД*dRUJK)0n]]^sw,ږܭG^@xhՂNh/)+)ײ3 ,X` ,X`}6Q?^ʹ^;rdΘ&޹{ƽ;۷w?_?ol<.ow~R}:_:dcwヿvԇ Wt}2oș*vK]Fkմs݉CCyq<[Eˎky%U|__|o{>~.dk`{oޣ{{n=:8gbg^쿱{5zUϫ)bGQ&ƊZyzgq$J7.jTd_\ ?X\lZl[ *\*=)%W;:E1Gu5+f,) MtϪbW*HϥN-(]actV?iy<.U=8 JQl4-e9]pQ|~@>gULYPi lƂ&9kz)=)TQ쩲:5I;.b^W @΅B.Ađe&?{\t4']P ݓ;\sTwL]ҝ$)KJ/H"Ψc̎WQt΍[{|@s7y ]U5U d=]+}ef}ݾhoٴ'zܟ# %>r˱xrr/ҩ6ֺ|GWexŕ6Jgl2JgM DYPZR&˒^H"ϤKKKMqt~;)Tـ֧*QTL&T!s{wʜpΗ;0Xi{VwVS.NϔgթM:qNZ99JoҊZ ѬQj/i9(a@ETQ"DF+>'E^RT!nR+AZpAY\G$pz܋6h$-iFܠS"AIfQYљxgŧCIjZ+a~O'❝ayg,X` ,X`7,k#s>=wڹ{ރ6<q"Nlt)O-2 7$-@O')gݙ3szvWɖ|Ul;7EQZOx鋟>ߣ8|gŸ1n[|d~en; sm v1dj25=]Yk&hN3j[>\hQw3Ԥ9?a (=pL+pCǖ]p[V>WVTQB:FEjR`4W1y ҵ^>rZ^rBYyaYyai5wC1ò;X*MY3kL!>-b Xv>M!)9 c$WܙNꦑ:M"JN\.ƽJRR:"beY`X; K|i/+VZO BXh*xtyP]nMsG͹)nЕmWo} hc1ח7m(6M1%&ŰGזHKz ^ns# K9' F.hDHu@~!m=1F>; 3: p`"P B01(!DC,@@GA+7 5{J\kC0w9c҆[#-,QBGQ4Ո.r.#_R wbX* Kѽsg\p… .\p…WR8w֜1LO|g>y?O2OЮ D^E$Sl]2q@[wU:Bg@\_fЇ0cJw;/?o?|?O~G  {=x U<齧xzɽ=˿|xSUTE%MWEQ[Έu,ggQ> -{˚G lU.q}{~ʾ2l7=cޞfB+=n5D (yn#zQz²;m `Q1)/& xAx*JI%t EAz>B?#gC=S=Ag*g9H:Fn_9,=rP_:)l(x2hEr8K^L\ ' XzXYuJPF^>%X%+H'in,^HTb;XQzrZY][%]{[MKBmZ#fJ]8*߸g沄 Iyk~Uos SW"1c>N1%8p\nm)jk&++\:c.ݼUpUH1%U@I!FUZ" ?;|ŗ3p`]*|1"& B ZBNjtLBѬ<]6BtQMRQC 1<A{WCDA! i6氀Cg];wPN$C -dm7&LmFhXn)0ۺMΝq… .\p… _01G~gw???LJ|Xt|1ίvlQ/>L?럌oBb^hkhFfn` ɘzhI1S@z߹\KYo5rromQ7~kw{={X6ȋK~'OTdSa ѓ23U PޗzS[ڪXz*U".dIF9sS}k*h,f){WA5jPU=*e'=oػb=pDʸ1G3 a}sm5:QMïB6w4\ HYDTOqkĮ+t׊huK]܄ ^V$wFg*ܸQIvճKNf 'D0 FܹE%n!74\|B9bM5-CÂȼf; Ef`C5t4יּ< RpV27LYwf'mUȉ%7m 8リa1ĩBN3^͆*a;HUU\9*=KmgD|oM%X/t|f[5iٮbrP@0X1GЧvQ:8=,8rH@j/Lq8Sm0ΧYaa8,#M]*;S"=!%8 '.g$i00% 4 0zyDWqZ]C#"ofmC*(uZYxw~}|>w ?ƹ3.\p… .\psooO_W{G>y'>y1Ώ_:g(wɃ}|ٓ?ɽgW?K膶 X=T4ҍu 3uXb[1;city;HСyPa;P{Ѹs:;2KƣNT7값&§O?zO^{0y?ygGt4v7q<#WmĶ%{>7zӨMN;e,o|IpC `-Ҕcoʜ1g.`΂=;mOAԆkEPS7I_sAGʧtIc=pΫ wrniU lE{U&~13Uy ]i8jJ.=SzxeBȈ* ^\ʋ>;c!qP s\)r%OS\=+6xL'La A(pnAGjs' sϞ>W!8_/ZDiYm3u'%Quϐ\nҐIJبUsb$j8jxW3dLYs)K97m 8-6~]eCF%̐SdF>e&е)2$J$%eE+<"a }G lc^c)Q\>UrBY{ɬSw|!}Ttx!@oOv&:^LD( ~8!:WvN!S,<4rլҋMNן]|;SA%5rP ՁPuΚ+gj l}%MGn:ZwV;2s&wB?~k08F:r.\p… .\pΝ!5#X'ʿû/~'=y p`cF-z^G'/?Gw{?nlM\S-CSĺl8.-*S\A=&wЎѴy4elvhm5jc9-C_|??/~owf:*,&;ћAmWQkƶ m'+[zkfI)hfvv' YCzھ3֛|͝bgGfʶtǭACKl;r<>;iTz'"sw9nG4TpDW.]_;êgQy96".IUrNSvj^$U-kRvt8'ˡPL xM>P^='+=2mA(#" p37D Mm.t,<Ғ/.w_&iCB>إ)ZU.sZ zZ\+-*V-$akO [rΞZsSܤ5;93mzȫu=2ւsӭvΨ%D`hשKN/xY .їTɯ.Mx&i.bvWyj4U#eXO/]&ֱkjju#<'M|v˧shs4Y;q;x.\p… .\pMߔA\ʸ gO>{qų{/g^O}E!gg tM|2gC>#ɣ???OF@5]S2TuDު X|i/}XfW~MdFoRȟPؓ6SP=E8jXZfa9#*Bz)_[[7 ͹p/ֿ_٭`g^0ۇ5Y ntqJs(p+l>` 4~Qv'@Ʊџ5ȵ6,ZR̘Wno'`OA ڶel%Zz;h=9nRtpץЪ.ץAt K\Gl,e\,EVr-iH 虧As|tyP@BMcjBzWt7VrdOhDV{D*as dEΉHb^B^UQ` tR^Z]rZ]sqKX}|P1)rI K1$ltQ,H %EN~PrXV/F5\~^dkS[$6;ȧ+'8Q\Woc-٫r$o<,zg-=m̓fp'3=a)&n[ܴcOV cJ~DE)g j5^V P:Qq{S|r3b\kEwqZ  B3D uX3mH0:8bd^ ϊyhI -A\(eHP3Gaw@|ϰ#S|OAd+Lu 9z6_yP|N.Ֆ$;DE0ɧ^:,>ħC0BW^\FDq#dT2vx2+A@s9_;m{S o ECa`L , Å .\p… .\p7/o7gT ̖i.iOYӶc%ظA7ù1g.hOޏ]u#>$ˇg1zp`h/Oя>\óy/٦nYZ, /c|//ʝFH+jX4RDu,CX7-NS6=470qgmśzTnij7L \sWO1tl1Ɲ ś&xzoB;WM4pLU{SsJz;Nphwں=e*pgtyƖpF2uv~S3N]$,n]Ak2h]9 xM $ *@;WH$^!_**a0kg)A@>n~8 ̣<[̕N4ϗWi+8 ݌*G|q9sV\ƍKr( "Q9"ခ I.V\;g#\ (Vb0iJ:YA'*$N: vPb:X{.)#\ 82i^[ulH';-(߆ϝe4-Kb0]nƵte)[>hlKВ k)lH]U@[̌#7e۰IbRdU G;F\SI.\Cʣ'ɡU.0ה|/ X, |F}]v 6bGQ"p+}1Jws]܈PH^m(.ᭊa gY vh |j?˧fifEj|: 7V/%;\t!Crt'LJI..[m!}P@ЇEl< 4ZFU=zX)o/h׎n7TPD; DLY^p… .\p… W}!Ɲsۖu1m_:Wf8w Q?){~t={'w >y w.T:ls{?^>YZa⪥k똺f֪ Z}i/I|~nNIXMv)¾:n@]4Q[dead8i$޴ś2x3 i`uWʜѱy,mI;aGH=p̅|S.Y;)jZ*fSQUǮ8:`nʒuzҌۺG3"c:`H㼩=7eߙv$`UEdC}JU%Q)dy*ڥⓄsNOt"CAY~MaP|MPF8#m< ^}rlå:v#Y5[Ÿ/fP=ތ:fdS39Ż60 .\p… .\pz¹<@w~O?Gp㇟|'_~y|Vw=Go_f=b|3loLm DKY|XE}si'a݉Ncmjz2/F͗53fOg iZgm='*p‘ ua%ۓ{W^p u-t`%͋dAo5LKŵjUږ3gi[ٞ0OZF+ n˹ q7L W|@9ܨVBa%r{%1JA*je ABD3뙁X3ͯ3lUPi17{N]QK/kK<=]T΍U9W q}k7Vբ ZsЧdvVvyWsr7"xZF6E ʙd%nL%\>_tUƅ2)񶚖py^1IU.Tֲ!^}HʋK5 W,5f@|v<htPlF ջ܍Q^О"o˜ie؛.^>eo*SC#Rĕܵd"*.KŗN/xM1( ɰ.Re$̉YZ-tpH 6p]"C‹(ZH.>,DmHHE( .; hv d'LB&HSp-0ڀ/!sP@w%W1/iRV[K'dDΑKQH43eAc1YCG⽁ _l8^p… .\p… ';~sO>{ӏ~䣏=}q'O~򣧏B/ȝt~z_ͽ[75y2pajXԦZmI?ctU{s?f /e{zclgfWMGy'c䌣)r ղ = qѽ@>[GF]Lɇ:cnvԅAҶaq- %"W'z%{gn±;Lc9g|䦧lAP7 q+ۙod ("fh %UWcRhM>dyƲseHQ 4An6wyhfڀ@3U_V4] 2֔HT^ AL]bJdԾ5LzI.&{Ixkrx]dMyi>BrwEf.UF'Șd6wnTB W^PURP sü 2ggL*0s .G#tQŽ).7-~Δu'MӓI&X-t1oXW rʲ̘!e 0_)o6¨T\^:exqp#R ^sMWeWeB|'sUŏJ9X  W/"ㆥjP\Ə ,kTCqV@!9,xm!eHH1t5t@6$l`4x ahM+皊tn.>EP$)S1 Vb(.>u@HP+g=Sʹֹkk)tӲMI'a@%vtC3^S MTb8>g^p… .\p… ';. >ѳ?}O|tç| ʜE^bSಀ^x?z4]+Lkfꘆc`KFe/eZi'e>gQ/iP8тN۶͟R8WtMPS;L3 X9y]ݿAئjg6-ʜ6zWUIxvC [3majJ}O7m 惮Ԥc Ci%"MNԂ9Ks.Yp*Zުʠ[뚫(WjKyE5W6ΚyoC9H;O9U[](+\EP\ -wc=-kSIOA[fƖ>ÖKU!b6:ugWh*{u]kg[ N1H &4N$W_xRpd~eM'ws&ǧZZd !*ሔUi|oŒN)?@/lz\)k>[^ÜlEL:9hhKӎ>;\ 2vTΛi6I/R]-#U͊1@Axn#tpFYvP;3YJxU΋٫%%:I9j.oTJJXAư ]6X -b 0[tvL=lEnT l"]4p-M'w>pנF&`K[C"*r҇^̣i]%"ٓ'g6~8nOǒ͗0yt8Spu;W{Ho0>5IwK?/\p… .\p… ΝI0|?C}`29\+p>{h}wc)FhS_6uuL#OX6ymcDIGQ %vOmO0Z}B!GhfaX!:qFV£kMlk(g\.n.dsѷOJI}m<T:;~!m>,6M'HEߦ]8OZE$PpYX2zMcYX@m G;ƸzxM3MbLz8_}q… .\p… +;s~z{/>|q#K/_kވ8$˟ϝ={|^OÏnVVfca"JuxKF7Mm?5;[_ޛ2wN|Itfda9i[hVzעWΑF J, K}YnIxMy"wĎ6;jYpnhxkٺrARj.eUns+; pt.tj2kl =CCUtǠ}{Hfj 9%/%ܸ(c!rZ]5zqe+e,? _gO3xWe%ꪲ>jl-Τy wg\;go *)oG(]>SyQrJ$$FѬlNx'w6ꛫ/\&^iP^ND}m]Dlv9`A"r,”We-Yt8Hޙqi;o j~!us57eOM7$cbvT7[ =eeEKnÊzdR(*㮩"Xv嬪DrT_: FDߦ(Ƞ0J< l Wp=%TЇ{p $Lrx tɰ Ɲ 7DZF &t[mu @Ͻp+c4*yxN}$WjYd&2,X}͘z35{6-XVGg3?B6^XVvto~sz{k6ڎ}p… .\p… .\O8w~>6C w~zŋ{g7!/1~ыgbWc̶zkf#uP{I{KU1 F/z8T":ѿK7Btl.zdQl% MU{ b|!w'Mmto6k@׿]&O3V}@Ћnb\05Tm%% |揖9A]VT;o =7U!',aeܰvPXc֊ˈ%UTG&ixcĹ`X=Q E2xBJ+eN˖X+Rr@>uЙ }pXC_hT(5KT1A2}Oi6#;@3@Ow "Y65At~uƢMg? ]s|{52#8x~>m/{O_^;7"ґF玑z+BŌ$yzwg޳eLFc؏Nv6ߴ{%#k. ;bglB|դ՟UI7ic6&pїN&r@2Bpl_Ms:j mIJnkK֝y'ª`)#7< `79C"RD+Z7٫2pcJ$"Š~Gn(%@=KWEUWtMQNZ| J׍-7-k&_tz΍woF|+[}cMF\w 8{r 0ΆmЦٛR#oqgܴNn-en {˯r>`_lsoXi&M4U{I׷θrm,vò3cOm6An^}/zkrhMB@0RdE ʡu<ii f xH(΋3ž9E`&@QMW0gZ. 6bUUaW;i Kf¼;,$:UcЮGopdwUG%PT. \md .]&T4bVpq8o5w2OF;;N"[Nɟy… .\p… .\ޟ>;'-sۖ-swb77n_Ǧwbq秏^>O_>x=p~R^ToX,uC9 9`&t+CSAvfuE8{|XPU՛yi.GMԡl>wxٺKݟuwڸ|e%@AuĚ',ӫS[sg\p… .\p…]y&a8wz|lz~ @_4Θ8˳޽-%@VTLm̓i6]rm?mэ&l0}kƍ|;;˷\\_޿rgon/=2}q=y4IkE5&_F? KҎ`z6w'_n}Q$tFl2H3@SK~U~7x7w r!vWS&+7 bnG,fe*@ _ka'GXTqDTfF[1|`'XϴUT/W0QsHcT^ ɑ9gT ;f' b)kѧL8嫖mik,;-rRSQ$^nG0h ʜA/Gt϶QMWeg%MM۪/ʝe94͛he~8ST@gfE +j,َ0l0]iQHKgN}p |)^yEpn\r~>ePDqrYs͗*u&R I7zL޴՗xFĝg :wfs 7s{[s;tb4nڝx.\p… .\p~Ÿs|` _ǦwC/ĝ_<{/{ѣ͛6\hUş5xR:NUP꘷ezgS[+oG~}oNbq;tky[$:t;Hmx7W"o5=[z϶ntMDzbeoMn y}|3d5=rC{ 1)тEmpl$]0Vk[vvmgRݠ#;iYvJFYN~w%}EePTʋa,%]S @  9Ӹl,zEy"{ o2yWknʆo )3m'OrӶl5q.y~ږ:r[jX=Wj/MQ`m,C3ZYT9M'v1ɨ;.: =/]9{l 2JKDbC1)'"n:$;Vt3;e)nwcT7:D#o^cn֕qݺM8UR8ge%ȯ4] +R(kR@-Kyi쌣lF%(~͔G|tcrxE\;- #>₩fhXviVb03D# i3m|zɆ3&;M(>AxӝPlQ<ꀐ=2L:%j[u)yZIZ ;xnɽe<'c,>t5r-o˄uC'F#Эl>54V$ ;W^p… .\p… 7 z{V;>6W~z/x?_$_<n`(jm+&ތɛ1z||-.pU;z8L\joogBvoB}3t.{;{ś[7oO'ss1t Xr]A9A·NZ#o<=Jا7Mc^_n}#mO6{mFB\߽"JzʵeG 3Y,Ǝ>!7zv;J$ &/Db*$2A(pD U)kCʌH-Ptl O7iߑ [ .w5_Q#/"Z:ȪNbVL'QmO333;flA_Î:O@1jiCM"ŕbYIҔSla`ӍltLs)Z&YFk: nZq]>u䩊S'ٕ%=~<͍H9 BkCݬ IdزX;|бt姝abiM~%PflikgUVU`;T(;#|f]5b p.:Ǖ™6Dz8Lɑ5%et–X/]"g\_c@@C a0ΣcQ6PL!BDs ɯX|pTٓEPΝVhMlHv>>}Pt!43b1JYsi=E%RYJdD [7iɯo/m~e&M8-cVnv0[O6NC^p… .\p… }񜍯c+?}G>!w> z\r7h,ͪ]+̶Zja!_錙<)'k!#;_1B4RɛK70Z.ݸ|s?t+ 5n;;;{{7nvf3yjM~f:eꗓ汔}zqc(5gc;So؟2`MF9ir'cy5ZԓʶU^LWR8l_Dw7t -qT+*!?*Rn\ʋHʹQ9/,:-rP=byz, 9ܙY3LUǑ^Җ]=?N^S@KbNغ3iI,=?iߝrdT5q.8?mۙn͆k!\>,)^.RW ]^0:Q&i$)\] r(y&w3蜺߾_oW9ͫ44_{Y$U(F/BD[UpRF,nOY2ӎ$F̄uuH3;D+4*a&giFr]%J(1)K.u# b.z BO%y)!T_,+#܍!:+aq99.G3o5$1{ ;LdLuB A3H؀w hVYgY!X_ ;XAٓsN#.ن|Ov!!}PD71j.1.JHdb@1[.6 轹il=_ֈ~)>zG|ic@>{}s@rov'3=p#=L:QkYj d~{^p… .\p… ';>6~~(w>,|>ʗ?GG< z1}ў>ٍ}uQ oXzCz&/I|itP _=I'X71z@xmjk,=|{ovu7woenwCn\}+t{wT,F#7_.mzF ,>t26- t17xF:7#SSz51ٻmH+,KUQM-dӭ>( :95aMf]=}m$=ڊ4C90jl1 '.9 &`Mt,G"2(*VYpCYHiSM Գfq4z ps9miuH\U)tRUvZ/Jki{vƖ|) X c;Ꝡ33nۻc+?(=e܉vGqHZ6UDMѱH:Q"Ki. r73I#uɂ溦+ʋN\=sb}1'R.Frї[Z9{*`ۙvN|YJ|+$:vꂥ3=f*o8vI\%X 8ͪ3G6Bpa~L sp#Rn\HcPc0*($W>.?&"ߨw>j 2nTA۷,C:CBڀ/.>ߌ.0t XzvLt!`Yd VB8o7[ ]U=F h?HqAzv sȕuDr{U~g4F05.e?|'K͂g55 {Ӿ-wEl[[%ą .\p… .\޿w_fMeupLRօm)\+؍[xi[Ը}|:!wp P'>}ӏ>C z4,}]Y1 Tޓ0ZEƊF2x7=I{['R} [|bf>tKʭ`}֍חoc il߰OeS9?s'P;b!:%tPhߝuntcȊ۠FtiEjbFܹfJYQ 㝈s ꞾVU[i~H7,zlETAj]=g=BvJVV,)+gu9&$U$?i:4lbWf3wvsGu=eE"uU״ #L3eglEшT"tfwiPc\Q Vn!}I c7RH#1/!^IzƚN9vƭ Sf:o@V^}87G4{ sgœWF R>r|uUʹ '"C 9&R^XsLͶPr'<@"X4ٱ|CGPcƤ(h dȌ2T`!O@s R݅М݆P-0 PzӤŧHN4~LgsK4'=Ψ{A;An/Di@JRϞ&?X^H4 Z +-γѕ_‡A,~}K|>mac2/̑EoÅ .\p… .\pWƸpg{w^L ;ڸE7ù4^-j\;#5޹mO>{GX>y'GgSTozv׈fpK1\q6a-M޽ae<շ_O_amoFX +{酛[;Эuw$oJ} g2zzwK8qȡ>gGf}lblm+z#NOSïgH5K{S 2+vt.\ 2 fni"um+74"2;s\ -(JDVmγ{Wk砞9XP*]兞 6fLดUT; Vmik&p_lgܔm%8.~*/67Z]C60,C1Fl6EN#t^diXsB#bklGH_"28p3TH^Jn֚ZU䴵0=m]hriDPm&Nvgii>jh o\!+9z\lȪ=x`FjLeH`U/\jt70 i3 4ΜZ&#"ZB@Ouz :X3LTDuT؀b*RQRtDo.hаt380ma[U'iK6U1H<]9di/?|t`I-w4xʝ囩\4xÒ6~|k'ų5(w.>x=~qSzQP\͇pu8Q]52ѓN{WӋ{חoaMwoQc zwҭҭNηwL卞HY^;ş;vƣ(}to&v̦@z5, STM_7| TwgƁ:=i35& X ږz޽coMRxE[#zYf9X;YUfaz:~Lq6_n\)K4[ӷepiK>qw>sfʖфB\vtl$I"dl`u,EB*1 ubF j]"w1],CaS,\1 A?)7ZՈm6`YAg&`wtVa\$!`8La|]S9盋NΞ!;]w׈'ZjJ A i}F@X5 ZDSja [74|;<]%qzORN7GÙ`&l<+by2sg\p… .\p…қy6mWq|l5>ʝxz;G>}? :zF \]=C_K.Ӝc6'Mcۭ L]p󘊝7=9= 4Y~ƾ6&Rk5fhY puD _ndj[T3|2YiBzRNrf Q/Rds"EXV$US$C&hL[v:=N#.G+jX.rJZr\2MrH:6I$EԳ*&IJ'uI]XkA1 ʟD1]:$ eR\u!]t5qE%h`%͂ kLDRu;u! vqSzҘ=:Q\M Uņ ӭUfEzV7怺@QGμ*E)4hCBZ/B6 f6l0£8,miQIkF*ԝ gN.7}@rᚚ600 Kꅨ# Dg55@$J7!#)ú-xVy֍W]%|xۈڗ{MPj6|+p}{&wù3.\p… .\pXm?Ν?ǦoQw*>ʝ>{G}GO'mkzZKؼ43!A\@9_FoGFo5Y_uP\p:tv}Y3(Fgenї0m><~/9 A1kڣ5BgduRC OJ}mH;*a6A@ɜq*t{ˀ;))iZ&iӌ@Z8k!A=A>"TϛS*IGDdPH+D!he jcgʶ3m`aĈsй3ۻ3iM*]l}EYIEٙ~F͊2]b!ؘER32d]4j $fDd`F.. A2:I|Ъ(a 9>mp|:x5f)jivqsn̘71s[XAfV !;F *VȌ u.QDZx!cAFX,ʠN1, XS;cc3lh-) K٥4l.>\tq鬔RohV3BT'(vf$7,g)zcfhOj [ƲgUC?)g2y<Y%|xG u %g;۹Nzl-iɜKݖ.+߾Å .\p… .\pW};kEO>| }k>zGrLTM3 !#dLތv4$ 9|sȝ i_z7(xIm/߼t1⌍5{L~$Oo=iHɘl}zjP@ S;BZߠM mxZ7MjYR~-]QS+ l՟ÝQ:;mٝqe'cjXϫ2#N5ĬCሜ%ѢjYg^(}&EDi0+De^s#R,XDp_~3`Odf bʚ93eL s3δװfpWNij.zR8.bAu3Ig=` ۰=T{6 ,eܘ H+b؊v ; q Ҝ tPͅ.)`@Ё{yJV^0T K T;fR?Mgѻy/#I}Xԍpj>~dCF:* pg!Νq… .\p… oDۦu1m_:|_ǦoQ7?}oipb,pVѭ +u|&1L3 5˧Ig|OԜKrJa`Pk9D>$7jjhZm=횀r fH϶ѝy2Ʊe,asy>KqAޓL$<ލś뉅F2.w x.\p… .\p ?J}t_ǦexO}?xˏ?zo>9Q)PKukaV7à .G9Na%oGM܉{6}rz7c][Z .^9SD4#kf?Ψу})K@>>_ȯ[O}~tބџ0Jۈ(j+ȑ!UnʞsVk`ayX\@;A95^[?B]TB4Ȫ A+r]ƤiE^Sϱ4ˈzYjQO#XЩ5bnDCwH*NV v)t&`m)[.O;2>f|ҹ$؛KeWN*JO P+sbސZ6]x L Z&$* i.A5*iN:] Pw|`pa<7&1%2Ű+-j;^Ǫ6-wcMߺ. ="r Q3+O>΅oTY@ 2NLʉK'*D)omE!Ow`£Z! W;;l| B9ԯΞj:w׈>`u5UYxΣ9!`GRz&MzcU3G w2ܧ&/7>_z7%Dj/¯>ukաt27p=;N ,Q3,6/u(-q… .\p… 96g43#9y N~|>#3aN3ugږ}|zj#nhջY`M# +bNDE%ЪB#*Qq2~H&Q().kf _3'L+4*!cRvX  }y+2榫;7@΁#463'k֘UdfDx(vAd-Z._w$D-㐵lIT3=LA҈tA3-lHؐ!%ሔ ^G+vNn Gf8jT4[~_a ^TYܘ",IٓݬVڐ:, | aX!Y!l@_A!N7j,&?);R[vꄚ*`A#4!La&xٟ&{WvIc_B`׻-; f{n޷m {#r{Dl^Ƹ θp… .\p… +7W43[Y;.|ųO>O|vӧ鏾߮& ӼԾbli7i3 -*9 ɇu,l ,&S{חwonx#qKrK;;+ ywpa4f?hEh\)v˿4upz}i?r%JfMd~Ԗvf' ތso֑aao{gƑڱ 뼵ۡBs4jr%n#ʡu)kUʍKn i 4[7K{F䆰L.cܐɸQa1gU$5G;3 3nP 9"=EҒӆrL%jc8,g4lpM6H:&Peu,Cӳ)ZUŦ+$8,`,vk &uo;"催g,5 WW^YfT픭()wMΎO|8&WrU3GDa!Ɲ>l8cƫ Ei-5|t4|QS)e5LeA;E3BNeQ: r3E6P{H|h Qf'i_2iPsͭS7B7w=Z:WiIsg\p… .\p…Ν3z?%:x^x?jT}^I1#fo>EFwDm`ӫįhyS5fߞћӍn}`fg捕;;7AЭś;Kl/ʄx'6%kn9m'>;6cyPt3u, R5V;ݠ3;iM[@gpB36pY:tJ;yMBҢ"y*!IR\hRy jT6wEø3R(.=Ae-7iMsӎ߼fȑ죔K2\PV{Z纸}~9ljP EЊ捵3E!eX>(bNTjIVl]@wzQPYB=P|TÙ ܊R9iTI&[dي^uzQ#K2TQ{("̶lAV7zۢ؃ys[ ݋e˓Թb"͆ ~:t;rgozn:^6EeEeۼ(.\p… .\p&s/c{?O>ݧ>z?'w?A ~1xlc9(~s0fP݉BsfWG.6g'gaw ,L-簐dyP}{g;+oN%w\ V2_Itƹ3mX0q['k`{%A"wwVq}̄c͖}' \0F!%"ڡF=@ꃛ%3^Tʋx &$5;"z{L"uy=s:kI!Lɨ2V#^Q9S"Jx19Kv-8zҚ姝qҵ"KxkR۠8')9,=GXd/ta٤ghPl HC6kDP"d baK5 ]^q`o YQFI[Sl;#*!1',ᮡWʐ;}_q*R8$t}a!}@>$ hNhƨ1!Z!"t+g7]%;t[ ӹdoK/i66.ƥ J!сt;LS-Z1TqU4M3l(5kITW'Ob #t)g2?ܹgP]^r6zFBز$,H|g .\p… .\p~s/c{oٳ/>Ƀ{_裏vn6Uhn`ۮ GiMTtt5UZ`p4DJg Ǝç;!R/Dv",9#0)12L8EiOawk`o|t~-6Lgo 8ig2Wn^s}i?x3rLnK8ZwTڻm]Z%Ee,rθp… .\p… Ν}g>޳?yg/";ZUYM72;|Ÿѽ9Xg;a&6<`ԍn2uUT"r{?7C/Q ݺ 2%T]nܱMtIPALB;Ankp}]>j9GvkFM!j7Qm볽g]ine'-6zF :ha7dUUì.fL΍RhEe5)+Ȇ>^zEZ0)e/R$.ʜ&,嬪k[3n z 5Nuܼ+gDcyIiY"]91m\E1IMձHz6XFM3 fť ΜA1%VA/ȕ梴)]i*Gh^bb.z5rHq9.G"rd^`C":kpg搐ǧ9`P "4;DL4+0Ct)]R\sgO.w5V8D;nL辠VT:}4BxH3 lK%@m4-h6ї҃z_ѯɿ5 o[s}t(.Yq=&-ر,-Im޹yהV)bEYP^!c2*] E#iGdВ;QEư>,B֠S쯸9aۀzuxbE>`]>'4 Dq@DD4$ bC>Cvs Iu2mv/[5# /ʜAI僩[7EUB )>[3 }QYoD\CRRyv_|lz?v/gO11(y~G?j ,2/ZIX6)%Kl: cd$M5zї3ڑ33lnA!A+wvwn˽Э=>~q? \[O dC{RunDԃ,yKA'l2=[FjtMZ=@7m`޷4zQU>mſӥȈl+5L){NВ8Qg, %ϙI˶8gjw ffP^Edܨ/dpDI2NDK9 )}I.UvgDJ-)w Kx2h]E);f'+tf6i[nږ)U l)[jTa^)E˧egeŎ),vK2Л4L0pzMǦ8-c7MNiϊy+2~TRf}]X1pcr^Tʉ4T]_-#][F/(jX΋n<`I_+_)bRnL‰aبdd7QAyX@GEA!#:`ʫ4Bu@dT:];T bpuWĶvv.̧$':aZ 2I:f eEUG܃N>_z3oѓ޴y|wnc"[ *W`e~ /3֩XPT8%u4i% , .\p… .\pzcFjf>0'iry7n{p>6cw=- oaVP45,sbi5kXFjĜ0zS'ެjIO,7΅nܺr¢UfBC2*@U).eE7%\%tef53m Xe{ڒ XA;ϔp;+2,+9sG\iA"J8n!͎k4#nl;79M}B[pVȪ<bVr SHJEqvQSpAl4ȡݜV氈6( X3cD@ŧ Au$BiΜl:{LS f Q{4@4ىЬӌl|ODwW+ʺA5U_ϲxVd\g 9/o} CxٟXLmn/\χ|kVzi?7^IqE_\Ķy0e%ͿC… .\p… .\p?qg%Ɲ-oq灍nt3;M.@gtC=Ϟ~Ͽd84ӪnR@?y#PK 'mYgOΤ63Y@V[ ίYs: pf~&w59M = S [yCb]bi.0:pi9Hx_Gm]knYi,4]QAƊ ː5)w.BWH kK\6r~SnT* aMfڞ : sS i{+vYYrϰe膚3"œ+ @Q9"f9fLs6!9$ `e7A_+c^Eˡe~wsXHyk*~DA=X}AVzJ\rJrTwB+tp8_AJ @1)7.ŕń9cA>eODa; hBHNm0Ն:7^l*:|LS'[jK5LA7[!Єh\"CsWh▟%TI5Bl'z#:_RPf_@p;m?Jr&wnXs3|-P2A~y?xcg2u7zٹm6wbܙ(6^ .\p… .\pgs|_Ǧs}l7|HF;?я \b ?n$c:[IgmxE v88o䴣[zZ N5:ܜ IsPtsgf~V~V=- |y,3!PֻAAP} 7 g6Lvws7s\.'m pg=$̞џMG%H& z( @%7mxw~7 I[kSA^zMUsN]U47űyW9,GB2~\< hQ.,2nBؐc2(sሂVpc*,a"Nr3)G~ڑҹiG>cgږ7o{[NiL5k+IKHtI#RmW1f%V2GT`!nNT:#q '*Ż9*A 3/"w(YIycI>#S*crdA̛l!jꐐ6,#"搀-FBuTA4eeijOΝ;SR%&`:l :Hu .`@F:$ڸjryiS-* ]BӬftA:iVEo|#QEN? nRԆ'\q35B  $ȇnnwx4Po\c;:$;… .\p… .\_8w;\|$a`?=~'?wgrNrzY›ng{D!uDp󰐎01C"z(v/ӭ|XGXD(>|tcщ3f\>+&֘ Cr`cmgXaGdqC%!R K BxU#붉ٛ0ȋ~`o(\Nsٕ 9| fk'—\~w8{ ;,s]8wƅ .\p… .\As|_Ǧs}l.904꿽ϜcQNw_ȕzdٓ1AS>X-_~\"P/c:5JO%w_onoBx_sF7 'Mc `/k-c7{cٴ'3؛N&2ى]|<"/g#:F^^O/,ܟDsi?x-G/ѿ#ʽbi7rLWivrO7t%,~ws>r6@=?ze'dT 1BbnLdz(Weu+&.+2>f$)/.gƕWep_ bӶԴ5d<;nI)W-AXƉH \ xU[~A^Z,-9ii( ЃAo@ >Xފ )0+vp `r8N [U]EYieٙQvpcX}:.GJ>bg:پ3@ `; hBڀ;[x% *D(p󧑊˝Z`Ƕ#Ծ^*TL"i&22H'!'egLVwMW_&B_ٲO%6K7 .Es#+weWᕴf$TmH+ݎ;… .\p… .\߰p9>v/c>.kUӏ>͗5CHFO4~_$Ac~'-;^ݺ \֍ @7rg+v-yRFOĹFm h0mfG#;A›[ {7&vWRáҍ0`)`a N :;KIzׂw~__:϶ bIti{C;SAiv.Yv;c1ܤ-?y}1 @p~ڱp-ACP;έ5]꥖/t0r~\ s Z^\ ŀAFL70 *ɸQ9' ;*8Hd6͝!UʫNrӖ̔9;f̸u>冱%*Ƥ5%@0YsX^Z,rI(_Ȫ_19\@AzaĀͰ s1K3rW.XZ(+\:2EK7 Ѽ:SgEb{plP*6tb2+ݰ|M~֥Z|mՍZ=QѽBd k\13Ȗ;?:|:Ubgp8.c9&kXY4G vQML;1%'sZ \M0%\s~޹4g*NmVO6@M2q)\Cs)zxn!.6 :\rޒ%{G*(8&.nn*< P4U9pr|yRɕjCb@kB=`o`1?LdloQ0;-~Ml̜;fH=i'x3 q'"6vuJ2U͝U#7ywFBBBBBBBBBBBBBz&~ٻ0 6re'ןx`cceccyuؾ 2¯͡W?xp8߬=+?<wRj&m[Έq30aWZf$@)35*DdSLtc Wf޳83G{5Ť3p.^ϋs#8H\!uwDn `E r:J_9>]=z7cp,pB\|wS0ĝy0$ݘd/Sb8>n 8iV ;0x:JQ͢6 ;)Ki=H_K9ѧ{ΗwGUWo7TJ 㲜tbBn'WbŐ2'D Ms-['[”g8ΐ;hxLr3kʩz_1Q35wtQ|:Ox*Wt񉃍ŧpA\ogkxh|cD@9Z]> zT*N^jSVzXL!\G6S 2x'D=ĥg!~LjW|q2\\MlZ h.i!xeR *2p %g]]).*X:S/i»fe8$K= ʮ)7I.})ާɚ_uGcNCwW,'=]{ꀁp}1 9;Bx5+dA+š 1 *dNpɚE''.pU3<=V]WX}D ^<[ΛtKiGeKفr8[09F^ gFb:n9er"h;4=f R \ʹjⓌ|DRru2th_Iʑ7 j>C1aF'k8DeSF-QR/3.^*g\J K/Q$AkMxw`4߲}rkHa1ug t < wW^Í}nȝ=KhmwZ[ƅMՍmL@ Yh\1'4lq'+k+rcOI»6Ƃ56?}ޯ~_$/"mf^V*{T#y V~a]+pNYyVa*m 9򵏆GiVVs|-caw! Ke \#+hiȝmS؏CJ;zXn މ\O!=)<[y_Ýa&` 3aaΰr# jKYѱY 1{q7( cb ]h"JM\K2)ZP |I@5Hmbh-nΒ։-s6#7d%\5W };>|3 V>s2¯͡Wn~pُʧɮI{e KXf+,!5|'!Hf-19(N`%B a{̽u,EdI7AQbĹt-nVvVN4tLAGȬSm"')`)Bzk/mcqN,t}|\3VDeyݧaZjf6cVi׶+ RZٍی֛mH2oJi9ҫƣ6"e#$ڧ1Km"fCI,ɉ}G+qs!~ e"XQ'^9-:%9[{:xS]6UfM^ k\V Y΄7rD\6桏ewLA緬~[ü!8n.O8\G9ȣxv%$=Rflbd,'u\+mRo^tgŐ2*&A$jd5R5lb3몞MhY%R6z2 QVz.T{)mE7xz 6r>`?9v75IQw6JZ%r盲b ;#!!!!!!!!!!!!!op' ׀O|pyrk={5wWF޵9浵_<{X?7)40u-j{De;J[Xi ^)[_ [He*1%6ݙ k1ؾ 14#qL}7YLF".ψ[`>m<\iy];OWw%m6 l0đF&wL9-,A죋ɭ~R}0b -z=uO2p&-Am_{U11 z)ܭVЖfbĻ1cULlszuqlɜvs0J;^I͐#W[2t gvmc/T?r% x]{xLa]8\qd+#S2RL|O5&>Y+s F%dC9K):MC>tqѬZ%8s t4IA*pJtlMQs(ZG6T\M*T+\e)RdJsMWXk);|+XlKkrgG rg9p*;yph5ǰwJJrv%]hT;ͱ>MX̯. hMb.Ns9^~c{h'>q#[q VCK~=o 36硄XEcsgɗ7JE^9^ε(.G3XAі8}x?[tnR`3N4d]"ru<~wϭ-oduF6Gn*ifuKiQ[:NE)FAbN8;1Ν13dgV'q,᱃vǰje/6 PeVIeg.QՑpcl/Lvƨ1&*lBåcC{iy{ˎ?&vg0v'TDGm ]%gLK[v83R 7sIZf1p#v!F`>Y@W_=[ypwXOS)᦮3*ݏ`duYs+l%,54z1pώ!¹31;EҙMT]P/ja ŝk!ȝY?HHHHHHHHHHHHHHWkOV6ؾ 4]C?\{{'*klkƋ4y-k?Em~'Cxwr"LbkPn zݳŴg)3w1 g ׳SѨSv΃V"`2lyB@6d u³d9B̳4Ydy 6/sg`%VF`x3,^ wbHXnçM7ߕU֠ï0P5鉉}W +Y~|4kW^M1 4Ý$8z\-&NQͥ<=ڂce82~0ٙYj ]}6OtXVcZ+a cBJXQ]}altTȘx5tV=ug(^V3j";G5̉H%Gs2yv>O6&>8$i`‚eܙy,峍lQ0rZ+%4qlb %JFc{c|J٣iw9Xo K]W nſkͻ5xPozC̵ `YLa;Oŕ:lM۬+n9U늁ʆ"ĝ޿ wx/v7xfJ |G~~_=/ǿo\~~o=+v^Yx 0嵵_lg i ktʶjg^i *쐖ʬ~`Ѐ%;ꝿq,dos&JϏx݋OX#c! B‘ @`B_hexV9-D[ V#ؼa3]3{p,\ y,99,Nz J,8o %I -dTŲӢ3e'̫ZpѪwsLj60ZLF-=OTx'f#"5|CЙGm`+GQr>zaQ'J@mbWJAPĦ_v2~#Ty i*I"~ |/VM=;[Z,93x  wQ1B>ۦk3YqRNid\]>ÔsI.P#Uen1S%j8ؙ=UL/, 昈=!*_6\=8M=@,??~W?:ɯ쳵Ox7A{xK/O>xlPyasC˝u}e W++A%*e~u7UQdҳr/FX'vRx3Ls17P-dqpVY# [\n5tL+Ffˏ6J=0c1œNQ##^NcmVlBt‘"w񎱰# kPi9|݀#(k[WV̿"r*,ubC^]WQ{UPWY5ZA]:xT/[mq{k؎T#3ur%dzI&w YcLX ]ÁfNñF븝7hIQvUp()GVid\Ws>, yBd:W`aٸ Wh Nd<.-H8ziX%VqzjԜăg>POlZ*L3l`4̣=,.q3WpQH}ǴSu'{yY<=W>M0u|FS5[RFPש4}_W|?IPIM#i WA 4V 37K WfޕN9SɡX>ʬXRGTn̐:> y0lJ܉]\,c!gȝ1o;wpg's힐3@>PJkPi=xup\HUy!x&#H:1l8_ppzDwAN 1Q)cUނ6p ;&bT8(>v,uE7J#̈́"3!"[o1FMLL?C=]]/elMld^m;xr-X7ʞq NaB`W̜0\bG]Q,?>C:s|iQ?ic۳?] '憓+.w4;0S1?㏷'V?3҇4w^^_Ot~~{+V`i6mq5vwnAxc}pyז76doSj8VB ̯w4=>Vcx7܋,=yεsAt܍MҩX70g7T]RR٢BJ g#:ɸ3),k!zp wƁԖwpg`IEFR!`dOa+8-o{wgPZR[PeIf® /x &}~m-fauqQWv[@r&E&d7^ù'$yl\h8'<_xd‘.V1sۯ6d5kWZxf+/":P~鴌ICmd,녇Y]{fでyŌZD Rw>Z^r&\IYG.|6SG(UҮrO' e m ^jb v.'^(3#u!=c ,]O>V F χ)gOHѴŝ:CѹvOT3N[wFBBBBBBBBBBBBBP<~hl©W7&`: dko_߻ ?6ﯮ-=|]eZFEkm;C 9!Qb̑2 g&H3% 7 ַַ /L+~-.=hƳ\8⎅ЮLuxhK@K3c8;#;Sل{FniGPjpgOe+z<4uK %^8ܣJ7'bPsrgXX`^Җ]B3"ޑ2 oLpGgr%'O>OWxq+fn6rC,fMY"7pa`,B3cQEE_:(#iKInb ҚduSz7qg +!wfzk.!y9#=j'3 ey`Y"?]v$E[v4GR|E(]#sg d⒍A<{=‘C.NӤ^aRf9:x;y12㟤#5ʤFb;ƚݽ [ 5MƚCrJ:&jG w;_<[铧+?__\^~ 'Vx~w]zygkOn~~u竟-{? dy~X0iJ[*zu70- L:g㉁Hjdnޙwρ+wTL茩 Y5*Ddְv(pCc.^H;R g:ZE Crd|K?mAg;oCm @힘ⶀ3,3׾6 $o#j_`_.kK&M~]G4ktKUyqtL nnEm%hOp7h-WOU'>~@t+{r{El=&bI&$<}&X%\J .%jJmMֱI,B#MT]!qJn')Oamjm)JG䬏hyJ,szq;n^Aodn\8I;@Oˢ:]1Ӎl)ѳ .N''%Vs)`(,8G?|ԩ3e*ҡuU產ܧ0[c|X(54F,&LS(H9g :c 0 6n[6*j6#̝?ܸyouue͇[x4FmWc{/o{tѳ+?#Tge~q\eIlIif%D/Sk`0CiZ'#@8vONTۃMgC[r[XRۣJsLi 7}Iw&3<=k!XH`iIVF Lo S~&[jtƹ6tS ΧfM`س,jʎCPBX- hRQYQ;* MXscG{/Ϲs.֧Um,Q2.ٗ"ƨ9 Nq3͝+IdzVW.HAU3vnuŬ1 kTtW3n|Eв5fCLgCh5+:^KPZ.MN8=3lqg# b2.yƢGRpMwF3HHHHHHHHHHHHHHw~q2ό6P޵sBl+:,`X5MX ]<~qo`=Y^oWi@]K+vJ; `}|cTĀ v'4n 7ueH XeksȬ0Be+Ug}4K}w- ɱ G^a8E9JaU`rܳzNf0ðWx9ҸLܕN'šŠcŧۯmk@gH 4Ne(ҫNjM~ZX6ާ6 ;*^Y;&,ۅSaVG BþxD|*Gx`աDOud gREǰ4fNn!'5f !`3MluB#lCsIrȭwS,5T2r)gXGi9{8rn_hP|G5i>7l XL Od?>@;Uv4V)%E4 M|m#'W &ܺt?{JyJCj%t뷮wnXo2>}2;׃}w7|n;%1H%Ιh' D汪FMplRM[R;ㅄ~ϮaEfЧ ̝-̢tyecck0b7&~]X+k~ؾ:,~W^X}qomoӉU/Qd4e%JM3 G60Pή_ۛo{[r+0V%bo[[J{m$|'17qRЕRGK WbbXE2stґm`br쓄g1̏~]{16ƵGRIW葹9X@Sq?Wt>HM;O^-ʿ{$) ݪx6ԧ}|-t^Pc95b_'n(uo )j^=#I;Rny$ Ljqg_iXKn,5R2A.oDS\%m<¬Ec⽚H2ާ8wἂKZvA11Q}Gx;.dzEZc?&LHx묙b椘0ptlEfCo&4J.Y!>-l2T|oWK7-eW.(91%{o٣2RAbM<OnSK4WrRD1g/)oߕ}:-]5+h&؟lP|gX.M1ʚԆGJTrB&ݪt̓ވR4W/axFck6L;ґbFX<[]^).L»Wz2}>ӧ$mpZ.T WZq[e ;|J+Oa W33w# bƳr/ 6#OspJ@ ,ϰٵLٵǹ3VNj{Q;7}23$60THv- ?Ζp~Ye\* 2Ew8:dvbXv~Py/]O;*6UQ53/2lLg:cXȆ-Q?(:Jd wR…Ys]"ngei+!kT sg= XD E0p]d-pws`02o )bEgDzI9ɹsj^lfrO5hF>kF\TPy(%o?j~J7st`O6SMMԳHf.+xw=oP"@ž"юm>YgRY"jוmz-;}8x\'|ܝYň.x́t[sYfj ͞j}]6\0Pq c^Ovc>x &~]X+k~j}7Vm]5 _5o8_ۛ_sBJ[HanszDڳYJ93Qu`H25%OҞ$)n|ntV*]h`ϋ1YC3= òk xsWф{t.%~^,jEp =1k RPwޞZuTOP{&T9BO+=aǛC3Xf ,VjRYFUˡ;n|ΝAC!i9.C@߹AI^lYAzw"{謆Qb,S;4&AsJ:*hʔԫiɹy9{+Sѯ4%q,s9LsfAi+xG0hg$[h6> rj[Lsx8{Cx[[N` ܙ%W&^a³4nm=ßDgO>][??h:Ư3"09w*i}e1'G T ӈ;SstƑ\LG)^C輘8rdS^Fa¼s!swI7 m!%anDy梓w*ib޸pmwy'na&^NH,Inܙf50weΐ8C%k&6]@t 9B5EebCjʥ%e)=%,~6,aJ$^8ytlaEJru}]_a\!%3$Wkr{Ux8;t}3IŇ;$Lp;wYLy#܋O@$1WwOZ}]z1:oNw hI-l_*sI`WGcB$QAϯ?+<C6f[BΔ蹽.B1 9CF.I!ؔf6Kk4Yְ-lr%<3!b:70T-oZZw\鑃09{Kz>(hf.j(r*V ֐[⋼yĬ=ʡ,.1 2dl6B $lRGK-:>K+>uP|TObV)F֔YB KH /!p:|*kTmϯ^o;½Dl  F3adNCθJ͞)=IN2Ǫw*w*+{؊?˟?^HHHHHHHHHHHHHHHWoɝml< ]X+kޅqsu:~ݿ!Fc!Uu*,]mȝm!-$ԝ1F@e-19YmVRê7 {YB2sX $݋R$rC) c΅FHß껖Dw 8Ya΀ =6<;Y>=%oMЯīUgNj/ K{^uiO .|gDo^fj2%#Od P]&% nRbX5Ub4\Z$Xjv6Cos-z.F(8t g\Xһͥل=CiO)(wd t&j \O.r>9gP.!{!%j+bS;F>Mϥy4#tSM奍L AzGܬ3WV怮3Tt3r[ pcZ~gλwO9mOs:HHx0Iŝ 1g&sg=>;e?#J,ޠ>%iuPWJ* ]E,qg$$$$$$$$$$$$$w^go߀9/ Ĕ{mƳk+˫kkX>LJOPX*D*{H  *!?[^8߻h-/pÈk6Ў*m1U'Xޝf<Y"Rg=a8spѻѻدb(N*j-N!EN S!}೅!0@egKC)(/?//8=\HX=6үk^uW Ӡ%L*Uܣ r{ǗoFθRQ\HAw_iUAUc,42tg#N98Mh&\48̋yg<+\c>7kZn*GnGI ?AHHHHHHHHHHHHHHY?rrfpV7;'Z&2E gKй'?X|ӧ>^^{ ?6aGB7]WʂRy [[薚}N  =;o'[F\Hɱ—lAU>9(3ȣְW>x?2^X]w/FҼgN&cŏGtya0tN|䎨:Pak}j֠ ֌6y*Zu+5u]gZDnElP{`٫p 8}k7 E5ɡ61#NU^_bNgͣ %X gJC9՟k,:9((>+AOlA|-fKؐ;& {TIVf`) "wfC.vޮw鳚MP3\bR핰ĬQ k KG'NJsլ[>L.%{#o]:ơZ H =dLIQ|d0492puczl-BBBBBBBBBBBBBBBzzΝ'Ɲmw¸HH6c͞x7qڽյ'+Ol>]^{sl?O,%j><[|$i_bn08i9$ /ȬS2D0@)3LU)l` րRsyh6 2tRLkK)k3t/<8BƵpsns:I;*{|wz ~ƹNJʱgkqLyT'֝?Eχ16֣j^k7osgiW$/`AmzU7b[rX 0hlf=!LpKGE֝9\}>M;$/!XNėW q!Fk#rChd Xьe-Y3:ΠEhXʩC7jpD81 h'%l0lg5z&'泏eOK>@QN(y3.E\Rb~B#o埖 8d#qgOs0j*' 5%g(G\[_|la!H⛥h%켜~vYfyX0y’s> uLLuLƳvL Gm`sb}7s*1uꆯKz 9??^HHHHHHHHHHHHHHHO; j;HH4"voɽGX}{WqTiiG|2M{b ;Xi@CfK>DªX3OnҜ!zKV\x2딮/wMsyWztґ:abbby!xL䀝Spka~(>o 2g9Qc~]'aZ dPCz/Ɇ(+s}eEbΔ2~;ګޅ*w cUr U6 okknՆjK<+OۘẫMŧGINTW{*v]Řxu 8煐1T3mרz>CyTܪnfT psfH=N1[B攘_z@IG%9я_0K45K%|{ӎ^Pª NXjʭ1=; nRiQ2Y\w3pR_w/͹ Rҕ.%ݙL74I{K3um;_rwFBBBBBBBBBBBBBzz;h};;Dd8O~~tǿg?q~bJIMS ˔sLecWFjC2^X9[2sDv3.P 3hҝ^ѻ 7]& R 3xw/$JgL ʸYc]?=7 XXk?LSPZwWB"nEq)pJ4j#РKsɝ(1ݢܢ*ڤ.3ؔh58,h@:,d3&f؅u>h2IDAT'9||D`MZٽ7AǾau\KKģp&kY$=<G݇r\ft]+h:&+v&G&.T0F>K4N')rA~b^bGOv#AszQr@ Fe5$FDŽǨTHh i:r_m*-a5F/sv?ԝ\#5FRqxb8xVx>ύg1JgZFipBԑ̅awFo* ?_?^HHHHHHHHHHHHHHHO/sgwFҟ>}?x􃿶bMv쓚2]ZP\KMYUgXՅDX`)BZ'A 9nHanc}45+  朙k!Z6y X 1BܙI8Ә38$/ve]k!YL.yԝD'24}>00e',Y`aoy>dWPaka;_Jtyo kRsq;ܥkc}e]ֱ.&Z];{s3$ZxIk%Wut٭tP5^ Gb_g樨tL',:6Q3eXLұ2;3 wUe9 Yo˝DŽqcTYfeE8{/Xr3xd|b{KryI.a8t݋)3wywӅP{1Yѯ30̄06Xf07 ԽAeW@j,AUgTam]'a;[%۶s6n(\,US)('Jo Y>ŭYEA^EmdK/jƺ Ex Cj;V3'%\F2՝>(>tT2}y] >ON{Ŭqqhu鸘=*^q4Ilr+ڌe%D,"7s-\>RU Ļd樘.몤2 N#fO2I(g#Q L9-C}'=? ߉O'fC;cubO?^HHHHHHHHHHHHHHHOoA͗q'les';.ڃk+k7ol.on]\zpO7Y'ͪ졪Q歎Ryr+VC{ 2`M|g8CQ" kXC2s]`Vu#AXN<(dXJ/ N3s x+&s1g6,^a28gJcqݤg)^!{|vwL=]bQR_n (m!- g>7^fT`y}Y2UZRPzY{Y>)a]F5q:ҋBX.ט*E5RMDxI葰= aۼug{Ā"X5}fd 8X&[sX'hTpƟe/ƚ zjЍ2ssY" ny:Xg-ې8MY#ԖG8|km UgHV3|9D@aʶ~Vpb jzB?wf;,(Hž1gz6i28B|d(OͣnB'' (;{S /w鍵_|˫O_\^_l2ojl`6X\rfV*fk.Β/kFQVZswBW|C013ư0[xv_īhLr(:72t 7 h~n .a3wh,H* :.{@D B>+nX~>o2s@|cHݧնMREs-uPsM[5buW :ޯ<"MyIo 7g[/B6 zyBāYbƸt=PA}&Al#}ܒ*Ƅ;.`3Κ_=ʨߙYIoԜbe6 "mC&\Z3Tϣ˩!gmp\+ dž 4]bVurw0~rΞ9ZFf,ypA-%&9PEWqh.$`#.M|Y@m f}TtxU\Wr*,aEgDnK=]]2W}C!7Lމ')=y`lBѠkan8MMm:|فlL{]qg$$$$$$$$$$$$$qisf'w׭P+w{`de񃍧66V ͽvoumecgAw Ѥi(SYC ~MOCqTVP+7j[;!#~\ C,q+l>Fe Sujf[j~#2ra3ScF>X^Sb+)yKgeˮ-zI6)6(fAFTq6,{/8v-4:L=ȱpW}!}W /3٧㽁Pl~d<.>.D/LζNgg#o0<=;U_~r6ޯw~Ɠw^^_]X}*𓕍Ǐx򘿹7V7ln_[}psѳ_=xn=SJ{v;^zCSUv,Ըd5|2ˌ̂W7k| kXjI-Sھpo 98Sibu7u-E1BҙN:RXFxcqH3Qg&Ȅ`;N FR]I;Swvl,f: O|h߮0@xsMX Q%Z8$ܽ }&TQ^Nǡ,؄rz\{d.?)T7$kBeiA)w?OEp B}N7<mҢ38ұ7BQ`df < x!!!!!!!!!!!!!!!?:w^Y_[^}|og67W/NGFpJ9Rҽp. 1G&5ClQtؑ8R1N997:v 7cӐFEU|GbC 3R-ҫ|;iTTyBa;pTT1f7VE/sOXt(Ȼ:FiZ.Tz.?+>vPt"^X9Z^1c;6q :NH@7'ŬۗrvH̥꘯Z.Yͧh9pAsxE\5O EI c"-R=vz 9o?h^^Qj # Χv\K2 HrZ+rxw*q|cy71)FrX..1JJ!D.,ډBےj{Lc (Wr`kۖ[𯔂r5L??O {p(t/Fҁ\\t N&ӊ.ˏӿ+x/~֞-tK^嵇W=|}esfe<2sS`ڋi lGb4A]gDe-!8e\^2;|+qFG+ޙ@(LeF#V.zŴ{q޵t.$ q">awµq-F]09ᘛHŒd̼mr2lCG@n*1 `A%Lc[Ps2k@WKy}MI$__A/aJmu]y،[9% URSfoҜMPKOhw/Ø,9+gDzs:ɾ:[_ka3mwlթ\Z>R^%ʥm;F\2 `[[m!qЯc|"q0$aF&.y(:P]pG6 (8q6)x3L7HrZTq05g/9{/){oّ.וWK \BfPZ6_[tq8$'rcTnWgdžP٢*_]zzװ-- = X#}m#ΙHb1t"#`l/8]?/$$$$$$$$$$$$$$o__P ax?=y_?_ݧ嫽L~?=t'*LfvX^J/P5,ޫ패AV-!wƝ1UX#2sH Uw϶ tDb1/% Qblݴ+r]4gȣ__qёJ '}yD 5 MOHRu h֘K%XWn a3v:T)`6^J7W(V6u\Znu#;q#p/kHz,,kE"7'CՋϪc.b昈aJNԜ:$sG5eWK0!te\aR|G6 -Ҽ=}콂3UB=5#vSMTl˧'9gݪM^UWHCf"JOM҇]a?fAl +!p˭a@giuVhD;@bj0f_nQ3763|FλY.;'Rq&GW?kK^X*ܸt=^Ha($7Oq$ڵY~i{նVZ`++;V|Ap<'i|ʽ܍{K! XHzc p|lq~l1̹s` 2v7x! L݉'P˝'O#h FjӷC ?K#Q1(lM;K OF `yἂR4,EQTRY}jFeQC\c`8o;ҫ–091hbatTnG#]r|GWrg=&azŜJZKљSyYSnګ)aZt5d^&A&tW"޸+{09 SMlq֡}8UqD(x#`tO5hhP˩ҫx3509g͋'al+p[瓤sgg]΢9S^!*; 6 ܪ?tgH}yw^KM pV < `? rWCP<8f;4 7w+kw+NX/`s, 8H,X^[ů录p[n.}g돗7ǿr:UZP#_Ȯu;%Ci5$~*@R\SlaI7! R>6+l l g??mUآC ΍\ sy",'GW&9491&L\pLܑJ`:H=h:5I+<Rw05i|>?pv•Jse05O{SjK $p+f]l;lЅ{T^u1ޫ0Ԛt @7ޢNc]:N Faհ3cY9NeSϏpGyŜZbٸ1 ` 11[Úߠ\=-G4SL4=\CTRJ>Ю'\lQd= QM`?:C*X_{`cmN3 7wm^k˫7>o7,3K#*`/DA+v#5M:|9s+AUgBdVa +a4):F[3qmMT@;Y Rn%$මá#v-%]Kq'`&49g0z➥]93I{3Latbnz.hTs: f= (mF B#Cy9`Mbc9E_N6h&ġ9dqW. Ne>@>wxӈjWҗygg/5:2댦29;G?XoE9HHHHHHHHHHHHHHW/_Ɲ_>a+,"ƪgwaw]U8-2 ^%`ŝaKyo> y{k_{BH&AwnĊ6&N_Ǫj괪b֢(qt8t_Ԃh.ԩh(ְ ZW]lu*g7$[@M&_&jXΪ6҅Sْ9٢cZ Fa)4+bOMLllkLXBho5s\̘0U)qXtt^꡽u5aFMY&5r3UUL-Ǡ`ϪzA2K6b|H |XlKg>H;@͢>*b`dc9C@3s)hZ@/Of-,/WkMA}9~h蘽mMCc?4;Q3{7k 1+VG;/`u.ܼ7뼱>gW|ULhv(--5^F`ʫƪazVJ[TnbE-`9V*Q 0Cna7&䖸Y}ʞho(9;Bmo@Ra"N F``}׹;7JWPe ԵMoZ5<51 oJ̘cNք{aN4ʞze+J\[^]OH'U7FakN@ /^Jc*8~^ɉgdۙW&j0YȜ=ad wB[} WȜd {\MV$FQ͉“ټ(8PZI"6Hl.[!tlB^!cRĚT1UQsd%f=,j &>ȣ3 yR@>!K"#'fΪ*8%*J۸6tm/99oyGh7Jz}Uϊwt:T~B6!6{,S=TJe@ pG=b>QK ~Xyyym7?Md(KYJC>CΈ+"2^Zv6VrK/ۢJ,TaI@le6)N(2<#3ada9Kmq%G1Pc0F?MU۰.{O/`; ?LjݴJ5 \#SƪnTy]n;c9MnMO=O, 5nլvRsc|rgh1kxTͩ,l,gL9)9=[G!ފ{X )*A&ܶsO2!~|9ȣk!q&5M. a8r*W̜[:[3}Xgm{O?{ڃՕ7]~ykOm_q5Zp&rkkZն e~mINZYn Q=X9`mY}vOk&Lݾu"jp}3r4ĸ0#Mc2sHk %e;H:VAX3,yUϰ:}qߍ¨P49;Y2sTaMM `U0iBmdW 󝕖רm\\}BpD {R̜f.:plrb3x}f+(}TsŵgW+?vQىl1ᒎKmPdgFk!wf,pU8C K_wR_Ψm\>9M <-,:.n/ hz9$xd=:6xROS/&&g8T[|QϣWP|I@3I>]@4 C%< jR 9{WsaRqٞ@x( dvӏ~376͍G+Ogwaw]{V?{'lƱ򮗯޳7?w~\&DyUç*lAŇCgzmsN*m JfQئ5FW2 & bؽrgÉٸTw` Y,~9QaUgm$폹|Ĺ;$8%l`9L']H<Źѥx92IņHk6I6ָ~H;"XHy44g%,Oߩw\0PJkDj]֜?\w4W:$hGmW{:q305>|@^ȿd$hn;@cG4O+mO;Y(ƑAOlzl^ͩS9'̥4ƪJGEzvI^NT˺3앥J+U"W52Iq(?;;+&+&.EiP5lErvCg`V3dSUl 0ɷ^p59dz(yJW_:c\5LC0͙-0G5ҫ.W}JֱaYTN3$hS&D)ɲGŬLVP?,툩sJ{\jI(xn|d'^|4sT]Dc nOP{7+OG?[^7]{|oW=[}Ǐ'Lq;Αd)2%~[?دa&S^喰gU~#53?;Sѥn̵q#,C^ -͹3K~${rHx# L[9Sé{1$GRqRjnC1<C[I:c)pLbIE֑Xpi0+^Dȭ41 9}԰fU8ϖ=okCi K@sV0:G2ޭ 6|9ҫ q9ңƐvtx"+=k~|n%ܣ Hh|+xm3+vflsgOUi,Յ'+iprB樈3"h3Z>Gl[96 ,8D t,CQx(=tw4䲆KmTġJA 5lR ]As Ss,0`k+bD:%oq~bA1QI6zNOnP\O5!wsHR^Wrqx?1{C{Dzo^:)#* |Gh/y6NI{%]|R΅Lb#5gtyVa:C2{. xUE%O/vކΰ޹m4šC4Xڧy3,`z+I}v¼fIEg)6zw~t)N-x 8/hqØ-F34AkS#n{ [7eCP( n;ιk;"ֱK|u1N n520$PT{EXf^n;oF@"ޫфiM8=#W3`ps SŲ֟8(:Uud25ڔ3wWM° nw%MqMeanbkXV>E#_%ɾ{Wd>(-iRuxæ԰Q"6s)`!7s,OuUy%I}aCDFzjƘ  AO;v)"tpHnmTN1|O4 `K6(rj ``+gr99}䢉O7Wx$C9n`I۸WN NeS&-,$ܸZZs*m-@Cis>O^Y᭧s`}v pi8QkMֻ>_Oh701Pv~򝑐޳/q˳ywY[=Qλk{7W>ꍕg+6p"pdʋm~Xo*:rj_v<څJJGi|I@6Hԥ{ˎͿ*חJ:k_Q1TYFHL0ӹ8YcDӝil_x?4矔Y?߂?^HHHHHHHHHHHHHHHO;w20ccyuW'?+}(+HQ#+.Kjwn|2sXn ,)#={Rwǖ246Dלj)>;|4 k^ c\خ*#i9Fvq#cr#/mLµY~q^s,J3TyulCR6CnbD⮢a@3Q˰Zq <29^Ř\_:CvT4BGTNmoCg9tA )zEM/z77ǜ&S8g _IB̑#)H%|X5UYbj[DiEǕ:J[Pmސы˯9!9=B9)\~Md@α>݀\ɸ.2 a]f'$\/!⌽Bi!}o[e픋:Gx|9̈́3|W̃$WȘQ1%,s*^fulM2jō\r#alJZG-*;{+Y߿r'seDq sHj6Q&hFUbQzzpR1ca~I9.)ie"v'lJǔ}#Y741JOjBܙ^2BuC9rЏ)M4=5!&(WP<ލ GfJN]zGt??Cuuu@Wk iL;0 C!``6ߡzg$$$$$$$$$$$$$=oʀ ?X{x ql?z['EN,ij/%M-1݌g1YL!8vfb0dci1 θ;ݠB-j^ѱ [+]uVY4U/Bx5ίr ,=TA8X}l/D:U3`1oPzTŝ)\Epz٢Wt^ r3T"%q!z&k9*]+Gq1?8xp ;Ng3yk<3u;7M's9IyTkPFx:cܙbQTb*)Ẹ٤伽}ܓ9rZXN5&R  N/ċ%M>RwOYC67o?f_=tLF_aV3oO7ݙ Gb@pFfk q/;IvZmr3<QBl&T؂ꮈSw17*J[HiH;feOL0.tpʺ 2nJgjJMҽ\O3kUaJhYCc &>]x(z  SY7/ J^Y4at#J5: eqUt(#!l["Kg q.S[n,bֲ!g5^N릖 + iSlCwǨBV{u @tZ^:=75=")ʠfA)>" j{q;7wL=eA=EB*GPmJοPM5 p#:gCʚ{Y#5q,>m:OS&s|ZhuXWGh_5-X6<|/hH[dԩao+{ԕ^\dIntʶP[+o[-lPs-ZU@ Paj5ZlލʼYmUM%pqyd#BPiǧYԙ&O.I] SƯꝗm,3YG,ʻDϽO߹,cBIC~ 2[jhrq or.ȵܮ> ߘbj(5~>l,iYrsK.*0[H|5ƯSK-p׈w^Z;Tkݎec񮎅S1dxs¿f7 3+ȝv9O~A?V-kLtU)SY02˚n8$n(Q3pDR?S !Ld̟&]х->zI7 ={;t& z+(w>Lz/#G_C73nL2i_frGTVJ{Lm~}Y[ "?PYah#flBm}j꤀mlvidL{8w]hTj%:מѮ 窃S 7~f^..'*>YC_mHx\_+wvIxL6$d;G2MUŮ/I*(NM+z4JV*(q>6lM;v 1+ל`p_Ν%v_$eP2ײZn9e5ԡF5wqgi]bz~fuv:5?\xH|>>)e/Y.o*ʿX_Q"sT|6SG fSkԽ]k;AچcpM9i KQjh"JlNDǂ~FݟyAAAAAAAAAAAAAAA}}y9|_ϝIe~>{3|O?_&ҙTB}g9݋a}71΄T=UP(X@ҐA j_7 R+*"c(g`469|&9mش(jJB҄?e/ ZoY Y]iÆ{ qAfǭ<]ٍa^҆$$ʫR?׊4BƐыPLŀq&+t+WsK2.VdgTetPkcP'Χ#Y0x#-F%芈sq% u"ct.+*BXA==;RxE,i5D†f@\XR͂1V#e]ʸD˪_}YS{dܖZJV2/3_IU&V}7ǯ=髗>|?|;{ϐpvêYgA3dKlma`hXw61'w{- `A&"/psT]SsOM`Aȵg_юFTΈQق*p ?k)7m=q#mhGM~)]ˑ^bZXRێE1MlRxAS^J/7+HP3ЅǴ}>;}_,.K-~zVFZF׭JB'Jپ6@x"d;R8K7HFArBpt>9/(bY{IpA@E[hq!لԙ5;}b5/%% {I^EU 6YCWȦ_b\4߽)>>(p^ / - w3Lrk Լ Z~6F~{UG2 bRjhSt&5{U~yeUf8C_oNʐ[݃lwotw_ˮm90s;D8l_꟩5wΠrgp?ٳG/^<~˧G/>7n,kRK*AۘbTS&J@aQJ{LeOmafbt"w/l/އđns6{3'Lp^t2sEUNp/j{He V/$U*gLb\bj~e[Atw"by6tYǗ㓺Ĕ!PN)jwʴHWqĸ6Ӷ!X!W=koJofod 2WFDoIƗK"|kfR>nG֠d5RE|a*Wr.\䥋oYp M49e-BL(cE "Vȗis@3~` 'fz;ZyU锌h |%l6XH!f|AMjBz?fhVκEz#s\b:Δ~!uS79 [Jvͨ9!'^d +lPkpkhkpo@޷ַ=2LǒNxv;0tvtc?/((((((((((((((OM|~c?:z_<}'GDx_\B`%P4n˺S9AS'`*mIPBn '# q$bp`ؙ`A[ħmگsIwըn/0(vN;4Wۃr{IbZw wF)^na/u`fqDj΄u)r@3 P#*N-Ę&TEe g5L E_vvzzVۍ>zjbEVY ˭B{a[jf>$5Bf!]ˣJׯTe]x*Rͽ"`ZN tBpQ!yV!mYjHЯqN$&j}VMdӲiM=e 5>tPjgvW3)9jo_Ut[-Bi8t-5v)yJ [.q8Bl_[|v ʆB9nY 7W:;}g{hy݊v ;dZoL#߂ kw;ۏxIp|'O>˧GG?1 oT4wR:,5LcI5q>uj>y7rCf84n%܇񅽘k?AD9'<v܇.?;ws텝oH [Hi 9;ߎ`=hHtS4*0W^[hot`"R kUV ׹ -Fa+Ӡ%ZX2Fl#kڱ% dt]u'w[,/KQYVY:ea (URpwˑ[WyY(⪻}̫6+(W.KQjG-%FWbd .}"dXHQs4 P\xAf޸[j@]3"dT7 mOE(|P-ȣޤS3(9ĥ{ꠀ> 1#>z.J1j%$U`w9j{Vk q-zIn͉xE݃]m#)FvrrG̶ذaNt6 =awnk߇PPPPPPPPPPPPPP_ w2?=z>z~&wi Ol\Q9" k@1B3R|MrΧ[-r-~}]؏@3;{wŝe>sFDqv" dh$A_Se(ivW׃%Yk&Ɗ*HMuSܩZN+hi~d7Vm(>Pe R2bzo+w^$![z=KSR0SC[i㧶YVEoYĘW"GBz/BAh&.ńN*!ҮeUdg|{EͩHfd1#F|ـ}I3F)(iᗍ,8+?TqNnYǽ\ER6\Q{>q sAܙ z b>fqerf^uN57u{%CN.a hߞfS,eP0#Qf~ZeŪEբz] 鉐 q_O8BL΁@@?(2v9S?3iq׷&B{3l"Xs/k'\ JT;ןyAAAAAAAAAAAAAAA}}ѧ_~峿~𧁽i ׶See-A3vÉ5P&I)oxx\a7HҵPp`h$/ήY;M}35MV9J{Tmi!;%Y Z 8"bU_X~Zk嬶&qtT rUqu Kے\s["J;< ObKgHndIn_d/6A:D5zD|+o7R/c nDi:R ._]h#[X}54BrHjIP |9✲hN5D51wE&/"n"AW|[Ѯ\޹U~ͽ9E;! QЂR0栐Ro0fSb看5 QO'z i5L^=Re2F;g O%5 V ,-+r[s`] Sݙ\rgv+x? ~ךzm\ӵ9wWgzѿ']=B*akUΐQ9r[@R4/ͧ&JXa{3-߃=۞}yo}=;E``ka7r[PH(lQ#[inzY ˣjGL9q[ K7dMZu7W޶228Ѻf[AJz6cWv-+Kbz+gԆz$;bHgWޙ z[,&Y#uɀTjxUzj0 (]d슦[k9yř饙i{UlR_-UznG!d-B:GSV#d FͶW wM]w R8 *Ʋk7f2/"͊RA2B~#!eJ+dsҨ9Kyҁ@ d:3Trz.-E$) H>_ijm:GX8$|}fb<˝2k[u94M.[Ata/>ö±(i5-; O^||^|t/z_WǦ aKVܡJK8&W vWUgHi wmhG*{Ba +~}M3TCr[Tf +ma#sDn)m[F``k A_@]Zpp*9f_(XYr^'d9Ot%1Nx&<vwG6q"d\vX_?aw,wF5WقM vqzW kmP"'ƴI}b' }|\4l u5L T+51zQlDp*ƕNlY[-A$Ȓ"-8> -.Ie[Պ,QAv 龻op@F"⮊h_2f>͈J#4:>CB-c߼\u,")']pQދ{D@.ـPM(̀Pt<!kw;k ̀1ٌ.. L5uVM*"守XVGĝRiEꒂ+-YҢkjVic9 rkq>Ƅbgjb@3FaljN9'NϹV~4DAs5F&;cR՜Br!< /-v;~_==gH0~A|o)mʬ;DV|Pf}]5X7c4-a9 Pܶ JZqQ7StNvq 󝡠f9pۦ6t~lP3Ҟv|f3G/?G/_>9:'?}O/Ϟ/#~+1eO5nY[Aޱ&2Bq -z=}S5P g@1W #~?Zz~G/>|te} ̆,fxwҹtDԎ=u[ .$ۺܾG5m#rQNBLk!HX7+kCAs}S{&p1w`%5|=onMzJ{s >ÒYV:&uشQwBi,rv ֍a"1eOikڔ4[&}_kR=bSp*c:m[<-eoE w"'-gs52U7Z rEn RMd֚!vYϣ1cTͪ\ʾT^y4fQ9PrԱk:렁K6|5aS ( 2}r *# 3"dU_>kI^mOҔEWnfwUD( |>P˰,|nB7C?8>ܛێƒvdk듚|-ZOփ/uilB tNG ]?1ـzy>sE ɛY.;?~Ϟы'O?|~|Óf}=)hn;٭ [PM2+ 53^R o(a5rMSTt=o:^;|. ~[;P l0 ȝ m~uCu+U{3dHZ0b";6O"cĔ19mj]a4hWX^lά)߶%XRt K%;/KxKbW]&WZkbl]]mq#(p|Y"+"7Ķ w>\3 V]F@g՜[mRaQ{݉ZƨňR (5ʁL<>Рf~pՔbv#vmr%MQxՆB搐A0plmpg!nӨYQs.2ӚnxtN h|V]çvUC/gTgen.+E]%@VF0 rqT7"Ҝ5Fܵ{~ t|ރs=b];nHzvm/삒SF|)m)輟u8ZgLln+?|e3>΄@H|ľuE&1ΖàAl=jgvM?tu.K=35iEܤ5jMZOzV9vh"qޣw`+ȝz~>}?:WolnmR%L]׀ w * GH5DI^76ͳaZl:wmOFw,¶irkD5.}\<c{; 58~ӧ Gj[|N;gy9˳QըQPnqY|3KV;Jd1s^ibRGƴqZP=ӳ5e4RD+:C5ur'4Lf;zβ*BD S|3F tH_iz݇{x4=BӠtF5!\) yiwKQ; da4 ? nZf%;~E%[J{{ȯGt8@7(=0| &{Xi =O~W|&}OP[-ݥ|ۣQ˂_i_j3{uEҬ5i=ԋ[VQX\cINm #{rg(((((((((((((W?w.;姏^?|r{aĽ;9 ۚH7_”%wє\aE֎E~LȱOxwvv#M%hWT_po1 *kBe*~lx4C$/\!ab}k`3 ̸SЙ: wv']{Ń\r˶ՍGdCuSN1h=V9 sDa8(l0PesqZFǽl#L-9ҎmjVYdL8&θAo[L D)!eC̍n[qW ܌'e wdM-Kx^kI^ <nմ[o6c,8s"H=_@3ctJíE@rو/)-Ws2ʲ.Q.gPqH&j{ ne2YѾ;xcѩgѴS4Hu<[mw:')K_}@?ęjڄ(ISAkA!b!ʟB甭AUI+wIId_d'#2,:{QP-~>?SY_xV_vTLcmZGL;րR;c _mxS7a[oa 9v~O@7P86=+ڥ&Jz 7lF>T.lAxc,-HyỌA 5gD_}w/YgF=Ho][DShw GH?綣ݘkkwdcO=R kJ{TiKB}ŃEE:J_=:Lmä0>Lzw swrgt^K.nvwG6M`XeOam)z; sƺ1mEܻt4_}b^-w3Kcu=ҝq]l6&Q LhQbZFD21^׭5?2|LA@*1󲔷"E'YIIkhEM,GO74F"Ǩ>Uuj=@glY%ܿ^y"+";}+Qaf:Pôf'U??,̈́;YPM ^Mm@ϸsp*^^ʺD`^l)ǧa>? >Fr SqtFuZj.=tF厐:*kH*#o= D5kFB<9ρAx(G;<-fWj^jԾ&RݨYh,ԪksNQ.]sh9tÜqnW2|C5+ .D1#->>z/^~=O>~O>?&-5տAo%w0u%,]9bjV/~D@?u%vrtc`cl8 yMkF"rkۺpl*~=7Ɖ pŇ_Z|_'2>]N9*\{A/ 9vmm9ʆjg\=_sgܩkNz "gt!o 8(FgF3'q/_P\y<_+{I]Sօ)Cl0'u mbB0^ԷxeZn_niM"6dX/KAs*[}".ΫC| RYs43<"jf;W@3 dB1 !~eҬiaw.+9z>ՀA=ÀL]ǭH>UP n]ˣ =Tkyd-FAB$?\EP5ٌT1bwYAW73 0ʦF?JR)h"gOHԀ>>§ VP9 4rkn_6~y?%ejh!b$r@};?_r[Xnů9rDT ʭR?Wo)f!=rMďEñ yOhij{*DM~}+5yt:ix5 jwHp^*慊nbF;g}$λZ 9#|͝O띗v~x^>9ыG?٧ӏ՟J_j[Le 2)Og)0Dǃ[՝L26ܵavQ^ba7\ے[J{Ta(=&#;{;c|;OQ;kR>v%.oR29&F6}Q3$F(Iͳ+bB> )lChR# &+.sb Ke)0FFa[6>kccC9܆j8%:^ɰ߾nǦq}._ |w~b"湚3"D(}ΧܙS,r?(|fX0z?F0[nfr.Rșk.> [>>" GA#˩n3sW[}U[F}T+F_>K pj%`0I UT~"X-lO.fta?]ߝ'!FuUڳ,DZo1hv7KbW.*]wRfis&U̕m;̮B  gbans/_>9:zՓ/>z?/>ΏgU*娊"R۠QqΞ`g*voOJ{eG@n (A̿3wLP9fm91?*yYLmL<ߍ,$]{X\8~NpOc[د鎹 ` #NQx#_z=nS^"-+m覾9Gǵ cr pȘ:>\=VjylObmi㖎lY/y> "lGՄog_,N+IȾĿsMΪ4f[䗀:fU^fK+rvD<PG숑|!cs [ŕ܂,{z>g1Oc4geiо;T^ Vo 2)H9HٗW2* 5>8;=~X݃wW2sʯRͭjkT匥Ixx4>Sߦ_N>+m1voȆ65Th,Dl+dps;Ķc=3U KZ-&R۠4h:ձkUZB[AwuL"#{̮>ـZkŝ_<9/1xO~ş;=ҾiGcm=+U.U~!g4 4k敶MLp&}yq|$n,*Fe֐̓}%6 ̺!Hll: :nzp/qg08Hѥ/=x"36xŔ9evr_MD9tFΐ\T.r3]Y;# /kZk+z5Ą.6kcȸ:1)W-#ez*aƵI}ġ vnȊuY/z^FZ&IB)_-(J/ͺPwK2o{ Ql՜j܋巈ރ=B5aTXG;@B4E Jj&!7OJ֪>H6~דּƭEM^X vz ]v?]6Vp i%EO qgp0E0t쪆UrӪɾ$sMɨr>!y1PC7q+oW sq]V~vNo}V匪qCԇO~cU?f[O"[s[Qa}5Mcs=ٷPw lKڕfJf!ŝ:b*OC$p5wF:y;CAAAAAAAAAAAAA}|>9?\R 6AmSj^b5neh ^C*~DhY]<~ aغ2'ֈf$2N:Vc#Qˢн5SmC#d'\ ϑ;3nk?slygbŨjxSiKȇ ;V9Hӗ~5}̝UH#V׻ 7WofP VµViC alkBEqM|RлͦjZ㖚kcr~ةF5^)h'%yEÏ#[)(Q}*+<#<=)c96+1Zu=?HyEL Pz̈́w"ZiSL*aPr+2ǺN-5 X:q 5naFףt*ε&15qAFVۍL]D&)/D2§T3J3|M/SUVuRQhD" h|?q~PB]!SS^H.8Mf8?px5~=6_iq=&dCA}C=n_t&"d|n;1=HZÆ z}Mbq75:Akξz^W7R5Y| 띡/~ǟ?{?'?/\JHѕm MEL]kW.*l!X.˿ D$fm [TL*laHhx}wd#1&Wu!@>2)<}qnspOg'U4}—OǧNA緹k?X.$g[ڱT9 W9dg|~4V.cvD:qͬ6_")Ȕ%,.J^e]h{k\i]tLGG5)Wj2 x:ؑ% mW,Rt9bdSyĘI+eݸ\~*323r9䖒K6 %gD4=(wW2˲/3o)Ud:ױk&"pCy(IK߻V/*.Qv3+ |' q[5(N1%Y-W3$׳; Gc !%ŝ @6w@GjDfa˜ NE^vy֥ʬnzY3z0znƨ Z(8ur+.W76UCN>8g#-|)t[# s81|Nr:&#qzdQMRWZ*ʅNM$i)TZb WrJ;g)s6(a3׬/3!lX3,&Lٻ۷v]w~ŧO_>_|XL6ި̅ 1Rk:, H[+?x{>؛n{" DW{AHo!h juu]=Q8rkP刘Bхݤ0o۽O8eʞ;3ӗkR~gΆkwg:m[&*R;#JGijJ;qHibv fƼ*.IWUf&uب:rvifZEV:%/{QA6qbt=Ɣ*k_^ɬ)10Z-"dW.ct-J){%i߯Nܼ".Tq6:)j "aRM(e@@dWh ڮf 7sT%lHh=^C!>}P@Q3 (fbD)f>Ӏ2;ˑYi+ u$`0OBE٩ae573JWV7ApD⧟S<[ߠ6k(ڱuf'0&{݉Hܱ-V72ThRsJA+>sn~>MK+\ˬ.&W3j;&U|ւrn֎ ޹]۞]=ҪqvI3"wt =MzVW{ylN\(gbNSkBK 䳸yj@Y*f _/}٣xx}znܷ?ɘҺZ9UBJ3`m>y&b]NLv?vжy&.ntma#pl&m|iǷQP; {tȗ\]Ȩr&-g;CftSn+CD3įՈQ (> .gUVfUfn^m*4`3F1tA4zX!Il([VVN\~ȧ)X=(Z\T^|  (O@5J,ٝ+fҽ!YK )|OSQ /לBgzn]p=JRj oWde7Ż`VL" jt3oǧY@4#wddV^/)+3ê__OO*eC =|į T:ꑠܶ=rF|P75Z+4gmn[݅P41(qK-z_C8/F6c3 7\E;rPyPyQ I3p1m嵍$fcYWKӊ3.Vd]o',+Sj[D5;>n>|])l!|Z5>lJG@;vMFBım_N&#px2H b] :WӢ[j՞>lF 5jU1 d = 'osg~,9mܡurg(((((((((((((o@y'繳owW;$G_}Wϟ~O'~woZ{Le 6*2*kF▅\Gv]k; XHnЎFT4Llɰ~"C*'4D?㎘fS~0{C=x$Dqچ9ܜ29|;LZK/Gw'cC٠aԠ[J{l8"0)_ ۦTBcice@Ysv|]QBeYIU)w L:>OLccC4svޜ.bw!_ZثbdE瓜I &E]"EHݬξXu"7"'z9A0xe-ᑵ(zCgKQz}mJ^Fi4Am9bDiFY C9f`U]MK3.P/g6WSP -:jx5Ti%kY)<ʫHM\Gm;SjBz?"5r~Oj#F/̄{AA7v%@紊 {UlreaTBď3Jj&.~yeY}9K;,]pBo=!_S_ART8"gCڷfZD(94x-Ոs-ҷ}b|nInz5I=['jS7]r<@#D~x0εsh_֎TNH[Ha*l1=/Vj{@ck.mJ߾~ﲓYZkÖ$* ]ll$I]|\5e 8r鐲F8K C*[U׻ŜΚ5f!DHxl-~AeҬKȝ+rNu :kTճK81| ـƀzDbڕr(Z*( AydPT|Zs=RŲʲ.{]Ws@tFg3n @ i7sdf]ϒEI"leR1OzыOz/|'}?#Vmx5b,hFk-X[NԱ݊{w +"1-rnZѸn4.n*~T0y3 #zn{$܇ Ds|4t,l S|֧L,k>;Nd:/p/loA2u*X;R0r@ȜM3NnI^oH͜u14:РIQ%&tqܓĔ>:INU@ @{$eR;qVEeY+]:fe1{Y>1o`U`+blQUDfdA1lu(EͭcdQŬ/Kgb :eFK2A0`ZPM.cUVf_(~y{Yb2 D3 "e4 QU0jwu!{JFnˆ;XcP@ŝBkZǧ0b=| Rw+ȹU91 tY0P{KK:ϫuF4UĞc{o=$HmߍNY#ͮgf{߆g$}&ӄz=Vd"ވGˆLz^Q,VzjrNPp Zn|PqN;RhP:a+qIXyX M;ǝ:%ՋG/?{ǯ^>՟lj_H;l(fQd&OagӱŃmÝ.>>x̿ڔ[ "*7aDP5;&@kQ9zp`h)uHc݇ w,gbޮk/y_O_mRi{3mj8 ~A/Fw>Ds3ȝI.G\f iGdrjHFԵvF;mazڑH_{ܩOLgPL8JT=ʱ.\GoΫj7Lb׎yD ac],p<;m _c "QlKYu4;*/}#Qi3RLd_ܙTJ1Z]Z^^uEk"gP8&C1tC%7U#gT\ʹ@Kܿ.cVP{~5jQi@3G@5%eݾ,} @g/e΃)h>ǝ-|Z/F!bMz&gU6f\ɮNʺHM/gbK@<UÀ2l2ʬK9Hj T\C2"43Z;xTBף 9zni+.T^ݹF/ toΧ>:I ҥ0( 7z8Mŷrn狮ˋ QCCzN;AF3ħ -*,b_ϭξTy _".Sl||L#nl⁈g=B/KI~L@C̍j9#+>KoSr}|^{k0 YWRQnMWsk'éHrx-jl2fjUŜP*R O]VN: 8T3]5ůSxtFic3[2Dwh];CAAAAAAAAAAAAA}*7.&ݞՃ!|_ O?>zW?{_\zpͰDU,I#lhAu.1M1B=\۶r&VCP+XMG|1s#UڜB5(g ('"MRĵy_ױ%)Bkp@F'q| =Kb| Y,r}魊 eYUyٔ+yRJQLU(QS -B2`t5B+EM/˼P}<{»WzL#J(& 5xьH*&% 3ޫȺ 3* uBhP]qQO5 d zRX#S|-Mz+[T)kV Bza詄çY;pg !94Ros*2.VgQ34 P:71!dƨ!w*+|&j5eΈf8eGIL'/;Q׀_ڳ.1K{V[Fոl؜,x#w?9[ H,֝j7  w=WUשe>ʠYܜz+埏;#Sy'9m,5wvrg(((((((((((((o@J~nKѳ'Gωp?y`3K'poyzg{ZwKSR4 J_n_Wͳ-ރ-lhȳ7td`#k#1lȡcuo> ~@p@k>q0AsRc0 ~ M]>hڋ{<o|٭} n`2Tq1N<Ʌ\b϶ zQ k;Ma"|%/˧/YA*_elҸ)YL߽}+zAέ[[wM1mbڜ2u1ul\M]TKrilu Y%,I 5WYsgZAvz9 ,78BEN-5b(z8dCǮAiKQU(~=jFf δ>,łQ>}`hj'b8=7Մ{l knP3H9iYW2۪ k3@gqW(k]޽Y~"0=z8t&7@xBR?gRԠg!n-Kqn ku&nlud}˽t<x`RjZ PXx@>w”SI|5t&"8 *ƅo,\5a"gm2hl7=E;gJi}pQ;qDcVmjrg(((((((((((((_;?8g_ ];|ի_>rG?ٓO_ѳls7&W{&%/d(yfa|pC olMDwýp4Ќqˬr[P3W9r[@32D{]+MbH?P:7zoNΩzď9 m]Axs=OGރTi w>E`yヒws;б`.c_2L` T·_Sq!wMS%Uws-a.k킀^%1mlTƴQUrJ.IFP5,f%Ie3ױ)tG6gUIxӍlf]ɣ W\*ͽT}!*#4 xS0G6`49s=2Ry֥܋u%u? eSu|AHͬD\!W妗e],xOpN0S? k~à T%cQG$o-i++5,:@;5" )=|ff"lDmR%rnZuEli=M*K2T3g܃TeȽ;M)]c~|3q$TT'$H}z$V?X2&AWmqrb]C.gӵtlEy_mQS/bhL*N4O3@ϩwT w^ek79n!PPPPPPPPPPPPPPr珞|Փ#b^=~yы=ɫo?9Z >Tt['+Q]Zg%jvtYu#AT`"-F5}CnM=3$m"d;37Lcpp{13:cKiȆB2ۺy?]}*yJ-]{[y+S~T 0>sl-Ev" zgo2m]'6 ~ dk¥r'S_G_vUP= S+AM#nYe5 P-EW/+nLճ|"*Kؕ }tҐ2tq}bBcc9Mh'XSezɖFʸa9|jΊ܆N5,*'v+Wʳ/妕\dW)f>ħwbSMBHhrٷri:Q?"IŴK Pr˳.g]\HHF+` Ct8įG0Lz3^lɍm jaeX0ΌOSٌL ߙbWܿVy2)'~5V_Hs&S6#wJE+ݼYyDJ*Z^ːS=vTodpSMuUf]XiH{W=$l4}m%L`.OsȈ?d]orkA3} XB)Egs :C -֯*w~OxՓGOGGO^~r>䃗/9ouo+Qmr]+lG=n}3wa-=Tc*gXZ5v{;8_kǃlVñX {Pn֨l(3 (!>u%wx x&c>zl"XJǺұ)m;r?uIߔSOqU.bT nwHwK|btY]nVtMUl$' ѓzvck+Rb9#kkeEŜe'FDM@Qznzz~ENZyޥ ؽgA9|lJc$CXv,Y93t<((M rIwiW3/fe^޼,aQqZ}55bؠX%nf%?*{M׳ &YcA>eO'g>>x:4j$Z¾]^uN);}J;܀Q|:7IU:y m)#J14#B3a%W ߡ$X1=c0ܯ׀Ψvj,4gyMڳޢ{ܽ=|>qg"6̮.5>Vk>e|1?]×esc|θ qgnS 37_zG7?9zG/?{G?{||?쟎 .]q* # -Dg -TL;%e֐ %3lѐi:fiFr(YU96j绹s*GLiw|.ʜb{I|*އۋ a4g֟}q{~']l ӛɭa3D3=ASN=r"^jYIT)j'=ůremp+4͘#Ą.9ONĸ6>]h@,T,\7Ht]ja+9e1gn,HÍ\3FpRR 劜Ko [Y|dZ(z>Q^y2+:;Aat=(ՈѴ\!0U%QQUyQp^6jYˣ,/E< `<UEU9*//\eKF F 4t`j)jL\$a4rnvuv:rY0=QlAS~tϥ`3-O(3hN ap I=3ˬ5yYڳJ\o5,7<-z̺;1=Q|9ߐZMzO%T,勵J8LrtM!={ʎ'%3%gYs)0 3ԯ~e1n>z]qókۻCFq Zn w @uļ!6VԋV±\M3v0yF{m}K :B2őYSifj?+wN9{E;2ƺp|иf)#3i wfG٭PPPPPPPPPPPPPPߐ~Eы'|t'|~K|/꣧?\i 9b#K^-kFAD`˳ދMPtT"eP7PМF=|vϘ>o/U`\p<sl{,$\q1LAҵX۩>AYr]1^/F64 [{0ֻ&2.[ *wzQ;+5NN/u)lF QjUZbj^zD1,N oS|=3rg(((((((((((((o~e?H.&Ǡ`sKlpONjcL !&` Un9j@5(~};߀ 3ܨwQz]TZ\)iXh[aUMbX'5i֘>1O#Ӻ!:IL|="KEi ȣQ0و URr^z5hxZYh@. @$_GmOU ʜsW+i*n=fBz.gPFRą)8$JМ04'rzKzD{H@IƠO@/A#B2 QG+.rNyN&)?He:k|wO?Ռ;2[Kns.V\+)ca(iQiWh' ;fߞ@Y&5R ;,brݠZ;Z .؆c5:0^Jlj` `A"Xs,,yϝLqSĜΧ/qcfHǹH4m6; w q'G/SG/%GGO^/}G>{/>ǯѓ_};?%oͬ>t~/|}uUTR#w3vDi2Lg{!OT * kQ8`} lDoP (рnӯ#D$><·q>h-Hc|@_VǷŃm^raw˵tmmOE+[ɐܶ!gW9@l ta7kGٔكr!tD#1 B j5_zGYyŧ>'q"91jbnkUR-1 U75'kKvtY[mCZK6lYr+"p݄VGm,GUVu,Wu/W ʐ_`-(0C-[4=լjYChzn|٣?՟?'??VMvE9qz[T6;\̐0el56ٷΘUۂG4EKO8Q:<wRNU#mb¾ItCr_f k'֖֕p}:Le(Ow8|b{"蝏'B*g fEΘʉ F+A 5J^uV@}CO#ؘ&>Mk؈jm+4BnWa(we^nqWZzgd=/c3-AETQQͿSPV/nS?a#R7}jyvFe.ܾ䐴]ϫ-,(ʾ\Z-uTa̙x~R_5!|~SSPeUd5iqQ, d.^DyֲKnynK|;ce)Xnz[L:1tN]>ew6y|!|:>Gm|4wIs4ܹrg(((((((((((((oB%(_~?{珏^>zg>hmV;fbu_7֠{9j*hKXRfw SvQ̐l5Q1ΈSۢ*[HmkԎ _;R嶰V9_FqʏtXq 4a;aȝ= `law}x >x7tփzÄk?6ߋ/nOGGV㖅±&AA!mPnfoaPxn J{MaRv}:< HdźIl+[n,'3tNmJ矉;)\~ӼΙSB6 w[Ϟ?Wg/?77@RJ-ƕ&+vs$i ]VTpk;F[U5-" ( Qah4n ;Q4>i 6嶍sX)SWo͇wAsr~/3x>H>)|҃-֎s#n Disf@΁Ũ_6)uΈmP-VdR=ZޱӋWZ٫;{k\5yJ׀(UϪ5:nS]Q]@ʖh/8S+Rl묥YG2 r.9'2bYŲ시Rpgci*B.F%F~evZIŲ̋jN%;t T=F2FzJIE}΍6JG1TJ{'w27d B- Z_ eIEf>~4JFt O(&?([N 3u j92srE֥ Rn Zf0S9Em!iz'Tfâܹ\q[?{ȶwgVwHX{IxރH#djib5 [kgؘ6bս;oߙo|##yɬDVć?|Vx\(O$ $y/$RPDs~<' ;ugs9\Y\uLrgRH"E)RH"E;i ?޿l֖VU’:cШu'KÕ'ž|-)[M(Li-3ҞV922kJfMˬ5#+Ĝ̖Xָ~ pc¤擰ON>rRj>p%/54in.T*Gj.XMWZWZa3aȝpl&e $pQ`x^ &7%sBn9P+ibdҞ?yYC)J:&7ybŮ74i>`ƩL;y7wQh`qgvtוm&^p,owg9Cޛ0:t*b.ZWƧo/5R[i-ͽ s~A!S0I$ gCʣ>ŸĿwsޣ,X:>JiNȕw^_ ^S2aUNg Gyv~ZOfkDсnzG ;O{n\qZĬ;/ F!!tPFLb޽Jm0pFu0 w >'Y#l0sg351MtHbK=a8]m~_ٵsm /jF@J2x䷿_cGEw6Z!snd.(DDҰP;t g̯,z6t>9|zi[8gt&3)RH"E)RH"]_w/~?_/ß'?ɟ?ُ~?_'֑֑RZJKJnJIWaK3ETtr!ŀH{iz&JL %u|ZS(`qu LCd=CXC2Ԡ+g]'|,5'C5r^x)ᴄޛpR!vǪX scQ5R$:z\ >¢G`/l@0h"j2o`-r:w8cKL#O72|`M=91%妌̊ict[FgM(o IG2湤]^WaNmީǜ:ܥɻ5Y.Te]7gDT)'o\ٻثzƙzgq(}{-4-B(Ƣ7ڛۚ(k-/5KȂjp&>k r櫁:*v'a5ƭ!w/qa tDsݧ|oQ5z!D+bE\0Sx&@{#R;b΢<k#ekvؙ0[pt6!䴱q`̰- \V3Zywqf~m;]Q+0Y( "`I7 G"2:;> x^i˳>tQ's~pgsxN8xcQ],ɝI"E)RH"E })wd!L[7G&7wŏ_?/~'___?~?g??/O~G?آi34'[O%^l.^g?`?H# Oޙ}`;RsΧt5e0fK~~5./RT)ZEkp-uP.GP@.XÕ;.n#p#b.R<*o71pa).1gCb𨼣NWZR SBi,%D3Nʐš ƺ 0&Ѹq2PܚK9u -ʬ+Neڭ>gP9l;כn,PG_LzB3>jho 8j!U ]%Nzn^kn7SJg/Р4-ڬ0`;sC^d^iyEҠt5XZ=O d\nzuS6H%H.pϜ`)ϪaL@XaehD6u%|sY]) b,?bC|ο9w~Ymp:aܙ)RH"E)RHߍ~şW_~??gݏ2+KG3.cSr%㫅 mlzagl-5yΧ5˶~a}Ng[ĽGp2ǎZ>\ZFmTpJb9T*GR쨼ۭ|u#^햍FnM(lI=. 8/YgFb -fTƒXOVzӃGLm_lYxW Xo:.5_5P[/;oKjCYzI'z1G#d?;YEJ{#8qzJ{DOw&5L-m?=ߚ72Å͐1srմX f)s^dBg|,a7gܙ)RH"E)RH"_W_?'? Y~D=ϖ?aLureܧ+f]MڒW7CL;-Q=sF>8vfV!%|ZO.t!R٩'G)#5X=£5W0t>\|8n*q`Ok6RJ#.ťͮm;t$df8%3k@s3&isg Fm$5sd2e3&{k[7\):e!A3s. } >cf3o5*̽Ip{Η?1$6GGQ0l#U E7Anb^m}sWgGaƇЙ0懰{7t2"BpLлK+fp4BAK,rO'!~:qIYZ![Gl0h–Fޤt46|{}֣E9ZS3L3 E{YārzNHL'.($gGĀFmi5^Da7h\a-a"^I6^=18Tƽ^Ak+>}=&֌g&/;uڞ(NJL1#+Bh/XIFLj9z` n%jL, OzHB!ק'8'Ks ɝI"E)RH"E)R;wO?苟_|?Uq?+Vz٤?}Ww*ﳤ\}r@\y aښ1=妄œT!lu} q:6#/1+V73~UbG(LHG8QU,\G(lY J72.̄KM܂̘š2H֗= W*m–UX!y߸$]ׁϪ) ^$+7gN^=mzphx eީZ`̩m0`s1ڔY׫˓ZOi1zv'7SB8KDžWI u=i@8zO:DmN{K& *>]7A\i@i8;*p!ZjGr%sΜˆb8MCDƩߟ -̵QZe67 t4>B80d"uH:/>L=+19*)Fmkd\jxsG+LYͧktV=x zQ3N5˓u ʆG͒8W؈_i3J[|p㏹3 v\rg>7f{ޛX1dp=ug6(=Ȭ[8͇`#!%/A'_Ν ɝI"E)RH"E)RgÝO_Ç+M=JB&\B.cgH=Tp_='fw֔f=wiZBnJds|3cSkvj *BZ?\%q%z#5,vǎk`{ B#9WZiB3U}ЕQՌ̜py_ĶVE̕*0;IVk֥oğOF5QR9@}-[h3J[1:T =Zed{y=.6}m{3.ˉOlw&EpV ӞS;9/@tr}uޫ᳴/a0e_'jG+}E]EZ]10CC 6FiC 7RZ/.5tޑp*C'di +3S0,+F!O/ͳ)m`M/h\i@Y(gQz=}-.i0aElƿsrց&YfA 5 Հ%X,ֹ j%)Dn JD8)!d^ z^bO.76Ct_H;3ױ7ݹ7/ 1TZO$,ug\ DF3,ܙ)RH"E)RH"?g??,/ ]0YEEtCמJ|žTSy:X[J[NjJMPTe}`W=0W!Ú>皝ZfI)pZ?5X&#Ӏ bGQE0R*Jœέmծb=)Yfp:C%.3$?A'|(;=u/'6a>lГ>D9f&ښxz8n :,guG1"]̮sn ʜS^mƥJTK]tja͖+&n5-0qv'݉q.Οw'E*ELwqwcK z$=%  b=AqҀܹ4ǥh:g:"Y3s3|RA̾6%2XZ>]"ts;z!G/hl-%ƞO{xI[rܕGCŃKBa"e!0,w+JLjr `0(S2H߹Fii 7tТec(1@`2ؐ;x CYOiޮ^kP{=Fk+-}u(3̒_p) ^w!|)PRs[svnO|SZw“ͅ+r$;HR[ 7o64D#&:̹y`֏|9h> a'ΤH"E)RH"Eߐ;//~??O?O~'?ugK}{LyOɓBKu`~yOaN)-i5ȁpf%v+;$w.ZbkJoO-}4w}f;MHûQd`wL'[cC{o,"FTC"Q!WZz[.5 ޘ]z{G_^ΊaΛƾڥ'wzg=" EDԇ̫m ֋CgJS8F-Lft `Jү\5_ h =Xz[b%!{QYr (ۀ1J-(kQ 9ޡ[`sk3j8xE',Dܓy`;WrAB졎 *rksw4_2 xp.W9bgIm )'5gWs{]_-KP:x+f$R(LgCe,PM{7J,=3")72Clt׾[}sCNeg]oyn#+áA'iWn!b&󧸳wx5<18nw :G-wY3$w&E)RH"E)Rer2sluޔŸQsp^suhvR?Og?O??P~np!]dO+8>DKd_KJk\U0%ӁWot1KJ4gֶr7yW,U5rkX(=.ƎtJ!RΡJ.vT Upw.3 RY,1̲e[գH\ʓüXq#YxR9N/wR焬ʜRU^xڤsڌWBiwJr몂w5Qg`i&Opuma$欈"΢e& /"N0 0i]ƥvFG+3,F=rgiAn=޼•vr;* |URsFb>[+eN ^qS޽ RWҞ8S;·7ʹoĵ' %pYכys |=?h>~y3ɝI"E)RH"Erg_fB|?~_şG_{l=Sn?Ftl79=XyO]-T֤r$҄M9*G~1g֕[y_~##5g To'[1&^kLYuh m''SdKl/P."rV"rR 0L(EkP&3AKwʫ}WjH)o`6k*.W@Zym)TS+d)Ƌ{+MֆʇhZ8=yqa2Љ8 Y=vJ[CWg[W$ US8f,qZ{/5Qۛ9ڧ=w9g]?[Ր]2Usż|"J8 N\iƢ<]sDpvA8~;׫E)w{LhKiFAO30:=!l2tcjxnl/XT~U/^bNCX N9x!ySW޽@:=Y7lF۞lϮO,n?Qzq/=<)=f6#>a`G8>Ox#ɝI"E)RH"E︾;{ s6r/_oW})ф27 E*i"-:aSGeiS[ sRi,I@aqy)#5򽵭#ufϭȋoSRsj9NPRATd!n6gf 8[e}}_M 2b> 3.Z!ZãG[{waD(l.j{_kcoxT Ljf,8brg!(d|w>%ȧ^|3 N1zy7:m֋s1O!LADOƒ7Fs=x2x7f:dD]a\W:Ҧ2x)c {\a0t%sJ{Ƽ X{ϿGPbv9L! SWrd46Lm2z9+5'$}85ˍJ[ju3RίT)||Jj96 BXQHؔSJ{R}ͤKZ% !r!\)P UsZ. US+JpFm{g; [o\,Usͻq@mHmLxBY+WG_; #<9.~pLmmu43.5?{r  S/BL^1_y{_FaOuqgF-妱c W,oҞ!3`o=4c1[voi3/59:xs' <խ̌iwT 2Oz~dϟ|}O{>e/#\;FdcEl>9F;"E)RH"E)Rm} lļW_?q$^U:8 ysN{HLnL˛ sRc֒rsZm+,Y{󓟙יi*M(l:wܴx8^OM mN9Yi[tӡWꍄޝZ,WP Q5U"U(Fk`;UÕr\ W QQrJ.T^v&1vFɭ=Pa7f?.b |~~m; n'+R155- .փ5)'473$;yuݹ=Nu޻9 M7`RcnCq89O*'n4m7󺣣C{Ӑ;CZGCgԶƕ,[>9/aQъa;ަnRB,f/ٯVż(ܹ> ,O;ļ)v?z;BerKO?hvZ,`,AY (hֽ^n'Ag7Ԏʚ;cZJ{Fak0#f⚍F*Lu$c,T[94xti=ڵTM:~t6ȟ f\)ǎ~JkIaKL_#Qg1J 8aPqh%V)nqBrIDAT쨼՝6ˑzVT pz@;â XV &&5{Y'd+gw{[ZSʇz!G/$ qF> 7;fX}:!S :ǃ]ҹz{uک,=y=C7/.^d]nyu[ zkAZׄ[QYw"3Gxc^ڥJ{3bCLgI'|\Ƞeλ=]]le7_XUٳ*KVio@KIamfؕ뽇W;Woy8ץz,Xm̓7W\ '^C0b+q6S>|~T3gH.G`]6B!;l :E>9d ɝI"E)RH"Eﶾ;k;/G??h$_)\.hE1uDrc SFi*0O@-o EfKq)d+ܚ2I|YW{.IL Ks6,cBN)q+YT(4.FH q a#81`=|t d#hu : 2X *1F~5/11&5J4VbǥqF"gI/roFR8Rr{RjO*SJgZnKK-I ̆DFNnNo֔’ӽ῰3ӂENUmh}SQtj.m֯Kh0N0s$ٔϻ}s"y.Ugο§ XS ͓]![%kQe. kB ]3 2 D^>Agq Jywqq붜O׋ރ"Tyjgrwnuާs:ٚ>>x*kNeJ{̖e' ָ3:G>R:;A@OwPBrgRH"E)RH"E껭o'O"皾AiGJ ۄ>*[;TY*kJiIiHR2sq!3ΖČm@φK.G2 ̜ۡTs2F}H(q0$ږ<)$pǒrrktH,SkAr=uCc`As C"lݬK *|4%̟/x_bۃzO\fJp1 &tčj <<\.Ǝ0-J+mW؜r2۞XLe'm.1FG~ˆX6X]u83>V7#ߊ/'xȼ5aQ[ZSb~0YC3Rټ[sk2nuƩ\G9 m֭+xu9,a&dO(Uumv7[_ 4g8`[cQ7nM=/xbaBR# %rwv Ӭ^5y ",5Da *}lkeڥ+-aɬa4¹οwyyyyV^ -B J> I?S X'p#u(])tu7bgXjЍ(se. s׍2u^00yQ̕po]\jn|At皜;`b?6Y BBEI'K7٥=|#d? 2X7 x _٬`:gBW#Jl-F&co3RІiдoxڃuV믣غO:='7~ON?q?D#`&( /6ȟ $~Dv %nT14>4 ;'q{ɿّ"E)RH"E)R-r5ބܓVy3 p,@3ȝ푌ƺdv=CG#%qWJKRaN(-=1ܚ9 -!ĕ(#q1VXvZWBjٓYJ[B~@pS6fP!srsVbNJ)5^,2=̛U*a2OXC6vqZK GQ|71;)ܚD"|AcAȀЙn }e-XBN=u( 3̀0ToEJzum޻ 4 9ZA?:X@44P}݌lKdUTʞ Lx%#17l{7]r̛9FŎh¿؁ћۈRԶ%S^ `Ώ.rw>ϗ$~|hh˟ {* ϸ^h<08bU0mOz'ݼ ;w<8v+y"E)RH"E)R59<ÝތyWJhBh5p [+-)-ftrSj~PaKHMƙY}c0`[6ߖEܙu~(5@ln:9Sd:Yb>SZfP`FhT:g,\wj!XY"[Tn%{J @0 ز/&`(li#L[v\>R)Ǝ`J!X‚K'4u, X-`ЙEhJwq5SZ.PW۞vߓ'szeS;W FVcNFa8*5J7dÌ/ɇhI (}MԎ&}!F梐 : > 뼸ΝcQ^Fytަ5. \SC_ɝ!%(ký{{5{d,k2"b;Lx૚sZr8i<ɲyxÀxF^)JmB%ܙNm﫜/AkhM `e |OZ8ٍf`)ssID<q:p N9cqw:4f˞'I"E)RH"EoU߄;ӄڞ! SY`fƆi`iZk<0w܁y7:[:rd`ʝ#U0r'; ^l !j._~N?mYbIZsJ[Fi>ރGڱycyPobpwa2\;A3X:Uy$IӫA%"E{4ؿ=)ښw;ÁCG Rl2UXx4$ @Gc[9.E#dk0S?ἰY+aahtrC2G8"aMx3Xs ((y@h7 ؋BނWwD3 b+ q=ݮ'y>h)__R_C(,)% 7W$ܖT9Lɟ1@>\?exds·y'iX|;P_`#xy'8 f=\H0O3N$2<@'bLppɛtGq-#E)RH"E)RH}[&yI0o̯ͭ(m) vVcr JkNe5rkR5xpFNjֲ[KoH-V[=8_ŝ.5C4KJGK;ӸP}p kYܹ0f#GR\reޟ%ɰq5㕉b8SY !!1̻Iop5ó 8̙wSk[S9Ұ|sVc@U+o} Upū)|=2:3De8#op3;w ިs7#ߢڎ)%$ISsnx94shW`)t;ݺp(ϖXWf^6"\:(C˧BN*Ͱy7;h6Rw̰[r|τi(K+bkYͧb@t5A޸Lih~{_EXZX U @5tR֕[KOnQ.^ӕc-{4xcK5Sԋ?e u5}Hko|P GNhz8…_ɝuw6 b{p_=`7jo_iz{wqdxQ3lB , } n?+,M귴9#+%w QZS*[|oe;ge𻜓 C_Y;Vkz3`+zrY1/\)̺WD#q`pOn>{7?r&AϹYK0o7Д?FSNtLzYKY`m 9c칿W)RH"E)RH"E7/IÎʞ[RiF6EudL C"qsJ[ϰPW_\byTqeHZHM2Cà륂$ k>[ބe7V#1BU,RQZԈ-:Wpи,s3 xw0~v!V;Sr9KL %c*m$v7 e/m;H'2;ol/-a\np P7Pxy!zDq`dee'o '^GoZȫE%/5ep´>`k0 q`voRZSB:.%Ҹq ѫ)6Sczg{u/f=.Üw`N8 pޥ+z `%izk37ڦo_~yav*+6&؝N[c)lo&hP^5"Lf@jA[/.5!wq5(G/ish€5M0tK/I{!mm|ƾæ@x ? uQ MpFO󅞖ڥf0iv?Νż!-;ld v B"b)wrh׏Ew&E)RH"E)Rm}v`%q,fIZ).,ITG?V],34М8w+n7%0P_7Hy5r`K-Z+J'b4e17%T2R);♅С[k ,"R 1%%]ssm+,TxE,ZD@6EA{^xq;ǂẽ}l91`AWkU) F\Ij`0krK"~+Ĥo;sIVU֔te_iM- )ʓAVpV}2IJܺs* S|;i3+2Ol:ufye#;3#;r8 Ƒ8x{-V.#,=ʮX0mVOg-} +nˆhZ|a6̃F*!S2Ba40C+`@ ͔&Jgȝ+.U'4'ܙ^hk]oOnhnGahl|<4ǥn\niܸ< Zs&w.^i0xKAdQ@gBp#^2(B7`A<8qLmoo0t}ֵr(Y|'"p.z;z~L'kN0fx3uï9!7?jxj"Mod‚-xlљRZaTFrgKyk7<v׹32> ӝ5ݞ!.t+l#X3ѬH{<&ߘ^OJ:iנx?>kDiob]m{@)` KC0Hrgv1j'bO[3P'AMaWX!Ε}m-M#!34A6u(Sɧ?˸Hhs]:09O;kex@p\ b@@׉8f 4/ xAAg9ΕV*wndhuj%cS, b޹ւ~ĜiFUʝ^*e/WS=5_7(i3+ (lR95w&7Y뛴y'.1xyjonJ|vg6\s !d+!S`;h1eGnIFUs@pSt1~a};"E)RH"E)R߮ w6qdv2kZb>Z`]ny~ޛMv:oFfych9Ynŏ㯣)=!!RMԺ_$ "!` ?B ~h ҅X(vT ε\# [Vs:_BLj\9ZK-i#]BbJ["3Y+r)Zu,ۅE,G`;}d+:Sʹ7 bzQbl /-5CEO[HVĜĔ0l:e圄? uGʑ7fib]q)sNEީݚ[qi.-]ܺ N-,؟^>wԍֹ;m+K8x{\7+;(0XޟDw'EWÖN@"TzgGZM2=km}mM͔[W`,U&"(K g#PQ Zv"Ax,vF9p>83Jtf^n6570.5O1a6aR#`\ @Z pF2| Z9ϥ"n_ji0F  $|KO1GԂ8 bN}wq܍fJ[ЭS^=dp(tj~@@5~{u@T2HWrg⛥>NM||1_@czZNZvZe|8y\1yB8ȝ0Fm p=;$S"|~G|5O8Af9h/ '´Fm}83~<ߋro=x`z.҃s2qE;"E)RH"E)R߶w.*YM![~s'61_8T gJb=P_lmc[PdI7`PΆ$cR|tyi#J'J!v\ WPa;Gq=N:ؾH?/m-@L\)+U ޴2 u+uhCz D– r-^ODr\V*0E:\*i')zBnOS2[RHl٢3V`/Y̙93<*bGŭB[2w0an#^Zݙi'ro–S2g`&Bȭ )R^>5 ɠԖ@ pWJsHYo!E=Ez~cJH4ee*̥8UYh0&& ]GWrikmss汫cW['7+8キQw'!t'lqlm#C+bF@"Z!S 6@L#7zBo[&u osjAlmZi5}JС']/qo_6PZZ9%\Xg˙ ;hm3qjVAYgW h}Yn -S^A:q>ǝOȝh7 svvUp, aKOrs_^#T=2xD*'}:6;&)o.O`"y\UbG39H<ď΅3^9K I\)tl=8QXD<偁'!GS<]cs ޡ۝[[[nPf6} #E)RH"E)RH}[&+z*Gz)ăUB_GJJGb)sBő8rrs׾ļ'\ B(퐙~`Ԕٚ8՜TҰ7Gk[<\GXV=u|Z RĔ2/Z)%OI.4΄ҖҵG`b1#3pät(YKLy:/W:+9є֛Rm$vaUPKnclWzx(#oh?̭' LޗCeX;ǎJQ|/FJ9T.38ěwpƻq$ 43Q 2"N_f:.xsIFnRKVf()-iŗۯmΕEvQhQKܫ˹u;Ä[.U|t( /xwڧ\}yfz=Œm ;ûC;c;wǑ(b !֠0B 0`}C}b_[J OK(S'!e)7zq^qu0+0FXnն}}MC4-ΐj Dfgݷi -v{]06` (C/bAD{X}"F,_'`Z"ܹ0n+B6s3J{#RJc-AN/Ԡ1[޹{zgCtڄn['ͻ@!;*lW6O:_Y3XJ"BI΂@=ar6OaY{_էc;g|s$A\L8pN<98*.F1ғ ^P]jNfH}߻<#E)RH"E)RH}[&y[P9p% YIBa_ g=BMY0z=Jvq9Z0X,yӡFdA2sJa˞/r ,Xb BB8Blm1v\ UI!\ŁO$vaFar$nftz#)SaX\ ӒֳVj_޶W QpHv)׹s ,75Hn=^e/ j&RC0f+"6 [+*A+x Ry(a㠸s< - dʇ2x]qX 9D`$w ne†kliFpҨQLDӋѡef]Qy7s`ѦKu2VŮ2vyzčֱͳw8]Wۓf;p95131;>7ߛEƅgz" q7.Qz[Z.:vߒS|jBZiPԡz>v4/7?#f< e9 8kmM}`$꼣r"efrJ˅aӓgAӢ - *C#d -T{(E+rj#t,t-:qmzG#- OG B&Gãt`!:{._p;u]H%Ƨ#[W:ZoӽRH"E)RH"E)Rߚwƕ̌IMY-q&,;iO:7ߖ|VZI}YA2Z)lClΔL*y5wBHm)0_Z'(pg ~XTk<;@ Osr#0#U,\)u/qťd SX1"L#C6l:묉160 pቅ@qd ^ [/l?*LѺIFZHk9|S&.rR/|P ˑZś;ӸMfm7.U;o[okrŝ;ig&/•|Z iԡrљDu$uH) uຒ󫐏+ 3sgv6 \9Lr6ζĔfFxo˒y]|* RS\w;gKJI~>(>umv- wbZllhwJpqֻ$?6ۚNNQ,bv>-ʂqBKÞ拽-ԎzGK3^3gҠY0&{uBF Q,K Y1wKLH6Ţ<6ZVNΕ֋闚_?"=Q# gT,5XpgQ48A_nmmaxz P Iq}]+z!8{KߺDi40zy] :_6 ;`<Gw7<_ +SN%x?X?9g_t/I{͆+µ1x~ۢ:G73>zg:n8j} y?>LP4F$ ٥W#N؋+]u^oLmr-f]ǻ|Gwngّ"E)RH"E)R-}|gONaIֲRSFX$C%ڷj#+gd1ym^b9^FO(5<$vQa}_> q|1Z#P5'Õ p1wK;֝)Yw zwNf-ƓAt N[`6EuDnJ-rK|1texӛP J+џU68fqK9 b-Aؓ-AvHݙqys ٗ+󖝌=rh.}\/ Au$?#-%tܒ{+ѬM_Zd6b2vNr6x>a >Ճw"y6~K#h_rv }nCy?*R܆**?600vivm #8gٛ~5wޜܙ ^ քlЀNx |rB<"zpȾa\ Ot lšQow| [.Ȇz1&5#aKpޗ&JD=Mw(['ʇ0:ܛ^@ +AK1,yV BQ4h::ir  v|e<%~Eb]i&ZG#ZeHQ9 wzF;+(otR34aDSZ k]~_,)CDmm>/ŎsJz=7osNX~_|ʝsgS{vO|v g-en, p_ zN0Ev7a|ϗ6^cji'#npwT#3)RH"E)RH"qgoFaJ`?i?LGqɋHy9_O?mWPbÔ7sko<R!@Qz hԂ?8RV r#J\WpAF:PKCu$u񧤦ҖZ72Kp0r+ypJǡ}`_mo@he^m{wGb^,cI)轫F:_5S: AX:0:B *D܌P|iG$nu|t/P"g9.:uGu}sڥJyy:gz-7[&nm >cLp. {\/|~q5G58Q Z),8MckMDko5<꼥Baw&&`@GE\V7&]*X Q,gaYN'JAxj`H,5h&dkWN喾 }m K; 0 XֈrM25B8 DB ޶fJG|nD9FqtBmf[W[/R4Ҋ`7s "0$\\fp#8#T_e\Ay졿 T[ +f~[ܙJ*ɕhޙ,1xa*fpmy8}\Xѹ0wڍH<;?5Cp. )Bť‡8-"nQ}i򌯺^.\}2uώ)RH"E)RH"mp%?.Ul J#y#sg6ұqBl)m9-˭z)1̂8!'[Ι@i5?oJo"IOE@ #3Q 4ഁb·훟W|ŲMFJAqH Z:{#wY tY {VZbUmrAڙ}F_-zOFiOȬ -vLfΨٕX~32,<(zdOxLR>.hڲq1?!Xћ+@!nfU-djRaqs&;"6KJtW]ȗxԒŠ G!x6Yo|i׷(=*QvbY*Ϙujnfysp vMnC0mzĞ9vmVu5B&5ǐ tGvƑ 0kٞ@G[キ)$@]g^k]iiVQjX[ àYc.FJGKOg{D0wt-ʐ Dn^kkmȸ<:ЩFXz!W'0dPJȄÀ2xt|vY] 3p#-g[KJ]6QZ(m;e< PZkQ }&ʵ;TH'w"750T'%s6>e[KII::DRo}^Tjv{\X0=9¹@W, =#xj׳ktRYzlbWx{n=yǖ7^i/+q݁߇ّ"E)RH"E)R-})wNim g[3f;e%dEf)# p-;7%5H֒rKޓЌYsk~+U +t3xTQ1T`sl;7 8;4b&BO<aP9#3'䎄֓YdmH)Sv־_\?̯nuҞ3BZSBH\P֓XsC{4xٞD!Sy{3)؞&wL3C7'(b2 X:!K'bj'h)F/z;M6̀@K@5S gc~WZ͔;&=:1Wh:28F![ʣn t4\vPZ.>#,[5|4kFG_K"j9G2U| a(uT4_ާ|Fmo2Xz8E!S 9ne'Ԗ&G7CA`R DG)wW(wz)= :Q[js\ *q7/T <,xD*{[W\ p:PIN68q>Οg7}zsOHJ|ȬkDb?|ѽ>UU䊌/{n\Xx/E`,Be<ɦ7 8д/srr ;ԒQ:+F`n^“re%/}=pΥlNM5nMv]9y6吧]߸:cyUܽ<}uVy'ڞD&D`krxgb$?CF ȣcCgU(Z! ?zpYƕ1ZV5:S/HoOu" F{}%hXMlf@X4os{3Z$W'hyijxyFG>I<ׂaA*C2t"OÊf֋)m %JaXp;aK1L߿1HoozO"fxWGF$g}7n=`w^PEƗ-9641=7n9!1%䶤ї64RbGp"R&:D KBȌ?$wmt^w)8>tWlS,~$pY|K|12>L8lWV^z^mOO/'D/{)RH"E)RH"E3ٕ8zVu,ʑ6R3rFNFTd[FKY ;\N}b[R]xj\#X3,&5>ŝ'ϱRVJ֙?D i 媡bՇ=Yܓ B3z7r~R+qDftu4W6˱1L!R-KzF.["ղ;[s7  7WttB9X,Ҙ mˬVi5Jnpӡ7[=C?EwhŖY'QO.wo}eR̚2kVjJL 'al5 #9ڧD^ųG{ u⌹u#Xֹ3֤[sk2.MoL;5^٣כf^kd?cmO o8ÕItgݞ[O"θpgSk T z!F[YV֋(mM}- n_:1 X>8t&+Z![-xHkY_gO(:Azp@FzEyHZgʍ胛r>S/hzg$L0M|Zښ!8tp]`éQf?zl ;e)w[Zm/Rw֣ , B<*xxzW|`tuuReM,q5r6?/3XOIG<6?ǣDž`9b xvr1@>O4Dfin[O3)w&D漏сnz/6ˍ}aYf55ϫ굧'ҥ1? #E)RH"E)RH}[*eTط[GøsHS$ƙC=+p,;IL>}K šVSgVÕrE`˸3t>Ddvm+ae"?qFUaNi06-G"ϫݩrZʾE綿[n޵vpg2jz;W8Z8!}Y\@{{zCJsVmͨIoR-F*` `0g?|RT WʑZim>R+%O{23hۜ#3qzz_i W`(+{UW`|0tmdaPjM9-cH.8MvlZ!.urN.o(:0:nhnݛ׳<`7:0m#иpk ݆Uޤpo C Qd#ֲ<°( e|gkwG弜㚝Q{zy̞W+m;^R,OX~gG)RH"E)RH5`< !_;CTjEjG@Gj˳;*>C' ĐFp8V Z1(3z{(._hXyV5UXR=Q_7ީFѡ̜UXof=yaQ1ZmJ>T.-Sд e<ܹ|vou|[ιޠsP$supۯ=d µ1ot=xEDmGޗDw^z![|b3;"E)RH"E)R߮ wzEaAx#epܚRR˾ԜVLa P2RsV( *#NSS)j(A\yyARځ?T5pږRN3a^g`D1- zr%;@*];&ޗTmmy5#68Sž\e<ق7[ax FgE̛+Se~κ]cְؕ^dt&JCbx\Aҙu/Na5ߡ|ȶCFڴ :=# Xՙ,n%^GRKQiu '&X`'1Ă=<鼀j?\Y'7&Eޥ;ӒgR\[s ^={fD7&kf{Wf:1G0kcmiyZM"[{yÈ!kr(Ca@3Gp U.ލGHhni^0 QFЌOSSl@`X}|zwc3Ea#34Bz>Ӏr }P:ZM70r bP>DG^^ܹ{,O/ 0M0 "^A{㣡IzDiki.J+SP?j <{m̫m⇷Geȝ2",?{y>QxL}%ylY[w/𚲃>#[IW6mOŽy,V+o[P);*cz|D:y k9u6;uv9|ʝ9XJ="ohb.cƓnҸ;o|/6K{iv?%_8Gmc(K;"E)RH"E)Rߪ;yǝ{U rgavW%-'5C z)~P½ Q4bVGk09R-GPU*H-s ޜu`H` UX1%/5ի2sFx\f}o`+HfɊuuf=$!1%%DȲҞR;V<*[oK[ZfRPtp~]鴿 cs& 7 rї+wrFBh9gܒCeNhέ&kw;LWg]3ߔMP*GڭD3mNaU-9`55oϛupZ0SbcBЫ4 Ducy!œ̆rg6`MΩ<\fڂWhZ`ul2seV+2fOӢjVLעt$f=Z =uL €(Џ0B‰a*D(Yw闛z[.^"+@XzLt V8 c%wC^okiik6<0eY 3(d̀0ăs\m=֥izHgN#dM{y[mmf5 O' *>j2ajL5ೞ=u4.56} _r8:X3E`"ęr (W/`ւc V^b^nkmoof_xP#v(fGFw l@wSGܜ8|'S m'\)Fv)Ǔx%Vb+Qa-e6Z˜#8d V_߲w~,*Fa& "D!B"D ¸S&4.6e9޹ t9.n%@-~!5?#,_eϸƓm>8Ϭf6O7^0|(>Jd7OOcӤ9@Cldfڒrk rr,m/7\ƛHٟ֓BK2+\JQnvpa#ꉥ3XFf,u~̤=є/dO!YNoENS~,K'G''An.PRX\QaߗYY9t=E[秛gkGL6^zq# #x]†q=.\@k\`ܿ|s}uI3.S4&Y/i Rlҥ<9դVQĜ  C'oW2f36Y:t"EYiFYXU'Ʒ` +Ql'K)h)%הH Op8`G%,<"K/6#ÒrRm%vNO2Yz!W ^Q&8N@1 7oֵTTV\C^Wr&;j!t ˜d:ԐQj)Օ;s`5T@3`aDYjR[Ne 4|*0 qRxpt^Ό;, Cf-oRj+ Uj+[hb\eQYsLʦz鈞k| dVcH/ZŷٿѾ‚UZ:;szd& Olή[vK;b*w1*nքq`+ '‰Q**[GfnozB4@辍1Wh7Ɲ1<`Y|=+&ȝsa !B"D!B"wV;/qpJɝKS0d'zjd!sA 0.P_eϸDS'§i8; '!pp}J ^ |q.rTecc kA [1 !sڙU92 [LٷW3g'[/aa8'pR9iVPV8-nF^'k'G'`Ǔp>USyUj,h,mg2/veۙ֝S9a~vCDZ$x)̫)j ux<^\I W .ȕr[fzε7hj:IQ Y &4%Wـ$2\Q80mçxY.0ݪMo߫]=~~AbQV@1 =0$ dct^1艳WFep xQ_VM[5ޖj = 17B)f W#bu=K)o.k,Օ7\=„dVCuK#Y‘uPywIe޹G7BcX1 eК \Uk1Bm w9Yj!sV y[ŷ]w oa48k1k~l5e߶Ko}G<Ѹ`_$ [ȭQKцhVph);O_};{n8~Wy`:?y]͗W9*^y&Q~d/ &Vad*L |xos1zϕW~ ]MpB}&$t+2D='tw3A}ffiX17"ܙ!B"D!B;k9:wgV8^<{38hVZs=+=q]Qn~5}9:^?9]?~ɟs/IʼS`V/6 |u@АÏ2r[\n? pEA* wi+Ξ>_?K맹@*K v-%Q5\{`~n8d( Bټ/ ҫ˓sX2 8'\;:~y2C9N7zdSzO >ƥ1%r=_J[/_H譗P.7yS r}ׁoBocJgR*l*KDn*d}E&~4 rAc>dy+j49'=&ӥuB($+{nWvߪoTJ !Eά`.nU/#.gB C']+cOƣu7ߡחSjJHߴW~>jP g bDF]&z] (XƼY@ΣDlS3z1O(fsoՑ++k˺iDl,b(aJd,RWA޽1&$,0=i2^mDfK&W}^]J鮡E U:cW 4zg1یONZ@GlFԔqn A@E e΢Y$jVd=f)} O ͟ዛ _i|p+/_6ϓ OyҚXL䍵20p}х}] O|wFgBb* Ι!UDc׹7|QW8_Ύ7@pgB"D!B"D;/DRkGsʵpizb_vڙWړ2s@Ҹr۾Բ7t Tڙ60ȧEژ Bj7[GY?Ǝr`*GZN}1j,:e^kGǡ̉s/s'ᲄQ:ςǞxy'\8~t~zHO3sWۣj{\ Jറqh mO3+Q& f\3Up:%? F/V+\[;mn`z(L/l &dCSZB]4\WrAS6ίkңxI:%1nƄ֣閆;o;hY. Xʇt1aQYV ]׫۪ZʿeW>T F1 ͟Dt)RDo*HU0zCɸ[tȏ*FZre)NLE! Ɨv9 m%mhmK'fjj0>(ˌ\rgSF ɾY3ap:O &8Q|U$ЈX&ޝʲopt"lW08f! ]p4^_&w}}`_O9.l^x*lq '7O^o8=zq 1"n~ߝ>m/:mt4 ,Dž|Ņ΅_sϕ} o">lTV{?XYpGao_\u k#gG!B"D!B{pit#w k<%%ϱ܉p',Rp\n!)%N,W3 [ZiOh ,f5 }R:2~93-9U9r+a|i+ '`:>H-m%>W2wQۓjeέlWǫٜ/[HYv<O0cK;3WQڗHybYzji-Ԑgִʞ't/m׎w^^HNz~-i W:2+,V`ܖ$/#w$*X'&zf:n^]v՜ 3~r`.hH|PR+L@A}ڣ^;wuUtW;;j{OP)^؀u(K+Ί!4ro׶Uj*5{7s'_ B;2wfy]ok+)uդrjMIwm%K/9LOU(N kD#z]9RURMǝZ% ^Rc RjK۪Jƻ >(hDt 8w{S3oTPKեm%]<8Ip  v_4`^^[ eJX&; NwjkKH2ޝIF+8/Oktwܐ;KzAg)v -I ˵]3S6*'xā//mM}/FClej FyM, :==Z׊+;0. )΄"D!B"DU w 4V"W9cX'?[6c! m;JGzC=0L&od},8eedU97˓יW0"ZwS@JI(]Js+jgڽo/[RI&ycAƹ]ڎӹ˓щ7~d}{Y2vdE>YO4g{ %a3qU2*0gsuxq:!eJ4xv<j:>\F_q-W|ohZ# VȖYI{pB>8>檺7RԊ.ЦO3~}ܣLuq*ҥ"֍Kh wj[56-FZuXEz㉁a #WVEZj35"FO]ju ,X,Ք7tcc([+bPQ40 b;h}jm%\}Y_v_uQ > 3/1u"Z||R]h)? ڵby8ˇsp[1m`#q$^7X-][6NO7Ϗ`ܟJ;lO2˛yjo+厌ڙ{G#}3ݜNUu[.ӧd@k BR+G^Qخjp^@j5tr~M_C5rЉ: su.F:À2 b^R (ӜjcZre R]o>6lL= eEtaEȍԛum7*{ȹ&,r.e Ut r֪ ƍ`7T7ʿ!UJi=w|S"L\{(ZF)k.U 7Dpĝ?اRbNiy@*%Tk+{[ ^dzDL";4a2BaEl1",񆑞d9pH=?+&4|kWٓ*gR_LzckrΫSX??tYN&t aLSALOYp%=AS^Eitb K=~wh 3x.?qR "D!B"D>rg;Q3rʑT 8̠p<[D"yt4̦듬>p﫜k@"u6Ϗ7N:]]/j.DO6 I^:D3 o"X&lOskɥ6Dk'^6Ύ"Gp/Afy;Ȭ*{RLa)Tg} gO6ΰ8D0q6`O)?_,x_0ĚQSRҙzêŮA!:)4nm"Ii.Ӧ7$ÅCvhOD&ޚ@"ͱ5 i  jF@t]T7[ "eL 7!ٷեe(U;ׇ<PeDlpw̠pb4wT[ZUJ)ntB ^Vanx ,S^Y 띫+xnLbtV̖s܆֊mF+ܪh{GfqFA78GYMreikUIk50$ˣ_\v;3R O?M.k,!׀iԌPkpY ; (fˌM((ѴQz;N 0+MgwYiǸ30RKئ@8|~z<ςyf, b;O7_* א d*"XEc`q+ƅ>ۿj|OtX, CPp42X "D!B"D߽pf22fpi;gO_v^e7_B7oޤ[H3gs;UώǙQj5fOōy.{qv9Igg13i~} 3[G/_@~z;/$g +*|<'֨uh'/|wS맹|0a48ڙPð+S+Wi=v*{ȸR72, –1W{4|^MحΎ?UvNwGg0ϋP mߜid>2"TZGXxs195DAR)z[0$MRui{mesE)zR`a`z1G+D6@͒q;ߦ֖TՔpo׌R : `JF1-oXjcĹYU1Pj+ďvmʱ Q4y\SRP3l30 1, (gEނc6W|C)ioD;aVCMfuQ1w4X2ǨM<۪J)ܚm-b`/AH7!Y fsHhSS]R ۿܩX\XwSՄU4&5;k_ŧ WH儋iyψ4115'Rtm;i&dV4Y!7e}Ɯ_icyg{T3,|: vC;53o.td<Ś,f! DBo:e@9`(-eެhT]^WEFޑrڵK'K3b.x i0YB‘q)=X+[*iڒ{ .U/ CF}Q_|O# 32r5R7ΦaEH" cƾQ^SZu~b<7h06rK\4 aDY;7jiU`2Z$fCЌ2!w&xE`!sJhPȢvgG6|{JwTȝUxv%nW50 .\> N'Ϭ3Xh @ E`˥Q8fn Td71evO3F30w’g;"D!B"D!Bnsa+ZiOmQXL+m)pa=_n:z|^?ˮf{HRp [BnMj܉~?r쥗 N޶_Hk?L'3;"YO4eIICIYIhVI~O9pl(LggȺ5cZo shI(i3q.8 zyv_C_Ⱥ_OY 1r`k]v/\lvydzfxxhKɳNH]ʤ_+!by6n=5 l$SqΈ=8C7ʧn 7q|/ A,`pbr+Уt=\Ql ^u"$PC-%זJH% m'^ Y, F G0H90TSJ/ܫr)0C@3Y S5 P=-hu%UC폰O гb(R巜[URn^6Sāa8ep魬UҶk;3Ҝk';\N)Eـ " TpRUBԖK& $b` &VLYp+r;)LZ+9Bh蝳}55&]Qg%$?۟ÅFir^=2/_>u~xend5['6_~ѹNX@bYD"[MG`tP4}AfDx;.ΟpOYGu*,PŲ*C{#w&D!B"D!B~qqC%=&WFT<7ˆd78 +ux,[Jnk=Pjq#g $>l(7}HsergG[/GO4mYΙBic0tUڝ\έij0z5're;3)3)xHڶSxvxE*rYd@Iκ Y%TΨvQux [Z+w) G`T/"/tISclE2coL2^]ίOh&waޓaQ;{9 %&OB9*uH]ۂ';U|çlOx)lY0Opa-rpqr+kdfE~4~yuv|bٍXua,L3tMU"|'.Bq"pQJw8tm}h2idTov!+k+_w L!B"D!BGΠvdR|. e;ߥ!w~q9inb6zR*pNnMȬ0{[RۡqpmwBJhq'v,mCP}?Zwr9jZH*Q)+6cO4w`R!rkL#2je;?.qfx,7& ~0 o%pX'.&%\|_vp՞\Ltu*QjeFnmƋ٧Ki&ULPif$Ox#c.uw˵{FFtm-BYa@: 3t"C2v{o]z]y{uI[UI[嵎;&5IDi(ZAà3hKԞJ7-ߐ뫅wg:(,2 F0Op8bd`rgrRW^-N;c& .+xv(mERaI aC-z!\kQ'bN2[Eo+m)mWaӳ(ۀ2u̧~,še%tR @ڪJY7'iͳF%YpAfN3,0=?~LiCi\)w5y2eS,<8/oi`0ҞV3J8èt-dC?Gk1i6r^;ɀ^VEih:D e5 [30z,FfD_w.aHƤ Kxȹ }5ߙ΄"D!B"DF;I;mQ3rƕ$_RHlQ+sGU-'N8RwRbDLÍ4ʖ;jw 쥲ն֞ g|qXy/K@k?BtP:jg | TΠ]Zv2 7=;' F*\E0W;b2+,>ݟ$͗p(_mƫɮ\"էߐɶ'?n B~ݲ%11(pI2V^D"tHi?[hoqk@C'-™`طJH2FïB V" FR>`^BWGem0*5p0~n1|( ww}֤0|1> fFg]8q8xoôk֊̛U%UheC"g;24>qo!}ew h[u rŷ76 a.7u2bV@s"z@2Di܁ڞT;ӐdoPn=?m$;io,r|zy9ʯG/s[gGXz62)DvMtfE4NB\dD(3q-#b`ЗdY4̈́3ihd&a** 1-VzK_MkO}P8g{azƓU9R {ZmO*Q Vlq#Uִ|)>iS?Oٍ VrmDdHd@>lۙ1Mm*mOՎ2;,:zORc9jǡVW܌-Q92JgFnOlq%,u 9(0B r}L0 {pJI X8E+q. s!9_KGkp@Ⱥ My5m `BφҦ`Zaܶ YfU:|vd3_J0+.LVJkTj9P82k\mK9pVlG`E41"gڬWi1>c>87'OFxF{@Kұe&Ck/SC ?[cV- lOzɛ{tk©ut i/+dX-3|6sOӫbYX, fB| .'( >k[~mf{P?s(\C>wh΄"D!B"DVrgu{+;9=$նڞP5lyobvkX% "ޠݳ*Rf!1 eвx1Xz"[ ú'ctaWm?л0DVDCPV;{i< ɥʹ9m_5`g{LHSV:b|q3؃΋i/v%XʍPglCmLQX/z+9Hh<2 Vɼu'm $@|L|bOo'E+q#QB%uz83]}#3],+ƴWҰYi.զO(5=O'OƐQ#7O=Yzku~ x(ъCrRM%^W|_&,E0hjAlyxLxTM.vh ["'#_;vuH^C- )#U]46hDlʙuys1؂0LE$f;#&z]9RSA-ܭfiY0+y6Lf2a3v|QmcV5Δzغ{we(li դ/~9NoJ>3|` fsgGTZڔ(̾؊|,R24~aQ΢BJC}1⍸-c7k}f̽%3!B"D!B"{Y'5LN9f,DBMV$nJ8mRnE! d4ɴxB_U OMVv]lbu- G\a'2B'ig=5>w0P92jWVL)t@⸀*G |[*gLn;YV 2\f >W`ݱ5q"]zBm{Utn #[cp!/ RF>>s*1+0KZaKI0֏^8l8]CZ€q6m1-w_ʑYvMڅ*T249Ý-OY.&jӦ`4+Sqhٟ}}:#~:!ZHwgSl!D&B.`ŜaPGiq۶֪o[3,\0( ptFjoBfݨj)WFmYO]/b`E.F1V#tx_c|03No*i.kA#sSnb/CLϚ 3@zH*!ההnVw6QtPf%l](vaD`; ΂Ɩ56&#Q#uG_Tf{}?ˁxeg-+{/Oxb^b!eE+!5Ƹ`΍*rŵRȝ+J(5%Vc,]2% hagX2JU TxndK-va!`6} +w7ݥUVjʙ7ʇ)a5H :pe YCv>n W]#הU0WQupA,k i"ڬ-e%dLpzLC5;*pSY?MeH܅-?Ӹr[bflmoήd8OiGgjvp:(^My>V1_pg3 0[MIKat54Z{OR{isReZz=и;4ܙ!B"D!Boc^,>o& ‘~pb95UɭH(=䏍Ce(79R2JۓICpP1r(:5잦$=V7U\-In]FsH>aU5֙Rۓ*[.H?Kmq3cXtH#2LSlXa c>Pؒjg tK]0 CO_CCq^@[C֔)E-6,p3>/ͳx /;D猃[GIFh!D!a$TXQ0O;{5ڸWASΫ-N=S>=Jsڦ[7˦\7Z%4KkCNF#LV}7\[O̝buܬT+K5Ƿ&dcwr`O A0!֋F1X+d SkI׫{3ZBl'xA?塯n?K&BL"TbFV:+Ծ[RUԺ 2$ #R @O)]rg:ϊس(ی0b ĽY^UB U^Ֆ3Z͝F ݀P;*ǤO3᥉jwVNwU*߫/+]GZۄџqo_gw^n<'`|rG"YP8M;}K 1.g\ a4].*]b:X{_Rw9=&V%.wx"3!B"D!B"{{ea2ȒvL R|c|^rVcۧr(c=M%Xʽ%\L}oa1Β`8v;WzolfykrqkFPRs|((BY`ccjGͬ^[28aޖ/(q;+ 5Bc%<"ݨLWAc\#*ѥrkَ  ָ%*wƷ15VP;J{Na¿bc.N\o1gRwrrvmi謁>f^Զ2-9IO 3~}jEc!}*`L 9!TF#Sΰn[h9xSM}$f9mzl@i]/e0o=҈8-+K(Jre)R4E1 p1Cȝq" #HMRr5z)A`DI1^3$?߂ b6DbI0 El/Ėu%ojKIUmU#1JF!ZtߏS¸3Ys(gN = ڝfZ5Ju }Fn FXf!u>Jy\^zIOvx#ˣOdq, ہv(/NJԅ!b//Q&$f͡T0yMGs߽~u~Fsz_[*5Sp3nt~qeqӡXJa,{Z덽$uQD)܊F]"g!B"D!B=oά~}p3LesaPFRl5g'[/Ի܇[k5n>RBR5Κ{g?z̾,~\8a֙{0doȜi+C=3Zzѵ ՜J"2jؕ.B4Li\YcaeG=C@ux)Fr! .K'֬ҞT9`#X7, $1dp#F/W) xk|ذ`Ѯ ` ɹ]=O= 3MگM CjES+W^5dV)!$+zNÂGCJ&իh-s(]/dEtEXz BYP1B]TUF&{sKբlGxXQZخEF1W#`D多- i5pAXx FX!ۈ"QD3 t[ ̝!21|JwF}8JJMEo= kƅtfRe%܅:rL._i5e򞖇ZG9`X?f1kV3!|noT7?6F=!ݚW2vR9ΨVh#e' w,{gu3d0~z[?MK;"EU!3y2 *wz:h< pgD| km~gGbzaQ3??g|΍.Z;L+H!B"D!B~pgdTƕ-ۓ/[oIe;Kp%֒zkMd.~kμeolKwKs?oNLmgZ5&:)كByGsj[8nhi%wgLHi/eQ{<{f-%LX>Q:*OLjO,'W VLCR|(w>Ѹ@c_jW8UHfH +)EՎ֙WZ {Bf?T*X ڝZr8Ub4۞P;glcQ̹ 9' _Wk1ʚ8RZֵ4̑XYiA;oCb>=fxMyi6;g\Дp)M#dODŽOVCwMj9fn@-Kc:HXeUjg^aIm2S-r'C-ڝTb `;-Un0&~@c*`kJi8H3F b#+ [nvƕN6ն8g8=͝/1ʡØ3$0acERn͞yd[.ٙFvOG;C[%j]GoVmZ~QD+Pڂh_FHFe@h: 1(s}[ѽcb`2rEY{MziO}9rXkRY+#uWucY'*@g0Α<TQJ+j pEDg. B /@Y-9usVUF,cUR[Lrg#q98M'녬ֻUmXd--XR: Sٸ&0YO ˟ Õhzi'a^mL-!X&R3_8N_0~\l8o ܹ30ΝU̪Xz*:Y=sYߔ5['l?F "D!B"D.3o\p_w>žoVomW 2++>#Οn#ےo?.$/}g\)ۺ;J)֏ҎraseM]ұf#k?/oEQ@{1擅ІɳvV"jWLH,j\93s$ܞи1Pm -,>P9񬌌ʞոړTb*GJnujgFΫ9-U5cH#'·\OTNp=J{JiπdZL LTgQeV?T^x>x ~>tfɄywX57x81^H-Y--d5|'(JG/'qgPѕ턋 i}PbGIҋ'N{Xydɐ2?%~mƯIZg+z"ca[HRn([{Bp鮔C L͗md/[P|^̖եU崚*l!AN 4D_I!Z#bMۅo0nTK۪K7Ztʁ!`_`$?7>xa5ΝяйsĨԔQkY7_ϝF<$!E goDYeJV}%zeo}#ʞ\,*X0ΝM(5u'dzCCC 91{m{7Lƿx?SV9g[Bh\G X|`YvsZF,n8}}Kfe}D^HWyA`j7|#kƹsml .pgt&,F`:@^2Z}G\s_|ȆftN{2Wd½u L!B"D!Bo;K=f>"Yst3fplH$-,$.evd~>XXr6qϭu-nZtrD*Xilsws?rgSll|O[W{דcɦta% 1z,<Eh꙽FYYI%!2b$^_znJlW::wJ㊪Jǡr KJp-DmTte;bClM-RURӋ^&{Akޡn&[:~V|O|m5P>vRzaJd mw|W(ӌ4v=T ׫ڪȕe(D,Q:k0rDLye(~+T]¸Qr_'d\MؙPUqs_ * re L𶼃Gd|G|2l@eVDts;fjjM)z5wfgDY& ΐG.YxpHl%U-a[t05S*GNi*qs0i9e;w_̯,nui`z#3a*" |;_A-틅ϸEStH81mGWFzgvfXdtJhvEL!B"D!BeJ"i ,=M8~1֚)8++ݾOs5v)b/Oԏ-wV0؟VS )"Ї8ǝY[-t\3~9-~>sB[';r5v1|R YidYjPfM>f?d4q5ǜF|R5YGF,SDj@)t (vtˇJkJa˪X#.mQږRa‘YCyWIHM_ gr>Qp.R soH{KO}O&ś}\ExsnreZVdC:SgE\vI f*\%OnִWIr$ ;l`DQZv5Zke \A!uv4# ]@ͳؠxO"߯rg0C0Ǔ z W& WJX7ۛpIO0wac\ ϋ^I}@-TQjk eukb63Y1[m|tr&rһ0>uD = 4I&–R9pS* PH'e|ק)NaU3LX$@τUD wq_Atj ( $7n ]`iTg5U~FJdsBLpgB"D!B"Dwȝs~~p}',;=g]zcͼGd߻/e~ZKYz\LO,tB|K9:Ӵ=ٖzzcO]L_J]J/E^( [贕7a !̮aDwJy]G6LKc!UV3(w`74 O0)$TY8jToME+0e_TPʬ8!*#*t;+VBpT8SuA;EI>5~eҧK{L9U93$' f:7U>||bI£/I:s]U9fU>E4bgxz  ^18LN.!fΌU<%Az4E2MB&ڄrF:1a3DZ8ۺ‰PՏ,EeJ:S3Xrmm[l*GmeG^czՔ >mίK4WrĒbS-I#ʇn߫3rvE@*V[:P9)m({sV3oTw>:1|E  ({Ǡ0}¿[G-m,aܨ=;N#PA0 Tjˆ`(Wx.pq1hT9h/׹[|_=šbl*V_=Bo Lku9Wf aKX&VmEk9Ɲ+46hD</s6`5z!ΰK|(5U۵lr5}Uۇ-OᢇIB 09} : 5ǜR''i~HLc%ϲX*g;+3 A*GAgo6UUFtyꓻ+Q3ܙ!B"D!B}7r㟽\.X}f9?X;[=Ɩy6-ƶsFG6$ _YÂut%:1==qqT96tlcH9c'b3{=yK/pഭ[knFqnuccg# b7mN,u]>x]81v9bjwFaKʖbZgVLɬ*Gft\oȗˈrۡ:s#mAӇa6z:?t^C6`).7d)'W_%gO=^@rwu%r=9rBrK]`ChR]ɯj}ʾ]G WV opBXЁ}?"le0bO I:RS¬+m (['d`G8Ň۟(bx0Y:1l<9v߀~ Lƣ<.z!U/,pj>muZSnWhוp((wr(RNZW#CM(W\dj YD7F WAC!l}$ӆ|հzMH) ? G=vpsh0~y2>[f= TCeAlC$ ~x'&|Jo oq_Ax@8$ۂ;-(Qu;suHrgy)pg?4;4}0gG!B"D!B r/GH|<ɗSqr-zoz^r8ݭ r5~61v̭#;;|g}sWlD>?O8Kw ٟ/{/׶?G_= [8UÖbSD VѨs@#2f3!׬r=䶄ƝV; ۡ~G_Y"~_ x[i*2a,SQhNW3IcD ).j )'W!ѥ_rMfYߚ;;[e}wj֏ݫne-P=ƝuG+%Ec~ J h:Oʎj]EKUiKuF C۟t Z1&hX\re=%b2j1v!n1`ͼ\dߚS?-&'/d~dbdM;lx`H=\1ny{ y(;؞uB< 266n¢ҺlϮϤ}'pd֨ƙVB|8Bg_;AD7"T!c uUk[+7jI\p8^@1 !w i!ՈMGz|rFS S?;^׹rGBi찎k8rg%r+ynUvEn$ϛOĖ*}"YŊD&S_0 2Q/wd@ xqoKjT?fU&9a3Ș+<ܹ~P- L!B"D!Bg'So,{1V&Jgۓs)ٺٟv`k}\NO$+<%[`' Nw {;Kh1v.bۅW]̼7n<{ OIU+tㆀ7L/?S8^lg3K;sFCg'o(q=1fz1$m{UqC7'<"94Ow([]ct(|6T oUu6Ado04BƲ&Y_˅kt|=ʖq)]iu2Z]9f` ` 8C0-U-BF6(fb=qG(xQ2, ’vPoT| &&|p#J]@p;mU2 n=iO/x{$W>Fmb֗J۪ʛKa52z> P^vvF͜Uu$C#]=i#hո3xDU–QZO|q Oog7/S=rS(_E<,VDP`٪h& 񋦃As1>3&#+o wݝSFϘ}mte}|e}ȳ6 :Ẃ_˾yϠ9sgdI;"D!B"D!BF|7*q{3lM9%>g~rdv>9'p>2q5j/kaC\ξw85ƕy 3鷎;"$ѰԞz;{;ΓyI{1UCBO.=z|ҙ3ΑŬ؟'sgʙC 75ݞn_R^M6Ny* xէ,h[qOR46T ܪܨ7Tܻ!g-tbV!XgOڰ@EXz3j?I^񷜛Um`J0|n/8:\C9cV봺2RUI{mr~PA (+|;_ a: WH%|T`.l|4fUl &̾QVQJW<:BcL 6D n{Wjm9QD*wUny܋xV(qR53r78eoA[JQ3N<[lUq[ҁG_uڧMt).{4ϵC9㑆w<Ƽ7+f:e=t`%rqįC : hEC֪Rru) }pSn +`@FqZjG*!UVPjKi'˜`SCP_np5BfW]j]ekuis%|f/fpt"J\+AmUmך˿_5\8.Bף~ Z@$?bݬ"UVV^ݻ9&ՌlP"ȏ8j*;Rttjgt:;3JGFeu+pC'WIg[2rKG[T(se,O+05c{WQyK&QK]ʍnGg;'o>C< %䎭Pų7*n+nq0 :Bw^YD1dby`r6L!B"D!B[;ߧ!5GȌa_8K_?W˻]ưPjjI։*Km`̻K~i321/eg&ښ. 8=}$ZSXn1n.Μ~oμ[H[y.\B A2. ZXY˙H ]** 9r!^ծ7m{ͼva[ctQL+sNS^Mڧ_3>m:Oi!ߕu9Խە}wjuޯm9h &&)Yqb0ZhJk:a2(L2Dojʨu;c&k4ԗM܆kRj]EǝIfQ1Beixqp! o.k&~ܠq.6V}.6 :EiYT yxKΥKfW0u_W$֪֚2Z^@8U!!D4fpdl"lcڅ (XTxB',$W d\0 mFYF͈4BN̞v4a$͕%Vڈʯvf |\y5ŝcrkXW:–Rb`lt?w}Ϋ?V9'գ[C^Nf[ѧUov:.Z63FwG}5w7H] +ykhƳ>V_]Wr%М{`Wܙ!B"D!BWqs+suWvwo?,AޖzkI̫B\Mc;^aK[󻢽`te ²h%=~ξw$\NIj]g,aڵu~j~$b=Q:ļWJ;}VJ{Bn;`3+Y&J{L R)Qnp@kTmKlq@i;@yt*Q#.rdʑQR2Aa`8|9$ƶGԔ%ά2\t iaIݜnw 1f>W~m6K qNxT)&4ѥ)w@|ZE_5١0:fԕSkڪUBHjD "4jL4< V2)ګJHUlӺfX|i|&!=bQiC!oוV^.ɣWgLAz=Jkܪbި6ԌК,bPJ4ԉYS# @"IUG RrME;puiO]= j!?t0Fj@ڵ"\@n˪TU˚o爤-'| ߁19 m1+ng<G;7Ύ<0q _'J6*[JT=Ha[&VDU`D ¢h*L G|`?OCf@uZK,Le~3< Nܑ!gxBа{ڵ:_ߒw.gA;!B"D!B"DO@^pPRI+xo_ o ,eN^s 7_O!aß0&[ xkMn|xaS O3!:bڻy|e٣*[^nMKm;r3-hm':Y+jGF3 U ulm'嶜ҞSbR>YRns ۡ c; :_LYC)8kwnr.F J*iNo5;BX \t j!mqVUB.oΙE C36|T| +|+¶ڕ\HRͳN'~e"Gafʲ٥u7 ;ƭ>f~C bECA20* 3! }N@#x7*=ٛ-#5 N~\g;tQƠ;4tEx%w 58_ 00:L' "D!B"D~#w~?}-zύM&>gÜO؄2؏ w0#lp9W0+< $_"YuGk V9Z?{n &?;~켚VVJ[J׸aԶpQ@a 1Yӗ}RPƈ6,~o‘Qsr[NaM+Aۖ[:O^H,/8.`@X@ĝUpԞTy*kb`lsk}>;i2x>UүIbgMʫt9!&la. ,U)i߯=Ћ` aBjZlI+$׸;p@a] keߴWWn>h&1 dtl<#SuBN@3IFNm{u k1SF1S˧HACҶoyw꧘dGXX 52/T!8[-?bߨܬ>v_EeUᢋjS#"1@iev rMpsŷo7(ܹLQ7""3!B"D!B"oΧݛK}JzW*+X /ކiXfN!v<>U'-`{[ $s.ngSۧڥN*_g s%%͹1;}klI5re֨W9`ҞP9c1}j#k<1LFR:`d;r+JKV:2NQ#se֙8jqAC\ܑ'˻Scs(u|N3>skِ>U؊*8.Lwݭ~TRـ K/dq^2bk5c)t>E 1GiMRReI{u)fV4ӌB3lC5u HȕߒkJk)5e)Ɉb\rn bQ& =M.V^_1dw Ί:둿fH,1zwSv h:(ۈ`2/;ß ;Nka^lVyRS*zxkުq (2G\'C^X[sZtՀA.)#'ն߁8ßPonr9DWb鵓㍓p>Kijy|ʺ֭랏uuzrM"UDD!2,Vi?OS oI] ~HGalveܱ>YD\/Hes#0΄"D!B"D?B;>3gi_W}e 3p=LYN&bm0mh oɀljASHаg)oDɒ`=<ÈڙY>YҞV9cJ2GLVO1SqV,J-r[THh]i;F)*g\<-=z DŽikZz>D\) W}9̕;c C[7oN=)%142}ڸG Okc+O>}o̬ujo4ߞ8|F>ل Bpe?eWJqn|0Na)B QJU%r꾖GZS .f$Ă/ПuVaqvm[ŵo%&m*6E_E.):MB.مW`ž_\ٟia3B$|lbؕY3l83-6l e1%o˩n=C2K|gu£9Z}pm#<^7MrueGcTlQBah4cC ,—Q yA3‰*hŠ<?ɹYMU7IޅIBỲe`w! bg0Z2+*K5ȃ,^!tȷȅbX>s&X$^C[Zݵaj^1 s(-7c -{Z3)Uרե7VN_} *y|Z[\YF*ܪĜk`sg$:]RSx.Oi=.Q =r^'8pq3\MZrkRJ,BW/~y2dd6|0>9d4lM;C t5 άJNZ|M<B'IhG,n} XD@&4}1GxuIwh V<1GuQeH4X)籜 ;"D!B"D!B _8wta880N0@rB(<4}@y.n6R=Ɩѹ%߳Zlk*K0 슋1Sa-&_>Z39##6bpI$|{= µ/ w4  %͌̌$FsƟ?h}* 6%A3wģFEVuRG5Zp>ؤ_Z^'d>imS"WjW6+\J{omh~!{%zP=¾0xfZ/ߏ؟-3_!?\!-%2H旱"gA2 wJ:8ʋ:!lVNL9ySKPfΪ0EAXUI4Y~:DQ/hQW 8lr堬,v#lo r۔ AUi3Ylc#]/UC{{`~ f` o;sHQcy[4 UQ`zB)MZΛCR/3/f_OR?_Yܽ^~gɼxκ #{k[\5)m oתryX?t#0:K? ^%F%}jtwx|B@*{dr'DžKW}YִUzsq G%h ?X[- tml/Oq `:W͵˘J8kH"7<7C{[KTa|Q2I԰E fkZ&,3e+uJn 0(3Ip!VՐc?0xlrP.ttqQSl]ah.sR*U1 AX^C9nR`ja(*zy kb(-bloeQآ͸YBc6ŝ H:`Y.X|6W1zxz! h0 :iVrÕ+~eE{uMezXy289qB[}VoC&_ {/ . lKխ ~w(5"wP[Z\Xq7)F_jru̲+cQ[`f 8{jT`2 B Џ,.Q >˔ ޥ:0ly<~9,>q3=&;rgs'3ٓ%<蝧wƖ=O}Ѽ/w}?1ҌO&C};vLr&YMFn3CH'df4}<1xXPioLgJ-vލ+UaQÝ]q0ey>Z&rKDn,KZ8:ZM:"mDxTAȝvgLnǼkCɑz+,bZ0MKiQ1"ҡQj%BvJ)i#IQȕJF)iRJqQq2 ɫ(ˌWk!4+Țup[҆O TUWFfR|Cea%aeq: FZe\KuA#Ff0FmLҐQ4IBfKUW Vr٣Ga}A|I3*sE·.M|?'2>tYx?۳H;g&9, N2?{(_ː[6=YͽO_>_'ѿۙ/nnD'ãc׎z? RsiJxS{`ۏȝ Oa~}aLpu x0޳韄2Xn/a{.XvxBdRG7p}:W2g34&TB`;Z ,Ikxú)-Fٰ a*.ʪK.T# eIIA$,`gdmVz4|cC5"TaJ*n7t}(CrI S!=h*"Q1v]WAaV:f@9.tmt@$aR!T%TjzxO'C&頊kjʸe|N $aVm$ rt3_ b FxI*W\.UV5VG3H܏K3vrȀ] $swo6ܽUUOP`(7$F`s],u^zCyW} žkVN(--ݎ6bڐ^wםuMGj} ޟ޴4wvN.ȸڱ;KwFBBBBBBBBBBBBB~ Oy_&w'DSGCӻx+2 7}菋aZ՟o}ۿm{_ΧٟO/fV']acC@h4eT"}_|/@%\.`/`o|ϟ{މmWyxUjmWꇮU5zloo6. )q>[%&$#Fͣ]ۓ#Ov;݌o[3'"eu/&[ڦosAeҨZ6ǭ-aV rXֈFijaGe \,V2ۮzb:=*BSO`h o+lvq-* E-aT-= EҷE?:s#})|jj;DZ]z٧a| s5 X/!-ʠQ'hT2x̋nO *9y>}59$Iro}yd=}s͕[k;Z}F~)p-vg{b1?v ~Gdtb}2ynʣ_/_`RǯO_?ߥf󯦞.vbӗ ǯR/!*Ddg;Ӑkdldrx` '7,ŠcO8ݷy2MD~IDAT kTo 5MwݏZb%h8^$G,!]G^SP'tΐh Sg!S%&` f/Cz f9pI*R>\R4]ͧuNXxr9n>7+|US)T6ϚXljwtbJ2`FNfsSY ^9dڮe \C+ObCl ޡ](Fw=G~xc.<Ǐ|lW?zp?:t;OUՠt!U:}G'ѣxE<JdJ~ʝ$^Şn:|v7~xs+;gNN>I̓'s_~1* >z92U (Wѣ #Mh=1L6Ǟ? 2~XVyQdͯ|7{h^tr^ Zqn(vF+_-aoy-OQ_WU54jaqo YId^" ^,}S=UEгl l[0HHү՗*Er1BXY&)5[HFxipذ(U"kIU9Y"dյa9?lUEr0a@&Ý #1aR:,2uff.dwg.t.a3$ !D^˰\ix i?ФQ>F!Vj `?%,e=_0`U rܢ&037q#L|vxv9Q*dRb], $h+@{Ӓ_,e}C_4^7v8WɇZe^蔗Hł@t5[$HM/&gV3+C{>ݼO *1Jm˝]͝;#!!!!!!!!!!!!!B}t!ӹig_:s=|1$v<>}=O6vE<gf[彩ݻckss9_,> t.ؓmUB+% ܌[ԝA =t_`Кh<^#3}{?^aM*X nB^QֲZ A6I)-,JgM7~J J[TAn4)XBv)<Ͱ6^V1ENj&^4s9M `Zh蹀uAY6&UM\8Ut@آeBRYa~&li锤G,J % j"PA?=#q.Y>] g s/uVIXsqN B[ /VS[1ڄ;1k7F:^DŤĀu-bל}E2+MF;BREE s@Ќ[Uԋ L H37I#Is#`_lg| b/9$m!Z {tbo!b K`޴Yᐴhĕ ssC4Ї nk |̢@ m6e|VS.,no[?X (B`[04h f2ܬ%]mWl>[~QVl6 aF9\3Ǭ*(jZQ&a**MkrhA( Dx{d&C[*iTƗ8-YW=ҪX"=xI9&R5[rGqԆ=iKn'6zW8P;#!!!!!!!!!!!!!Btvsn.۩O2_ODTdPVXhDqt_mz޵k: w\{b(Jd~ :\Eǽ3v̀䊡^kS`; ߽y"v+廙mCqp=֩ [dA0-RE[TQIucpY\fmjDtN4nf<w&L >Qy*"}_YG,B!3$C9iQ +5BN)Y"`k|VHXg.tn"K- Nb^-*Q]b;m0glp ), D0Φ}E-l&Q*du]hUJ xt̢X`zm DȾ `* |=a 3xr5uZE6-<&mKĎ Wo l( RPbm0iKQpLٖHl ̭']dP3{!ĝJm9悋ξQ/cr/s'G'ٯVGxcLZGMގ6W˕ihG}צ~=r9;=oeh#Y<_$+B03- ҆wI:uf$ 9ϭVs'ờNBil;ڎ>m$ jŧ\Ch9rܤTMZ!W2:yج%;LU3H1) :hRzT>5Uu[Y"gv4Uq,Gg7Ӊtt&M -jZhi fXNY;fQb&EH+  Grg*$0*³E-S 1+K:1fz;ARnA,MvhRr5Ue(kfV$A6CVNНfRI[4X\VL7qWca I!~(~Lw]ͦd=;n)gzEL{Bq"vά8k wߴ6xMԡ( #wvsn.kDz'ÓW3I˅oV3#SOz%6EoӵK%8ZP?pCLSCG *Y3y,2KXf!_ؽ9q_U-~|yoxB[Tv*;)Ό/xIJ[D]ӰywhFyW{*p`3Ufj2& L d!jΰBFSƵ4_V2ŵ@duy/I殺dp+Iw;qߝ9 Շ rU;klc:1iYUA2HIbT_1ژlPձ[/*y~ 0(%2, `VrA]1/*x̢!>xu g⁷gpmVK@4`zqĢ$UXpqAZpHyI M4z!#  A*ZZ 9*Fg =L䔧&h EȨjmU9 ~e}֧-*LD&xM$,aT},dRꛘpbZZE.v *}Koo xʫt&kU;t/V< b;ǪWWkܰ.LBM(M&K\3J]njj%c:¨u-ߙLq+ W(z\˭@)UUXZUCg<60iSʆ\IľNͽ7 zJkBL9 hJRq KXY.[%X=3w4Ja l2hPt^ppM¬~(qhoaEglL, o/nt6S " q@kFjc 鈯&睐;!wƣvlΆ3 ĝJmg;m櫹Io?JmnpCYq)mpfض2Q/]U]|='|^ z$=av#:r'廝lCwqV*5NIԀ7SFi y1MfOf/mn7j.r_+W \[{.#a_2O Dv)=ힰ)C@OJXfsg>= NN^rHg¢gL<lay <+|mrU}e7:LXjƭJ) f9f-:&qQX0˥06`&f|]_Vd)FSF9GҪ4J8e\.2/*xA$ +\OW3iQy5"sSSg| d^4]h$IE o /%nRWkx_J5傪RSS]@/#AyaLc_+4^U\VypnH<ǡD1ӂkuC~E; zTs 5ץnCc<ՙ{ҷl[Ժ+nN]߭~_Qde㣉[EHmEJv8;.mK۶3qr8;2`7èQV5l-EIrgN*t7Oc;`s#dˆ),-%uģBE_Y.bt414Fip0O!*Z)*2eш|^zaVP@oEƌRi,0(VmР4]2.8,qKRY/lƭjܨc?I0KI\sq+o0ZjI2lQfUȢr+ZRCc퀨%kɄ=Ƞ%_Unȯd2J5Ju[h/cDޛ{gigYuC~E;Kxcp`Kdz}<=ޤ z'R7U{j-o:SԆ3ᘣsA$DMw!qEs7͝r'SG'OtG?=ٵ<wp<תN=~ǭrj9tm#ֽ)w~1_&rXv1T@oL_#K] 2~9${egh̶ ;UaÿI&1<ׄR*#M҈Q:FU:eRQn5&1fG,*JhV',Kq5T疵t wR:'~[}Z&Je|vzGhYxAS-2LِHyBv]c*j.9 ;s-R): 7R[c)2:Z r,a%?3ҥH@ Z˻gyUe5NQzוA\i %elQUY;U0maoHfgk1H> .`<5 HHHHHHHHHHHHHHw98Euwzlew{ԸT1X_>.omMv={h˭م@x ;Z %bw3;20tvjM8o'=[)߭pXl*, $zQFrL%!2h0E 3n)5XQFTBõb;S")KZsҨՄQ2ȿrO1+p\JoT_Kڙy+7#&%`rBnQ@Lg(Ò&`ŘQHZ.|ZIIUg\W^_qFLAA`V5jNWtỵ^_D;-+t<ˁ}T4{^P*-zjpG<Ȏ/'6ҷ6wpkߴ'o$ ĢHp :'qg$$$$$$$$$$$$$A?Ry {ʝ3fuDn4=}h.ΟĎ^O/ϣϾ^x/WXts9h^ݵM;.=K{iv{2_ /G+Dn>@/` hZmuk!Yk|Ɲ|v |sz$B:Ly6yJ0DJVyEZA-2 |ˠMrϴz %nQۥm2.kg]6: 0X8Xc}!lBSchV{b¨ c`r$ 0Z1fI6w_VV YCqI@la3]'}#6]^Q¯zk MFw" {K;< &?OߚZ 'ׇ67bL=uӖܰ6 ;vaAp2ipv@OY$Jܨr0lOlSf:V" ieI?Ewq.r=Gϻ}O>Ͻ|tL7{қ} G1tް6m[-gr]uR5Ʒqg,b{!ĝ.:us]4}=j6|d6r6*7[pl+Zlv-[SMF;E٤x/Pn-b["+cӦjn7q:%~xj~lS.JEtUC%;KVfg8>xYX$hܮ+zlz]IB0=\r`*Is`:4_]c djBX0}<8#S}O>3Q ǒ#͞,\ !wiOn:ckEW83  70򝑐!svq$j&b:{2ˉ;uvоѣrw6piޱiѧK2eBY/EpK-@[fSj[]bܡ0f UAZڃPF̪]-6u   [`^O/Ȫ|fYgryp0giP s!~sH` 5k|VU.p"bQҝ_gFxg0} ~.iTU"b+IK-SHg+2=-x .aڅM !LRJ52ݕ `- fNK0..n5_S2ER L{rP{BE ^H`!fVm+vCwFh)Mm^␴j*%"vJKA$ 0:6Пnr#U'FϏ.YJ\+/Q0MlOz, Cz03YC2j~ ejޯEJ"f0|wTŐojq.싂 N0vL=w=Gϻ@țGBM3*&δ7u# r0م3,ĝ.:us]4}O̿˜LؗxHz.1H'{NSwax`38MwmNє+-y%p,|ʀ&}#&a_4i tgN afy 0(Y̠B*!ܴ j @{FJQ*d*jVҪd.3=a-*Dqgң[Uv)bTNĝ!svqhܣ/;s\cxU/;6ݖKe,J"]~u߫i]vțd̤E2B(LPQ0:?nMr, atCӈ y66qAs=[aKIxiUʃMAA:eH *F;㢐]fVNWN^B N akvY1kBEm=-FePKÖo_LU [HBf( Vd6͕Qe]!dmWZ1]7ɰ[ |f~)iwp4FAinl0˸"NzCU Hm){ |4nQYC 鲨c~VoZf(Ke=_1P|Cot/ˆ@= D{Izy_?Z\L66o,l@j? 7uܪsbA&DI&ɔOCI I7w1EHHHHHHHHHHHHHHw98Euw󩣗'_NE;gW;B=MCi>۸3h?͏|*t8Z9ve{ {`ȭo2re]3I3!K٠V@>E ӋamoװڙelF\R6zd2;+Hf\IYvF9o pVe+^נ JZޠQԳU쎦zF£",ȅiÇ>_Ъ0+%4NA[>PЙkҐA #Xίp6}c6i]a[U{.]~ǩqYt/EX9.2g7'nM:u-NS>nlqCAa1D!ﻦfM1j xJ.RXXɴ4]V XCJak.3 g 9 {ȡmk>Mb{nF}]ƻ.0MM&YK{UV U&dt4 +E$]Va*|K _cSŨo^g]lg^JU6Q iU.McRd4BSڮ3/إUNi_+ƍ ]ˁtt NEar̪Q W+UJ06\Rz9nR`z)N˶&NO 7o¬sMjeUbN@wʭ fHآ:gb1fհZfh// eYe2(IF'Ag y(Oء/FFbhA0~3L$BIO/VM7u܊sf1vdMć ;wFBBBBBBBBBBBBBzE_ǹ.~o?%RܤGƜhkoq: \!#X g2]`3Uu3_!\6~CʛFL`l_TbFX%#l~|OLa%tF.ry2EgD!ͪ#ViU/zu sϺ(*7_k$IOΤI1 $ҡ֖"NE;*5]jőMآi ⡘/Uj{x~5C\Ŵ\UI6lѐf01 wg]hIcV#uQIJIZ1 Q``8t`4&૔8e|:!fW%{{Kdl0~T;0_eVՈyx&8%BL0v;Ra|~K+rN]3+ιṵա!0pq7"osg't#> q石s]4\ ~g_Dvr-N>_z4B+=-uK=qmswCH~/ٕHv,Sg .aمL|^ []>g 6u{kR$%wjhf%άRp5\k`10UDRV. %L6)n>󂸲t)n U[`I4JpX C3iT |6STYamkE Ҥ `o75'>JEUKM5v/UeZSN!=)K;_9UwU.T1D싆+CrnLb)HQԁ@`T`BzN:E4HLM D$ SN 7 Xrqg$$$$$$$$$$$$$Y;]uheŽēä[i[1-aۦ۱vCG)n.VrXf>d烹2_%Wݤ?9b5p=&C7 [*Rrʔl X(3zYW5i .1KQ+f} =i %t.yH/vlイO>R["ڳ(Od!ܣw@ \VSk^k^Bea*0UM_CA:G!i&aX%Vj[  —5ln& JȗF6Q3؄_rU-%l [ԘEalKUk$~kUerK}@2=%},b?,l2/dt^xL@8I "9Ls1I`'pSqĝo!svq/&Mma.Y[nmtϦ0ڑ{+df)|>^!n>ZĞ.GK8$Kqf8`^iS:ѣK8E400a H6gIY>g۴q,b+jSc/0'v})i“( N `YVXYc]qJ84Hï.M`y 7*v]ZI)W̥.uKzj%حN:;:T! 4 ]SH؂n ҬM A␵)/W8 )d[o EEbYI{-+uM@I (rhxcTɃ@={~0dzQ ~;>3a!D&ιws|gwڂsrq'wADEBLvI[hݾyȄtt}xpo|Ϧq[¤fa33 A8^%sZd76:kW{c}@ɥh 1"bU)~MW{5"K%.vF)b뇔bh 3ɨjqdq[Q"*]ܙfe0 %"lR`:iQ]vCc!┊9e:D!~bNd/0K5QG-ˑ&YU8xv׆iIM 8<!tɫF:hCFYҪ妦Z>BCb }3^L0zx\A!!A Ϯ? $ XR}Rd?%2d\=0|@{{y Iܱl $Yw>]#X05wFBBBBBBBBBBBBB qEuh.^0 /b? mKz<_l;;mɸb(;ӵp;疰g"v;?iS]b/jirH=j>aagP456ݧЁ0)5aT ʸ+܊ 0[B^]LUU{pQxIQ ZdU,^EkdÛo[tyrҬ&M{*m+71LwM2x@ߙtqu l"a \NS|ݣFٸU1Zc&5A<ߒ nx"nɹu*UPYhr=Z X ,J#INmb4T+6E [,Xmʊ NdB#"7" c]§M?2ġ?XV}qʧ XmJ @*H-7z艂 $g!~;qмiS=BⱱHK t&3HHHHHHHHHHHHHH?K!Shus]4\ ?E 3h3>4}3={Z2˖M3dnb@ 1;xx09 ICҴ)nQIk:oYjB:i/:rEriPŌRxޙEk$_IQU0U=)m-J n5+ AgUC;إ\ T}c`X+gMKBz)a5p"$+URnes&e 7+q8 7г %Q2[̋3ѫ' b@Wj+ F 3Gɷ68 a%S*^Tq0JI[4 ⭰iQz(UUE3Fr6:sMsg*#[ш W넜2,0jGN Ӊ~g;kzC+LsI}C*4ת{x[z{ tHZe\ e {@A`(Ig$xEr cvv;EeoWv=`;r/~OR^Xhc.Cf$<4CWxAn۝+:{Bt kR7 UU4&[B7흁׾ uϸoB70Ǭ#s&k\ٸY=:}78s3!N? T#=Ѧ *BLJ͍gĝ~Btvh.~5 Ο~J?{x~ʿ=f_XK6#.V4MЄ)JQ C4GJz[.˫+Tl%h&%[4`)iV͗ f\W3- ^q,E(LV0Y5 [A钀Qg2 õzV0 &/ށSɹ2^GCǹaqB%a0:$ТLAFi&%!*+2m}W# HKa[lc&E?ƼGL~/|8q'}% VU,o?o*5@=F=ꝕuOɺ']|Ѫ h|`*DVf G0i!tiU.Ez!'#-CݾPh:2և-wy7+ȶ?%sAI'>KgM&gVGzP$"wFBBBBBBBBBBBBBo ĝJm׹.~hxt 8gݒ^->|n=F\yuJѸqCe~4rih Q\O3L:lmJ$ my15n=VA*Գ9640oC7u6 >Eꕆ \'&AOҭ.qxR.T)lI(!/Fe^ }, ej6Y.b*& FlػQf+cN$IDXFQU9]&` 9˜Aik~})0}{:-hY40&ŸE,k%e\P\bv^q4qxx j@`% ݲ6aeSc+JԵ kt-bC0*BF0L5u u_K-}Ϲ|>x>>ƧY_v ?37z422Srϟ|n `4 byoKeCt7R&>ŲC_l $2^(|0 2c;[U݈˭1yǘvxnsxoӇ{898Ol/<9J}q{ u͘Nb{vΩ;{-MFB˸g7x?{!xo4H}q/GC3t,34qOcjQ2 '#XwqgМ#0g|vτ;a7٤%ҿJg+᧸3|;!wvh.~u$F;NOtsDrki$-ȥ؝!e^ęvv!xD<[-Ong_V]__Q C9xM`Y}j0- 2Iآ̽cU\_PV~Lq6>1Hp(1 3+"%G!h"V3MX| a/˟y᳿l|rh7} ̓sFgۿ64u>v.{S<pt/HzA;dGh)xMyGJE*{Ć|ј=:;v8~E{O+#lo6NꍬuL隸iN1Mouo6S;ffgtG﹂K#>icN;0{Jf` Kl+] D;kpE[U6y@l1l L wFBBBBBBBBBBBBBzυO:Eus]4\ /f:g~9s2?~-ܪP{^!~Vh!l/bL$J*Kx&:H6~ak! ! lMV6°FI&n/ Ѝ4+|j针S,Jd>^JR`: ֦K;kMϻgơ#^L3\FدGfw|ѹoq ď}#O'OT=ۮ;zwA?1&2)0u+ێ=Wz9{Y; U$6?zU:v>yI/}w硇w>סGL|>mëʹ=*#&%=.`l}dz1x?g3t;O>;ZvO  g8*Q0HHHHHHHHHHHHHHw)]]h.~_Ď^r'3G/ǯO>×]AmìVt׮a^s~ .r+ `vۍyG͸}O25 R5:!L54(FI\v04Aqᑀ2.T*_vHBT7?MATrܬt+X_U!0ۮ˝ah*elVF:~A}FW\0KUum A$L \$Fp+bzә!JF%iP45]U1Z%I+C o<4&R ت-*T)XU*opE8^(rM@P0%aƴ7VJ#2麐]ndcG}9ɿ'?ʯ_7gYm/}/7oONn|荀GH;'lF(%Bɬ?<,L8S_Bω`r}߶ d]b˴4)07ˉfYM5(4]aNW><{|>y2{g+[>h)6 c#+'D:GrXft;< .Ή`"3:芷ijgDY`# qEuh.~TcON|1!xd"VGeM[|i$}E,g Y e~:xB@̀|O6]Ž~$eAj5NSѷMo5iP/&, Nû.f}˽ɼΜL1~x+1{1 4ͽ?=I_Ď_&J=}}~ n?ft8:3_}>yǟmF綺&7ayGEh(u2 vD?[(]CɌwɝjׇZUVC78ޏ%$@;.ڮs]4\ ?Eu|5}19}zvt~IE]qek7lt } ͝!w>Z&r+pf!t"emi! B招EE ~5 ֵ(:Tvq+zU2pxz!} Ka&G-24֋+ĕʊ~XZF! }62ic&i:'4EpV)Dr2(lV i g(pg$ƌI _+4]U?1.jꫜR.fTH#2b0͠Mg3m*<ŠkZ#LgV)ₘSV q ֪3IS,Da i$ϰT,fT[tw|"wvW?6>Ƨo韗?s$? hǵ][~?GvdNxa0Ə}]q0yۣ"G2Lv{7 uw-plbu8j${ɜX9+8z;y2bï&s'0dU4߁s_>&SO<~x*q2Pu$}rj*w2qOCS.uPbI>I*Ӈ-~(u"Ag>nUňgdtzGu6[qEuh.^pE,>=9|zY0?~ʫI.-x[6-vax8h98`R q:\ QPe`;{$D0|C:֧u[i$ UVmH/ w6I7+eLXBVq10"fdR($-`DYjZIo5q*5\ꥰ.3L* mY%!0FU"*UǼ eܲH:lQ- N3rgĉ(.1JdUL˵v~KHOh'+`6 ,02Ң|ꢘ=jQgY5ǸHry |~D% fsMJ-`t*TymnlG_ӯϾ>_~~}a߲;᛽dbwX,|Ppdr`_<}V_д՗0{joRHډۚ/"_}Nn6*}9}5=I|>O'㙯`I<"}> ^2_3WN/g.SOC'z*{&ff˙??]o'CYw vhצ%E1Mkl;s ;<3Ѭq}3!2-.hĝs!Shus]4\ ?Eige^|Eo/ &fo; w\{nӶM px-c åP~̭%,ejd7I涀;+uDuПN1*03J ˷\x~Ap*dUeBV9 M=- 2 /%I$P)ŭ˕f>>|;,X 73obG/}5zޯf>iO7h|*ۦ 6ɟstwn-hTx)|&SEwFBBBBBBBBBBBBBzpdE4r.w2y>IeEX󿜋^.Z\9xڗs3Ǿnat-wuƻv֐q/-+Df,ceh -K I`!&{d7ɥO#͊YA` oZYEXx©jT*D !ZG-WO#` 0{KҪR!φ6'T;2mL2*lq" $v)Ww)`eRs%n=Q~gCK\4?u ZJ:/I &.2 v\ 0*p\d$n`1&0rH3^2>"+E-W-$f9K* =fTr sUqEؠ i- QCuwW+S,|8|>ćߤ?&E}򏋰<ūѫ80q_/s/e ܫc9|0z] ۿmj|&9az[q+;Ő㗉prmϾeNf3299c ,1w2FGLM#fA'^>f|D:]%W8!N8jN>3=}'8/ i}NoVzZ4#=<3sI捾w̴DH$*r)ZxyzK4QIv=ݸ7t}7ؐ3QiT$2@ѷp=)|# :I}@\[7v}_bL}X}*#zyʈ;#!!!!!!!!!!!!!} .ߧlwp) r/=$0KaNOiѝ6Gwt]0) ab ~1H{txtzNvV7vm|uΓ{WK<#`Ԓڲv}SM:FjR5|O7'Szi\U* 9BjsU^bG#N̝|nGش$V㸐/L)TyBiAθT >~S9Yq|6M^U 3b6;q>kVUr>٠0-=Vm(G%TxJٚvUnb7ј~3v-3.0|VP)P*_-E Ńf%p8^,-r`n: kaN i^=b;G88 <~ aOiѝ6Gwt6BC|n؝Ή@.o6vouta+H71;A{ޝ#WSfCѢ)W.ņZa$Y˙-L)3q,0S.EY|QϦv 8MAV=u:wP RlAcu۪efDo[ DcʴԭAF,ɒ yՂ 4v.KS aFx +V]$W-WΪEG[Gqx8 +aj#W30_~:{9 |MSOǽ x(u4y4s8w8w+-M^c o?<=E[GnvowaU5E=;]w ^f[sqc,U^f-:S虣3*g`qF8K%|ޠIFb'Ȁv]a`z¦ 8Mn AZekboz*`č6[Xϔ y*1HکjV M I2NС#^8G-)E|Dh+МuЍ8w k)62h-*O,PI3E.PWVlh) 6\;ُ72dey<9OT%p +?$ï eS/iqh^bvO~S^c=ֲOm=ػ-ۯ )?K_eѫ?%I {.plcu~If׎ Ѥ'|BJ/ltЗuAm\e%e>aЧ __ :#W>is|tMѝ6݇y00<'Ct_Z;5pAwm_rmO }y9p:ǝw.QטSVi5V*-4N^9ЙjXg)r 8f@FiSžN]ԙVXOw#gjh|]̱`fpJڴh8L黴զ|(Z嶫|V\GUq'S'S8 (+d Q~~Т Qq ֠K~]w&eC0S-zre :- |{3pA@ m[u\OJO!E~Oэ)֘adK˝an6/?^Oojj-w48{Zֻ/OHwڼyej{ ?A\=͝OgΩK`m;;ǓɃ/Ll0BL9mS}~$4F[8 :È.YxLf7FEwFBBBBBBBBBBBBBѯΟ&b4;A?9=Gwti}9y<պM4a3]k6tٖkw5wޝ#}6sc295MNMZ|Ɯ'ӫR|{=eispg?sQP}N%96Ej3g67YK;Ԭf%Yl.G\]g79Zq$ms9\i4+K4B򱒼NMGg1#\GЮd\4A߲WK5R\pVzNkœl<FQ<=RG`jFo7t*EqJ*'SVxU|m{ۋeߖmX<<9z}/==1['_E>Ky =l~?M`0W?q;w;Ow>8&mhc"|I]5N4,DsyHǯ ,~}e :)X8/ˮ!}69 AX@(+h)A;ޔ`mp}if7e%5R(S/;h*V-01`lYߪkL- 1Նl0K[fgU)_RW^4^sjN>; LoV6Jt93Dau3Jgu#wxzu0lQ)%j1wV)ȳw`^Xn >GS{/wދi҂[}/`1LI/G62s=wUhUle;sq>=i*́c8/2ṊksW@٫q{e'yZ} ߪ/c͔Ҡqyޑuwryë7Z2y3]\LvSF F;?G?BRaTp%O3Oiѝ6GwtCH6^>+%=% z5jxvm/3Kl<4γ%r 5]$pʮ01ڔ %ؠg`NaДan3L*eb.WPtqdM:LZRej|s f6qga_x0`RWs*YD4 f瞔Cܑk&XVMAj$<(S'nVTiaja7+5;r[I6 2 "gYQkv-2gt!$/2x 9;0 [ 猹"'eV n]7Rw;'5zL1x;sr/Sqx ~1 Fiѿ?&{G[Si옻kov0Aks{#ǻA[#=<<<$_ƒ/#o:VSK#C:9:bo||ۙ;Dt{h kÆF;XǝS )3?~%w?oɃG7A>8 ~rN{>ӦKSOO~1rÓ.^oo˥~]beiۉv.b9+tr#/[stRpHrwha:"XX[g?za`c6x;NLBh̚0% h-=%$"L+K64%`p=\gThjQLa)tj* JL5xɝ9M`O40qBS 3ye`qi1}јuRPl7 ri\9O!;OF#O LгZFnЬ.k*1L0Z0oV{pqh).ϡ9 x0 ͚J}D%Ѐ\jЖ^pqx8"S#`=o: bS,"bx6ׄcn>{ȝ.q>>ij9`9': mM{>gjF]2*[i8|shz ?$C"~vOof)j|;9<m{dl=Otg8Ew80RSקiU4 B?Os@Sn2M^d u;Svxw kG쐐~/+|3}u>q.Ǭ|5rk7ǝ^##C`'N;mhZ qgR>Nꪝ5c*5j}m0ص'/sogοJp_AxWF6c#z9\SxiѐIQaV{tiqLuϸ reaÑ\Zh fQ,;f*%`C]Yt);sq@l ] W˄g*g,GY :k`֠z]ۣYEY|i]eàF[[#p1eWv Lϰ,u^ɥQsUעql/ E: 0vm[ rGiZS3eJQfCUF78VK n oSQ}i :,F9_*bN*ֈK~~\ l|5{{u''N&]JΧ}S|9|$Sg_ӷyxj/ot#fm}MG]"l{;ؖ/ɗO<} =͉-ot#{-w;vm";TQ7I ^MMSޮfG;#!!!!!!!!!!!!!N| wOqi roq <_4p4 9q>ӦN.e=H-L6[PWUoRz hi#pfsu$w6 ZTŦsc>Na'¶XUxwqho$n? QWuhR]_tz菱-_qgolI|-_>'׶7z2{~dtrKme;vqg$$$$$$$$$$$$$?H_4G_[]w y V8Pa>@?E=GwtiӽӻGۻ͡ABgRIg4ƲU?K\/y|4O')1GíH୘级aHSj>leEf GZj/݌Rk1b%A.| Jܿ.O1ឺ@rRČLy6Vv>lU* /V2j zi7A@hvBv)ه;uRcfΌ0`R4Jy"0!O(vu ;7k)nD%ɒÍ%ҼV 7Sl,aO=`:pV}N ޖLmP-ɴ|'_>}y6'ǒDtgx7r7wgxqma{:ʌ`?$X?ĉN*?2HHHHHHHHHHHHHHp;Wsp7{co/~JӦN.崿l :Td s*YAbv؎v92yڿ͑<;Gr l~$B\xF!V-mq5]KR̷ոf#}aӑv4iiL?RgtuE,/fhYhMLOV{] pcY;4|_)xJ)pXhݲ fFwq>ߘ+R2ڢn]50v mrh6*$S)\7lQ5s2C[[t9 S' 4hR6.K5R~U֟9|GY~vY@Ҧ :#%wqoKW㻯&ɣWp~sǠ]WOwU~ŝ9MS?o;y8߽`ݯwtxm od+cl w~o`w/-20:>x  z@pi#]!*DBBBBBBBBBBBBBЇp/~{*ŽawCGĝ?ӦN.)T>0g1I(.y&Qn7',3}ܽB;spd7] ;maR3dZqw)]fo9YVcb}9=a#p7`7VihߝՌ8k520S&U2biq &IHF؆ԧȄrQZx,#O)30B(/P3eLD53.S``pҮ֔?k<|~k8$l/;Ko7tL0S%XS$UQa6#I o= X8uϟEF|OM| :>myc}_ >K9eq\^|,fr0uKǶO?q|etpWZ.>0(6҇/ΐ[Lrܙ#.;- 3Ol/.1ɨPKLS2tY~r9C]_yWcg%]{!z{g7sl>hX5MiJjȝݺj#1=aײ8-afy.[ɜ/0aBm=m̋Na60iڥrQfZiv+. ˈ .00a %miN]XQ:JsryYҖ4gLӏ8M ;>0%Yb\% Fy 30Q@;SCq4M: ~x4uT!5m}mTEAqx @''sgRrӿN=9>:_Z6a?~]ٕCH AaDf#u014xZ٤''}M"􄷆7ə]otkx' o[7ED" 'чColdt:4m4) c :3^&G:qg$$$$$$$$$$$$$OA;?|CMm.|緹t8c ȱ褘Gt ~N{Op(O% 3enn%M ܿDS[s%bsܹ_"7^IuJ"ZIZUeӽ "8qż+zfIF̷49|hg V%kF4nT[ $rALēb,J  Ζ4]3cFV[fiL׫t橳3jU^/ %_S?OF30 کsm~|;vi/plpSa_7=Dx"ph IoxM;|} Û/E wF[ωhuY-- \jc᮷YqB6wFBBBBBBBBBBBBBt;ߧz8|=I9NNi&XNø3BH82|9})UI'E<8{F7ބ_/Eqryy2y޼l^v.3;3cm[c[c= C%4k7Fnƨw5.'9]祐;q#`<]USSi[d)K[_M#䪠#mzYYS UbBa-zl: 7RvC7ӰYG9yiv}j¦ fͲ*Q\WI³"r`QkМf8fu)MҮ2J³?s奄0RW Kb8CiHL =3!/ͫfȄj)\nrG\jhYIdn q;bp4| `(>wc70'tg /;֟lt~{r>R7t18s=L|㛾?'6-qFw9y>F.")|4/u49q>5OL?t8yх!U𿨅|$,c7G`Fs/OSh;\b.sez{n7"O%Ԋ3* ǻkab-F,a6bޅ`0kA%&emQL! d"J"l'1Saq#-5U%Z@-)-3xiϦ#1Ca(n緽'gק40QiȢe+E @.<|VWVpY`xn8ߍ`mvpEy >O!8Jsri 8΁i2X%:n lȐ+2+yZ^ +F8wM_3g5Օ]P T&+8U#~;sܖks?Y'`gkc-kpNwȇ~A?=oKfGDd~t6 ol>tG1 CC۞;}c7lC8V9ls3`;K1bΈ;#!!!!!!!!!!!!!;/a+W{*y77}Nø1ll6_L|ۡ*j @u/LWnwٔK%ez' j4v~V#쭑_bzb~.R9G=q0hk R=C]lv-m׍8MRצorEJP-gs9 `:ڪ FƦglS7da9DX-4rǤ:Ү 8a>g ٺ`^\+%|gb9juʧúc_c^U^e)|T`-w6XM{0RW0k%|قbwqjʦ {כa_sg#x.c!L--/ʲ̎jb8RԿS$|j ?cc\:9ǫwe~cɃG<\؛tu]ټU+T?fG==_twG7?p8tG݁鮑ffuLt1.:sF O;>7;c pko4i&w: ~rN{O˻;Ý` gc3N.:[JvRpp9F,ǽ+?wޝΌdD͕e}f,5 SC\]3Q7`ؙ+@G췩i.HWfF_MUn.VlZ*0Iڕ+Xи$ ڮQĵRST-U24RA*|Sj(\3R{90* X fDjY#pRrXZZ _!H'nl/[g@f>\oĬ|>~m>r^`fw}]Olm"CO7M% 71JgoyB[`L݈;#!!!!!!!!!!!!!!UhoΜS(3W 쿌~pzmCq?9='֋É헓/{/bW vWgB$JKL2WL&5wx:PgՄ]tiHa&UשK \TU⳪;8R`gNZӥ.ȳ>f&os_~#ç/0Kߍ#;?πN ;á9 ~rN{v[b_MnNaV_߰JQQ->Wq%]KQrܳsI%fgޙ.QRsCZr٩/ ƫ+ '"m9FJ1 /L ]";m4 :L# e6=4|R—K2ٚϦa:bz?!08ic5/rjIBg5Vzj4 J9,0W,̝iz\Bd:2Np9a5+m`,JU_^Q7$zQl@3ŘkhU~LۦHe,X,Y0C;6-0h1cS8 poFRWi][~ ~w6Eݷ>-w~ǔ7/oWa|EWG?.Imfj5|9I.SMh' 󆶼o8> 7.{ܰv$*2}K@{p?k z@d+c`tS>=~y.tg39|}ߏ!!!!!!!!!!!!!!!^ ^O^^$lגcA7ȝi~'v#,}7olϬ4&[^\쟿][u}~>sQix0'`OOv|5szt>&}JxR Tj戎8>CK1 w\^byr#;\wJ~L;k W{f+ r%FGk0';*w'cC#f680pY^fE<(K%r^(p#mHpC^\JLc[[t ́]iIL8MҦU3<4YVju5@bZa `;ӺWYl7PvoVZ rY0T 1`j,˦DNϮʄI}w~:b"bj뇉sbf6`l1XYpo8cKb]|[_Q'!:Pn 8>is|9;rЃËG{?w(K#:-y }K1b{ydrefoKt:kW{3= z\u ZXO `\W[1ryl0>pD5uinWi*IV S!ukeu;; Tvv_>oD%EYraZs/ANò)sO_bhM7`c%TbR7xmz7jhxw6׺1_a$YF«L#ܜ/Q2(Ӕ/VK9e{8 JgYJ“2gH)CF9ŝa2y'rg:{{<}խމe+tTݺ5ox}7Q?t^m7wL'f"}LRqg$$$$$$$$$$$$$OR6k] 8&;kzol|cn5_>1GKb}l>p/ɵ3GFR$E49q>iQd8yاqaxExO&.'+2YYpiZ¿%>I9fk?9ԉ]k,g,}ROlA22F]7zVb^V v/=3Ÿ{!:'i6dU :`nzUs9JdC*iM0aaZ 0y,/SK P.H"X\\gq?/> gOcr0۬j(6T"V*JRY7$d9/G`K~pB>Ϩ+/V3b<Miqκ36 ZCtZBXRpF\ ԔZ-֓{7/q#L gE@* %P_^;;/q `01i.mxeя;ψɕps4|;}x;?z䏮yTctvQ* T &F Η;fWfV#7&/ Y3x *hpv|!ꠧ;0?Lpq}~j{OGBkMC!/ 3n}X+v9CWc޵c^V۳N̿v?Z;P\_'rLy=FE2OE2ܙXWR̳sP@Drh\]pi]UaEY $ +0X Q/v- bfpUżjQf53c]YFyAp*Ys@IrĖ ]צ,3 5R,+C'5ʇktL;5X$Gp#AhAX50 ,\tZݣ8,}_3 9%H;XfjW+<'ٜ'hW{jԌ0Rgysga40YTEjџuE^22bLmlO') sOs7>gԙqxxj`bxяpKGZD{JC@VC5`;q }#*'D2^:C|7qg$$$$$$$$$$$$$?>;__~SŜX rf>CGsnzFˠc[m_~1|C19K~49q>iq0qjï/^ JN"jPO:Н*ǼF==h楘o5A'ըq|0o/m2Bx~>σBuzg3bX+ J̳ < 6uf 7ΘcպʋR~(S!δ6J6&ZpXMzȝ~\~0C&8dॹ .pgΦ9u.OQV  y2AkWM]theߦ  }i&lz]6Ve ӘoSk1iӽ;1juݪ kJi)+p(-)G1$,Wm>ggE{O7ᭃ;m?EgqgX9yr5Χxn0s?nl/8VN#P陚Vw$ӜׇɗnG}fb}kZOg1^zj^=Da jT/7Ώw]KgBѫ3Rdxݟp9_!Ե`D;EHi8įrSD!%<}UUg1N#C*t]}Boa:q0C+JU`̀D;̔DwCgjOgXׯ6L e>kG*Sv-)oדbQUW~N-R BV*t[T9`7ƠL¼Мf;t]pZ {D-ʐKyr"UKqHN:opmW[Y[ EïQzdoW;/a;wNs pp}l><:ms><\3[ 7v&P`//.-wukz蟹ަqzP~zfwӉ@w$>с`0)ܜ2HHHHHHHHHHHHHHp}wz{v8 'V׿ vC['6z>ySic{/isA۰3QtE^/7 ܜ>z-XQJXzoΒ+QIsܻ/G|7nG{A[H#a%E^nxR KYZ Mr镄mzmop(R!&dO?_b\7K-jn1ndpL`|kiDgϔb4wȬ:4 4pwaT{1c75~Y~A×2b)Oҥ3dl`dQv*QIVn̕B?S#ו` L2ⓩ9^ $c 8͝ 8S-RfgMMG;hϐ´Fnp-a1tU,yRU9R "OmNnOmN%wŧ͗4E.*6AG|YoxLW[a+J|퟾MDGx?cˋ?wFBBBBBBBBBBBBB??W'3yM^ۡ9譧Ӡo̝?r`z佯e+K߰FG!O6 ~rN{Si/hb3QE+֮Ƙ8%Vg}Xy{E+1zķ<1n_aE Y|1]g9O {]l:rܻ`4f]fGf-7&: 3 |H U9B{iVtYt # EMKشZ Vd*DJIaf0X8M[N3[el`lznps^a?_e (0gʡa5#٤ cA.[,gj$B8SYN.COfn=;ߦT8/(g3Y4K[rgXd:@[CZڡ6#i׺.EA,٪lQ:k-[LDo6ο?(w~;}p1y4}8{ecWڂe:8$X?rб&1;qg$$$$$$$$$$$$$?>;_=wz_Rߎ%+z.ȕ<ow#Sp+3*8Q8ɶ St㤜F~oNo}*bdro+I3 mE׺#WRĻ-Nv^ޕBGQ9 hY}F'ʋ ye) tn#!2a<427{j5\/fbwȆ  aXG0.M.d CMY p=H%͏0vc”/VhgULB&cI)x $'ېhcQV`.UI*YVk U3a43Ksis`%* _)a.UVK}sqDN6qרybPu, _m>ps;RٗG;/?Cqg=a6$}g+݁5ݕNGc] NkՅ?xdCi[L,Ga]jܻ.Ǽ 1, ίG3{@tU~R(lQ3 9E٬uujh%\y'Qb䤽q_ tuFƮ W= RA'eD UKuAD nxƍF9^b$wb(N ÝqD,w VWW^d Vk Xtbf0߮1j媤|'fr]J'tј̃&> 2rnq0vACϠ?YۥI̪3&kK_asQNM%_&w; 'r7ͬk gGĭXg.wG Nq*Xiĝe|}]s|gW"7\Ꝏ/$_LGœw~cy[0i):qRN֫sʬPY#쑭txV!r{3BOtCH.8g9ˊFZAp#͝ޥg5_ CsTH%F& M9_*fT 2yO qn00ƴ~UQg 1_+n.cpӃ]OwP#zՖi%բ $@2`P؍5,|fpZ(it\(2͡e#XDկA37ce%7p=g5/r R;X :#ˈU|÷a0v?B9&BF$E aօGcۯC[/~ɗӛ/&(;ƷƷ;c',/Ѿ`3ن w^&:`7łnp3!=TetQanĝ|5I9/ .p/A5l{u}KW''oFO`[sis㤜"S!;}1Y:~ U]t9K.G=28/ըgqb =]7ގuh˕b>On,2ؼ2YHp,}Pbx,<1<ف6mЦ n*Lo?_ԯ0ji\O;Xb ѭk.};ԕjqR)5U=aY4fmm Sije9j!6Vv݈u1a5ʭ%9rQJʇkv+`v̀f)3c֠ͧoU%:3] v768`a .pt ڮjH,/eL%f5$o~Qx` |i 'r;;:~9"<E^/#w /|\5-^ i8Ditqg$$$$$$$$$$$$$jU\|4!ΑNuǠgVapi_n:5ڔXi]krwcq?9=Nipw["F}IF-hՖ'MK';Bj 267Z̸ܷZm>fȢJe0Xe+v-M{"޵)/O\VOĵ@HF1Cv]Qi-S2!O#nWn[y$ehc 3.nlUUj|וj44 AHFnL⠿.qجr\(9"g*̉Y0BwMG g74+ϛ *qFe*.Pq1 zfA38ΩF%4́U^lk% Ťk{0әN턛R6m7psNn+W ʤ"=h{$0?w5h> |~Cqgv_ޏS' >%#_L,tag#ǑTsaOir}saCĄXTUpi\\XKbgnW@cYYHwD9`hrB#L)ͨ:k^vJpA 5g;fw&W"ކpv!0LU*ʵ9"󵹒Nb 8!'XƍZM\ eUY\aޗ;5}{|BSeR$o7Pi F'(Ed(ՕB\pF)̰H4UtZh&7Cl:ak@hyCUPj*Z Y ECfԑʡYnKG0ozؠ*YIv|Yy&w>߲Ah}:N?|w(u:}5<~='ןl{GzWIӠ}xHS3Wqg$$$$$$$$$$$$$j} wN4DO3ƀeRC: H,GXtO,Ϳ`1sN̝,=~t;} ハ#,keCf»{ 8K/ԔJi? 8]$F;#N^Ȳ2O)r=`jwsXzgw;aᆄ1rXviqXh L>PbB3拺tq(\: ]`~L# yJ@-5To70অZ@+RKrA@ԩôeq1=iSӸneشz0ZdymҦuvCAp :sNKbzkpw:gն+9*aFMAvm:'bz]õCa)H!TKyJi]c[q(y4?ܞ;۔?~ڤ~p»Gǯ ]Xcogο5w&ݧɾd u;Svxw kG쐐~/ ߧ<^s r;?y|VD u3S>e^l-*sa_5G9]>-_׵m|;/#0,[M VP!hBtcܳ9q~R̽/]h]~B)ʨgD<4V9_w}b`!4taΆgnqul d%-f$pV*+VKDUYjA\a.w+iUu)h Lb:®iU Vf y*Qf}yF KOeqH rdLyZJ~fY`:^3Y R8K%Duy}j;)` nNԼz-p}Ltivͅe$ndo5w{MA\!Ԕ'UI A$ǣZ$G~:nƶɣwοO;{(Vf_Af.n2@!;#!!!!!!!!!!!!!SC[+n|>^jF}|qvef ;iO.-òȂ+ּ5xahe4q?9=Ni75[ ww2 VvcU߶"ps*+c)^xV 36ER\e*k+&z\FW"'; ۗv)j2GTb#m3v#0QӐIe_#ᩄx o*yb5;ZcbpI:t#.sZ-RHr"3[ix2ݖ"ޕ%[a3˝8sSCչQ2WEkx t8܍>f6-<2{fY!WX-8[-4JդC4"q@ `}@gb~ڍ>܃]!<@d֝|?I|?o>#z--G wbL')@qg$$$$$$$$$$$$$?>;_=آ+\? )3]K,㗰yGl>t lpή6;\stquϻIu;쾊wW-s{_Ljdx9>qi Vޘb{-S6CR+T 3HK*Mb)Y! wEX9C΋5SKbz_va f7l6U1Wdmr!DS@O590dC]E^>4Sw+QwX8M^EYf+lBaQIb`.ˊ id˜'P s\AFs0:򞕀yAOXO4BmP.`SvTq`ۮ%]6OoEP5o?>9:r,J#W ;Ƈozޫf٭6F"ԃ3_h\#YshΒjK\&[7ХjJzI4P T0y ]sFn8؍ и|ѽ?LELNq?9=Ni鐍cw9`^TK;syxz38OSʦ#,ږa0Z :;qrHX/%KQ߭Yf)wthhL'98 wvf bR³,xЙF03 aշ+"^J·fw+i902mC4䶒OaR#0|"p/mܵzyMX)Rv8{7ǷݣH {JLO'w0o[޷?w=%Jhga$0q&[dʗti(-Iiq8 a j\a)nWv]e`^`Tsj%6mP,*Dl5qg6V bF JxC{_oH$'&wB;/a}nǏ3+;G}qx?0uTVd5۽4 3?>;G)ĔbbR61U59]=5UU{ -=xܐci̭i̩iʱX[Z6DMB=[}  l>oѧÚ?߿+Dх}bbTJ[Y52;DhLǺhWF rM}-X|4xl[1Ĥl:h.gѸjzZCʋa֒coͫm6e×-lWO~39{|)|)ӧC/i_\w+"dYI{F>7ǑWߏ .EhP^ L x爕xMy>͝BC3Th)脘W'3T"JWeg8.NÓ`v(-ʖ 2RRti*h YҮ0-i/[hҡ4HE ~.oukMbyh?O;/|Kn7VƬJ9b`itnwSv)#ׇpg?\{׾ȧ|_>qxkW_ C1 wa{ kc#(6d[ꤵ9==b#0d79F98&uj'[<; NCE^f$ruz)|5+ޛ r)Ygע`t~2lRY DJq\ē 2 y~rLuݞWgȕ Yb%[[zipDl 3mѸ_eU,eew)DcFMz]OamVV3\?&6- O[$bb#]UeI)5`rfi׃R8,fpÈb 3 [TR(P2hQ>>sTd:WnWsEYHk iv65cWp-eUع"@ ¾F'|KØ;NF›[Gi+$>~FmJgTogĝ='x-g/?Ͼ%^z5hS|?FZ[h_lͫs-|GGA|$Q3_lި-4$lQst <.7,wCAw4+<=|>qmghb!v#hu^tM{WomXyVNq՘=F,M/=MM5 n0ȍ|5| Ә/tj qOz9,KQR»:_xVKdh%i#ↀңE`(eu@&)-baTYJY-hpϽ⿐՞2̩pu6m72 L ܥg,4<Mu4\GWT`VM38?G(hJQ>GXW^ԯ6亝@g^9-n!Q3G]m?We,T\#g(Qd˙X 'wb[̓PW6.i6:ftuo ч3?>;=;ӧޯ!A!w[ߓgޯ37GkK ĸ^lmȶ5Xrmm]D=r>>-9>O_H z;pX$)nypzޏկSus #m浐{5A.%+qrĽ.Nc8sdxv)0dRK49Bjk>n6> b( ޥ r}oult2a6miujd*qLȓ9y)F]f\#,:`(m&36U_PI~Ja9_ܫ1NGuSSP낸4lQar"\!5 QW-l@ Ԍt+Xet)L4{sʧWY6nٴ I&t:Ϲk qILg8J "A4C{A)oz6?a#}GkW_?'߀g>>yF>|gaX.scEKޞMTaS=)^Zv;sX'8ŭ~3O'7&6^] ^Fn8FS9i\_Bxx-Yarܻ݌7c;kbayآSJ"Zw14ņO $Y m$|KqX=Qc.0+b_%Y|1plq­f#1,0)krb\>M LВN㼜~\8 bFڪnMNe $QVf® ˝>YVERUð28X )C/s94]f֔ DrjYmU]nMsAGC603kO+IURtaKX(2e|w>fȿ?ÝCIv#Ob*HeũH?@ Ӈp_~믉g0Oz;?7ohp䊠}O[7Rgߑ_wvgG9)ڜckcBc|!9Sm=ǖC׿ vXkNRQ=od6yOэ㷞{mo\wêW'j+[{X9Qrq6CL8G&̐ 3"$׏:cC7 KQJ·>G.L'K˥q )*]ߩ0d "\"PH}yi :s!uIp=Ljej1rgQNoU. 䳐;a!@s kvCn :,=:NS2Q@ء mzUZa7) 9jgU³\ &h;uR3X*sRZSy~>edDw&8|r({>H~8oah(|copl5&5ܚ-C3[ r%2,< Ũ{5YGG,n&Y6[dE\a3ΓQj̻6KR QR·>Kf+LXfH%y1_)x]0=I3qv}cUF‡Xa-q3m :0n79ea :KӀYe+RQW^Ղ\\mjjq\pVsC}n\yrovId6nOJi)VxkaAIDAT5Z-cq! 7n/kxy\tF.khmv֋=>f 4wF~cH”M=~tA5s̐cz'zq7"L;#!!!!!!!!!!!!!!p m4 A| rgX8̐;ʢg/?B.j꺊yڦ=m6F\w;/Շ;f[nI쾘~>/w^v^Zoˀ3L [}061VO2U׼9Kļ+1r-A1j̷/gj}#aVP,0Ð'7ʨzSliirf[zWfȵžHhqf®[ud:< e神ZCdp!>}β"%ZlbiDڴA2 ;cZ%JqLerEr3y$#!PC F\R-iY C( #R0̋MV h3u5- N/ |NFJ*d|H9L0MGS0HHHHHHHHHHHHHH~%w~ x53(qN 0^Zsj1i;g4d[$6w% ;/8Koa_tiYpͮ5/m_{س՟|>ޫp8 wBo0ܘ1s=5t`Z]1 M\(iQqhC-v0,hvF;TteKxQfCݹ˶[Gbm1hdY s4ӧ'OI;C9w=~kW'/93֒ki4JmR߄.0]pKk-Wcf1X7rKgde[xs:)9|*93:Q :离[ޕ8g%[SQb9 1J·u/'sN wσJ~YuV/PCl[s{7b Xzf>P/ͬ4fךgn{(* 4R}; =<6kcZMn}ExSɡg%Y# NxWgK1b W/Lu-D+RyXic76-aUR&XgGj[l$!ljpv+xyצ,_-ΐI3-9^v!iAHlan׏>T-T V?⪡qi7Pb!/y))6^Č^QZUxrAfM(gfB8Lܘ`'aikaO..t^*QJe(%YI|ޠYIg`ef` F+Ԁhت뷨kt6CzBZYϮwG^$N3Fp8@F5SE_EvFc6kGOKE##@u0G7HHHHHHHHHHHHHH~%ww?OO"Eogzigcbmg4fl,6Xrkt&[lHםx#X]pq]w_I3-3iz(sze$y0uugb #c*qW&ޕwn$H&蕄9Y{W戅zhpiz 9b#ecWy6Bg(S!J jY8kuiZ`lr*q¨.mVdL@(/50U٦eA-tFʮ 8 >CSi.Qr?_@Xu,t>a4 oo1QL]͠Ek)Vxj<$wȬBc8Ƅ,,[!n}yЍc-PF^õ3YXi>5a.#;%ը!nF7l7 `sNNiQLgsX2/1ુ"OB7|<7O-cX'S;-T?I aHS0HHHHHHHHHHHHHH>;C575w~z n| ½t{ K}9CWup|~f_u0mCl\a# ;_w+!ZP[ZS(Rد<+,w^yWjZŸgeֿs/Fݫu'ԎpSgKs|$K!-RV=A!ōï0vc%ĸL!P6Vph ;ƍ]KbUyMQKrO-hS )؈7 :oT-+YjRӣcz 7R,Mخ`Jd`UA<3X?k`%jQ>W$HmʑZmtV݀E5T ZCvs^e(ι BWJ'/59l'"}YOM$osX |@V=oVnwut7 &z0dWqg] O _s;3Ͼm0ėOx5$/xv\CV: -BK:t~|KchΙ?{uĀ(ھ3{U]U]%DUD:$;cqK8_3gVp;gNœ9}HDHi07n?5T5_sgŖMo4wvRV4e6Y2nn/i(E2tWPg1l7.n*(LKTUe:q%`gnղ8eQR(Њ ^V:HE^Z2( a*O΍4+f7y:Pzhisrh㻄^Ea!Vڨ2(jM-6ˡ &`9[ĕ|P$NLQYb4bT: 'lf@ZN\B,+ݚA *NV *B EA>ƨ*C?u4\ ZUME l Ԓ4_#3#_:".ٓ7qv%yjviMx` !!ƙ@x` ׍;iZQa2X[Pٙ ,oti ݙfA?w;X{tɑ#֣'l?~uQ xHg&y2!Rߥ[=9`^~΁xή5nN~b略gvo97ۉ s|9(֩KZ'ϵ|ݗOM ;DzC:ԿL"Y[2؜ȄxFhg3dll6TS؞_iF+U%4K exC|3QX`t#W\iC/2)-  q%AYX)6-+4Kb~ WQuRh­9@"hԙT`P`KS*a\J {+VP)C:1ߪt! _^6|iZP*Jp2̢EZyFfQKUHc"}E. ]$hhM}x䥖ɋmcxrz4GG/=W::}iXNzEj CI镝]h]A{[FyG^Z lo˪;ˁTiȓYYʮ\:RnsqB #f.;g;J@@@@@@5SNR0íSwn(nޘv̱ng޻7S>rh_ڭG[ |䙲GK:VzӝgKE!;>j<`]?PץJ7sV։&F;Ϋ=ff;# ykv_@n8J鮳2= Lnx(>֩Lm.1s ;Z7%֪K8:yH'6N7P?ځbL8۬E#Ck5h;YIň9ugq";T[ș$0IeZʆayRp8KK} $r#"Ne,d3 +*>eBvQy/ARndgg XJ#ebd/" 2D*Fe %zyQ#AK8~~^@5,Q:Q9\L/j$E*IJ)"Ģ)D(ő^C򲔓}kzݓ]ѝ8M={7'gw&D頽ecb}Krº*$ga+`Tvaޖw;VWt<$bB[ߙ`ۀ_}3{*VyO8Ǐۏ:Zr%4{]kv|Kϓ{ҋ"MYRbrmuz5׽!]7]oХ5s0nhޒ]t2yLR?bK7MzwM(98Zݯ-)EK+}E19zˆ6,"*L &. z9Z6(KsAV.͕p nѝ &ޚPLCCs&]Z1N9`0G[f .q(m:IFTJ4|5X"4KDz/fl}uB w ;q.zdңoNzΐs߷:tȱc񺭇Wo.std9ڲ+;s۳|p F/ζ"֚s₮K ݹ9 Ζtk]:ѝ n@@@@@@@ 'Nُ/?vqHɱsfwk esG{mؙٶNo2Wҗeh2s|@ܚᄎ~s`ѤJw3l'6L"eLO1ӥ&=c:O^hf%MS^ A]5Q6fw̳[]T]KU`H\.RM~@Mز9Ϯ/HVjlAReVTĩ 9z0[+clZapVbͷ¨p94["f' KEiEPg\Kbs "d9QDveslm #'&s 2 wQD-NFʖ| ׆fyúj_ZU#]HP\B([NW|b|Ѭ=Լb9;4]GߜН6[8oKm3;δo>аf}++Ed vdvj8C7cFƇؾo;[jӊ2"gk[(X/jᬚ.f)[ϴ[5Gw>u)|X#G{ɷOw1ǡ{֏$4uR #sTKuXM(چs(dcU7D,m}mLO1ӥ&=EIFZaq}SJ%Vį JSunXm^qy ͖ J֨6ʋt*R,{| 2F#IUfEV -~^ oc2B'4zQ3**MR() ,.6Ŭ,QP %`߹(ϓ+Kx$RQ=c!ym(D ̡ q|@2wLfPTUf%dZqZdQU#EA6TZXsTE ~^a^)G'g>ynsmζy3!mN:4uezrZgw8ִak+ޖhG,p`Egc .UK8gp7#;7[,uNaI[>\_& \ݹw|ҝ.;vQ/;]G.[Ի)Jʏ00Ew %3.(!7.7Hšc[#\x2;]mң|Fh {5.)U S/ NgŖ')zKF]*36,Y6PԖ_WfE-.H8C~uuJ*_.TxS~1^ bk㴕z㬧^$c(.4) 1f&*0(JAr3ݙ !0"@q6 r2Ș ~e!0NRm*A. "8Jԡ :bBL~aȽڨ@7R-$*"mHB8_I)^418K}#|[_=ueRw=Dw&ـ'd|3pb+[/6ﺿub٦ M盶_^#3ju!lJs;le-(Ȇᒡ.1^ܘn;ѝ ~!n;Eg\_Jw>|撞*'NWl]gJ)&j'D PpCCnvq< #Iwdﶎ.ټ>uqPx39G rѥ&=841[fηLڒfa"abNe2}lC'ҝ;3FWGZK+r(+Rx}ߚ-֒a[Hw&p3u!W{*=uкH/>^~ȉyRqNg7J90h5Iƴ Kd] ԝ0ƀ564`noJ\=gJ˄.<ٷaz^mpK7Mze3Vmm˩_R_CtHFМcm+j+ŊǺVZ]^'СҨHr_~"~_"JQpYٵJ,)JRxQR_^ 襎XVBZIhi^dӊzM+GC~K^Ȑ\)Ǯ%Hw֡*C'˗T)&N0G<0bW35Йy*Wq2%ҝ:Nʠh2?igU628cɩ<9]+Ey ArbBȐ|^ۮMgjfo<:ymBYg;ތSּRĹ񳍓9xKc6d\9O/Kj2lL1fȴ38SK撦nk[HyzKEg5ޖ]ޞdg F;XG@@@@@@5S*E __ Hw^7BmB ΋|ie=1 KPqç*TWWCM!D,=;u/¶S Cq7$voJΛ>SB:$ɝo8ݰb+6q܉3 S=8yLxeC6щ. w>uyǩZ1gw3bTpL |\Mܒ q<-Q-"؅)&'5k j;MN\)7:Ƀ͖vLc8nj/(,WZkrsLUIQV&VQ9^o~w'T'-P:CuR/$e::t* \[X$ A+u(MZvh)*7+LrFȉEeRBV*=Y +)Lۡr(K%\X x% e|^\n~}g-32KsL`\!e,ҩRt4r*YB*yJqB/E`(VEIQMfU` nHHxb8S?|GW9O@"'3#Wb'F#2%,I|dn}ڹxβ;jgԚ i\GKAy{~YkVy{^M-=#-= ;D۲H݁\K[K-ٶ,Zi%3,;w|6;eecaXźSe=v86Fw>]{q1ȷ#%)ڀ{Z8YkN)R'/ӥ3B +U7$u: ʟK F;RlJ;Y5}/N;~-Pd K"])w ӦEv&HR-#^20O/7ʡЙP)ct|P))TH H}.TJ r2",χ+5-y]ĩSpg.tV%$' 3ual#5Ww%M9Byb@J[LN(ʓ#S?"L-W7fQо%ϱ6!VYɴkSU%YEi[jSyܪ,{{FyGfesB{[#ޚU֔YڔQTZTVTn0fJ h# To |ۀ Mu羙Uk6r!䩺'HψG-HYCGJ0$-1ۡcut'9ʄUb>-Dft &辌 3fkam/4?۰b+ etg<Ÿ$~i~~Cw_h{mD஢Sgr8^ehȼR̥6|iBӨsgpU@]z(AyӱKMcg7״-NFjDqumŃm%uᮒ„8C+2ʋU9z9?ȗ_ WPvo;Qe ,+ ˩@o?G2(O&6m:MGq D+JEJx~K +  yOZ:97Vђ lfM#N]EG|C_: J,nWUa`""n6,@!(7):i.TJqJ:*Y68~}|QvwH]Zvk a)AWԹsS' εl|q0-N`e%Xiv*j6Jכ:U-ս^UuTWӗZ?mJN+ ʴq\8.RϓZ %ҦL{[fyGvEg=%9=іmk*kδ6dX3 +S o 8 w <,;̔:P;zqYgFw.?rKeUѣ3%6olͪHOit)| j"+6(]!K?P|DŁÛ3rĥ C2uB`rADMk$c ͎U G&Ǐb]Lbݵ[ 6NG46٘onk3u 'bz-m#^Ozb+D.vę -f ݄9P\t<.]f.4yښvVz!@/Ӌ}C%l:кmvJZ5;de¤,7)ҩi/w0`"?frNz`ZQ^Xne%tprU0 v PءA=@,#ݖ\&>\ DNEEѺ|߹L+.ݬiQEب0ʵfN̍}xA^ʼnJR'k=/ByAf }d1?% ̕K2y:Sy :W!c,P tLT)*i eF,Xoyv||q 9X4!7U1Bd̕?r3w0:& ƎUo=*1P5``e؂=y'N킔sMۏV [hE=l_5}GNԌ-ҵ6v4#=C3Z D""BfOoyipVXFDZ8$E=+#:ѝ{CKYWqju 4jFp}E//R]'Yr$-Ӊx?ZOg^aQvTJjJ+rVRA^vĮe >*T[$ ND6-`+ GFMW(L+g cWkZ)ڞWcAZnVUK>q} VP)ʗS 'V!ĻJQZVfJzVll@pb/8;_Բ>}KS[aG=Ht'aL$<{B>D/e^b[(} S'#'g߈m ۝'kOC x8m?Y5hXuݓTN9z&lEy5S@׬(Wr(]8!OU`k*pٚ3Z,iEiiEt;'<ٙ4XPv+ÂGK`!,3m)SZWpvvCwFfKP1,>p1ۑ#[/>vrlR)T| CzhvCwS;e@|s1;nKF@|PCc'kB5LX>V[۟[HS$~1Q(Ȇ-SBjt l@@2%/*N~$ėw47[̱!uXeЋZq͒-,,-zpˌH8Fs`n+8wC,Co_ao#'kw[7$u &4f@<6P؏mY}y7ulLY5}dw&odU͈ =6,uNUM6xQCK}eީX^V.l*bV,o XCŘ-T,-PvX) y%KKo̡+ 2C~t$q2/JBkާ[Zʲ *tryOdvYTnj U@/bY_T`Z&Ά^bKnRhP eD -p(VHWDWpe9@ho|+2<_E%L` `LT !Y%CJQBϋC#D(+L˦.1kEi:4va #C3g] !r|ډ oVƣitؙ:|Nd7LBu;OUCf9n|Թ(ti:46Ƽ5i8<}cΩg[f.OnvlɮRhY2m:[[V<*12>O_hmHgX25tww{N N&pn#ٕ>6ܺhxukv^nҿld_Ȟ*Ȇt3ꏞ>R~XÖ#Go9?P ۾}ܡ)e1ĥ`ub"> ,c(kfn3@8+@;5~s[}0g(GQ/ bQVԉ+t X-2FD^ƾނ@?2dNXKbސn2 mӋlG[ %.(hEvFQ*6BhZ-2,Sr[Wۢ^b3|ӤZ-rB̖򔫖 ~|o8wd8^Ct 1cSr~Z)+CcFtؒ-j&ϴLn80q /1Er؁rS譸HU欪M4&H"2G"clPXZTVTK]iQӚ H8䔟gԛgg.֑q+K9-|٧} /kgzXYԦ^cq- 3!|)ö#G9b1{]eּ (Pρ=bi ] }򔢈>S[/b{kl0wo*S-ҳ3}CRc>1@ hkj1%@+WLrȱaoɶ#wo<8.`a옐N 0}֙mTΓcԺNđʈUl ʬ*k,l-j+j-oXۊlb.GFua9TJEC 2]BL+)U7g;R^ZE.ڦZQ9jR6<rEP0 :1Jыdn(M/Dh?RZvmZM ]s^#I}L g͍)rvoߩ;Cqʮq9bjRhNW"i%:;ug,=c(|Ҡ(YG{/YDZYf|ж|(9t ^o)(qڝηn9Z3Uֶ`Gr+F.EVdԦP,nSZvg\x.`1ST WWg5&vnؘ9gjѵ -}TȆt돞)Y)x;bcblcyfIjU|z/3́j!8;gw_XFklJX=ff>ccvQN(= PδeƵے10Y:oZ%}DZ3Hz;Yba0``'j!utVS8Ӎ'N7Nj?Q粷rbDMy\,E}ˋUTUb]ypmxddł|ۊJ,%ݕ9:l ]X0w1$7ʊ!٥;V')Պm:$"3ئq1+$~\?o~>jE!Zй %EL/iCT0yB$ƟZ1C@ntZQVADK}~K~ީ5 nՓ[ѲT^(ț({wbeHDPʝם\ !j"y>a>)ܵO N{I $Zk;N8U=uiץ]:7W7mNI-1% eIVJ Qɳa] 47nz4VXpj7S]%Ã? }P_ݥh5vemؚ96vv1!عڣgJ>b;r~]kv'݉ch܌[a ػc9r!9XL,>;֨l3wز[~`4CF FS/"L:|"ys[ Hi57E{u]-ǎ"D * ĶSOS>ӰtǠ@8uq*& 諛jy,v(bUu몳Z}-&`Kt!QhgIZmLCjyRrEw4/]mՈl:l;.!a5Rrh<_8K DND1:^] Bʥ<\%\ڈ"9R´lWJ݂( ^jQR H:ȗ㷄{&,HIiѲ(NM/D1l)N0ʭj:) x} 1yrڪKyr Q!Εd\8HVWUa&ن'&O6MB <B|b%=;pf'jqzs-;Oo>Tյ%z]Bq.Jӆ1elyX`']6=߹씖g}$t?zh7 *CK@cZ158)'!șڣJ=j?zqsf| ou%= Ǫt;c:I ]ȮYUT~4$@*{RxѥXʉebdhE%#)Vr}q|A>܈bҢ6=򳾥^,F8ȓ +@q;fC7lTM]B?n 8ƘU@o0G*S/RI ttg(GNE*YZؠUnyn\SSN6M B¯].'zzN6.Y-q0֡˭RȍY27sbJ@@@@@@p)?3 Ny^<>;ypn4|f;npO6&Ƈ#Sr"Ixy f4LO"%= yͅZ,EͅC-ET;7udU&lZIh$^8O-Z4\8ugD#reH>DYoZ!BA63K<(b"q.jiL:qR*r|)Wee:$7CCXwƭlٹDpNf6#{KSlQR6h{pk) ݹTM2Ԫc塁lE1^ߠ&p2aL8_wΕHwV3**, F6tl?Ud' / >#(Ar.uY|ΪLktnY[&Z=ِ|Tѣێ-?p2AЌo={`{YS3E5Ҝ(c6֝[כhϓ}? ]kE;m:y#;,0cl\B合#{0 iSm[;Fwng:ٰ\M{m֡)KXp}$s4cCJώѽeۏTm;\i}r1}v 7)ݙ|Q|hvQc